@glowlabs-org/utils 0.2.142 → 0.2.145

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.
@@ -508,6 +508,70 @@ async function waitForEthersTransactionWithRetry(signer, txHash, options = {}) {
508
508
  throw new Error(`Transaction failed after ${maxRetries} attempts: ${parseEthersError(lastError)}`);
509
509
  }
510
510
 
511
+ let configuredClient = null;
512
+ let isEnabled = true;
513
+ let defaultExtra = {};
514
+ function getSentry() {
515
+ const client = configuredClient ??
516
+ globalThis?.Sentry;
517
+ if (!client || typeof client.captureException !== "function")
518
+ return null;
519
+ return client;
520
+ }
521
+ function configureSentry(config) {
522
+ if (config.enabled !== undefined)
523
+ isEnabled = !!config.enabled;
524
+ if (config.client !== undefined)
525
+ configuredClient = config.client;
526
+ if (config.defaultContext)
527
+ defaultExtra = { ...config.defaultContext };
528
+ }
529
+ function shouldSkipSentry(error) {
530
+ try {
531
+ const possible = error;
532
+ const code = possible?.code || possible?.cause?.code;
533
+ const name = possible?.name || possible?.cause?.name;
534
+ const message = String(possible?.message || possible?.cause?.message || "");
535
+ // User rejected wallet request (ethers/viem/common providers)
536
+ if (code === "ACTION_REJECTED")
537
+ return true;
538
+ if (name === "UserRejectedRequestError")
539
+ return true;
540
+ if (/user rejected/i.test(message))
541
+ return true;
542
+ // Terminal waitForViemTransactionWithRetry error (retries exhausted)
543
+ if (/Transaction failed after\s+\d+\s+attempts:/i.test(message)) {
544
+ return true;
545
+ }
546
+ return false;
547
+ }
548
+ catch {
549
+ return false;
550
+ }
551
+ }
552
+ function sentryAddBreadcrumb(breadcrumb) {
553
+ try {
554
+ if (!isEnabled)
555
+ return;
556
+ getSentry()?.addBreadcrumb?.(breadcrumb);
557
+ }
558
+ catch { }
559
+ }
560
+ function sentryCaptureException(error, extra) {
561
+ try {
562
+ if (!isEnabled)
563
+ return;
564
+ if (shouldSkipSentry(error))
565
+ return;
566
+ const client = getSentry();
567
+ if (!client)
568
+ return;
569
+ const merged = extra ? { ...defaultExtra, ...extra } : defaultExtra;
570
+ client.captureException(error, Object.keys(merged).length ? { extra: merged } : undefined);
571
+ }
572
+ catch { }
573
+ }
574
+
511
575
  exports.ForwarderError = void 0;
