@upshiftfinance/sdk 0.0.0-stage → 0.2.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 (344) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +408 -2
  3. package/lib/abis/AddressResolver.d.ts +28 -0
  4. package/lib/abis/AddressResolver.js +23 -0
  5. package/lib/abis/ChainlinkV3.d.ts +87 -0
  6. package/lib/abis/ChainlinkV3.js +117 -0
  7. package/lib/abis/ERC20.d.ts +168 -0
  8. package/lib/abis/ERC20.js +226 -0
  9. package/lib/abis/ERC20_Bytes32.d.ts +139 -0
  10. package/lib/abis/ERC20_Bytes32.js +196 -0
  11. package/lib/abis/ERC4626.d.ts +364 -0
  12. package/lib/abis/ERC4626.js +507 -0
  13. package/lib/abis/ERC721.d.ts +231 -0
  14. package/lib/abis/ERC721.js +321 -0
  15. package/lib/abis/FeeOracle.d.ts +120 -0
  16. package/lib/abis/FeeOracle.js +162 -0
  17. package/lib/abis/LendingPool.d.ts +1393 -0
  18. package/lib/abis/LendingPool.js +1807 -0
  19. package/lib/abis/LendingPoolV2.d.ts +1413 -0
  20. package/lib/abis/LendingPoolV2.js +1833 -0
  21. package/lib/abis/LendingPoolV3.d.ts +1677 -0
  22. package/lib/abis/LendingPoolV3.js +1160 -0
  23. package/lib/abis/Loan.d.ts +837 -0
  24. package/lib/abis/Loan.js +1080 -0
  25. package/lib/abis/MultiAssetNativeDepositWrapper.d.ts +137 -0
  26. package/lib/abis/MultiAssetNativeDepositWrapper.js +125 -0
  27. package/lib/abis/Multicall3.d.ts +30 -0
  28. package/lib/abis/Multicall3.js +97 -0
  29. package/lib/abis/OFT.d.ts +116 -0
  30. package/lib/abis/OFT.js +85 -0
  31. package/lib/abis/PoolAdapter.d.ts +36 -0
  32. package/lib/abis/PoolAdapter.js +51 -0
  33. package/lib/abis/RewardDistributor.d.ts +267 -0
  34. package/lib/abis/RewardDistributor.js +352 -0
  35. package/lib/abis/RwaRedeemSubaccount.d.ts +747 -0
  36. package/lib/abis/RwaRedeemSubaccount.js +548 -0
  37. package/lib/abis/SmartAccount.d.ts +17 -0
  38. package/lib/abis/SmartAccount.js +19 -0
  39. package/lib/abis/SwapRouter.d.ts +953 -0
  40. package/lib/abis/SwapRouter.js +1228 -0
  41. package/lib/abis/TextResolver.d.ts +16 -0
  42. package/lib/abis/TextResolver.js +16 -0
  43. package/lib/abis/TokenizedVaultV2.d.ts +1364 -0
  44. package/lib/abis/TokenizedVaultV2.js +1041 -0
  45. package/lib/abis/TokenizedVaultV2DepositWithPermit.d.ts +1456 -0
  46. package/lib/abis/TokenizedVaultV2DepositWithPermit.js +1878 -0
  47. package/lib/abis/TokenizedVaultV2Receipt.d.ts +1568 -0
  48. package/lib/abis/TokenizedVaultV2Receipt.js +1061 -0
  49. package/lib/abis/TokenizedVaultV2SenderAllocationWhitelist.d.ts +454 -0
  50. package/lib/abis/TokenizedVaultV2SenderAllocationWhitelist.js +327 -0
  51. package/lib/abis/TokenizedVaultV2WhitelistedAllocation.d.ts +1466 -0
  52. package/lib/abis/TokenizedVaultV2WhitelistedAllocation.js +1092 -0
  53. package/lib/abis/TokenizedVaultV2WhitelistedAssets.d.ts +274 -0
  54. package/lib/abis/TokenizedVaultV2WhitelistedAssets.js +167 -0
  55. package/lib/abis/UniversalResolverResolve.d.ts +69 -0
  56. package/lib/abis/UniversalResolverResolve.js +35 -0
  57. package/lib/abis/UniversalSignatureValidator.d.ts +17 -0
  58. package/lib/abis/UniversalSignatureValidator.js +30 -0
  59. package/lib/abis/WrapperAdapter.d.ts +71 -0
  60. package/lib/abis/WrapperAdapter.js +77 -0
  61. package/lib/abis/index.d.ts +34 -0
  62. package/lib/abis/index.js +51 -0
  63. package/lib/adapters/evm/getters.d.ts +19 -0
  64. package/lib/adapters/evm/getters.js +249 -0
  65. package/lib/adapters/evm/index.d.ts +539 -0
  66. package/lib/adapters/evm/index.js +656 -0
  67. package/lib/adapters/evm/utils.d.ts +8 -0
  68. package/lib/adapters/evm/utils.js +51 -0
  69. package/lib/adapters/solana/confirm.d.ts +88 -0
  70. package/lib/adapters/solana/confirm.js +291 -0
  71. package/lib/adapters/solana/constants.d.ts +42 -0
  72. package/lib/adapters/solana/constants.js +59 -0
  73. package/lib/adapters/solana/getters.d.ts +42 -0
  74. package/lib/adapters/solana/getters.js +275 -0
  75. package/lib/adapters/solana/idl/vault-idl.d.ts +700 -0
  76. package/lib/adapters/solana/idl/vault-idl.js +2101 -0
  77. package/lib/adapters/solana/idl/withdrawal-queue-idl.d.ts +795 -0
  78. package/lib/adapters/solana/idl/withdrawal-queue-idl.js +1864 -0
  79. package/lib/adapters/solana/index.d.ts +372 -0
  80. package/lib/adapters/solana/index.js +459 -0
  81. package/lib/adapters/solana/pricing.d.ts +184 -0
  82. package/lib/adapters/solana/pricing.js +239 -0
  83. package/lib/adapters/solana/queue-hints.d.ts +29 -0
  84. package/lib/adapters/solana/queue-hints.js +59 -0
  85. package/lib/adapters/solana/queue.actions.d.ts +97 -0
  86. package/lib/adapters/solana/queue.actions.js +468 -0
  87. package/lib/adapters/solana/token-reads.d.ts +108 -0
  88. package/lib/adapters/solana/token-reads.js +145 -0
  89. package/lib/adapters/solana/types.d.ts +325 -0
  90. package/lib/adapters/solana/types.js +3 -0
  91. package/lib/adapters/solana/utils.d.ts +229 -0
  92. package/lib/adapters/solana/utils.js +773 -0
  93. package/lib/adapters/solana/vault.actions.d.ts +140 -0
  94. package/lib/adapters/solana/vault.actions.js +657 -0
  95. package/lib/adapters/solana/withdrawal-queue.d.ts +125 -0
  96. package/lib/adapters/solana/withdrawal-queue.js +301 -0
  97. package/lib/adapters/stellar/actions.d.ts +41 -0
  98. package/lib/adapters/stellar/actions.js +126 -0
  99. package/lib/adapters/stellar/constants.d.ts +43 -0
  100. package/lib/adapters/stellar/constants.js +53 -0
  101. package/lib/adapters/stellar/getters.d.ts +68 -0
  102. package/lib/adapters/stellar/getters.js +290 -0
  103. package/lib/adapters/stellar/index.d.ts +126 -0
  104. package/lib/adapters/stellar/index.js +187 -0
  105. package/lib/adapters/stellar/invocation.d.ts +55 -0
  106. package/lib/adapters/stellar/invocation.js +92 -0
  107. package/lib/adapters/stellar/soroban.d.ts +131 -0
  108. package/lib/adapters/stellar/soroban.js +617 -0
  109. package/lib/adapters/stellar/submit.d.ts +42 -0
  110. package/lib/adapters/stellar/submit.js +195 -0
  111. package/lib/adapters/stellar/types.d.ts +57 -0
  112. package/lib/adapters/stellar/types.js +6 -0
  113. package/lib/adapters/stellar/utils.d.ts +24 -0
  114. package/lib/adapters/stellar/utils.js +34 -0
  115. package/lib/adapters/sui/client.d.ts +83 -0
  116. package/lib/adapters/sui/client.js +216 -0
  117. package/lib/adapters/sui/constants.d.ts +33 -0
  118. package/lib/adapters/sui/constants.js +31 -0
  119. package/lib/adapters/sui/index.d.ts +57 -0
  120. package/lib/adapters/sui/index.js +100 -0
  121. package/lib/adapters/sui/targets.d.ts +171 -0
  122. package/lib/adapters/sui/targets.js +225 -0
  123. package/lib/adapters/sui/utils.d.ts +8 -0
  124. package/lib/adapters/sui/utils.js +17 -0
  125. package/lib/core/analytics/app-name.d.ts +27 -0
  126. package/lib/core/analytics/app-name.js +48 -0
  127. package/lib/core/analytics/chain-name.d.ts +9 -0
  128. package/lib/core/analytics/chain-name.js +34 -0
  129. package/lib/core/analytics/constants.d.ts +15 -0
  130. package/lib/core/analytics/constants.js +28 -0
  131. package/lib/core/analytics/env.d.ts +46 -0
  132. package/lib/core/analytics/env.js +147 -0
  133. package/lib/core/analytics/index.d.ts +39 -0
  134. package/lib/core/analytics/index.js +83 -0
  135. package/lib/core/analytics/instrumentation.d.ts +29 -0
  136. package/lib/core/analytics/instrumentation.js +292 -0
  137. package/lib/core/analytics/method-taxonomy.d.ts +19 -0
  138. package/lib/core/analytics/method-taxonomy.js +156 -0
  139. package/lib/core/analytics/metrics.d.ts +48 -0
  140. package/lib/core/analytics/metrics.js +142 -0
  141. package/lib/core/analytics/sanitize.d.ts +57 -0
  142. package/lib/core/analytics/sanitize.js +272 -0
  143. package/lib/core/analytics/sentry-runtime.d.ts +15 -0
  144. package/lib/core/analytics/sentry-runtime.js +131 -0
  145. package/lib/core/analytics/sentry.d.ts +100 -0
  146. package/lib/core/analytics/sentry.js +696 -0
  147. package/lib/core/analytics/types.d.ts +55 -0
  148. package/lib/core/analytics/types.js +3 -0
  149. package/lib/core/analytics/user-identity.d.ts +55 -0
  150. package/lib/core/analytics/user-identity.js +218 -0
  151. package/lib/core/analytics/version.d.ts +6 -0
  152. package/lib/core/analytics/version.js +10 -0
  153. package/lib/core/attribution.d.ts +159 -0
  154. package/lib/core/attribution.js +194 -0
  155. package/lib/core/auth/index.d.ts +1 -0
  156. package/lib/core/auth/index.js +18 -0
  157. package/lib/core/auth/verify.d.ts +2 -0
  158. package/lib/core/auth/verify.js +35 -0
  159. package/lib/core/base.class.d.ts +193 -0
  160. package/lib/core/base.class.js +163 -0
  161. package/lib/core/cache.d.ts +9 -0
  162. package/lib/core/cache.js +31 -0
  163. package/lib/core/constants/adapters.d.ts +103 -0
  164. package/lib/core/constants/adapters.js +180 -0
  165. package/lib/core/constants/core.d.ts +162 -0
  166. package/lib/core/constants/core.js +281 -0
  167. package/lib/core/constants/swap-router.d.ts +180 -0
  168. package/lib/core/constants/swap-router.js +203 -0
  169. package/lib/core/constants/vaults.d.ts +93 -0
  170. package/lib/core/constants/vaults.js +277 -0
  171. package/lib/core/constants/web3.d.ts +106 -0
  172. package/lib/core/constants/web3.js +251 -0
  173. package/lib/core/errors/index.d.ts +177 -0
  174. package/lib/core/errors/index.js +257 -0
  175. package/lib/core/fetcher.d.ts +237 -0
  176. package/lib/core/fetcher.js +1103 -0
  177. package/lib/core/helpers/adapters.d.ts +13 -0
  178. package/lib/core/helpers/adapters.js +39 -0
  179. package/lib/core/helpers/chain-address.d.ts +13 -0
  180. package/lib/core/helpers/chain-address.js +47 -0
  181. package/lib/core/helpers/chain-error.d.ts +207 -0
  182. package/lib/core/helpers/chain-error.js +697 -0
  183. package/lib/core/helpers/chain-support.d.ts +98 -0
  184. package/lib/core/helpers/chain-support.js +139 -0
  185. package/lib/core/helpers/concurrency.d.ts +51 -0
  186. package/lib/core/helpers/concurrency.js +79 -0
  187. package/lib/core/helpers/core.d.ts +92 -0
  188. package/lib/core/helpers/core.js +368 -0
  189. package/lib/core/helpers/explorer-link.d.ts +16 -0
  190. package/lib/core/helpers/explorer-link.js +26 -0
  191. package/lib/core/helpers/multicall.d.ts +68 -0
  192. package/lib/core/helpers/multicall.js +103 -0
  193. package/lib/core/helpers/revert-decode.d.ts +248 -0
  194. package/lib/core/helpers/revert-decode.js +515 -0
  195. package/lib/core/helpers/signer.d.ts +61 -0
  196. package/lib/core/helpers/signer.js +184 -0
  197. package/lib/core/helpers/swap-router.d.ts +269 -0
  198. package/lib/core/helpers/swap-router.js +542 -0
  199. package/lib/core/helpers/vault-version.d.ts +24 -0
  200. package/lib/core/helpers/vault-version.js +83 -0
  201. package/lib/core/helpers/vaults.d.ts +89 -0
  202. package/lib/core/helpers/vaults.js +241 -0
  203. package/lib/core/helpers/web3.d.ts +366 -0
  204. package/lib/core/helpers/web3.js +1034 -0
  205. package/lib/core/index.d.ts +23 -0
  206. package/lib/core/index.js +40 -0
  207. package/lib/core/logger/curator-alert.d.ts +217 -0
  208. package/lib/core/logger/curator-alert.js +276 -0
  209. package/lib/core/logger/index.d.ts +99 -0
  210. package/lib/core/logger/index.js +163 -0
  211. package/lib/core/logger/slack.d.ts +49 -0
  212. package/lib/core/logger/slack.js +111 -0
  213. package/lib/core/vault-metadata.d.ts +12 -0
  214. package/lib/core/vault-metadata.js +42 -0
  215. package/lib/core/version-check.d.ts +58 -0
  216. package/lib/core/version-check.js +182 -0
  217. package/lib/evm/index.d.ts +2 -0
  218. package/lib/evm/index.js +19 -0
  219. package/lib/evm/methods/crossChainVault.d.ts +132 -0
  220. package/lib/evm/methods/crossChainVault.js +857 -0
  221. package/lib/evm/methods/crossChainVaultRegistry.d.ts +92 -0
  222. package/lib/evm/methods/crossChainVaultRegistry.js +239 -0
  223. package/lib/evm/methods/index.d.ts +2 -0
  224. package/lib/evm/methods/index.js +19 -0
  225. package/lib/evm/types/crossChain.d.ts +363 -0
  226. package/lib/evm/types/crossChain.js +20 -0
  227. package/lib/evm/types/index.d.ts +1 -0
  228. package/lib/evm/types/index.js +18 -0
  229. package/lib/index.d.ts +30 -0
  230. package/lib/index.js +52 -0
  231. package/lib/main.d.ts +596 -0
  232. package/lib/main.js +681 -0
  233. package/lib/modules/api/fetcher.d.ts +108 -0
  234. package/lib/modules/api/fetcher.js +187 -0
  235. package/lib/modules/api/index.d.ts +1 -0
  236. package/lib/modules/api/index.js +6 -0
  237. package/lib/modules/api/main.d.ts +587 -0
  238. package/lib/modules/api/main.js +911 -0
  239. package/lib/modules/sub-accounts/fetcher.d.ts +53 -0
  240. package/lib/modules/sub-accounts/fetcher.js +96 -0
  241. package/lib/modules/sub-accounts/index.d.ts +2 -0
  242. package/lib/modules/sub-accounts/index.js +19 -0
  243. package/lib/modules/sub-accounts/main.d.ts +249 -0
  244. package/lib/modules/sub-accounts/main.js +211 -0
  245. package/lib/modules/sub-accounts/utils.d.ts +106 -0
  246. package/lib/modules/sub-accounts/utils.js +112 -0
  247. package/lib/modules/vaults/adapter.helpers.d.ts +84 -0
  248. package/lib/modules/vaults/adapter.helpers.js +202 -0
  249. package/lib/modules/vaults/fetcher.d.ts +147 -0
  250. package/lib/modules/vaults/fetcher.js +357 -0
  251. package/lib/modules/vaults/getters.d.ts +1060 -0
  252. package/lib/modules/vaults/getters.js +4079 -0
  253. package/lib/modules/vaults/index.d.ts +20 -0
  254. package/lib/modules/vaults/index.js +44 -0
  255. package/lib/modules/vaults/main.d.ts +607 -0
  256. package/lib/modules/vaults/main.js +1687 -0
  257. package/lib/modules/vaults/prefetch.d.ts +65 -0
  258. package/lib/modules/vaults/prefetch.js +120 -0
  259. package/lib/modules/vaults/read.actions.d.ts +406 -0
  260. package/lib/modules/vaults/read.actions.js +891 -0
  261. package/lib/modules/vaults/types.d.ts +149 -0
  262. package/lib/modules/vaults/types.js +3 -0
  263. package/lib/modules/vaults/utils/call-data-decoder.d.ts +61 -0
  264. package/lib/modules/vaults/utils/call-data-decoder.js +194 -0
  265. package/lib/modules/vaults/utils/date-utils.d.ts +50 -0
  266. package/lib/modules/vaults/utils/date-utils.js +84 -0
  267. package/lib/modules/vaults/utils.d.ts +153 -0
  268. package/lib/modules/vaults/utils.js +818 -0
  269. package/lib/modules/vaults/write.actions.d.ts +812 -0
  270. package/lib/modules/vaults/write.actions.js +2377 -0
  271. package/lib/polyfills.d.ts +1 -0
  272. package/lib/polyfills.js +12 -0
  273. package/lib/sdk.d.ts +30173 -0
  274. package/lib/services/coingecko/fetcher.d.ts +15 -0
  275. package/lib/services/coingecko/fetcher.js +67 -0
  276. package/lib/services/coingecko/index.d.ts +2 -0
  277. package/lib/services/coingecko/index.js +19 -0
  278. package/lib/services/coingecko/utils.d.ts +1 -0
  279. package/lib/services/coingecko/utils.js +24 -0
  280. package/lib/services/debank/fetcher.d.ts +126 -0
  281. package/lib/services/debank/fetcher.js +47 -0
  282. package/lib/services/debank/index.d.ts +2 -0
  283. package/lib/services/debank/index.js +19 -0
  284. package/lib/services/debank/utils.d.ts +50 -0
  285. package/lib/services/debank/utils.js +325 -0
  286. package/lib/services/layerzero/deposits.d.ts +55 -0
  287. package/lib/services/layerzero/deposits.js +174 -0
  288. package/lib/services/layerzero/redeems.d.ts +20 -0
  289. package/lib/services/layerzero/redeems.js +92 -0
  290. package/lib/services/layerzero/utils.d.ts +9 -0
  291. package/lib/services/layerzero/utils.js +22 -0
  292. package/lib/services/octavfi/fetcher.d.ts +33 -0
  293. package/lib/services/octavfi/fetcher.js +39 -0
  294. package/lib/services/octavfi/index.d.ts +3 -0
  295. package/lib/services/octavfi/index.js +20 -0
  296. package/lib/services/octavfi/types.d.ts +34 -0
  297. package/lib/services/octavfi/types.js +3 -0
  298. package/lib/services/octavfi/utils.d.ts +16 -0
  299. package/lib/services/octavfi/utils.js +244 -0
  300. package/lib/services/subgraph/fetcher.d.ts +2 -0
  301. package/lib/services/subgraph/fetcher.js +66 -0
  302. package/lib/services/subgraph/index.d.ts +2 -0
  303. package/lib/services/subgraph/index.js +19 -0
  304. package/lib/services/subgraph/schema.d.ts +48 -0
  305. package/lib/services/subgraph/schema.js +87 -0
  306. package/lib/services/subgraph/vaults.d.ts +83 -0
  307. package/lib/services/subgraph/vaults.js +1282 -0
  308. package/lib/services/swap-quotes/index.d.ts +105 -0
  309. package/lib/services/swap-quotes/index.js +77 -0
  310. package/lib/services/swap-quotes/paraswap.d.ts +51 -0
  311. package/lib/services/swap-quotes/paraswap.js +138 -0
  312. package/lib/services/untangled/fetcher.d.ts +40 -0
  313. package/lib/services/untangled/fetcher.js +110 -0
  314. package/lib/services/untangled/index.d.ts +3 -0
  315. package/lib/services/untangled/index.js +20 -0
  316. package/lib/services/untangled/types.d.ts +83 -0
  317. package/lib/services/untangled/types.js +10 -0
  318. package/lib/services/untangled/utils.d.ts +91 -0
  319. package/lib/services/untangled/utils.js +339 -0
  320. package/lib/types/api.d.ts +498 -0
  321. package/lib/types/api.js +3 -0
  322. package/lib/types/index.d.ts +12 -0
  323. package/lib/types/index.js +28 -0
  324. package/lib/types/points.d.ts +28 -0
  325. package/lib/types/points.js +3 -0
  326. package/lib/types/pools.d.ts +144 -0
  327. package/lib/types/pools.js +3 -0
  328. package/lib/types/staking.d.ts +28 -0
  329. package/lib/types/staking.js +3 -0
  330. package/lib/types/sub-accounts.d.ts +150 -0
  331. package/lib/types/sub-accounts.js +3 -0
  332. package/lib/types/subgraph.d.ts +84 -0
  333. package/lib/types/subgraph.js +3 -0
  334. package/lib/types/typed-contract.d.ts +102 -0
  335. package/lib/types/typed-contract.js +3 -0
  336. package/lib/types/user.d.ts +1 -0
  337. package/lib/types/user.js +3 -0
  338. package/lib/types/vaults.d.ts +886 -0
  339. package/lib/types/vaults.js +30 -0
  340. package/lib/types/web3.d.ts +100 -0
  341. package/lib/types/web3.js +14 -0
  342. package/lib/types/webserver.d.ts +730 -0
  343. package/lib/types/webserver.js +3 -0
  344. package/package.json +79 -3
