@mento-protocol/config 0.1.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.
Files changed (45) hide show
  1. package/aggregators.json +120 -0
  2. package/chain-metadata.json +22 -0
  3. package/deployment-namespaces.json +6 -0
  4. package/dist/aggregators.d.ts +30 -0
  5. package/dist/aggregators.d.ts.map +1 -0
  6. package/dist/aggregators.js +88 -0
  7. package/dist/chains.d.ts +7 -0
  8. package/dist/chains.d.ts.map +1 -0
  9. package/dist/chains.js +29 -0
  10. package/dist/deployment-namespaces.d.ts +7 -0
  11. package/dist/deployment-namespaces.d.ts.map +1 -0
  12. package/dist/deployment-namespaces.js +12 -0
  13. package/dist/erc20-abi.d.ts +25 -0
  14. package/dist/erc20-abi.d.ts.map +1 -0
  15. package/dist/erc20-abi.js +32 -0
  16. package/dist/format.d.ts +3 -0
  17. package/dist/format.d.ts.map +1 -0
  18. package/dist/format.js +12 -0
  19. package/dist/fx-calendar.d.ts +22 -0
  20. package/dist/fx-calendar.d.ts.map +1 -0
  21. package/dist/fx-calendar.js +27 -0
  22. package/dist/oracle-reporters.d.ts +13 -0
  23. package/dist/oracle-reporters.d.ts.map +1 -0
  24. package/dist/oracle-reporters.js +65 -0
  25. package/dist/protocol-fee.d.ts +2 -0
  26. package/dist/protocol-fee.d.ts.map +1 -0
  27. package/dist/protocol-fee.js +13 -0
  28. package/dist/rebalance-abi.d.ts +182 -0
  29. package/dist/rebalance-abi.d.ts.map +1 -0
  30. package/dist/rebalance-abi.js +188 -0
  31. package/dist/rebalance-enrichment.d.ts +137 -0
  32. package/dist/rebalance-enrichment.d.ts.map +1 -0
  33. package/dist/rebalance-enrichment.js +96 -0
  34. package/dist/thresholds.d.ts +25 -0
  35. package/dist/thresholds.d.ts.map +1 -0
  36. package/dist/thresholds.js +33 -0
  37. package/dist/tokens.d.ts +15 -0
  38. package/dist/tokens.d.ts.map +1 -0
  39. package/dist/tokens.js +107 -0
  40. package/dist/units.d.ts +16 -0
  41. package/dist/units.d.ts.map +1 -0
  42. package/dist/units.js +25 -0
  43. package/fx-calendar.json +7 -0
  44. package/oracle-reporters.json +123 -0
  45. package/package.json +109 -0
