@glowlabs-org/utils 0.2.89 → 0.2.90

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"farms-router-ClIWm9AQ.js","sources":["../../src/constants/urls.ts","../../src/constants/weights.ts","../../src/lib/abis/forwarderABI.ts","../../src/lib/abis/erc20.abi.ts","../../src/constants/addresses.ts","../../src/lib/hooks/use-forwarder.ts","../../src/lib/control-api/control-router.ts","../../src/utils/generate-slug.ts","../../src/lib/region-metadata.ts","../../src/lib/control-api/region-router.ts","../../src/lib/control-api/kickstarter-router.ts","../../src/lib/control-api/wallets-router.ts","../../src/lib/control-api/farms-router.ts"],"sourcesContent":["export const HUB_URL = \"https://glow.org\";\n\nexport const GCA_URLS = [\"http://95.217.194.59:35015\"];\n","/**\n * @dev This is actually not as intuitive as it seems.\n * Glow actually has 18 decimals, but glow weight is based on the amount of protocol fees (USDC) that the farm paid\n * Therefore, the weight is based on the amount of USDC that was paid, which has 8 decimals\n */\nexport const GLOW_WEIGHT_DECIMAL_PRECISION = 8;\n\n/**\n * @dev This is actually not as intuitive as it seems.\n * USDG weight is based on the amount of carbon credits produced, but the max value of a weight is ((2*64)-1) / 5 so we need to choose sensible precision to make sure that number never overflows\n */\nexport const USDG_WEIGHT_DECIMAL_PRECISION = 8;\n\nexport const MAX_WEIGHT: bigint =\n (BigInt(2) ** BigInt(64) - BigInt(1)) / BigInt(5);\n","export const FORWARDER_ABI = [\n {\n inputs: [\n { internalType: \"contract USDG\", name: \"_usdg\", type: \"address\" },\n { internalType: \"contract IERC20\", name: \"_usdc\", type: \"address\" },\n ],\n stateMutability: \"payable\",\n type: \"constructor\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"target\", type: \"address\" }],\n name: \"AddressEmptyCode\",\n type: \"error\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"account\", type: \"address\" }],\n name: \"AddressInsufficientBalance\",\n type: \"error\",\n },\n { inputs: [], name: \"FailedInnerCall\", type: \"error\" },\n { inputs: [], name: \"MaxLengthExceeded\", type: \"error\" },\n { inputs: [], name: \"ReentrancyGuardReentrantCall\", type: \"error\" },\n {\n inputs: [{ internalType: \"address\", name: \"token\", type: \"address\" }],\n name: \"SafeERC20FailedOperation\",\n type: \"error\",\n },\n { inputs: [], name: \"ZeroAmount\", type: \"error\" },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"address\", name: \"from\", type: \"address\" },\n { indexed: true, internalType: \"address\", name: \"to\", type: \"address\" },\n {\n indexed: true,\n internalType: \"address\",\n name: \"token\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"string\",\n name: \"message\",\n type: \"string\",\n },\n ],\n name: \"Forward\",\n type: \"event\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"token\", type: \"address\" },\n { internalType: \"address\", name: \"to\", type: \"address\" },\n { internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n { internalType: \"string\", name: \"message\", type: \"string\" },\n ],\n name: \"forward\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"i_USDC\",\n outputs: [{ internalType: \"contract IERC20\", name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"i_USDG\",\n outputs: [{ internalType: \"contract USDG\", name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"nextNonce\",\n outputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n { internalType: \"address\", name: \"to\", type: \"address\" },\n { internalType: \"string\", name: \"message\", type: \"string\" },\n ],\n name: \"swapUSDCAndForwardUSDG\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n] as const;\n","export const ERC20_ABI = [\n {\n inputs: [\n { name: \"spender\", type: \"address\" },\n { name: \"amount\", type: \"uint256\" },\n ],\n name: \"approve\",\n outputs: [{ name: \"\", type: \"bool\" }],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { name: \"owner\", type: \"address\" },\n { name: \"spender\", type: \"address\" },\n ],\n name: \"allowance\",\n outputs: [{ name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { name: \"to\", type: \"address\" },\n { name: \"amount\", type: \"uint256\" },\n ],\n name: \"transfer\",\n outputs: [{ name: \"\", type: \"bool\" }],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ name: \"account\", type: \"address\" }],\n name: \"balanceOf\",\n outputs: [{ name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { name: \"account\", type: \"address\" },\n { name: \"amount\", type: \"uint256\" },\n ],\n name: \"mint\",\n outputs: [{ name: \"\", type: \"bool\" }],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n];\n","export type ContractKeys =\n | \"USDC\"\n | \"FORWARDER\"\n | \"FOUNDATION_WALLET\"\n | \"GLW\"\n | \"USDG\"\n | \"USDG_REDEMPTION\"\n | \"IMPACT_CATALYST\"\n | \"AUDIT_FEE_WALLET\"\n | \"UNISWAP_V2_ROUTER\"\n | \"UNISWAP_V2_FACTORY\"\n | \"USDG_UNISWAP\"\n | \"GLW_UNISWAP\";\n\n// Contract-specific addresses\nconst mainnetAddresses: Record<ContractKeys, `0x${string}`> = {\n AUDIT_FEE_WALLET: \"0x3ff5af3333ddc6048d98849ec5e67868494693c9\",\n IMPACT_CATALYST: \"0x552Fbb4E0269fd5036daf72Ec006AAF6C958F4Fa\",\n USDG_REDEMPTION: \"0x1c2cA537757e1823400F857EdBe72B55bbAe0F08\",\n USDG: \"0xe010ec500720bE9EF3F82129E7eD2Ee1FB7955F2\",\n GLW: \"0xf4fbC617A5733EAAF9af08E1Ab816B103388d8B6\",\n USDC: \"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48\",\n USDG_UNISWAP: \"0xe010ec500720bE9EF3F82129E7eD2Ee1FB7955F2\",\n GLW_UNISWAP: \"0xf4fbC617A5733EAAF9af08E1Ab816B103388d8B6\",\n FORWARDER: \"0x240CBe07a047ce484DCa2E3Ae15d4907Aba41BE2\",\n FOUNDATION_WALLET: \"0xc5174BBf649a92F9941e981af68AaA14Dd814F85\",\n UNISWAP_V2_ROUTER: \"0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D\",\n UNISWAP_V2_FACTORY: \"0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f\",\n};\n\nconst sepoliaAddresses: Record<ContractKeys, `0x${string}`> = {\n AUDIT_FEE_WALLET: \"0x3ff5af3333ddc6048d98849ec5e67868494693c9\",\n IMPACT_CATALYST: \"0xb793Ed3CD94357f0e1933b0bd19F921b99f4C72a\",\n USDG_REDEMPTION: \"0x04829038A6664C16eC994BFb87754Fa621e51135\",\n USDG: \"0xda78313A3fF949890112c1B746AB1c75d1b1c17B\",\n GLW: \"0x2039161fce4c8e5cf5fe64e17fd290e8dff3c9bd\",\n USDC: \"0x93c898be98cd2618ba84a6dccf5003d3bbe40356\",\n USDG_UNISWAP: \"0x2a085A3aEA8982396533327c854753Ce521B666d\",\n GLW_UNISWAP: \"0x8e27016D0B866a56CE74A1a280c749dD679bb0Fa\",\n FORWARDER: \"0x1fb285dDFCbC0456d655F8DC7C637E33c5568858\",\n FOUNDATION_WALLET: \"0x5e230FED487c86B90f6508104149F087d9B1B0A7\",\n UNISWAP_V2_ROUTER: \"0xeE567Fe1712Faf6149d80dA1E6934E354124CfE3\",\n UNISWAP_V2_FACTORY: \"0xF62c03E08ada871A0bEb309762E260a7a6a880E6\",\n};\n\nexport const getAddresses = (\n CHAIN_ID: number\n): Record<ContractKeys, `0x${string}`> => {\n switch (CHAIN_ID) {\n case 1:\n return mainnetAddresses;\n case 11155111:\n return sepoliaAddresses;\n default:\n console.warn(\n `Unsupported chain ID: ${CHAIN_ID}, falling back to mainnet addresses`\n );\n return mainnetAddresses;\n }\n};\n\nexport const DECIMALS_BY_TOKEN: Record<\n \"USDC\" | \"USDG\" | \"GCTL\" | \"GLW\",\n number\n> = {\n USDC: 6,\n USDG: 6,\n GCTL: 6,\n GLW: 18,\n};\n","import { Contract, MaxUint256, type Signer } from \"ethers\";\nimport { FORWARDER_ABI } from \"../abis/forwarderABI\";\nimport { ERC20_ABI } from \"../abis/erc20.abi\";\nimport { getAddresses } from \"../../constants/addresses\";\nimport { formatEther } from \"viem\";\nimport { PendingTransferType } from \"../types\";\n\nexport enum ForwarderError {\n CONTRACT_NOT_AVAILABLE = \"Contract not available\",\n SIGNER_NOT_AVAILABLE = \"Signer not available\",\n UNKNOWN_ERROR = \"Unknown error\",\n INVALID_FORWARD_TYPE = \"Invalid forward type\",\n MISSING_REQUIRED_PARAMS = \"Missing required parameters\",\n}\n\n// Forward types based on API router documentation\nexport type ForwardType = PendingTransferType;\n\n// Currency types\nexport type Currency = \"USDC\" | \"GLW\" | \"USDG\";\n\n// Forward parameters interface\nexport interface ForwardParams {\n amount: bigint;\n userAddress: string;\n type: ForwardType;\n currency?: Currency;\n applicationId?: string;\n farmId?: string;\n regionId?: number;\n kickstarterId?: string;\n}\n\n// Utility to extract the most useful revert reason from an ethers error object\nfunction parseEthersError(error: unknown): string {\n if (!error) return \"Unknown error\";\n const possibleError: any = error;\n\n // If the error originates from a callStatic it will often be found at `error?.error?.body`\n if (possibleError?.error?.body) {\n try {\n const body = JSON.parse(possibleError.error.body);\n // Hardhat style errors\n if (body?.error?.message) return body.error.message as string;\n } catch {}\n }\n\n // Found on MetaMask/Alchemy shape errors\n if (possibleError?.data?.message) return possibleError.data.message as string;\n if (possibleError?.error?.message)\n return possibleError.error.message as string;\n\n // Standard ethers v5 message\n if (possibleError?.reason) return possibleError.reason as string;\n if (possibleError?.message) return possibleError.message as string;\n\n return ForwarderError.UNKNOWN_ERROR;\n}\n\n// Type-guard style helper to ensure a signer exists throughout the rest of the function.\nfunction assertSigner(\n maybeSigner: Signer | undefined\n): asserts maybeSigner is Signer {\n if (!maybeSigner) {\n throw new Error(ForwarderError.SIGNER_NOT_AVAILABLE);\n }\n}\n\nexport function useForwarder(signer: Signer | undefined, CHAIN_ID: number) {\n // Use dynamic addresses based on chain configuration\n const ADDRESSES = getAddresses(CHAIN_ID);\n\n // Framework-agnostic processing flag\n let isProcessing = false;\n const setIsProcessing = (value: boolean) => {\n isProcessing = value;\n };\n\n // Returns a contract instance for Forwarder\n function getForwarderContract() {\n assertSigner(signer);\n return new Contract(ADDRESSES.FORWARDER, FORWARDER_ABI, signer);\n }\n\n /**\n * Construct the message for the forward call based on type and parameters\n */\n function constructForwardMessage(params: ForwardParams): string {\n const {\n type,\n applicationId,\n farmId,\n regionId,\n userAddress,\n kickstarterId,\n } = params;\n\n switch (type) {\n case \"PayProtocolFeeAndMintGCTLAndStake\":\n if (!applicationId) {\n throw new Error(ForwarderError.MISSING_REQUIRED_PARAMS);\n }\n return `PayProtocolFeeAndMintGCTLAndStake::${applicationId}`;\n\n case \"PayProtocolFee\":\n if (!applicationId) {\n throw new Error(ForwarderError.MISSING_REQUIRED_PARAMS);\n }\n return `PayProtocolFee::${applicationId}`;\n\n case \"SponsorProtocolFee\":\n if (!applicationId) {\n throw new Error(ForwarderError.MISSING_REQUIRED_PARAMS);\n }\n return `SponsorProtocolFee::${applicationId}`;\n\n case \"SponsorProtocolFeeAndMintGCTLAndStake\":\n if (!applicationId) {\n throw new Error(ForwarderError.MISSING_REQUIRED_PARAMS);\n }\n return `SponsorProtocolFeeAndMintGCTLAndStake::${applicationId}`;\n\n case \"MintGCTLAndStake\":\n if (!regionId) {\n throw new Error(ForwarderError.MISSING_REQUIRED_PARAMS);\n }\n return `MintGCTLAndStake::${regionId}`;\n\n case \"MintGCTL\":\n if (!userAddress) {\n throw new Error(ForwarderError.MISSING_REQUIRED_PARAMS);\n }\n return `MintGCTL::${userAddress}`;\n\n case \"BuySolarFarm\":\n if (!farmId) {\n throw new Error(ForwarderError.MISSING_REQUIRED_PARAMS);\n }\n return `BuySolarFarm::${farmId}`;\n\n case \"PayAuditFees\":\n if (!applicationId) {\n throw new Error(ForwarderError.MISSING_REQUIRED_PARAMS);\n }\n return `PayAuditFees::${applicationId}`;\n\n case \"CommitKickstarter\":\n if (!kickstarterId) {\n throw new Error(ForwarderError.MISSING_REQUIRED_PARAMS);\n }\n return `CommitKickstarter::${kickstarterId}`;\n\n default:\n throw new Error(ForwarderError.INVALID_FORWARD_TYPE);\n }\n }\n\n /**\n * Get the appropriate token contract based on currency\n */\n function getTokenContract(currency: Currency = \"USDC\") {\n assertSigner(signer);\n\n let tokenAddress: string;\n switch (currency) {\n case \"USDC\":\n tokenAddress = ADDRESSES.USDC;\n break;\n case \"GLW\":\n tokenAddress = ADDRESSES.GLW;\n break;\n case \"USDG\":\n tokenAddress = ADDRESSES.USDG;\n break;\n default:\n throw new Error(\n `Currency ${currency} not yet supported. Only USDC, GLW, and USDG are currently supported.`\n );\n }\n\n return new Contract(tokenAddress, ERC20_ABI, signer);\n }\n\n /**\n * Check current token allowance for the forwarder contract\n * @param owner The wallet address to check allowance for\n * @param currency The currency to check allowance for\n */\n async function checkTokenAllowance(\n owner: string,\n currency: Currency = \"USDC\"\n ): Promise<bigint> {\n assertSigner(signer);\n\n try {\n const tokenContract = getTokenContract(currency);\n if (!tokenContract)\n throw new Error(ForwarderError.CONTRACT_NOT_AVAILABLE);\n\n const allowance: bigint = await tokenContract.allowance(\n owner,\n ADDRESSES.FORWARDER\n );\n return allowance;\n } catch (error) {\n throw new Error(parseEthersError(error));\n }\n }\n\n /**\n * Check user's token balance\n * @param owner The wallet address to check balance for\n * @param currency The currency to check balance for\n */\n async function checkTokenBalance(\n owner: string,\n currency: Currency = \"USDC\"\n ): Promise<bigint> {\n assertSigner(signer);\n\n try {\n const tokenContract = getTokenContract(currency);\n if (!tokenContract)\n throw new Error(ForwarderError.CONTRACT_NOT_AVAILABLE);\n\n const balance: bigint = await tokenContract.balanceOf(owner);\n return balance;\n } catch (error) {\n throw new Error(parseEthersError(error));\n }\n }\n\n /**\n * Approve tokens for the forwarder contract\n * @param amount Amount to approve (BigNumber)\n * @param currency The currency to approve\n */\n async function approveToken(\n amount: bigint,\n currency: Currency = \"USDC\"\n ): Promise<boolean> {\n assertSigner(signer);\n\n try {\n const tokenContract = getTokenContract(currency);\n if (!tokenContract)\n throw new Error(ForwarderError.CONTRACT_NOT_AVAILABLE);\n\n setIsProcessing(true);\n\n // Approve only the specific amount needed\n const approveTx = await tokenContract.approve(\n ADDRESSES.FORWARDER,\n amount\n );\n await approveTx.wait();\n\n return true;\n } catch (error) {\n throw new Error(parseEthersError(error));\n } finally {\n setIsProcessing(false);\n }\n }\n\n /**\n * Forward tokens through the forwarder contract with type-specific handling\n * @param params Forward parameters including type, amount, and required fields\n */\n async function forwardTokens(params: ForwardParams): Promise<string> {\n assertSigner(signer);\n\n try {\n const forwarderContract = getForwarderContract();\n if (!forwarderContract)\n throw new Error(ForwarderError.CONTRACT_NOT_AVAILABLE);\n\n setIsProcessing(true);\n\n const { amount, currency = \"USDC\" } = params;\n const tokenContract = getTokenContract(currency);\n if (!tokenContract)\n throw new Error(ForwarderError.CONTRACT_NOT_AVAILABLE);\n\n const owner = await signer.getAddress();\n\n // Construct the appropriate message for this forward type\n const message = constructForwardMessage(params);\n\n // Special handling: PayAuditFees can ONLY be USDC, and must call forward()\n const isAuditFees = params.type === \"PayAuditFees\";\n if (isAuditFees && currency !== \"USDC\") {\n throw new Error(\"PayAuditFees only supports USDC\");\n }\n\n // CommitKickstarter supports only USDC or USDG (GLW not allowed)\n const isCommitKickstarter = params.type === \"CommitKickstarter\";\n if (isCommitKickstarter && currency === \"GLW\") {\n throw new Error(\"CommitKickstarter supports only USDC or USDG\");\n }\n\n // Check allowance and approve if necessary\n const allowance: bigint = await tokenContract.allowance(\n owner,\n ADDRESSES.FORWARDER\n );\n console.log(\"allowance\", allowance.toString());\n if (allowance < amount) {\n try {\n const approveTx = await tokenContract.approve(\n ADDRESSES.FORWARDER,\n MaxUint256\n );\n await approveTx.wait();\n } catch (approveError) {\n throw new Error(\n parseEthersError(approveError) || \"Token approval failed\"\n );\n }\n }\n\n // Get the token address based on currency\n let tokenAddress: string;\n switch (currency) {\n case \"USDC\":\n tokenAddress = ADDRESSES.USDC;\n break;\n case \"USDG\":\n tokenAddress = ADDRESSES.USDG;\n break;\n case \"GLW\":\n tokenAddress = ADDRESSES.GLW;\n break;\n default:\n throw new Error(`Unsupported currency for forwarding: ${currency}`);\n }\n\n // Run a static call first to surface any revert reason (ethers v6)\n try {\n if (!isAuditFees && currency === \"USDC\") {\n await forwarderContract\n .getFunction(\"swapUSDCAndForwardUSDG\")\n .staticCall(amount, ADDRESSES.FOUNDATION_WALLET, message, {\n from: owner,\n });\n } else {\n await forwarderContract\n .getFunction(\"forward\")\n .staticCall(\n tokenAddress,\n isAuditFees\n ? ADDRESSES.AUDIT_FEE_WALLET\n : ADDRESSES.FOUNDATION_WALLET,\n amount,\n message,\n { from: owner }\n );\n }\n } catch (staticError) {\n throw new Error(parseEthersError(staticError));\n }\n\n // Execute the forward transaction\n let tx;\n if (!isAuditFees && currency === \"USDC\") {\n tx = await forwarderContract.getFunction(\"swapUSDCAndForwardUSDG\")(\n amount,\n ADDRESSES.FOUNDATION_WALLET,\n message\n );\n } else {\n tx = await forwarderContract.getFunction(\"forward\")(\n tokenAddress,\n isAuditFees\n ? ADDRESSES.AUDIT_FEE_WALLET\n : ADDRESSES.FOUNDATION_WALLET,\n amount,\n message\n );\n }\n await tx.wait();\n\n return tx.hash;\n } catch (txError: any) {\n throw new Error(parseEthersError(txError));\n } finally {\n setIsProcessing(false);\n }\n }\n\n /**\n * Forward tokens for protocol fee payment and GCTL minting with staking\n */\n async function payProtocolFeeAndMintGCTLAndStake(\n amount: bigint,\n userAddress: string,\n applicationId: string,\n regionId?: number,\n currency: Currency = \"USDC\"\n ): Promise<string> {\n assertSigner(signer);\n\n // GCTL minting only supports USDC and USDG\n if (currency === \"GLW\") {\n throw new Error(\n \"GCTL minting is not supported with GLW payment. Use USDC or USDG.\"\n );\n }\n\n return forwardTokens({\n amount,\n userAddress,\n type: \"PayProtocolFeeAndMintGCTLAndStake\",\n currency,\n applicationId,\n regionId,\n });\n }\n /**\n * Forward tokens for protocol fee payment and GCTL minting with staking\n */\n async function sponsorProtocolFeeAndMintGCTLAndStake(\n amount: bigint,\n userAddress: string,\n applicationId: string,\n currency: Currency = \"USDC\"\n ): Promise<string> {\n assertSigner(signer);\n\n if (currency === \"GLW\") {\n throw new Error(\n \"GCTL minting is not supported with GLW payment. Use USDC or USDG.\"\n );\n }\n\n return forwardTokens({\n amount,\n userAddress,\n type: \"SponsorProtocolFeeAndMintGCTLAndStake\",\n currency,\n applicationId,\n });\n }\n\n /**\n * Forward tokens for protocol fee payment only\n */\n async function payProtocolFee(\n amount: bigint,\n userAddress: string,\n applicationId: string,\n currency: Currency = \"USDC\"\n ): Promise<string> {\n assertSigner(signer);\n\n return forwardTokens({\n amount,\n userAddress,\n type: \"PayProtocolFee\",\n currency,\n applicationId,\n });\n }\n\n /**\n * Forward tokens for protocol fee payment only\n */\n async function sponsorProtocolFee(\n amount: bigint,\n userAddress: string,\n applicationId: string,\n currency: Currency = \"USDC\"\n ): Promise<string> {\n assertSigner(signer);\n\n return forwardTokens({\n amount,\n userAddress,\n type: \"SponsorProtocolFee\",\n currency,\n applicationId,\n });\n }\n\n /**\n * Forward USDC to mint GCTL and stake to a region\n */\n async function mintGCTLAndStake(\n amount: bigint,\n userAddress: string,\n regionId?: number,\n currency: Currency = \"USDC\"\n ): Promise<string> {\n assertSigner(signer);\n\n // GCTL minting only supports USDC and USDG\n if (currency === \"GLW\") {\n throw new Error(\n \"GCTL minting is not supported with GLW payment. Use USDC or USDG.\"\n );\n }\n\n return forwardTokens({\n amount,\n userAddress,\n type: \"MintGCTLAndStake\",\n currency,\n regionId,\n });\n }\n\n /**\n * Forward USDC to mint GCTL (existing functionality, keeping for compatibility)\n */\n async function mintGCTL(\n amount: bigint,\n userAddress: string,\n currency: Currency = \"USDC\"\n ): Promise<string> {\n assertSigner(signer);\n\n // GCTL minting only supports USDC and USDG\n if (currency === \"GLW\") {\n throw new Error(\n \"GCTL minting is not supported with GLW payment. Use USDC or USDG.\"\n );\n }\n\n return forwardTokens({\n amount,\n userAddress,\n type: \"MintGCTL\",\n currency,\n });\n }\n\n /**\n * Forward tokens to pay audit fees (USDC only, calls forward())\n */\n async function payAuditFees(\n amount: bigint,\n userAddress: string,\n applicationId: string\n ): Promise<string> {\n assertSigner(signer);\n\n return forwardTokens({\n amount,\n userAddress,\n type: \"PayAuditFees\",\n currency: \"USDC\",\n applicationId,\n });\n }\n\n /**\n * Forward tokens to buy a solar farm\n */\n async function buySolarFarm(\n amount: bigint,\n userAddress: string,\n farmId: string,\n currency: Currency = \"USDC\"\n ): Promise<string> {\n assertSigner(signer);\n\n return forwardTokens({\n amount,\n userAddress,\n type: \"BuySolarFarm\",\n currency,\n farmId,\n });\n }\n\n /**\n * Forward tokens to commit to a Kickstarter (USDC or USDG only)\n */\n async function commitKickstarter(\n amount: bigint,\n userAddress: string,\n kickstarterId: string,\n currency: Currency = \"USDC\"\n ): Promise<string> {\n assertSigner(signer);\n\n if (currency === \"GLW\") {\n throw new Error(\"CommitKickstarter supports only USDC or USDG\");\n }\n\n return forwardTokens({\n amount,\n userAddress,\n type: \"CommitKickstarter\",\n currency,\n kickstarterId,\n });\n }\n\n /**\n * Estimate gas for forwarding with type-specific handling\n * @param params Forward parameters\n * @param ethPriceInUSD Current ETH price in USD (for cost estimation)\n */\n async function estimateGasForForward(\n params: ForwardParams,\n ethPriceInUSD: number | null\n ): Promise<string> {\n assertSigner(signer);\n\n try {\n const forwarderContract = getForwarderContract();\n if (!forwarderContract)\n throw new Error(ForwarderError.CONTRACT_NOT_AVAILABLE);\n\n const { amount, currency = \"USDC\" } = params;\n const isAuditFees = params.type === \"PayAuditFees\";\n if (isAuditFees && currency !== \"USDC\") {\n throw new Error(\"PayAuditFees only supports USDC\");\n }\n\n // Construct the appropriate message for this forward type\n const message = constructForwardMessage(params);\n\n // Get token address\n let tokenAddress: string;\n switch (currency) {\n case \"USDC\":\n tokenAddress = ADDRESSES.USDC;\n break;\n case \"USDG\":\n tokenAddress = ADDRESSES.USDG;\n break;\n case \"GLW\":\n tokenAddress = ADDRESSES.GLW;\n break;\n default:\n throw new Error(\n `Unsupported currency for gas estimation: ${currency}`\n );\n }\n\n const feeData = await signer.provider?.getFeeData();\n const gasPrice =\n feeData?.gasPrice ?? feeData?.maxFeePerGas ?? (0n as bigint);\n if (gasPrice === 0n) {\n throw new Error(\"Could not fetch gas price to estimate cost.\");\n }\n const estimatedGas: bigint =\n !isAuditFees && currency === \"USDC\"\n ? await forwarderContract\n .getFunction(\"swapUSDCAndForwardUSDG\")\n .estimateGas(amount, ADDRESSES.FOUNDATION_WALLET, message)\n : await forwarderContract\n .getFunction(\"forward\")\n .estimateGas(\n tokenAddress,\n isAuditFees\n ? ADDRESSES.AUDIT_FEE_WALLET\n : ADDRESSES.FOUNDATION_WALLET,\n amount,\n message\n );\n const estimatedCost: bigint = estimatedGas * gasPrice;\n\n if (ethPriceInUSD) {\n const estimatedCostInEth = formatEther(estimatedCost);\n const estimatedCostInUSD = (\n parseFloat(estimatedCostInEth) * ethPriceInUSD\n ).toFixed(2);\n return estimatedCostInUSD;\n } else {\n throw new Error(\n \"Could not fetch the ETH price to calculate cost in USD.\"\n );\n }\n } catch (error: any) {\n throw new Error(parseEthersError(error));\n }\n }\n\n /**\n * Mint test USDC (only works on testnets with mintable USDC contracts)\n * @param amount Amount of USDC to mint (BigNumber, 6 decimals)\n * @param recipient Address to mint USDC to\n */\n async function mintTestUSDC(\n amount: bigint,\n recipient: string\n ): Promise<string> {\n assertSigner(signer);\n if (CHAIN_ID !== 11155111) {\n throw new Error(\"Minting test USDC is only supported on Sepolia\");\n }\n\n try {\n const usdcContract = getTokenContract(\"USDC\"); // Use getTokenContract for consistency\n if (!usdcContract) throw new Error(ForwarderError.CONTRACT_NOT_AVAILABLE);\n\n setIsProcessing(true);\n\n // Try to call mint function (common for test tokens)\n const tx = await usdcContract.mint(recipient, amount);\n await tx.wait();\n\n return tx.hash;\n } catch (error: any) {\n // If mint function doesn't exist or fails, provide helpful error\n const errorMessage = parseEthersError(error);\n if (errorMessage.includes(\"mint\")) {\n throw new Error(\"This USDC contract doesn't support minting\");\n }\n throw new Error(errorMessage);\n } finally {\n setIsProcessing(false);\n }\n }\n\n return {\n // New methods for different forward types\n forwardTokens,\n payProtocolFeeAndMintGCTLAndStake,\n sponsorProtocolFeeAndMintGCTLAndStake,\n sponsorProtocolFee,\n payProtocolFee,\n mintGCTLAndStake,\n mintGCTL,\n buySolarFarm,\n commitKickstarter,\n payAuditFees,\n\n // Token operations\n approveToken,\n checkTokenAllowance,\n checkTokenBalance,\n\n // Utility methods\n estimateGasForForward,\n mintTestUSDC,\n constructForwardMessage,\n\n // State\n get isProcessing() {\n return isProcessing;\n },\n addresses: ADDRESSES,\n\n // Signer availability\n isSignerAvailable: !!signer,\n };\n}\n","\"use strict\";\n\nimport type {\n GctlPrice,\n StakeRequest,\n RegionStake,\n WalletRegionStake,\n WalletRegionUnlocked,\n TransferDetails,\n GlwPrice,\n GlwRegionRewardsResponse,\n WalletNonce,\n GctlSupply,\n MintedEventsResponse,\n StakeEventsResponse,\n FailedOperationsResponse,\n PendingTransfersResponse,\n PendingTransferType,\n RestakeRequest,\n} from \"../types\";\n\n// --------------------------------------------------------------------------\n\n/**\n * Extract a useful error message from an unknown error value.\n */\nfunction parseApiError(error: unknown): string {\n if (!error) return \"Unknown error\";\n if (error instanceof Error) return error.message;\n const possible: any = error;\n return possible?.error?.message ?? possible?.message ?? \"Unknown error\";\n}\n\n// --------------------------------------------------------------------------\n// Public Factory\n// --------------------------------------------------------------------------\n\nexport function ControlRouter(baseUrl: string) {\n // ----------------------- Internal helpers --------------------------------\n const request = async <T>(path: string, init?: RequestInit): Promise<T> => {\n const res = await fetch(`${baseUrl}${path}`, init);\n if (!res.ok) {\n const errData = await res.json().catch(() => ({}));\n throw new Error(errData?.error || `Request to ${path} failed`);\n }\n return (await res.json()) as T;\n };\n\n // ----------------------- GETters -----------------------------------------\n const fetchGctlBalance = async (wallet: string): Promise<string> => {\n try {\n const data = await request<{ gctl_balance: string }>(\n `/balance/${wallet}`\n );\n return (data?.gctl_balance ?? \"0\").toString();\n } catch (error) {\n throw new Error(parseApiError(error));\n }\n };\n\n const fetchGctlPrice = async (): Promise<string> => {\n try {\n const data = await request<GctlPrice>(`/price`);\n return data.currentPriceUsdc;\n } catch (error) {\n throw new Error(parseApiError(error));\n }\n };\n\n const fetchGlwPrice = async (): Promise<string> => {\n try {\n const data = await request<GlwPrice>(`/price/glw`);\n return data.currentPriceUsdc;\n } catch (error) {\n throw new Error(parseApiError(error));\n }\n };\n\n const fetchLastNonce = async (wallet: string): Promise<string> => {\n try {\n const data = await request<WalletNonce>(`/nonce/${wallet}`);\n return data.lastNonce;\n } catch (error) {\n throw new Error(parseApiError(error));\n }\n };\n\n const fetchCirculatingSupply = async (): Promise<string> => {\n try {\n const data = await request<GctlSupply>(`/supply/circulating`);\n return data.circulatingSupply;\n } catch (error) {\n throw new Error(parseApiError(error));\n }\n };\n\n // Build pagination query helper\n const buildPaginationQuery = (page?: number, limit?: number) => {\n const p = page ?? 1;\n const l = limit ?? 50;\n return `?page=${p}&limit=${l}`;\n };\n\n const fetchMintedEvents = async (\n page?: number,\n limit?: number\n ): Promise<MintedEventsResponse> => {\n try {\n const data = await request<MintedEventsResponse>(\n `/events/minted${buildPaginationQuery(page, limit)}`\n );\n return data;\n } catch (error) {\n throw new Error(parseApiError(error));\n }\n };\n\n const fetchStakeEvents = async (\n page?: number,\n limit?: number,\n regionId?: number\n ): Promise<StakeEventsResponse> => {\n try {\n const base = `/events/stake${buildPaginationQuery(page, limit)}`;\n const query =\n typeof regionId === \"number\" ? `${base}&regionId=${regionId}` : base;\n const data = await request<StakeEventsResponse>(query);\n return data;\n } catch (error) {\n throw new Error(parseApiError(error));\n }\n };\n\n const fetchPendingTransfers = async (\n page?: number,\n limit?: number,\n type?: PendingTransferType\n ): Promise<PendingTransfersResponse> => {\n try {\n const base = `/transfers/pending${buildPaginationQuery(page, limit)}`;\n const query = type ? `${base}&type=${encodeURIComponent(type)}` : base;\n const data = await request<PendingTransfersResponse>(query);\n return data;\n } catch (error) {\n throw new Error(parseApiError(error));\n }\n };\n\n const fetchTransferDetails = async (\n txId: string\n ): Promise<TransferDetails> => {\n try {\n return await request<TransferDetails>(`/transfer/${txId}`);\n } catch (error) {\n throw new Error(parseApiError(error));\n }\n };\n\n const fetchFailedOperations = async (\n page?: number,\n limit?: number\n ): Promise<FailedOperationsResponse> => {\n try {\n const data = await request<FailedOperationsResponse>(\n `/operations/failed${buildPaginationQuery(page, limit)}`\n );\n return data;\n } catch (error) {\n throw new Error(parseApiError(error));\n }\n };\n\n const fetchGlwRegionRewards = async (): Promise<GlwRegionRewardsResponse> => {\n try {\n const data = await request<GlwRegionRewardsResponse>(\n `/rewards/glw/regions`\n );\n return data;\n } catch (error) {\n throw new Error(parseApiError(error));\n }\n };\n\n // Exposed query with error parsing\n const getTransferDetails = async (txId: string): Promise<TransferDetails> => {\n try {\n return await fetchTransferDetails(txId);\n } catch (error) {\n throw new Error(parseApiError(error));\n }\n };\n\n const fetchRegionStake = async (regionId: number): Promise<RegionStake> => {\n try {\n return await request<RegionStake>(`/region/${regionId}/stake`);\n } catch (error) {\n throw new Error(parseApiError(error));\n }\n };\n\n const fetchWalletRegionStake = async (\n wallet: string,\n regionId: number\n ): Promise<WalletRegionStake> => {\n try {\n return await request<WalletRegionStake>(\n `/wallet/${wallet}/region/${regionId}/stake`\n );\n } catch (error) {\n throw new Error(parseApiError(error));\n }\n };\n\n const fetchWalletRegionUnlocked = async (\n wallet: string,\n regionId: number\n ): Promise<WalletRegionUnlocked> => {\n try {\n return await request<WalletRegionUnlocked>(\n `/wallet/${wallet}/region/${regionId}/unlocked`\n );\n } catch (error) {\n throw new Error(parseApiError(error));\n }\n };\n\n // ----------------------- Mutations ---------------------------------------\n let isStaking = false;\n let isUnstaking = false;\n let isRestaking = false;\n let isRetryingFailedOperation = false;\n\n const stakeGctl = async (stakeRequest: StakeRequest): Promise<boolean> => {\n isStaking = true;\n try {\n await request(`/stake`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(stakeRequest),\n });\n return true;\n } catch (error) {\n throw new Error(parseApiError(error));\n } finally {\n isStaking = false;\n }\n };\n\n const unstakeGctl = async (\n unstakeRequest: StakeRequest\n ): Promise<boolean> => {\n isUnstaking = true;\n try {\n await request(`/unstake`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(unstakeRequest),\n });\n return true;\n } catch (error) {\n throw new Error(parseApiError(error));\n } finally {\n isUnstaking = false;\n }\n };\n\n const restakeGctl = async (\n restakeRequest: RestakeRequest\n ): Promise<boolean> => {\n isRestaking = true;\n try {\n await request(`/restake`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(restakeRequest),\n });\n return true;\n } catch (error) {\n throw new Error(parseApiError(error));\n } finally {\n isRestaking = false;\n }\n };\n\n const retryFailedOperation = async (\n operationId: string\n ): Promise<boolean> => {\n isRetryingFailedOperation = true;\n try {\n await request(`/operations/failed/${operationId}/retry`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n });\n return true;\n } catch (error) {\n throw new Error(parseApiError(error));\n } finally {\n isRetryingFailedOperation = false;\n }\n };\n\n // --------------------------- Public API ----------------------------------\n return {\n // Queries\n fetchGctlBalance,\n fetchGctlPrice,\n fetchGlwPrice,\n fetchCirculatingSupply,\n fetchLastNonce,\n fetchMintedEvents,\n fetchStakeEvents,\n fetchPendingTransfers,\n fetchFailedOperations,\n fetchRegionStake,\n fetchWalletRegionStake,\n fetchWalletRegionUnlocked,\n fetchTransferDetails: getTransferDetails,\n fetchGlwRegionRewards,\n\n // Mutations\n stakeGctl,\n unstakeGctl,\n restakeGctl,\n retryFailedOperation,\n\n // Processing flags\n get isStaking() {\n return isStaking;\n },\n get isUnstaking() {\n return isUnstaking;\n },\n get isRestaking() {\n return isRestaking;\n },\n get isRetryingFailedOperation() {\n return isRetryingFailedOperation;\n },\n } as const;\n}\n","export function generateSlug(title: string): string {\n const ascii = title.normalize(\"NFKD\").replace(/[\\u0300-\\u036f]/g, \"\");\n\n const slug = ascii\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\");\n\n // Guard against extremely long titles\n return slug.slice(0, 120);\n}\n","import type { RegionMetadata } from \"./types\";\n// Region metadata for kickstarter campaigns\n\nexport const regionMetadata: Record<string, RegionMetadata> = {\n // US States\n \"US-AL\": {\n code: \"US-AL\",\n name: \"Alabama\",\n description: \"The Heart of Dixie is ready for solar transformation\",\n isUs: true,\n flag: \"🇺🇸\",\n },\n \"US-AK\": {\n code: \"US-AK\",\n name: \"Alaska\",\n description: \"The Last Frontier embracing renewable energy\",\n isUs: true,\n flag: \"🇺🇸\",\n },\n \"US-AZ\": {\n code: \"US-AZ\",\n name: \"Arizona\",\n description: \"The Grand Canyon State with abundant sunshine\",\n isUs: true,\n flag: \"🇺🇸\",\n },\n \"US-AR\": {\n code: \"US-AR\",\n name: \"Arkansas\",\n description: \"The Natural State going solar\",\n isUs: true,\n flag: \"🇺🇸\",\n },\n \"US-CA\": {\n code: \"US-CA\",\n name: \"California\",\n description: \"The Golden State leading solar innovation\",\n isUs: true,\n flag: \"🇺🇸\",\n },\n \"US-CO\": {\n code: \"US-CO\",\n name: \"Colorado\",\n description: \"The Centennial State with high-altitude solar potential\",\n isUs: true,\n flag: \"🇺🇸\",\n },\n \"US-CT\": {\n code: \"US-CT\",\n name: \"Connecticut\",\n description: \"The Constitution State embracing clean energy\",\n isUs: true,\n flag: \"🇺🇸\",\n },\n \"US-DE\": {\n code: \"US-DE\",\n name: \"Delaware\",\n description: \"The First State to go solar\",\n isUs: true,\n flag: \"🇺🇸\",\n },\n \"US-FL\": {\n code: \"US-FL\",\n name: \"Florida\",\n description: \"The Sunshine State living up to its name\",\n isUs: true,\n flag: \"🇺🇸\",\n },\n \"US-GA\": {\n code: \"US-GA\",\n name: \"Georgia\",\n description: \"The Peach State harvesting solar energy\",\n isUs: true,\n flag: \"🇺🇸\",\n },\n \"US-HI\": {\n code: \"US-HI\",\n name: \"Hawaii\",\n description: \"The Aloha State with year-round solar potential\",\n isUs: true,\n flag: \"🇺🇸\",\n },\n \"US-ID\": {\n code: \"US-ID\",\n name: \"Idaho\",\n description: \"The Gem State shining with solar power\",\n isUs: true,\n flag: \"🇺🇸\",\n },\n \"US-IL\": {\n code: \"US-IL\",\n name: \"Illinois\",\n description: \"The Prairie State powering up with solar\",\n isUs: true,\n flag: \"🇺🇸\",\n },\n \"US-IN\": {\n code: \"US-IN\",\n name: \"Indiana\",\n description: \"The Hoosier State joining the solar revolution\",\n isUs: true,\n flag: \"🇺🇸\",\n },\n \"US-IA\": {\n code: \"US-IA\",\n name: \"Iowa\",\n description: \"The Hawkeye State expanding beyond wind to solar\",\n isUs: true,\n flag: \"🇺🇸\",\n },\n \"US-KS\": {\n code: \"US-KS\",\n name: \"Kansas\",\n description: \"The Sunflower State growing solar energy\",\n isUs: true,\n flag: \"🇺🇸\",\n },\n \"US-KY\": {\n code: \"US-KY\",\n name: \"Kentucky\",\n description: \"The Bluegrass State transitioning to clean energy\",\n isUs: true,\n flag: \"🇺🇸\",\n },\n \"US-LA\": {\n code: \"US-LA\",\n name: \"Louisiana\",\n description: \"The Pelican State soaring with solar\",\n isUs: true,\n flag: \"🇺🇸\",\n },\n \"US-ME\": {\n code: \"US-ME\",\n name: \"Maine\",\n description: \"The Pine Tree State branching into solar\",\n isUs: true,\n flag: \"🇺🇸\",\n },\n \"US-MD\": {\n code: \"US-MD\",\n name: \"Maryland\",\n description: \"The Old Line State drawing new energy lines\",\n isUs: true,\n flag: \"🇺🇸\",\n },\n \"US-MA\": {\n code: \"US-MA\",\n name: \"Massachusetts\",\n description: \"The Bay State leading in solar innovation\",\n isUs: true,\n flag: \"🇺🇸\",\n },\n \"US-MI\": {\n code: \"US-MI\",\n name: \"Michigan\",\n description: \"The Great Lakes State harnessing solar power\",\n isUs: true,\n flag: \"🇺🇸\",\n },\n \"US-MN\": {\n code: \"US-MN\",\n name: \"Minnesota\",\n description: \"The North Star State guiding solar adoption\",\n isUs: true,\n flag: \"🇺🇸\",\n },\n \"US-MS\": {\n code: \"US-MS\",\n name: \"Mississippi\",\n description: \"The Magnolia State blooming with solar energy\",\n isUs: true,\n flag: \"🇺🇸\",\n },\n \"US-MO\": {\n code: \"US-MO\",\n name: \"Missouri\",\n description: \"The Show-Me State showing solar leadership\",\n isUs: true,\n flag: \"🇺🇸\",\n },\n \"US-MT\": {\n code: \"US-MT\",\n name: \"Montana\",\n description: \"Big Sky Country with big solar potential\",\n isUs: true,\n flag: \"🇺🇸\",\n },\n \"US-NE\": {\n code: \"US-NE\",\n name: \"Nebraska\",\n description: \"The Cornhusker State cultivating solar power\",\n isUs: true,\n flag: \"🇺🇸\",\n },\n \"US-NV\": {\n code: \"US-NV\",\n name: \"Nevada\",\n description: \"The Silver State striking solar gold\",\n isUs: true,\n flag: \"🇺🇸\",\n },\n \"US-NH\": {\n code: \"US-NH\",\n name: \"New Hampshire\",\n description: \"The Granite State building solid solar foundation\",\n isUs: true,\n flag: \"🇺🇸\",\n },\n \"US-NJ\": {\n code: \"US-NJ\",\n name: \"New Jersey\",\n description: \"The Garden State growing solar gardens\",\n isUs: true,\n flag: \"🇺🇸\",\n },\n \"US-NM\": {\n code: \"US-NM\",\n name: \"New Mexico\",\n description: \"The Land of Enchantment enchanted by solar\",\n isUs: true,\n flag: \"🇺🇸\",\n },\n \"US-NY\": {\n code: \"US-NY\",\n name: \"New York\",\n description: \"The Empire State building a solar empire\",\n isUs: true,\n flag: \"🇺🇸\",\n },\n \"US-NC\": {\n code: \"US-NC\",\n name: \"North Carolina\",\n description: \"The Tar Heel State stepping into solar\",\n isUs: true,\n flag: \"🇺🇸\",\n },\n \"US-ND\": {\n code: \"US-ND\",\n name: \"North Dakota\",\n description: \"The Peace Garden State cultivating solar peace\",\n isUs: true,\n flag: \"🇺🇸\",\n },\n \"US-OH\": {\n code: \"US-OH\",\n name: \"Ohio\",\n description: \"The Buckeye State branching into solar\",\n isUs: true,\n flag: \"🇺🇸\",\n },\n \"US-OK\": {\n code: \"US-OK\",\n name: \"Oklahoma\",\n description: \"The Sooner State adopting solar sooner\",\n isUs: true,\n flag: \"🇺🇸\",\n },\n \"US-OR\": {\n code: \"US-OR\",\n name: \"Oregon\",\n description: \"The Beaver State building solar dams\",\n isUs: true,\n flag: \"🇺🇸\",\n },\n \"US-PA\": {\n code: \"US-PA\",\n name: \"Pennsylvania\",\n description: \"The Keystone State unlocking solar potential\",\n isUs: true,\n flag: \"🇺🇸\",\n },\n \"US-RI\": {\n code: \"US-RI\",\n name: \"Rhode Island\",\n description: \"The Ocean State riding the solar wave\",\n isUs: true,\n flag: \"🇺🇸\",\n },\n \"US-SC\": {\n code: \"US-SC\",\n name: \"South Carolina\",\n description: \"The Palmetto State basking in solar\",\n isUs: true,\n flag: \"🇺🇸\",\n },\n \"US-SD\": {\n code: \"US-SD\",\n name: \"South Dakota\",\n description: \"Mount Rushmore State carving out solar future\",\n isUs: true,\n flag: \"🇺🇸\",\n },\n \"US-TN\": {\n code: \"US-TN\",\n name: \"Tennessee\",\n description: \"The Volunteer State volunteering for solar\",\n isUs: true,\n flag: \"🇺🇸\",\n },\n \"US-TX\": {\n code: \"US-TX\",\n name: \"Texas\",\n description: \"The Lone Star State shining with solar power\",\n isUs: true,\n flag: \"🇺🇸\",\n },\n \"US-UT\": {\n code: \"US-UT\",\n name: \"Utah\",\n description: \"The Beehive State buzzing with solar activity\",\n isUs: true,\n flag: \"🇺🇸\",\n },\n \"US-VT\": {\n code: \"US-VT\",\n name: \"Vermont\",\n description: \"The Green Mountain State going greener\",\n isUs: true,\n flag: \"🇺🇸\",\n },\n \"US-VA\": {\n code: \"US-VA\",\n name: \"Virginia\",\n description: \"The Old Dominion embracing new energy\",\n isUs: true,\n flag: \"🇺🇸\",\n },\n \"US-WA\": {\n code: \"US-WA\",\n name: \"Washington\",\n description: \"The Evergreen State staying green with solar\",\n isUs: true,\n flag: \"🇺🇸\",\n },\n \"US-WV\": {\n code: \"US-WV\",\n name: \"West Virginia\",\n description: \"The Mountain State reaching new heights\",\n isUs: true,\n flag: \"🇺🇸\",\n },\n \"US-WI\": {\n code: \"US-WI\",\n name: \"Wisconsin\",\n description: \"The Badger State digging into solar\",\n isUs: true,\n flag: \"🇺🇸\",\n },\n \"US-WY\": {\n code: \"US-WY\",\n name: \"Wyoming\",\n description: \"The Equality State equalizing energy access\",\n isUs: true,\n flag: \"🇺🇸\",\n },\n\n // Countries\n CA: {\n code: \"CA\",\n name: \"Canada\",\n description: \"The Great White North embracing solar energy\",\n isUs: false,\n flag: \"🇨🇦\",\n },\n MX: {\n code: \"MX\",\n name: \"Mexico\",\n description: \"Abundant sunshine powering the future\",\n isUs: false,\n flag: \"🇲🇽\",\n },\n BR: {\n code: \"BR\",\n name: \"Brazil\",\n description: \"The largest South American market for solar\",\n isUs: false,\n flag: \"🇧🇷\",\n },\n AR: {\n code: \"AR\",\n name: \"Argentina\",\n description: \"Pampas and sunshine creating energy independence\",\n isUs: false,\n flag: \"🇦🇷\",\n },\n CL: {\n code: \"CL\",\n name: \"Chile\",\n description: \"The Atacama Desert's solar potential unleashed\",\n isUs: false,\n flag: \"🇨🇱\",\n },\n CO: {\n code: \"CO\",\n name: \"Colombia\",\n description: \"Equatorial sunshine year-round\",\n isUs: false,\n flag: \"🇨🇴\",\n },\n PE: {\n code: \"PE\",\n name: \"Peru\",\n description: \"From the Andes to the Amazon with solar\",\n isUs: false,\n flag: \"🇵🇪\",\n },\n GB: {\n code: \"GB\",\n name: \"United Kingdom\",\n description: \"Leading Europe's renewable transition\",\n isUs: false,\n flag: \"🇬🇧\",\n },\n FR: {\n code: \"FR\",\n name: \"France\",\n description: \"La République embracing solar liberté\",\n isUs: false,\n flag: \"🇫🇷\",\n },\n DE: {\n code: \"DE\",\n name: \"Germany\",\n description: \"Engineering excellence in solar deployment\",\n isUs: false,\n flag: \"🇩🇪\",\n },\n IT: {\n code: \"IT\",\n name: \"Italy\",\n description: \"Mediterranean sunshine powering the boot\",\n isUs: false,\n flag: \"🇮🇹\",\n },\n ES: {\n code: \"ES\",\n name: \"Spain\",\n description: \"Iberian peninsula's solar powerhouse\",\n isUs: false,\n flag: \"🇪🇸\",\n },\n PT: {\n code: \"PT\",\n name: \"Portugal\",\n description: \"Atlantic coast harnessing solar waves\",\n isUs: false,\n flag: \"🇵🇹\",\n },\n NL: {\n code: \"NL\",\n name: \"Netherlands\",\n description: \"Low lands, high solar ambitions\",\n isUs: false,\n flag: \"🇳🇱\",\n },\n BE: {\n code: \"BE\",\n name: \"Belgium\",\n description: \"The heart of Europe goes solar\",\n isUs: false,\n flag: \"🇧🇪\",\n },\n CH: {\n code: \"CH\",\n name: \"Switzerland\",\n description: \"Alpine heights capturing pure sunlight\",\n isUs: false,\n flag: \"🇨🇭\",\n },\n AT: {\n code: \"AT\",\n name: \"Austria\",\n description: \"Mountain valleys filled with solar panels\",\n isUs: false,\n flag: \"🇦🇹\",\n },\n SE: {\n code: \"SE\",\n name: \"Sweden\",\n description: \"Nordic innovation in solar technology\",\n isUs: false,\n flag: \"🇸🇪\",\n },\n NO: {\n code: \"NO\",\n name: \"Norway\",\n description: \"Fjords reflecting solar possibilities\",\n isUs: false,\n flag: \"🇳🇴\",\n },\n DK: {\n code: \"DK\",\n name: \"Denmark\",\n description: \"Viking spirit conquering solar frontiers\",\n isUs: false,\n flag: \"🇩🇰\",\n },\n FI: {\n code: \"FI\",\n name: \"Finland\",\n description: \"Land of midnight sun going solar\",\n isUs: false,\n flag: \"🇫🇮\",\n },\n PL: {\n code: \"PL\",\n name: \"Poland\",\n description: \"Central Europe's emerging solar market\",\n isUs: false,\n flag: \"🇵🇱\",\n },\n CZ: {\n code: \"CZ\",\n name: \"Czech Republic\",\n description: \"Bohemian innovation in renewable energy\",\n isUs: false,\n flag: \"🇨🇿\",\n },\n GR: {\n code: \"GR\",\n name: \"Greece\",\n description: \"Aegean sunshine powering ancient lands\",\n isUs: false,\n flag: \"🇬🇷\",\n },\n TR: {\n code: \"TR\",\n name: \"Turkey\",\n description: \"Bridge between continents powered by sun\",\n isUs: false,\n flag: \"🇹🇷\",\n },\n IN: {\n code: \"IN\",\n name: \"India\",\n description: \"World's fastest growing solar market\",\n isUs: false,\n flag: \"🇮🇳\",\n },\n CN: {\n code: \"CN\",\n name: \"China\",\n description: \"Global solar manufacturing leader\",\n isUs: false,\n flag: \"🇨🇳\",\n },\n JP: {\n code: \"JP\",\n name: \"Japan\",\n description: \"Rising sun powering technological innovation\",\n isUs: false,\n flag: \"🇯🇵\",\n },\n KR: {\n code: \"KR\",\n name: \"South Korea\",\n description: \"High-tech nation embracing green energy\",\n isUs: false,\n flag: \"🇰🇷\",\n },\n AU: {\n code: \"AU\",\n name: \"Australia\",\n description: \"Outback sunshine creating energy abundance\",\n isUs: false,\n flag: \"🇦🇺\",\n },\n NZ: {\n code: \"NZ\",\n name: \"New Zealand\",\n description: \"Clean, green Aotearoa\",\n isUs: false,\n flag: \"🇳🇿\",\n },\n ZA: {\n code: \"ZA\",\n name: \"South Africa\",\n description: \"African sunshine lighting the continent\",\n isUs: false,\n flag: \"🇿🇦\",\n },\n EG: {\n code: \"EG\",\n name: \"Egypt\",\n description: \"Desert sun powering ancient civilizations\",\n isUs: false,\n flag: \"🇪🇬\",\n },\n NG: {\n code: \"NG\",\n name: \"Nigeria\",\n description: \"West Africa's solar giant awakening\",\n isUs: false,\n flag: \"🇳🇬\",\n },\n KE: {\n code: \"KE\",\n name: \"Kenya\",\n description: \"East African solar innovation hub\",\n isUs: false,\n flag: \"🇰🇪\",\n },\n MA: {\n code: \"MA\",\n name: \"Morocco\",\n description: \"Saharan edge harnessing desert power\",\n isUs: false,\n flag: \"🇲🇦\",\n },\n SA: {\n code: \"SA\",\n name: \"Saudi Arabia\",\n description: \"Oil kingdom transitioning to solar\",\n isUs: false,\n flag: \"🇸🇦\",\n },\n AE: {\n code: \"AE\",\n name: \"United Arab Emirates\",\n description: \"Desert emirates building solar oases\",\n isUs: false,\n flag: \"🇦🇪\",\n },\n IL: {\n code: \"IL\",\n name: \"Israel\",\n description: \"Innovation nation powered by sunshine\",\n isUs: false,\n flag: \"🇮🇱\",\n },\n SG: {\n code: \"SG\",\n name: \"Singapore\",\n description: \"City-state maximizing rooftop solar\",\n isUs: false,\n flag: \"🇸🇬\",\n },\n ID: {\n code: \"ID\",\n name: \"Indonesia\",\n description: \"Archipelago nation harnessing tropical sun\",\n isUs: false,\n flag: \"🇮🇩\",\n },\n TH: {\n code: \"TH\",\n name: \"Thailand\",\n description: \"Land of smiles powered by solar\",\n isUs: false,\n flag: \"🇹🇭\",\n },\n VN: {\n code: \"VN\",\n name: \"Vietnam\",\n description: \"Southeast Asian solar manufacturing hub\",\n isUs: false,\n flag: \"🇻🇳\",\n },\n PH: {\n code: \"PH\",\n name: \"Philippines\",\n description: \"7,000 islands unified by solar power\",\n isUs: false,\n flag: \"🇵🇭\",\n },\n};\n\n// Helper to get all regions as array\nexport const allRegions = Object.values(regionMetadata);\n\n// Helper to get US states\nexport const usStates = allRegions.filter((r) => r.isUs);\n\n// Helper to get countries\nexport const countries = allRegions.filter((r) => !r.isUs);\n","\"use strict\";\n\nimport { generateSlug } from \"src/utils/generate-slug\";\nimport { regionMetadata } from \"../region-metadata\";\nimport type {\n RegionWithMetadata,\n ActivationConfig,\n CreateRegionPayload,\n ActivationEvent,\n RegionDetails,\n SponsoredFarm,\n} from \"../types\";\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction parseApiError(error: unknown): string {\n if (!error) return \"Unknown error\";\n if (error instanceof Error) return error.message;\n const possible: any = error;\n return possible?.error?.message ?? possible?.message ?? \"Unknown error\";\n}\n\n// ---------------------------------------------------------------------------\n// Factory\n// ---------------------------------------------------------------------------\n\nexport function RegionRouter(baseUrl: string) {\n if (!baseUrl) throw new Error(\"CONTROL API base URL is not set\");\n\n const request = async <T>(path: string, init?: RequestInit): Promise<T> => {\n const res = await fetch(`${baseUrl}${path}`, init);\n if (!res.ok) {\n const errData = await res.json().catch(() => ({}));\n throw new Error(errData?.error || `Request to ${path} failed`);\n }\n return (await res.json()) as T;\n };\n\n // -------------------------------------------------------------------------\n // Local cache / state flags\n // -------------------------------------------------------------------------\n let cachedRegions: RegionWithMetadata[] = [];\n let isLoading = false;\n let isCreatingRegion = false;\n\n // -------------------------------------------------------------------------\n // Queries\n // -------------------------------------------------------------------------\n const fetchRegions = async (params?: {\n isActive?: boolean;\n }): Promise<RegionWithMetadata[]> => {\n isLoading = true;\n try {\n const query =\n params && typeof params.isActive === \"boolean\"\n ? `?isActive=${params.isActive ? \"true\" : \"false\"}`\n : \"\";\n const data = await request<{ regions: RegionWithMetadata[] }>(\n `/regions/all${query}`\n );\n cachedRegions = data.regions ?? [];\n return cachedRegions;\n } catch (error) {\n throw new Error(parseApiError(error));\n } finally {\n isLoading = false;\n }\n };\n\n const fetchActivationConfig = async (\n regionCode: string\n ): Promise<ActivationConfig> => {\n try {\n return await request<ActivationConfig>(\n `/regions/activation-config?code=${regionCode}`\n );\n } catch (error) {\n throw new Error(parseApiError(error));\n }\n };\n\n const fetchActivationEvents = async (\n regionId?: number\n ): Promise<ActivationEvent[]> => {\n try {\n const query = typeof regionId === \"number\" ? `?regionId=${regionId}` : \"\";\n const data = await request<{ events: ActivationEvent[] }>(\n `/regions/activation-events${query}`\n );\n return data.events ?? [];\n } catch (error) {\n throw new Error(parseApiError(error));\n }\n };\n\n const fetchRegionByIdOrSlug = async (\n idOrSlug: string\n ): Promise<RegionDetails> => {\n try {\n const data = await request<{ region: RegionDetails }>(\n `/regions/${encodeURIComponent(idOrSlug)}`\n );\n return data.region;\n } catch (error) {\n throw new Error(parseApiError(error));\n }\n };\n\n const fetchRegionSolarFarms = async (\n regionId: number\n ): Promise<SponsoredFarm[]> => {\n try {\n const data = await request<{ sponsoredFarms: SponsoredFarm[] }>(\n `/regions/solar-farms/${regionId}`\n );\n return data.sponsoredFarms ?? [];\n } catch (error) {\n throw new Error(parseApiError(error));\n }\n };\n\n // -------------------------------------------------------------------------\n // Mutations\n // -------------------------------------------------------------------------\n const createRegion = async (payload: CreateRegionPayload): Promise<void> => {\n isCreatingRegion = true;\n try {\n await request(`/regions/create`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(payload),\n });\n // Refresh the local cache after successful creation\n await fetchRegions();\n } catch (error) {\n throw new Error(parseApiError(error));\n } finally {\n isCreatingRegion = false;\n }\n };\n\n // Kickstarter-related logic moved to kickstarter-router.ts\n\n // -------------------------------------------------------------------------\n // Helpers (derived)\n // -------------------------------------------------------------------------\n\n const getRegionByCode = (code: string): RegionWithMetadata | null => {\n const metadata = regionMetadata[code];\n if (!metadata) return null;\n\n const existingRegion = cachedRegions.find(\n (r) => r.name.toLowerCase() === metadata.name.toLowerCase()\n );\n\n if (existingRegion) {\n return {\n ...existingRegion,\n code: metadata.code,\n description: metadata.description,\n isUs: metadata.isUs,\n };\n }\n\n // Placeholder if region does not yet exist in DB\n return {\n id: -1,\n name: metadata.name,\n code: metadata.code,\n description: metadata.description,\n bannerUrl: \"\",\n slug: generateSlug(metadata.name),\n isUs: metadata.isUs,\n isActive: false,\n staked: \"0\",\n activationStakeThreshold: metadata.isUs ? \"20000000000\" : \"200000000000\",\n solarFarmCount: 0,\n solarPanelsQuantity: 0,\n activationSolarFarmThreshold: 10,\n installerCount: 1,\n createdAt: new Date(),\n activationInstallerThreshold: 1,\n };\n };\n\n // -------------------------------------------------------------------------\n // Public API\n // -------------------------------------------------------------------------\n return {\n // Data access\n fetchRegions,\n fetchActivationConfig,\n fetchActivationEvents,\n fetchRegionByIdOrSlug,\n fetchRegionSolarFarms,\n getRegionByCode,\n createRegion,\n\n // Cached data & flags\n get regions() {\n return cachedRegions;\n },\n get isLoading() {\n return isLoading;\n },\n get isCreatingRegion() {\n return isCreatingRegion;\n },\n } as const;\n}\n","\"use strict\";\n\nimport { regionMetadata } from \"../region-metadata\";\nimport type {\n Kickstarter,\n CreateKickstarterPayload,\n KickstarterCreateResponse,\n CommitKickstarterPayload,\n CommitKickstarterResponse,\n KickstarterDetails,\n} from \"../types\";\n\nfunction parseApiError(error: unknown): string {\n if (!error) return \"Unknown error\";\n if (error instanceof Error) return error.message;\n const possible: any = error;\n return possible?.error?.message ?? possible?.message ?? \"Unknown error\";\n}\n\nexport function KickstarterRouter(baseUrl: string) {\n if (!baseUrl) throw new Error(\"CONTROL API base URL is not set\");\n\n const request = async <T>(path: string, init?: RequestInit): Promise<T> => {\n const res = await fetch(`${baseUrl}${path}`, init);\n if (!res.ok) {\n const errData = await res.json().catch(() => ({}));\n throw new Error(errData?.error || `Request to ${path} failed`);\n }\n return (await res.json()) as T;\n };\n\n let isCreatingKickstarter = false;\n\n const fetchKickstarters = async (): Promise<Kickstarter[]> => {\n try {\n const data = await request<{ kickstarters: Kickstarter[] }>(\n `/kickstarters`\n );\n return data.kickstarters ?? [];\n } catch (error) {\n throw new Error(parseApiError(error));\n }\n };\n\n const createKickstarter = async (\n payload: CreateKickstarterPayload\n ): Promise<KickstarterCreateResponse> => {\n isCreatingKickstarter = true;\n try {\n const exists = Boolean(regionMetadata[payload.code]);\n if (!exists) {\n throw new Error(`Unknown region code: ${payload.code}`);\n }\n const data = await request<KickstarterCreateResponse>(`/kickstarters`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(payload),\n });\n return data;\n } catch (error) {\n throw new Error(parseApiError(error));\n } finally {\n isCreatingKickstarter = false;\n }\n };\n\n const fetchKickstarter = async (\n idOrSlug: string\n ): Promise<KickstarterDetails> => {\n try {\n const data = await request<{\n kickstarter: KickstarterDetails;\n }>(`/kickstarters/${encodeURIComponent(idOrSlug)}`);\n return data.kickstarter;\n } catch (error) {\n throw new Error(parseApiError(error));\n }\n };\n\n const fetchKickstartersByWallet = async (\n wallet: string\n ): Promise<Kickstarter[]> => {\n try {\n const data = await request<{ kickstarters: Kickstarter[] }>(\n `/kickstarters/by-wallet/${encodeURIComponent(wallet)}`\n );\n return data.kickstarters ?? [];\n } catch (error) {\n throw new Error(parseApiError(error));\n }\n };\n\n const commitKickstarter = async (\n kickstarterId: string,\n payload: CommitKickstarterPayload\n ): Promise<CommitKickstarterResponse> => {\n try {\n const data = await request<CommitKickstarterResponse>(\n `/kickstarters/commit/${encodeURIComponent(kickstarterId)}`,\n {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(payload),\n }\n );\n return data;\n } catch (error) {\n throw new Error(parseApiError(error));\n }\n };\n\n return {\n fetchKickstarters,\n fetchKickstarter,\n fetchKickstartersByWallet,\n commitKickstarter,\n createKickstarter,\n get isCreatingKickstarter() {\n return isCreatingKickstarter;\n },\n } as const;\n}\n","\"use strict\";\n\nimport type { ControlWallet, WalletsResponse, WalletDetails } from \"../types\";\nimport type { MintedEvent, StakedEvent } from \"../types\";\n\nfunction parseApiError(error: unknown): string {\n if (!error) return \"Unknown error\";\n if (error instanceof Error) return error.message;\n const possible: any = error;\n return possible?.error?.message ?? possible?.message ?? \"Unknown error\";\n}\n\nexport function WalletsRouter(baseUrl: string) {\n if (!baseUrl) throw new Error(\"CONTROL API base URL is not set\");\n\n const request = async <T>(path: string, init?: RequestInit): Promise<T> => {\n const res = await fetch(`${baseUrl}${path}`, init);\n if (!res.ok) {\n const errData = await res.json().catch(() => ({}));\n throw new Error(errData?.error || `Request to ${path} failed`);\n }\n return (await res.json()) as T;\n };\n\n const buildPaginationQuery = (page?: number, limit?: number) => {\n const p = page ?? 1;\n const l = limit ?? 50;\n return `?page=${p}&limit=${l}`;\n };\n\n const fetchAllWallets = async (): Promise<ControlWallet[]> => {\n try {\n const data = await request<WalletsResponse>(`/wallets/all`);\n return data.wallets ?? [];\n } catch (error) {\n throw new Error(parseApiError(error));\n }\n };\n\n const fetchWalletByAddress = async (\n wallet: string\n ): Promise<WalletDetails> => {\n try {\n return await request<WalletDetails>(\n `/wallets/address/${encodeURIComponent(wallet)}`\n );\n } catch (error) {\n throw new Error(parseApiError(error));\n }\n };\n\n const fetchWalletMintedEvents = async (\n wallet: string,\n page?: number,\n limit?: number\n ): Promise<MintedEvent[]> => {\n try {\n const data = await request<{ events: MintedEvent[] }>(\n `/wallets/address/${encodeURIComponent(\n wallet\n )}/events/minted${buildPaginationQuery(page, limit)}`\n );\n return data.events ?? [];\n } catch (error) {\n throw new Error(parseApiError(error));\n }\n };\n\n const fetchWalletStakeEvents = async (\n wallet: string,\n page?: number,\n limit?: number,\n regionId?: number\n ): Promise<StakedEvent[]> => {\n try {\n const base = `/wallets/address/${encodeURIComponent(\n wallet\n )}/events/stake${buildPaginationQuery(page, limit)}`;\n const query =\n typeof regionId === \"number\" ? `${base}&regionId=${regionId}` : base;\n const data = await request<{ events: StakedEvent[] }>(query);\n return data.events ?? [];\n } catch (error) {\n throw new Error(parseApiError(error));\n }\n };\n\n return {\n fetchAllWallets,\n fetchWalletByAddress,\n fetchWalletMintedEvents,\n fetchWalletStakeEvents,\n } as const;\n}\n","\"use strict\";\n\nimport type { SponsoredFarm } from \"../types\";\nimport type { SponsoredFarmsResponse } from \"../types\";\n\nfunction parseApiError(error: unknown): string {\n if (!error) return \"Unknown error\";\n if (error instanceof Error) return error.message;\n const possible: any = error;\n return possible?.error?.message ?? possible?.message ?? \"Unknown error\";\n}\n\nexport function FarmsRouter(baseUrl: string) {\n if (!baseUrl) throw new Error(\"CONTROL API base URL is not set\");\n\n const request = async <T>(path: string, init?: RequestInit): Promise<T> => {\n const res = await fetch(`${baseUrl}${path}`, init);\n if (!res.ok) {\n const errData = await res.json().catch(() => ({}));\n throw new Error(errData?.error || `Request to ${path} failed`);\n }\n return (await res.json()) as T;\n };\n\n const fetchSponsoredFarms = async (\n sponsorWallet?: string\n ): Promise<SponsoredFarm[]> => {\n try {\n const query = sponsorWallet\n ? `?sponsorWallet=${encodeURIComponent(sponsorWallet)}`\n : \"\";\n const data = await request<SponsoredFarmsResponse>(\n `/farms/sponsored${query}`\n );\n return data.farms ?? [];\n } catch (error) {\n throw new Error(parseApiError(error));\n }\n };\n\n return {\n fetchSponsoredFarms,\n } as const;\n}\n"],"names":["ForwarderError","Contract","MaxUint256","formatEther","parseApiError"],"mappings":"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"}
package/dist/cjs/index.js CHANGED
@@ -15,7 +15,7 @@ var viem = require('viem');
15
15
  var merkletreejs = require('merkletreejs');
