@humanode-hyperlane/metrics 0.0.0-stage → 0.2.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/LICENSE.md +193 -0
  2. package/dist/balance.d.ts +93 -0
  3. package/dist/balance.d.ts.map +1 -0
  4. package/dist/balance.js +235 -0
  5. package/dist/balance.js.map +1 -0
  6. package/dist/gauges.d.ts +41 -0
  7. package/dist/gauges.d.ts.map +1 -0
  8. package/dist/gauges.js +100 -0
  9. package/dist/gauges.js.map +1 -0
  10. package/dist/index.d.ts +8 -0
  11. package/dist/index.d.ts.map +1 -0
  12. package/dist/index.js +13 -0
  13. package/dist/index.js.map +1 -0
  14. package/dist/index.test.d.ts +2 -0
  15. package/dist/index.test.d.ts.map +1 -0
  16. package/dist/index.test.js +45 -0
  17. package/dist/index.test.js.map +1 -0
  18. package/dist/pushgateway.d.ts +23 -0
  19. package/dist/pushgateway.d.ts.map +1 -0
  20. package/dist/pushgateway.js +54 -0
  21. package/dist/pushgateway.js.map +1 -0
  22. package/dist/server.d.ts +15 -0
  23. package/dist/server.d.ts.map +1 -0
  24. package/dist/server.js +63 -0
  25. package/dist/server.js.map +1 -0
  26. package/dist/server.test.d.ts +2 -0
  27. package/dist/server.test.d.ts.map +1 -0
  28. package/dist/server.test.js +23 -0
  29. package/dist/server.test.js.map +1 -0
  30. package/dist/types.d.ts +64 -0
  31. package/dist/types.d.ts.map +1 -0
  32. package/dist/types.js +2 -0
  33. package/dist/types.js.map +1 -0
  34. package/dist/update.d.ts +51 -0
  35. package/dist/update.d.ts.map +1 -0
  36. package/dist/update.js +163 -0
  37. package/dist/update.js.map +1 -0
  38. package/dist/utils.d.ts +7 -0
  39. package/dist/utils.d.ts.map +1 -0
  40. package/dist/utils.js +9 -0
  41. package/dist/utils.js.map +1 -0
  42. package/package.json +52 -3
  43. package/src/balance.ts +380 -0
  44. package/src/gauges.ts +136 -0
  45. package/src/index.test.ts +52 -0
  46. package/src/index.ts +53 -0
  47. package/src/pushgateway.ts +66 -0
  48. package/src/server.test.ts +32 -0
  49. package/src/server.ts +76 -0
  50. package/src/types.ts +74 -0
  51. package/src/update.ts +239 -0
  52. package/src/utils.ts +10 -0
  53. package/README.md +0 -3