512
576
  (function (ForwarderError) {
513
577
  ForwarderError["CONTRACT_NOT_AVAILABLE"] = "Contract not available";
@@ -686,6 +750,22 @@ function useForwarder(signer, CHAIN_ID) {
686
750
  const tokenContract = getTokenContract(currency);
687
751
  if (!tokenContract)
688
752
  throw new Error(exports.ForwarderError.CONTRACT_NOT_AVAILABLE);
753
+ sentryAddBreadcrumb({
754
+ category: "forwarder",
755
+ message: "forwardTokens.start",
756
+ level: "info",
757
+ data: {
758
+ chainId: CHAIN_ID,
759
+ type: params.type,
760
+ amount: amount.toString(),
761
+ currency,
762
+ applicationId: params.applicationId,
763
+ farmId: params.farmId,
764
+ regionId: params.regionId,
765
+ kickstarterId: params.kickstarterId,
766
+ userAddress: params.userAddress,
767
+ },
768
+ });
689
769
  const owner = await signer.getAddress();
690
770
  // Construct the appropriate message for this forward type
691
771
  const message = constructForwardMessage(params);
@@ -708,6 +788,13 @@ function useForwarder(signer, CHAIN_ID) {
708
788
  await waitForEthersTransactionWithRetry(signer, approveTx.hash);
709
789
  }
710
790
  catch (approveError) {
791
+ sentryCaptureException(approveError, {
792
+ action: "forwardTokens.approve",
793
+ chainId: CHAIN_ID,
794
+ spender: ADDRESSES.FORWARDER,
795
+ amount: ethers.MaxUint256.toString(),
796
+ currency,
797
+ });
711
798
  throw new Error(parseEthersError(approveError) || "Token approval failed");
712
799
  }
713
800
  }
@@ -746,6 +833,17 @@ function useForwarder(signer, CHAIN_ID) {
746
833
  }
747
834
  }
748
835
  catch (staticError) {
836
+ sentryCaptureException(staticError, {
837
+ action: "forwardTokens.staticCall",
838
+ chainId: CHAIN_ID,
839
+ function: !isAuditFees && currency === "USDC"
840
+ ? "swapUSDCAndForwardUSDG"
841
+ : "forward",
842
+ tokenAddress,
843
+ amount: amount.toString(),
844
+ currency,
845
+ isAuditFees,
846
+ });
749
847
  throw new Error(parseEthersError(staticError));
750
848
  }
751
849
  // Execute the forward transaction
@@ -762,6 +860,18 @@ function useForwarder(signer, CHAIN_ID) {
762
860
  return tx.hash;
763
861
  }
764
862
  catch (txError) {
863
+ sentryCaptureException(txError, {
864
+ action: "forwardTokens",
865
+ chainId: CHAIN_ID,
866
+ type: params.type,
867
+ amount: params.amount.toString(),
868
+ currency: params.currency ?? "USDC",
869
+ applicationId: params.applicationId,
870
+ farmId: params.farmId,
871
+ regionId: params.regionId,
872
+ kickstarterId: params.kickstarterId,
873
+ userAddress: params.userAddress,
874
+ });
765
875
  throw new Error(parseEthersError(txError));
766
876
  }
767
877
  finally {
@@ -1598,6 +1708,23 @@ function useOffchainFractions(walletClient, publicClient, CHAIN_ID) {
1598
1708
  assertPublicClient(publicClient);
1599
1709
  try {
1600
1710
  setIsProcessing(true);
1711
+ sentryAddBreadcrumb({
1712
+ category: "offchain-fractions",
1713
+ message: "createFraction.start",
1714
+ level: "info",
1715
+ data: {
1716
+ chainId: walletClient?.chain?.id,
1717
+ contract: ADDRESSES.OFFCHAIN_FRACTIONS,
1718
+ id: params.id,
1719
+ token: params.token,
1720
+ step: params.step.toString(),
1721
+ totalSteps: params.totalSteps.toString(),
1722
+ to: params.to,
1723
+ expiration: params.expiration,
1724
+ minSharesToRaise: params.minSharesToRaise.toString(),
1725
+ closer: params.closer,
1726
+ },
1727
+ });
1601
1728
  const { id, token, step, totalSteps, expiration, to, useCounterfactualAddress, minSharesToRaise, closer, } = params;
1602
1729
  // Validate parameters
1603
1730
  if (!id || !token || !to) {
@@ -1630,6 +1757,12 @@ function useOffchainFractions(walletClient, publicClient, CHAIN_ID) {
1630
1757
  });
1631
1758
  }
1632
1759
  catch (simulationError) {
1760
+ sentryCaptureException(simulationError, {
1761
+ action: "createFraction.simulate",
1762
+ chainId: walletClient?.chain?.id,
1763
+ contract: ADDRESSES.OFFCHAIN_FRACTIONS,
1764
+ id: params.id,
1765
+ });
1633
1766
  throw new Error(parseViemError(simulationError));
1634
1767
  }
1635
1768
  // Execute the transaction
@@ -1655,6 +1788,13 @@ function useOffchainFractions(walletClient, publicClient, CHAIN_ID) {
1655
1788
  return hash;
1656
1789
  }
1657
1790
  catch (error) {
1791
+ sentryCaptureException(error, {
1792
+ action: "createFraction",
1793
+ chainId: walletClient?.chain?.id,
1794
+ contract: ADDRESSES.OFFCHAIN_FRACTIONS,
1795
+ id: params.id,
1796
+ token: params.token,
1797
+ });
1658
1798
  throw new Error(parseViemError(error));
1659
1799
  }
1660
1800
  finally {
@@ -1670,6 +1810,22 @@ function useOffchainFractions(walletClient, publicClient, CHAIN_ID) {
1670
1810
  assertPublicClient(publicClient);
1671
1811
  try {
1672
1812
  setIsProcessing(true);
1813
+ sentryAddBreadcrumb({
1814
+ category: "offchain-fractions",
1815
+ message: "buyFractions.start",
1816
+ level: "info",
1817
+ data: {
1818
+ chainId: walletClient?.chain?.id,
1819
+ contract: ADDRESSES.OFFCHAIN_FRACTIONS,
1820
+ creator: params.creator,
1821
+ id: params.id,
1822
+ stepsToBuy: params.stepsToBuy.toString(),
1823
+ minStepsToBuy: params.minStepsToBuy.toString(),
1824
+ refundTo: params.refundTo,
1825
+ creditTo: params.creditTo,
1826
+ useCounterfactualAddressForRefund: params.useCounterfactualAddressForRefund,
1827
+ },
1828
+ });
1673
1829
  const { creator, id, stepsToBuy, minStepsToBuy, refundTo, creditTo, useCounterfactualAddressForRefund, } = params;
1674
1830
  // Validate parameters
1675
1831
  if (!creator || !id || !refundTo || !creditTo) {
@@ -1725,6 +1881,13 @@ function useOffchainFractions(walletClient, publicClient, CHAIN_ID) {
1725
1881
  });
1726
1882
  }
1727
1883
  catch (simulationError) {
1884
+ sentryCaptureException(simulationError, {
1885
+ action: "buyFractions.simulate",
1886
+ chainId: walletClient?.chain?.id,
1887
+ contract: ADDRESSES.OFFCHAIN_FRACTIONS,
1888
+ creator: params.creator,
1889
+ id: params.id,
1890
+ });
1728
1891
  throw new Error(parseViemError(simulationError));
1729
1892
  }
1730
1893
  // Execute the transaction
@@ -1748,6 +1911,14 @@ function useOffchainFractions(walletClient, publicClient, CHAIN_ID) {
1748
1911
  return hash;
1749
1912
  }
1750
1913
  catch (error) {
1914
+ sentryCaptureException(error, {
1915
+ action: "buyFractions",
1916
+ chainId: walletClient?.chain?.id,
1917
+ contract: ADDRESSES.OFFCHAIN_FRACTIONS,
1918
+ creator: params.creator,
1919
+ id: params.id,
1920
+ stepsToBuy: params.stepsToBuy.toString(),
1921
+ });
1751
1922
  throw new Error(parseViemError(error));
1752
1923
  }
1753
1924
  finally {
@@ -1765,6 +1936,18 @@ function useOffchainFractions(walletClient, publicClient, CHAIN_ID) {
1765
1936
  assertPublicClient(publicClient);
1766
1937
  try {
1767
1938
  setIsProcessing(true);
1939
+ sentryAddBreadcrumb({
1940
+ category: "offchain-fractions",
1941
+ message: "claimRefund.start",
1942
+ level: "info",
1943
+ data: {
1944
+ chainId: walletClient?.chain?.id,
1945
+ contract: ADDRESSES.OFFCHAIN_FRACTIONS,
1946
+ user,
1947
+ creator,
1948
+ id,
1949
+ },
1950
+ });
1768
1951
  // Normalize addresses to lowercase for consistency
1769
1952
  const normalizedUser = user?.toLowerCase();
1770
1953
  const normalizedCreator = creator?.toLowerCase();
@@ -1810,7 +1993,14 @@ function useOffchainFractions(walletClient, publicClient, CHAIN_ID) {
1810
1993
  });
1811
1994
  }
1812
1995
  catch (simulationError) {
1813
- console.error("Simulation failed:", simulationError);
1996
+ sentryCaptureException(simulationError, {
1997
+ action: "claimRefund.simulate",
1998
+ chainId: walletClient?.chain?.id,
1999
+ contract: ADDRESSES.OFFCHAIN_FRACTIONS,
2000
+ user,
2001
+ creator,
2002
+ id,
2003
+ });
1814
2004
  throw new Error(parseViemError(simulationError));
1815
2005
  }
1816
2006
  // Execute the transaction
@@ -1826,6 +2016,14 @@ function useOffchainFractions(walletClient, publicClient, CHAIN_ID) {
1826
2016
  return hash;
1827
2017
  }
1828
2018
  catch (error) {
2019
+ sentryCaptureException(error, {
2020
+ action: "claimRefund",
2021
+ chainId: walletClient?.chain?.id,
2022
+ contract: ADDRESSES.OFFCHAIN_FRACTIONS,
2023
+ user,
2024
+ creator,
2025
+ id,
2026
+ });
1829
2027
  throw new Error(parseViemError(error));
1830
2028
  }
1831
2029
  finally {
@@ -1842,6 +2040,17 @@ function useOffchainFractions(walletClient, publicClient, CHAIN_ID) {
1842
2040
  assertPublicClient(publicClient);
1843
2041
  try {
1844
2042
  setIsProcessing(true);
2043
+ sentryAddBreadcrumb({
2044
+ category: "offchain-fractions",
2045
+ message: "closeFraction.start",
2046
+ level: "info",
2047
+ data: {
2048
+ chainId: walletClient?.chain?.id,
2049
+ contract: ADDRESSES.OFFCHAIN_FRACTIONS,
2050
+ creator,
2051
+ id,
2052
+ },
2053
+ });
1845
2054
  // Validate parameters
1846
2055
  if (!creator || !id) {
1847
2056
  throw new Error(exports.OffchainFractionsError.INVALID_PARAMETERS);
@@ -1861,6 +2070,13 @@ function useOffchainFractions(walletClient, publicClient, CHAIN_ID) {
1861
2070
  });
1862
2071
  }
1863
2072
  catch (simulationError) {
2073
+ sentryCaptureException(simulationError, {
2074
+ action: "closeFraction.simulate",
2075
+ chainId: walletClient?.chain?.id,
2076
+ contract: ADDRESSES.OFFCHAIN_FRACTIONS,
2077
+ creator,
2078
+ id,
2079
+ });
1864
2080
  throw new Error(parseViemError(simulationError));
1865
2081
  }
1866
2082
  // Execute the transaction
@@ -1876,6 +2092,13 @@ function useOffchainFractions(walletClient, publicClient, CHAIN_ID) {
1876
2092
  return hash;
1877
2093
  }
1878
2094
  catch (error) {
2095
+ sentryCaptureException(error, {
2096
+ action: "closeFraction",
2097
+ chainId: walletClient?.chain?.id,
2098
+ contract: ADDRESSES.OFFCHAIN_FRACTIONS,
2099
+ creator,
2100
+ id,
2101
+ });
1879
2102
  throw new Error(parseViemError(error));
1880
2103
  }
1881
2104
  finally {
@@ -1998,6 +2221,19 @@ function useOffchainFractions(walletClient, publicClient, CHAIN_ID) {
1998
2221
  assertPublicClient(publicClient);
1999
2222
  try {
2000
2223
  setIsProcessing(true);
2224
+ sentryAddBreadcrumb({
2225
+ category: "offchain-fractions",
2226
+ message: "setRefundDetails.start",
2227
+ level: "info",
2228
+ data: {
2229
+ chainId: walletClient?.chain?.id,
2230
+ contract: ADDRESSES.OFFCHAIN_FRACTIONS,
2231
+ creator,
2232
+ id,
2233
+ refundTo,
2234
+ useCounterfactualAddress,
2235
+ },
2236
+ });
2001
2237
  // Validate parameters
2002
2238
  if (!creator || !id || !refundTo) {
2003
2239
  throw new Error(exports.OffchainFractionsError.INVALID_PARAMETERS);
@@ -2022,6 +2258,13 @@ function useOffchainFractions(walletClient, publicClient, CHAIN_ID) {
2022
2258
  });
2023
2259
  }
2024
2260
  catch (simulationError) {
2261
+ sentryCaptureException(simulationError, {
2262
+ action: "setRefundDetails.simulate",
2263
+ chainId: walletClient?.chain?.id,
2264
+ contract: ADDRESSES.OFFCHAIN_FRACTIONS,
2265
+ creator,
2266
+ id,
2267
+ });
2025
2268
  throw new Error(parseViemError(simulationError));
2026
2269
  }
2027
2270
  // Execute the transaction
@@ -2042,6 +2285,14 @@ function useOffchainFractions(walletClient, publicClient, CHAIN_ID) {
2042
2285
  return hash;
2043
2286
  }
2044
2287
  catch (error) {
2288
+ sentryCaptureException(error, {
2289
+ action: "setRefundDetails",
2290
+ chainId: walletClient?.chain?.id,
2291
+ contract: ADDRESSES.OFFCHAIN_FRACTIONS,
2292
+ creator,
2293
+ id,
2294
+ refundTo,
2295
+ });
2045
2296
  throw new Error(parseViemError(error));
2046
2297
  }
2047
2298
  finally {
@@ -2058,6 +2309,17 @@ function useOffchainFractions(walletClient, publicClient, CHAIN_ID) {
2058
2309
  assertPublicClient(publicClient);
2059
2310
  try {
2060
2311
  setIsProcessing(true);
2312
+ sentryAddBreadcrumb({
2313
+ category: "offchain-fractions",
2314
+ message: "setRefundOperatorStatus.start",
2315
+ level: "info",
2316
+ data: {
2317
+ chainId: walletClient?.chain?.id,
2318
+ contract: ADDRESSES.OFFCHAIN_FRACTIONS,
2319
+ refundOperator,
2320
+ isApproved,
2321
+ },
2322
+ });
2061
2323
  // Validate parameters
2062
2324
  if (!refundOperator) {
2063
2325
  throw new Error(exports.OffchainFractionsError.INVALID_PARAMETERS);
@@ -2077,6 +2339,13 @@ function useOffchainFractions(walletClient, publicClient, CHAIN_ID) {
2077
2339
  });
2078
2340
  }
2079
2341
  catch (simulationError) {
2342
+ sentryCaptureException(simulationError, {
2343
+ action: "setRefundOperatorStatus.simulate",
2344
+ chainId: walletClient?.chain?.id,
2345
+ contract: ADDRESSES.OFFCHAIN_FRACTIONS,
2346
+ refundOperator,
2347
+ isApproved,
2348
+ });
2080
2349
  throw new Error(parseViemError(simulationError));
2081
2350
  }
2082
2351
  // Execute the transaction
@@ -2092,6 +2361,13 @@ function useOffchainFractions(walletClient, publicClient, CHAIN_ID) {
2092
2361
  return hash;
2093
2362
  }
2094
2363
  catch (error) {
2364
+ sentryCaptureException(error, {
2365
+ action: "setRefundOperatorStatus",
2366
+ chainId: walletClient?.chain?.id,
2367
+ contract: ADDRESSES.OFFCHAIN_FRACTIONS,
2368
+ refundOperator,
2369
+ isApproved,
2370
+ });
2095
2371
  throw new Error(parseViemError(error));
2096
2372
  }
2097
2373
  finally {
@@ -2529,6 +2805,16 @@ function ControlRouter(baseUrl) {
2529
2805
  const stakeGctl = async (stakeRequest) => {
2530
2806
  isStaking = true;
2531
2807
  try {
2808
+ sentryAddBreadcrumb({
2809
+ category: "control-api",
2810
+ message: "POST /stake",
2811
+ level: "info",
2812
+ data: {
2813
+ baseUrl,
2814
+ wallet: stakeRequest.wallet,
2815
+ regionId: stakeRequest.regionId,
2816
+ },
2817
+ });
2532
2818
  await request(`/stake`, {
2533
2819
  method: "POST",
2534
2820
  headers: { "Content-Type": "application/json" },
@@ -2537,6 +2823,14 @@ function ControlRouter(baseUrl) {
2537
2823
  return true;
2538
2824
  }
2539
2825
  catch (error) {
2826
+ sentryCaptureException(error, {
2827
+ action: "stakeGctl",
2828
+ baseUrl,
2829
+ wallet: stakeRequest.wallet,
2830
+ regionId: stakeRequest.regionId,
2831
+ amount: stakeRequest.amount,
2832
+ deadline: stakeRequest.deadline,
2833
+ });
2540
2834
  throw new Error(parseApiError$4(error));
2541
2835
  }
2542
2836
  finally {
@@ -2546,6 +2840,16 @@ function ControlRouter(baseUrl) {
2546
2840
  const unstakeGctl = async (unstakeRequest) => {
2547
2841
  isUnstaking = true;
2548
2842
  try {
2843
+ sentryAddBreadcrumb({
2844
+ category: "control-api",
2845
+ message: "POST /unstake",
2846
+ level: "info",
2847
+ data: {
2848
+ baseUrl,
2849
+ wallet: unstakeRequest.wallet,
2850
+ regionId: unstakeRequest.regionId,
2851
+ },
2852
+ });
2549
2853
  await request(`/unstake`, {
2550
2854
  method: "POST",
2551
2855
  headers: { "Content-Type": "application/json" },
@@ -2554,6 +2858,14 @@ function ControlRouter(baseUrl) {
2554
2858
  return true;
2555
2859
  }
2556
2860
  catch (error) {
2861
+ sentryCaptureException(error, {
2862
+ action: "unstakeGctl",
2863
+ baseUrl,
2864
+ wallet: unstakeRequest.wallet,
2865
+ regionId: unstakeRequest.regionId,
2866
+ amount: unstakeRequest.amount,
2867
+ deadline: unstakeRequest.deadline,
2868
+ });
2557
2869
  throw new Error(parseApiError$4(error));
2558
2870
  }
2559
2871
  finally {
@@ -2563,6 +2875,17 @@ function ControlRouter(baseUrl) {
2563
2875
  const restakeGctl = async (restakeRequest) => {
2564
2876
  isRestaking = true;
2565
2877
  try {
2878
+ sentryAddBreadcrumb({
2879
+ category: "control-api",
2880
+ message: "POST /restake",
2881
+ level: "info",
2882
+ data: {
2883
+ baseUrl,
2884
+ wallet: restakeRequest.wallet,
2885
+ fromZoneId: restakeRequest.fromZoneId,
2886
+ toZoneId: restakeRequest.toZoneId,
2887
+ },
2888
+ });
2566
2889
  await request(`/restake`, {
2567
2890
  method: "POST",
2568
2891
  headers: { "Content-Type": "application/json" },
@@ -2571,6 +2894,15 @@ function ControlRouter(baseUrl) {
2571
2894
  return true;
2572
2895
  }
2573
2896
  catch (error) {
2897
+ sentryCaptureException(error, {
2898
+ action: "restakeGctl",
2899
+ baseUrl,
2900
+ wallet: restakeRequest.wallet,
2901
+ fromZoneId: restakeRequest.fromZoneId,
2902
+ toZoneId: restakeRequest.toZoneId,
2903
+ amount: restakeRequest.amount,
2904
+ deadline: restakeRequest.deadline,
2905
+ });
2574
2906
  throw new Error(parseApiError$4(error));
2575
2907
  }
2576
2908
  finally {
@@ -2580,6 +2912,12 @@ function ControlRouter(baseUrl) {
2580
2912
  const retryFailedOperation = async (operationId) => {
2581
2913
  isRetryingFailedOperation = true;
2582
2914
  try {
2915
+ sentryAddBreadcrumb({
2916
+ category: "control-api",
2917
+ message: "POST /operations/failed/:id/retry",
2918
+ level: "info",
2919
+ data: { baseUrl, operationId },
2920
+ });
2583
2921
  await request(`/operations/failed/${operationId}/retry`, {
2584
2922
  method: "POST",
2585
2923
  headers: { "Content-Type": "application/json" },
@@ -2587,6 +2925,11 @@ function ControlRouter(baseUrl) {
2587
2925
  return true;
2588
2926
  }
2589
2927
  catch (error) {
2928
+ sentryCaptureException(error, {
2929
+ action: "retryFailedOperation",
2930
+ baseUrl,
2931
+ operationId,
2932
+ });
2590
2933
  throw new Error(parseApiError$4(error));
2591
2934
  }
2592
2935
  finally {
@@ -2596,6 +2939,18 @@ function ControlRouter(baseUrl) {
2596
2939
  const payProtocolDepositUsingStakedControl = async (paymentRequest) => {
2597
2940
  isPayingProtocolDepositUsingStakedControl = true;
2598
2941
  try {
2942
+ sentryAddBreadcrumb({
2943
+ category: "control-api",
2944
+ message: "POST /pay-protocol-deposit-staked",
2945
+ level: "info",
2946
+ data: {
2947
+ baseUrl,
2948
+ wallet: paymentRequest.wallet,
2949
+ regionId: paymentRequest.regionId,
2950
+ applicationId: paymentRequest.applicationId,
2951
+ amount: paymentRequest.amount,
2952
+ },
2953
+ });
2599
2954
  const response = await request(`/pay-protocol-deposit-staked`, {
2600
2955
  method: "POST",
2601
2956
  headers: { "Content-Type": "application/json" },
@@ -2604,6 +2959,14 @@ function ControlRouter(baseUrl) {
2604
2959
  return response;
2605
2960
  }
2606
2961
  catch (error) {
2962
+ sentryCaptureException(error, {
2963
+ action: "payProtocolDepositUsingStakedControl",
2964
+ baseUrl,
2965
+ wallet: paymentRequest.wallet,
2966
+ regionId: paymentRequest.regionId,
2967
+ applicationId: paymentRequest.applicationId,
2968
+ amount: paymentRequest.amount,
2969
+ });
2607
2970
  throw new Error(parseApiError$4(error));
2608
2971
  }
2609
2972
  finally {
@@ -2613,6 +2976,15 @@ function ControlRouter(baseUrl) {
2613
2976
  const migrateUser = async (migrateRequest) => {
2614
2977
  isMigratingUser = true;
2615
2978
  try {
2979
+ sentryAddBreadcrumb({
2980
+ category: "control-api",
2981
+ message: "POST /migrate-user",
2982
+ level: "info",
2983
+ data: {
2984
+ baseUrl,
2985
+ wallet: migrateRequest.wallet,
2986
+ },
2987
+ });
2616
2988
  const response = await request(`/migrate-user`, {
2617
2989
  method: "POST",
2618
2990
  headers: { "Content-Type": "application/json" },
@@ -2621,6 +2993,12 @@ function ControlRouter(baseUrl) {
2621
2993
  return response;
2622
2994
  }
2623
2995
  catch (error) {
2996
+ sentryCaptureException(error, {
2997
+ action: "migrateUser",
2998
+ baseUrl,
2999
+ wallet: migrateRequest.wallet,
3000
+ deadline: migrateRequest.deadline,
3001
+ });
2624
3002
  throw new Error(parseApiError$4(error));
2625
3003
  }
2626
3004
  finally {
@@ -3394,7 +3772,6 @@ function RegionRouter(baseUrl) {
3394
3772
  // -------------------------------------------------------------------------
3395
3773
  let cachedRegions = [];
3396
3774
  let isLoading = false;
3397
- let isCreatingRegion = false;
3398
3775
  // -------------------------------------------------------------------------
3399
3776
  // Queries
3400
3777
  // -------------------------------------------------------------------------
@@ -3451,27 +3828,6 @@ function RegionRouter(baseUrl) {
3451
3828
  throw new Error(parseApiError$3(error));
3452
3829
  }
3453
3830
  };
3454
- // -------------------------------------------------------------------------
3455
- // Mutations
3456
- // -------------------------------------------------------------------------
3457
- const createRegion = async (payload) => {
3458
- isCreatingRegion = true;
3459
- try {
3460
- await request(`/regions/create`, {
3461
- method: "POST",
3462
- headers: { "Content-Type": "application/json" },
3463
- body: JSON.stringify(payload),
3464
- });
3465
- // Refresh the local cache after successful creation
3466
- await fetchRegions();
3467
- }
3468
- catch (error) {
3469
- throw new Error(parseApiError$3(error));
3470
- }
3471
- finally {
3472
- isCreatingRegion = false;
3473
- }
3474
- };
3475
3831
  // Kickstarter-related logic moved to kickstarter-router.ts
3476
3832
  // -------------------------------------------------------------------------
3477
3833
  // Helpers (derived)
@@ -3520,7 +3876,6 @@ function RegionRouter(baseUrl) {
3520
3876
  fetchRegionByIdOrSlug,
3521
3877
  fetchRegionSolarFarms,
3522
3878
  getRegionByCode,
3523
- createRegion,
3524
3879
  // Cached data & flags
3525
3880
  get regions() {
3526
3881
  return cachedRegions;
@@ -3528,9 +3883,6 @@ function RegionRouter(baseUrl) {
3528
3883
  get isLoading() {
3529
3884
  return isLoading;
3530
3885
  },
3531
- get isCreatingRegion() {
3532
- return isCreatingRegion;
3533
- },
3534
3886
  };
3535
3887
  }
3536
3888
 
@@ -3566,6 +3918,16 @@ function KickstarterRouter(baseUrl) {
3566
3918
  const createKickstarter = async (payload) => {
3567
3919
  isCreatingKickstarter = true;
3568
3920
  try {
3921
+ sentryAddBreadcrumb({
3922
+ category: "control-api",
3923
+ message: "POST /kickstarters",
3924
+ level: "info",
3925
+ data: {
3926
+ baseUrl,
3927
+ code: payload.code,
3928
+ creatorWallet: payload.creatorWallet,
3929
+ },
3930
+ });
3569
3931
  const exists = Boolean(regionMetadata[payload.code]);
3570
3932
  if (!exists) {
3571
3933
  throw new Error(`Unknown region code: ${payload.code}`);
@@ -3578,6 +3940,14 @@ function KickstarterRouter(baseUrl) {
3578
3940
  return data;
3579
3941
  }
3580
3942
  catch (error) {
3943
+ sentryCaptureException(error, {
3944
+ action: "createKickstarter",
3945
+ baseUrl,
3946
+ code: payload.code,
3947
+ creatorWallet: payload.creatorWallet,
3948
+ title: payload.title,
3949
+ regionName: payload.regionName,
3950
+ });
3581
3951
  throw new Error(parseApiError$2(error));
3582
3952
  }
3583
3953
  finally {
@@ -3604,6 +3974,12 @@ function KickstarterRouter(baseUrl) {
3604
3974
  };
3605
3975
  const commitKickstarter = async (kickstarterId, payload) => {
3606
3976
  try {
3977
+ sentryAddBreadcrumb({
3978
+ category: "control-api",
3979
+ message: "POST /kickstarters/commit/:id",
3980
+ level: "info",
3981
+ data: { baseUrl, kickstarterId },
3982
+ });
3607
3983
  const data = await request(`/kickstarters/commit/${encodeURIComponent(kickstarterId)}`, {
3608
3984
  method: "POST",
3609
3985
  headers: { "Content-Type": "application/json" },
@@ -3612,6 +3988,13 @@ function KickstarterRouter(baseUrl) {
3612
3988
  return data;
3613
3989
  }
3614
3990
  catch (error) {
3991
+ sentryCaptureException(error, {
3992
+ action: "commitKickstarter",
3993
+ baseUrl,
3994
+ kickstarterId,
3995
+ wallet: payload.wallet,
3996
+ amount: payload.amount,
3997
+ });
3615
3998
  throw new Error(parseApiError$2(error));
3616
3999
  }
3617
4000
  };
@@ -3778,6 +4161,12 @@ function FarmsRouter(baseUrl) {
3778
4161
  };
3779
4162
  const estimateRewardScore = async (params) => {
3780
4163
  try {
4164
+ sentryAddBreadcrumb({
4165
+ category: "control-api",
4166
+ message: "POST /farms/estimate-reward-score",
4167
+ level: "info",
4168
+ data: { baseUrl, regionId: params.regionId, userId: params.userId },
4169
+ });
3781
4170
  const data = await request("/farms/estimate-reward-score", {
3782
4171
  method: "POST",
3783
4172
  headers: {
@@ -3794,11 +4183,24 @@ function FarmsRouter(baseUrl) {
3794
4183
  return data;
3795
4184
  }
3796
4185
  catch (error) {
4186
+ sentryCaptureException(error, {
4187
+ action: "estimateRewardScore",
4188
+ baseUrl,
4189
+ userId: params.userId,
4190
+ regionId: params.regionId,
4191
+ paymentCurrency: params.paymentCurrency,
4192
+ });
3797
4193
  throw new Error(parseApiError(error));
3798
4194
  }
3799
4195
  };
3800
4196
  const estimateRewardScoresBatch = async (params) => {
3801
4197
  try {
4198
+ sentryAddBreadcrumb({
4199
+ category: "control-api",
4200
+ message: "POST /farms/estimate-reward-scores-batch",
4201
+ level: "info",
4202
+ data: { baseUrl },
4203
+ });
3802
4204
  const data = await request("/farms/estimate-reward-scores-batch", {
3803
4205
  method: "POST",
3804
4206
  headers: {
@@ -3809,11 +4211,22 @@ function FarmsRouter(baseUrl) {
3809
4211
  return data;
3810
4212
  }
3811
4213
  catch (error) {
4214
+ sentryCaptureException(error, {
4215
+ action: "estimateRewardScoresBatch",
4216
+ baseUrl,
4217
+ farmsCount: params.farms?.length,
4218
+ });
3812
4219
  throw new Error(parseApiError(error));
3813
4220
  }
3814
4221
  };
3815
4222
  const calculateMiningScoresBatch = async (params) => {
3816
4223
  try {
4224
+ sentryAddBreadcrumb({
4225
+ category: "control-api",
4226
+ message: "POST /farms/mining-scores-batch",
4227
+ level: "info",
4228
+ data: { baseUrl },
4229
+ });
3817
4230
  const data = await request("/farms/mining-scores-batch", {
3818
4231
  method: "POST",
3819
4232
  headers: {
@@ -3824,6 +4237,11 @@ function FarmsRouter(baseUrl) {
3824
4237
  return data;
3825
4238
  }
3826
4239
  catch (error) {
4240
+ sentryCaptureException(error, {
4241
+ action: "calculateMiningScoresBatch",
4242
+ baseUrl,
4243
+ farmsCount: params.farms?.length,
4244
+ });
3827
4245
  throw new Error(parseApiError(error));
3828
4246
  }
3829
4247
  };
@@ -3854,6 +4272,7 @@ exports.TRANSFER_TYPES = TRANSFER_TYPES;
3854
4272
  exports.USDG_WEIGHT_DECIMAL_PRECISION = USDG_WEIGHT_DECIMAL_PRECISION;
3855
4273
  exports.WalletsRouter = WalletsRouter;
3856
4274
  exports.allRegions = allRegions;
4275
+ exports.configureSentry = configureSentry;
3857
4276
  exports.countries = countries;
3858
4277
  exports.getAddresses = getAddresses;
3859
4278
  exports.parseEthersError = parseEthersError;
@@ -3864,4 +4283,4 @@ exports.useForwarder = useForwarder;
3864
4283
  exports.useOffchainFractions = useOffchainFractions;
3865
4284
  exports.waitForEthersTransactionWithRetry = waitForEthersTransactionWithRetry;
3866
4285
  exports.waitForViemTransactionWithRetry = waitForViemTransactionWithRetry;
3867
- //# sourceMappingURL=farms-router-CCva--xp.js.map
4286
+ //# sourceMappingURL=farms-router-C8V_F0vY.js.map