@strkfarm/sdk 1.0.47 → 1.0.49

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/dist/index.js CHANGED
@@ -63,6 +63,7 @@ __export(src_exports, {
63
63
  getNoRiskTags: () => getNoRiskTags,
64
64
  getRiskColor: () => getRiskColor,
65
65
  getRiskExplaination: () => getRiskExplaination,
66
+ highlightTextWithLinks: () => highlightTextWithLinks,
66
67
  logger: () => logger
67
68
  });
68
69
  module.exports = __toCommonJS(src_exports);
@@ -2081,8 +2082,9 @@ var AvnuWrapper = class _AvnuWrapper {
2081
2082
  }
2082
2083
  };
2083
2084
 
2084
- // src/interfaces/common.ts
2085
+ // src/interfaces/common.tsx
2085
2086
  var import_starknet5 = require("starknet");
2087
+ var import_jsx_runtime = require("react/jsx-runtime");
2086
2088
  var RiskType = /* @__PURE__ */ ((RiskType2) => {
2087
2089
  RiskType2["MARKET_RISK"] = "Market Risk";
2088
2090
  RiskType2["IMPERMANENT_LOSS"] = "Impermanent Loss Risk";
@@ -2138,8 +2140,8 @@ var getRiskExplaination = (riskType) => {
2138
2140
  };
2139
2141
  var getRiskColor = (risk) => {
2140
2142
  const value = risk.value;
2141
- if (value === 0) return "green";
2142
- if (value < 2.5) return "yellow";
2143
+ if (value <= 1) return "light_green_2";
2144
+ if (value < 3) return "yellow";
2143
2145
  return "red";
2144
2146
  };
2145
2147
  var getNoRiskTags = (risks) => {
@@ -2148,8 +2150,20 @@ var getNoRiskTags = (risks) => {
2148
2150
  (risk) => !risks.map((risk2) => risk2.type).includes(risk)
2149
2151
  );
2150
2152
  const mergedUnique = [.../* @__PURE__ */ new Set([...noRisks1, ...noRisks2])];
2151
- return mergedUnique.map((risk) => `No ${risk}`);
2153
+ return mergedUnique;
2152
2154
  };
2155
+ function highlightTextWithLinks(put, highlights) {
2156
+ const escapeRegExp = (text) => text.replace(/[-/\\^$*+?.()|[\]{}]/g, "\\$&");
2157
+ const pattern = new RegExp(
2158
+ `(${highlights.map((m) => escapeRegExp(m.highlight)).join("|")})`,
2159
+ "gi"
2160
+ );
2161
+ const parts = put.split(pattern);
2162
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_jsx_runtime.Fragment, { children: parts.map((part, i) => {
2163
+ const match = highlights.find((m) => m.highlight.toLowerCase() === part.toLowerCase());
2164
+ return match ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("a", { href: match.link, target: "_blank", style: { color: "var(--chakra-colors-white)", background: "var(--chakra-colors-highlight)" }, children: part }, i) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: part }, i);
2165
+ }) });
2166
+ }
2153
2167
 
2154
2168
  // src/interfaces/initializable.ts
2155
2169
  var Initializable = class {
@@ -9271,8 +9285,15 @@ var vesu_pools_default = {
9271
9285
  ]
9272
9286
  };
9273
9287
 
9288
+ // src/strategies/constants.ts
9289
+ var COMMON_CONTRACTS = [{
9290
+ address: ContractAddr.from("0x0636a3f51cc37f5729e4da4b1de6a8549a28f3c0d5bf3b17f150971e451ff9c2"),
9291
+ name: "Access Controller",
9292
+ sourceCodeUrl: "https://github.com/strkfarm/strkfarm-contracts/blob/main/src/components/accessControl.cairo"
9293
+ }];
9294
+
9274
9295
  // src/strategies/vesu-rebalance.tsx
