@moonwell-fi/moonwell-sdk 0.20.4 → 0.20.5

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/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # @moonwell-fi/moonwell-sdk
2
2
 
3
+ ## 0.20.5
4
+
5
+ ### Patch Changes
6
+
7
+ - [#319](https://github.com/moonwell-fi/moonwell-sdk/pull/319) [`af336bbdb4b160e0f31ee20d538abb0fbd082219`](https://github.com/moonwell-fi/moonwell-sdk/commit/af336bbdb4b160e0f31ee20d538abb0fbd082219) Thanks [@james-saint](https://github.com/james-saint)! - Dedupe Merkl reward breakdowns across pages so staking rewards are no longer inflated (MOO-587). The Merkl `/rewards` endpoint clamps an out-of-range `breakdownPage` back to page 0 instead of returning an empty page, so `getMerklRewardsData` appended the same breakdowns on every page and multiplied the reported staking rewards by the page count (the app showed 7,648 WELL vs Merkl's 764.9, ~10x). `getMerklRewardsData` now seeds a seen-set from page 0 and only appends breakdowns it has not already collected, stopping as soon as a page contributes nothing new; genuinely paginated, distinct breakdowns are still merged. No public API changes.
8
+
3
9
  ## 0.20.4
4
10
 
5
11
  ### Patch Changes
@@ -9,6 +9,7 @@ const lunar_indexer_helpers_js_1 = require("../../common/lunar-indexer-helpers.j
9
9
  const MOONWELL_MERKL_CREATOR = "0x8b621804a7637b781e2BbD58e256a591F2dF7d51";
10
10
  const CAMPAIGN_IDS_CACHE_TTL_MS = 4 * 60 * 60 * 1000;
11
11
  const MAX_BREAKDOWN_PAGES = 10;
12
+ const breakdownKey = (b) => `${b.campaignId}|${b.reason}|${b.amount}|${b.claimed}|${b.pending}|${b.subCampaignId ?? ""}`;
12
13
  let campaignIdsCache = null;
13
14
  function resetMerklCampaignIdsCache() {
14
15
  campaignIdsCache = null;
@@ -49,6 +50,7 @@ async function getMerklRewardsData(campaignId, chainId, account, lunarIndexerUrl
49
50
  if (data.length === 0) {
50
51
  return [];
51
52
  }
53
+ const seenBreakdowns = new Set(data.flatMap((reward) => reward.rewards.flatMap((r) => r.breakdowns.map(breakdownKey))));
52
54
  for (let page = 1; page < MAX_BREAKDOWN_PAGES; page++) {
53
55
  const pageResponse = await fetch(`${merklProxyBaseUrl}/users/${account}/rewards?chainId=${chainId}&test=false&breakdownPage=${page}&reloadChainId=${chainId}`, {
54
56
  headers: fetch_headers_js_1.MOONWELL_FETCH_JSON_HEADERS,
@@ -61,6 +63,7 @@ async function getMerklRewardsData(campaignId, chainId, account, lunarIndexerUrl
61
63
  if (allBreakdownsEmpty) {
62
64
  break;
63
65
  }
66
+ let addedNewBreakdown = false;
64
67
  for (const pageReward of pageData) {
65
68
  const baseReward = data.find((d) => d.chain.id === pageReward.chain.id);
66
69
  if (!baseReward)
@@ -68,11 +71,21 @@ async function getMerklRewardsData(campaignId, chainId, account, lunarIndexerUrl
68
71
  for (const pageRewardEntry of pageReward.rewards) {
69
72
  const baseRewardEntry = baseReward.rewards.find((r) => r.token.address.toLowerCase() ===
70
73
  pageRewardEntry.token.address.toLowerCase());
71
- if (baseRewardEntry) {
72
- baseRewardEntry.breakdowns.push(...pageRewardEntry.breakdowns);
74
+ if (!baseRewardEntry)
75
+ continue;
76
+ for (const breakdown of pageRewardEntry.breakdowns) {
77
+ const key = breakdownKey(breakdown);
78
+ if (seenBreakdowns.has(key))
79
+ continue;
80
+ seenBreakdowns.add(key);
81
+ baseRewardEntry.breakdowns.push(breakdown);
82
+ addedNewBreakdown = true;
73
83
  }
74
84
  }
75
85
  }
86
+ if (!addedNewBreakdown) {
87
+ break;
88
+ }
76
89
  }
77
90
  return data
78
91
  .filter((reward) => reward.rewards.some((r) => r.breakdowns.some((b) => campaignId.includes(b.campaignId))))
@@ -1 +1 @@
1
- {"version":3,"file":"common.js","sourceRoot":"","sources":["../../../actions/governance/common.ts"],"names":[],"mappings":";;AA+EA,gEAEC;AAMD,kDAmCC;AAED,kDAgGC;AAED,gDAgCC;AA7PD,oEAA4E;AAC5E,oFAA6E;AAsE7E,MAAM,sBAAsB,GAAG,4CAA4C,CAAC;AAC5E,MAAM,yBAAyB,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AACrD,MAAM,mBAAmB,GAAG,EAAE,CAAC;AAE/B,IAAI,gBAAgB,GAA4B,IAAI,CAAC;AAGrD,SAAgB,0BAA0B;IACxC,gBAAgB,GAAG,IAAI,CAAC;AAC1B,CAAC;AAMM,KAAK,UAAU,mBAAmB,CACvC,eAAwB;IAExB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAIvB,IACE,gBAAgB,KAAK,IAAI;QACzB,GAAG,GAAG,gBAAgB,CAAC,SAAS,GAAG,yBAAyB,EAC5D,CAAC;QACD,OAAO,gBAAgB,CAAC,GAAG,CAAC;IAC9B,CAAC;IAED,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAC1B,GAAG,IAAA,+CAAoB,EAAC,eAAe,CAAC,6BAA6B,sBAAsB,qCAAqC,EAChI,EAAE,OAAO,EAAE,8CAA2B,EAAE,CACzC,CAAC;QAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,OAAO,CAAC,IAAI,CACV,6BAA6B,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CACtE,CAAC;YACF,OAAO,gBAAgB,EAAE,GAAG,IAAI,EAAE,CAAC;QACrC,CAAC;QAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAoB,CAAC;QACxD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;QAC1C,gBAAgB,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;QAC3C,OAAO,GAAG,CAAC;IACb,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,CAAC,CAAC;QACtD,OAAO,gBAAgB,EAAE,GAAG,IAAI,EAAE,CAAC;IACrC,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,mBAAmB,CACvC,UAAoB,EACpB,OAAe,EACf,OAAgB,EAChB,eAAwB;IAExB,MAAM,iBAAiB,GAAG,IAAA,+CAAoB,EAAC,eAAe,CAAC,CAAC;IAChE,IAAI,CAAC;QACH,MAAM,aAAa,GAAG,MAAM,KAAK,CAC/B,GAAG,iBAAiB,UAAU,OAAO,oBAAoB,OAAO,6CAA6C,OAAO,EAAE,EACtH;YACE,OAAO,EAAE,8CAA2B;SACrC,CACF,CAAC;QAEF,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,CAAC;YACtB,OAAO,CAAC,IAAI,CACV,6BAA6B,aAAa,CAAC,MAAM,IAAI,aAAa,CAAC,UAAU,EAAE,CAChF,CAAC;YACF,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,IAAI,GAAG,CAAC,MAAM,aAAa,CAAC,IAAI,EAAE,CAA2B,CAAC;QAEpE,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,OAAO,EAAE,CAAC;QACZ,CAAC;QAGD,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,mBAAmB,EAAE,IAAI,EAAE,EAAE,CAAC;YACtD,MAAM,YAAY,GAAG,MAAM,KAAK,CAC9B,GAAG,iBAAiB,UAAU,OAAO,oBAAoB,OAAO,6BAA6B,IAAI,kBAAkB,OAAO,EAAE,EAC5H;gBACE,OAAO,EAAE,8CAA2B;aACrC,CACF,CAAC;YAEF,IAAI,CAAC,YAAY,CAAC,EAAE,EAAE,CAAC;gBACrB,MAAM;YACR,CAAC;YAED,MAAM,QAAQ,GAAG,CAAC,MAAM,YAAY,CAAC,IAAI,EAAE,CAA2B,CAAC;YAEvE,MAAM,kBAAkB,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,EAAE,CACnD,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,CAAC,CACvD,CAAC;YAEF,IAAI,kBAAkB,EAAE,CAAC;gBACvB,MAAM;YACR,CAAC;YAGD,KAAK,MAAM,UAAU,IAAI,QAAQ,EAAE,CAAC;gBAClC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,KAAK,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBACxE,IAAI,CAAC,UAAU;oBAAE,SAAS;gBAE1B,KAAK,MAAM,eAAe,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;oBACjD,MAAM,eAAe,GAAG,UAAU,CAAC,OAAO,CAAC,IAAI,CAC7C,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE;wBAC7B,eAAe,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,CAC9C,CAAC;oBACF,IAAI,eAAe,EAAE,CAAC;wBACpB,eAAe,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;oBACjE,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,IAAI;aACR,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CACjB,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CACxB,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAC5D,CACF;aACA,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAClB,MAAM,CAAC,OAAO;aACX,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CACZ,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAC5D;aACA,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CACb,CAAC,CAAC,UAAU;aACT,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;aAChD,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACX,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE;YACtB,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,OAAO,EAAE,CAAC,CAAC,OAAO;SACnB,CAAC,CAAC,CACN,CACJ,CAAC;IACN,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,CAAC,CAAC;QACtD,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,kBAAkB,CACtC,eAAuB,EACvB,eAAwB;IAExB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IAE1C,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAC1B,GAAG,IAAA,+CAAoB,EAAC,eAAe,CAAC,6BAA6B,sBAAsB,qCAAqC,EAChI,EAAE,OAAO,EAAE,8CAA2B,EAAE,CACzC,CAAC;QAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,OAAO,CAAC,IAAI,CACV,6BAA6B,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CACtE,CAAC;YACF,OAAO,CAAC,CAAC;QACX,CAAC;QAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAoB,CAAC;QAExD,OAAO,IAAI;aACR,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,IAAI,GAAG,IAAI,CAAC,CAAC,YAAY,IAAI,GAAG,CAAC;aAC/D,MAAM,CACL,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,WAAW,EAAE,KAAK,eAAe,CAAC,WAAW,EAAE,CACvE;aACA,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IAChD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,KAAK,CAAC,CAAC;QACrD,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"common.js","sourceRoot":"","sources":["../../../actions/governance/common.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.version = void 0;
4
- exports.version = '0.20.4';
4
+ exports.version = '0.20.5';
5
5
  //# sourceMappingURL=version.js.map
@@ -3,6 +3,15 @@ import { getMerklProxyBaseUrl } from "../../common/lunar-indexer-helpers.js";
3
3
  const MOONWELL_MERKL_CREATOR = "0x8b621804a7637b781e2BbD58e256a591F2dF7d51";
4
4
  const CAMPAIGN_IDS_CACHE_TTL_MS = 4 * 60 * 60 * 1000; // 4 hours
5
5
  const MAX_BREAKDOWN_PAGES = 10;
6
+ /**
7
+ * Stable identity for a Merkl reward breakdown. The Merkl `/rewards` endpoint
8
+ * clamps an out-of-range `breakdownPage` back to the first page instead of
9
+ * returning an empty page, so appending each page's breakdowns blindly
10
+ * re-counts the same rewards and inflates the total by the page count (up to
11
+ * 10x). Keying on the full breakdown content lets us skip exact repeats while
12
+ * still keeping genuinely distinct distributions that share a campaignId.
13
+ */
14
+ const breakdownKey = (b) => `${b.campaignId}|${b.reason}|${b.amount}|${b.claimed}|${b.pending}|${b.subCampaignId ?? ""}`;
6
15
  let campaignIdsCache = null;
7
16
  /** Resets the in-memory campaign IDs cache. Intended for use in tests only. */
8
17
  export function resetMerklCampaignIdsCache() {
@@ -51,6 +60,9 @@ export async function getMerklRewardsData(campaignId, chainId, account, lunarInd
51
60
  if (data.length === 0) {
52
61
  return [];
53
62
  }
63
+ // Track breakdowns already collected (seeded from page 0) so repeated
64
+ // pages don't double-count. See breakdownKey for why Merkl repeats them.
65
+ const seenBreakdowns = new Set(data.flatMap((reward) => reward.rewards.flatMap((r) => r.breakdowns.map(breakdownKey))));
54
66
  // Paginate through remaining breakdown pages to collect all breakdowns
55
67
  for (let page = 1; page < MAX_BREAKDOWN_PAGES; page++) {
56
68
  const pageResponse = await fetch(`${merklProxyBaseUrl}/users/${account}/rewards?chainId=${chainId}&test=false&breakdownPage=${page}&reloadChainId=${chainId}`, {
@@ -64,7 +76,8 @@ export async function getMerklRewardsData(campaignId, chainId, account, lunarInd
64
76
  if (allBreakdownsEmpty) {
65
77
  break;
66
78
  }
67
- // Merge breakdowns from this page into the page-0 data
79
+ // Merge only breakdowns we haven't collected yet.
80
+ let addedNewBreakdown = false;
68
81
  for (const pageReward of pageData) {
69
82
  const baseReward = data.find((d) => d.chain.id === pageReward.chain.id);
70
83
  if (!baseReward)
@@ -72,11 +85,24 @@ export async function getMerklRewardsData(campaignId, chainId, account, lunarInd
72
85
  for (const pageRewardEntry of pageReward.rewards) {
73
86
  const baseRewardEntry = baseReward.rewards.find((r) => r.token.address.toLowerCase() ===
74
87
  pageRewardEntry.token.address.toLowerCase());
75
- if (baseRewardEntry) {
76
- baseRewardEntry.breakdowns.push(...pageRewardEntry.breakdowns);
88
+ if (!baseRewardEntry)
89
+ continue;
90
+ for (const breakdown of pageRewardEntry.breakdowns) {
91
+ const key = breakdownKey(breakdown);
92
+ if (seenBreakdowns.has(key))
93
+ continue;
94
+ seenBreakdowns.add(key);
95
+ baseRewardEntry.breakdowns.push(breakdown);
96
+ addedNewBreakdown = true;
77
97
  }
78
98
  }
79
99
  }
100
+ // A page that only repeats breakdowns we've already seen means the API
101
+ // has stopped advancing (out-of-range page clamped to page 0), so
102
+ // continuing would just re-count the same rewards.
103
+ if (!addedNewBreakdown) {
104
+ break;
105
+ }
80
106
  }
81
107
  return data
82
108
  .filter((reward) => reward.rewards.some((r) => r.breakdowns.some((b) => campaignId.includes(b.campaignId))))
@@ -1 +1 @@
1
- {"version":3,"file":"common.js","sourceRoot":"","sources":["../../../actions/governance/common.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"common.js","sourceRoot":"","sources":["../../../actions/governance/common.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- export const version = '0.20.4';
1
+ export const version = '0.20.5';
2
2
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../../actions/governance/common.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AA2CpC,KAAK,WAAW,GAAG;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE;QACL,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IACF,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAuBF,+EAA+E;AAC/E,wBAAgB,0BAA0B,IAAI,IAAI,CAEjD;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,eAAe,CAAC,EAAE,MAAM,GACvB,OAAO,CAAC,MAAM,EAAE,CAAC,CAiCnB;AAED,wBAAsB,mBAAmB,CACvC,UAAU,EAAE,MAAM,EAAE,EACpB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,OAAO,EAChB,eAAe,CAAC,EAAE,MAAM,GACvB,OAAO,CAAC,WAAW,EAAE,CAAC,CA2FxB;AAED,wBAAsB,kBAAkB,CACtC,eAAe,EAAE,MAAM,EACvB,eAAe,CAAC,EAAE,MAAM,GACvB,OAAO,CAAC,MAAM,CAAC,CA6BjB"}
1
+ {"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../../actions/governance/common.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AA2CpC,KAAK,WAAW,GAAG;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE;QACL,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IACF,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAqCF,+EAA+E;AAC/E,wBAAgB,0BAA0B,IAAI,IAAI,CAEjD;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,eAAe,CAAC,EAAE,MAAM,GACvB,OAAO,CAAC,MAAM,EAAE,CAAC,CAiCnB;AAED,wBAAsB,mBAAmB,CACvC,UAAU,EAAE,MAAM,EAAE,EACpB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,OAAO,EAChB,eAAe,CAAC,EAAE,MAAM,GACvB,OAAO,CAAC,WAAW,EAAE,CAAC,CAiHxB;AAED,wBAAsB,kBAAkB,CACtC,eAAe,EAAE,MAAM,EACvB,eAAe,CAAC,EAAE,MAAM,GACvB,OAAO,CAAC,MAAM,CAAC,CA6BjB"}
@@ -1,2 +1,2 @@
1
- export declare const version = "0.20.4";
1
+ export declare const version = "0.20.5";
2
2
  //# sourceMappingURL=version.d.ts.map
@@ -70,10 +70,24 @@ type CampaignIdsCache = {
70
70
  fetchedAt: number;
71
71
  };
72
72
 
73
+ type MerklBreakdown =
74
+ MerklRewardsResponse["rewards"][number]["breakdowns"][number];
75
+
73
76
  const MOONWELL_MERKL_CREATOR = "0x8b621804a7637b781e2BbD58e256a591F2dF7d51";
74
77
  const CAMPAIGN_IDS_CACHE_TTL_MS = 4 * 60 * 60 * 1000; // 4 hours
75
78
  const MAX_BREAKDOWN_PAGES = 10;
76
79
 
80
+ /**
81
+ * Stable identity for a Merkl reward breakdown. The Merkl `/rewards` endpoint
82
+ * clamps an out-of-range `breakdownPage` back to the first page instead of
83
+ * returning an empty page, so appending each page's breakdowns blindly
84
+ * re-counts the same rewards and inflates the total by the page count (up to
85
+ * 10x). Keying on the full breakdown content lets us skip exact repeats while
86
+ * still keeping genuinely distinct distributions that share a campaignId.
87
+ */
88
+ const breakdownKey = (b: MerklBreakdown): string =>
89
+ `${b.campaignId}|${b.reason}|${b.amount}|${b.claimed}|${b.pending}|${b.subCampaignId ?? ""}`;
90
+
77
91
  let campaignIdsCache: CampaignIdsCache | null = null;
78
92
 
79
93
  /** Resets the in-memory campaign IDs cache. Intended for use in tests only. */
@@ -150,6 +164,14 @@ export async function getMerklRewardsData(
150
164
  return [];
151
165
  }
152
166
 
167
+ // Track breakdowns already collected (seeded from page 0) so repeated
168
+ // pages don't double-count. See breakdownKey for why Merkl repeats them.
169
+ const seenBreakdowns = new Set(
170
+ data.flatMap((reward) =>
171
+ reward.rewards.flatMap((r) => r.breakdowns.map(breakdownKey)),
172
+ ),
173
+ );
174
+
153
175
  // Paginate through remaining breakdown pages to collect all breakdowns
154
176
  for (let page = 1; page < MAX_BREAKDOWN_PAGES; page++) {
155
177
  const pageResponse = await fetch(
@@ -173,7 +195,8 @@ export async function getMerklRewardsData(
173
195
  break;
174
196
  }
175
197
 
176
- // Merge breakdowns from this page into the page-0 data
198
+ // Merge only breakdowns we haven't collected yet.
199
+ let addedNewBreakdown = false;
177
200
  for (const pageReward of pageData) {
178
201
  const baseReward = data.find((d) => d.chain.id === pageReward.chain.id);
179
202
  if (!baseReward) continue;
@@ -184,11 +207,24 @@ export async function getMerklRewardsData(
184
207
  r.token.address.toLowerCase() ===
185
208
  pageRewardEntry.token.address.toLowerCase(),
186
209
  );
187
- if (baseRewardEntry) {
188
- baseRewardEntry.breakdowns.push(...pageRewardEntry.breakdowns);
210
+ if (!baseRewardEntry) continue;
211
+
212
+ for (const breakdown of pageRewardEntry.breakdowns) {
213
+ const key = breakdownKey(breakdown);
214
+ if (seenBreakdowns.has(key)) continue;
215
+ seenBreakdowns.add(key);
216
+ baseRewardEntry.breakdowns.push(breakdown);
217
+ addedNewBreakdown = true;
189
218
  }
190
219
  }
191
220
  }
221
+
222
+ // A page that only repeats breakdowns we've already seen means the API
223
+ // has stopped advancing (out-of-range page clamped to page 0), so
224
+ // continuing would just re-count the same rewards.
225
+ if (!addedNewBreakdown) {
226
+ break;
227
+ }
192
228
  }
193
229
 
194
230
  return data
package/errors/version.ts CHANGED
@@ -1 +1 @@
1
- export const version = '0.20.4'
1
+ export const version = '0.20.5'
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@moonwell-fi/moonwell-sdk",
3
3
  "description": "TypeScript Interface for Moonwell",
4
- "version": "0.20.4",
4
+ "version": "0.20.5",
5
5
  "main": "./_cjs/index.js",
6
6
  "module": "./_esm/index.js",
7
7
  "types": "./_types/index.d.ts",