@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.
- package/LICENSE.md +193 -0
- package/dist/balance.d.ts +93 -0
- package/dist/balance.d.ts.map +1 -0
- package/dist/balance.js +235 -0
- package/dist/balance.js.map +1 -0
- package/dist/gauges.d.ts +41 -0
- package/dist/gauges.d.ts.map +1 -0
- package/dist/gauges.js +100 -0
- package/dist/gauges.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -0
- package/dist/index.test.d.ts +2 -0
- package/dist/index.test.d.ts.map +1 -0
- package/dist/index.test.js +45 -0
- package/dist/index.test.js.map +1 -0
- package/dist/pushgateway.d.ts +23 -0
- package/dist/pushgateway.d.ts.map +1 -0
- package/dist/pushgateway.js +54 -0
- package/dist/pushgateway.js.map +1 -0
- package/dist/server.d.ts +15 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +63 -0
- package/dist/server.js.map +1 -0
- package/dist/server.test.d.ts +2 -0
- package/dist/server.test.d.ts.map +1 -0
- package/dist/server.test.js +23 -0
- package/dist/server.test.js.map +1 -0
- package/dist/types.d.ts +64 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/update.d.ts +51 -0
- package/dist/update.d.ts.map +1 -0
- package/dist/update.js +163 -0
- package/dist/update.js.map +1 -0
- package/dist/utils.d.ts +7 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +9 -0
- package/dist/utils.js.map +1 -0
- package/package.json +52 -3
- package/src/balance.ts +380 -0
- package/src/gauges.ts +136 -0
- package/src/index.test.ts +52 -0
- package/src/index.ts +53 -0
- package/src/pushgateway.ts +66 -0
- package/src/server.test.ts +32 -0
- package/src/server.ts +76 -0
- package/src/types.ts +74 -0
- package/src/update.ts +239 -0
- package/src/utils.ts +10 -0
- 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"}
|
package/dist/index.d.ts
ADDED
|
@@ -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 @@
|
|
|
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"}
|
package/dist/server.d.ts
ADDED
|
@@ -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 @@
|
|
|
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"}
|
package/dist/types.d.ts
ADDED
|
@@ -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 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
package/dist/update.d.ts
ADDED
|
@@ -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"}
|