@lidofinance/api-rpc 0.58.0 → 0.59.0

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/README.md CHANGED
@@ -12,12 +12,21 @@ It's only a factory, which extends `fetchRpc`, where you need to pass prom-clien
12
12
  tracked metrics.
13
13
 
14
14
  ```ts
15
- import { trackedFetchRpcFactory } from '@lidofinance/api-rpc';
16
- import { registry } from './metrics';
17
- import { METRICS_PREFIX } from '../config';
15
+ import { trackedFetchRpcFactory } from '@lidofinance/api-rpc'
16
+ import { registry } from './metrics'
17
+ import { METRICS_PREFIX } from '../config'
18
18
 
19
19
  export const fetchRPC = trackedFetchRpcFactory({
20
20
  registry,
21
21
  prefix: METRICS_PREFIX,
22
- });
23
- ```
22
+ })
23
+ ```
24
+
25
+ ## Metrics
26
+
27
+ Each call records:
28
+
29
+ - `rpc_service_request` — Counter incremented on every attempt (before the fetch).
30
+ - `rpc_service_request_methods` — Counter per JSON-RPC method in the batch.
31
+ - `rpc_service_response` — Histogram of response latency with `status` bucket. Thrown requests (e.g. connect timeouts) are observed under `status='xxx'` so failures don't go missing.
32
+ - `rpc_service_response_result` — Counter with `result='success' | 'failure'`. Use it for explicit success/failure rate queries (e.g. `rate(rpc_service_response_result_total{result="failure"}[5m])`).
package/dist/index.cjs CHANGED
@@ -26,7 +26,7 @@ $parcel$export($47b14a281d9aea1d$exports, "trackedFetchRpcFactory", () => $47b14
26
26
 
27
27
 
28
28
  const $47b14a281d9aea1d$export$78b2eac677e7bce5 = ({ prefix: prefix, registry: registry })=>{
29
- const { rpcRequestCount: rpcRequestCount, rpcRequestMethods: rpcRequestMethods, rpcResponseTime: rpcResponseTime } = (0, $3WQie$lidofinanceapimetrics.rpcMetricsFactory)(prefix, registry);
29
+ const { rpcRequestCount: rpcRequestCount, rpcRequestMethods: rpcRequestMethods, rpcResponseTime: rpcResponseTime, rpcResponseResultCount: rpcResponseResultCount } = (0, $3WQie$lidofinanceapimetrics.rpcMetricsFactory)(prefix, registry);
30
30
  return async (url, init, { chainId: chainId })=>{
31
31
  const provider = (0, $3WQie$lidofinanceapimetrics.getProviderLabel)(url);
32
32
  rpcRequestCount.labels({
@@ -39,14 +39,25 @@ const $47b14a281d9aea1d$export$78b2eac677e7bce5 = ({ prefix: prefix, registry: r
39
39
  method: method
40
40
  }).inc();
41
41
  const responseTime = rpcResponseTime.startTimer();
42
- const response = await (0, $3WQie$lidofinancerpc.fetchRpc)(url, init);
43
- const status = (0, $3WQie$lidofinanceapimetrics.getStatusLabel)(response.status);
44
- responseTime({
45
- chainId: chainId,
46
- provider: provider,
47
- status: status
48
- });
49
- return response;
42
+ let status = "xxx";
43
+ let result = "failure";
44
+ try {
45
+ const response = await (0, $3WQie$lidofinancerpc.fetchRpc)(url, init);
46
+ status = (0, $3WQie$lidofinanceapimetrics.getStatusLabel)(response.status);
47
+ result = response.ok ? "success" : "failure";
48
+ return response;
49
+ } finally{
50
+ responseTime({
51
+ chainId: chainId,
52
+ provider: provider,
53
+ status: status
54
+ });
55
+ rpcResponseResultCount.labels({
56
+ chainId: chainId,
57
+ provider: provider,
58
+ result: result
59
+ }).inc();
60
+ }
50
61
  };
51
62
  };
52
63
 
@@ -1 +1 @@
1
- {"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;ACWO,MAAM,4CAAyB,CAAC,UAAE,MAAM,YAAE,QAAQ,EAAoC;IAC3F,MAAM,mBAAE,eAAe,qBAAE,iBAAiB,mBAAE,eAAe,EAAE,GAAG,CAAA,GAAA,8CAAgB,EAAE,QAAQ;IAE1F,OAAO,OAAO,KAAK,MAAM,WAAE,OAAO,EAAE;QAClC,MAAM,WAAW,CAAA,GAAA,6CAAe,EAAE;QAElC,gBAAgB,OAAO;qBAAE;sBAAS;QAAS,GAAG;QAC9C,KAAK,MAAM,UAAE,MAAM,EAAE,IAAI,MAAM,QAAQ,KAAK,QAAQ,KAAK,OAAO;YAAC,KAAK;SAAK,CACzE,kBAAkB,OAAO;oBAAE;QAAO,GAAG;QAEvC,MAAM,eAAe,gBAAgB;QAErC,MAAM,WAAW,MAAM,CAAA,GAAA,8BAAO,EAAE,KAAK;QAErC,MAAM,SAAS,CAAA,GAAA,2CAAa,EAAE,SAAS;QACvC,aAAa;qBAAE;sBAAS;oBAAU;QAAO;QAEzC,OAAO;IACT;AACF","sources":["packages/api/rpc/src/index.ts","packages/api/rpc/src/trackedFetchRpcFactory.ts"],"sourcesContent":["export * from './trackedFetchRpcFactory'\n","import { Registry } from 'prom-client'\nimport { FetchRpc, fetchRpc } from '@lidofinance/rpc'\nimport { rpcMetricsFactory, getProviderLabel, getStatusLabel } from '@lidofinance/api-metrics'\n\nexport type TrackedFetchRpcFactoryParameters = {\n prefix: string\n registry: Registry\n}\n\nexport type TrackedFetchRPC = FetchRpc<{ chainId: string | number }>\n\nexport const trackedFetchRpcFactory = ({ prefix, registry }: TrackedFetchRpcFactoryParameters): TrackedFetchRPC => {\n const { rpcRequestCount, rpcRequestMethods, rpcResponseTime } = rpcMetricsFactory(prefix, registry)\n\n return async (url, init, { chainId }) => {\n const provider = getProviderLabel(url)\n\n rpcRequestCount.labels({ chainId, provider }).inc()\n for (const { method } of Array.isArray(init.body) ? init.body : [init.body]) {\n rpcRequestMethods.labels({ method }).inc()\n }\n const responseTime = rpcResponseTime.startTimer()\n\n const response = await fetchRpc(url, init)\n\n const status = getStatusLabel(response.status)\n responseTime({ chainId, provider, status })\n\n return response\n }\n}\n"],"names":[],"version":3,"file":"index.cjs.map","sourceRoot":"../../../../"}
1
+ {"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;ACWO,MAAM,4CAAyB,CAAC,UAAE,MAAM,YAAE,QAAQ,EAAoC;IAC3F,MAAM,mBAAE,eAAe,qBAAE,iBAAiB,mBAAE,eAAe,0BAAE,sBAAsB,EAAE,GAAG,CAAA,GAAA,8CAAgB,EACtG,QACA;IAGF,OAAO,OAAO,KAAK,MAAM,WAAE,OAAO,EAAE;QAClC,MAAM,WAAW,CAAA,GAAA,6CAAe,EAAE;QAElC,gBAAgB,OAAO;qBAAE;sBAAS;QAAS,GAAG;QAC9C,KAAK,MAAM,UAAE,MAAM,EAAE,IAAI,MAAM,QAAQ,KAAK,QAAQ,KAAK,OAAO;YAAC,KAAK;SAAK,CACzE,kBAAkB,OAAO;oBAAE;QAAO,GAAG;QAEvC,MAAM,eAAe,gBAAgB;QAErC,IAAI,SAAS;QACb,IAAI,SAAgC;QACpC,IAAI;YACF,MAAM,WAAW,MAAM,CAAA,GAAA,8BAAO,EAAE,KAAK;YACrC,SAAS,CAAA,GAAA,2CAAa,EAAE,SAAS;YACjC,SAAS,SAAS,KAAK,YAAY;YACnC,OAAO;QACT,SAAU;YACR,aAAa;yBAAE;0BAAS;wBAAU;YAAO;YACzC,uBAAuB,OAAO;yBAAE;0BAAS;wBAAU;YAAO,GAAG;QAC/D;IACF;AACF","sources":["packages/api/rpc/src/index.ts","packages/api/rpc/src/trackedFetchRpcFactory.ts"],"sourcesContent":["export * from './trackedFetchRpcFactory'\n","import { Registry } from 'prom-client'\nimport { FetchRpc, fetchRpc } from '@lidofinance/rpc'\nimport { rpcMetricsFactory, getProviderLabel, getStatusLabel } from '@lidofinance/api-metrics'\n\nexport type TrackedFetchRpcFactoryParameters = {\n prefix: string\n registry: Registry\n}\n\nexport type TrackedFetchRPC = FetchRpc<{ chainId: string | number }>\n\nexport const trackedFetchRpcFactory = ({ prefix, registry }: TrackedFetchRpcFactoryParameters): TrackedFetchRPC => {\n const { rpcRequestCount, rpcRequestMethods, rpcResponseTime, rpcResponseResultCount } = rpcMetricsFactory(\n prefix,\n registry,\n )\n\n return async (url, init, { chainId }) => {\n const provider = getProviderLabel(url)\n\n rpcRequestCount.labels({ chainId, provider }).inc()\n for (const { method } of Array.isArray(init.body) ? init.body : [init.body]) {\n rpcRequestMethods.labels({ method }).inc()\n }\n const responseTime = rpcResponseTime.startTimer()\n\n let status = 'xxx'\n let result: 'success' | 'failure' = 'failure'\n try {\n const response = await fetchRpc(url, init)\n status = getStatusLabel(response.status)\n result = response.ok ? 'success' : 'failure'\n return response\n } finally {\n responseTime({ chainId, provider, status })\n rpcResponseResultCount.labels({ chainId, provider, result }).inc()\n }\n }\n}\n"],"names":[],"version":3,"file":"index.cjs.map","sourceRoot":"../../../../"}
@@ -1 +1 @@
1
- {"mappings":";;AAIA,+CAA+C;IAC7C,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,QAAQ,CAAA;CACnB,CAAA;AAED,8BAA8B,SAAS;IAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,CAAC,CAAA;AAEpE,OAAO,MAAM,+CAAgD,gCAAgC,KAAG,eAmB/F,CAAA","sources":["packages/api/rpc/src/src/trackedFetchRpcFactory.ts","packages/api/rpc/src/src/index.ts","packages/api/rpc/src/index.ts"],"sourcesContent":[null,null,"export * from './trackedFetchRpcFactory'\n"],"names":[],"version":3,"file":"index.d.ts.map","sourceRoot":"../../../../"}
1
+ {"mappings":";;AAIA,+CAA+C;IAC7C,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,QAAQ,CAAA;CACnB,CAAA;AAED,8BAA8B,SAAS;IAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,CAAC,CAAA;AAEpE,OAAO,MAAM,+CAAgD,gCAAgC,KAAG,eA2B/F,CAAA","sources":["packages/api/rpc/src/src/trackedFetchRpcFactory.ts","packages/api/rpc/src/src/index.ts","packages/api/rpc/src/index.ts"],"sourcesContent":[null,null,"export * from './trackedFetchRpcFactory'\n"],"names":[],"version":3,"file":"index.d.ts.map","sourceRoot":"../../../../"}
package/dist/index.mjs CHANGED
@@ -10,7 +10,7 @@ $parcel$export($a3758ff406a352af$exports, "trackedFetchRpcFactory", () => $a3758
10
10
 
11
11
 
12
12
  const $a3758ff406a352af$export$78b2eac677e7bce5 = ({ prefix: prefix, registry: registry })=>{
13
- const { rpcRequestCount: rpcRequestCount, rpcRequestMethods: rpcRequestMethods, rpcResponseTime: rpcResponseTime } = (0, $1xKrC$rpcMetricsFactory)(prefix, registry);
13
+ const { rpcRequestCount: rpcRequestCount, rpcRequestMethods: rpcRequestMethods, rpcResponseTime: rpcResponseTime, rpcResponseResultCount: rpcResponseResultCount } = (0, $1xKrC$rpcMetricsFactory)(prefix, registry);
14
14
  return async (url, init, { chainId: chainId })=>{
15
15
  const provider = (0, $1xKrC$getProviderLabel)(url);
16
16
  rpcRequestCount.labels({
@@ -23,14 +23,25 @@ const $a3758ff406a352af$export$78b2eac677e7bce5 = ({ prefix: prefix, registry: r
23
23
  method: method
24
24
  }).inc();
25
25
  const responseTime = rpcResponseTime.startTimer();
26
- const response = await (0, $1xKrC$fetchRpc)(url, init);
27
- const status = (0, $1xKrC$getStatusLabel)(response.status);
28
- responseTime({
29
- chainId: chainId,
30
- provider: provider,
31
- status: status
32
- });
33
- return response;
26
+ let status = "xxx";
27
+ let result = "failure";
28
+ try {
29
+ const response = await (0, $1xKrC$fetchRpc)(url, init);
30
+ status = (0, $1xKrC$getStatusLabel)(response.status);
31
+ result = response.ok ? "success" : "failure";
32
+ return response;
33
+ } finally{
34
+ responseTime({
35
+ chainId: chainId,
36
+ provider: provider,
37
+ status: status
38
+ });
39
+ rpcResponseResultCount.labels({
40
+ chainId: chainId,
41
+ provider: provider,
42
+ result: result
43
+ }).inc();
44
+ }
34
45
  };
35
46
  };
36
47
 
@@ -1 +1 @@
1
- {"mappings":";;;;;;;;;;;ACWO,MAAM,4CAAyB,CAAC,UAAE,MAAM,YAAE,QAAQ,EAAoC;IAC3F,MAAM,mBAAE,eAAe,qBAAE,iBAAiB,mBAAE,eAAe,EAAE,GAAG,CAAA,GAAA,wBAAgB,EAAE,QAAQ;IAE1F,OAAO,OAAO,KAAK,MAAM,WAAE,OAAO,EAAE;QAClC,MAAM,WAAW,CAAA,GAAA,uBAAe,EAAE;QAElC,gBAAgB,OAAO;qBAAE;sBAAS;QAAS,GAAG;QAC9C,KAAK,MAAM,UAAE,MAAM,EAAE,IAAI,MAAM,QAAQ,KAAK,QAAQ,KAAK,OAAO;YAAC,KAAK;SAAK,CACzE,kBAAkB,OAAO;oBAAE;QAAO,GAAG;QAEvC,MAAM,eAAe,gBAAgB;QAErC,MAAM,WAAW,MAAM,CAAA,GAAA,eAAO,EAAE,KAAK;QAErC,MAAM,SAAS,CAAA,GAAA,qBAAa,EAAE,SAAS;QACvC,aAAa;qBAAE;sBAAS;oBAAU;QAAO;QAEzC,OAAO;IACT;AACF","sources":["packages/api/rpc/src/index.ts","packages/api/rpc/src/trackedFetchRpcFactory.ts"],"sourcesContent":["export * from './trackedFetchRpcFactory'\n","import { Registry } from 'prom-client'\nimport { FetchRpc, fetchRpc } from '@lidofinance/rpc'\nimport { rpcMetricsFactory, getProviderLabel, getStatusLabel } from '@lidofinance/api-metrics'\n\nexport type TrackedFetchRpcFactoryParameters = {\n prefix: string\n registry: Registry\n}\n\nexport type TrackedFetchRPC = FetchRpc<{ chainId: string | number }>\n\nexport const trackedFetchRpcFactory = ({ prefix, registry }: TrackedFetchRpcFactoryParameters): TrackedFetchRPC => {\n const { rpcRequestCount, rpcRequestMethods, rpcResponseTime } = rpcMetricsFactory(prefix, registry)\n\n return async (url, init, { chainId }) => {\n const provider = getProviderLabel(url)\n\n rpcRequestCount.labels({ chainId, provider }).inc()\n for (const { method } of Array.isArray(init.body) ? init.body : [init.body]) {\n rpcRequestMethods.labels({ method }).inc()\n }\n const responseTime = rpcResponseTime.startTimer()\n\n const response = await fetchRpc(url, init)\n\n const status = getStatusLabel(response.status)\n responseTime({ chainId, provider, status })\n\n return response\n }\n}\n"],"names":[],"version":3,"file":"index.mjs.map","sourceRoot":"../../../../"}
1
+ {"mappings":";;;;;;;;;;;ACWO,MAAM,4CAAyB,CAAC,UAAE,MAAM,YAAE,QAAQ,EAAoC;IAC3F,MAAM,mBAAE,eAAe,qBAAE,iBAAiB,mBAAE,eAAe,0BAAE,sBAAsB,EAAE,GAAG,CAAA,GAAA,wBAAgB,EACtG,QACA;IAGF,OAAO,OAAO,KAAK,MAAM,WAAE,OAAO,EAAE;QAClC,MAAM,WAAW,CAAA,GAAA,uBAAe,EAAE;QAElC,gBAAgB,OAAO;qBAAE;sBAAS;QAAS,GAAG;QAC9C,KAAK,MAAM,UAAE,MAAM,EAAE,IAAI,MAAM,QAAQ,KAAK,QAAQ,KAAK,OAAO;YAAC,KAAK;SAAK,CACzE,kBAAkB,OAAO;oBAAE;QAAO,GAAG;QAEvC,MAAM,eAAe,gBAAgB;QAErC,IAAI,SAAS;QACb,IAAI,SAAgC;QACpC,IAAI;YACF,MAAM,WAAW,MAAM,CAAA,GAAA,eAAO,EAAE,KAAK;YACrC,SAAS,CAAA,GAAA,qBAAa,EAAE,SAAS;YACjC,SAAS,SAAS,KAAK,YAAY;YACnC,OAAO;QACT,SAAU;YACR,aAAa;yBAAE;0BAAS;wBAAU;YAAO;YACzC,uBAAuB,OAAO;yBAAE;0BAAS;wBAAU;YAAO,GAAG;QAC/D;IACF;AACF","sources":["packages/api/rpc/src/index.ts","packages/api/rpc/src/trackedFetchRpcFactory.ts"],"sourcesContent":["export * from './trackedFetchRpcFactory'\n","import { Registry } from 'prom-client'\nimport { FetchRpc, fetchRpc } from '@lidofinance/rpc'\nimport { rpcMetricsFactory, getProviderLabel, getStatusLabel } from '@lidofinance/api-metrics'\n\nexport type TrackedFetchRpcFactoryParameters = {\n prefix: string\n registry: Registry\n}\n\nexport type TrackedFetchRPC = FetchRpc<{ chainId: string | number }>\n\nexport const trackedFetchRpcFactory = ({ prefix, registry }: TrackedFetchRpcFactoryParameters): TrackedFetchRPC => {\n const { rpcRequestCount, rpcRequestMethods, rpcResponseTime, rpcResponseResultCount } = rpcMetricsFactory(\n prefix,\n registry,\n )\n\n return async (url, init, { chainId }) => {\n const provider = getProviderLabel(url)\n\n rpcRequestCount.labels({ chainId, provider }).inc()\n for (const { method } of Array.isArray(init.body) ? init.body : [init.body]) {\n rpcRequestMethods.labels({ method }).inc()\n }\n const responseTime = rpcResponseTime.startTimer()\n\n let status = 'xxx'\n let result: 'success' | 'failure' = 'failure'\n try {\n const response = await fetchRpc(url, init)\n status = getStatusLabel(response.status)\n result = response.ok ? 'success' : 'failure'\n return response\n } finally {\n responseTime({ chainId, provider, status })\n rpcResponseResultCount.labels({ chainId, provider, result }).inc()\n }\n }\n}\n"],"names":[],"version":3,"file":"index.mjs.map","sourceRoot":"../../../../"}
package/package.json CHANGED
@@ -7,7 +7,7 @@
7
7
  "url": "https://github.com/lidofinance/warehouse/issues"
8
8
  },
9
9
  "license": "MIT",
10
- "version": "0.58.0",
10
+ "version": "0.59.0",
11
11
  "files": [
12
12
  "dist"
13
13
  ],
@@ -31,14 +31,14 @@
31
31
  "types": "tsc --noEmit"
32
32
  },
33
33
  "peerDependencies": {
34
- "@lidofinance/api-metrics": "~0.58.0",
35
- "@lidofinance/rpc": "~0.58.0",
34
+ "@lidofinance/api-metrics": "~0.59.0",
35
+ "@lidofinance/rpc": "~0.59.0",
36
36
  "prom-client": "^14.0.0"
37
37
  },
38
38
  "devDependencies": {
39
- "@lidofinance/api-metrics": "~0.58.0",
40
- "@lidofinance/config-prettier": "~0.58.0",
41
- "@lidofinance/rpc": "~0.58.0",
39
+ "@lidofinance/api-metrics": "~0.59.0",
40
+ "@lidofinance/config-prettier": "~0.59.0",
41
+ "@lidofinance/rpc": "~0.59.0",
42
42
  "prom-client": "^14.1.0"
43
43
  },
44
44
  "publishConfig": {