@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.
- package/README.md +102 -34
- package/dist/cjs/browser.d.ts +1 -0
- package/dist/cjs/browser.js +2 -1
- package/dist/cjs/browser.js.map +1 -1
- package/dist/cjs/{farms-router-CCva--xp.js → farms-router-C8V_F0vY.js} +447 -28
- package/dist/cjs/farms-router-C8V_F0vY.js.map +1 -0
- package/dist/cjs/index.d.ts +1 -0
- package/dist/cjs/index.js +2 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/lib/control-api/region-router.d.ts +1 -3
- package/dist/cjs/utils/sentry.d.ts +21 -0
- package/dist/esm/browser.d.ts +1 -0
- package/dist/esm/browser.js +2 -2
- package/dist/esm/{farms-router-Cxbn5Hap.js → farms-router-C_7Ys4An.js} +447 -29
- package/dist/esm/farms-router-C_7Ys4An.js.map +1 -0
- package/dist/esm/index.d.ts +1 -0
- package/dist/esm/index.js +2 -2
- package/dist/esm/lib/control-api/region-router.d.ts +1 -3
- package/dist/esm/utils/sentry.d.ts +21 -0
- package/package.json +1 -1
- package/src/browser.ts +1 -0
- package/src/index.ts +1 -0
- package/src/lib/control-api/control-router.ts +106 -0
- package/src/lib/control-api/farms-router.ts +39 -0
- package/src/lib/control-api/kickstarter-router.ts +35 -0
- package/src/lib/control-api/region-router.ts +0 -26
- package/src/lib/hooks/use-forwarder.ts +52 -0
- package/src/lib/hooks/use-offchain-fractions.ts +178 -1
- package/src/utils/sentry.ts +89 -0
- package/dist/cjs/farms-router-CCva--xp.js.map +0 -1
- package/dist/esm/farms-router-Cxbn5Hap.js.map +0 -1
|
@@ -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
|
-
|
|
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-
|
|
4286
|
+
//# sourceMappingURL=farms-router-C8V_F0vY.js.map
|