9275
- var import_jsx_runtime = require("react/jsx-runtime");
9296
+ var import_jsx_runtime2 = require("react/jsx-runtime");
9276
9297
  var VesuRebalance = class _VesuRebalance extends BaseStrategy {
9277
9298
  // 10000 bps = 100%
9278
9299
  /**
@@ -9913,9 +9934,9 @@ var _protocol = {
9913
9934
  logo: "https://static-assets-8zct.onrender.com/integrations/vesu/logo.png"
9914
9935
  };
9915
9936
  var _riskFactor = [
9916
- { type: "Smart Contract Risk" /* SMART_CONTRACT_RISK */, value: 0.5, weight: 25 },
9917
- { type: "Counterparty Risk" /* COUNTERPARTY_RISK */, value: 1, weight: 50 },
9918
- { type: "Oracle Risk" /* ORACLE_RISK */, value: 0.5, weight: 25 }
9937
+ { type: "Smart Contract Risk" /* SMART_CONTRACT_RISK */, value: 0.5, weight: 25, reason: "Audited by CSC" },
9938
+ { type: "Counterparty Risk" /* COUNTERPARTY_RISK */, value: 1, weight: 50, reason: "Reasonable max LTV ratios and Curated by well-known risk managers like Re7" },
9939
+ { type: "Oracle Risk" /* ORACLE_RISK */, value: 0.5, weight: 25, reason: "Uses Pragma price feeds, Most reputable price feed on Starknet" }
9919
9940
  ];
9920
9941
  var AUDIT_URL = "https://assets.strkfarm.com/strkfarm/audit_report_vesu_and_ekubo_strats.pdf";