16
16
  var ethers = require('ethers');
17
17
  var Decimal = require('decimal.js');
18
- var walletsRouter = require('./wallets-router-QMdVxcdl.js');
18
+ var farmsRouter = require('./farms-router-ClIWm9AQ.js');
19
19
 
20
20
  const GENESIS_TIMESTAMP = 1700352000;
21
21
 
@@ -18709,14 +18709,14 @@ async function createWeeklyReportLegacy(args) {
18709
18709
  const existingValue = map.get(key);
18710
18710
  existingValue.glowWeight += value.glowWeight;
18711
18711
  existingValue.usdgWeight += value.usdgWeight;
18712
- if (existingValue.glowWeight > walletsRouter.MAX_WEIGHT ||
18713
- existingValue.usdgWeight > walletsRouter.MAX_WEIGHT) {
18712
+ if (existingValue.glowWeight > farmsRouter.MAX_WEIGHT ||
18713
+ existingValue.usdgWeight > farmsRouter.MAX_WEIGHT) {
18714
18714
  throw new Error(`Accumulated weight overflow on wallet ${key}`);
18715
18715
  }
18716
18716
  map.set(key, existingValue);
18717
18717
  }
18718
18718
  else {
18719
- if (value.glowWeight > walletsRouter.MAX_WEIGHT || value.usdgWeight > walletsRouter.MAX_WEIGHT) {
18719
+ if (value.glowWeight > farmsRouter.MAX_WEIGHT || value.usdgWeight > farmsRouter.MAX_WEIGHT) {
18720
18720
  throw new Error(`Initial weight overflow on wallet ${key}`);
18721
18721
  }
18722
18722
  map.set(key, value);
@@ -18745,10 +18745,10 @@ async function createWeeklyReportLegacy(args) {
18745
18745
  if (Math.abs(sumOfRewardSplitsUSDGWeight - 1) > percentTolerance)
18746
18746
  throw new Error(`USDG weight splits do not add up to 1 for farm ${farm.shortId}`);
18747
18747
  for (const rewardSplit of farm.rewardSplits) {
18748
- const glowBigInt = BigInt(viem.parseUnits(customToFixed(farm.weeklyPayment, walletsRouter.GLOW_WEIGHT_DECIMAL_PRECISION), walletsRouter.GLOW_WEIGHT_DECIMAL_PRECISION));
18749
- const usdgBigInt = BigInt(viem.parseUnits(customToFixed(farm.carbonCreditsProduced, walletsRouter.USDG_WEIGHT_DECIMAL_PRECISION), walletsRouter.USDG_WEIGHT_DECIMAL_PRECISION));
18750
- const glowWeight = multiplyBigIntByDecimalPercentage(glowBigInt, walletsRouter.GLOW_WEIGHT_DECIMAL_PRECISION, rewardSplit.glowSplitPercent);
18751
- const usdgWeight = multiplyBigIntByDecimalPercentage(usdgBigInt, walletsRouter.USDG_WEIGHT_DECIMAL_PRECISION, rewardSplit.usdgSplitPercent);
18748
+ const glowBigInt = BigInt(viem.parseUnits(customToFixed(farm.weeklyPayment, farmsRouter.GLOW_WEIGHT_DECIMAL_PRECISION), farmsRouter.GLOW_WEIGHT_DECIMAL_PRECISION));
18749
+ const usdgBigInt = BigInt(viem.parseUnits(customToFixed(farm.carbonCreditsProduced, farmsRouter.USDG_WEIGHT_DECIMAL_PRECISION), farmsRouter.USDG_WEIGHT_DECIMAL_PRECISION));
18750
+ const glowWeight = multiplyBigIntByDecimalPercentage(glowBigInt, farmsRouter.GLOW_WEIGHT_DECIMAL_PRECISION, rewardSplit.glowSplitPercent);
18751
+ const usdgWeight = multiplyBigIntByDecimalPercentage(usdgBigInt, farmsRouter.USDG_WEIGHT_DECIMAL_PRECISION, rewardSplit.usdgSplitPercent);
18752
18752
  const value = {
18753
18753
  wallet: rewardSplit.walletAddress,
18754
18754
  glowWeight,
@@ -18793,10 +18793,10 @@ async function createWeeklyReportLegacy(args) {
18793
18793
  const root = tree.getHexRoot();
18794
18794
  const totalGlowWeightFinalizedLeavesSum = finalLeaves.reduce((acc, { glowWeight }) => acc + BigInt(glowWeight), 0n);
18795
18795
  const totalGCCWeightFinalizedLeavesSum = finalLeaves.reduce((acc, { usdgWeight }) => acc + BigInt(usdgWeight), 0n);
18796
- if (totalGlowWeightFinalizedLeavesSum > walletsRouter.MAX_WEIGHT) {
18796
+ if (totalGlowWeightFinalizedLeavesSum > farmsRouter.MAX_WEIGHT) {
18797
18797
  throw new Error("Total glow weight is greater than max weight");
18798
18798
  }
18799
- if (totalGCCWeightFinalizedLeavesSum > walletsRouter.MAX_WEIGHT) {
18799
+ if (totalGCCWeightFinalizedLeavesSum > farmsRouter.MAX_WEIGHT) {
18800
18800
  throw new Error("Total gcc weight is greater than max weight");
18801
18801
  }
18802
18802
  const headlineStats = {
@@ -18804,12 +18804,12 @@ async function createWeeklyReportLegacy(args) {
18804
18804
  totalCreditsProduced: viem.formatUnits(totalCreditsProduced, 18),
18805
18805
  totalCreditsProducedBN: totalCreditsProduced.toString(),
18806
18806
  totalGlowWeightInFinalized: totalGlowWeightFinalizedLeavesSum.toString(),
18807
- totalGlowWeightHuman: viem.formatUnits(BigInt(totalGlowWeightFinalizedLeavesSum.toString()), walletsRouter.GLOW_WEIGHT_DECIMAL_PRECISION).toString(),
18807
+ totalGlowWeightHuman: viem.formatUnits(BigInt(totalGlowWeightFinalizedLeavesSum.toString()), farmsRouter.GLOW_WEIGHT_DECIMAL_PRECISION).toString(),
18808
18808
  totalUSDGWeightInFinalized: totalGCCWeightFinalizedLeavesSum.toString(),
18809
- totalUSDGWeightHuman: viem.formatUnits(BigInt(totalGCCWeightFinalizedLeavesSum.toString()), walletsRouter.USDG_WEIGHT_DECIMAL_PRECISION).toString(),
18809
+ totalUSDGWeightHuman: viem.formatUnits(BigInt(totalGCCWeightFinalizedLeavesSum.toString()), farmsRouter.USDG_WEIGHT_DECIMAL_PRECISION).toString(),
18810
18810
  root: root,
18811
- glowWeightDecimals: walletsRouter.GLOW_WEIGHT_DECIMAL_PRECISION,
18812
- usdgWeightDecimals: walletsRouter.USDG_WEIGHT_DECIMAL_PRECISION,
18811
+ glowWeightDecimals: farmsRouter.GLOW_WEIGHT_DECIMAL_PRECISION,
18812
+ usdgWeightDecimals: farmsRouter.USDG_WEIGHT_DECIMAL_PRECISION,
18813
18813
  };
18814
18814
  const farmsWithMerkleProofs = finalLeaves.map((leaf) => {
18815
18815
  const hashedLeaf = hashLeaf({
@@ -18884,7 +18884,7 @@ async function createWeeklyReport({ week, gcaUrls, apiUrl, }) {
18884
18884
  // Fetch active farms for the week (source of truth) and audits for the week.
18885
18885
  const [apiResponse, auditsRes] = await Promise.all([
18886
18886
  fetchFarmsForWeek(week, gcaUrls, apiUrl),
18887
- axios.get(`${walletsRouter.HUB_URL}/api/audits?omitDocuments=true&weekNumber=${week}`),
18887
+ axios.get(`${farmsRouter.HUB_URL}/api/audits?omitDocuments=true&weekNumber=${week}`),
18888
18888
  ]);
18889
18889
  const farms = apiResponse.filteredFarms; // List of farms active this week.
18890
18890
  const audits = auditsRes.data; // Audits potentially containing adjusted credits.
@@ -18933,10 +18933,10 @@ async function createWeeklyReport({ week, gcaUrls, apiUrl, }) {
18933
18933
  if (splitValue.isZero())
18934
18934
  throw new Error(`Zero adjustedWeeklyCarbonCredit split for active farms in audit ${audit.id}`);
18935
18935
  // Convert the decimal split value to a bigint using the defined precision.
18936
- const splitBigInt = toBigInt(splitValue, walletsRouter.USDG_WEIGHT_DECIMAL_PRECISION);
18936
+ const splitBigInt = toBigInt(splitValue, farmsRouter.USDG_WEIGHT_DECIMAL_PRECISION);
18937
18937
  // Dust Check: Ensure that the conversion to bigint didn't truncate the value to zero.
18938
18938
  if (splitBigInt === BigInt(0)) {
18939
- throw new Error(`Adjusted credit split for audit ${audit.id} resulted in zero BigInt after conversion for precision ${walletsRouter.USDG_WEIGHT_DECIMAL_PRECISION}. Original split value: ${splitValue.toString()}. This might indicate dust loss.`);
18939
+ throw new Error(`Adjusted credit split for audit ${audit.id} resulted in zero BigInt after conversion for precision ${farmsRouter.USDG_WEIGHT_DECIMAL_PRECISION}. Original split value: ${splitValue.toString()}. This might indicate dust loss.`);
18940
18940
  }
18941
18941
  // Distribute the calculated split value to each active farm associated with this audit.
18942
18942
  for (const sidString of auditActiveFarmSids) {
@@ -18980,7 +18980,7 @@ async function createWeeklyReport({ week, gcaUrls, apiUrl, }) {
18980
18980
  if (Math.abs(sumUSDG - 1) > percentTolerance)
18981
18981
  throw new Error(`USDG splits ≠1 for farm ${farm.shortId}`);
18982
18982
  // Get the base GLOW payment for the farm, converted to bigint with appropriate precision.
18983
- const glowBase = viem.parseUnits(customToFixed(farm.weeklyPayment, walletsRouter.GLOW_WEIGHT_DECIMAL_PRECISION), walletsRouter.GLOW_WEIGHT_DECIMAL_PRECISION);
18983
+ const glowBase = viem.parseUnits(customToFixed(farm.weeklyPayment, farmsRouter.GLOW_WEIGHT_DECIMAL_PRECISION), farmsRouter.GLOW_WEIGHT_DECIMAL_PRECISION);
18984
18984
  // Retrieve the pre-calculated adjusted credit for this farm. Should always exist due to prior checks.
18985
18985
  const adjustedCreditBigInt = shortIdToAdjustedCredit.get(String(farm.shortId)) ?? BigInt(0);
18986
18986
  // Sanity check (likely redundant due to earlier checks, but safe).
@@ -18989,9 +18989,9 @@ async function createWeeklyReport({ week, gcaUrls, apiUrl, }) {
18989
18989
  // Process each reward split recipient for this farm.
18990
18990
  for (const split of farm.rewardSplits) {
18991
18991
  // Calculate the GLOW weight for this recipient based on the farm's weekly payment and split percentage.
18992
- const glowWeight = multiplyBigIntByDecimalPercentage(glowBase, walletsRouter.GLOW_WEIGHT_DECIMAL_PRECISION, split.glowSplitPercent);
18992
+ const glowWeight = multiplyBigIntByDecimalPercentage(glowBase, farmsRouter.GLOW_WEIGHT_DECIMAL_PRECISION, split.glowSplitPercent);
18993
18993
  // Calculate the USDG weight for this recipient based on the farm's *adjusted* credit and split percentage.
18994
- const usdgWeight = multiplyBigIntByDecimalPercentage(adjustedCreditBigInt, walletsRouter.USDG_WEIGHT_DECIMAL_PRECISION, split.usdgSplitPercent);
18994
+ const usdgWeight = multiplyBigIntByDecimalPercentage(adjustedCreditBigInt, farmsRouter.USDG_WEIGHT_DECIMAL_PRECISION, split.usdgSplitPercent);
18995
18995
  // Dust Loss Checks: Ensure non-zero percentages didn't result in zero weight due to precision limits.
18996
18996
  if (split.usdgSplitPercent > 0 &&
18997
18997
  adjustedCreditBigInt > BigInt(0) &&
@@ -19002,7 +19002,7 @@ async function createWeeklyReport({ week, gcaUrls, apiUrl, }) {
19002
19002
  glowWeight === BigInt(0))
19003
19003
  throw new Error(`Glow dust lost for farm ${farm.shortId} wallet ${split.walletAddress}`);
19004
19004
  // Overflow Check: Ensure individual leaf weights don't exceed the maximum allowed.
19005
- if (glowWeight > walletsRouter.MAX_WEIGHT || usdgWeight > walletsRouter.MAX_WEIGHT)
19005
+ if (glowWeight > farmsRouter.MAX_WEIGHT || usdgWeight > farmsRouter.MAX_WEIGHT)
19006
19006
  throw new Error(`Leaf weight overflow on wallet ${split.walletAddress}`);
19007
19007
  // Accumulate the calculated weights into the map for the recipient wallet.
19008
19008
  accumulateLeafWeights(split.walletAddress, { wallet: split.walletAddress, glowWeight, usdgWeight }, map);
@@ -19030,9 +19030,9 @@ async function createWeeklyReport({ week, gcaUrls, apiUrl, }) {
19030
19030
  const totalGlowWeight = finalizedLeaves.reduce((acc, { glowWeight }) => acc + BigInt(glowWeight), 0n);
19031
19031
  const totalUSDGWeight = finalizedLeaves.reduce((acc, { usdgWeight }) => acc + BigInt(usdgWeight), 0n);
19032
19032
  // Total Weight Overflow Checks: Ensure sums don't exceed maximum.
19033
- if (totalGlowWeight > walletsRouter.MAX_WEIGHT)
19033
+ if (totalGlowWeight > farmsRouter.MAX_WEIGHT)
19034
19034
  throw new Error("Total glow weight overflow");
19035
- if (totalUSDGWeight > walletsRouter.MAX_WEIGHT)
19035
+ if (totalUSDGWeight > farmsRouter.MAX_WEIGHT)
19036
19036
  throw new Error("Total USDG weight overflow");
19037
19037
  // Generate Merkle proofs for each leaf and verify them.
19038
19038
  const leavesWithProofs = finalizedLeaves.map((leaf) => {
@@ -19066,10 +19066,10 @@ async function createWeeklyReport({ week, gcaUrls, apiUrl, }) {
19066
19066
  // Calculate the total expected credits based on the adjusted values used.
19067
19067
  const totalExpectedCredits = farms.reduce((acc, f) => {
19068
19068
  const adj = shortIdToAdjustedCredit.get(String(f.shortId)) ?? BigInt(0);
19069
- return acc.plus(fromBigInt(adj, walletsRouter.USDG_WEIGHT_DECIMAL_PRECISION));
19069
+ return acc.plus(fromBigInt(adj, farmsRouter.USDG_WEIGHT_DECIMAL_PRECISION));
19070
19070
  }, new Decimal(0));
19071
19071
  // Convert total USDG weight back to human-readable decimal for deviation check.
19072
- const totalUSDGWeightHuman = new Decimal(viem.formatUnits(totalUSDGWeight, walletsRouter.USDG_WEIGHT_DECIMAL_PRECISION));
19072
+ const totalUSDGWeightHuman = new Decimal(viem.formatUnits(totalUSDGWeight, farmsRouter.USDG_WEIGHT_DECIMAL_PRECISION));
19073
19073
  // Check deviation between total adjusted credits used and the final sum of USDG weights.
19074
19074
  if (greaterThanMaxDeviation(totalExpectedCredits.toNumber(), totalUSDGWeightHuman.toNumber(), 0.001 // 0.1% tolerance
19075
19075
  )) {
@@ -19080,7 +19080,7 @@ async function createWeeklyReport({ week, gcaUrls, apiUrl, }) {
19080
19080
  throw new Error("totalExpectedCredits vs USDG weight deviation >0.1% ");
19081
19081
  }
19082
19082
  // Convert total Glow weight back to human-readable decimal.
19083
- const totalGlowWeightHuman = new Decimal(viem.formatUnits(totalGlowWeight, walletsRouter.GLOW_WEIGHT_DECIMAL_PRECISION));
19083
+ const totalGlowWeightHuman = new Decimal(viem.formatUnits(totalGlowWeight, farmsRouter.GLOW_WEIGHT_DECIMAL_PRECISION));
19084
19084
  // Sum the original weekly protocol fee payments from farm data.
19085
19085
  const totalProtocolFeePayments = farms.reduce((acc, f) => acc + f.weeklyPayment, 0);
19086
19086
  // Check deviation between total glow weight and total protocol fees paid.
@@ -19103,18 +19103,18 @@ async function createWeeklyReport({ week, gcaUrls, apiUrl, }) {
19103
19103
  totalUSDGWeightInFinalized: totalUSDGWeight.toString(),
19104
19104
  totalUSDGWeightHuman: totalUSDGWeightHuman.toString(),
19105
19105
  root: merkleRoot,
19106
- glowWeightDecimals: walletsRouter.GLOW_WEIGHT_DECIMAL_PRECISION,
19107
- usdgWeightDecimals: walletsRouter.USDG_WEIGHT_DECIMAL_PRECISION,
19106
+ glowWeightDecimals: farmsRouter.GLOW_WEIGHT_DECIMAL_PRECISION,
19107
+ usdgWeightDecimals: farmsRouter.USDG_WEIGHT_DECIMAL_PRECISION,
19108
19108
  };
19109
19109
  // List of shortIds and their final adjusted credit value (human-readable).
19110
19110
  const shortIdAdjustedList = Array.from(shortIdToAdjustedCredit.entries()).map(([shortId, creditBigInt]) => ({
19111
19111
  shortId,
19112
- adjustedCredit: fromBigInt(creditBigInt, walletsRouter.USDG_WEIGHT_DECIMAL_PRECISION).toString(),
19112
+ adjustedCredit: fromBigInt(creditBigInt, farmsRouter.USDG_WEIGHT_DECIMAL_PRECISION).toString(),
19113
19113
  }));
19114
19114
  // Detailed comparison between originally reported credits and adjusted credits for each farm.
19115
19115
  const creditsDeviationList = farms.map((farm) => {
19116
19116
  const adj = shortIdToAdjustedCredit.get(String(farm.shortId)) ?? BigInt(0);
19117
- const adjusted = fromBigInt(adj, walletsRouter.USDG_WEIGHT_DECIMAL_PRECISION);
19117
+ const adjusted = fromBigInt(adj, farmsRouter.USDG_WEIGHT_DECIMAL_PRECISION);
19118
19118
  const produced = new Decimal(farm.carbonCreditsProduced);
19119
19119
  let deviation;
19120
19120
  let absDeviation;
@@ -19153,48 +19153,12 @@ async function createWeeklyReport({ week, gcaUrls, apiUrl, }) {
19153
19153
  };
19154
19154
  }
19155
19155
 
19156
- function parseApiError(error) {
19157
- if (!error)
19158
- return "Unknown error";
19159
- if (error instanceof Error)
19160
- return error.message;
19161
- const possible = error;
19162
- return possible?.error?.message ?? possible?.message ?? "Unknown error";
19163
- }
19164
- function FarmsRouter(baseUrl) {
19165
- if (!baseUrl)
19166
- throw new Error("CONTROL API base URL is not set");
19167
- const request = async (path, init) => {
19168
- const res = await fetch(`${baseUrl}${path}`, init);
19169
- if (!res.ok) {
19170
- const errData = await res.json().catch(() => ({}));
19171
- throw new Error(errData?.error || `Request to ${path} failed`);
19172
- }
19173
- return (await res.json());
19174
- };
19175
- const fetchSponsoredFarms = async (sponsorWallet) => {
19176
- try {
19177
- const query = sponsorWallet
19178
- ? `?sponsorWallet=${encodeURIComponent(sponsorWallet)}`
19179
- : "";
19180
- const data = await request(`/farms/sponsored${query}`);
19181
- return data.farms ?? [];
19182
- }
19183
- catch (error) {
19184
- throw new Error(parseApiError(error));
19185
- }
19186
- };
19187
- return {
19188
- fetchSponsoredFarms,
19189
- };
19190
- }
19191
-
19192
- exports.ControlRouter = walletsRouter.ControlRouter;
19193
- exports.KickstarterRouter = walletsRouter.KickstarterRouter;
19194
- exports.RegionRouter = walletsRouter.RegionRouter;
19195
- exports.WalletsRouter = walletsRouter.WalletsRouter;
19196
- exports.useForwarder = walletsRouter.useForwarder;
19197
- exports.FarmsRouter = FarmsRouter;
19156
+ exports.ControlRouter = farmsRouter.ControlRouter;
19157
+ exports.FarmsRouter = farmsRouter.FarmsRouter;
19158
+ exports.KickstarterRouter = farmsRouter.KickstarterRouter;
19159
+ exports.RegionRouter = farmsRouter.RegionRouter;
19160
+ exports.WalletsRouter = farmsRouter.WalletsRouter;
19161
+ exports.useForwarder = farmsRouter.useForwarder;
19198
19162
  exports.GENESIS_TIMESTAMP = GENESIS_TIMESTAMP;
19199
19163
  exports.createWeeklyReport = createWeeklyReport;
19200
19164
  exports.createWeeklyReportLegacy = createWeeklyReportLegacy;