@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.
@@ -506,6 +506,70 @@ async function waitForEthersTransactionWithRetry(signer, txHash, options = {}) {
506
506
  throw new Error(`Transaction failed after ${maxRetries} attempts: ${parseEthersError(lastError)}`);
507
507
  }
508
508
 
509
+ let configuredClient = null;
510
+ let isEnabled = true;
511
+ let defaultExtra = {};
512
+ function getSentry() {
513
+ const client = configuredClient ??
514
+ globalThis?.Sentry;
515
+ if (!client || typeof client.captureException !== "function")
516
+ return null;
517
+ return client;
518
+ }
519
+ function configureSentry(config) {
520
+ if (config.enabled !== undefined)
521
+ isEnabled = !!config.enabled;
522
+ if (config.client !== undefined)
523
+ configuredClient = config.client;
524
+ if (config.defaultContext)
525
+ defaultExtra = { ...config.defaultContext };
526
+ }
527
+ function shouldSkipSentry(error) {
528
+ try {
529
+ const possible = error;
530
+ const code = possible?.code || possible?.cause?.code;
531
+ const name = possible?.name || possible?.cause?.name;
532
+ const message = String(possible?.message || possible?.cause?.message || "");
533
+ // User rejected wallet request (ethers/viem/common providers)
534
+ if (code === "ACTION_REJECTED")
535
+ return true;
536
+ if (name === "UserRejectedRequestError")
537
+ return true;
538
+ if (/user rejected/i.test(message))
539
+ return true;
540
+ // Terminal waitForViemTransactionWithRetry error (retries exhausted)
541
+ if (/Transaction failed after\s+\d+\s+attempts:/i.test(message)) {
542
+ return true;
543
+ }
544
+ return false;
545
+ }
546
+ catch {
547
+ return false;
548
+ }
549
+ }
550
+ function sentryAddBreadcrumb(breadcrumb) {
551
+ try {
552
+ if (!isEnabled)
553
+ return;
554
+ getSentry()?.addBreadcrumb?.(breadcrumb);
555
+ }
556
+ catch { }
557
+ }
558
+ function sentryCaptureException(error, extra) {
559
+ try {
560
+ if (!isEnabled)
561
+ return;
562
+ if (shouldSkipSentry(error))
563
+ return;
564
+ const client = getSentry();
565
+ if (!client)
566
+ return;
567
+ const merged = extra ? { ...defaultExtra, ...extra } : defaultExtra;
568
+ client.captureException(error, Object.keys(merged).length ? { extra: merged } : undefined);
569
+ }
570
+ catch { }
571
+ }
572
+
509
573
  var ForwarderError;