@@ -0,0 +1,33 @@
1
+ // Canonical deviation thresholds shared by every TS package in this monorepo.
2
+ // Pure data — no runtime deps — so it's safe to import from indexer handlers,
3
+ // the metrics-bridge probe, and the dashboard alike.
4
+ //
5
+ // IMPORTANT: alerts/rules/main.tf and alerts/rules/rules-fpmms.tf hard-code
6
+ // these same numbers as HCL literals (1.01 for the OK/WARN boundary, 1.05 for
7
+ // the WARN/CRITICAL boundary). HCL can't import TS exports, so any change here
8
+ // must be mirrored there manually. `scripts/check-deviation-threshold-drift.mjs`
9
+ // enforces that mirror.
10
+ /**
11
+ * OK/WARN boundary. A pool is considered "within tolerance" while
12
+ * `priceDifference / rebalanceThreshold ≤ DEVIATION_TOLERANCE_RATIO`.
13
+ * Strict `>` flips the pool to WARN (or above).
14
+ *
15
+ * Mirrors `DEVIATION_TOLERANCE_NUM / DEVIATION_TOLERANCE_DEN` in
16
+ * `indexer-envio/src/pool/health.ts`; `test/deviationThresholdSharedConfigSync.test.ts`
17
+ * enforces numeric parity and `test/healthStatusParity.test.ts` enforces
18
+ * behavioral parity with the dashboard's `computeHealthStatus`.
19
+ */
20
+ export const DEVIATION_TOLERANCE_RATIO = 1.01;
21
+ /**
22
+ * WARN/CRITICAL magnitude boundary. A pool past `DEVIATION_TOLERANCE_RATIO`
23
+ * stays WARN until `priceDifference / rebalanceThreshold > DEVIATION_CRITICAL_RATIO`
24
+ * AND the breach has outlived `DEVIATION_BREACH_GRACE_SECONDS`. Below this
25
+ * magnitude, duration alone never escalates a breach to CRITICAL.
26
+ *
27
+ * Mirrors `DEVIATION_CRITICAL_NUM / DEVIATION_CRITICAL_DEN` in
28
+ * `indexer-envio/src/pool/health.ts`; `test/deviationThresholdSharedConfigSync.test.ts`
29
+ * enforces numeric parity and `test/healthStatusParity.test.ts` enforces
30
+ * behavioral parity. Also gates the metrics-bridge rebalance-reason probe so
31
+ * the annotation only attaches to alerts that can actually fire.
32
+ */
33
+ export const DEVIATION_CRITICAL_RATIO = 1.05;
@@ -0,0 +1,15 @@
1
+ export interface ContractEntry {
2
+ chainId: number;
3
+ namespace: string;
4
+ address: string;
5
+ rawName: string;
6
+ canonicalName: string;
7
+ type: "token" | "pool" | "contract";
8
+ decimals?: number;
9
+ }
10
+ export declare function contractEntries(chainId?: number): ContractEntry[];
11
+ export declare function tokenSymbol(chainId: number, address: string | null): string | null;
12
+ export declare function poolName(chainId: number, token0: string | null, token1: string | null): string | null;
13
+ export declare function chainTokenSymbols(chainId: number): Record<string, string>;
14
+ export declare function chainAddressLabels(chainId: number): Record<string, string>;
15
+ //# sourceMappingURL=tokens.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../src/tokens.ts"],"names":[],"mappings":"AAiBA,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,UAAU,CAAC;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAgED,wBAAgB,eAAe,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,aAAa,EAAE,CAGjE;AAED,wBAAgB,WAAW,CACzB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,GAAG,IAAI,GACrB,MAAM,GAAG,IAAI,CAGf;AAMD,wBAAgB,QAAQ,CACtB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,GAAG,IAAI,EACrB,MAAM,EAAE,MAAM,GAAG,IAAI,GACpB,MAAM,GAAG,IAAI,CAMf;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAQzE;AAID,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAM1E"}
package/dist/tokens.js ADDED
@@ -0,0 +1,107 @@
1
+ // Canonical token-symbol derivation from @mento-protocol/contracts.
2
+ // `indexer-envio/src/feeToken.ts:buildKnownTokenMeta` is a deliberate mirror
3
+ // with a stricter allowlist (`Mock*` exclusion + `decimals` required) — the
4
+ // indexer can't import this package because Envio builds outside the pnpm
5
+ // workspace. Keep the Spoke/StableToken rules in sync.
6
+ import contractsData from "@mento-protocol/contracts/contracts.json" with { type: "json" };
7
+ import namespaces from "../deployment-namespaces.json" with { type: "json" };
8
+ const NAMESPACES = namespaces;
9
+ const CONTRACTS = contractsData;
10
+ // Monad NTT tokens are published as `USDmSpoke`, `EURmSpoke`, etc.; strip the
11
+ // suffix on tokens only (implementation contracts like `StableTokenSpoke`
12
+ // stay raw for the address book). Guard against `name === "Spoke"` so a
13
+ // hypothetical malformed entry can't canonicalize to an empty symbol.
14
+ function canonicalTokenSymbol(name) {
15
+ return name.length > 5 && name.endsWith("Spoke") ? name.slice(0, -5) : name;
16
+ }
17
+ // `StableToken*` are implementation contracts; they must not surface as
18
+ // pool-token symbols. `Mock*` is deliberately kept — Sepolia MockERC20*
19
+ // deployments ARE the real pool tokens there.
20
+ function isInternalTokenName(name) {
21
+ return name.startsWith("StableToken");
22
+ }
23
+ function coerceType(raw) {
24
+ return raw === "token" || raw === "pool" ? raw : "contract";
25
+ }
26
+ const ALL_ENTRIES = (() => {
27
+ const out = [];
28
+ for (const [chainIdStr, perNamespace] of Object.entries(CONTRACTS)) {
29
+ const ns = NAMESPACES[chainIdStr];
30
+ if (!ns)
31
+ continue;
32
+ const entries = perNamespace[ns];
33
+ if (!entries)
34
+ continue;
35
+ const chainId = Number(chainIdStr);
36
+ for (const [rawName, info] of Object.entries(entries)) {
37
+ const type = coerceType(info.type);
38
+ const canonicalName = type === "token" ? canonicalTokenSymbol(rawName) : rawName;
39
+ out.push({
40
+ chainId,
41
+ namespace: ns,
42
+ address: info.address.toLowerCase(),
43
+ rawName,
44
+ canonicalName,
45
+ type,
46
+ ...(info.decimals !== undefined && { decimals: info.decimals }),
47
+ });
48
+ }
49
+ }
50
+ return out;
51
+ })();
52
+ const ENTRIES_BY_CHAIN = new Map();
53
+ for (const e of ALL_ENTRIES) {
54
+ const list = ENTRIES_BY_CHAIN.get(e.chainId) ?? [];
55
+ list.push(e);
56
+ ENTRIES_BY_CHAIN.set(e.chainId, list);
57
+ }
58
+ const TOKEN_SYMBOL_INDEX = new Map();
59
+ for (const e of ALL_ENTRIES) {
60
+ if (e.type !== "token")
61
+ continue;
62
+ if (isInternalTokenName(e.rawName))
63
+ continue;
64
+ TOKEN_SYMBOL_INDEX.set(`${e.chainId}:${e.address}`, e.canonicalName);
65
+ }
66
+ export function contractEntries(chainId) {
67
+ if (chainId === undefined)
68
+ return ALL_ENTRIES.slice();
69
+ return (ENTRIES_BY_CHAIN.get(chainId) ?? []).slice();
70
+ }
71
+ export function tokenSymbol(chainId, address) {
72
+ if (!address)
73
+ return null;
74
+ return TOKEN_SYMBOL_INDEX.get(`${chainId}:${address.toLowerCase()}`) ?? null;
75
+ }
76
+ const USDM_SYMBOL = "USDm";
77
+ // Pool display name like "GBPm/USDm" with USDm always last. Returns null if
78
+ // either leg cannot be resolved.
79
+ export function poolName(chainId, token0, token1) {
80
+ const sym0 = tokenSymbol(chainId, token0);
81
+ const sym1 = tokenSymbol(chainId, token1);
82
+ if (!sym0 || !sym1)
83
+ return null;
84
+ if (sym0 === USDM_SYMBOL && sym1 !== USDM_SYMBOL)
85
+ return `${sym1}/${sym0}`;
86
+ return `${sym0}/${sym1}`;
87
+ }
88
+ export function chainTokenSymbols(chainId) {
89
+ const out = {};
90
+ for (const e of ENTRIES_BY_CHAIN.get(chainId) ?? []) {
91
+ if (e.type !== "token")
92
+ continue;
93
+ if (isInternalTokenName(e.rawName))
94
+ continue;
95
+ out[e.address] = e.canonicalName;
96
+ }
97
+ return out;
98
+ }
99
+ // Every entry for a chain (tokens + non-tokens) as address → name. Token
100
+ // names canonicalized; implementation names kept raw for address-book use.
101
+ export function chainAddressLabels(chainId) {
102
+ const out = {};
103
+ for (const e of ENTRIES_BY_CHAIN.get(chainId) ?? []) {
104
+ out[e.address] = e.canonicalName;
105
+ }
106
+ return out;
107
+ }
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Convert a raw on-chain uint256 balance to a human-units number without
3
+ * losing precision when the raw value exceeds 2^53. `Number(bigint) /
4
+ * 10**decimals` truncates bits past 2^53, which for an 18-decimal token
5
+ * kicks in around 9M whole tokens — well within realistic supplies. We
6
+ * scale down in BigInt first so the Number cast is always safe.
7
+ *
8
+ * Fractional precision is capped at 6 digits (far more than the tooltip
9
+ * needs) to keep the final Number representation lossless. Mirrored
10
+ * historically across `metrics-bridge/src/rebalance-check.ts` and
11
+ * `ui-dashboard/src/lib/rebalance-check.ts` — kept here as the single
12
+ * source of truth so the alert annotation and the dashboard tooltip
13
+ * always agree on rendered units.
14
+ */
15
+ export declare function toHumanUnits(raw: bigint, decimals: number): number;
16
+ //# sourceMappingURL=units.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"units.d.ts","sourceRoot":"","sources":["../src/units.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CASlE"}
package/dist/units.js ADDED
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Convert a raw on-chain uint256 balance to a human-units number without
3
+ * losing precision when the raw value exceeds 2^53. `Number(bigint) /
4
+ * 10**decimals` truncates bits past 2^53, which for an 18-decimal token
5
+ * kicks in around 9M whole tokens — well within realistic supplies. We
6
+ * scale down in BigInt first so the Number cast is always safe.
7
+ *
8
+ * Fractional precision is capped at 6 digits (far more than the tooltip
9
+ * needs) to keep the final Number representation lossless. Mirrored
10
+ * historically across `metrics-bridge/src/rebalance-check.ts` and
11
+ * `ui-dashboard/src/lib/rebalance-check.ts` — kept here as the single
12
+ * source of truth so the alert annotation and the dashboard tooltip
13
+ * always agree on rendered units.
14
+ */
15
+ export function toHumanUnits(raw, decimals) {
16
+ if (decimals <= 0)
17
+ return Number(raw);
18
+ // BigInt(...) call form rather than `10n` literal — the ui-dashboard
19
+ // tsconfig targets ES2017, which doesn't emit BigInt literals.
20
+ const divisor = BigInt(10) ** BigInt(decimals);
21
+ const whole = raw / divisor;
22
+ const fractionScale = BigInt(1_000_000);
23
+ const fraction = ((raw % divisor) * fractionScale) / divisor;
24
+ return Number(whole) + Number(fraction) / Number(fractionScale);
25
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "fxCloseDay": 5,
3
+ "fxCloseHourUtc": 21,
4
+ "fxReopenDay": 0,
5
+ "fxReopenHourUtc": 23,
6
+ "anchorFri2100UnixSec": 1704488400
7
+ }
@@ -0,0 +1,123 @@
1
+ {
2
+ "42220": {
3
+ "feeds": {
4
+ "0x0f61ba9c30ef7caee7e5cc1f96bffcb0f52ccd64": {
5
+ "pair": "CHF/USD",
6
+ "type": "CHAINLINK"
7
+ },
8
+ "0x26076b9702885d475ac8c3db3bd9f250dc5a318b": {
9
+ "pair": "EUR/USD",
10
+ "type": "CHAINLINK"
11
+ },
12
+ "0xa1a8003936862e7a15092a91898d69fa8bce290c": {
13
+ "pair": "USDC/USD",
14
+ "type": "CHAINLINK"
15
+ },
16
+ "0xfde35b45cbd2504fb5dc514f007bc2de27034274": {
17
+ "pair": "JPY/USD",
18
+ "chainlinkSlug": "jpy-usd-fx",
19
+ "type": "CHAINLINK"
20
+ },
21
+ "0xf4f9bbda9cd6841fcb9b1510f9269e2db42a6e3a": {
22
+ "pair": "EUR/USD",
23
+ "type": "CHAINLINK"
24
+ },
25
+ "0xf590b62f9cfcc6409075b1ecac8176fe25744b88": {
26
+ "pair": "GBP/USD",
27
+ "type": "CHAINLINK"
28
+ },
29
+ "0xe06c10c63377cd098b589c0b90314bfb55751558": {
30
+ "pair": "USDT/USD",
31
+ "type": "CHAINLINK"
32
+ }
33
+ },
34
+ "reporters": {
35
+ "0x1b904277b22ca598ef17b38f64de5f9c29cd31bd": {
36
+ "type": "CHAINLINK",
37
+ "name": "Chainlink CHF/USD"
38
+ },
39
+ "0x6490a3ffad86ca14ff84be380d5639fb8fbd311b": {
40
+ "type": "CHAINLINK",
41
+ "name": "Chainlink EUR/USD or USDC/USD"
42
+ },
43
+ "0x1327a32fa7e3a0c3c0a5828d4f3ff16ce9e13ee9": {
44
+ "type": "CHAINLINK",
45
+ "name": "Chainlink JPY/USD"
46
+ },
47
+ "0xc4918a76a7fdb113f2dfa9b162e875f271a2f7b8": {
48
+ "type": "CHAINLINK",
49
+ "name": "Chainlink EUR/USD"
50
+ },
51
+ "0x215d3ba962597defb38da439ed4db8e8a63e409a": {
52
+ "type": "CHAINLINK",
53
+ "name": "Chainlink GBP/USD"
54
+ },
55
+ "0x564dd5fec58e7103c2a6041b7dd1bb3074a4616b": {
56
+ "type": "CHAINLINK",
57
+ "name": "Chainlink USDT/USD"
58
+ }
59
+ }
60
+ },
61
+ "143": {
62
+ "feeds": {
63
+ "0xac414205651f4a62b614b6be9e5318a182c33eb0": {
64
+ "pair": "USDT/USD",
65
+ "type": "CHAINLINK"
66
+ },
67
+ "0xf47172ce00522cc7db02109634a92ce866a15fcc": {
68
+ "pair": "AUSD/USD",
69
+ "type": "CHAINLINK"
70
+ },
71
+ "0xec57482aa55e3ad026c315a0e4a692b776c318ca": {
72
+ "pair": "EUR/USD",
73
+ "type": "CHAINLINK"
74
+ },
75
+ "0xea4103a6a122fbe2cdb07a80d4d293be07bb29fa": {
76
+ "pair": "GBP/USD",
77
+ "type": "CHAINLINK"
78
+ },
79
+ "0x81a313ff894bfc6093d33b5514e34d7faa41b7ef": {
80
+ "pair": "USDC/USD",
81
+ "type": "CHAINLINK"
82
+ },
83
+ "0x2ee56be22d6af8c1b0ac97149b6f42d3b0bfb8c2": {
84
+ "pair": "CHF/USD",
85
+ "type": "CHAINLINK"
86
+ },
87
+ "0xb9addcd1d1ce7d49dbb540e2677f1c572bc8d195": {
88
+ "pair": "JPY/USD",
89
+ "type": "CHAINLINK"
90
+ }
91
+ },
92
+ "reporters": {
93
+ "0x0fb76625e4f43b8183d7c899df13024cbe030b0d": {
94
+ "type": "CHAINLINK",
95
+ "name": "ChainlinkRelayerV1USDTUSD"
96
+ },
97
+ "0x2604f6dafed5b6204868e15e89ca41c2d5f6d9c2": {
98
+ "type": "CHAINLINK",
99
+ "name": "ChainlinkRelayerV1AUSDUSD"
100
+ },
101
+ "0x1de9678363193412264911ebcc797c54da09ecbf": {
102
+ "type": "CHAINLINK",
103
+ "name": "ChainlinkRelayerV1EURUSD"
104
+ },
105
+ "0xdb8fc8c6daac8f73e21e9cc145440ab899d60e55": {
106
+ "type": "CHAINLINK",
107
+ "name": "ChainlinkRelayerV1GBPUSD"
108
+ },
109
+ "0xb1683db4d2d74e951c54314f1bca1e8fbb299fe2": {
110
+ "type": "CHAINLINK",
111
+ "name": "ChainlinkRelayerV1USDCUSD"
112
+ },
113
+ "0xf091f44a7b8cb8c57747275496fdb9957b3d0909": {
114
+ "type": "CHAINLINK",
115
+ "name": "ChainlinkRelayerV1CHFUSD"
116
+ },
117
+ "0x30fa361bd8315926e6ef4ceb88a353fab5a11f86": {
118
+ "type": "CHAINLINK",
119
+ "name": "ChainlinkRelayerV1JPYUSD"
120
+ }
121
+ }
122
+ }
123
+ }
package/package.json ADDED
@@ -0,0 +1,109 @@
1
+ {
2
+ "name": "@mento-protocol/config",
3
+ "version": "0.1.0",
4
+ "private": false,
5
+ "type": "module",
6
+ "description": "Public Mento protocol metadata for chain IDs, deployment namespaces, token labels, FX calendars, thresholds, and shared ABIs.",
7
+ "license": "GPL-3.0-only",
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "https://github.com/mento-protocol/monitoring-monorepo",
11
+ "directory": "shared-config"
12
+ },
13
+ "files": [
14
+ "dist",
15
+ "deployment-namespaces.json",
16
+ "fx-calendar.json",
17
+ "chain-metadata.json",
18
+ "aggregators.json",
19
+ "oracle-reporters.json"
20
+ ],
21
+ "publishConfig": {
22
+ "access": "public"
23
+ },
24
+ "exports": {
25
+ "./package.json": "./package.json",
26
+ "./deployment-namespaces.json": "./deployment-namespaces.json",
27
+ "./fx-calendar.json": "./fx-calendar.json",
28
+ "./chain-metadata.json": "./chain-metadata.json",
29
+ "./aggregators.json": "./aggregators.json",
30
+ "./oracle-reporters.json": "./oracle-reporters.json",
31
+ "./deployment-namespaces": {
32
+ "types": "./dist/deployment-namespaces.d.ts",
33
+ "default": "./dist/deployment-namespaces.js"
34
+ },
35
+ "./fx-calendar": {
36
+ "types": "./dist/fx-calendar.d.ts",
37
+ "default": "./dist/fx-calendar.js"
38
+ },
39
+ "./chains": {
40
+ "types": "./dist/chains.d.ts",
41
+ "default": "./dist/chains.js"
42
+ },
43
+ "./aggregators": {
44
+ "types": "./dist/aggregators.d.ts",
45
+ "default": "./dist/aggregators.js"
46
+ },
47
+ "./oracle-reporters": {
48
+ "types": "./dist/oracle-reporters.d.ts",
49
+ "default": "./dist/oracle-reporters.js"
50
+ },
51
+ "./tokens": {
52
+ "types": "./dist/tokens.d.ts",
53
+ "default": "./dist/tokens.js"
54
+ },
55
+ "./format": {
56
+ "types": "./dist/format.d.ts",
57
+ "default": "./dist/format.js"
58
+ },
59
+ "./rebalance-abi": {
60
+ "types": "./dist/rebalance-abi.d.ts",
61
+ "default": "./dist/rebalance-abi.js"
62
+ },
63
+ "./erc20-abi": {
64
+ "types": "./dist/erc20-abi.d.ts",
65
+ "default": "./dist/erc20-abi.js"
66
+ },
67
+ "./thresholds": {
68
+ "types": "./dist/thresholds.d.ts",
69
+ "default": "./dist/thresholds.js"
70
+ },
71
+ "./units": {
72
+ "types": "./dist/units.d.ts",
73
+ "default": "./dist/units.js"
74
+ },
75
+ "./protocol-fee": {
76
+ "types": "./dist/protocol-fee.d.ts",
77
+ "default": "./dist/protocol-fee.js"
78
+ }
79
+ },
80
+ "scripts": {
81
+ "build": "tsc",
82
+ "typecheck": "tsc --noEmit",
83
+ "lint": "node ../scripts/eslint-baseline-diff.mjs check",
84
+ "lint:baseline:update": "node ../scripts/eslint-baseline-diff.mjs update",
85
+ "knip": "knip --config knip.json --no-progress",
86
+ "knip:report": "knip --config knip.json --no-exit-code --no-progress",
87
+ "test": "vitest run",
88
+ "test:coverage": "vitest run --coverage"
89
+ },
90
+ "dependencies": {
91
+ "@mento-protocol/contracts": "0.8.1"
92
+ },
93
+ "devDependencies": {
94
+ "@eslint/js": "^10.0.1",
95
+ "@types/node": "^24.10.1",
96
+ "@vitest/coverage-v8": "^4.1.0",
97
+ "eslint": "^10.0.2",
98
+ "eslint-plugin-sonarjs": "4.0.3",
99
+ "eslint-plugin-unused-imports": "^4.2.0",
100
+ "globals": "^17.4.0",
101
+ "knip": "6.12.2",
102
+ "typescript": "^5.9.3",
103
+ "typescript-eslint": "^8.56.1",
104
+ "vitest": "^4.1.0"
105
+ },
106
+ "engines": {
107
+ "node": ">=24"
108
+ }
109
+ }