@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
|
@@ -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
|
-
|
|
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,
|
|
3839
|
-
//# sourceMappingURL=farms-router-
|
|
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
|