510
574
  (function (ForwarderError) {
511
575
  ForwarderError["CONTRACT_NOT_AVAILABLE"] = "Contract not available";
@@ -684,6 +748,22 @@ function useForwarder(signer, CHAIN_ID) {
684
748
  const tokenContract = getTokenContract(currency);
685
749
  if (!tokenContract)
686
750
  throw new Error(ForwarderError.CONTRACT_NOT_AVAILABLE);
751
+ sentryAddBreadcrumb({
752
+ category: "forwarder",
753
+ message: "forwardTokens.start",
754
+ level: "info",
755
+ data: {
756
+ chainId: CHAIN_ID,
757
+ type: params.type,
758
+ amount: amount.toString(),
759
+ currency,
760
+ applicationId: params.applicationId,
761
+ farmId: params.farmId,
762
+ regionId: params.regionId,
763
+ kickstarterId: params.kickstarterId,
764
+ userAddress: params.userAddress,
765
+ },
766
+ });
687
767
  const owner = await signer.getAddress();
688
768
  // Construct the appropriate message for this forward type
689
769
  const message = constructForwardMessage(params);
@@ -706,6 +786,13 @@ function useForwarder(signer, CHAIN_ID) {
706
786
  await waitForEthersTransactionWithRetry(signer, approveTx.hash);
707
787
  }
708
788
  catch (approveError) {
789
+ sentryCaptureException(approveError, {
790
+ action: "forwardTokens.approve",
791
+ chainId: CHAIN_ID,
792
+ spender: ADDRESSES.FORWARDER,
793
+ amount: MaxUint256.toString(),
794
+ currency,
795
+ });
709
796
  throw new Error(parseEthersError(approveError) || "Token approval failed");
710
797
  }
711
798
  }
@@ -744,6 +831,17 @@ function useForwarder(signer, CHAIN_ID) {
744
831
  }
745
832
  }
746
833
  catch (staticError) {
834
+ sentryCaptureException(staticError, {
835
+ action: "forwardTokens.staticCall",
836
+ chainId: CHAIN_ID,
837
+ function: !isAuditFees && currency === "USDC"
838
+ ? "swapUSDCAndForwardUSDG"
839
+ : "forward",
840
+ tokenAddress,
841
+ amount: amount.toString(),
842
+ currency,
843
+ isAuditFees,
844
+ });
747
845
  throw new Error(parseEthersError(staticError));
748
846
  }
749
847
  // Execute the forward transaction
@@ -760,6 +858,18 @@ function useForwarder(signer, CHAIN_ID) {
760
858
  return tx.hash;
761
859
  }
762
860
  catch (txError) {
861
+ sentryCaptureException(txError, {
862
+ action: "forwardTokens",
863
+ chainId: CHAIN_ID,
864
+ type: params.type,
865
+ amount: params.amount.toString(),
866
+ currency: params.currency ?? "USDC",
867
+ applicationId: params.applicationId,
868
+ farmId: params.farmId,
869
+ regionId: params.regionId,
870
+ kickstarterId: params.kickstarterId,
871
+ userAddress: params.userAddress,
872
+ });
763
873
  throw new Error(parseEthersError(txError));
764
874
  }
765
875
  finally {
@@ -1596,6 +1706,23 @@ function useOffchainFractions(walletClient, publicClient, CHAIN_ID) {
1596
1706
  assertPublicClient(publicClient);
1597
1707
  try {
1598
1708
  setIsProcessing(true);
1709
+ sentryAddBreadcrumb({
1710
+ category: "offchain-fractions",
1711
+ message: "createFraction.start",
1712
+ level: "info",
1713
+ data: {
1714
+ chainId: walletClient?.chain?.id,
1715
+ contract: ADDRESSES.OFFCHAIN_FRACTIONS,
1716
+ id: params.id,
1717
+ token: params.token,
1718
+ step: params.step.toString(),
1719
+ totalSteps: params.totalSteps.toString(),
1720
+ to: params.to,
1721
+ expiration: params.expiration,
1722
+ minSharesToRaise: params.minSharesToRaise.toString(),
1723
+ closer: params.closer,
1724
+ },
1725
+ });
1599
1726
  const { id, token, step, totalSteps, expiration, to, useCounterfactualAddress, minSharesToRaise, closer, } = params;
1600
1727
  // Validate parameters
1601
1728
  if (!id || !token || !to) {
@@ -1628,6 +1755,12 @@ function useOffchainFractions(walletClient, publicClient, CHAIN_ID) {
1628
1755
  });
1629
1756
  }
1630
1757
  catch (simulationError) {
1758
+ sentryCaptureException(simulationError, {
1759
+ action: "createFraction.simulate",
1760
+ chainId: walletClient?.chain?.id,
1761
+ contract: ADDRESSES.OFFCHAIN_FRACTIONS,
1762
+ id: params.id,
1763
+ });
1631
1764
  throw new Error(parseViemError(simulationError));
1632
1765
  }
1633
1766
  // Execute the transaction
@@ -1653,6 +1786,13 @@ function useOffchainFractions(walletClient, publicClient, CHAIN_ID) {
1653
1786
  return hash;
1654
1787
  }
1655
1788
  catch (error) {
1789
+ sentryCaptureException(error, {
1790
+ action: "createFraction",
1791
+ chainId: walletClient?.chain?.id,
1792
+ contract: ADDRESSES.OFFCHAIN_FRACTIONS,
1793
+ id: params.id,
1794
+ token: params.token,
1795
+ });
1656
1796
  throw new Error(parseViemError(error));
1657
1797
  }
1658
1798
  finally {
@@ -1668,6 +1808,22 @@ function useOffchainFractions(walletClient, publicClient, CHAIN_ID) {
1668
1808
  assertPublicClient(publicClient);
1669
1809
  try {
1670
1810
  setIsProcessing(true);
1811
+ sentryAddBreadcrumb({
1812
+ category: "offchain-fractions",
1813
+ message: "buyFractions.start",
1814
+ level: "info",
1815
+ data: {
1816
+ chainId: walletClient?.chain?.id,
1817
+ contract: ADDRESSES.OFFCHAIN_FRACTIONS,
1818
+ creator: params.creator,
1819
+ id: params.id,
1820
+ stepsToBuy: params.stepsToBuy.toString(),
1821
+ minStepsToBuy: params.minStepsToBuy.toString(),
1822
+ refundTo: params.refundTo,
1823
+ creditTo: params.creditTo,
1824
+ useCounterfactualAddressForRefund: params.useCounterfactualAddressForRefund,
1825
+ },
1826
+ });
1671
1827
  const { creator, id, stepsToBuy, minStepsToBuy, refundTo, creditTo, useCounterfactualAddressForRefund, } = params;
1672
1828
  // Validate parameters
1673
1829
  if (!creator || !id || !refundTo || !creditTo) {
@@ -1723,6 +1879,13 @@ function useOffchainFractions(walletClient, publicClient, CHAIN_ID) {
1723
1879
  });
1724
1880
  }
1725
1881
  catch (simulationError) {
1882
+ sentryCaptureException(simulationError, {
1883
+ action: "buyFractions.simulate",
1884
+ chainId: walletClient?.chain?.id,
1885
+ contract: ADDRESSES.OFFCHAIN_FRACTIONS,
1886
+ creator: params.creator,
1887
+ id: params.id,
1888
+ });
1726
1889
  throw new Error(parseViemError(simulationError));
1727
1890
  }
1728
1891
  // Execute the transaction
@@ -1746,6 +1909,14 @@ function useOffchainFractions(walletClient, publicClient, CHAIN_ID) {
1746
1909
  return hash;
1747
1910
  }
1748
1911
  catch (error) {
1912
+ sentryCaptureException(error, {
1913
+ action: "buyFractions",
1914
+ chainId: walletClient?.chain?.id,
1915
+ contract: ADDRESSES.OFFCHAIN_FRACTIONS,
1916
+ creator: params.creator,
1917
+ id: params.id,
1918
+ stepsToBuy: params.stepsToBuy.toString(),
1919
+ });
1749
1920
  throw new Error(parseViemError(error));
1750
1921
  }
1751
1922
  finally {
@@ -1763,6 +1934,18 @@ function useOffchainFractions(walletClient, publicClient, CHAIN_ID) {
1763
1934
  assertPublicClient(publicClient);
1764
1935
  try {
1765
1936
  setIsProcessing(true);
1937
+ sentryAddBreadcrumb({
1938
+ category: "offchain-fractions",
1939
+ message: "claimRefund.start",
1940
+ level: "info",
1941
+ data: {
1942
+ chainId: walletClient?.chain?.id,
1943
+ contract: ADDRESSES.OFFCHAIN_FRACTIONS,
1944
+ user,
1945
+ creator,
1946
+ id,
1947
+ },
1948
+ });
1766
1949
  // Normalize addresses to lowercase for consistency
1767
1950
  const normalizedUser = user?.toLowerCase();
1768
1951
  const normalizedCreator = creator?.toLowerCase();
@@ -1808,7 +1991,14 @@ function useOffchainFractions(walletClient, publicClient, CHAIN_ID) {
1808
1991
  });
1809
1992
  }
1810
1993
  catch (simulationError) {
1811
- console.error("Simulation failed:", simulationError);
1994
+ sentryCaptureException(simulationError, {
1995
+ action: "claimRefund.simulate",
1996
+ chainId: walletClient?.chain?.id,
1997
+ contract: ADDRESSES.OFFCHAIN_FRACTIONS,
1998
+ user,
1999
+ creator,
2000
+ id,
2001
+ });
1812
2002
  throw new Error(parseViemError(simulationError));
1813
2003
  }
1814
2004
  // Execute the transaction
@@ -1824,6 +2014,14 @@ function useOffchainFractions(walletClient, publicClient, CHAIN_ID) {
1824
2014
  return hash;
1825
2015
  }
1826
2016
  catch (error) {
2017
+ sentryCaptureException(error, {
2018
+ action: "claimRefund",
2019
+ chainId: walletClient?.chain?.id,
2020
+ contract: ADDRESSES.OFFCHAIN_FRACTIONS,
2021
+ user,
2022
+ creator,
2023
+ id,
2024
+ });
1827
2025
  throw new Error(parseViemError(error));
1828
2026
  }
1829
2027
  finally {
@@ -1840,6 +2038,17 @@ function useOffchainFractions(walletClient, publicClient, CHAIN_ID) {
1840
2038
  assertPublicClient(publicClient);
1841
2039
  try {
1842
2040
  setIsProcessing(true);
2041
+ sentryAddBreadcrumb({
2042
+ category: "offchain-fractions",
2043
+ message: "closeFraction.start",
2044
+ level: "info",
2045
+ data: {
2046
+ chainId: walletClient?.chain?.id,
2047
+ contract: ADDRESSES.OFFCHAIN_FRACTIONS,
2048
+ creator,
2049
+ id,
2050
+ },
2051
+ });
1843
2052
  // Validate parameters
1844
2053
  if (!creator || !id) {
1845
2054
  throw new Error(OffchainFractionsError.INVALID_PARAMETERS);
@@ -1859,6 +2068,13 @@ function useOffchainFractions(walletClient, publicClient, CHAIN_ID) {
1859
2068
  });
1860
2069
  }
1861
2070
  catch (simulationError) {
2071
+ sentryCaptureException(simulationError, {
2072
+ action: "closeFraction.simulate",
2073
+ chainId: walletClient?.chain?.id,
2074
+ contract: ADDRESSES.OFFCHAIN_FRACTIONS,
2075
+ creator,
2076
+ id,
2077
+ });
1862
2078
  throw new Error(parseViemError(simulationError));
1863
2079
  }
1864
2080
  // Execute the transaction
@@ -1874,6 +2090,13 @@ function useOffchainFractions(walletClient, publicClient, CHAIN_ID) {
1874
2090
  return hash;
1875
2091
  }
1876
2092
  catch (error) {
2093
+ sentryCaptureException(error, {
2094
+ action: "closeFraction",
2095
+ chainId: walletClient?.chain?.id,
2096
+ contract: ADDRESSES.OFFCHAIN_FRACTIONS,
2097
+ creator,
2098
+ id,
2099
+ });
1877
2100
  throw new Error(parseViemError(error));
1878
2101
  }
1879
2102
  finally {
@@ -1996,6 +2219,19 @@ function useOffchainFractions(walletClient, publicClient, CHAIN_ID) {
1996
2219
  assertPublicClient(publicClient);
1997
2220
  try {
1998
2221
  setIsProcessing(true);
2222
+ sentryAddBreadcrumb({
2223
+ category: "offchain-fractions",
2224
+ message: "setRefundDetails.start",
2225
+ level: "info",
2226
+ data: {
2227
+ chainId: walletClient?.chain?.id,
2228
+ contract: ADDRESSES.OFFCHAIN_FRACTIONS,
2229
+ creator,
2230
+ id,
2231
+ refundTo,
2232
+ useCounterfactualAddress,
2233
+ },
2234
+ });
1999
2235
  // Validate parameters
2000
2236
  if (!creator || !id || !refundTo) {
2001
2237
  throw new Error(OffchainFractionsError.INVALID_PARAMETERS);
@@ -2020,6 +2256,13 @@ function useOffchainFractions(walletClient, publicClient, CHAIN_ID) {
2020
2256
  });
2021
2257
  }
2022
2258
  catch (simulationError) {
2259
+ sentryCaptureException(simulationError, {
2260
+ action: "setRefundDetails.simulate",
2261
+ chainId: walletClient?.chain?.id,
2262
+ contract: ADDRESSES.OFFCHAIN_FRACTIONS,
2263
+ creator,
2264
+ id,
2265
+ });
2023
2266
  throw new Error(parseViemError(simulationError));
2024
2267
  }
2025
2268
  // Execute the transaction
@@ -2040,6 +2283,14 @@ function useOffchainFractions(walletClient, publicClient, CHAIN_ID) {
2040
2283
  return hash;
2041
2284
  }
2042
2285
  catch (error) {
2286
+ sentryCaptureException(error, {
2287
+ action: "setRefundDetails",
2288
+ chainId: walletClient?.chain?.id,
2289
+ contract: ADDRESSES.OFFCHAIN_FRACTIONS,
2290
+ creator,
2291
+ id,
2292
+ refundTo,
2293
+ });
2043
2294
  throw new Error(parseViemError(error));
2044
2295
  }
2045
2296
  finally {
@@ -2056,6 +2307,17 @@ function useOffchainFractions(walletClient, publicClient, CHAIN_ID) {
2056
2307
  assertPublicClient(publicClient);
2057
2308
  try {
2058
2309
  setIsProcessing(true);
2310
+ sentryAddBreadcrumb({
2311
+ category: "offchain-fractions",
2312
+ message: "setRefundOperatorStatus.start",
2313
+ level: "info",
2314
+ data: {
2315
+ chainId: walletClient?.chain?.id,
2316
+ contract: ADDRESSES.OFFCHAIN_FRACTIONS,
2317
+ refundOperator,
2318
+ isApproved,
2319
+ },
2320
+ });
2059
2321
  // Validate parameters
2060
2322
  if (!refundOperator) {
2061
2323
  throw new Error(OffchainFractionsError.INVALID_PARAMETERS);
@@ -2075,6 +2337,13 @@ function useOffchainFractions(walletClient, publicClient, CHAIN_ID) {
2075
2337
  });
2076
2338
  }
2077
2339
  catch (simulationError) {
2340
+ sentryCaptureException(simulationError, {
2341
+ action: "setRefundOperatorStatus.simulate",
2342
+ chainId: walletClient?.chain?.id,
2343
+ contract: ADDRESSES.OFFCHAIN_FRACTIONS,
2344
+ refundOperator,
2345
+ isApproved,
2346
+ });
2078
2347
  throw new Error(parseViemError(simulationError));
2079
2348
  }
2080
2349
  // Execute the transaction
@@ -2090,6 +2359,13 @@ function useOffchainFractions(walletClient, publicClient, CHAIN_ID) {
2090
2359
  return hash;
2091
2360
  }
2092
2361
  catch (error) {
2362
+ sentryCaptureException(error, {
2363
+ action: "setRefundOperatorStatus",
2364
+ chainId: walletClient?.chain?.id,
2365
+ contract: ADDRESSES.OFFCHAIN_FRACTIONS,
2366
+ refundOperator,
2367
+ isApproved,
2368
+ });
2093
2369
  throw new Error(parseViemError(error));
2094
2370
  }
2095
2371
  finally {
@@ -2527,6 +2803,16 @@ function ControlRouter(baseUrl) {
2527
2803
  const stakeGctl = async (stakeRequest) => {
2528
2804
  isStaking = true;
2529
2805
  try {
2806
+ sentryAddBreadcrumb({
2807
+ category: "control-api",
2808
+ message: "POST /stake",
2809
+ level: "info",
2810
+ data: {
2811
+ baseUrl,
2812
+ wallet: stakeRequest.wallet,
2813
+ regionId: stakeRequest.regionId,
2814
+ },
2815
+ });
2530
2816
  await request(`/stake`, {
2531
2817
  method: "POST",
2532
2818
  headers: { "Content-Type": "application/json" },
@@ -2535,6 +2821,14 @@ function ControlRouter(baseUrl) {
2535
2821
  return true;
2536
2822
  }
2537
2823
  catch (error) {
2824
+ sentryCaptureException(error, {
2825
+ action: "stakeGctl",
2826
+ baseUrl,
2827
+ wallet: stakeRequest.wallet,
2828
+ regionId: stakeRequest.regionId,
2829
+ amount: stakeRequest.amount,
2830
+ deadline: stakeRequest.deadline,
2831
+ });
2538
2832
  throw new Error(parseApiError$4(error));
2539
2833
  }
2540
2834
  finally {
@@ -2544,6 +2838,16 @@ function ControlRouter(baseUrl) {
2544
2838
  const unstakeGctl = async (unstakeRequest) => {
2545
2839
  isUnstaking = true;
2546
2840
  try {
2841
+ sentryAddBreadcrumb({
2842
+ category: "control-api",
2843
+ message: "POST /unstake",
2844
+ level: "info",
2845
+ data: {
2846
+ baseUrl,
2847
+ wallet: unstakeRequest.wallet,
2848
+ regionId: unstakeRequest.regionId,
2849
+ },
2850
+ });
2547
2851
  await request(`/unstake`, {
2548
2852
  method: "POST",
2549
2853
  headers: { "Content-Type": "application/json" },
@@ -2552,6 +2856,14 @@ function ControlRouter(baseUrl) {
2552
2856
  return true;
2553
2857
  }
2554
2858
  catch (error) {
2859
+ sentryCaptureException(error, {
2860
+ action: "unstakeGctl",
2861
+ baseUrl,
2862
+ wallet: unstakeRequest.wallet,
2863
+ regionId: unstakeRequest.regionId,
2864
+ amount: unstakeRequest.amount,
2865
+ deadline: unstakeRequest.deadline,
2866
+ });
2555
2867
  throw new Error(parseApiError$4(error));
2556
2868
  }
2557
2869
  finally {
@@ -2561,6 +2873,17 @@ function ControlRouter(baseUrl) {
2561
2873
  const restakeGctl = async (restakeRequest) => {
2562
2874
  isRestaking = true;
2563
2875
  try {
2876
+ sentryAddBreadcrumb({
2877
+ category: "control-api",
2878
+ message: "POST /restake",
2879
+ level: "info",
2880
+ data: {
2881
+ baseUrl,
2882
+ wallet: restakeRequest.wallet,
2883
+ fromZoneId: restakeRequest.fromZoneId,
2884
+ toZoneId: restakeRequest.toZoneId,
2885
+ },
2886
+ });
2564
2887
  await request(`/restake`, {
2565
2888
  method: "POST",
2566
2889
  headers: { "Content-Type": "application/json" },
@@ -2569,6 +2892,15 @@ function ControlRouter(baseUrl) {
2569
2892
  return true;
2570
2893
  }
2571
2894
  catch (error) {
2895
+ sentryCaptureException(error, {
2896
+ action: "restakeGctl",
2897
+ baseUrl,
2898
+ wallet: restakeRequest.wallet,
2899
+ fromZoneId: restakeRequest.fromZoneId,
2900
+ toZoneId: restakeRequest.toZoneId,
2901
+ amount: restakeRequest.amount,
2902
+ deadline: restakeRequest.deadline,
2903
+ });
2572
2904
  throw new Error(parseApiError$4(error));
2573
2905
  }
2574
2906
  finally {
@@ -2578,6 +2910,12 @@ function ControlRouter(baseUrl) {
2578
2910
  const retryFailedOperation = async (operationId) => {
2579
2911
  isRetryingFailedOperation = true;
2580
2912
  try {
2913
+ sentryAddBreadcrumb({
2914
+ category: "control-api",
2915
+ message: "POST /operations/failed/:id/retry",
2916
+ level: "info",
2917
+ data: { baseUrl, operationId },
2918
+ });
2581
2919
  await request(`/operations/failed/${operationId}/retry`, {
2582
2920
  method: "POST",
2583
2921
  headers: { "Content-Type": "application/json" },
@@ -2585,6 +2923,11 @@ function ControlRouter(baseUrl) {
2585
2923
  return true;
2586
2924
  }
2587
2925
  catch (error) {
2926
+ sentryCaptureException(error, {
2927
+ action: "retryFailedOperation",
2928
+ baseUrl,
2929
+ operationId,
2930
+ });
2588
2931
  throw new Error(parseApiError$4(error));
2589
2932
  }
2590
2933
  finally {
@@ -2594,6 +2937,18 @@ function ControlRouter(baseUrl) {
2594
2937
  const payProtocolDepositUsingStakedControl = async (paymentRequest) => {
2595
2938
  isPayingProtocolDepositUsingStakedControl = true;
2596
2939
  try {
2940
+ sentryAddBreadcrumb({
2941
+ category: "control-api",
2942
+ message: "POST /pay-protocol-deposit-staked",
2943
+ level: "info",
2944
+ data: {
2945
+ baseUrl,
2946
+ wallet: paymentRequest.wallet,
2947
+ regionId: paymentRequest.regionId,
2948
+ applicationId: paymentRequest.applicationId,
2949
+ amount: paymentRequest.amount,
2950
+ },
2951
+ });
2597
2952
  const response = await request(`/pay-protocol-deposit-staked`, {
2598
2953
  method: "POST",
2599
2954
  headers: { "Content-Type": "application/json" },
@@ -2602,6 +2957,14 @@ function ControlRouter(baseUrl) {
2602
2957
  return response;
2603
2958
  }
2604
2959
  catch (error) {
2960
+ sentryCaptureException(error, {
2961
+ action: "payProtocolDepositUsingStakedControl",
2962
+ baseUrl,
2963
+ wallet: paymentRequest.wallet,
2964
+ regionId: paymentRequest.regionId,
2965
+ applicationId: paymentRequest.applicationId,
2966
+ amount: paymentRequest.amount,
2967
+ });
2605
2968
  throw new Error(parseApiError$4(error));
2606
2969
  }
2607
2970
  finally {
@@ -2611,6 +2974,15 @@ function ControlRouter(baseUrl) {
2611
2974
  const migrateUser = async (migrateRequest) => {
2612
2975
  isMigratingUser = true;
2613
2976
  try {
2977
+ sentryAddBreadcrumb({
2978
+ category: "control-api",
2979
+ message: "POST /migrate-user",
2980
+ level: "info",
2981
+ data: {
2982
+ baseUrl,
2983
+ wallet: migrateRequest.wallet,
2984
+ },
2985
+ });
2614
2986
  const response = await request(`/migrate-user`, {
2615
2987
  method: "POST",
2616
2988
  headers: { "Content-Type": "application/json" },
@@ -2619,6 +2991,12 @@ function ControlRouter(baseUrl) {
2619
2991
  return response;
2620
2992
  }
2621
2993
  catch (error) {
2994
+ sentryCaptureException(error, {
2995
+ action: "migrateUser",
2996
+ baseUrl,
2997
+ wallet: migrateRequest.wallet,
2998
+ deadline: migrateRequest.deadline,
2999
+ });
2622
3000
  throw new Error(parseApiError$4(error));
2623
3001
  }
2624
3002
  finally {
@@ -3392,7 +3770,6 @@ function RegionRouter(baseUrl) {
3392
3770
  // -------------------------------------------------------------------------
3393
3771
  let cachedRegions = [];
3394
3772
  let isLoading = false;
3395
- let isCreatingRegion = false;
3396
3773
  // -------------------------------------------------------------------------
3397
3774
  // Queries
3398
3775
  // -------------------------------------------------------------------------
@@ -3449,27 +3826,6 @@ function RegionRouter(baseUrl) {
3449
3826
  throw new Error(parseApiError$3(error));
3450
3827
  }
3451
3828
  };
3452
- // -------------------------------------------------------------------------
3453
- // Mutations
3454
- // -------------------------------------------------------------------------
3455
- const createRegion = async (payload) => {
3456
- isCreatingRegion = true;
3457
- try {
3458
- await request(`/regions/create`, {
3459
- method: "POST",
3460
- headers: { "Content-Type": "application/json" },
3461
- body: JSON.stringify(payload),
3462
- });
3463
- // Refresh the local cache after successful creation
3464
- await fetchRegions();
3465
- }
3466
- catch (error) {
3467
- throw new Error(parseApiError$3(error));
3468
- }
3469
- finally {
3470
- isCreatingRegion = false;
3471
- }
3472
- };
3473
3829
  // Kickstarter-related logic moved to kickstarter-router.ts
3474
3830
  // -------------------------------------------------------------------------
3475
3831
  // Helpers (derived)
@@ -3518,7 +3874,6 @@ function RegionRouter(baseUrl) {
3518
3874
  fetchRegionByIdOrSlug,
3519
3875
  fetchRegionSolarFarms,
3520
3876
  getRegionByCode,
3521
- createRegion,
3522
3877
  // Cached data & flags
3523
3878
  get regions() {
3524
3879
  return cachedRegions;
@@ -3526,9 +3881,6 @@ function RegionRouter(baseUrl) {
3526
3881
  get isLoading() {
3527
3882
  return isLoading;
3528
3883
  },
3529
- get isCreatingRegion() {
3530
- return isCreatingRegion;
3531
- },
3532
3884
  };
3533
3885
  }
3534
3886
 
@@ -3564,6 +3916,16 @@ function KickstarterRouter(baseUrl) {
3564
3916
  const createKickstarter = async (payload) => {
3565
3917
  isCreatingKickstarter = true;
3566
3918
  try {
3919
+ sentryAddBreadcrumb({
3920
+ category: "control-api",
3921
+ message: "POST /kickstarters",
3922
+ level: "info",
3923
+ data: {
3924
+ baseUrl,
3925
+ code: payload.code,
3926
+ creatorWallet: payload.creatorWallet,
3927
+ },
3928
+ });
3567
3929
  const exists = Boolean(regionMetadata[payload.code]);
3568
3930
  if (!exists) {
3569
3931
  throw new Error(`Unknown region code: ${payload.code}`);
@@ -3576,6 +3938,14 @@ function KickstarterRouter(baseUrl) {
3576
3938
  return data;
3577
3939
  }
3578
3940
  catch (error) {
3941
+ sentryCaptureException(error, {
3942
+ action: "createKickstarter",
3943
+ baseUrl,
3944
+ code: payload.code,
3945
+ creatorWallet: payload.creatorWallet,
3946
+ title: payload.title,
3947
+ regionName: payload.regionName,
3948
+ });
3579
3949
  throw new Error(parseApiError$2(error));
3580
3950
  }
3581
3951
  finally {
@@ -3602,6 +3972,12 @@ function KickstarterRouter(baseUrl) {
3602
3972
  };
3603
3973
  const commitKickstarter = async (kickstarterId, payload) => {
3604
3974
  try {
3975
+ sentryAddBreadcrumb({
3976
+ category: "control-api",
3977
+ message: "POST /kickstarters/commit/:id",
3978
+ level: "info",
3979
+ data: { baseUrl, kickstarterId },
3980
+ });
3605
3981
  const data = await request(`/kickstarters/commit/${encodeURIComponent(kickstarterId)}`, {
3606
3982
  method: "POST",
3607
3983
  headers: { "Content-Type": "application/json" },
@@ -3610,6 +3986,13 @@ function KickstarterRouter(baseUrl) {
3610
3986
  return data;
3611
3987
  }
3612
3988
  catch (error) {
3989
+ sentryCaptureException(error, {
3990
+ action: "commitKickstarter",
3991
+ baseUrl,
3992
+ kickstarterId,
3993
+ wallet: payload.wallet,
3994
+ amount: payload.amount,
3995
+ });
3613
3996
  throw new Error(parseApiError$2(error));
3614
3997
  }
3615
3998
  };
@@ -3776,6 +4159,12 @@ function FarmsRouter(baseUrl) {
3776
4159
  };
3777
4160
  const estimateRewardScore = async (params) => {
3778
4161
  try {
4162
+ sentryAddBreadcrumb({
4163
+ category: "control-api",
4164
+ message: "POST /farms/estimate-reward-score",
4165
+ level: "info",
4166
+ data: { baseUrl, regionId: params.regionId, userId: params.userId },
4167
+ });
3779
4168
  const data = await request("/farms/estimate-reward-score", {
3780
4169
  method: "POST",
3781
4170
  headers: {
@@ -3792,11 +4181,24 @@ function FarmsRouter(baseUrl) {
3792
4181
  return data;
3793
4182
  }
3794
4183
  catch (error) {
4184
+ sentryCaptureException(error, {
4185
+ action: "estimateRewardScore",
4186
+ baseUrl,
4187
+ userId: params.userId,
4188
+ regionId: params.regionId,
4189
+ paymentCurrency: params.paymentCurrency,
4190
+ });
3795
4191
  throw new Error(parseApiError(error));
3796
4192
  }
3797
4193
  };
3798
4194
  const estimateRewardScoresBatch = async (params) => {
3799
4195
  try {
4196
+ sentryAddBreadcrumb({
4197
+ category: "control-api",
4198
+ message: "POST /farms/estimate-reward-scores-batch",
4199
+ level: "info",
4200
+ data: { baseUrl },
4201
+ });
3800
4202
  const data = await request("/farms/estimate-reward-scores-batch", {
3801
4203
  method: "POST",
3802
4204
  headers: {
@@ -3807,11 +4209,22 @@ function FarmsRouter(baseUrl) {
3807
4209
  return data;
3808
4210
  }
3809
4211
  catch (error) {
4212
+ sentryCaptureException(error, {
4213
+ action: "estimateRewardScoresBatch",
4214
+ baseUrl,
4215
+ farmsCount: params.farms?.length,
4216
+ });
3810
4217
  throw new Error(parseApiError(error));
3811
4218
  }
3812
4219
  };
3813
4220
  const calculateMiningScoresBatch = async (params) => {
3814
4221
  try {
4222
+ sentryAddBreadcrumb({
4223
+ category: "control-api",
4224
+ message: "POST /farms/mining-scores-batch",
4225
+ level: "info",
4226
+ data: { baseUrl },
4227
+ });
3815
4228
  const data = await request("/farms/mining-scores-batch", {
3816
4229
  method: "POST",
3817
4230
  headers: {
@@ -3822,6 +4235,11 @@ function FarmsRouter(baseUrl) {
3822
4235
  return data;
3823
4236
  }
3824
4237
  catch (error) {
4238
+ sentryCaptureException(error, {
4239
+ action: "calculateMiningScoresBatch",
4240
+ baseUrl,
4241
+ farmsCount: params.farms?.length,
4242
+ });
3825
4243
  throw new Error(parseApiError(error));
3826
4244
  }
3827
4245
  };
@@ -3835,5 +4253,5 @@ function FarmsRouter(baseUrl) {
3835
4253
  };
3836
4254
  }
3837
4255
 
3838
- export { ControlRouter as C, DECIMALS_BY_TOKEN as D, FarmsRouter as F, GLOW_WEIGHT_DECIMAL_PRECISION as G, HUB_URL as H, KickstarterRouter as K, MAX_WEIGHT as M, OFF_CHAIN_PAYMENT_CURRENCIES as O, PAYMENT_CURRENCIES as P, RegionRouter as R, STAKING_DIRECTIONS as S, TRANSFER_TYPES as T, USDG_WEIGHT_DECIMAL_PRECISION as U, WalletsRouter as W, useOffchainFractions as a, REGIONS as b, KICKSTARTER_STATUS as c, ForwarderError as d, OffchainFractionsError as e, allRegions as f, usStates as g, countries as h, FORWARDER_ABI as i, OFFCHAIN_FRACTIONS_ABI as j, getAddresses as k, GCA_URLS as l, parseEthersError as m, waitForEthersTransactionWithRetry as n, parseViemError as p, regionMetadata as r, useForwarder as u, waitForViemTransactionWithRetry as w };
3839
- //# sourceMappingURL=farms-router-Cxbn5Hap.js.map
4256
+ export { ControlRouter as C, DECIMALS_BY_TOKEN as D, FarmsRouter as F, GLOW_WEIGHT_DECIMAL_PRECISION as G, HUB_URL as H, KickstarterRouter as K, MAX_WEIGHT as M, OFF_CHAIN_PAYMENT_CURRENCIES as O, PAYMENT_CURRENCIES as P, RegionRouter as R, STAKING_DIRECTIONS as S, TRANSFER_TYPES as T, USDG_WEIGHT_DECIMAL_PRECISION as U, WalletsRouter as W, useOffchainFractions as a, REGIONS as b, configureSentry as c, KICKSTARTER_STATUS as d, ForwarderError as e, OffchainFractionsError as f, allRegions as g, usStates as h, countries as i, FORWARDER_ABI as j, OFFCHAIN_FRACTIONS_ABI as k, getAddresses as l, GCA_URLS as m, parseEthersError as n, waitForEthersTransactionWithRetry as o, parseViemError as p, regionMetadata as r, useForwarder as u, waitForViemTransactionWithRetry as w };
4257
+ //# sourceMappingURL=farms-router-C_7Ys4An.js.map