9921
9942
  var faqs = [
@@ -9953,9 +9974,9 @@ var faqs = [
9953
9974
  },
9954
9975
  {
9955
9976
  question: "Is the strategy audited?",
9956
- answer: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { children: [
9977
+ answer: /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { children: [
9957
9978
  "Yes, the strategy has been audited. You can review the audit report in our docs ",
9958
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("a", { href: "https://docs.strkfarm.com/p/strategies/vesu-fusion-rebalancing-vaults#technical-details", style: { textDecoration: "underline", marginLeft: "5px" }, children: "Here" }),
9979
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("a", { href: "https://docs.strkfarm.com/p/strategies/vesu-fusion-rebalancing-vaults#technical-details", style: { textDecoration: "underline", marginLeft: "5px" }, children: "Here" }),
9959
9980
  "."
9960
9981
  ] })
9961
9982
  }
@@ -9963,7 +9984,7 @@ var faqs = [
9963
9984
  var VesuRebalanceStrategies = [
9964
9985
  {
9965
9986
  name: "Vesu Fusion STRK",
9966
- description: _description.replace("{{TOKEN}}", "STRK"),
9987
+ description: _description,
9967
9988
  address: ContractAddr.from(
9968
9989
  "0x7fb5bcb8525954a60fde4e8fb8220477696ce7117ef264775a1770e23571929"
9969
9990
  ),
@@ -9983,7 +10004,9 @@ var VesuRebalanceStrategies = [
9983
10004
  additionalInfo: {
9984
10005
  feeBps: 1e3
9985
10006
  },
9986
- faqs
10007
+ faqs,
10008
+ contractDetails: [],
10009
+ investmentSteps: []
9987
10010
  },
9988
10011
  {
9989
10012
  name: "Vesu Fusion ETH",
@@ -10007,7 +10030,9 @@ var VesuRebalanceStrategies = [
10007
10030
  additionalInfo: {
10008
10031
  feeBps: 1e3
10009
10032
  },
10010
- faqs
10033
+ faqs,
10034
+ contractDetails: [],
10035
+ investmentSteps: []
10011
10036
  },
10012
10037
  {
10013
10038
  name: "Vesu Fusion USDC",
@@ -10031,7 +10056,9 @@ var VesuRebalanceStrategies = [
10031
10056
  additionalInfo: {
10032
10057
  feeBps: 1e3
10033
10058
  },
10034
- faqs
10059
+ faqs,
10060
+ contractDetails: [],
10061
+ investmentSteps: []
10035
10062
  },
10036
10063
  {
10037
10064
  name: "Vesu Fusion USDT",
@@ -10055,7 +10082,9 @@ var VesuRebalanceStrategies = [
10055
10082
  additionalInfo: {
10056
10083
  feeBps: 1e3
10057
10084
  },
10058
- faqs
10085
+ faqs,
10086
+ contractDetails: [],
10087
+ investmentSteps: []
10059
10088
  // }, {
10060
10089
  // name: 'Vesu Fusion WBTC',
10061
10090
  // description: _description.replace('{{TOKEN}}', 'WBTC'),
@@ -10074,6 +10103,32 @@ var VesuRebalanceStrategies = [
10074
10103
  // },
10075
10104
  }
10076
10105
  ];
10106
+ VesuRebalanceStrategies.forEach((s) => {
10107
+ s.contractDetails = [
10108
+ {
10109
+ address: s.address,
10110
+ name: "Vault",
10111
+ sourceCodeUrl: "https://github.com/strkfarm/strkfarm-contracts/tree/main/src/strategies/vesu_rebalance"
10112
+ },
10113
+ ...COMMON_CONTRACTS
10114
+ ];
10115
+ s.docs = "https://docs.strkfarm.com/p/strategies/vesu-fusion-rebalancing-vaults";
10116
+ s.description = highlightTextWithLinks(
10117
+ _description.replace("{{TOKEN}}", s.depositTokens[0].symbol),
10118
+ [{
10119
+ highlight: "Vesu pools",
10120
+ link: "https://vesu.xyz/pools"
10121
+ }, {
10122
+ highlight: "Defi spring STRK Rewards",
10123
+ link: "https://defispring.starknet.io/"
10124
+ }]
10125
+ );
10126
+ s.investmentSteps = [
10127
+ "Split the amount and Supply to configured Vesu pools",
10128
+ "Monitor and Rebalance funds across multiple Vesu pools to maximize yield",
10129
+ "Harvest and supply Defi Spring STRK rewards every week (Auto-compound)"
10130
+ ];
10131
+ });
10077
10132
 
10078
10133
  // src/strategies/ekubo-cl-vault.tsx
10079
10134
  var import_starknet9 = require("starknet");
@@ -14978,7 +15033,7 @@ var erc4626_abi_default = [
14978
15033
  ];
14979
15034
 
14980
15035
  // src/strategies/ekubo-cl-vault.tsx
14981
- var import_jsx_runtime2 = require("react/jsx-runtime");
15036
+ var import_jsx_runtime3 = require("react/jsx-runtime");
14982
15037
  var EkuboCLVault = class _EkuboCLVault extends BaseStrategy {
14983
15038
  /**
14984
15039
  * Creates a new VesuRebalance strategy instance.
@@ -15388,17 +15443,13 @@ var EkuboCLVault = class _EkuboCLVault extends BaseStrategy {
15388
15443
  const token0Info = await Global.getTokenInfoFromAddr(poolKey.token0);
15389
15444
  const token1Info = await Global.getTokenInfoFromAddr(poolKey.token1);
15390
15445
  const price = sqrtRatio * sqrtRatio * 10 ** token0Info.decimals / 10 ** token1Info.decimals;
15391
- const tick = _EkuboCLVault.priceToTick(
15392
- price,
15393
- true,
15394
- Number(poolKey.tick_spacing)
15395
- );
15446
+ const tick = priceInfo.tick;
15396
15447
  console.log(
15397
15448
  `EkuboCLVault: getCurrentPrice: blockIdentifier: ${blockIdentifier}, price: ${price}, tick: ${tick.mag}, ${tick.sign}`
15398
15449
  );
15399
15450
  return {
15400
15451
  price,
15401
- tick: tick.mag * (tick.sign == 0 ? 1 : -1),
15452
+ tick: Number(tick.mag) * (tick.sign ? -1 : 1),
15402
15453
  sqrtRatio: priceInfo.sqrt_ratio.toString()
15403
15454
  };
15404
15455
  }
@@ -16045,14 +16096,15 @@ var EkuboCLVault = class _EkuboCLVault extends BaseStrategy {
16045
16096
  return [baseFlow, rebalanceFlow];
16046
16097
  }
16047
16098
  };
16048
- var _description2 = "Deploys your {{POOL_NAME}} into an Ekubo liquidity pool, automatically rebalancing positions around the current price to optimize yield and reduce the need for manual adjustments. Trading fees and DeFi Spring rewards are automatically compounded back into the strategy. In return, you receive an ERC-20 token representing your share of the strategy. The APY is calculated based on 7-day historical performance.";
16099
+ var _description2 = "Deploys your {{POOL_NAME}} into an Ekubo liquidity pool, automatically rebalancing positions around the current price to optimize yield and reduce the need for manual adjustments. Trading fees and DeFi Spring rewards are automatically compounded back into the strategy. In return, you receive an ERC-20 token representing your share of the strategy";
16049
16100
  var _protocol2 = {
16050
16101
  name: "Ekubo",
16051
16102
  logo: "https://app.ekubo.org/favicon.ico"
16052
16103
  };
16053
16104
  var _riskFactor2 = [
16054
- { type: "Smart Contract Risk" /* SMART_CONTRACT_RISK */, value: 0.5, weight: 25 },
16055
- { type: "Impermanent Loss Risk" /* IMPERMANENT_LOSS */, value: 1, weight: 75 }
16105
+ { type: "Smart Contract Risk" /* SMART_CONTRACT_RISK */, value: 0.5, weight: 34, reason: "Audited smart contracts" },
16106
+ { type: "Impermanent Loss Risk" /* IMPERMANENT_LOSS */, value: 0.75, weight: 33, reason: "Low risk due to co-related assets" },
16107
+ { type: "Market Risk" /* MARKET_RISK */, value: 0.75, weight: 33, reason: "Low risk due to co-related assets" }
16056
16108
  ];
16057
16109
  var _riskFactorStable = [
16058
16110
  { type: "Smart Contract Risk" /* SMART_CONTRACT_RISK */, value: 0.5, weight: 25 }
@@ -16073,10 +16125,10 @@ var faqs2 = [
16073
16125
  },
16074
16126
  {
16075
16127
  question: "Is the strategy audited?",
16076
- answer: /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { children: [
16128
+ answer: /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { children: [
16077
16129
  "Yes, the strategy has been audited. You can review the audit report in our docs",
16078
16130
  " ",
16079
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
16131
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
16080
16132
  "a",
16081
16133
  {
16082
16134
  href: "https://docs.strkfarm.com/p/ekubo-cl-vaults#technical-details",
@@ -16090,23 +16142,7 @@ var faqs2 = [
16090
16142
  ];
16091
16143
  var xSTRKSTRK = {
16092
16144
  name: "Ekubo xSTRK/STRK",
16093
- description: /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { children: [
16094
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("p", { children: _description2.replace("{{POOL_NAME}}", "xSTRK/STRK") }),
16095
- /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
16096
- "ul",
16097
- {
16098
- style: {
16099
- marginLeft: "20px",
16100
- listStyle: "circle",
16101
- fontSize: "12px"
16102
- },
16103
- children: [
16104
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("li", { style: { marginTop: "10px" }, children: "During withdrawal, you may receive either or both tokens depending on market conditions and prevailing prices." }),
16105
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("li", { style: { marginTop: "10px" }, children: "Sometimes you might see a negative APY \u2014 this is usually not a big deal. It happens when xSTRK's price drops on DEXes, but things typically bounce back within a few days or a week." })
16106
- ]
16107
- }
16108
- )
16109
- ] }),
16145
+ description: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_jsx_runtime3.Fragment, {}),
16110
16146
  address: ContractAddr.from(
16111
16147
  "0x01f083b98674bc21effee29ef443a00c7b9a500fd92cf30341a3da12c73f2324"
16112
16148
  ),
@@ -16152,48 +16188,25 @@ var xSTRKSTRK = {
16152
16188
  multiplier: 1,
16153
16189
  logo: "https://endur.fi/favicon.ico",
16154
16190
  toolTip: "This strategy holds xSTRK and STRK tokens. Earn 1x Endur points on your xSTRK portion of Liquidity. STRK portion will earn Endur's DEX Bonus points. Points can be found on endur.fi."
16155
- }]
16191
+ }],
16192
+ contractDetails: [],
16193
+ investmentSteps: []
16156
16194
  };
16157
16195
  var EkuboCLVaultStrategies = [
16158
16196
  xSTRKSTRK,
16159
16197
  {
16198
+ ...xSTRKSTRK,
16160
16199
  name: "Ekubo USDC/USDT",
16161
- description: /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { children: [
16162
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("p", { children: _description2.replace("{{POOL_NAME}}", "USDC/USDT") }),
16163
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
16164
- "ul",
16165
- {
16166
- style: {
16167
- marginLeft: "20px",
16168
- listStyle: "circle",
16169
- fontSize: "12px"
16170
- },
16171
- children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("li", { style: { marginTop: "10px" }, children: "During withdrawal, you may receive either or both tokens depending on market conditions and prevailing prices." })
16172
- }
16173
- )
16174
- ] }),
16200
+ description: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_jsx_runtime3.Fragment, {}),
16175
16201
  address: ContractAddr.from(
16176
16202
  "0xd647ed735f0db52f2a5502b6e06ed21dc4284a43a36af4b60d3c80fbc56c91"
16177
16203
  ),
16178
16204
  launchBlock: 1385576,
16179
- type: "Other",
16180
16205
  // must be same order as poolKey token0 and token1
16181
16206
  depositTokens: [
16182
16207
  Global.getDefaultTokens().find((t) => t.symbol === "USDC"),
16183
16208
  Global.getDefaultTokens().find((t) => t.symbol === "USDT")
16184
16209
  ],
16185
- protocols: [_protocol2],
16186
- auditUrl: AUDIT_URL2,
16187
- maxTVL: Web3Number.fromWei("0", 6),
16188
- risk: {
16189
- riskFactor: _riskFactorStable,
16190
- netRisk: _riskFactorStable.reduce(
16191
- (acc, curr) => acc + curr.value * curr.weight,
16192
- 0
16193
- ) / _riskFactorStable.reduce((acc, curr) => acc + curr.weight, 0),
16194
- notARisks: getNoRiskTags(_riskFactorStable)
16195
- },
16196
- apyMethodology: "APY based on 7-day historical performance, including fees and rewards.",
16197
16210
  additionalInfo: {
16198
16211
  newBounds: {
16199
16212
  lower: -1,
@@ -16206,51 +16219,71 @@ var EkuboCLVaultStrategies = [
16206
16219
  minWaitHours: 6,
16207
16220
  direction: "any"
16208
16221
  }
16209
- },
16210
- faqs: [...faqs2]
16222
+ }
16223
+ },
16224
+ {
16225
+ ...xSTRKSTRK,
16226
+ name: "Ekubo STRK/USDC",
16227
+ description: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_jsx_runtime3.Fragment, {}),
16228
+ address: ContractAddr.from(
16229
+ "0xb7bd37121041261446d8eedec618955a4490641034942da688e8cbddea7b23"
16230
+ ),
16231
+ launchBlock: 1492136,
16232
+ // must be same order as poolKey token0 and token1
16233
+ depositTokens: [
16234
+ Global.getDefaultTokens().find((t) => t.symbol === "STRK"),
16235
+ Global.getDefaultTokens().find((t) => t.symbol === "USDC")
16236
+ ],
16237
+ maxTVL: Web3Number.fromWei("0", 6),
16238
+ additionalInfo: {
16239
+ newBounds: "Managed by Re7",
16240
+ feeBps: 1e3,
16241
+ rebalanceConditions: {
16242
+ customShouldRebalance: async (currentPrice) => true,
16243
+ minWaitHours: 6,
16244
+ direction: "any"
16245
+ }
16246
+ }
16211
16247
  }
16212
- // {
16213
- // ...xSTRKSTRK,
16214
- // name: "Ekubo STRK/USDC",
16215
- // description: (
16216
- // <div>
16217
- // <p>{_description.replace("{{POOL_NAME}}", "STRK/USDC")}</p>
16218
- // <ul
16219
- // style={{
16220
- // marginLeft: "20px",
16221
- // listStyle: "circle",
16222
- // fontSize: "12px",
16223
- // }}
16224
- // >
16225
- // <li style={{ marginTop: "10px" }}>
16226
- // During withdrawal, you may receive either or both tokens depending
16227
- // on market conditions and prevailing prices.
16228
- // </li>
16229
- // </ul>
16230
- // </div>
16231
- // ),
16232
- // address: ContractAddr.from(
16233
- // "0xb7bd37121041261446d8eedec618955a4490641034942da688e8cbddea7b23"
16234
- // ),
16235
- // launchBlock: 1492136,
16236
- // // must be same order as poolKey token0 and token1
16237
- // depositTokens: [
16238
- // Global.getDefaultTokens().find((t) => t.symbol === "STRK")!,
16239
- // Global.getDefaultTokens().find((t) => t.symbol === "USDC")!,
16240
- // ],
16241
- // maxTVL: Web3Number.fromWei("0", 6),
16242
- // additionalInfo: {
16243
- // newBounds: "Managed by Re7",
16244
- // feeBps: 1000,
16245
- // rebalanceConditions: {
16246
- // customShouldRebalance: async (currentPrice: number) =>
16247
- // true,
16248
- // minWaitHours: 6,
16249
- // direction: "any",
16250
- // },
16251
- // },
16252
- // },
16253
16248
  ];
16249
+ EkuboCLVaultStrategies.forEach((s) => {
16250
+ s.contractDetails = [
16251
+ {
16252
+ address: s.address,
16253
+ name: "Vault",
16254
+ sourceCodeUrl: "https://github.com/strkfarm/strkfarm-contracts/tree/main/src/strategies/cl_vault"
16255
+ },
16256
+ ...COMMON_CONTRACTS
16257
+ ];
16258
+ s.docs = "https://docs.strkfarm.com/p/ekubo-cl-vaults";
16259
+ s.description = /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { children: [
16260
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("p", { children: highlightTextWithLinks(
16261
+ _description2.replace("{{POOL_NAME}}", s.name.split(" ")[1]),
16262
+ [{
16263
+ highlight: "Ekubo liquidity pool",
16264
+ link: "https://app.ekubo.org/positions"
16265
+ }, {
16266
+ highlight: "DeFi Spring rewards",
16267
+ link: "https://defispring.starknet.io/"
16268
+ }, {
16269
+ highlight: "ERC-20 token",
16270
+ link: "https://www.investopedia.com/news/what-erc20-and-what-does-it-mean-ethereum/"
16271
+ }]
16272
+ ) }),
16273
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { style: { padding: "16px 16px", background: "var(--chakra-colors-mycard_light)", marginTop: "16px", borderRadius: "16px" }, children: [
16274
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("h4", { style: { fontWeight: "bold" }, children: "Key points to note:" }),
16275
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { style: { display: "flex", flexDirection: "column", gap: "10px", color: "var(--chakra-colors-text_secondary)" }, children: [
16276
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("p", { style: {}, children: "1. During withdrawal, you may receive either or both tokens depending on market conditions and prevailing prices." }),
16277
+ s.name.includes("xSTRK/STRK") && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("p", { style: {}, children: "2. Sometimes you might see a negative APY \u2014 this is usually not a big deal. It happens when xSTRK's price drops on DEXes, but things typically bounce back within a few days or a week." })
16278
+ ] })
16279
+ ] })
16280
+ ] });
16281
+ s.investmentSteps = [
16282
+ "Supply tokens to Ekubo's pool",
16283
+ "Monitor and Rebalance position to optimize yield",
16284
+ "Harvest and supply Defi Spring STRK rewards every week (Auto-compound)"
16285
+ ];
16286
+ });
16254
16287
 
16255
16288
  // src/notifs/telegram.ts
16256
16289
  var import_node_telegram_bot_api = __toESM(require("node-telegram-bot-api"));
@@ -16548,5 +16581,6 @@ var Store = class _Store {
16548
16581
  getNoRiskTags,
16549
16582
  getRiskColor,
16550
16583
  getRiskExplaination,
16584
+ highlightTextWithLinks,
16551
16585
  logger
16552
16586
  });