From 7df8c87508e8ed5a4ed2a905714d2c30997580fc Mon Sep 17 00:00:00 2001 From: michael1011 Date: Thu, 27 Feb 2025 16:18:52 +0100 Subject: [PATCH 1/2] feat: gRPC method to get pending EVM transactions --- lib/Utils.ts | 3 + lib/cli/commands/GetPendingEvmTransactions.ts | 27 + lib/db/models/PendingEthereumTransaction.ts | 4 +- lib/grpc/GrpcServer.ts | 1 + lib/grpc/GrpcService.ts | 56 +- lib/proto/boltzrpc_grpc_pb.d.ts | 17 + lib/proto/boltzrpc_grpc_pb.js | 35 +- lib/proto/boltzrpc_pb.d.ts | 89 +++ lib/proto/boltzrpc_pb.js | 721 ++++++++++++++++++ lib/proto/cln/node_grpc_pb.js | 2 +- lib/proto/hold/hold_grpc_pb.js | 2 +- lib/proto/lnd/invoices_grpc_pb.js | 2 +- lib/proto/lnd/router_grpc_pb.js | 2 +- lib/proto/lnd/rpc_grpc_pb.js | 2 +- lib/proto/sidecar/boltzr_grpc_pb.js | 2 +- lib/wallet/ethereum/EthereumManager.ts | 19 + lib/wallet/ethereum/contracts/Contracts.ts | 53 ++ proto/boltzrpc.proto | 20 + .../wallet/ethereum/EthereumManager.spec.ts | 22 + .../ethereum/contracts/Contracts.spec.ts | 70 +- test/unit/Utils.spec.ts | 13 + test/unit/grpc/GrpcService.spec.ts | 157 +++- 22 files changed, 1306 insertions(+), 13 deletions(-) create mode 100644 lib/cli/commands/GetPendingEvmTransactions.ts diff --git a/lib/Utils.ts b/lib/Utils.ts index 881d5fdfd..f05057b04 100644 --- a/lib/Utils.ts +++ b/lib/Utils.ts @@ -642,3 +642,6 @@ export const bigIntMax = (a: bigint, b: bigint) => (a > b ? a : b); export const roundToDecimals = (value: number, decimals: number): number => Number(value.toFixed(decimals)); + +export const removeHexPrefix = (hex: string): string => + hex.startsWith('0x') ? hex.substring(2) : hex; diff --git a/lib/cli/commands/GetPendingEvmTransactions.ts b/lib/cli/commands/GetPendingEvmTransactions.ts new file mode 100644 index 000000000..5d43c0e29 --- /dev/null +++ b/lib/cli/commands/GetPendingEvmTransactions.ts @@ -0,0 +1,27 @@ +import { Arguments } from 'yargs'; +import { getHexString } from '../../Utils'; +import { GetPendingEvmTransactionsRequest } from '../../proto/boltzrpc_pb'; +import { ApiType, BuilderTypes } from '../BuilderComponents'; +import { callback, loadBoltzClient } from '../Command'; + +export const command = 'pendingevmtransactions'; + +export const describe = 'get pending EVM transactions'; + +export const builder = {}; + +export const handler = ( + argv: Arguments & ApiType>, +) => { + const request = new GetPendingEvmTransactionsRequest(); + loadBoltzClient(argv).getPendingEvmTransactions( + request, + callback((res) => { + return res.getTransactionsList().map((tx) => ({ + ...tx.toObject(), + hash: getHexString(Buffer.from(tx.getHash() as string, 'base64')), + hex: getHexString(Buffer.from(tx.getHex() as string, 'base64')), + })); + }), + ); +}; diff --git a/lib/db/models/PendingEthereumTransaction.ts b/lib/db/models/PendingEthereumTransaction.ts index 02353ae8a..ac46d7e58 100644 --- a/lib/db/models/PendingEthereumTransaction.ts +++ b/lib/db/models/PendingEthereumTransaction.ts @@ -3,7 +3,7 @@ import { DataTypes, Model, Sequelize } from 'sequelize'; type PendingEthereumTransactionType = { hash: string; nonce: number; - etherAmount: bigint; + etherAmount: number; hex: string; }; @@ -13,7 +13,7 @@ class PendingEthereumTransaction { public hash!: string; public nonce!: number; - public etherAmount!: bigint; + public etherAmount!: number; public hex!: string; public static load = (sequelize: Sequelize): void => { diff --git a/lib/grpc/GrpcServer.ts b/lib/grpc/GrpcServer.ts index 7d3451ed4..32feffe34 100644 --- a/lib/grpc/GrpcServer.ts +++ b/lib/grpc/GrpcServer.ts @@ -41,6 +41,7 @@ class GrpcServer { getLockedFunds: grpcService.getLockedFunds, getPendingSweeps: grpcService.getPendingSweeps, getLabel: grpcService.getLabel, + getPendingEvmTransactions: grpcService.getPendingEvmTransactions, setLogLevel: grpcService.setLogLevel, calculateTransactionFee: grpcService.calculateTransactionFee, getReferrals: grpcService.getReferrals, diff --git a/lib/grpc/GrpcService.ts b/lib/grpc/GrpcService.ts index 1259dd3f7..46eef754a 100644 --- a/lib/grpc/GrpcService.ts +++ b/lib/grpc/GrpcService.ts @@ -5,15 +5,23 @@ import { parseTransaction } from '../Core'; import { dumpHeap } from '../HeapDump'; import Logger, { LogLevel as BackendLevel } from '../Logger'; import { wait } from '../PromiseUtils'; -import { getHexString, getUnixTime, stringify } from '../Utils'; +import { + getHexBuffer, + getHexString, + getUnixTime, + removeHexPrefix, + stringify, +} from '../Utils'; import { CurrencyType, swapTypeToPrettyString } from '../consts/Enums'; import Referral, { ReferralConfig } from '../db/models/Referral'; +import PendingEthereumTransactionRepository from '../db/repositories/PendingEthereumTransactionRepository'; import ReferralRepository from '../db/repositories/ReferralRepository'; import TransactionLabelRepository from '../db/repositories/TransactionLabelRepository'; import * as boltzrpc from '../proto/boltzrpc_pb'; import { LogLevel } from '../proto/boltzrpc_pb'; import Service from '../service/Service'; import Sidecar from '../sidecar/Sidecar'; +import { Rsk } from '../wallet/ethereum/EvmNetworks'; class GrpcService { constructor( @@ -380,6 +388,52 @@ class GrpcService { }); }; + public getPendingEvmTransactions: handleUnaryCall< + boltzrpc.GetPendingEvmTransactionsRequest, + boltzrpc.GetPendingEvmTransactionsResponse + > = async (call, callback) => { + await this.handleCallback(call, callback, async () => { + const response = new boltzrpc.GetPendingEvmTransactionsResponse(); + const txsGrpcList = response.getTransactionsList(); + + for (const tx of await PendingEthereumTransactionRepository.getTransactions()) { + const txGrpc = + new boltzrpc.GetPendingEvmTransactionsResponse.Transaction(); + + const symbol = Rsk.symbol; + + txGrpc.setSymbol(symbol); + txGrpc.setHash(getHexBuffer(removeHexPrefix(tx.hash))); + txGrpc.setHex(getHexBuffer(removeHexPrefix(tx.hex))); + txGrpc.setNonce(tx.nonce); + txGrpc.setAmountSent(tx.etherAmount.toString()); + + { + const label = await TransactionLabelRepository.getLabel(tx.hash); + if (label !== null) { + txGrpc.setLabel(label.label); + } + } + + { + const manager = this.service.walletManager.ethereumManagers.find( + (m) => m.hasSymbol(symbol), + ); + if (manager !== undefined) { + const received = await manager.getClaimedAmount(tx.hex); + if (received !== undefined) { + txGrpc.setAmountReceived(received.toString()); + } + } + } + + txsGrpcList.push(txGrpc); + } + + return response; + }); + }; + public setLogLevel: handleUnaryCall< boltzrpc.SetLogLevelRequest, boltzrpc.SetLogLevelResponse diff --git a/lib/proto/boltzrpc_grpc_pb.d.ts b/lib/proto/boltzrpc_grpc_pb.d.ts index 71a4b0384..974066b74 100644 --- a/lib/proto/boltzrpc_grpc_pb.d.ts +++ b/lib/proto/boltzrpc_grpc_pb.d.ts @@ -26,6 +26,7 @@ interface IBoltzService extends grpc.ServiceDefinition; responseDeserialize: grpc.deserialize; } +interface IBoltzService_IGetPendingEvmTransactions extends grpc.MethodDefinition { + path: "/boltzrpc.Boltz/GetPendingEvmTransactions"; + requestStream: false; + responseStream: false; + requestSerialize: grpc.serialize; + requestDeserialize: grpc.deserialize; + responseSerialize: grpc.serialize; + responseDeserialize: grpc.deserialize; +} interface IBoltzService_IGetReferrals extends grpc.MethodDefinition { path: "/boltzrpc.Boltz/GetReferrals"; requestStream: false; @@ -262,6 +272,7 @@ export interface IBoltzServer extends grpc.UntypedServiceImplementation { listSwaps: grpc.handleUnaryCall; rescan: grpc.handleUnaryCall; getLabel: grpc.handleUnaryCall; + getPendingEvmTransactions: grpc.handleUnaryCall; getReferrals: grpc.handleUnaryCall; setReferral: grpc.handleUnaryCall; calculateTransactionFee: grpc.handleUnaryCall; @@ -324,6 +335,9 @@ export interface IBoltzClient { getLabel(request: boltzrpc_pb.GetLabelRequest, callback: (error: grpc.ServiceError | null, response: boltzrpc_pb.GetLabelResponse) => void): grpc.ClientUnaryCall; getLabel(request: boltzrpc_pb.GetLabelRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: boltzrpc_pb.GetLabelResponse) => void): grpc.ClientUnaryCall; getLabel(request: boltzrpc_pb.GetLabelRequest, metadata: grpc.Metadata, options: Partial, callback: (error: grpc.ServiceError | null, response: boltzrpc_pb.GetLabelResponse) => void): grpc.ClientUnaryCall; + getPendingEvmTransactions(request: boltzrpc_pb.GetPendingEvmTransactionsRequest, callback: (error: grpc.ServiceError | null, response: boltzrpc_pb.GetPendingEvmTransactionsResponse) => void): grpc.ClientUnaryCall; + getPendingEvmTransactions(request: boltzrpc_pb.GetPendingEvmTransactionsRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: boltzrpc_pb.GetPendingEvmTransactionsResponse) => void): grpc.ClientUnaryCall; + getPendingEvmTransactions(request: boltzrpc_pb.GetPendingEvmTransactionsRequest, metadata: grpc.Metadata, options: Partial, callback: (error: grpc.ServiceError | null, response: boltzrpc_pb.GetPendingEvmTransactionsResponse) => void): grpc.ClientUnaryCall; getReferrals(request: boltzrpc_pb.GetReferralsRequest, callback: (error: grpc.ServiceError | null, response: boltzrpc_pb.GetReferralsResponse) => void): grpc.ClientUnaryCall; getReferrals(request: boltzrpc_pb.GetReferralsRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: boltzrpc_pb.GetReferralsResponse) => void): grpc.ClientUnaryCall; getReferrals(request: boltzrpc_pb.GetReferralsRequest, metadata: grpc.Metadata, options: Partial, callback: (error: grpc.ServiceError | null, response: boltzrpc_pb.GetReferralsResponse) => void): grpc.ClientUnaryCall; @@ -397,6 +411,9 @@ export class BoltzClient extends grpc.Client implements IBoltzClient { public getLabel(request: boltzrpc_pb.GetLabelRequest, callback: (error: grpc.ServiceError | null, response: boltzrpc_pb.GetLabelResponse) => void): grpc.ClientUnaryCall; public getLabel(request: boltzrpc_pb.GetLabelRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: boltzrpc_pb.GetLabelResponse) => void): grpc.ClientUnaryCall; public getLabel(request: boltzrpc_pb.GetLabelRequest, metadata: grpc.Metadata, options: Partial, callback: (error: grpc.ServiceError | null, response: boltzrpc_pb.GetLabelResponse) => void): grpc.ClientUnaryCall; + public getPendingEvmTransactions(request: boltzrpc_pb.GetPendingEvmTransactionsRequest, callback: (error: grpc.ServiceError | null, response: boltzrpc_pb.GetPendingEvmTransactionsResponse) => void): grpc.ClientUnaryCall; + public getPendingEvmTransactions(request: boltzrpc_pb.GetPendingEvmTransactionsRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: boltzrpc_pb.GetPendingEvmTransactionsResponse) => void): grpc.ClientUnaryCall; + public getPendingEvmTransactions(request: boltzrpc_pb.GetPendingEvmTransactionsRequest, metadata: grpc.Metadata, options: Partial, callback: (error: grpc.ServiceError | null, response: boltzrpc_pb.GetPendingEvmTransactionsResponse) => void): grpc.ClientUnaryCall; public getReferrals(request: boltzrpc_pb.GetReferralsRequest, callback: (error: grpc.ServiceError | null, response: boltzrpc_pb.GetReferralsResponse) => void): grpc.ClientUnaryCall; public getReferrals(request: boltzrpc_pb.GetReferralsRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: boltzrpc_pb.GetReferralsResponse) => void): grpc.ClientUnaryCall; public getReferrals(request: boltzrpc_pb.GetReferralsRequest, metadata: grpc.Metadata, options: Partial, callback: (error: grpc.ServiceError | null, response: boltzrpc_pb.GetReferralsResponse) => void): grpc.ClientUnaryCall; diff --git a/lib/proto/boltzrpc_grpc_pb.js b/lib/proto/boltzrpc_grpc_pb.js index 12bb543b1..f7bab153d 100644 --- a/lib/proto/boltzrpc_grpc_pb.js +++ b/lib/proto/boltzrpc_grpc_pb.js @@ -246,6 +246,28 @@ function deserialize_boltzrpc_GetLockedFundsResponse(buffer_arg) { return boltzrpc_pb.GetLockedFundsResponse.deserializeBinary(new Uint8Array(buffer_arg)); } +function serialize_boltzrpc_GetPendingEvmTransactionsRequest(arg) { + if (!(arg instanceof boltzrpc_pb.GetPendingEvmTransactionsRequest)) { + throw new Error('Expected argument of type boltzrpc.GetPendingEvmTransactionsRequest'); + } + return Buffer.from(arg.serializeBinary()); +} + +function deserialize_boltzrpc_GetPendingEvmTransactionsRequest(buffer_arg) { + return boltzrpc_pb.GetPendingEvmTransactionsRequest.deserializeBinary(new Uint8Array(buffer_arg)); +} + +function serialize_boltzrpc_GetPendingEvmTransactionsResponse(arg) { + if (!(arg instanceof boltzrpc_pb.GetPendingEvmTransactionsResponse)) { + throw new Error('Expected argument of type boltzrpc.GetPendingEvmTransactionsResponse'); + } + return Buffer.from(arg.serializeBinary()); +} + +function deserialize_boltzrpc_GetPendingEvmTransactionsResponse(buffer_arg) { + return boltzrpc_pb.GetPendingEvmTransactionsResponse.deserializeBinary(new Uint8Array(buffer_arg)); +} + function serialize_boltzrpc_GetPendingSweepsRequest(arg) { if (!(arg instanceof boltzrpc_pb.GetPendingSweepsRequest)) { throw new Error('Expected argument of type boltzrpc.GetPendingSweepsRequest'); @@ -721,6 +743,17 @@ getPendingSweeps: { responseSerialize: serialize_boltzrpc_GetLabelResponse, responseDeserialize: deserialize_boltzrpc_GetLabelResponse, }, + getPendingEvmTransactions: { + path: '/boltzrpc.Boltz/GetPendingEvmTransactions', + requestStream: false, + responseStream: false, + requestType: boltzrpc_pb.GetPendingEvmTransactionsRequest, + responseType: boltzrpc_pb.GetPendingEvmTransactionsResponse, + requestSerialize: serialize_boltzrpc_GetPendingEvmTransactionsRequest, + requestDeserialize: deserialize_boltzrpc_GetPendingEvmTransactionsRequest, + responseSerialize: serialize_boltzrpc_GetPendingEvmTransactionsResponse, + responseDeserialize: deserialize_boltzrpc_GetPendingEvmTransactionsResponse, + }, getReferrals: { path: '/boltzrpc.Boltz/GetReferrals', requestStream: false, @@ -778,4 +811,4 @@ getPendingSweeps: { }, }; -exports.BoltzClient = grpc.makeGenericClientConstructor(BoltzService); +exports.BoltzClient = grpc.makeGenericClientConstructor(BoltzService, 'Boltz'); diff --git a/lib/proto/boltzrpc_pb.d.ts b/lib/proto/boltzrpc_pb.d.ts index de6692ba1..5a41e17ec 100644 --- a/lib/proto/boltzrpc_pb.d.ts +++ b/lib/proto/boltzrpc_pb.d.ts @@ -1028,6 +1028,95 @@ export namespace GetLabelResponse { } } +export class GetPendingEvmTransactionsRequest extends jspb.Message { + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): GetPendingEvmTransactionsRequest.AsObject; + static toObject(includeInstance: boolean, msg: GetPendingEvmTransactionsRequest): GetPendingEvmTransactionsRequest.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: GetPendingEvmTransactionsRequest, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): GetPendingEvmTransactionsRequest; + static deserializeBinaryFromReader(message: GetPendingEvmTransactionsRequest, reader: jspb.BinaryReader): GetPendingEvmTransactionsRequest; +} + +export namespace GetPendingEvmTransactionsRequest { + export type AsObject = { + } +} + +export class GetPendingEvmTransactionsResponse extends jspb.Message { + clearTransactionsList(): void; + getTransactionsList(): Array; + setTransactionsList(value: Array): GetPendingEvmTransactionsResponse; + addTransactions(value?: GetPendingEvmTransactionsResponse.Transaction, index?: number): GetPendingEvmTransactionsResponse.Transaction; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): GetPendingEvmTransactionsResponse.AsObject; + static toObject(includeInstance: boolean, msg: GetPendingEvmTransactionsResponse): GetPendingEvmTransactionsResponse.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: GetPendingEvmTransactionsResponse, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): GetPendingEvmTransactionsResponse; + static deserializeBinaryFromReader(message: GetPendingEvmTransactionsResponse, reader: jspb.BinaryReader): GetPendingEvmTransactionsResponse; +} + +export namespace GetPendingEvmTransactionsResponse { + export type AsObject = { + transactionsList: Array, + } + + + export class Transaction extends jspb.Message { + getSymbol(): string; + setSymbol(value: string): Transaction; + getHash(): Uint8Array | string; + getHash_asU8(): Uint8Array; + getHash_asB64(): string; + setHash(value: Uint8Array | string): Transaction; + getHex(): Uint8Array | string; + getHex_asU8(): Uint8Array; + getHex_asB64(): string; + setHex(value: Uint8Array | string): Transaction; + + hasLabel(): boolean; + clearLabel(): void; + getLabel(): string | undefined; + setLabel(value: string): Transaction; + getNonce(): number; + setNonce(value: number): Transaction; + getAmountSent(): string; + setAmountSent(value: string): Transaction; + + hasAmountReceived(): boolean; + clearAmountReceived(): void; + getAmountReceived(): string | undefined; + setAmountReceived(value: string): Transaction; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): Transaction.AsObject; + static toObject(includeInstance: boolean, msg: Transaction): Transaction.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: Transaction, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): Transaction; + static deserializeBinaryFromReader(message: Transaction, reader: jspb.BinaryReader): Transaction; + } + + export namespace Transaction { + export type AsObject = { + symbol: string, + hash: Uint8Array | string, + hex: Uint8Array | string, + label?: string, + nonce: number, + amountSent: string, + amountReceived?: string, + } + } + +} + export class GetReferralsRequest extends jspb.Message { hasId(): boolean; diff --git a/lib/proto/boltzrpc_pb.js b/lib/proto/boltzrpc_pb.js index 74c82ae8a..b1a18d206 100644 --- a/lib/proto/boltzrpc_pb.js +++ b/lib/proto/boltzrpc_pb.js @@ -49,6 +49,9 @@ goog.exportSymbol('proto.boltzrpc.GetLabelRequest', null, global); goog.exportSymbol('proto.boltzrpc.GetLabelResponse', null, global); goog.exportSymbol('proto.boltzrpc.GetLockedFundsRequest', null, global); goog.exportSymbol('proto.boltzrpc.GetLockedFundsResponse', null, global); +goog.exportSymbol('proto.boltzrpc.GetPendingEvmTransactionsRequest', null, global); +goog.exportSymbol('proto.boltzrpc.GetPendingEvmTransactionsResponse', null, global); +goog.exportSymbol('proto.boltzrpc.GetPendingEvmTransactionsResponse.Transaction', null, global); goog.exportSymbol('proto.boltzrpc.GetPendingSweepsRequest', null, global); goog.exportSymbol('proto.boltzrpc.GetPendingSweepsResponse', null, global); goog.exportSymbol('proto.boltzrpc.GetReferralsRequest', null, global); @@ -946,6 +949,69 @@ if (goog.DEBUG && !COMPILED) { */ proto.boltzrpc.GetLabelResponse.displayName = 'proto.boltzrpc.GetLabelResponse'; } +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.boltzrpc.GetPendingEvmTransactionsRequest = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.boltzrpc.GetPendingEvmTransactionsRequest, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.boltzrpc.GetPendingEvmTransactionsRequest.displayName = 'proto.boltzrpc.GetPendingEvmTransactionsRequest'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.boltzrpc.GetPendingEvmTransactionsResponse = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.boltzrpc.GetPendingEvmTransactionsResponse.repeatedFields_, null); +}; +goog.inherits(proto.boltzrpc.GetPendingEvmTransactionsResponse, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.boltzrpc.GetPendingEvmTransactionsResponse.displayName = 'proto.boltzrpc.GetPendingEvmTransactionsResponse'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.boltzrpc.GetPendingEvmTransactionsResponse.Transaction = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.boltzrpc.GetPendingEvmTransactionsResponse.Transaction, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.boltzrpc.GetPendingEvmTransactionsResponse.Transaction.displayName = 'proto.boltzrpc.GetPendingEvmTransactionsResponse.Transaction'; +} /** * Generated by JsPbCodeGenerator. * @param {Array=} opt_data Optional initial data array, typically from a @@ -8373,6 +8439,661 @@ proto.boltzrpc.GetLabelResponse.prototype.setLabel = function(value) { +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.boltzrpc.GetPendingEvmTransactionsRequest.prototype.toObject = function(opt_includeInstance) { + return proto.boltzrpc.GetPendingEvmTransactionsRequest.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.boltzrpc.GetPendingEvmTransactionsRequest} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.boltzrpc.GetPendingEvmTransactionsRequest.toObject = function(includeInstance, msg) { + var f, obj = { + + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.boltzrpc.GetPendingEvmTransactionsRequest} + */ +proto.boltzrpc.GetPendingEvmTransactionsRequest.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.boltzrpc.GetPendingEvmTransactionsRequest; + return proto.boltzrpc.GetPendingEvmTransactionsRequest.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.boltzrpc.GetPendingEvmTransactionsRequest} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.boltzrpc.GetPendingEvmTransactionsRequest} + */ +proto.boltzrpc.GetPendingEvmTransactionsRequest.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.boltzrpc.GetPendingEvmTransactionsRequest.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.boltzrpc.GetPendingEvmTransactionsRequest.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.boltzrpc.GetPendingEvmTransactionsRequest} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.boltzrpc.GetPendingEvmTransactionsRequest.serializeBinaryToWriter = function(message, writer) { + var f = undefined; +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.boltzrpc.GetPendingEvmTransactionsResponse.repeatedFields_ = [1]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.boltzrpc.GetPendingEvmTransactionsResponse.prototype.toObject = function(opt_includeInstance) { + return proto.boltzrpc.GetPendingEvmTransactionsResponse.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.boltzrpc.GetPendingEvmTransactionsResponse} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.boltzrpc.GetPendingEvmTransactionsResponse.toObject = function(includeInstance, msg) { + var f, obj = { + transactionsList: jspb.Message.toObjectList(msg.getTransactionsList(), + proto.boltzrpc.GetPendingEvmTransactionsResponse.Transaction.toObject, includeInstance) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.boltzrpc.GetPendingEvmTransactionsResponse} + */ +proto.boltzrpc.GetPendingEvmTransactionsResponse.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.boltzrpc.GetPendingEvmTransactionsResponse; + return proto.boltzrpc.GetPendingEvmTransactionsResponse.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.boltzrpc.GetPendingEvmTransactionsResponse} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.boltzrpc.GetPendingEvmTransactionsResponse} + */ +proto.boltzrpc.GetPendingEvmTransactionsResponse.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new proto.boltzrpc.GetPendingEvmTransactionsResponse.Transaction; + reader.readMessage(value,proto.boltzrpc.GetPendingEvmTransactionsResponse.Transaction.deserializeBinaryFromReader); + msg.addTransactions(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.boltzrpc.GetPendingEvmTransactionsResponse.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.boltzrpc.GetPendingEvmTransactionsResponse.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.boltzrpc.GetPendingEvmTransactionsResponse} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.boltzrpc.GetPendingEvmTransactionsResponse.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getTransactionsList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 1, + f, + proto.boltzrpc.GetPendingEvmTransactionsResponse.Transaction.serializeBinaryToWriter + ); + } +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.boltzrpc.GetPendingEvmTransactionsResponse.Transaction.prototype.toObject = function(opt_includeInstance) { + return proto.boltzrpc.GetPendingEvmTransactionsResponse.Transaction.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.boltzrpc.GetPendingEvmTransactionsResponse.Transaction} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.boltzrpc.GetPendingEvmTransactionsResponse.Transaction.toObject = function(includeInstance, msg) { + var f, obj = { + symbol: jspb.Message.getFieldWithDefault(msg, 1, ""), + hash: msg.getHash_asB64(), + hex: msg.getHex_asB64(), + label: jspb.Message.getFieldWithDefault(msg, 4, ""), + nonce: jspb.Message.getFieldWithDefault(msg, 5, 0), + amountSent: jspb.Message.getFieldWithDefault(msg, 6, ""), + amountReceived: jspb.Message.getFieldWithDefault(msg, 7, "") + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.boltzrpc.GetPendingEvmTransactionsResponse.Transaction} + */ +proto.boltzrpc.GetPendingEvmTransactionsResponse.Transaction.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.boltzrpc.GetPendingEvmTransactionsResponse.Transaction; + return proto.boltzrpc.GetPendingEvmTransactionsResponse.Transaction.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.boltzrpc.GetPendingEvmTransactionsResponse.Transaction} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.boltzrpc.GetPendingEvmTransactionsResponse.Transaction} + */ +proto.boltzrpc.GetPendingEvmTransactionsResponse.Transaction.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setSymbol(value); + break; + case 2: + var value = /** @type {!Uint8Array} */ (reader.readBytes()); + msg.setHash(value); + break; + case 3: + var value = /** @type {!Uint8Array} */ (reader.readBytes()); + msg.setHex(value); + break; + case 4: + var value = /** @type {string} */ (reader.readString()); + msg.setLabel(value); + break; + case 5: + var value = /** @type {number} */ (reader.readUint64()); + msg.setNonce(value); + break; + case 6: + var value = /** @type {string} */ (reader.readString()); + msg.setAmountSent(value); + break; + case 7: + var value = /** @type {string} */ (reader.readString()); + msg.setAmountReceived(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.boltzrpc.GetPendingEvmTransactionsResponse.Transaction.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.boltzrpc.GetPendingEvmTransactionsResponse.Transaction.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.boltzrpc.GetPendingEvmTransactionsResponse.Transaction} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.boltzrpc.GetPendingEvmTransactionsResponse.Transaction.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getSymbol(); + if (f.length > 0) { + writer.writeString( + 1, + f + ); + } + f = message.getHash_asU8(); + if (f.length > 0) { + writer.writeBytes( + 2, + f + ); + } + f = message.getHex_asU8(); + if (f.length > 0) { + writer.writeBytes( + 3, + f + ); + } + f = /** @type {string} */ (jspb.Message.getField(message, 4)); + if (f != null) { + writer.writeString( + 4, + f + ); + } + f = message.getNonce(); + if (f !== 0) { + writer.writeUint64( + 5, + f + ); + } + f = message.getAmountSent(); + if (f.length > 0) { + writer.writeString( + 6, + f + ); + } + f = /** @type {string} */ (jspb.Message.getField(message, 7)); + if (f != null) { + writer.writeString( + 7, + f + ); + } +}; + + +/** + * optional string symbol = 1; + * @return {string} + */ +proto.boltzrpc.GetPendingEvmTransactionsResponse.Transaction.prototype.getSymbol = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.boltzrpc.GetPendingEvmTransactionsResponse.Transaction} returns this + */ +proto.boltzrpc.GetPendingEvmTransactionsResponse.Transaction.prototype.setSymbol = function(value) { + return jspb.Message.setProto3StringField(this, 1, value); +}; + + +/** + * optional bytes hash = 2; + * @return {!(string|Uint8Array)} + */ +proto.boltzrpc.GetPendingEvmTransactionsResponse.Transaction.prototype.getHash = function() { + return /** @type {!(string|Uint8Array)} */ (jspb.Message.getFieldWithDefault(this, 2, "")); +}; + + +/** + * optional bytes hash = 2; + * This is a type-conversion wrapper around `getHash()` + * @return {string} + */ +proto.boltzrpc.GetPendingEvmTransactionsResponse.Transaction.prototype.getHash_asB64 = function() { + return /** @type {string} */ (jspb.Message.bytesAsB64( + this.getHash())); +}; + + +/** + * optional bytes hash = 2; + * Note that Uint8Array is not supported on all browsers. + * @see http://caniuse.com/Uint8Array + * This is a type-conversion wrapper around `getHash()` + * @return {!Uint8Array} + */ +proto.boltzrpc.GetPendingEvmTransactionsResponse.Transaction.prototype.getHash_asU8 = function() { + return /** @type {!Uint8Array} */ (jspb.Message.bytesAsU8( + this.getHash())); +}; + + +/** + * @param {!(string|Uint8Array)} value + * @return {!proto.boltzrpc.GetPendingEvmTransactionsResponse.Transaction} returns this + */ +proto.boltzrpc.GetPendingEvmTransactionsResponse.Transaction.prototype.setHash = function(value) { + return jspb.Message.setProto3BytesField(this, 2, value); +}; + + +/** + * optional bytes hex = 3; + * @return {!(string|Uint8Array)} + */ +proto.boltzrpc.GetPendingEvmTransactionsResponse.Transaction.prototype.getHex = function() { + return /** @type {!(string|Uint8Array)} */ (jspb.Message.getFieldWithDefault(this, 3, "")); +}; + + +/** + * optional bytes hex = 3; + * This is a type-conversion wrapper around `getHex()` + * @return {string} + */ +proto.boltzrpc.GetPendingEvmTransactionsResponse.Transaction.prototype.getHex_asB64 = function() { + return /** @type {string} */ (jspb.Message.bytesAsB64( + this.getHex())); +}; + + +/** + * optional bytes hex = 3; + * Note that Uint8Array is not supported on all browsers. + * @see http://caniuse.com/Uint8Array + * This is a type-conversion wrapper around `getHex()` + * @return {!Uint8Array} + */ +proto.boltzrpc.GetPendingEvmTransactionsResponse.Transaction.prototype.getHex_asU8 = function() { + return /** @type {!Uint8Array} */ (jspb.Message.bytesAsU8( + this.getHex())); +}; + + +/** + * @param {!(string|Uint8Array)} value + * @return {!proto.boltzrpc.GetPendingEvmTransactionsResponse.Transaction} returns this + */ +proto.boltzrpc.GetPendingEvmTransactionsResponse.Transaction.prototype.setHex = function(value) { + return jspb.Message.setProto3BytesField(this, 3, value); +}; + + +/** + * optional string label = 4; + * @return {string} + */ +proto.boltzrpc.GetPendingEvmTransactionsResponse.Transaction.prototype.getLabel = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 4, "")); +}; + + +/** + * @param {string} value + * @return {!proto.boltzrpc.GetPendingEvmTransactionsResponse.Transaction} returns this + */ +proto.boltzrpc.GetPendingEvmTransactionsResponse.Transaction.prototype.setLabel = function(value) { + return jspb.Message.setField(this, 4, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.boltzrpc.GetPendingEvmTransactionsResponse.Transaction} returns this + */ +proto.boltzrpc.GetPendingEvmTransactionsResponse.Transaction.prototype.clearLabel = function() { + return jspb.Message.setField(this, 4, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.boltzrpc.GetPendingEvmTransactionsResponse.Transaction.prototype.hasLabel = function() { + return jspb.Message.getField(this, 4) != null; +}; + + +/** + * optional uint64 nonce = 5; + * @return {number} + */ +proto.boltzrpc.GetPendingEvmTransactionsResponse.Transaction.prototype.getNonce = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 5, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.boltzrpc.GetPendingEvmTransactionsResponse.Transaction} returns this + */ +proto.boltzrpc.GetPendingEvmTransactionsResponse.Transaction.prototype.setNonce = function(value) { + return jspb.Message.setProto3IntField(this, 5, value); +}; + + +/** + * optional string amount_sent = 6; + * @return {string} + */ +proto.boltzrpc.GetPendingEvmTransactionsResponse.Transaction.prototype.getAmountSent = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 6, "")); +}; + + +/** + * @param {string} value + * @return {!proto.boltzrpc.GetPendingEvmTransactionsResponse.Transaction} returns this + */ +proto.boltzrpc.GetPendingEvmTransactionsResponse.Transaction.prototype.setAmountSent = function(value) { + return jspb.Message.setProto3StringField(this, 6, value); +}; + + +/** + * optional string amount_received = 7; + * @return {string} + */ +proto.boltzrpc.GetPendingEvmTransactionsResponse.Transaction.prototype.getAmountReceived = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 7, "")); +}; + + +/** + * @param {string} value + * @return {!proto.boltzrpc.GetPendingEvmTransactionsResponse.Transaction} returns this + */ +proto.boltzrpc.GetPendingEvmTransactionsResponse.Transaction.prototype.setAmountReceived = function(value) { + return jspb.Message.setField(this, 7, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.boltzrpc.GetPendingEvmTransactionsResponse.Transaction} returns this + */ +proto.boltzrpc.GetPendingEvmTransactionsResponse.Transaction.prototype.clearAmountReceived = function() { + return jspb.Message.setField(this, 7, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.boltzrpc.GetPendingEvmTransactionsResponse.Transaction.prototype.hasAmountReceived = function() { + return jspb.Message.getField(this, 7) != null; +}; + + +/** + * repeated Transaction transactions = 1; + * @return {!Array} + */ +proto.boltzrpc.GetPendingEvmTransactionsResponse.prototype.getTransactionsList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, proto.boltzrpc.GetPendingEvmTransactionsResponse.Transaction, 1)); +}; + + +/** + * @param {!Array} value + * @return {!proto.boltzrpc.GetPendingEvmTransactionsResponse} returns this +*/ +proto.boltzrpc.GetPendingEvmTransactionsResponse.prototype.setTransactionsList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 1, value); +}; + + +/** + * @param {!proto.boltzrpc.GetPendingEvmTransactionsResponse.Transaction=} opt_value + * @param {number=} opt_index + * @return {!proto.boltzrpc.GetPendingEvmTransactionsResponse.Transaction} + */ +proto.boltzrpc.GetPendingEvmTransactionsResponse.prototype.addTransactions = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 1, opt_value, proto.boltzrpc.GetPendingEvmTransactionsResponse.Transaction, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.boltzrpc.GetPendingEvmTransactionsResponse} returns this + */ +proto.boltzrpc.GetPendingEvmTransactionsResponse.prototype.clearTransactionsList = function() { + return this.setTransactionsList([]); +}; + + + + + if (jspb.Message.GENERATE_TO_OBJECT) { /** * Creates an object representation of this proto. diff --git a/lib/proto/cln/node_grpc_pb.js b/lib/proto/cln/node_grpc_pb.js index 75bc7edec..b7e8ac297 100644 --- a/lib/proto/cln/node_grpc_pb.js +++ b/lib/proto/cln/node_grpc_pb.js @@ -4563,4 +4563,4 @@ var NodeService = exports.NodeService = { }, }; -exports.NodeClient = grpc.makeGenericClientConstructor(NodeService); +exports.NodeClient = grpc.makeGenericClientConstructor(NodeService, 'Node'); diff --git a/lib/proto/hold/hold_grpc_pb.js b/lib/proto/hold/hold_grpc_pb.js index c298bff3e..b6c37dfd6 100644 --- a/lib/proto/hold/hold_grpc_pb.js +++ b/lib/proto/hold/hold_grpc_pb.js @@ -273,4 +273,4 @@ clean: { }, }; -exports.HoldClient = grpc.makeGenericClientConstructor(HoldService); +exports.HoldClient = grpc.makeGenericClientConstructor(HoldService, 'Hold'); diff --git a/lib/proto/lnd/invoices_grpc_pb.js b/lib/proto/lnd/invoices_grpc_pb.js index 8b38de9fe..a32b65bbd 100644 --- a/lib/proto/lnd/invoices_grpc_pb.js +++ b/lib/proto/lnd/invoices_grpc_pb.js @@ -237,4 +237,4 @@ htlcModifier: { }, }; -exports.InvoicesClient = grpc.makeGenericClientConstructor(InvoicesService); +exports.InvoicesClient = grpc.makeGenericClientConstructor(InvoicesService, 'Invoices'); diff --git a/lib/proto/lnd/router_grpc_pb.js b/lib/proto/lnd/router_grpc_pb.js index 79fbcc136..f6bd82b62 100644 --- a/lib/proto/lnd/router_grpc_pb.js +++ b/lib/proto/lnd/router_grpc_pb.js @@ -715,4 +715,4 @@ xDeleteLocalChanAliases: { }, }; -exports.RouterClient = grpc.makeGenericClientConstructor(RouterService); +exports.RouterClient = grpc.makeGenericClientConstructor(RouterService, 'Router'); diff --git a/lib/proto/lnd/rpc_grpc_pb.js b/lib/proto/lnd/rpc_grpc_pb.js index 491c73a7e..ef012ccc6 100644 --- a/lib/proto/lnd/rpc_grpc_pb.js +++ b/lib/proto/lnd/rpc_grpc_pb.js @@ -2494,4 +2494,4 @@ lookupHtlcResolution: { }, }; -exports.LightningClient = grpc.makeGenericClientConstructor(LightningService); +exports.LightningClient = grpc.makeGenericClientConstructor(LightningService, 'Lightning'); diff --git a/lib/proto/sidecar/boltzr_grpc_pb.js b/lib/proto/sidecar/boltzr_grpc_pb.js index af0271626..0b1de0637 100644 --- a/lib/proto/sidecar/boltzr_grpc_pb.js +++ b/lib/proto/sidecar/boltzr_grpc_pb.js @@ -437,4 +437,4 @@ var BoltzRService = exports.BoltzRService = { }, }; -exports.BoltzRClient = grpc.makeGenericClientConstructor(BoltzRService); +exports.BoltzRClient = grpc.makeGenericClientConstructor(BoltzRService, 'BoltzR'); diff --git a/lib/wallet/ethereum/EthereumManager.ts b/lib/wallet/ethereum/EthereumManager.ts index 2fd87dec1..27fd0e179 100644 --- a/lib/wallet/ethereum/EthereumManager.ts +++ b/lib/wallet/ethereum/EthereumManager.ts @@ -5,6 +5,7 @@ import { Wallet as EthersWallet, MaxUint256, Signer, + Transaction, getAddress, } from 'ethers'; import { EthereumConfig, RskConfig } from '../../Config'; @@ -251,6 +252,24 @@ class EthereumManager { return undefined; }; + public getClaimedAmount = async ( + txHex: string, + ): Promise => { + const tx = Transaction.from(txHex); + if (tx.to === null || tx.to === undefined) { + return undefined; + } + + const contracts = await this.contractsForAddress(tx.to); + if (contracts === undefined) { + return undefined; + } + + return contracts + .decodeClaimData(tx.data) + .reduce((acc, { amount }) => acc + amount, 0n); + }; + private checkERC20Allowance = async ( erc20Wallet: ERC20WalletProvider, erc20SwapAddress: string, diff --git a/lib/wallet/ethereum/contracts/Contracts.ts b/lib/wallet/ethereum/contracts/Contracts.ts index 2cd11a8d7..a72496532 100644 --- a/lib/wallet/ethereum/contracts/Contracts.ts +++ b/lib/wallet/ethereum/contracts/Contracts.ts @@ -109,6 +109,59 @@ class Contracts { `Using ${this.network.name} ERC20Swap v${versions[0]} contract: ${this.contracts.erc20Swap}`, ); }; + + public decodeClaimData = ( + data: string, + ): { preimage: string; amount: bigint }[] => { + for (const decoder of [ + this.decodeEtherClaimBatch, + this.decodeEtherClaim, + this.decodeEtherClaimForAddress, + ]) { + try { + return decoder(data); + // eslint-disable-next-line @typescript-eslint/no-unused-vars + } catch (e) { + // Ignored to try the next decoder + } + } + + return []; + }; + + private decodeEtherClaimBatch = (data: string) => { + const dec = this.etherSwap.interface.decodeFunctionData('claimBatch', data); + return dec[0].map((preimage: string, index: number) => ({ + preimage, + amount: dec[1][index], + })); + }; + + private decodeEtherClaim = (data: string) => { + const dec = this.etherSwap.interface.decodeFunctionData( + 'claim(bytes32,uint256,address,uint256)', + data, + ); + return [ + { + preimage: dec[0], + amount: dec[1], + }, + ]; + }; + + private decodeEtherClaimForAddress = (data: string) => { + const dec = this.etherSwap.interface.decodeFunctionData( + 'claim(bytes32,uint256,address,address,uint256)', + data, + ); + return [ + { + preimage: dec[0], + amount: dec[1], + }, + ]; + }; } export default Contracts; diff --git a/proto/boltzrpc.proto b/proto/boltzrpc.proto index 6128dd58e..bbf2ebc09 100644 --- a/proto/boltzrpc.proto +++ b/proto/boltzrpc.proto @@ -49,6 +49,8 @@ service Boltz { rpc GetLabel (GetLabelRequest) returns (GetLabelResponse); + rpc GetPendingEvmTransactions (GetPendingEvmTransactionsRequest) returns (GetPendingEvmTransactionsResponse); + rpc GetReferrals (GetReferralsRequest) returns (GetReferralsResponse); rpc SetReferral (SetReferralRequest) returns (SetReferralResponse); @@ -264,6 +266,24 @@ message GetLabelResponse { string label = 2; } +message GetPendingEvmTransactionsRequest {} + +message GetPendingEvmTransactionsResponse { + message Transaction { + string symbol = 1; + bytes hash = 2; + bytes hex = 3; + optional string label = 4; + uint64 nonce = 5; + // In wei + string amount_sent = 6; + // In wei + optional string amount_received = 7; + } + + repeated Transaction transactions = 1; +} + message GetReferralsRequest { // When not specified, all referrals are returned optional string id = 1; diff --git a/test/integration/wallet/ethereum/EthereumManager.spec.ts b/test/integration/wallet/ethereum/EthereumManager.spec.ts index 5ad485a01..d6f87f532 100644 --- a/test/integration/wallet/ethereum/EthereumManager.spec.ts +++ b/test/integration/wallet/ethereum/EthereumManager.spec.ts @@ -155,4 +155,26 @@ describe('EthereumManager', () => { await expect(manager.contractsForAddress('0x')).resolves.toBeUndefined(); }); + + describe('getClaimedAmount', () => { + beforeAll(() => { + manager.contractsForAddress = jest + .fn() + .mockResolvedValue(manager['contracts'][1]); + }); + + test('should get claimed amount for batch claims', async () => { + const amount = await manager.getClaimedAmount( + '0xf9036c8205eb840191818683012b22943d9cc5780ca1db78760ad3d35458509178a85a4a80b90304c2c3a8c90000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000002600000000000000000000000000000000000000000000000000000000000000004b83f443c31e99ef7180edcc2f9f7454b25572e57da054be58421f77aabf08ee778a6c9a32078afa8e59e7e69bccbff6de0232dd21d3e1a6c00addaaea87b772ce82d686340cebc45b909803de9b07067dadfae822fae3b10b31e602023dd593652407e4d3438bb6a6e58594deda5af606c9e49b3fb5a7d6726252994870212210000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000001550f7dca700000000000000000000000000000000000000000000000000000000dace6570a8000000000000000000000000000000000000000000000000000001116be05bdc00000000000000000000000000000000000000000000000000000148095b471000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000001c7531ec1de19e859c4f0dd160760f0aef2e6e3000000000000000000000000d468040d79aac566a782006febe5e414d4bb9556000000000000000000000000d468040d79aac566a782006febe5e414d4bb9556000000000000000000000000d468040d79aac566a782006febe5e414d4bb9556000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000006f821900000000000000000000000000000000000000000000000000000000006f82c300000000000000000000000000000000000000000000000000000000006f82d100000000000000000000000000000000000000000000000000000000006f82d95fa0e136d7615b02f9696f9ce535244d91b20fe17c5d2593f5aba7426d572ff3e2f0a035089572f3f272beb6008e95fb34a0e1f079368ee0262145249a8711066bcc6f', + ); + expect(amount).toEqual(6901890000000000n); + }); + + test('should get claimed amount for claims', async () => { + const amount = await manager.getClaimedAmount( + '0xf8ea825e76840191b4f082a9ea943d9cc5780ca1db78760ad3d35458509178a85a4a80b884c3c37fbce9248e0d2e4943c368b26f24d3a961e4604be3cf46b7c654289a9a5c73f8b4470000000000000000000000000000000000000000000000000162e12979444c000000000000000000000000001bdf482f5da32ef51c20d9a94960385c5be9aab700000000000000000000000000000000000000000000000000000000006f449060a077f9d033d1a0b3d3df07589946bf825faaf1a827a2ec154d3bbb232bd05ef93aa04a6de314e6ddbe18399e46c4727bb87fed590aed614a7f0ec6cf732390925c2a', + ); + expect(amount).toEqual(99889710000000000n); + }); + }); }); diff --git a/test/integration/wallet/ethereum/contracts/Contracts.spec.ts b/test/integration/wallet/ethereum/contracts/Contracts.spec.ts index 90e0c7178..29087a0d1 100644 --- a/test/integration/wallet/ethereum/contracts/Contracts.spec.ts +++ b/test/integration/wallet/ethereum/contracts/Contracts.spec.ts @@ -11,6 +11,8 @@ describe('Contracts', () => { let setup: EthereumSetup; let setupContracts: Awaited>; + let contracts: Contracts; + beforeAll(async () => { setup = await getSigner(); setupContracts = await getContracts(setup.signer); @@ -23,8 +25,6 @@ describe('Contracts', () => { }); describe('init', () => { - let contracts: Contracts; - beforeEach(async () => { if (contracts !== undefined) { contracts.contractEventHandler.destroy(); @@ -99,4 +99,70 @@ describe('Contracts', () => { ); }); }); + + describe('decodeClaimData', () => { + test('should decode Ether batch claims', () => { + const res = contracts.decodeClaimData( + '0xc2c3a8c90000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000002600000000000000000000000000000000000000000000000000000000000000004b83f443c31e99ef7180edcc2f9f7454b25572e57da054be58421f77aabf08ee778a6c9a32078afa8e59e7e69bccbff6de0232dd21d3e1a6c00addaaea87b772ce82d686340cebc45b909803de9b07067dadfae822fae3b10b31e602023dd593652407e4d3438bb6a6e58594deda5af606c9e49b3fb5a7d6726252994870212210000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000001550f7dca700000000000000000000000000000000000000000000000000000000dace6570a8000000000000000000000000000000000000000000000000000001116be05bdc00000000000000000000000000000000000000000000000000000148095b471000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000001c7531ec1de19e859c4f0dd160760f0aef2e6e3000000000000000000000000d468040d79aac566a782006febe5e414d4bb9556000000000000000000000000d468040d79aac566a782006febe5e414d4bb9556000000000000000000000000d468040d79aac566a782006febe5e414d4bb9556000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000006f821900000000000000000000000000000000000000000000000000000000006f82c300000000000000000000000000000000000000000000000000000000006f82d100000000000000000000000000000000000000000000000000000000006f82d9', + ); + expect(res).toEqual([ + { + preimage: + '0xb83f443c31e99ef7180edcc2f9f7454b25572e57da054be58421f77aabf08ee7', + amount: 6000000000000000n, + }, + { + preimage: + '0x78a6c9a32078afa8e59e7e69bccbff6de0232dd21d3e1a6c00addaaea87b772c', + amount: 240580000000000n, + }, + { + preimage: + '0xe82d686340cebc45b909803de9b07067dadfae822fae3b10b31e602023dd5936', + amount: 300630000000000n, + }, + { + preimage: + '0x52407e4d3438bb6a6e58594deda5af606c9e49b3fb5a7d672625299487021221', + amount: 360680000000000n, + }, + ]); + }); + + test('should decode Ether claims', () => { + const res = contracts.decodeClaimData( + '0xc3c37fbcf964239e31068f2b97f953c4944dc6ebd55d676d7ec33fcb3e48c17311f2961d00000000000000000000000000000000000000000000000000013ca8a52be4000000000000000000000000001bdf482f5da32ef51c20d9a94960385c5be9aab700000000000000000000000000000000000000000000000000000000006f43dd', + ); + expect(res).toEqual([ + { + preimage: + '0xf964239e31068f2b97f953c4944dc6ebd55d676d7ec33fcb3e48c17311f2961d', + amount: 348170000000000n, + }, + ]); + }); + + test('should decode Ether claims for address', () => { + const res = contracts.decodeClaimData( + '0xcd413efaec403faf0719b8b1ad469c28f9ec02fb3f1093d61f9cbfd601e5f5fcce42f4430000000000000000000000000000000000000000000000000162de6efb551c00000000000000000000000000004ca129c71da487afd603bb123b12398a3c5a230000000000000000000000001bdf482f5da32ef51c20d9a94960385c5be9aab700000000000000000000000000000000000000000000000000000000006f3a3d', + ); + expect(res).toEqual([ + { + preimage: + '0xec403faf0719b8b1ad469c28f9ec02fb3f1093d61f9cbfd601e5f5fcce42f443', + amount: 99886710000000000n, + }, + ]); + }); + + test.each` + data + ${''} + ${'0x'} + ${'0x00'} + ${'0x0899146b2f6dfd78f850ab2311240af43c4081966737e81225d5d2add7586e5f1fbd07940000000000000000000000001bdf482f5da32ef51c20d9a94960385c5be9aab700000000000000000000000000000000000000000000000000000000006f2a09'} + `('should return empty array for unknown data: $data', ({ data }) => { + expect(contracts.decodeClaimData(data)).toEqual([]); + }); + }); }); diff --git a/test/unit/Utils.spec.ts b/test/unit/Utils.spec.ts index 1bd8360e6..a20d6e9aa 100644 --- a/test/unit/Utils.spec.ts +++ b/test/unit/Utils.spec.ts @@ -466,4 +466,17 @@ describe('Utils', () => { `('should round to decimals', ({ value, decimals, expected }) => { expect(utils.roundToDecimals(value, decimals)).toEqual(expected); }); + + test.each` + hex | expected + ${'0x1234'} | ${'1234'} + ${'1234'} | ${'1234'} + ${'0xabcdef'} | ${'abcdef'} + ${'0x0000'} | ${'0000'} + ${'0x'} | ${''} + ${''} | ${''} + ${'0x123456789abcdef0123456789abcdef0'} | ${'123456789abcdef0123456789abcdef0'} + `('should remove hex prefix', ({ hex, expected }) => { + expect(utils.removeHexPrefix(hex)).toEqual(expected); + }); }); diff --git a/test/unit/grpc/GrpcService.spec.ts b/test/unit/grpc/GrpcService.spec.ts index a23063974..e86217d8a 100644 --- a/test/unit/grpc/GrpcService.spec.ts +++ b/test/unit/grpc/GrpcService.spec.ts @@ -1,13 +1,21 @@ import { ServiceError } from '@grpc/grpc-js'; import { randomBytes } from 'crypto'; import Logger from '../../../lib/Logger'; -import { getHexBuffer, getHexString } from '../../../lib/Utils'; +import { + getHexBuffer, + getHexString, + removeHexPrefix, +} from '../../../lib/Utils'; import { CurrencyType } from '../../../lib/consts/Enums'; +import PendingEthereumTransaction from '../../../lib/db/models/PendingEthereumTransaction'; +import PendingEthereumTransactionRepository from '../../../lib/db/repositories/PendingEthereumTransactionRepository'; import ReferralRepository from '../../../lib/db/repositories/ReferralRepository'; import TransactionLabelRepository from '../../../lib/db/repositories/TransactionLabelRepository'; import GrpcService from '../../../lib/grpc/GrpcService'; import * as boltzrpc from '../../../lib/proto/boltzrpc_pb'; import Service from '../../../lib/service/Service'; +import EthereumManager from '../../../lib/wallet/ethereum/EthereumManager'; +import { Rsk } from '../../../lib/wallet/ethereum/EvmNetworks'; const getInfoData = { method: 'getInfo', @@ -108,6 +116,9 @@ const transformOutputs = (outputs: any[]) => { jest.mock('../../../lib/service/Service', () => { return jest.fn().mockImplementation(() => { return { + walletManager: { + ethereumManagers: [], + }, elementsService: { unblindOutputs: mockUnblindOutputs, deriveBlindingKeys: mockDeriveBlindingKeys, @@ -167,6 +178,8 @@ const createCallback = ( }; }; +TransactionLabelRepository.getLabel = jest.fn().mockResolvedValue(null); + describe('GrpcService', () => { const service = mockedService(); @@ -612,6 +625,148 @@ describe('GrpcService', () => { }); }); + describe('getPendingEvmTransactions', () => { + test('should get pending EVM transactions', async () => { + const txs = [ + { + hash: '0x1234', + hex: '0x12345678', + nonce: 123, + etherAmount: 21_000_000_000, + }, + ] as PendingEthereumTransaction[]; + + PendingEthereumTransactionRepository.getTransactions = jest + .fn() + .mockResolvedValue(txs); + + const res = await new Promise((resolve) => { + grpcService.getPendingEvmTransactions( + createCall({}), + createCallback((error, response) => { + expect(error).toEqual(null); + resolve(response.toObject()); + }), + ); + }); + + expect(res.transactionsList).toEqual([ + { + label: '', + symbol: Rsk.symbol, + hash: getHexBuffer(removeHexPrefix(txs[0].hash)).toString('base64'), + hex: getHexBuffer(removeHexPrefix(txs[0].hex)).toString('base64'), + nonce: txs[0].nonce, + amountSent: txs[0].etherAmount.toString(), + amountReceived: '', + }, + ]); + + expect( + PendingEthereumTransactionRepository.getTransactions, + ).toHaveBeenCalledTimes(1); + expect( + PendingEthereumTransactionRepository.getTransactions, + ).toHaveBeenCalledWith(); + }); + + test('should get pending EVM transactions with received amount', async () => { + const txs = [ + { + hash: '0x1234', + hex: '0x12345678', + nonce: 123, + etherAmount: 21_000_000_000, + }, + ] as PendingEthereumTransaction[]; + + PendingEthereumTransactionRepository.getTransactions = jest + .fn() + .mockResolvedValue(txs); + + const claimedAmount = 123123123123n; + grpcService['service'].walletManager.ethereumManagers.push({ + hasSymbol: jest.fn().mockReturnValue(true), + getClaimedAmount: jest.fn().mockResolvedValue(claimedAmount), + } as unknown as EthereumManager); + + const res = await new Promise((resolve) => { + grpcService.getPendingEvmTransactions( + createCall({}), + createCallback((error, response) => { + expect(error).toEqual(null); + resolve(response.toObject()); + }), + ); + }); + + expect(res.transactionsList).toEqual([ + { + label: '', + symbol: Rsk.symbol, + hash: getHexBuffer(removeHexPrefix(txs[0].hash)).toString('base64'), + hex: getHexBuffer(removeHexPrefix(txs[0].hex)).toString('base64'), + nonce: txs[0].nonce, + amountSent: txs[0].etherAmount.toString(), + amountReceived: claimedAmount.toString(), + }, + ]); + }); + + test('should get pending EVM transactions with label', async () => { + const txs = [ + { + hash: '0x1234', + hex: '0x12345678', + nonce: 123, + etherAmount: 21_000_000_000, + }, + ] as PendingEthereumTransaction[]; + + PendingEthereumTransactionRepository.getTransactions = jest + .fn() + .mockResolvedValue(txs); + + const claimedAmount = 123123123123n; + grpcService['service'].walletManager.ethereumManagers.push({ + hasSymbol: jest.fn().mockReturnValue(true), + getClaimedAmount: jest.fn().mockResolvedValue(claimedAmount), + } as unknown as EthereumManager); + + TransactionLabelRepository.getLabel = jest.fn().mockResolvedValue({ + symbol: Rsk.symbol, + label: 'some label', + }); + + const res = await new Promise((resolve) => { + grpcService.getPendingEvmTransactions( + createCall({}), + createCallback((error, response) => { + expect(error).toEqual(null); + resolve(response.toObject()); + }), + ); + }); + + expect(res.transactionsList).toEqual([ + { + symbol: Rsk.symbol, + label: 'some label', + hash: getHexBuffer(removeHexPrefix(txs[0].hash)).toString('base64'), + hex: getHexBuffer(removeHexPrefix(txs[0].hex)).toString('base64'), + nonce: txs[0].nonce, + amountSent: txs[0].etherAmount.toString(), + amountReceived: claimedAmount.toString(), + }, + ]); + + expect(TransactionLabelRepository.getLabel).toHaveBeenCalledTimes(1); + expect(TransactionLabelRepository.getLabel).toHaveBeenCalledWith( + txs[0].hash, + ); + }); + }); + describe('calculateTransactionFee', () => { test('should calculate transaction fee in sat/vbyte', async () => { const symbol = 'BTC'; From f89beccf2ff0806aa9f47050f4f54d8b44c193ae Mon Sep 17 00:00:00 2001 From: michael1011 Date: Thu, 27 Feb 2025 16:34:37 +0100 Subject: [PATCH 2/2] chore: minor NPM dependency updates --- package-lock.json | 486 +++++++++++++++++++++++----------------------- package.json | 28 +-- 2 files changed, 260 insertions(+), 254 deletions(-) diff --git a/package-lock.json b/package-lock.json index 9b0f90ffa..236edc420 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,17 +13,17 @@ "@grpc/grpc-js": "^1.12.6", "@iarna/toml": "^2.2.5", "@opentelemetry/api": "^1.9.0", - "@opentelemetry/exporter-trace-otlp-grpc": "^0.57.1", - "@opentelemetry/instrumentation-express": "^0.47.0", - "@opentelemetry/instrumentation-grpc": "^0.57.1", - "@opentelemetry/instrumentation-http": "^0.57.1", - "@opentelemetry/instrumentation-pg": "^0.51.0", - "@opentelemetry/instrumentation-winston": "^0.44.0", - "@opentelemetry/sdk-node": "^0.57.1", + "@opentelemetry/exporter-trace-otlp-grpc": "^0.57.2", + "@opentelemetry/instrumentation-express": "^0.47.1", + "@opentelemetry/instrumentation-grpc": "^0.57.2", + "@opentelemetry/instrumentation-http": "^0.57.2", + "@opentelemetry/instrumentation-pg": "^0.51.1", + "@opentelemetry/instrumentation-winston": "^0.44.1", + "@opentelemetry/sdk-node": "^0.57.2", "@pyroscope/nodejs": "^0.4.3", "@vulpemventures/secp256k1-zkp": "^3.2.1", "async-lock": "^1.4.1", - "axios": "^1.7.9", + "axios": "^1.8.1", "bip32": "^4.0.0", "bip39": "^3.1.0", "bitcoinjs-lib": "^6.1.7", @@ -55,7 +55,7 @@ }, "devDependencies": { "@boltz/bitcoin-ops": "^2.0.0", - "@eslint/js": "^9.20.0", + "@eslint/js": "^9.21.0", "@openzeppelin/contracts": "^5.2.0", "@trivago/prettier-plugin-sort-imports": "^5.2.2", "@types/async-lock": "^1.4.2", @@ -67,22 +67,22 @@ "@types/pg": "^8.11.11", "@types/yargs": "^17.0.33", "cross-os": "^1.5.0", - "eslint": "^9.20.1", + "eslint": "^9.21.0", "eslint-plugin-import": "^2.31.0", "eslint-plugin-jest": "^28.11.0", "eslint-plugin-n": "^17.15.1", "eslint-plugin-node": "^11.1.0", "git-cliff": "^2.8.0", - "globals": "^15.15.0", + "globals": "^16.0.0", "grpc_tools_node_protoc_ts": "^5.3.3", "grpc-tools": "^1.13.0", "jest": "^29.7.0", - "prettier": "^3.5.1", + "prettier": "^3.5.2", "sqlite3": "^5.1.7", "swagger-jsdoc": "^6.2.8", - "ts-jest": "^29.2.5", + "ts-jest": "^29.2.6", "typescript": "^5.7.3", - "typescript-eslint": "^8.24.0" + "typescript-eslint": "^8.25.0" }, "engines": { "node": ">=18.18.0" @@ -847,13 +847,13 @@ } }, "node_modules/@eslint/config-array": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.19.0.tgz", - "integrity": "sha512-zdHg2FPIFNKPdcHWtiNT+jEFCHYVplAXRDlQDyqy0zGx/q2parwh7brGJSiTxRk/TSMkbM//zt/f5CHgyTyaSQ==", + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.19.2.tgz", + "integrity": "sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@eslint/object-schema": "^2.1.4", + "@eslint/object-schema": "^2.1.6", "debug": "^4.3.1", "minimatch": "^3.1.2" }, @@ -862,9 +862,9 @@ } }, "node_modules/@eslint/core": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.10.0.tgz", - "integrity": "sha512-gFHJ+xBOo4G3WRlR1e/3G8A6/KZAH6zcE/hkLRCZTi/B9avAG365QhFA8uOGzTMqgTghpn7/fSnscW++dpMSAw==", + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.12.0.tgz", + "integrity": "sha512-cmrR6pytBuSMTaBweKoGMwu3EiHiEC+DoyupPmlZ0HxBJBtIxwe+j/E4XPIKNx+Q74c8lXKPwYawBf5glsTkHg==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -875,9 +875,9 @@ } }, "node_modules/@eslint/eslintrc": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.2.0.tgz", - "integrity": "sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.0.tgz", + "integrity": "sha512-yaVPAiNAalnCZedKLdR21GOGILMLKPyqSLWaAjQFvYA2i/ciDi8ArYVr69Anohb6cH2Ukhqti4aFnYyPm8wdwQ==", "dev": true, "license": "MIT", "dependencies": { @@ -912,9 +912,9 @@ } }, "node_modules/@eslint/js": { - "version": "9.20.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.20.0.tgz", - "integrity": "sha512-iZA07H9io9Wn836aVTytRaNqh00Sad+EamwOVJT12GTLw1VGMFV/4JaME+JjLtr9fiGaoWgYnS54wrfWsSs4oQ==", + "version": "9.21.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.21.0.tgz", + "integrity": "sha512-BqStZ3HX8Yz6LvsF5ByXYrtigrV5AXADWLAGc7PH/1SxOb7/FIYYMszZZWiUou/GB9P2lXWk2SV4d+Z8h0nknw==", "dev": true, "license": "MIT", "engines": { @@ -922,9 +922,9 @@ } }, "node_modules/@eslint/object-schema": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.4.tgz", - "integrity": "sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==", + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", + "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -932,13 +932,13 @@ } }, "node_modules/@eslint/plugin-kit": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.5.tgz", - "integrity": "sha512-lB05FkqEdUg2AA0xEbUz0SnkXT1LcCTa438W4IWTUh4hdOnVbQyOJ81OrDXsJk/LSiJHubgGEFoR5EHq1NsH1A==", + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.7.tgz", + "integrity": "sha512-JubJ5B2pJ4k4yGxaNLdbjrnk9d/iDz6/q8wOilpIowd6PJPgaxCuHBnBszq7Ce2TyMrywm5r4PnKm6V3iiZF+g==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@eslint/core": "^0.10.0", + "@eslint/core": "^0.12.0", "levn": "^0.4.1" }, "engines": { @@ -1035,9 +1035,9 @@ } }, "node_modules/@humanwhocodes/retry": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.1.tgz", - "integrity": "sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==", + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.2.tgz", + "integrity": "sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==", "dev": true, "license": "Apache-2.0", "engines": { @@ -1990,9 +1990,9 @@ } }, "node_modules/@opentelemetry/api-logs": { - "version": "0.57.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.57.1.tgz", - "integrity": "sha512-I4PHczeujhQAQv6ZBzqHYEUiggZL4IdSMixtVD3EYqbdrjujE7kRfI5QohjlPoJm8BvenoW5YaTMWRrbpot6tg==", + "version": "0.57.2", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.57.2.tgz", + "integrity": "sha512-uIX52NnTM0iBh84MShlpouI7UKqkZ7MrUszTmaypHBu4r7NofznSnQRfJ+uUeDtQDj6w8eFGg5KBLDAwAPz1+A==", "license": "Apache-2.0", "dependencies": { "@opentelemetry/api": "^1.3.0" @@ -2038,16 +2038,17 @@ } }, "node_modules/@opentelemetry/exporter-logs-otlp-grpc": { - "version": "0.57.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-logs-otlp-grpc/-/exporter-logs-otlp-grpc-0.57.1.tgz", - "integrity": "sha512-RL8qmZH1H/H7Hbj0xKxF0Gg8kX9ic0aoMS3Kv5kj864lWxlpuR5YtGGn5OjGYwCmq6nYbsNy257fFp1U63pABw==", + "version": "0.57.2", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-logs-otlp-grpc/-/exporter-logs-otlp-grpc-0.57.2.tgz", + "integrity": "sha512-eovEy10n3umjKJl2Ey6TLzikPE+W4cUQ4gCwgGP1RqzTGtgDra0WjIqdy29ohiUKfvmbiL3MndZww58xfIvyFw==", "license": "Apache-2.0", "dependencies": { "@grpc/grpc-js": "^1.7.1", "@opentelemetry/core": "1.30.1", - "@opentelemetry/otlp-grpc-exporter-base": "0.57.1", - "@opentelemetry/otlp-transformer": "0.57.1", - "@opentelemetry/sdk-logs": "0.57.1" + "@opentelemetry/otlp-exporter-base": "0.57.2", + "@opentelemetry/otlp-grpc-exporter-base": "0.57.2", + "@opentelemetry/otlp-transformer": "0.57.2", + "@opentelemetry/sdk-logs": "0.57.2" }, "engines": { "node": ">=14" @@ -2057,16 +2058,16 @@ } }, "node_modules/@opentelemetry/exporter-logs-otlp-http": { - "version": "0.57.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-logs-otlp-http/-/exporter-logs-otlp-http-0.57.1.tgz", - "integrity": "sha512-u8Cr6yDX57/n89aSJwAQNHQIYodcl6o8jTcaPKNktMvNfd7ny3R7aE7GKBC5Wg0zejP9heBgyN0OGwrPhptx7A==", + "version": "0.57.2", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-logs-otlp-http/-/exporter-logs-otlp-http-0.57.2.tgz", + "integrity": "sha512-0rygmvLcehBRp56NQVLSleJ5ITTduq/QfU7obOkyWgPpFHulwpw2LYTqNIz5TczKZuy5YY+5D3SDnXZL1tXImg==", "license": "Apache-2.0", "dependencies": { - "@opentelemetry/api-logs": "0.57.1", + "@opentelemetry/api-logs": "0.57.2", "@opentelemetry/core": "1.30.1", - "@opentelemetry/otlp-exporter-base": "0.57.1", - "@opentelemetry/otlp-transformer": "0.57.1", - "@opentelemetry/sdk-logs": "0.57.1" + "@opentelemetry/otlp-exporter-base": "0.57.2", + "@opentelemetry/otlp-transformer": "0.57.2", + "@opentelemetry/sdk-logs": "0.57.2" }, "engines": { "node": ">=14" @@ -2076,17 +2077,17 @@ } }, "node_modules/@opentelemetry/exporter-logs-otlp-proto": { - "version": "0.57.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-logs-otlp-proto/-/exporter-logs-otlp-proto-0.57.1.tgz", - "integrity": "sha512-WtR85NHdIVrIFfsK5bwx7miGG5WzOsuT4BNmuZ3EfZ0veowkrgoUSynsNnXW1YFXL6QhPbScjUfeTjnnV9bnIQ==", + "version": "0.57.2", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-logs-otlp-proto/-/exporter-logs-otlp-proto-0.57.2.tgz", + "integrity": "sha512-ta0ithCin0F8lu9eOf4lEz9YAScecezCHkMMyDkvd9S7AnZNX5ikUmC5EQOQADU+oCcgo/qkQIaKcZvQ0TYKDw==", "license": "Apache-2.0", "dependencies": { - "@opentelemetry/api-logs": "0.57.1", + "@opentelemetry/api-logs": "0.57.2", "@opentelemetry/core": "1.30.1", - "@opentelemetry/otlp-exporter-base": "0.57.1", - "@opentelemetry/otlp-transformer": "0.57.1", + "@opentelemetry/otlp-exporter-base": "0.57.2", + "@opentelemetry/otlp-transformer": "0.57.2", "@opentelemetry/resources": "1.30.1", - "@opentelemetry/sdk-logs": "0.57.1", + "@opentelemetry/sdk-logs": "0.57.2", "@opentelemetry/sdk-trace-base": "1.30.1" }, "engines": { @@ -2097,17 +2098,17 @@ } }, "node_modules/@opentelemetry/exporter-metrics-otlp-grpc": { - "version": "0.57.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-metrics-otlp-grpc/-/exporter-metrics-otlp-grpc-0.57.1.tgz", - "integrity": "sha512-8B7k5q4AUldbfvubcHApg1XQaio/cO/VUWsM5PSaRP2fsjGNwbn2ih04J3gLD+AmgslvyuDcA2SZiDXEKwAxtQ==", + "version": "0.57.2", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-metrics-otlp-grpc/-/exporter-metrics-otlp-grpc-0.57.2.tgz", + "integrity": "sha512-r70B8yKR41F0EC443b5CGB4rUaOMm99I5N75QQt6sHKxYDzSEc6gm48Diz1CI1biwa5tDPznpylTrywO/pT7qw==", "license": "Apache-2.0", "dependencies": { "@grpc/grpc-js": "^1.7.1", "@opentelemetry/core": "1.30.1", - "@opentelemetry/exporter-metrics-otlp-http": "0.57.1", - "@opentelemetry/otlp-exporter-base": "0.57.1", - "@opentelemetry/otlp-grpc-exporter-base": "0.57.1", - "@opentelemetry/otlp-transformer": "0.57.1", + "@opentelemetry/exporter-metrics-otlp-http": "0.57.2", + "@opentelemetry/otlp-exporter-base": "0.57.2", + "@opentelemetry/otlp-grpc-exporter-base": "0.57.2", + "@opentelemetry/otlp-transformer": "0.57.2", "@opentelemetry/resources": "1.30.1", "@opentelemetry/sdk-metrics": "1.30.1" }, @@ -2119,14 +2120,14 @@ } }, "node_modules/@opentelemetry/exporter-metrics-otlp-http": { - "version": "0.57.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-metrics-otlp-http/-/exporter-metrics-otlp-http-0.57.1.tgz", - "integrity": "sha512-jpKYVZY7fdwTdy+eAy/Mp9DZMaQpj7caMzlo3QqQDSJx5FZEY6zWzgcKvDvF6h+gdHE7LgUjaPOvJVUs354jJg==", + "version": "0.57.2", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-metrics-otlp-http/-/exporter-metrics-otlp-http-0.57.2.tgz", + "integrity": "sha512-ttb9+4iKw04IMubjm3t0EZsYRNWr3kg44uUuzfo9CaccYlOh8cDooe4QObDUkvx9d5qQUrbEckhrWKfJnKhemA==", "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "1.30.1", - "@opentelemetry/otlp-exporter-base": "0.57.1", - "@opentelemetry/otlp-transformer": "0.57.1", + "@opentelemetry/otlp-exporter-base": "0.57.2", + "@opentelemetry/otlp-transformer": "0.57.2", "@opentelemetry/resources": "1.30.1", "@opentelemetry/sdk-metrics": "1.30.1" }, @@ -2138,15 +2139,15 @@ } }, "node_modules/@opentelemetry/exporter-metrics-otlp-proto": { - "version": "0.57.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-metrics-otlp-proto/-/exporter-metrics-otlp-proto-0.57.1.tgz", - "integrity": "sha512-53AJmYJr8lypU6kAQT1/FVKR2QKcxRp4Gd54L3oF9hc2fw/FtvVfXV+PelB+qL318PqUlVjVtDOa4SQ5tAREfA==", + "version": "0.57.2", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-metrics-otlp-proto/-/exporter-metrics-otlp-proto-0.57.2.tgz", + "integrity": "sha512-HX068Q2eNs38uf7RIkNN9Hl4Ynl+3lP0++KELkXMCpsCbFO03+0XNNZ1SkwxPlP9jrhQahsMPMkzNXpq3fKsnw==", "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "1.30.1", - "@opentelemetry/exporter-metrics-otlp-http": "0.57.1", - "@opentelemetry/otlp-exporter-base": "0.57.1", - "@opentelemetry/otlp-transformer": "0.57.1", + "@opentelemetry/exporter-metrics-otlp-http": "0.57.2", + "@opentelemetry/otlp-exporter-base": "0.57.2", + "@opentelemetry/otlp-transformer": "0.57.2", "@opentelemetry/resources": "1.30.1", "@opentelemetry/sdk-metrics": "1.30.1" }, @@ -2158,9 +2159,9 @@ } }, "node_modules/@opentelemetry/exporter-prometheus": { - "version": "0.57.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-prometheus/-/exporter-prometheus-0.57.1.tgz", - "integrity": "sha512-lwwOQzyvhzioGCYmIh7mXo+RLSoEVhuO0dFzWeEiQhFkjSUOPgKQKNTgYtl2KO1L7XIbHp5LIgn4nZrYx191Rg==", + "version": "0.57.2", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-prometheus/-/exporter-prometheus-0.57.2.tgz", + "integrity": "sha512-VqIqXnuxWMWE/1NatAGtB1PvsQipwxDcdG4RwA/umdBcW3/iOHp0uejvFHTRN2O78ZPged87ErJajyUBPUhlDQ==", "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "1.30.1", @@ -2175,15 +2176,16 @@ } }, "node_modules/@opentelemetry/exporter-trace-otlp-grpc": { - "version": "0.57.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-grpc/-/exporter-trace-otlp-grpc-0.57.1.tgz", - "integrity": "sha512-a9/4w2nyfehxMA64VGcZ4OXePGLjTz9H/dvqbOzVmIBZe9R6bkOeT68M9WoxAEdUZcJDK8XS3EloJId1rjPrag==", + "version": "0.57.2", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-grpc/-/exporter-trace-otlp-grpc-0.57.2.tgz", + "integrity": "sha512-gHU1vA3JnHbNxEXg5iysqCWxN9j83d7/epTYBZflqQnTyCC4N7yZXn/dMM+bEmyhQPGjhCkNZLx4vZuChH1PYw==", "license": "Apache-2.0", "dependencies": { "@grpc/grpc-js": "^1.7.1", "@opentelemetry/core": "1.30.1", - "@opentelemetry/otlp-grpc-exporter-base": "0.57.1", - "@opentelemetry/otlp-transformer": "0.57.1", + "@opentelemetry/otlp-exporter-base": "0.57.2", + "@opentelemetry/otlp-grpc-exporter-base": "0.57.2", + "@opentelemetry/otlp-transformer": "0.57.2", "@opentelemetry/resources": "1.30.1", "@opentelemetry/sdk-trace-base": "1.30.1" }, @@ -2195,14 +2197,14 @@ } }, "node_modules/@opentelemetry/exporter-trace-otlp-http": { - "version": "0.57.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-http/-/exporter-trace-otlp-http-0.57.1.tgz", - "integrity": "sha512-43dLEjlf6JGxpVt9RaRlJAvjHG1wGsbAuNd67RIDy/95zfKk2aNovtiGUgFdS/kcvgvS90upIUbgn0xUd9JjMg==", + "version": "0.57.2", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-http/-/exporter-trace-otlp-http-0.57.2.tgz", + "integrity": "sha512-sB/gkSYFu+0w2dVQ0PWY9fAMl172PKMZ/JrHkkW8dmjCL0CYkmXeE+ssqIL/yBUTPOvpLIpenX5T9RwXRBW/3g==", "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "1.30.1", - "@opentelemetry/otlp-exporter-base": "0.57.1", - "@opentelemetry/otlp-transformer": "0.57.1", + "@opentelemetry/otlp-exporter-base": "0.57.2", + "@opentelemetry/otlp-transformer": "0.57.2", "@opentelemetry/resources": "1.30.1", "@opentelemetry/sdk-trace-base": "1.30.1" }, @@ -2214,14 +2216,14 @@ } }, "node_modules/@opentelemetry/exporter-trace-otlp-proto": { - "version": "0.57.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-proto/-/exporter-trace-otlp-proto-0.57.1.tgz", - "integrity": "sha512-REN6UZTNoP3Tb7vuCEy+yAjNmJGi7MLqCMdDoUSbsWGwpopxtSnsbkfVfLPsZAsumWkcq0p8p6lYvqUBDhUqIA==", + "version": "0.57.2", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-proto/-/exporter-trace-otlp-proto-0.57.2.tgz", + "integrity": "sha512-awDdNRMIwDvUtoRYxRhja5QYH6+McBLtoz1q9BeEsskhZcrGmH/V1fWpGx8n+Rc+542e8pJA6y+aullbIzQmlw==", "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "1.30.1", - "@opentelemetry/otlp-exporter-base": "0.57.1", - "@opentelemetry/otlp-transformer": "0.57.1", + "@opentelemetry/otlp-exporter-base": "0.57.2", + "@opentelemetry/otlp-transformer": "0.57.2", "@opentelemetry/resources": "1.30.1", "@opentelemetry/sdk-trace-base": "1.30.1" }, @@ -2260,12 +2262,12 @@ } }, "node_modules/@opentelemetry/instrumentation": { - "version": "0.57.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.57.1.tgz", - "integrity": "sha512-SgHEKXoVxOjc20ZYusPG3Fh+RLIZTSa4x8QtD3NfgAUDyqdFFS9W1F2ZVbZkqDCdyMcQG02Ok4duUGLHJXHgbA==", + "version": "0.57.2", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.57.2.tgz", + "integrity": "sha512-BdBGhQBh8IjZ2oIIX6F2/Q3LKm/FDDKi6ccYKcBTeilh6SNdNKveDOLk73BkSJjQLJk6qe4Yh+hHw1UPhCDdrg==", "license": "Apache-2.0", "dependencies": { - "@opentelemetry/api-logs": "0.57.1", + "@opentelemetry/api-logs": "0.57.2", "@types/shimmer": "^1.2.0", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1", @@ -2280,13 +2282,13 @@ } }, "node_modules/@opentelemetry/instrumentation-express": { - "version": "0.47.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-express/-/instrumentation-express-0.47.0.tgz", - "integrity": "sha512-XFWVx6k0XlU8lu6cBlCa29ONtVt6ADEjmxtyAyeF2+rifk8uBJbk1La0yIVfI0DoKURGbaEDTNelaXG9l/lNNQ==", + "version": "0.47.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-express/-/instrumentation-express-0.47.1.tgz", + "integrity": "sha512-QNXPTWteDclR2B4pDFpz0TNghgB33UMjUt14B+BZPmtH1MwUFAfLHBaP5If0Z5NZC+jaH8oF2glgYjrmhZWmSw==", "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "^1.8.0", - "@opentelemetry/instrumentation": "^0.57.0", + "@opentelemetry/instrumentation": "^0.57.1", "@opentelemetry/semantic-conventions": "^1.27.0" }, "engines": { @@ -2297,12 +2299,12 @@ } }, "node_modules/@opentelemetry/instrumentation-grpc": { - "version": "0.57.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-grpc/-/instrumentation-grpc-0.57.1.tgz", - "integrity": "sha512-tZ0LO6hxLCnQfSS03BpYWc+kZpqFJJUbYb+GfEr5YJ1/YrOtRP8lCpC8AC1QIVmqGn+Vlxjkn3tSifNHsk9enw==", + "version": "0.57.2", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-grpc/-/instrumentation-grpc-0.57.2.tgz", + "integrity": "sha512-TR6YQA67cLSZzdxbf2SrbADJy2Y8eBW1+9mF15P0VK2MYcpdoUSmQTF1oMkBwa3B9NwqDFA2fq7wYTTutFQqaQ==", "license": "Apache-2.0", "dependencies": { - "@opentelemetry/instrumentation": "0.57.1", + "@opentelemetry/instrumentation": "0.57.2", "@opentelemetry/semantic-conventions": "1.28.0" }, "engines": { @@ -2322,13 +2324,13 @@ } }, "node_modules/@opentelemetry/instrumentation-http": { - "version": "0.57.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-http/-/instrumentation-http-0.57.1.tgz", - "integrity": "sha512-ThLmzAQDs7b/tdKI3BV2+yawuF09jF111OFsovqT1Qj3D8vjwKBwhi/rDE5xethwn4tSXtZcJ9hBsVAlWFQZ7g==", + "version": "0.57.2", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-http/-/instrumentation-http-0.57.2.tgz", + "integrity": "sha512-1Uz5iJ9ZAlFOiPuwYg29Bf7bJJc/GeoeJIFKJYQf67nTVKFe8RHbEtxgkOmK4UGZNHKXcpW4P8cWBYzBn1USpg==", "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "1.30.1", - "@opentelemetry/instrumentation": "0.57.1", + "@opentelemetry/instrumentation": "0.57.2", "@opentelemetry/semantic-conventions": "1.28.0", "forwarded-parse": "2.1.2", "semver": "^7.5.2" @@ -2360,13 +2362,13 @@ } }, "node_modules/@opentelemetry/instrumentation-pg": { - "version": "0.51.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-pg/-/instrumentation-pg-0.51.0.tgz", - "integrity": "sha512-/NStIcUWUofc11dL7tSgMk25NqvhtbHDCncgm+yc4iJF8Ste2Q/lwUitjfxqj4qWM280uFmBEtcmtMMjbjRU7Q==", + "version": "0.51.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-pg/-/instrumentation-pg-0.51.1.tgz", + "integrity": "sha512-QxgjSrxyWZc7Vk+qGSfsejPVFL1AgAJdSBMYZdDUbwg730D09ub3PXScB9d04vIqPriZ+0dqzjmQx0yWKiCi2Q==", "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "^1.26.0", - "@opentelemetry/instrumentation": "^0.57.0", + "@opentelemetry/instrumentation": "^0.57.1", "@opentelemetry/semantic-conventions": "^1.27.0", "@opentelemetry/sql-common": "^0.40.1", "@types/pg": "8.6.1", @@ -2389,13 +2391,13 @@ } }, "node_modules/@opentelemetry/instrumentation-winston": { - "version": "0.44.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-winston/-/instrumentation-winston-0.44.0.tgz", - "integrity": "sha512-2uIrdmDIU9qJuHHKXTI3Gef+tNQmKtcwXDA6S0tm+KpKgkMwZB6AC0rNmGNQsxbGJSORj0NJvy5TVvk6jjsaqg==", + "version": "0.44.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-winston/-/instrumentation-winston-0.44.1.tgz", + "integrity": "sha512-iexblTsT3fP0hHUz/M1mWr+Ylg3bsYN2En/jvKXZtboW3Qkvt17HrQJYTF9leVIkXAfN97QxAcTE99YGbQW7vQ==", "license": "Apache-2.0", "dependencies": { - "@opentelemetry/api-logs": "^0.57.0", - "@opentelemetry/instrumentation": "^0.57.0" + "@opentelemetry/api-logs": "^0.57.1", + "@opentelemetry/instrumentation": "^0.57.1" }, "engines": { "node": ">=14" @@ -2417,13 +2419,13 @@ } }, "node_modules/@opentelemetry/otlp-exporter-base": { - "version": "0.57.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-exporter-base/-/otlp-exporter-base-0.57.1.tgz", - "integrity": "sha512-GNBJAEYfeiYJQ3O2dvXgiNZ/qjWrBxSb1L1s7iV/jKBRGMN3Nv+miTk2SLeEobF5E5ZK4rVcHKlBZ71bPVIv/g==", + "version": "0.57.2", + "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-exporter-base/-/otlp-exporter-base-0.57.2.tgz", + "integrity": "sha512-XdxEzL23Urhidyebg5E6jZoaiW5ygP/mRjxLHixogbqwDy2Faduzb5N0o/Oi+XTIJu+iyxXdVORjXax+Qgfxag==", "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "1.30.1", - "@opentelemetry/otlp-transformer": "0.57.1" + "@opentelemetry/otlp-transformer": "0.57.2" }, "engines": { "node": ">=14" @@ -2433,15 +2435,15 @@ } }, "node_modules/@opentelemetry/otlp-grpc-exporter-base": { - "version": "0.57.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-grpc-exporter-base/-/otlp-grpc-exporter-base-0.57.1.tgz", - "integrity": "sha512-wWflmkDhH/3wf6yEqPmzmqA6r+A8+LQABfIVZC0jDGtWVJj6eCWcGHU41UxupMbbsgjZRLYtWDilaCHOjmR7gg==", + "version": "0.57.2", + "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-grpc-exporter-base/-/otlp-grpc-exporter-base-0.57.2.tgz", + "integrity": "sha512-USn173KTWy0saqqRB5yU9xUZ2xdgb1Rdu5IosJnm9aV4hMTuFFRTUsQxbgc24QxpCHeoKzzCSnS/JzdV0oM2iQ==", "license": "Apache-2.0", "dependencies": { "@grpc/grpc-js": "^1.7.1", "@opentelemetry/core": "1.30.1", - "@opentelemetry/otlp-exporter-base": "0.57.1", - "@opentelemetry/otlp-transformer": "0.57.1" + "@opentelemetry/otlp-exporter-base": "0.57.2", + "@opentelemetry/otlp-transformer": "0.57.2" }, "engines": { "node": ">=14" @@ -2451,15 +2453,15 @@ } }, "node_modules/@opentelemetry/otlp-transformer": { - "version": "0.57.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-transformer/-/otlp-transformer-0.57.1.tgz", - "integrity": "sha512-EX67y+ukNNfFrOLyjYGw8AMy0JPIlEX1dW60SGUNZWW2hSQyyolX7EqFuHP5LtXLjJHNfzx5SMBVQ3owaQCNDw==", + "version": "0.57.2", + "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-transformer/-/otlp-transformer-0.57.2.tgz", + "integrity": "sha512-48IIRj49gbQVK52jYsw70+Jv+JbahT8BqT2Th7C4H7RCM9d0gZ5sgNPoMpWldmfjvIsSgiGJtjfk9MeZvjhoig==", "license": "Apache-2.0", "dependencies": { - "@opentelemetry/api-logs": "0.57.1", + "@opentelemetry/api-logs": "0.57.2", "@opentelemetry/core": "1.30.1", "@opentelemetry/resources": "1.30.1", - "@opentelemetry/sdk-logs": "0.57.1", + "@opentelemetry/sdk-logs": "0.57.2", "@opentelemetry/sdk-metrics": "1.30.1", "@opentelemetry/sdk-trace-base": "1.30.1", "protobufjs": "^7.3.0" @@ -2527,12 +2529,12 @@ } }, "node_modules/@opentelemetry/sdk-logs": { - "version": "0.57.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-logs/-/sdk-logs-0.57.1.tgz", - "integrity": "sha512-jGdObb/BGWu6Peo3cL3skx/Rl1Ak/wDDO3vpPrrThGbqE7isvkCsX6uE+OAt8Ayjm9YC8UGkohWbLR09JmM0FA==", + "version": "0.57.2", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-logs/-/sdk-logs-0.57.2.tgz", + "integrity": "sha512-TXFHJ5c+BKggWbdEQ/inpgIzEmS2BGQowLE9UhsMd7YYlUfBQJ4uax0VF/B5NYigdM/75OoJGhAV3upEhK+3gg==", "license": "Apache-2.0", "dependencies": { - "@opentelemetry/api-logs": "0.57.1", + "@opentelemetry/api-logs": "0.57.2", "@opentelemetry/core": "1.30.1", "@opentelemetry/resources": "1.30.1" }, @@ -2560,27 +2562,27 @@ } }, "node_modules/@opentelemetry/sdk-node": { - "version": "0.57.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-node/-/sdk-node-0.57.1.tgz", - "integrity": "sha512-0i25YQCpNiE1RDiaZ6ECO3Hgd6DIJeyHyA2AY9C4szMdZV5cM2m8/nrwK6fyNZdOEjRd54D/FkyP3aqZVIPGvg==", + "version": "0.57.2", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-node/-/sdk-node-0.57.2.tgz", + "integrity": "sha512-8BaeqZyN5sTuPBtAoY+UtKwXBdqyuRKmekN5bFzAO40CgbGzAxfTpiL3PBerT7rhZ7p2nBdq7FaMv/tBQgHE4A==", "license": "Apache-2.0", "dependencies": { - "@opentelemetry/api-logs": "0.57.1", + "@opentelemetry/api-logs": "0.57.2", "@opentelemetry/core": "1.30.1", - "@opentelemetry/exporter-logs-otlp-grpc": "0.57.1", - "@opentelemetry/exporter-logs-otlp-http": "0.57.1", - "@opentelemetry/exporter-logs-otlp-proto": "0.57.1", - "@opentelemetry/exporter-metrics-otlp-grpc": "0.57.1", - "@opentelemetry/exporter-metrics-otlp-http": "0.57.1", - "@opentelemetry/exporter-metrics-otlp-proto": "0.57.1", - "@opentelemetry/exporter-prometheus": "0.57.1", - "@opentelemetry/exporter-trace-otlp-grpc": "0.57.1", - "@opentelemetry/exporter-trace-otlp-http": "0.57.1", - "@opentelemetry/exporter-trace-otlp-proto": "0.57.1", + "@opentelemetry/exporter-logs-otlp-grpc": "0.57.2", + "@opentelemetry/exporter-logs-otlp-http": "0.57.2", + "@opentelemetry/exporter-logs-otlp-proto": "0.57.2", + "@opentelemetry/exporter-metrics-otlp-grpc": "0.57.2", + "@opentelemetry/exporter-metrics-otlp-http": "0.57.2", + "@opentelemetry/exporter-metrics-otlp-proto": "0.57.2", + "@opentelemetry/exporter-prometheus": "0.57.2", + "@opentelemetry/exporter-trace-otlp-grpc": "0.57.2", + "@opentelemetry/exporter-trace-otlp-http": "0.57.2", + "@opentelemetry/exporter-trace-otlp-proto": "0.57.2", "@opentelemetry/exporter-zipkin": "1.30.1", - "@opentelemetry/instrumentation": "0.57.1", + "@opentelemetry/instrumentation": "0.57.2", "@opentelemetry/resources": "1.30.1", - "@opentelemetry/sdk-logs": "0.57.1", + "@opentelemetry/sdk-logs": "0.57.2", "@opentelemetry/sdk-metrics": "1.30.1", "@opentelemetry/sdk-trace-base": "1.30.1", "@opentelemetry/sdk-trace-node": "1.30.1", @@ -3257,17 +3259,17 @@ "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.24.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.24.0.tgz", - "integrity": "sha512-aFcXEJJCI4gUdXgoo/j9udUYIHgF23MFkg09LFz2dzEmU0+1Plk4rQWv/IYKvPHAtlkkGoB3m5e6oUp+JPsNaQ==", + "version": "8.25.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.25.0.tgz", + "integrity": "sha512-VM7bpzAe7JO/BFf40pIT1lJqS/z1F8OaSsUB3rpFJucQA4cOSuH2RVVVkFULN+En0Djgr29/jb4EQnedUo95KA==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.24.0", - "@typescript-eslint/type-utils": "8.24.0", - "@typescript-eslint/utils": "8.24.0", - "@typescript-eslint/visitor-keys": "8.24.0", + "@typescript-eslint/scope-manager": "8.25.0", + "@typescript-eslint/type-utils": "8.25.0", + "@typescript-eslint/utils": "8.25.0", + "@typescript-eslint/visitor-keys": "8.25.0", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", @@ -3287,16 +3289,16 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.24.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.24.0.tgz", - "integrity": "sha512-MFDaO9CYiard9j9VepMNa9MTcqVvSny2N4hkY6roquzj8pdCBRENhErrteaQuu7Yjn1ppk0v1/ZF9CG3KIlrTA==", + "version": "8.25.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.25.0.tgz", + "integrity": "sha512-4gbs64bnbSzu4FpgMiQ1A+D+urxkoJk/kqlDJ2W//5SygaEiAP2B4GoS7TEdxgwol2el03gckFV9lJ4QOMiiHg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.24.0", - "@typescript-eslint/types": "8.24.0", - "@typescript-eslint/typescript-estree": "8.24.0", - "@typescript-eslint/visitor-keys": "8.24.0", + "@typescript-eslint/scope-manager": "8.25.0", + "@typescript-eslint/types": "8.25.0", + "@typescript-eslint/typescript-estree": "8.25.0", + "@typescript-eslint/visitor-keys": "8.25.0", "debug": "^4.3.4" }, "engines": { @@ -3312,14 +3314,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.24.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.24.0.tgz", - "integrity": "sha512-HZIX0UByphEtdVBKaQBgTDdn9z16l4aTUz8e8zPQnyxwHBtf5vtl1L+OhH+m1FGV9DrRmoDuYKqzVrvWDcDozw==", + "version": "8.25.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.25.0.tgz", + "integrity": "sha512-6PPeiKIGbgStEyt4NNXa2ru5pMzQ8OYKO1hX1z53HMomrmiSB+R5FmChgQAP1ro8jMtNawz+TRQo/cSXrauTpg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.24.0", - "@typescript-eslint/visitor-keys": "8.24.0" + "@typescript-eslint/types": "8.25.0", + "@typescript-eslint/visitor-keys": "8.25.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -3330,14 +3332,14 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.24.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.24.0.tgz", - "integrity": "sha512-8fitJudrnY8aq0F1wMiPM1UUgiXQRJ5i8tFjq9kGfRajU+dbPyOuHbl0qRopLEidy0MwqgTHDt6CnSeXanNIwA==", + "version": "8.25.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.25.0.tgz", + "integrity": "sha512-d77dHgHWnxmXOPJuDWO4FDWADmGQkN5+tt6SFRZz/RtCWl4pHgFl3+WdYCn16+3teG09DY6XtEpf3gGD0a186g==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "8.24.0", - "@typescript-eslint/utils": "8.24.0", + "@typescript-eslint/typescript-estree": "8.25.0", + "@typescript-eslint/utils": "8.25.0", "debug": "^4.3.4", "ts-api-utils": "^2.0.1" }, @@ -3354,9 +3356,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.24.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.24.0.tgz", - "integrity": "sha512-VacJCBTyje7HGAw7xp11q439A+zeGG0p0/p2zsZwpnMzjPB5WteaWqt4g2iysgGFafrqvyLWqq6ZPZAOCoefCw==", + "version": "8.25.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.25.0.tgz", + "integrity": "sha512-+vUe0Zb4tkNgznQwicsvLUJgZIRs6ITeWSCclX1q85pR1iOiaj+4uZJIUp//Z27QWu5Cseiw3O3AR8hVpax7Aw==", "dev": true, "license": "MIT", "engines": { @@ -3368,14 +3370,14 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.24.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.24.0.tgz", - "integrity": "sha512-ITjYcP0+8kbsvT9bysygfIfb+hBj6koDsu37JZG7xrCiy3fPJyNmfVtaGsgTUSEuTzcvME5YI5uyL5LD1EV5ZQ==", + "version": "8.25.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.25.0.tgz", + "integrity": "sha512-ZPaiAKEZ6Blt/TPAx5Ot0EIB/yGtLI2EsGoY6F7XKklfMxYQyvtL+gT/UCqkMzO0BVFHLDlzvFqQzurYahxv9Q==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.24.0", - "@typescript-eslint/visitor-keys": "8.24.0", + "@typescript-eslint/types": "8.25.0", + "@typescript-eslint/visitor-keys": "8.25.0", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", @@ -3434,16 +3436,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.24.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.24.0.tgz", - "integrity": "sha512-07rLuUBElvvEb1ICnafYWr4hk8/U7X9RDCOqd9JcAMtjh/9oRmcfN4yGzbPVirgMR0+HLVHehmu19CWeh7fsmQ==", + "version": "8.25.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.25.0.tgz", + "integrity": "sha512-syqRbrEv0J1wywiLsK60XzHnQe/kRViI3zwFALrNEgnntn1l24Ra2KvOAWwWbWZ1lBZxZljPDGOq967dsl6fkA==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "8.24.0", - "@typescript-eslint/types": "8.24.0", - "@typescript-eslint/typescript-estree": "8.24.0" + "@typescript-eslint/scope-manager": "8.25.0", + "@typescript-eslint/types": "8.25.0", + "@typescript-eslint/typescript-estree": "8.25.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -3458,13 +3460,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.24.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.24.0.tgz", - "integrity": "sha512-kArLq83QxGLbuHrTMoOEWO+l2MwsNS2TGISEdx8xgqpkbytB07XmlQyQdNDrCc1ecSqx0cnmhGvpX+VBwqqSkg==", + "version": "8.25.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.25.0.tgz", + "integrity": "sha512-kCYXKAum9CecGVHGij7muybDfTS2sD3t0L4bJsEZLkyrXUImiCTq1M3LG2SRtOhiHFwMR9wAFplpT6XHYjTkwQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.24.0", + "@typescript-eslint/types": "8.25.0", "eslint-visitor-keys": "^4.2.0" }, "engines": { @@ -3867,9 +3869,9 @@ "license": "MIT" }, "node_modules/axios": { - "version": "1.7.9", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.9.tgz", - "integrity": "sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==", + "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", @@ -5450,22 +5452,22 @@ "license": "MIT" }, "node_modules/eslint": { - "version": "9.20.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.20.1.tgz", - "integrity": "sha512-m1mM33o6dBUjxl2qb6wv6nGNwCAsns1eKtaQ4l/NPHeTvhiUPbtdfMyktxN4B3fgHIgsYh1VT3V9txblpQHq+g==", + "version": "9.21.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.21.0.tgz", + "integrity": "sha512-KjeihdFqTPhOMXTt7StsDxriV4n66ueuF/jfPNC3j/lduHwr/ijDwJMsF+wyMJethgiKi5wniIE243vi07d3pg==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.12.1", - "@eslint/config-array": "^0.19.0", - "@eslint/core": "^0.11.0", - "@eslint/eslintrc": "^3.2.0", - "@eslint/js": "9.20.0", - "@eslint/plugin-kit": "^0.2.5", + "@eslint/config-array": "^0.19.2", + "@eslint/core": "^0.12.0", + "@eslint/eslintrc": "^3.3.0", + "@eslint/js": "9.21.0", + "@eslint/plugin-kit": "^0.2.7", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", - "@humanwhocodes/retry": "^0.4.1", + "@humanwhocodes/retry": "^0.4.2", "@types/estree": "^1.0.6", "@types/json-schema": "^7.0.15", "ajv": "^6.12.4", @@ -5761,6 +5763,19 @@ "balanced-match": "^1.0.0" } }, + "node_modules/eslint-plugin-n/node_modules/globals": { + "version": "15.15.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.15.0.tgz", + "integrity": "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/eslint-plugin-n/node_modules/minimatch": { "version": "9.0.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", @@ -5859,19 +5874,6 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint/node_modules/@eslint/core": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.11.0.tgz", - "integrity": "sha512-DWUB2pksgNEb6Bz2fggIy1wh6fGgZP4Xyy/Mt0QZPiloKKXerbqq9D3SBQTlCRYOrcRPu4vuz+CGjwdfqxnoWA==", - "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/node_modules/ansi-styles": { "version": "4.3.0", "dev": true, @@ -6912,9 +6914,9 @@ } }, "node_modules/globals": { - "version": "15.15.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-15.15.0.tgz", - "integrity": "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==", + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-16.0.0.tgz", + "integrity": "sha512-iInW14XItCXET01CQFqudPOWP2jYMl7T+QRQT+UNcR/iQncN/F0UNpgd76iFkBPgNQb4+X3LV9tLJYzwh+Gl3A==", "dev": true, "license": "MIT", "engines": { @@ -7233,9 +7235,9 @@ } }, "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", "dev": true, "license": "MIT", "dependencies": { @@ -10651,9 +10653,9 @@ } }, "node_modules/prettier": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.1.tgz", - "integrity": "sha512-hPpFQvHwL3Qv5AdRvBFMhnKo4tYxp0ReXiPn2bxkiohEX6mBeBwEpBSQTkD458RaaDKQMYSp4hX4UtfUTA5wDw==", + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.2.tgz", + "integrity": "sha512-lc6npv5PH7hVqozBR7lkBNOGXV9vMwROAPlumdBkX0wTbbzPu/U1hk5yL8p2pt4Xoc+2mkT8t/sow2YrV/M5qg==", "dev": true, "license": "MIT", "bin": { @@ -12077,7 +12079,9 @@ } }, "node_modules/ts-jest": { - "version": "29.2.5", + "version": "29.2.6", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.2.6.tgz", + "integrity": "sha512-yTNZVZqc8lSixm+QGVFcPe6+yj7+TWZwIesuOWvfcn4B9bz5x4NDzVCQQjOs7Hfouu36aEqfEbo9Qpo+gq8dDg==", "dev": true, "license": "MIT", "dependencies": { @@ -12088,7 +12092,7 @@ "json5": "^2.2.3", "lodash.memoize": "^4.1.2", "make-error": "^1.3.6", - "semver": "^7.6.3", + "semver": "^7.7.1", "yargs-parser": "^21.1.1" }, "bin": { @@ -12124,7 +12128,9 @@ } }, "node_modules/ts-jest/node_modules/semver": { - "version": "7.6.3", + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", "dev": true, "license": "ISC", "bin": { @@ -12366,15 +12372,15 @@ } }, "node_modules/typescript-eslint": { - "version": "8.24.0", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.24.0.tgz", - "integrity": "sha512-/lmv4366en/qbB32Vz5+kCNZEMf6xYHwh1z48suBwZvAtnXKbP+YhGe8OLE2BqC67LMqKkCNLtjejdwsdW6uOQ==", + "version": "8.25.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.25.0.tgz", + "integrity": "sha512-TxRdQQLH4g7JkoFlYG3caW5v1S6kEkz8rqt80iQJZUYPq1zD1Ra7HfQBJJ88ABRaMvHAXnwRvRB4V+6sQ9xN5Q==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/eslint-plugin": "8.24.0", - "@typescript-eslint/parser": "8.24.0", - "@typescript-eslint/utils": "8.24.0" + "@typescript-eslint/eslint-plugin": "8.25.0", + "@typescript-eslint/parser": "8.25.0", + "@typescript-eslint/utils": "8.25.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" diff --git a/package.json b/package.json index b588fc856..94859508a 100644 --- a/package.json +++ b/package.json @@ -71,17 +71,17 @@ "@grpc/grpc-js": "^1.12.6", "@iarna/toml": "^2.2.5", "@opentelemetry/api": "^1.9.0", - "@opentelemetry/exporter-trace-otlp-grpc": "^0.57.1", - "@opentelemetry/instrumentation-express": "^0.47.0", - "@opentelemetry/instrumentation-grpc": "^0.57.1", - "@opentelemetry/instrumentation-http": "^0.57.1", - "@opentelemetry/instrumentation-pg": "^0.51.0", - "@opentelemetry/instrumentation-winston": "^0.44.0", - "@opentelemetry/sdk-node": "^0.57.1", + "@opentelemetry/exporter-trace-otlp-grpc": "^0.57.2", + "@opentelemetry/instrumentation-express": "^0.47.1", + "@opentelemetry/instrumentation-grpc": "^0.57.2", + "@opentelemetry/instrumentation-http": "^0.57.2", + "@opentelemetry/instrumentation-pg": "^0.51.1", + "@opentelemetry/instrumentation-winston": "^0.44.1", + "@opentelemetry/sdk-node": "^0.57.2", "@pyroscope/nodejs": "^0.4.3", "@vulpemventures/secp256k1-zkp": "^3.2.1", "async-lock": "^1.4.1", - "axios": "^1.7.9", + "axios": "^1.8.1", "bip32": "^4.0.0", "bip39": "^3.1.0", "bitcoinjs-lib": "^6.1.7", @@ -109,7 +109,7 @@ }, "devDependencies": { "@boltz/bitcoin-ops": "^2.0.0", - "@eslint/js": "^9.20.0", + "@eslint/js": "^9.21.0", "@openzeppelin/contracts": "^5.2.0", "@trivago/prettier-plugin-sort-imports": "^5.2.2", "@types/async-lock": "^1.4.2", @@ -121,21 +121,21 @@ "@types/pg": "^8.11.11", "@types/yargs": "^17.0.33", "cross-os": "^1.5.0", - "eslint": "^9.20.1", + "eslint": "^9.21.0", "eslint-plugin-import": "^2.31.0", "eslint-plugin-jest": "^28.11.0", "eslint-plugin-n": "^17.15.1", "eslint-plugin-node": "^11.1.0", "git-cliff": "^2.8.0", - "globals": "^15.15.0", + "globals": "^16.0.0", "grpc_tools_node_protoc_ts": "^5.3.3", "grpc-tools": "^1.13.0", "jest": "^29.7.0", - "prettier": "^3.5.1", + "prettier": "^3.5.2", "sqlite3": "^5.1.7", "swagger-jsdoc": "^6.2.8", - "ts-jest": "^29.2.5", + "ts-jest": "^29.2.6", "typescript": "^5.7.3", - "typescript-eslint": "^8.24.0" + "typescript-eslint": "^8.25.0" } }