@@ -0,0 +1,163 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.CURATOR_ALERTS_DISABLE_ENV_VAR = exports.areCuratorAlertsEnabled = exports.configureCuratorAlerts = exports.Logger = exports.Slack = void 0;
37
+ const sanitize_1 = require("../analytics/sanitize");
38
+ let logger = null;
39
+ let structuredLogger = null;
40
+ let sentrySink = null;
41
+ let isDev = false;
42
+ function setLogger(customLogger) {
43
+ logger = customLogger;
44
+ }
45
+ /** Plug in an `ILogger`. Independent of `setLogger`; pass `null` to clear. */
46
+ function setStructuredLogger(custom) {
47
+ structuredLogger = custom;
48
+ }
49
+ function getLogger() {
50
+ return logger;
51
+ }
52
+ function getStructuredLogger() {
53
+ return structuredLogger;
54
+ }
55
+ /**
56
+ * Wire (or clear, with `null`) the SDK's internal Sentry sink. Called by
57
+ * `initializeSentry` after a successful Sentry init, and reset by
58
+ * `resetAnalytics`. Not part of the integrator-facing API — applications wire
59
+ * their own logging through {@link setLogger} / {@link setStructuredLogger}.
60
+ *
61
+ * @internal
62
+ */
63
+ function setSentrySink(sink) {
64
+ sentrySink = sink;
65
+ }
66
+ function setDevMode(devMode) {
67
+ isDev = devMode;
68
+ }
69
+ function isDevMode() {
70
+ return isDev;
71
+ }
72
+ /** Internal logger: DEV mode → console; production → SDKLogger. Sanitized either way. */
73
+ const log = {
74
+ info: (tag, ...args) => {
75
+ const safeArgs = args.map((a) => (0, sanitize_1.sanitizeForLogging)(a));
76
+ if (isDev) {
77
+ console.log(`[${tag}]`, ...safeArgs);
78
+ }
79
+ structuredLogger?.info?.(tag, structuredContext(safeArgs));
80
+ },
81
+ warn: (tag, ...args) => {
82
+ const safeArgs = args.map((a) => (0, sanitize_1.sanitizeForLogging)(a));
83
+ if (isDev) {
84
+ console.warn(`[${tag}]`, ...safeArgs);
85
+ }
86
+ logger?.setTag('warning', tag);
87
+ structuredLogger?.warn?.(tag, structuredContext(safeArgs));
88
+ // Warnings ride along as breadcrumbs on the next captured event rather
89
+ // than becoming standalone issues — keeps Sentry volume bounded (see the
90
+ // severity policy on SDKSentrySink).
91
+ sentrySink?.addBreadcrumb({
92
+ category: 'sdk.logger',
93
+ level: 'warning',
94
+ message: tag,
95
+ data: structuredContext(safeArgs),
96
+ });
97
+ },
98
+ error: (tag, error, context) => {
99
+ const safeError = (0, sanitize_1.sanitizeError)(error);
100
+ const safeContext = context
101
+ ? (0, sanitize_1.sanitizeForLogging)(context)
102
+ : undefined;
103
+ if (isDev) {
104
+ console.error(`[${tag}]`, safeError);
105
+ }
106
+ logger?.captureException(safeError, { tag, ...safeContext });
107
+ structuredLogger?.error(tag, safeError, safeContext);
108
+ // The SDK's own bridge to Sentry: errors become issues. `safeError` /
109
+ // `safeContext` are already sanitized above, so the sink forwards as-is.
110
+ sentrySink?.captureException(safeError, { tag, ...safeContext });
111
+ },
112
+ };
113
+ /**
114
+ * Pino-friendly shape: if the first arg is a plain object, pass it through
115
+ * (with subsequent args as `extras`); otherwise wrap as `{ args }`.
116
+ */
117
+ function structuredContext(args) {
118
+ if (args.length === 0)
119
+ return undefined;
120
+ const [first, ...rest] = args;
121
+ if (first &&
122
+ typeof first === 'object' &&
123
+ !Array.isArray(first) &&
124
+ !(first instanceof Error)) {
125
+ return rest.length === 0
126
+ ? first
127
+ : { ...first, extras: rest };
128
+ }
129
+ return { args };
130
+ }
131
+ const Logger = {
132
+ setLogger,
133
+ setStructuredLogger,
134
+ setSentrySink,
135
+ getLogger,
136
+ getStructuredLogger,
137
+ setDevMode,
138
+ isDevMode,
139
+ log,
140
+ };
141
+ exports.Logger = Logger;
142
+ const slack = __importStar(require("./slack"));
143
+ exports.Slack = slack;
144
+ // Only the opt-out is public: code that drives the `Stellar` namespace directly
145
+ // never constructs an `UpshiftSDK`, so `configureCuratorAlerts` is its sole way
146
+ // to turn curator alerts off (and the only one that works in a browser, where
147
+ // the env var is unreadable). The emitter itself stays deep-import only — a
148
+ // partner has no reason to inject events into the relay.
149
+ //
150
+ // Safe to re-export from this barrel at all because `curator-alert` imports only
151
+ // `types/`, `constants/` and leaf helpers under `core/analytics/` — never this
152
+ // file — so there is no cycle back through the logger. `madge --circular` in CI
153
+ // is the enforcement; this note is why it passes (CLAUDE.md §9).
154
+ //
155
+ // Both parameter types travel with the function: `ICuratorAlertsContext` is the
156
+ // second argument's type, so without it a consumer cannot type a wrapper around
157
+ // `configureCuratorAlerts` — and API Extractor flags it as a forgotten export
158
+ // (CLAUDE.md §6).
159
+ var curator_alert_1 = require("./curator-alert");
160
+ Object.defineProperty(exports, "configureCuratorAlerts", { enumerable: true, get: function () { return curator_alert_1.configureCuratorAlerts; } });
161
+ Object.defineProperty(exports, "areCuratorAlertsEnabled", { enumerable: true, get: function () { return curator_alert_1.areCuratorAlertsEnabled; } });
162
+ Object.defineProperty(exports, "CURATOR_ALERTS_DISABLE_ENV_VAR", { enumerable: true, get: function () { return curator_alert_1.CURATOR_ALERTS_DISABLE_ENV_VAR; } });
163
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Environment variable holding the Slack incoming-webhook to post SDK alerts
3
+ * to. Accepts either the full `https://hooks.slack.com/services/T…/B…/x…` URL
4
+ * or the bare `T…/B…/x…` path suffix.
5
+ */
6
+ export declare const SLACK_WEBHOOK_ENV_VAR = "UPSHIFT_SDK_SLACK_WEBHOOK_URL";
7
+ /**
8
+ * Resolve the Slack webhook to alert through.
9
+ *
10
+ * Why this replaced a hardcoded constant: a webhook path is a **bearer
11
+ * credential** — anyone holding it can post to the channel. The previous
12
+ * default embedded Upshift's own webhook as a string literal, which shipped in
13
+ * every published tarball and in the generated `.d.ts`, handing every consumer
14
+ * of the SDK write access to an internal Slack channel (CLAUDE.md §5: no
15
+ * secrets in client-reachable code). It also meant a consumer's alerts went to
16
+ * Upshift's channel rather than their own, with no way to redirect them.
17
+ *
18
+ * Resolution order:
19
+ * 1. `explicit` — passed by the caller, wins outright;
20
+ * 2. `UPSHIFT_SDK_SLACK_WEBHOOK_URL` in the environment;
21
+ * 3. none — alerting is disabled and the call becomes a no-op.
22
+ *
23
+ * Reading the env var per call (rather than once at module load) means a
24
+ * consumer configuring it after import still gets alerts, and a test can set
25
+ * and unset it without re-importing the module.
26
+ *
27
+ * @param explicit - Caller-supplied webhook, full URL or bare path suffix.
28
+ * @returns The bare `T…/B…/x…` path suffix, or `''` when unconfigured.
29
+ */
30
+ export declare function resolveSlackWebhookUrl(explicit?: string): string;
31
+ /**
32
+ * @deprecated Was a hardcoded webhook credential baked into the published
33
+ * bundle. It now resolves from {@link SLACK_WEBHOOK_ENV_VAR} and is `''` when
34
+ * unset. Call {@link resolveSlackWebhookUrl} instead — this export exists only
35
+ * so existing imports keep compiling, and is removed in the next major.
36
+ */
37
+ export declare const DEFAULT_SLACK_WEBHOOK_URL = "";
38
+ declare function error(options: {
39
+ title: string;
40
+ error: string;
41
+ poolAddress: string;
42
+ chainId: number;
43
+ slackWebookUrl: string;
44
+ address?: string;
45
+ }): void;
46
+ export declare const SLACK: {
47
+ error: typeof error;
48
+ };
49
+ export {};
@@ -0,0 +1,111 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SLACK = exports.DEFAULT_SLACK_WEBHOOK_URL = exports.SLACK_WEBHOOK_ENV_VAR = void 0;
4
+ exports.resolveSlackWebhookUrl = resolveSlackWebhookUrl;
5
+ const core_1 = require("../helpers/core");
6
+ const explorer_link_1 = require("../helpers/explorer-link");
7
+ const sanitize_1 = require("../analytics/sanitize");
8
+ const env_1 = require("../analytics/env");
9
+ /**
10
+ * Environment variable holding the Slack incoming-webhook to post SDK alerts
11
+ * to. Accepts either the full `https://hooks.slack.com/services/T…/B…/x…` URL
12
+ * or the bare `T…/B…/x…` path suffix.
13
+ */
14
+ exports.SLACK_WEBHOOK_ENV_VAR = 'UPSHIFT_SDK_SLACK_WEBHOOK_URL';
15
+ /** `https://hooks.slack.com/services/` — stripped so both forms are accepted. */
16
+ const SLACK_WEBHOOK_PREFIX = 'https://hooks.slack.com/services/';
17
+ /**
18
+ * Resolve the Slack webhook to alert through.
19
+ *
20
+ * Why this replaced a hardcoded constant: a webhook path is a **bearer
21
+ * credential** — anyone holding it can post to the channel. The previous
22
+ * default embedded Upshift's own webhook as a string literal, which shipped in
23
+ * every published tarball and in the generated `.d.ts`, handing every consumer
24
+ * of the SDK write access to an internal Slack channel (CLAUDE.md §5: no
25
+ * secrets in client-reachable code). It also meant a consumer's alerts went to
26
+ * Upshift's channel rather than their own, with no way to redirect them.
27
+ *
28
+ * Resolution order:
29
+ * 1. `explicit` — passed by the caller, wins outright;
30
+ * 2. `UPSHIFT_SDK_SLACK_WEBHOOK_URL` in the environment;
31
+ * 3. none — alerting is disabled and the call becomes a no-op.
32
+ *
33
+ * Reading the env var per call (rather than once at module load) means a
34
+ * consumer configuring it after import still gets alerts, and a test can set
35
+ * and unset it without re-importing the module.
36
+ *
37
+ * @param explicit - Caller-supplied webhook, full URL or bare path suffix.
38
+ * @returns The bare `T…/B…/x…` path suffix, or `''` when unconfigured.
39
+ */
40
+ function resolveSlackWebhookUrl(explicit) {
41
+ const raw = explicit?.trim() || (0, env_1.readEnv)(exports.SLACK_WEBHOOK_ENV_VAR)?.trim() || '';
42
+ return raw.startsWith(SLACK_WEBHOOK_PREFIX)
43
+ ? raw.slice(SLACK_WEBHOOK_PREFIX.length)
44
+ : raw;
45
+ }
46
+ /**
47
+ * @deprecated Was a hardcoded webhook credential baked into the published
48
+ * bundle. It now resolves from {@link SLACK_WEBHOOK_ENV_VAR} and is `''` when
49
+ * unset. Call {@link resolveSlackWebhookUrl} instead — this export exists only
50
+ * so existing imports keep compiling, and is removed in the next major.
51
+ */
52
+ exports.DEFAULT_SLACK_WEBHOOK_URL = '';
53
+ /** One-shot guard so an unconfigured webhook warns once, not per alert. */
54
+ let warnedUnconfigured = false;
55
+ function error(options) {
56
+ const { title, error, poolAddress, chainId, slackWebookUrl, address } = options;
57
+ // Falls back to the environment so a caller that passes nothing still
58
+ // alerts, provided the deployment configured a webhook of its own.
59
+ const webhookPath = resolveSlackWebhookUrl(slackWebookUrl);
60
+ if (!webhookPath) {
61
+ // Silence here used to be the hardcoded-default's job. Say it once, so a
62
+ // deployment that expected alerts learns they are off instead of watching
63
+ // an empty channel. Never log the webhook value itself.
64
+ if (!warnedUnconfigured) {
65
+ warnedUnconfigured = true;
66
+ console.warn(`#Slack.error: no webhook configured — set ${exports.SLACK_WEBHOOK_ENV_VAR} to enable Slack alerts. Alerts are disabled.`);
67
+ }
68
+ return;
69
+ }
70
+ if (!error) {
71
+ console.error('#Slack.error: error is undefined');
72
+ return;
73
+ }
74
+ if (!poolAddress) {
75
+ console.error('#Slack.error: poolAddress is undefined');
76
+ return;
77
+ }
78
+ if (!title) {
79
+ console.error('#Slack.error: type is undefined');
80
+ return;
81
+ }
82
+ if (!address) {
83
+ console.error('#Slack.error: address is undefined');
84
+ return;
85
+ }
86
+ if (!chainId) {
87
+ console.error('#Slack.error: chainId is undefined');
88
+ return;
89
+ }
90
+ (async () => {
91
+ const webhookUrl = `${SLACK_WEBHOOK_PREFIX}${webhookPath}`;
92
+ const safeError = (0, sanitize_1.sanitizeString)(String(error));
93
+ const safeTitle = (0, sanitize_1.sanitizeString)(String(title));
94
+ const data = {
95
+ text: `*Error: ${safeTitle}*\n${new Date().toUTCString()}\n\nPool: [${(0, core_1.truncate)(poolAddress)}](${(0, explorer_link_1.explorerLink)(poolAddress, chainId, 'address')})\n\n\nError: ${safeError}`,
96
+ };
97
+ const res = await fetch(webhookUrl, {
98
+ method: 'POST',
99
+ body: JSON.stringify(data),
100
+ signal: AbortSignal.timeout(5000),
101
+ });
102
+ if (res?.status === 200)
103
+ console.log('#Slack.error: successfully sent');
104
+ else
105
+ console.error('#Slack.error:', res.status, res.statusText);
106
+ })().catch((e) => console.error('#Slack.error:', (0, sanitize_1.sanitizeString)(String(e?.message ?? e))));
107
+ }
108
+ exports.SLACK = {
109
+ error,
110
+ };
111
+ //# sourceMappingURL=slack.js.map
@@ -0,0 +1,12 @@
1
+ import type { IVaultMetadata } from '../types';
2
+ /**
3
+ * Fetch vault metadata from the upshift API.
4
+ * Returns metadata including symbol, subgraph URL, and address for all vaults.
5
+ * @param options Request options including headers
6
+ * @returns Vault metadata object keyed by lowercase symbol
7
+ */
8
+ export declare function fetchVaultMetadata(opts?: {
9
+ options?: {
10
+ headers?: Record<string, string>;
11
+ };
12
+ }): Promise<IVaultMetadata>;
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.fetchVaultMetadata = fetchVaultMetadata;
4
+ const cache_1 = require("./cache");
5
+ const core_1 = require("./constants/core");
6
+ const logger_1 = require("./logger");
7
+ /**
8
+ * Fetch vault metadata from the upshift API.
9
+ * Returns metadata including symbol, subgraph URL, and address for all vaults.
10
+ * @param options Request options including headers
11
+ * @returns Vault metadata object keyed by lowercase symbol
12
+ */
13
+ async function fetchVaultMetadata(opts) {
14
+ const { options } = opts || {};
15
+ try {
16
+ const cacheKey = 'vaults_metadata';
17
+ if (cache_1.CACHE.has(cacheKey)) {
18
+ return cache_1.CACHE.get(cacheKey);
19
+ }
20
+ const response = await fetch(`${core_1.WEBSERVER_URL['upshift']}${core_1.WEBSERVER_ENDPOINTS.upshift.vaults.metadata}`, {
21
+ method: 'GET',
22
+ headers: {
23
+ 'content-type': 'application/json',
24
+ accept: 'application/json',
25
+ 'x-request-client': 'august-sdk',
26
+ ...options?.headers,
27
+ },
28
+ });
29
+ if (!response.ok) {
30
+ throw new Error(`Failed to fetch vault metadata: ${response.statusText}`);
31
+ }
32
+ const metadata = await response.json();
33
+ cache_1.CACHE.set(cacheKey, metadata, { ttl: 10 * 60 * 1000 });
34
+ return metadata;
35
+ }
36
+ catch (e) {
37
+ logger_1.Logger.log.error('getVaultMetadata', e);
38
+ const errorMessage = e instanceof Error ? e.message : String(e);
39
+ throw new Error(`#getVaultMetadata::${errorMessage}`);
40
+ }
41
+ }
42
+ //# sourceMappingURL=vault-metadata.js.map
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Best-effort version check that nudges integrators when a newer
3
+ * `@upshiftfinance/sdk` is available on npm.
4
+ *
5
+ * Design constraints (all kept narrow on purpose):
6
+ * - **No network call in production builds.** Most integrators ship the
7
+ * SDK to end users in the browser; surprise registry pings on user page
8
+ * loads are unacceptable. The check only fires when
9
+ * `NODE_ENV !== 'production'` (i.e. local dev / CI environments).
10
+ * - **Opt-out is supported in two places.** `UPSHIFT_SDK_DISABLE_VERSION_CHECK`
11
+ * env var (set in CI to silence noise) or `versionCheck: { enabled: false }`
12
+ * on the SDK constructor (programmatic opt-out, e.g. in your own libs
13
+ * that wrap the SDK).
14
+ * - **Fire-and-forget; never blocks construction.** The SDK constructor
15
+ * must return synchronously. We schedule the check on the microtask
16
+ * queue, abort after 5s, and swallow every error.
17
+ * - **Once per session.** A module-level guard prevents repeated registry
18
+ * hits when callers spin up multiple `UpshiftSDK` instances.
19
+ * - **No new dependency.** Semver comparison is a tiny hand-rolled helper
20
+ * rather than pulling in the `semver` package.
21
+ */
22
+ /**
23
+ * Compare two numeric-dotted version strings. Returns:
24
+ * - positive integer if `a > b`
25
+ * - negative integer if `a < b`
26
+ * - 0 if equal
27
+ *
28
+ * Pre-release suffixes (`-beta`, `-rc.1`) are stripped before comparison —
29
+ * we always treat any pre-release as equal to its base version. That keeps
30
+ * the comparison logic small and avoids false positives where an integrator
31
+ * on `4.27.4-beta.0` would otherwise be told to upgrade to the stable
32
+ * `4.27.3` they pre-released past.
33
+ */
34
+ export declare function compareSemver(a: string, b: string): number;
35
+ /**
36
+ * Configuration knob exposed on `IUpshiftBase.versionCheck`. Defaulting to
37
+ * enabled keeps the nudge in front of integrators who haven't read the docs;
38
+ * setting `enabled: false` is the explicit opt-out for libraries that wrap
39
+ * the SDK and want their own update strategy.
40
+ */
41
+ export interface IVersionCheckConfig {
42
+ /** Set to `false` to disable the registry check entirely. Default: `true`. */
43
+ enabled?: boolean;
44
+ }
45
+ /**
46
+ * Kick off a best-effort version check. Always returns synchronously.
47
+ *
48
+ * @param config - Optional config from `IUpshiftBase.versionCheck`
49
+ */
50
+ export declare function runVersionCheck(config?: IVersionCheckConfig): void;
51
+ /**
52
+ * Testing hook — resets the module-level guard so the check can run again
53
+ * in a fresh test case. Not part of the public API surface; kept here so
54
+ * unit tests don't have to monkey-patch internals.
55
+ *
56
+ * @internal
57
+ */
58
+ export declare function _resetVersionCheckForTests(): void;
@@ -0,0 +1,182 @@
1
+ "use strict";
2
+ /**
3
+ * Best-effort version check that nudges integrators when a newer
4
+ * `@upshiftfinance/sdk` is available on npm.
5
+ *
6
+ * Design constraints (all kept narrow on purpose):
7
+ * - **No network call in production builds.** Most integrators ship the
8
+ * SDK to end users in the browser; surprise registry pings on user page
9
+ * loads are unacceptable. The check only fires when
10
+ * `NODE_ENV !== 'production'` (i.e. local dev / CI environments).
11
+ * - **Opt-out is supported in two places.** `UPSHIFT_SDK_DISABLE_VERSION_CHECK`
12
+ * env var (set in CI to silence noise) or `versionCheck: { enabled: false }`
13
+ * on the SDK constructor (programmatic opt-out, e.g. in your own libs
14
+ * that wrap the SDK).
15
+ * - **Fire-and-forget; never blocks construction.** The SDK constructor
16
+ * must return synchronously. We schedule the check on the microtask
17
+ * queue, abort after 5s, and swallow every error.
18
+ * - **Once per session.** A module-level guard prevents repeated registry
19
+ * hits when callers spin up multiple `UpshiftSDK` instances.
20
+ * - **No new dependency.** Semver comparison is a tiny hand-rolled helper
21
+ * rather than pulling in the `semver` package.
22
+ */
23
+ Object.defineProperty(exports, "__esModule", { value: true });
24
+ exports.compareSemver = compareSemver;
25
+ exports.runVersionCheck = runVersionCheck;
26
+ exports._resetVersionCheckForTests = _resetVersionCheckForTests;
27
+ /** Module-level guard — flips to true after the first attempt. */
28
+ let hasRunCheck = false;
29
+ /** Public package name on npm — also the registry-API path component. */
30
+ const NPM_PACKAGE = '@upshiftfinance/sdk';
31
+ const REGISTRY_URL = `https://registry.npmjs.org/${NPM_PACKAGE}/latest`;
32
+ /** Timeout for the registry request. 5s is generous; faster failures stay silent. */
33
+ const REQUEST_TIMEOUT_MS = 5_000;
34
+ /**
35
+ * Read the current installed SDK version from the generated `version.ts`
36
+ * shim. Returns `null` when running from source (the file is gitignored and
37
+ * only emitted at publish time) — that's the signal to skip the check, since
38
+ * we have nothing meaningful to compare against.
39
+ */
40
+ function getInstalledVersion() {
41
+ try {
42
+ // The require path is resolved relative to the compiled .js location,
43
+ // so it picks up `core/analytics/version.js` when it exists.
44
+ const mod = require('./analytics/version');
45
+ const v = mod.SDK_VERSION;
46
+ if (!v || v === 'development')
47
+ return null;
48
+ return v;
49
+ }
50
+ catch {
51
+ return null;
52
+ }
53
+ }
54
+ /**
55
+ * Read an environment variable in a way that's safe in both Node and the
56
+ * browser. `process` is typically undefined in browser bundles; even when
57
+ * it's stubbed by a bundler, `process.env` may be a frozen object that
58
+ * throws on missing-key access in some setups — try/catch covers that too.
59
+ */
60
+ function readEnv(name) {
61
+ try {
62
+ if (typeof process !== 'undefined' && process.env) {
63
+ return process.env[name];
64
+ }
65
+ }
66
+ catch {
67
+ // Bundlers occasionally throw on `process.env` access. Treat as unset.
68
+ }
69
+ return undefined;
70
+ }
71
+ /**
72
+ * Compare two numeric-dotted version strings. Returns:
73
+ * - positive integer if `a > b`
74
+ * - negative integer if `a < b`
75
+ * - 0 if equal
76
+ *
77
+ * Pre-release suffixes (`-beta`, `-rc.1`) are stripped before comparison —
78
+ * we always treat any pre-release as equal to its base version. That keeps
79
+ * the comparison logic small and avoids false positives where an integrator
80
+ * on `4.27.4-beta.0` would otherwise be told to upgrade to the stable
81
+ * `4.27.3` they pre-released past.
82
+ */
83
+ function compareSemver(a, b) {
84
+ const stripPre = (v) => v.split('-')[0];
85
+ const parse = (v) => stripPre(v)
86
+ .split('.')
87
+ .map((part) => {
88
+ const n = Number.parseInt(part, 10);
89
+ return Number.isFinite(n) ? n : 0;
90
+ });
91
+ const aParts = parse(a);
92
+ const bParts = parse(b);
93
+ const len = Math.max(aParts.length, bParts.length);
94
+ for (let i = 0; i < len; i++) {
95
+ const av = aParts[i] ?? 0;
96
+ const bv = bParts[i] ?? 0;
97
+ if (av !== bv)
98
+ return av - bv;
99
+ }
100
+ return 0;
101
+ }
102
+ /**
103
+ * Kick off a best-effort version check. Always returns synchronously.
104
+ *
105
+ * @param config - Optional config from `IUpshiftBase.versionCheck`
106
+ */
107
+ function runVersionCheck(config) {
108
+ if (hasRunCheck)
109
+ return;
110
+ hasRunCheck = true;
111
+ if (config?.enabled === false)
112
+ return;
113
+ // Skip in production builds. We treat *anything* other than "production"
114
+ // as eligible (development, test, staging) — those are the envs where a
115
+ // console warning is helpful, not annoying.
116
+ if (readEnv('NODE_ENV') === 'production')
117
+ return;
118
+ // Explicit env opt-out (useful in CI where the console output is noise).
119
+ if (readEnv('UPSHIFT_SDK_DISABLE_VERSION_CHECK'))
120
+ return;
121
+ const installed = getInstalledVersion();
122
+ // No version file = local development from source. Nothing to compare.
123
+ if (!installed)
124
+ return;
125
+ // `fetch` is guaranteed in Node 18+ and all modern browsers, but the SDK
126
+ // supports older Node deployments via the React/Telegram bot integration.
127
+ // Gracefully no-op when missing.
128
+ if (typeof fetch !== 'function')
129
+ return;
130
+ const controller = typeof AbortController !== 'undefined' ? new AbortController() : null;
131
+ const timeoutId = controller
132
+ ? setTimeout(() => controller.abort(), REQUEST_TIMEOUT_MS)
133
+ : null;
134
+ // Run on the microtask queue so construction stays synchronous. The void
135
+ // expression discards the promise — we explicitly don't await it.
136
+ void (async () => {
137
+ try {
138
+ const res = await fetch(REGISTRY_URL, {
139
+ signal: controller?.signal,
140
+ headers: { Accept: 'application/json' },
141
+ });
142
+ if (!res.ok)
143
+ return;
144
+ const body = (await res.json());
145
+ const latest = typeof body.version === 'string' ? body.version : null;
146
+ if (!latest)
147
+ return;
148
+ if (compareSemver(latest, installed) > 0) {
149
+ // Use console.warn so the message is visible at the default log
150
+ // level in most setups, but distinguishable from real errors. This is
151
+ // an integrator-facing nudge — Logger.log.warn would make it a
152
+ // prod-silent breadcrumb, defeating the purpose.
153
+ // biome-ignore lint/suspicious/noConsole: integrator-facing version nudge must surface in every environment; Logger.log.warn would make it a prod-silent breadcrumb.
154
+ console.warn([
155
+ `[${NPM_PACKAGE}] A newer version is available: ${installed} → ${latest}.`,
156
+ `Run \`pnpm up ${NPM_PACKAGE}\` (or your package manager's equivalent) to update.`,
157
+ `Silence this check with \`UPSHIFT_SDK_DISABLE_VERSION_CHECK=1\` or \`new UpshiftSDK({ versionCheck: { enabled: false }, ... })\`.`,
158
+ ].join('\n'));
159
+ }
160
+ }
161
+ catch {
162
+ // Network failure, aborted request, malformed JSON, frozen
163
+ // `console.warn`, etc. — every failure path stays silent. The check
164
+ // is purely an integrator-experience hint; it must never surface.
165
+ }
166
+ finally {
167
+ if (timeoutId)
168
+ clearTimeout(timeoutId);
169
+ }
170
+ })();
171
+ }
172
+ /**
173
+ * Testing hook — resets the module-level guard so the check can run again
174
+ * in a fresh test case. Not part of the public API surface; kept here so
175
+ * unit tests don't have to monkey-patch internals.
176
+ *
177
+ * @internal
178
+ */
179
+ function _resetVersionCheckForTests() {
180
+ hasRunCheck = false;
181
+ }
182
+ //# sourceMappingURL=version-check.js.map
@@ -0,0 +1,2 @@
1
+ export * from './types';
2
+ export * from './methods';
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./types"), exports);
18
+ __exportStar(require("./methods"), exports);
19
+ //# sourceMappingURL=index.js.map