clients: snapshot

This commit is contained in:
nym21
2026-01-14 00:39:28 +01:00
parent 524ab3de05
commit 3a836ab0f4
15 changed files with 869 additions and 896 deletions
+316 -314
View File
@@ -2902,59 +2902,6 @@ function createPrice111dSmaPattern(client, acc) {
};
}
/**
* @typedef {Object} PercentilesPattern
* @property {MetricPattern4<Dollars>} pct05
* @property {MetricPattern4<Dollars>} pct10
* @property {MetricPattern4<Dollars>} pct15
* @property {MetricPattern4<Dollars>} pct20
* @property {MetricPattern4<Dollars>} pct25
* @property {MetricPattern4<Dollars>} pct30
* @property {MetricPattern4<Dollars>} pct35
* @property {MetricPattern4<Dollars>} pct40
* @property {MetricPattern4<Dollars>} pct45
* @property {MetricPattern4<Dollars>} pct50
* @property {MetricPattern4<Dollars>} pct55
* @property {MetricPattern4<Dollars>} pct60
* @property {MetricPattern4<Dollars>} pct65
* @property {MetricPattern4<Dollars>} pct70
* @property {MetricPattern4<Dollars>} pct75
* @property {MetricPattern4<Dollars>} pct80
* @property {MetricPattern4<Dollars>} pct85
* @property {MetricPattern4<Dollars>} pct90
* @property {MetricPattern4<Dollars>} pct95
*/
/**
* Create a PercentilesPattern pattern node
* @param {BrkClientBase} client
* @param {string} acc - Accumulated metric name
* @returns {PercentilesPattern}
*/
function createPercentilesPattern(client, acc) {
return {
pct05: createMetricPattern4(client, _m(acc, "pct05")),
pct10: createMetricPattern4(client, _m(acc, "pct10")),
pct15: createMetricPattern4(client, _m(acc, "pct15")),
pct20: createMetricPattern4(client, _m(acc, "pct20")),
pct25: createMetricPattern4(client, _m(acc, "pct25")),
pct30: createMetricPattern4(client, _m(acc, "pct30")),
pct35: createMetricPattern4(client, _m(acc, "pct35")),
pct40: createMetricPattern4(client, _m(acc, "pct40")),
pct45: createMetricPattern4(client, _m(acc, "pct45")),
pct50: createMetricPattern4(client, _m(acc, "pct50")),
pct55: createMetricPattern4(client, _m(acc, "pct55")),
pct60: createMetricPattern4(client, _m(acc, "pct60")),
pct65: createMetricPattern4(client, _m(acc, "pct65")),
pct70: createMetricPattern4(client, _m(acc, "pct70")),
pct75: createMetricPattern4(client, _m(acc, "pct75")),
pct80: createMetricPattern4(client, _m(acc, "pct80")),
pct85: createMetricPattern4(client, _m(acc, "pct85")),
pct90: createMetricPattern4(client, _m(acc, "pct90")),
pct95: createMetricPattern4(client, _m(acc, "pct95")),
};
}
/**
* @typedef {Object} ActivePriceRatioPattern
* @property {MetricPattern4<StoredF32>} ratio
@@ -3008,6 +2955,59 @@ function createActivePriceRatioPattern(client, acc) {
};
}
/**
* @typedef {Object} PercentilesPattern
* @property {MetricPattern4<Dollars>} pct05
* @property {MetricPattern4<Dollars>} pct10
* @property {MetricPattern4<Dollars>} pct15
* @property {MetricPattern4<Dollars>} pct20
* @property {MetricPattern4<Dollars>} pct25
* @property {MetricPattern4<Dollars>} pct30
* @property {MetricPattern4<Dollars>} pct35
* @property {MetricPattern4<Dollars>} pct40
* @property {MetricPattern4<Dollars>} pct45
* @property {MetricPattern4<Dollars>} pct50
* @property {MetricPattern4<Dollars>} pct55
* @property {MetricPattern4<Dollars>} pct60
* @property {MetricPattern4<Dollars>} pct65
* @property {MetricPattern4<Dollars>} pct70
* @property {MetricPattern4<Dollars>} pct75
* @property {MetricPattern4<Dollars>} pct80
* @property {MetricPattern4<Dollars>} pct85
* @property {MetricPattern4<Dollars>} pct90
* @property {MetricPattern4<Dollars>} pct95
*/
/**
* Create a PercentilesPattern pattern node
* @param {BrkClientBase} client
* @param {string} acc - Accumulated metric name
* @returns {PercentilesPattern}
*/
function createPercentilesPattern(client, acc) {
return {
pct05: createMetricPattern4(client, _m(acc, "pct05")),
pct10: createMetricPattern4(client, _m(acc, "pct10")),
pct15: createMetricPattern4(client, _m(acc, "pct15")),
pct20: createMetricPattern4(client, _m(acc, "pct20")),
pct25: createMetricPattern4(client, _m(acc, "pct25")),
pct30: createMetricPattern4(client, _m(acc, "pct30")),
pct35: createMetricPattern4(client, _m(acc, "pct35")),
pct40: createMetricPattern4(client, _m(acc, "pct40")),
pct45: createMetricPattern4(client, _m(acc, "pct45")),
pct50: createMetricPattern4(client, _m(acc, "pct50")),
pct55: createMetricPattern4(client, _m(acc, "pct55")),
pct60: createMetricPattern4(client, _m(acc, "pct60")),
pct65: createMetricPattern4(client, _m(acc, "pct65")),
pct70: createMetricPattern4(client, _m(acc, "pct70")),
pct75: createMetricPattern4(client, _m(acc, "pct75")),
pct80: createMetricPattern4(client, _m(acc, "pct80")),
pct85: createMetricPattern4(client, _m(acc, "pct85")),
pct90: createMetricPattern4(client, _m(acc, "pct90")),
pct95: createMetricPattern4(client, _m(acc, "pct95")),
};
}
/**
* @typedef {Object} RelativePattern5
* @property {MetricPattern1<StoredF32>} negUnrealizedLossRelToMarketCap
@@ -3338,17 +3338,17 @@ function createBitcoinPattern(client, acc) {
*/
function createClassAveragePricePattern(client, acc) {
return {
_2015: createMetricPattern4(client, _m(acc, "2015_average_price")),
_2016: createMetricPattern4(client, _m(acc, "2016_average_price")),
_2017: createMetricPattern4(client, _m(acc, "2017_average_price")),
_2018: createMetricPattern4(client, _m(acc, "2018_average_price")),
_2019: createMetricPattern4(client, _m(acc, "2019_average_price")),
_2020: createMetricPattern4(client, _m(acc, "2020_average_price")),
_2021: createMetricPattern4(client, _m(acc, "2021_average_price")),
_2022: createMetricPattern4(client, _m(acc, "2022_average_price")),
_2023: createMetricPattern4(client, _m(acc, "2023_average_price")),
_2024: createMetricPattern4(client, _m(acc, "2024_average_price")),
_2025: createMetricPattern4(client, _m(acc, "2025_average_price")),
_2015: createMetricPattern4(client, _m(acc, "2015_returns")),
_2016: createMetricPattern4(client, _m(acc, "2016_returns")),
_2017: createMetricPattern4(client, _m(acc, "2017_returns")),
_2018: createMetricPattern4(client, _m(acc, "2018_returns")),
_2019: createMetricPattern4(client, _m(acc, "2019_returns")),
_2020: createMetricPattern4(client, _m(acc, "2020_returns")),
_2021: createMetricPattern4(client, _m(acc, "2021_returns")),
_2022: createMetricPattern4(client, _m(acc, "2022_returns")),
_2023: createMetricPattern4(client, _m(acc, "2023_returns")),
_2024: createMetricPattern4(client, _m(acc, "2024_returns")),
_2025: createMetricPattern4(client, _m(acc, "2025_returns")),
};
}
@@ -3588,41 +3588,6 @@ function createAddrCountPattern(client, acc) {
};
}
/**
* @template T
* @typedef {Object} FullnessPattern
* @property {MetricPattern2<T>} average
* @property {MetricPattern11<T>} base
* @property {MetricPattern2<T>} max
* @property {MetricPattern6<T>} median
* @property {MetricPattern2<T>} min
* @property {MetricPattern6<T>} pct10
* @property {MetricPattern6<T>} pct25
* @property {MetricPattern6<T>} pct75
* @property {MetricPattern6<T>} pct90
*/
/**
* Create a FullnessPattern pattern node
* @template T
* @param {BrkClientBase} client
* @param {string} acc - Accumulated metric name
* @returns {FullnessPattern<T>}
*/
function createFullnessPattern(client, acc) {
return {
average: createMetricPattern2(client, _m(acc, "average")),
base: createMetricPattern11(client, acc),
max: createMetricPattern2(client, _m(acc, "max")),
median: createMetricPattern6(client, _m(acc, "median")),
min: createMetricPattern2(client, _m(acc, "min")),
pct10: createMetricPattern6(client, _m(acc, "pct10")),
pct25: createMetricPattern6(client, _m(acc, "pct25")),
pct75: createMetricPattern6(client, _m(acc, "pct75")),
pct90: createMetricPattern6(client, _m(acc, "pct90")),
};
}
/**
* @template T
* @typedef {Object} FeeRatePattern
@@ -3658,6 +3623,41 @@ function createFeeRatePattern(client, acc) {
};
}
/**
* @template T
* @typedef {Object} FullnessPattern
* @property {MetricPattern2<T>} average
* @property {MetricPattern11<T>} base
* @property {MetricPattern2<T>} max
* @property {MetricPattern6<T>} median
* @property {MetricPattern2<T>} min
* @property {MetricPattern6<T>} pct10
* @property {MetricPattern6<T>} pct25
* @property {MetricPattern6<T>} pct75
* @property {MetricPattern6<T>} pct90
*/
/**
* Create a FullnessPattern pattern node
* @template T
* @param {BrkClientBase} client
* @param {string} acc - Accumulated metric name
* @returns {FullnessPattern<T>}
*/
function createFullnessPattern(client, acc) {
return {
average: createMetricPattern2(client, _m(acc, "average")),
base: createMetricPattern11(client, acc),
max: createMetricPattern2(client, _m(acc, "max")),
median: createMetricPattern6(client, _m(acc, "median")),
min: createMetricPattern2(client, _m(acc, "min")),
pct10: createMetricPattern6(client, _m(acc, "pct10")),
pct25: createMetricPattern6(client, _m(acc, "pct25")),
pct75: createMetricPattern6(client, _m(acc, "pct75")),
pct90: createMetricPattern6(client, _m(acc, "pct90")),
};
}
/**
* @typedef {Object} _0satsPattern
* @property {ActivityPattern2} activity
@@ -3689,35 +3689,6 @@ function create_0satsPattern(client, acc) {
};
}
/**
* @typedef {Object} PeriodCagrPattern
* @property {MetricPattern4<StoredF32>} _10y
* @property {MetricPattern4<StoredF32>} _2y
* @property {MetricPattern4<StoredF32>} _3y
* @property {MetricPattern4<StoredF32>} _4y
* @property {MetricPattern4<StoredF32>} _5y
* @property {MetricPattern4<StoredF32>} _6y
* @property {MetricPattern4<StoredF32>} _8y
*/
/**
* Create a PeriodCagrPattern pattern node
* @param {BrkClientBase} client
* @param {string} acc - Accumulated metric name
* @returns {PeriodCagrPattern}
*/
function createPeriodCagrPattern(client, acc) {
return {
_10y: createMetricPattern4(client, _p("10y", acc)),
_2y: createMetricPattern4(client, _p("2y", acc)),
_3y: createMetricPattern4(client, _p("3y", acc)),
_4y: createMetricPattern4(client, _p("4y", acc)),
_5y: createMetricPattern4(client, _p("5y", acc)),
_6y: createMetricPattern4(client, _p("6y", acc)),
_8y: createMetricPattern4(client, _p("8y", acc)),
};
}
/**
* @typedef {Object} _100btcPattern
* @property {ActivityPattern2} activity
@@ -3747,6 +3718,64 @@ function create_100btcPattern(client, acc) {
};
}
/**
* @typedef {Object} _10yTo12yPattern
* @property {ActivityPattern2} activity
* @property {CostBasisPattern2} costBasis
* @property {OutputsPattern} outputs
* @property {RealizedPattern2} realized
* @property {RelativePattern2} relative
* @property {SupplyPattern2} supply
* @property {UnrealizedPattern} unrealized
*/
/**
* Create a _10yTo12yPattern pattern node
* @param {BrkClientBase} client
* @param {string} acc - Accumulated metric name
* @returns {_10yTo12yPattern}
*/
function create_10yTo12yPattern(client, acc) {
return {
activity: createActivityPattern2(client, acc),
costBasis: createCostBasisPattern2(client, acc),
outputs: createOutputsPattern(client, _m(acc, "utxo_count")),
realized: createRealizedPattern2(client, acc),
relative: createRelativePattern2(client, acc),
supply: createSupplyPattern2(client, _m(acc, "supply")),
unrealized: createUnrealizedPattern(client, acc),
};
}
/**
* @typedef {Object} PeriodCagrPattern
* @property {MetricPattern4<StoredF32>} _10y
* @property {MetricPattern4<StoredF32>} _2y
* @property {MetricPattern4<StoredF32>} _3y
* @property {MetricPattern4<StoredF32>} _4y
* @property {MetricPattern4<StoredF32>} _5y
* @property {MetricPattern4<StoredF32>} _6y
* @property {MetricPattern4<StoredF32>} _8y
*/
/**
* Create a PeriodCagrPattern pattern node
* @param {BrkClientBase} client
* @param {string} acc - Accumulated metric name
* @returns {PeriodCagrPattern}
*/
function createPeriodCagrPattern(client, acc) {
return {
_10y: createMetricPattern4(client, _p("10y", acc)),
_2y: createMetricPattern4(client, _p("2y", acc)),
_3y: createMetricPattern4(client, _p("3y", acc)),
_4y: createMetricPattern4(client, _p("4y", acc)),
_5y: createMetricPattern4(client, _p("5y", acc)),
_6y: createMetricPattern4(client, _p("6y", acc)),
_8y: createMetricPattern4(client, _p("8y", acc)),
};
}
/**
* @typedef {Object} _0satsPattern2
* @property {ActivityPattern2} activity
@@ -3820,35 +3849,6 @@ function createUnrealizedPattern(client, acc) {
};
}
/**
* @typedef {Object} _10yTo12yPattern
* @property {ActivityPattern2} activity
* @property {CostBasisPattern2} costBasis
* @property {OutputsPattern} outputs
* @property {RealizedPattern2} realized
* @property {RelativePattern2} relative
* @property {SupplyPattern2} supply
* @property {UnrealizedPattern} unrealized
*/
/**
* Create a _10yTo12yPattern pattern node
* @param {BrkClientBase} client
* @param {string} acc - Accumulated metric name
* @returns {_10yTo12yPattern}
*/
function create_10yTo12yPattern(client, acc) {
return {
activity: createActivityPattern2(client, acc),
costBasis: createCostBasisPattern2(client, acc),
outputs: createOutputsPattern(client, _m(acc, "utxo_count")),
realized: createRealizedPattern2(client, acc),
relative: createRelativePattern2(client, acc),
supply: createSupplyPattern2(client, _m(acc, "supply")),
unrealized: createUnrealizedPattern(client, acc),
};
}
/**
* @typedef {Object} _10yPattern
* @property {ActivityPattern2} activity
@@ -3940,6 +3940,111 @@ function createSplitPattern2(client, acc) {
};
}
/**
* @typedef {Object} ActiveSupplyPattern
* @property {MetricPattern1<Bitcoin>} bitcoin
* @property {MetricPattern1<Dollars>} dollars
* @property {MetricPattern1<Sats>} sats
*/
/**
* Create a ActiveSupplyPattern pattern node
* @param {BrkClientBase} client
* @param {string} acc - Accumulated metric name
* @returns {ActiveSupplyPattern}
*/
function createActiveSupplyPattern(client, acc) {
return {
bitcoin: createMetricPattern1(client, _m(acc, "btc")),
dollars: createMetricPattern1(client, _m(acc, "usd")),
sats: createMetricPattern1(client, acc),
};
}
/**
* @typedef {Object} CoinbasePattern
* @property {BitcoinPattern} bitcoin
* @property {DollarsPattern<Dollars>} dollars
* @property {DollarsPattern<Sats>} sats
*/
/**
* Create a CoinbasePattern pattern node
* @param {BrkClientBase} client
* @param {string} acc - Accumulated metric name
* @returns {CoinbasePattern}
*/
function createCoinbasePattern(client, acc) {
return {
bitcoin: createBitcoinPattern(client, _m(acc, "btc")),
dollars: createDollarsPattern(client, _m(acc, "usd")),
sats: createDollarsPattern(client, acc),
};
}
/**
* @typedef {Object} CoinbasePattern2
* @property {BlockCountPattern<Bitcoin>} bitcoin
* @property {BlockCountPattern<Dollars>} dollars
* @property {BlockCountPattern<Sats>} sats
*/
/**
* Create a CoinbasePattern2 pattern node
* @param {BrkClientBase} client
* @param {string} acc - Accumulated metric name
* @returns {CoinbasePattern2}
*/
function createCoinbasePattern2(client, acc) {
return {
bitcoin: createBlockCountPattern(client, _m(acc, "btc")),
dollars: createBlockCountPattern(client, _m(acc, "usd")),
sats: createBlockCountPattern(client, acc),
};
}
/**
* @typedef {Object} SegwitAdoptionPattern
* @property {MetricPattern11<StoredF32>} base
* @property {MetricPattern2<StoredF32>} cumulative
* @property {MetricPattern2<StoredF32>} sum
*/
/**
* Create a SegwitAdoptionPattern pattern node
* @param {BrkClientBase} client
* @param {string} acc - Accumulated metric name
* @returns {SegwitAdoptionPattern}
*/
function createSegwitAdoptionPattern(client, acc) {
return {
base: createMetricPattern11(client, acc),
cumulative: createMetricPattern2(client, _m(acc, "cumulative")),
sum: createMetricPattern2(client, _m(acc, "sum")),
};
}
/**
* @typedef {Object} CostBasisPattern2
* @property {MetricPattern1<Dollars>} max
* @property {MetricPattern1<Dollars>} min
* @property {PercentilesPattern} percentiles
*/
/**
* Create a CostBasisPattern2 pattern node
* @param {BrkClientBase} client
* @param {string} acc - Accumulated metric name
* @returns {CostBasisPattern2}
*/
function createCostBasisPattern2(client, acc) {
return {
max: createMetricPattern1(client, _m(acc, "max_cost_basis")),
min: createMetricPattern1(client, _m(acc, "min_cost_basis")),
percentiles: createPercentilesPattern(client, _m(acc, "cost_basis")),
};
}
/**
* @typedef {Object} UnclaimedRewardsPattern
* @property {BitcoinPattern2<Bitcoin>} bitcoin
@@ -3982,111 +4087,6 @@ function create_2015Pattern(client, acc) {
};
}
/**
* @typedef {Object} CoinbasePattern
* @property {BitcoinPattern} bitcoin
* @property {DollarsPattern<Dollars>} dollars
* @property {DollarsPattern<Sats>} sats
*/
/**
* Create a CoinbasePattern pattern node
* @param {BrkClientBase} client
* @param {string} acc - Accumulated metric name
* @returns {CoinbasePattern}
*/
function createCoinbasePattern(client, acc) {
return {
bitcoin: createBitcoinPattern(client, _m(acc, "btc")),
dollars: createDollarsPattern(client, _m(acc, "usd")),
sats: createDollarsPattern(client, acc),
};
}
/**
* @typedef {Object} CostBasisPattern2
* @property {MetricPattern1<Dollars>} max
* @property {MetricPattern1<Dollars>} min
* @property {PercentilesPattern} percentiles
*/
/**
* Create a CostBasisPattern2 pattern node
* @param {BrkClientBase} client
* @param {string} acc - Accumulated metric name
* @returns {CostBasisPattern2}
*/
function createCostBasisPattern2(client, acc) {
return {
max: createMetricPattern1(client, _m(acc, "max_cost_basis")),
min: createMetricPattern1(client, _m(acc, "min_cost_basis")),
percentiles: createPercentilesPattern(client, _m(acc, "cost_basis")),
};
}
/**
* @typedef {Object} SegwitAdoptionPattern
* @property {MetricPattern11<StoredF32>} base
* @property {MetricPattern2<StoredF32>} cumulative
* @property {MetricPattern2<StoredF32>} sum
*/
/**
* Create a SegwitAdoptionPattern pattern node
* @param {BrkClientBase} client
* @param {string} acc - Accumulated metric name
* @returns {SegwitAdoptionPattern}
*/
function createSegwitAdoptionPattern(client, acc) {
return {
base: createMetricPattern11(client, acc),
cumulative: createMetricPattern2(client, _m(acc, "cumulative")),
sum: createMetricPattern2(client, _m(acc, "sum")),
};
}
/**
* @typedef {Object} ActiveSupplyPattern
* @property {MetricPattern1<Bitcoin>} bitcoin
* @property {MetricPattern1<Dollars>} dollars
* @property {MetricPattern1<Sats>} sats
*/
/**
* Create a ActiveSupplyPattern pattern node
* @param {BrkClientBase} client
* @param {string} acc - Accumulated metric name
* @returns {ActiveSupplyPattern}
*/
function createActiveSupplyPattern(client, acc) {
return {
bitcoin: createMetricPattern1(client, _m(acc, "btc")),
dollars: createMetricPattern1(client, _m(acc, "usd")),
sats: createMetricPattern1(client, acc),
};
}
/**
* @typedef {Object} CoinbasePattern2
* @property {BlockCountPattern<Bitcoin>} bitcoin
* @property {BlockCountPattern<Dollars>} dollars
* @property {BlockCountPattern<Sats>} sats
*/
/**
* Create a CoinbasePattern2 pattern node
* @param {BrkClientBase} client
* @param {string} acc - Accumulated metric name
* @returns {CoinbasePattern2}
*/
function createCoinbasePattern2(client, acc) {
return {
bitcoin: createBlockCountPattern(client, _m(acc, "btc")),
dollars: createBlockCountPattern(client, _m(acc, "usd")),
sats: createBlockCountPattern(client, acc),
};
}
/**
* @typedef {Object} _1dReturns1mSdPattern
* @property {MetricPattern4<StoredF32>} sd
@@ -4106,6 +4106,31 @@ function create_1dReturns1mSdPattern(client, acc) {
};
}
/**
* @typedef {Object} RelativePattern4
* @property {MetricPattern1<StoredF64>} supplyInLossRelToOwnSupply
* @property {MetricPattern1<StoredF64>} supplyInProfitRelToOwnSupply
*/
/**
* Create a RelativePattern4 pattern node
* @param {BrkClientBase} client
* @param {string} acc - Accumulated metric name
* @returns {RelativePattern4}
*/
function createRelativePattern4(client, acc) {
return {
supplyInLossRelToOwnSupply: createMetricPattern1(
client,
_m(acc, "loss_rel_to_own_supply"),
),
supplyInProfitRelToOwnSupply: createMetricPattern1(
client,
_m(acc, "profit_rel_to_own_supply"),
),
};
}
/**
* @typedef {Object} SupplyPattern2
* @property {ActiveSupplyPattern} halved
@@ -4144,52 +4169,6 @@ function createCostBasisPattern(client, acc) {
};
}
/**
* @typedef {Object} RelativePattern4
* @property {MetricPattern1<StoredF64>} supplyInLossRelToOwnSupply
* @property {MetricPattern1<StoredF64>} supplyInProfitRelToOwnSupply
*/
/**
* Create a RelativePattern4 pattern node
* @param {BrkClientBase} client
* @param {string} acc - Accumulated metric name
* @returns {RelativePattern4}
*/
function createRelativePattern4(client, acc) {
return {
supplyInLossRelToOwnSupply: createMetricPattern1(
client,
_m(acc, "loss_rel_to_own_supply"),
),
supplyInProfitRelToOwnSupply: createMetricPattern1(
client,
_m(acc, "profit_rel_to_own_supply"),
),
};
}
/**
* @template T
* @typedef {Object} SatsPattern
* @property {MetricPattern1<T>} ohlc
* @property {SplitPattern2<T>} split
*/
/**
* Create a SatsPattern pattern node
* @template T
* @param {BrkClientBase} client
* @param {string} acc - Accumulated metric name
* @returns {SatsPattern<T>}
*/
function createSatsPattern(client, acc) {
return {
ohlc: createMetricPattern1(client, _m(acc, "ohlc_sats")),
split: createSplitPattern2(client, _m(acc, "sats")),
};
}
/**
* @template T
* @typedef {Object} BlockCountPattern
@@ -4233,19 +4212,23 @@ function createBitcoinPattern2(client, acc) {
}
/**
* @typedef {Object} OutputsPattern
* @property {MetricPattern1<StoredU64>} utxoCount
* @template T
* @typedef {Object} SatsPattern
* @property {MetricPattern1<T>} ohlc
* @property {SplitPattern2<T>} split
*/
/**
* Create a OutputsPattern pattern node
* Create a SatsPattern pattern node
* @template T
* @param {BrkClientBase} client
* @param {string} acc - Accumulated metric name
* @returns {OutputsPattern}
* @returns {SatsPattern<T>}
*/
function createOutputsPattern(client, acc) {
function createSatsPattern(client, acc) {
return {
utxoCount: createMetricPattern1(client, acc),
ohlc: createMetricPattern1(client, _m(acc, "ohlc_sats")),
split: createSplitPattern2(client, _m(acc, "sats")),
};
}
@@ -4266,6 +4249,23 @@ function createRealizedPriceExtraPattern(client, acc) {
};
}
/**
* @typedef {Object} OutputsPattern
* @property {MetricPattern1<StoredU64>} utxoCount
*/
/**
* Create a OutputsPattern pattern node
* @param {BrkClientBase} client
* @param {string} acc - Accumulated metric name
* @returns {OutputsPattern}
*/
function createOutputsPattern(client, acc) {
return {
utxoCount: createMetricPattern1(client, acc),
};
}
// Catalog tree typedefs
/**
@@ -5408,6 +5408,7 @@ function createRealizedPriceExtraPattern(client, acc) {
/**
* @typedef {Object} MetricsTree_Price_Oracle
* @property {MetricPattern6<OHLCCents>} ohlcCents
* @property {MetricPattern6<OHLCDollars>} ohlcDollars
* @property {MetricPattern11<Cents>} priceCents
* @property {MetricPattern6<StoredU32>} txCount
*/
@@ -7617,6 +7618,7 @@ class BrkClient extends BrkClientBase {
},
oracle: {
ohlcCents: createMetricPattern6(this, "oracle_ohlc_cents"),
ohlcDollars: createMetricPattern6(this, "oracle_ohlc_dollars"),
priceCents: createMetricPattern11(this, "orange_price_cents"),
txCount: createMetricPattern6(this, "oracle_tx_count"),
},
+45 -28
View File
@@ -4,31 +4,44 @@
import { BrkClient } from "../index.js";
/**
* @typedef {import('../index.js').AnyMetricPattern} AnyMetricPattern
*/
/**
* Check if an object is a metric pattern (has indexes() method and by object).
* @param {any} obj
* @returns {obj is AnyMetricPattern}
*/
function isMetricPattern(obj) {
return (
obj &&
typeof obj === "object" &&
typeof obj.indexes === "function" &&
obj.by &&
typeof obj.by === "object"
);
}
/**
* Recursively collect all metric patterns from the tree.
* @param {Record<string, any>} obj
* @param {string} path
* @returns {Array<{path: string, metric: Record<string, any>, indexes: string[]}>}
* @returns {Array<{path: string, metric: AnyMetricPattern}>}
*/
function getAllMetrics(obj, path = "") {
/** @type {Array<{path: string, metric: AnyMetricPattern}>} */
const metrics = [];
for (const key of Object.keys(obj)) {
if (key.startsWith("_")) continue;
const attr = obj[key];
if (!attr || typeof attr !== "object") continue;
const currentPath = path ? `${path}.${key}` : key;
// Check if this is a metric pattern (has 'by' property with index getters)
if (attr.by && typeof attr.by === "object") {
const indexes = Object.keys(attr.by).filter(
(k) => !k.startsWith("_") && typeof attr.by[k] === "object",
);
if (indexes.length > 0) {
metrics.push({ path: currentPath, metric: attr, indexes });
}
// Check if this is a metric pattern using the indexes() method
if (isMetricPattern(attr)) {
metrics.push({ path: currentPath, metric: attr });
}
// Recurse into nested tree nodes
@@ -40,32 +53,37 @@ function getAllMetrics(obj, path = "") {
return metrics;
}
// Endpoints with sparse data (holes at the end) - skip these
const SKIP_ENDPOINTS = new Set([
"distribution.addressesData.empty.by.emptyaddressindex",
"distribution.addressesData.loaded.by.loadedaddressindex",
]);
async function testAllEndpoints() {
const client = new BrkClient({ baseUrl: "http://localhost:3110", timeout: 15000 });
const client = new BrkClient({
baseUrl: "http://localhost:3110",
timeout: 15000,
});
const metrics = getAllMetrics(client.metrics);
console.log(`\nFound ${metrics.length} metrics`);
let success = 0;
let skipped = 0;
for (const { path, metric, indexes } of metrics) {
for (const { path, metric } of metrics) {
// Use the indexes() method to get all available indexes
const indexes = metric.indexes();
for (const idxName of indexes) {
const fullPath = `${path}.by.${idxName}`;
if (SKIP_ENDPOINTS.has(fullPath)) {
skipped++;
console.log(`SKIP: ${fullPath} -> sparse data`);
continue;
}
try {
const endpoint = metric.by[idxName];
await endpoint.last(0);
// Verify both access methods work: .by[index] and .get(index)
const endpointByProperty = metric.by[idxName];
const endpointByGet = metric.get(idxName);
if (!endpointByProperty) {
throw new Error(`metric.by.${idxName} is undefined`);
}
if (!endpointByGet) {
throw new Error(`metric.get('${idxName}') returned undefined`);
}
await endpointByProperty.last(0);
success++;
console.log(`OK: ${fullPath}`);
} catch (e) {
@@ -79,7 +97,6 @@ async function testAllEndpoints() {
console.log(`\n=== Results ===`);
console.log(`Success: ${success}`);
console.log(`Skipped: ${skipped}`);
}
testAllEndpoints();