package/dist/gauges.js ADDED
@@ -0,0 +1,100 @@
1
+ import { Gauge } from 'prom-client';
2
+ /**
3
+ * Label names for warp route metrics.
4
+ */
5
+ export const warpRouteMetricLabels = [
6
+ 'chain_name',
7
+ 'token_address',
8
+ 'token_name',
9
+ 'wallet_address',
10
+ 'token_standard',
11
+ 'warp_route_id',
12
+ 'related_chain_names',
13
+ ];
14
+ /**
15
+ * Label names for value at risk metrics.
16
+ */
17
+ export const warpRouteValueAtRiskMetricLabels = [
18
+ 'chain_name',
19
+ 'collateral_chain_name',
20
+ 'token_address',
21
+ 'token_name',
22
+ 'collateral_token_standard',
23
+ 'warp_route_id',
24
+ ];
25
+ /**
26
+ * Wallet balance metric label names.
27
+ */
28
+ export const walletBalanceMetricLabels = [
29
+ 'chain',
30
+ 'wallet_address',
31
+ 'wallet_name',
32
+ 'token_address',
33
+ 'token_symbol',
34
+ 'token_name',
35
+ ];
36
+ /**
37
+ * xERC20 limits metric label names.
38
+ */
39
+ export const xERC20LimitsMetricLabels = [
40
+ 'chain_name',
41
+ 'limit_type',
42
+ 'token_name',
43
+ 'bridge_address',
44
+ 'token_address',
45
+ 'bridge_label',
46
+ ];
47
+ /**
48
+ * Creates a new wallet balance gauge with optional additional labels.
49
+ */
50
+ export function createWalletBalanceGauge(registry, additionalLabels = []) {
51
+ return new Gauge({
52
+ // Mirror the rust/main/ethers-prometheus `wallet_balance` gauge metric.
53
+ name: 'hyperlane_wallet_balance',
54
+ help: 'Current balance of a wallet for a token',
55
+ registers: [registry],
56
+ labelNames: [...walletBalanceMetricLabels, ...additionalLabels],
57
+ });
58
+ }
59
+ /**
60
+ * Creates all warp route metric gauges and registers them with the provided registry.
61
+ *
62
+ * @param registry - The Prometheus registry to register the gauges with
63
+ * @param walletBalanceAdditionalLabels - Optional additional labels for the wallet balance gauge
64
+ * @returns Collection of warp metric gauges
65
+ */
66
+ export function createWarpMetricsGauges(registry, walletBalanceAdditionalLabels = []) {
67
+ const warpRouteTokenBalance = new Gauge({
68
+ name: 'hyperlane_warp_route_token_balance',
69
+ help: 'HypERC20 token balance of a Warp Route',
70
+ registers: [registry],
71
+ labelNames: warpRouteMetricLabels,
72
+ });
73
+ const warpRouteCollateralValue = new Gauge({
74
+ name: 'hyperlane_warp_route_collateral_value',
75
+ help: 'Total value of collateral held in a HypERC20Collateral or HypNative contract of a Warp Route',
76
+ registers: [registry],
77
+ labelNames: warpRouteMetricLabels,
78
+ });
79
+ const warpRouteValueAtRisk = new Gauge({
80
+ name: 'hyperlane_warp_route_value_at_risk',
81
+ help: 'Value at risk on chain for a given Warp Route',
82
+ registers: [registry],
83
+ labelNames: warpRouteValueAtRiskMetricLabels,
84
+ });
85
+ const walletBalanceGauge = createWalletBalanceGauge(registry, walletBalanceAdditionalLabels);
86
+ const xERC20LimitsGauge = new Gauge({
87
+ name: 'hyperlane_xerc20_limits',
88
+ help: 'Current minting and burning limits of xERC20 tokens',
89
+ registers: [registry],
90
+ labelNames: xERC20LimitsMetricLabels,
91
+ });
92
+ return {
93
+ warpRouteTokenBalance,
94
+ warpRouteCollateralValue,
95
+ warpRouteValueAtRisk,
96
+ walletBalanceGauge,
97
+ xERC20LimitsGauge,
98
+ };
99
+ }
100
+ //# sourceMappingURL=gauges.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gauges.js","sourceRoot":"","sources":["../src/gauges.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAiB,MAAM,aAAa,CAAC;AAOnD;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAoC;IACpE,YAAY;IACZ,eAAe;IACf,YAAY;IACZ,gBAAgB;IAChB,gBAAgB;IAChB,eAAe;IACf,qBAAqB;CACtB,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,gCAAgC,GAC3C;IACE,YAAY;IACZ,uBAAuB;IACvB,eAAe;IACf,YAAY;IACZ,2BAA2B;IAC3B,eAAe;CAChB,CAAC;AAEJ;;GAEG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG;IACvC,OAAO;IACP,gBAAgB;IAChB,aAAa;IACb,eAAe;IACf,cAAc;IACd,YAAY;CACJ,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,YAAY;IACZ,YAAY;IACZ,YAAY;IACZ,gBAAgB;IAChB,eAAe;IACf,cAAc;CACN,CAAC;AAaX;;GAEG;AACH,MAAM,UAAU,wBAAwB,CACtC,QAAkB,EAClB,mBAA6B,EAAE;IAE/B,OAAO,IAAI,KAAK,CAAC;QACf,wEAAwE;QACxE,IAAI,EAAE,0BAA0B;QAChC,IAAI,EAAE,yCAAyC;QAC/C,SAAS,EAAE,CAAC,QAAQ,CAAC;QACrB,UAAU,EAAE,CAAC,GAAG,yBAAyB,EAAE,GAAG,gBAAgB,CAAC;KAChE,CAAC,CAAC;AACL,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,uBAAuB,CACrC,QAAkB,EAClB,gCAA0C,EAAE;IAE5C,MAAM,qBAAqB,GAAG,IAAI,KAAK,CAAC;QACtC,IAAI,EAAE,oCAAoC;QAC1C,IAAI,EAAE,wCAAwC;QAC9C,SAAS,EAAE,CAAC,QAAQ,CAAC;QACrB,UAAU,EAAE,qBAAqB;KAClC,CAAC,CAAC;IAEH,MAAM,wBAAwB,GAAG,IAAI,KAAK,CAAC;QACzC,IAAI,EAAE,uCAAuC;QAC7C,IAAI,EAAE,8FAA8F;QACpG,SAAS,EAAE,CAAC,QAAQ,CAAC;QACrB,UAAU,EAAE,qBAAqB;KAClC,CAAC,CAAC;IAEH,MAAM,oBAAoB,GAAG,IAAI,KAAK,CAAC;QACrC,IAAI,EAAE,oCAAoC;QAC1C,IAAI,EAAE,+CAA+C;QACrD,SAAS,EAAE,CAAC,QAAQ,CAAC;QACrB,UAAU,EAAE,gCAAgC;KAC7C,CAAC,CAAC;IAEH,MAAM,kBAAkB,GAAG,wBAAwB,CACjD,QAAQ,EACR,6BAA6B,CAC9B,CAAC;IAEF,MAAM,iBAAiB,GAAG,IAAI,KAAK,CAAC;QAClC,IAAI,EAAE,yBAAyB;QAC/B,IAAI,EAAE,qDAAqD;QAC3D,SAAS,EAAE,CAAC,QAAQ,CAAC;QACrB,UAAU,EAAE,wBAAwB;KACrC,CAAC,CAAC;IAEH,OAAO;QACL,qBAAqB;QACrB,wBAAwB;QACxB,oBAAoB;QACpB,kBAAkB;QAClB,iBAAiB;KAClB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,8 @@
1
+ export { type BaseWarpRouteMetricLabels, type NativeWalletBalance, type SupportedTokenStandards, type WarpRouteBalance, type WarpRouteMetricLabels, type WarpRouteValueAtRiskMetricLabels, type XERC20Info, type XERC20Limit, } from './types.js';
2
+ export { createWalletBalanceGauge, createWarpMetricsGauges, type WarpMetricsGauges, walletBalanceMetricLabels, warpRouteMetricLabels, warpRouteValueAtRiskMetricLabels, xERC20LimitsMetricLabels, } from './gauges.js';
3
+ export { updateManagedLockboxBalanceMetrics, updateNativeWalletBalanceMetrics, updateTokenBalanceMetrics, updateXERC20LimitsMetrics, } from './update.js';
4
+ export { getExtraLockboxBalance, getExtraLockboxInfo, getManagedLockBox, getManagedLockBoxCollateralInfo, getSealevelAtaPayerBalance, getTokenBridgedBalance, getXERC20Info, getXERC20Limit, MANAGED_LOCKBOX_MINIMAL_ABI, type TokenPriceGetter, } from './balance.js';
5
+ export { formatBigInt } from './utils.js';
6
+ export { startMetricsServer } from './server.js';
7
+ export { getPushGateway, submitMetrics } from './pushgateway.js';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,yBAAyB,EAC9B,KAAK,mBAAmB,EACxB,KAAK,uBAAuB,EAC5B,KAAK,gBAAgB,EACrB,KAAK,qBAAqB,EAC1B,KAAK,gCAAgC,EACrC,KAAK,UAAU,EACf,KAAK,WAAW,GACjB,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,wBAAwB,EACxB,uBAAuB,EACvB,KAAK,iBAAiB,EACtB,yBAAyB,EACzB,qBAAqB,EACrB,gCAAgC,EAChC,wBAAwB,GACzB,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,kCAAkC,EAClC,gCAAgC,EAChC,yBAAyB,EACzB,yBAAyB,GAC1B,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,sBAAsB,EACtB,mBAAmB,EACnB,iBAAiB,EACjB,+BAA+B,EAC/B,0BAA0B,EAC1B,sBAAsB,EACtB,aAAa,EACb,cAAc,EACd,2BAA2B,EAC3B,KAAK,gBAAgB,GACtB,MAAM,cAAc,CAAC;AAGtB,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAG1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAGjD,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,13 @@
1
+ // Gauges and factory
2
+ export { createWalletBalanceGauge, createWarpMetricsGauges, walletBalanceMetricLabels, warpRouteMetricLabels, warpRouteValueAtRiskMetricLabels, xERC20LimitsMetricLabels, } from './gauges.js';
3
+ // Metric update functions
4
+ export { updateManagedLockboxBalanceMetrics, updateNativeWalletBalanceMetrics, updateTokenBalanceMetrics, updateXERC20LimitsMetrics, } from './update.js';
5
+ // Balance utilities
6
+ export { getExtraLockboxBalance, getExtraLockboxInfo, getManagedLockBox, getManagedLockBoxCollateralInfo, getSealevelAtaPayerBalance, getTokenBridgedBalance, getXERC20Info, getXERC20Limit, MANAGED_LOCKBOX_MINIMAL_ABI, } from './balance.js';
7
+ // Utilities
8
+ export { formatBigInt } from './utils.js';
9
+ // Server
10
+ export { startMetricsServer } from './server.js';
11
+ // Push Gateway
12
+ export { getPushGateway, submitMetrics } from './pushgateway.js';
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAYA,qBAAqB;AACrB,OAAO,EACL,wBAAwB,EACxB,uBAAuB,EAEvB,yBAAyB,EACzB,qBAAqB,EACrB,gCAAgC,EAChC,wBAAwB,GACzB,MAAM,aAAa,CAAC;AAErB,0BAA0B;AAC1B,OAAO,EACL,kCAAkC,EAClC,gCAAgC,EAChC,yBAAyB,EACzB,yBAAyB,GAC1B,MAAM,aAAa,CAAC;AAErB,oBAAoB;AACpB,OAAO,EACL,sBAAsB,EACtB,mBAAmB,EACnB,iBAAiB,EACjB,+BAA+B,EAC/B,0BAA0B,EAC1B,sBAAsB,EACtB,aAAa,EACb,cAAc,EACd,2BAA2B,GAE5B,MAAM,cAAc,CAAC;AAEtB,YAAY;AACZ,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,SAAS;AACT,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEjD,eAAe;AACf,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.test.d.ts","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,45 @@
1
+ import { expect } from 'chai';
2
+ import { Registry } from 'prom-client';
3
+ import { createWarpMetricsGauges } from './gauges.js';
4
+ describe('Warp Metrics', () => {
5
+ describe('createWarpMetricsGauges', () => {
6
+ it('should create all required gauges', () => {
7
+ const registry = new Registry();
8
+ const gauges = createWarpMetricsGauges(registry);
9
+ expect(gauges).to.have.property('warpRouteTokenBalance');
10
+ expect(gauges).to.have.property('warpRouteCollateralValue');
11
+ expect(gauges).to.have.property('warpRouteValueAtRisk');
12
+ expect(gauges).to.have.property('walletBalanceGauge');
13
+ expect(gauges).to.have.property('xERC20LimitsGauge');
14
+ });
15
+ it('should register gauges with the provided registry', async () => {
16
+ const registry = new Registry();
17
+ createWarpMetricsGauges(registry);
18
+ const metrics = await registry.metrics();
19
+ expect(metrics).to.include('hyperlane_warp_route_token_balance');
20
+ expect(metrics).to.include('hyperlane_warp_route_collateral_value');
21
+ expect(metrics).to.include('hyperlane_warp_route_value_at_risk');
22
+ expect(metrics).to.include('hyperlane_wallet_balance');
23
+ expect(metrics).to.include('hyperlane_xerc20_limits');
24
+ });
25
+ it('should support additional wallet balance labels', async () => {
26
+ const registry = new Registry();
27
+ const gauges = createWarpMetricsGauges(registry, ['warp_route_id']);
28
+ // Set a value to verify the label is accepted
29
+ gauges.walletBalanceGauge
30
+ .labels({
31
+ chain: 'ethereum',
32
+ wallet_address: '0x123',
33
+ wallet_name: 'test',
34
+ token_address: 'native',
35
+ token_symbol: 'ETH',
36
+ token_name: 'Ether',
37
+ warp_route_id: 'test-route',
38
+ })
39
+ .set(1.5);
40
+ const metrics = await registry.metrics();
41
+ expect(metrics).to.include('warp_route_id="test-route"');
42
+ });
43
+ });
44
+ });
45
+ //# sourceMappingURL=index.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.test.js","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAEtD,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACvC,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;YAC3C,MAAM,QAAQ,GAAG,IAAI,QAAQ,EAAE,CAAC;YAChC,MAAM,MAAM,GAAG,uBAAuB,CAAC,QAAQ,CAAC,CAAC;YAEjD,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,uBAAuB,CAAC,CAAC;YACzD,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,0BAA0B,CAAC,CAAC;YAC5D,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC;YACxD,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC;YACtD,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;QACvD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;YACjE,MAAM,QAAQ,GAAG,IAAI,QAAQ,EAAE,CAAC;YAChC,uBAAuB,CAAC,QAAQ,CAAC,CAAC;YAElC,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,OAAO,EAAE,CAAC;YACzC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,oCAAoC,CAAC,CAAC;YACjE,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,uCAAuC,CAAC,CAAC;YACpE,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,oCAAoC,CAAC,CAAC;YACjE,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC;YACvD,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;YAC/D,MAAM,QAAQ,GAAG,IAAI,QAAQ,EAAE,CAAC;YAChC,MAAM,MAAM,GAAG,uBAAuB,CAAC,QAAQ,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC;YAEpE,8CAA8C;YAC9C,MAAM,CAAC,kBAAkB;iBACtB,MAAM,CAAC;gBACN,KAAK,EAAE,UAAU;gBACjB,cAAc,EAAE,OAAO;gBACvB,WAAW,EAAE,MAAM;gBACnB,aAAa,EAAE,QAAQ;gBACvB,YAAY,EAAE,KAAK;gBACnB,UAAU,EAAE,OAAO;gBACnB,aAAa,EAAE,YAAY;aAC5B,CAAC;iBACD,GAAG,CAAC,GAAG,CAAC,CAAC;YAEZ,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,OAAO,EAAE,CAAC;YACzC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,4BAA4B,CAAC,CAAC;QAC3D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,23 @@
1
+ import type { Logger } from 'pino';
2
+ import { Pushgateway, type Registry } from 'prom-client';
3
+ /**
4
+ * Gets the push gateway if PROMETHEUS_PUSH_GATEWAY environment variable is set.
5
+ *
6
+ * @param register - The Prometheus registry
7
+ * @param logger - Optional logger instance
8
+ * @returns The Pushgateway instance or null if not configured
9
+ */
10
+ export declare function getPushGateway(register: Registry, logger?: Logger): Pushgateway | null;
11
+ /**
12
+ * Submits metrics to a Prometheus push gateway.
13
+ *
14
+ * @param register - The Prometheus registry to submit
15
+ * @param jobName - The job name for the metrics
16
+ * @param options - Optional configuration
17
+ * @param options.overwriteAllMetrics - If true, overwrites all metrics instead of adding
18
+ * @param logger - Optional logger instance
19
+ */
20
+ export declare function submitMetrics(register: Registry, jobName: string, options?: {
21
+ overwriteAllMetrics?: boolean;
22
+ }, logger?: Logger): Promise<void>;
23
+ //# sourceMappingURL=pushgateway.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pushgateway.d.ts","sourceRoot":"","sources":["../src/pushgateway.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAC;AAKzD;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,QAAQ,EAClB,MAAM,CAAC,EAAE,MAAM,GACd,WAAW,GAAG,IAAI,CAWpB;AAED;;;;;;;;GAQG;AACH,wBAAsB,aAAa,CACjC,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;IAAE,mBAAmB,CAAC,EAAE,OAAO,CAAA;CAAE,EAC3C,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CAsBf"}
@@ -0,0 +1,54 @@
1
+ import { Pushgateway } from 'prom-client';
2
+ import { format } from 'util';
3
+ import { rootLogger } from '@humanode-hyperlane/utils';
4
+ /**
5
+ * Gets the push gateway if PROMETHEUS_PUSH_GATEWAY environment variable is set.
6
+ *
7
+ * @param register - The Prometheus registry
8
+ * @param logger - Optional logger instance
9
+ * @returns The Pushgateway instance or null if not configured
10
+ */
11
+ export function getPushGateway(register, logger) {
12
+ const log = logger ?? rootLogger.child({ module: 'metrics' });
13
+ const gatewayAddr = process.env['PROMETHEUS_PUSH_GATEWAY'];
14
+ if (gatewayAddr) {
15
+ return new Pushgateway(gatewayAddr, [], register);
16
+ }
17
+ else {
18
+ log.warn('Prometheus push gateway address was not defined; not publishing metrics.');
19
+ return null;
20
+ }
21
+ }
22
+ /**
23
+ * Submits metrics to a Prometheus push gateway.
24
+ *
25
+ * @param register - The Prometheus registry to submit
26
+ * @param jobName - The job name for the metrics
27
+ * @param options - Optional configuration
28
+ * @param options.overwriteAllMetrics - If true, overwrites all metrics instead of adding
29
+ * @param logger - Optional logger instance
30
+ */
31
+ export async function submitMetrics(register, jobName, options, logger) {
32
+ const log = logger ?? rootLogger.child({ module: 'metrics' });
33
+ const gateway = getPushGateway(register, log);
34
+ if (!gateway)
35
+ return;
36
+ let resp;
37
+ try {
38
+ if (options?.overwriteAllMetrics) {
39
+ resp = (await gateway.push({ jobName })).resp;
40
+ }
41
+ else {
42
+ resp = (await gateway.pushAdd({ jobName })).resp;
43
+ }
44
+ }
45
+ catch (e) {
46
+ log.error('Error when pushing metrics', { error: format(e) });
47
+ return;
48
+ }
49
+ const statusCode = typeof resp == 'object' && resp != null && 'statusCode' in resp
50
+ ? resp.statusCode
51
+ : 'unknown';
52
+ log.info('Prometheus metrics pushed to PushGateway', { statusCode });
53
+ }
54
+ //# sourceMappingURL=pushgateway.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pushgateway.js","sourceRoot":"","sources":["../src/pushgateway.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAiB,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAE9B,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAEvD;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAC5B,QAAkB,EAClB,MAAe;IAEf,MAAM,GAAG,GAAG,MAAM,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;IAC9D,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;IAC3D,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,IAAI,WAAW,CAAC,WAAW,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC;IACpD,CAAC;SAAM,CAAC;QACN,GAAG,CAAC,IAAI,CACN,0EAA0E,CAC3E,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,QAAkB,EAClB,OAAe,EACf,OAA2C,EAC3C,MAAe;IAEf,MAAM,GAAG,GAAG,MAAM,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;IAC9D,MAAM,OAAO,GAAG,cAAc,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IAC9C,IAAI,CAAC,OAAO;QAAE,OAAO;IAErB,IAAI,IAAI,CAAC;IACT,IAAI,CAAC;QACH,IAAI,OAAO,EAAE,mBAAmB,EAAE,CAAC;YACjC,IAAI,GAAG,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QAChD,CAAC;aAAM,CAAC;YACN,IAAI,GAAG,CAAC,MAAM,OAAO,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QACnD,CAAC;IACH,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,GAAG,CAAC,KAAK,CAAC,4BAA4B,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC9D,OAAO;IACT,CAAC;IAED,MAAM,UAAU,GACd,OAAO,IAAI,IAAI,QAAQ,IAAI,IAAI,IAAI,IAAI,IAAI,YAAY,IAAI,IAAI;QAC7D,CAAC,CAAE,IAAY,CAAC,UAAU;QAC1B,CAAC,CAAC,SAAS,CAAC;IAChB,GAAG,CAAC,IAAI,CAAC,0CAA0C,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;AACvE,CAAC"}
@@ -0,0 +1,15 @@
1
+ import http from 'http';
2
+ import type { Logger } from 'pino';
3
+ import type { Registry } from 'prom-client';
4
+ /**
5
+ * Start a simple HTTP server to host metrics. This takes the registry and dumps the text
6
+ * string to people who request `GET /metrics`.
7
+ *
8
+ * PROMETHEUS_PORT env var is used to determine what port to host on, defaults to 9090.
9
+ *
10
+ * @param register - The Prometheus registry to serve metrics from
11
+ * @param logger - Optional logger instance for error logging
12
+ * @returns The HTTP server instance
13
+ */
14
+ export declare function startMetricsServer(register: Registry, logger?: Logger): http.Server;
15
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AACnC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,QAAQ,EAClB,MAAM,CAAC,EAAE,MAAM,GACd,IAAI,CAAC,MAAM,CA0Db"}
package/dist/server.js ADDED
@@ -0,0 +1,63 @@
1
+ import http from 'http';
2
+ /**
3
+ * Start a simple HTTP server to host metrics. This takes the registry and dumps the text
4
+ * string to people who request `GET /metrics`.
5
+ *
6
+ * PROMETHEUS_PORT env var is used to determine what port to host on, defaults to 9090.
7
+ *
8
+ * @param register - The Prometheus registry to serve metrics from
9
+ * @param logger - Optional logger instance for error logging
10
+ * @returns The HTTP server instance
11
+ */
12
+ export function startMetricsServer(register, logger) {
13
+ const configuredPort = process.env['PROMETHEUS_PORT'];
14
+ const portString = configuredPort ?? '9090';
15
+ if (!/^\d+$/.test(portString)) {
16
+ const message = 'PROMETHEUS_PORT must contain only digits and be between 1 and 65535';
17
+ logger?.error({ port: configuredPort }, message);
18
+ throw new Error(message);
19
+ }
20
+ const port = Number(portString);
21
+ if (port < 1 || port > 65535) {
22
+ const message = 'PROMETHEUS_PORT must be between 1 and 65535';
23
+ logger?.error({ port }, message);
24
+ throw new Error(message);
25
+ }
26
+ const server = http
27
+ .createServer((req, res) => {
28
+ if (req.url !== '/metrics') {
29
+ res.writeHead(404, 'Invalid url').end();
30
+ return;
31
+ }
32
+ if (req.method !== 'GET') {
33
+ res.writeHead(405, 'Invalid method').end();
34
+ return;
35
+ }
36
+ register
37
+ .metrics()
38
+ .then((metricsStr) => {
39
+ res
40
+ .writeHead(200, { 'Content-Type': register.contentType })
41
+ .end(metricsStr);
42
+ })
43
+ .catch((err) => {
44
+ if (logger) {
45
+ logger.error(err, 'Failed to collect metrics');
46
+ }
47
+ res
48
+ .writeHead(500, { 'Content-Type': 'text/plain' })
49
+ .end('Internal Server Error');
50
+ });
51
+ })
52
+ .on('error', (err) => {
53
+ if (err.code === 'EADDRINUSE') {
54
+ logger?.error(`Metrics server port ${port} already in use. Set PROMETHEUS_PORT to use a different port.`);
55
+ }
56
+ else {
57
+ logger?.error(err, 'Metrics server error');
58
+ }
59
+ })
60
+ .listen(port);
61
+ return server;
62
+ }
63
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AAIxB;;;;;;;;;GASG;AACH,MAAM,UAAU,kBAAkB,CAChC,QAAkB,EAClB,MAAe;IAEf,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IACtD,MAAM,UAAU,GAAG,cAAc,IAAI,MAAM,CAAC;IAE5C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9B,MAAM,OAAO,GACX,qEAAqE,CAAC;QACxE,MAAM,EAAE,KAAK,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,EAAE,OAAO,CAAC,CAAC;QACjD,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;IAEhC,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,KAAK,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,6CAA6C,CAAC;QAC9D,MAAM,EAAE,KAAK,CAAC,EAAE,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC;QACjC,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC;IAED,MAAM,MAAM,GAAG,IAAI;SAChB,YAAY,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QACzB,IAAI,GAAG,CAAC,GAAG,KAAK,UAAU,EAAE,CAAC;YAC3B,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC,GAAG,EAAE,CAAC;YACxC,OAAO;QACT,CAAC;QACD,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;YACzB,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC,GAAG,EAAE,CAAC;YAC3C,OAAO;QACT,CAAC;QAED,QAAQ;aACL,OAAO,EAAE;aACT,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE;YACnB,GAAG;iBACA,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,QAAQ,CAAC,WAAW,EAAE,CAAC;iBACxD,GAAG,CAAC,UAAU,CAAC,CAAC;QACrB,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;YACb,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,2BAA2B,CAAC,CAAC;YACjD,CAAC;YACD,GAAG;iBACA,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,YAAY,EAAE,CAAC;iBAChD,GAAG,CAAC,uBAAuB,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;IACP,CAAC,CAAC;SACD,EAAE,CAAC,OAAO,EAAE,CAAC,GAA0B,EAAE,EAAE;QAC1C,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YAC9B,MAAM,EAAE,KAAK,CACX,uBAAuB,IAAI,+DAA+D,CAC3F,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,MAAM,EAAE,KAAK,CAAC,GAAG,EAAE,sBAAsB,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC,CAAC;SACD,MAAM,CAAC,IAAI,CAAC,CAAC;IAEhB,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=server.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.test.d.ts","sourceRoot":"","sources":["../src/server.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,23 @@
1
+ import { expect } from 'chai';
2
+ import { Registry } from 'prom-client';
3
+ import { startMetricsServer } from './server.js';
4
+ describe('startMetricsServer', () => {
5
+ const originalPort = process.env['PROMETHEUS_PORT'];
6
+ afterEach(() => {
7
+ if (originalPort === undefined) {
8
+ delete process.env['PROMETHEUS_PORT'];
9
+ }
10
+ else {
11
+ process.env['PROMETHEUS_PORT'] = originalPort;
12
+ }
13
+ });
14
+ it('throws for non-numeric PROMETHEUS_PORT values', () => {
15
+ process.env['PROMETHEUS_PORT'] = '';
16
+ expect(() => startMetricsServer(new Registry())).to.throw(/PROMETHEUS_PORT must contain only digits/i);
17
+ });
18
+ it('throws for out-of-range PROMETHEUS_PORT values', () => {
19
+ process.env['PROMETHEUS_PORT'] = '70000';
20
+ expect(() => startMetricsServer(new Registry())).to.throw(/PROMETHEUS_PORT must be between 1 and 65535/i);
21
+ });
22
+ });
23
+ //# sourceMappingURL=server.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.test.js","sourceRoot":"","sources":["../src/server.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEjD,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAEpD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;YAC/B,OAAO,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;QACxC,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,GAAG,YAAY,CAAC;QAChD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,GAAG,EAAE,CAAC;QAEpC,MAAM,CAAC,GAAG,EAAE,CAAC,kBAAkB,CAAC,IAAI,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CACvD,2CAA2C,CAC5C,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,GAAG,OAAO,CAAC;QAEzC,MAAM,CAAC,GAAG,EAAE,CAAC,kBAAkB,CAAC,IAAI,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CACvD,8CAA8C,CAC/C,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,64 @@
1
+ import type { ChainName, TokenStandard } from '@humanode-hyperlane/sdk';
2
+ import type { Address } from '@humanode-hyperlane/utils';
3
+ /**
4
+ * xERC20 minting and burning limits for a token.
5
+ */
6
+ export interface XERC20Limit {
7
+ mint: number;
8
+ burn: number;
9
+ mintMax: number;
10
+ burnMax: number;
11
+ }
12
+ /**
13
+ * xERC20 information including limits and the xERC20 token address.
14
+ */
15
+ export interface XERC20Info {
16
+ limits: XERC20Limit;
17
+ xERC20Address: Address;
18
+ }
19
+ /**
20
+ * Balance information for a warp route token.
21
+ */
22
+ export interface WarpRouteBalance {
23
+ balance: number;
24
+ valueUSD?: number;
25
+ tokenAddress: Address;
26
+ }
27
+ /**
28
+ * Native wallet balance information.
29
+ */
30
+ export interface NativeWalletBalance {
31
+ chain: ChainName;
32
+ walletAddress: Address;
33
+ walletName: string;
34
+ balance: number;
35
+ }
36
+ /**
37
+ * Token standards supported by warp metrics, including pseudo-standards.
38
+ */
39
+ export type SupportedTokenStandards = TokenStandard | 'EvmManagedLockbox' | 'xERC20';
40
+ /**
41
+ * Base metric labels common to all warp route metrics.
42
+ */
43
+ export interface BaseWarpRouteMetricLabels {
44
+ chain_name: ChainName;
45
+ token_address: string;
46
+ token_name: string;
47
+ warp_route_id: string;
48
+ }
49
+ /**
50
+ * Full warp route metric labels including wallet and token standard info.
51
+ */
52
+ export interface WarpRouteMetricLabels extends BaseWarpRouteMetricLabels {
53
+ wallet_address: string;
54
+ token_standard: SupportedTokenStandards;
55
+ related_chain_names: string;
56
+ }
57
+ /**
58
+ * Value at risk metric labels.
59
+ */
60
+ export interface WarpRouteValueAtRiskMetricLabels extends BaseWarpRouteMetricLabels {
61
+ collateral_chain_name: ChainName;
62
+ collateral_token_standard: SupportedTokenStandards;
63
+ }
64
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AAEzD;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,WAAW,CAAC;IACpB,aAAa,EAAE,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,OAAO,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,SAAS,CAAC;IACjB,aAAa,EAAE,OAAO,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,MAAM,uBAAuB,GAC/B,aAAa,GACb,mBAAmB,GACnB,QAAQ,CAAC;AAEb;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,UAAU,EAAE,SAAS,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAsB,SAAQ,yBAAyB;IACtE,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,uBAAuB,CAAC;IACxC,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,gCAAiC,SAAQ,yBAAyB;IACjF,qBAAqB,EAAE,SAAS,CAAC;IACjC,yBAAyB,EAAE,uBAAuB,CAAC;CACpD"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,51 @@
1
+ import type { Logger } from 'pino';
2
+ import { type ChainName, type Token, type WarpCore } from '@humanode-hyperlane/sdk';
3
+ import { type Address } from '@humanode-hyperlane/utils';
4
+ import type { WarpMetricsGauges } from './gauges.js';
5
+ import type { NativeWalletBalance, WarpRouteBalance, XERC20Limit } from './types.js';
6
+ /**
7
+ * Updates token balance metrics for a warp route token.
8
+ *
9
+ * @param gauges - The warp metrics gauges to update
10
+ * @param warpCore - The WarpCore instance for the route
11
+ * @param token - The token to update metrics for
12
+ * @param balanceInfo - The balance information for the token
13
+ * @param warpRouteId - The warp route identifier
14
+ * @param logger - The logger instance
15
+ */
16
+ export declare function updateTokenBalanceMetrics(gauges: WarpMetricsGauges, warpCore: WarpCore, token: Token, balanceInfo: WarpRouteBalance, warpRouteId: string, logger: Logger): void;
17
+ /**
18
+ * Updates managed lockbox balance metrics.
19
+ *
20
+ * @param gauges - The warp metrics gauges to update
21
+ * @param warpCore - The WarpCore instance for the route
22
+ * @param chainName - The chain name where the lockbox is deployed
23
+ * @param tokenName - The name of the collateral token
24
+ * @param tokenAddress - The address of the collateral token
25
+ * @param lockBoxAddress - The address of the managed lockbox
26
+ * @param balanceInfo - The balance information for the lockbox
27
+ * @param warpRouteId - The warp route identifier
28
+ * @param logger - The logger instance
29
+ */
30
+ export declare function updateManagedLockboxBalanceMetrics(gauges: WarpMetricsGauges, warpCore: WarpCore, chainName: ChainName, tokenName: string, tokenAddress: string, lockBoxAddress: string, balanceInfo: WarpRouteBalance, warpRouteId: string, logger: Logger): void;
31
+ /**
32
+ * Updates native wallet balance metrics.
33
+ *
34
+ * @param gauges - The warp metrics gauges to update
35
+ * @param balance - The native wallet balance information
36
+ * @param logger - The logger instance
37
+ */
38
+ export declare function updateNativeWalletBalanceMetrics(gauges: WarpMetricsGauges, balance: NativeWalletBalance, logger: Logger): void;
39
+ /**
40
+ * Updates xERC20 limits metrics.
41
+ *
42
+ * @param gauges - The warp metrics gauges to update
43
+ * @param token - The token to update metrics for
44
+ * @param limits - The xERC20 limits
45
+ * @param bridgeAddress - The address of the bridge
46
+ * @param bridgeLabel - A label for the bridge (e.g., token standard)
47
+ * @param xERC20Address - The address of the xERC20 token
48
+ * @param logger - The logger instance
49
+ */
50
+ export declare function updateXERC20LimitsMetrics(gauges: WarpMetricsGauges, token: Token, limits: XERC20Limit, bridgeAddress: Address, bridgeLabel: string, xERC20Address: Address, logger: Logger): void;
51
+ //# sourceMappingURL=update.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../src/update.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAEnC,OAAO,EACL,KAAK,SAAS,EACd,KAAK,KAAK,EAEV,KAAK,QAAQ,EACd,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,KAAK,OAAO,EAAa,MAAM,2BAA2B,CAAC;AAEpE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,KAAK,EACV,mBAAmB,EACnB,gBAAgB,EAEhB,WAAW,EACZ,MAAM,YAAY,CAAC;AAEpB;;;;;;;;;GASG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,iBAAiB,EACzB,QAAQ,EAAE,QAAQ,EAClB,KAAK,EAAE,KAAK,EACZ,WAAW,EAAE,gBAAgB,EAC7B,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,GACb,IAAI,CAqEN;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,kCAAkC,CAChD,MAAM,EAAE,iBAAiB,EACzB,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,SAAS,EACpB,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,cAAc,EAAE,MAAM,EACtB,WAAW,EAAE,gBAAgB,EAC7B,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,GACb,IAAI,CAoCN;AAED;;;;;;GAMG;AACH,wBAAgB,gCAAgC,CAC9C,MAAM,EAAE,iBAAiB,EACzB,OAAO,EAAE,mBAAmB,EAC5B,MAAM,EAAE,MAAM,GACb,IAAI,CAcN;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,iBAAiB,EACzB,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,WAAW,EACnB,aAAa,EAAE,OAAO,EACtB,WAAW,EAAE,MAAM,EACnB,aAAa,EAAE,OAAO,EACtB,MAAM,EAAE,MAAM,GACb,IAAI,CAyBN"}