@sudobility/heavymath_ui 0.0.3

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.
Files changed (201) hide show
  1. package/dist/components/dealer/DealerNFTList.d.ts +6 -0
  2. package/dist/components/dealer/DealerNFTList.d.ts.map +1 -0
  3. package/dist/components/dealer/DealerNFTList.js +46 -0
  4. package/dist/components/dealer/DealerNFTList.js.map +1 -0
  5. package/dist/components/dealer/DealerNFTSelector.d.ts +8 -0
  6. package/dist/components/dealer/DealerNFTSelector.d.ts.map +1 -0
  7. package/dist/components/dealer/DealerNFTSelector.js +10 -0
  8. package/dist/components/dealer/DealerNFTSelector.js.map +1 -0
  9. package/dist/components/dealer/UpcomingGamesWidget.d.ts +8 -0
  10. package/dist/components/dealer/UpcomingGamesWidget.d.ts.map +1 -0
  11. package/dist/components/dealer/UpcomingGamesWidget.js +68 -0
  12. package/dist/components/dealer/UpcomingGamesWidget.js.map +1 -0
  13. package/dist/components/icons/index.d.ts +2 -0
  14. package/dist/components/icons/index.d.ts.map +1 -0
  15. package/dist/components/icons/index.js +2 -0
  16. package/dist/components/icons/index.js.map +1 -0
  17. package/dist/components/market/GameMarketsSection.d.ts +16 -0
  18. package/dist/components/market/GameMarketsSection.d.ts.map +1 -0
  19. package/dist/components/market/GameMarketsSection.js +18 -0
  20. package/dist/components/market/GameMarketsSection.js.map +1 -0
  21. package/dist/components/market/InlineCreateMarketForm.d.ts +17 -0
  22. package/dist/components/market/InlineCreateMarketForm.d.ts.map +1 -0
  23. package/dist/components/market/InlineCreateMarketForm.js +274 -0
  24. package/dist/components/market/InlineCreateMarketForm.js.map +1 -0
  25. package/dist/components/market/LeagueMarketsSection.d.ts +16 -0
  26. package/dist/components/market/LeagueMarketsSection.d.ts.map +1 -0
  27. package/dist/components/market/LeagueMarketsSection.js +15 -0
  28. package/dist/components/market/LeagueMarketsSection.js.map +1 -0
  29. package/dist/components/market/MarketCard.d.ts +8 -0
  30. package/dist/components/market/MarketCard.d.ts.map +1 -0
  31. package/dist/components/market/MarketCard.js +30 -0
  32. package/dist/components/market/MarketCard.js.map +1 -0
  33. package/dist/components/market/MarketList.d.ts +9 -0
  34. package/dist/components/market/MarketList.d.ts.map +1 -0
  35. package/dist/components/market/MarketList.js +17 -0
  36. package/dist/components/market/MarketList.js.map +1 -0
  37. package/dist/components/market/MarketStatusBadge.d.ts +8 -0
  38. package/dist/components/market/MarketStatusBadge.d.ts.map +1 -0
  39. package/dist/components/market/MarketStatusBadge.js +31 -0
  40. package/dist/components/market/MarketStatusBadge.js.map +1 -0
  41. package/dist/components/market/PredictionSlider.d.ts +11 -0
  42. package/dist/components/market/PredictionSlider.d.ts.map +1 -0
  43. package/dist/components/market/PredictionSlider.js +55 -0
  44. package/dist/components/market/PredictionSlider.js.map +1 -0
  45. package/dist/components/market/SportPredictionCard.d.ts +15 -0
  46. package/dist/components/market/SportPredictionCard.d.ts.map +1 -0
  47. package/dist/components/market/SportPredictionCard.js +92 -0
  48. package/dist/components/market/SportPredictionCard.js.map +1 -0
  49. package/dist/components/market/TeamMarketsSection.d.ts +17 -0
  50. package/dist/components/market/TeamMarketsSection.d.ts.map +1 -0
  51. package/dist/components/market/TeamMarketsSection.js +8 -0
  52. package/dist/components/market/TeamMarketsSection.js.map +1 -0
  53. package/dist/components/market/TeamTournamentMarketForm.d.ts +19 -0
  54. package/dist/components/market/TeamTournamentMarketForm.d.ts.map +1 -0
  55. package/dist/components/market/TeamTournamentMarketForm.js +92 -0
  56. package/dist/components/market/TeamTournamentMarketForm.js.map +1 -0
  57. package/dist/components/market/TournamentMarketForm.d.ts +19 -0
  58. package/dist/components/market/TournamentMarketForm.d.ts.map +1 -0
  59. package/dist/components/market/TournamentMarketForm.js +86 -0
  60. package/dist/components/market/TournamentMarketForm.js.map +1 -0
  61. package/dist/components/market/index.d.ts +12 -0
  62. package/dist/components/market/index.d.ts.map +1 -0
  63. package/dist/components/market/index.js +12 -0
  64. package/dist/components/market/index.js.map +1 -0
  65. package/dist/components/sports/SeasonSelector.d.ts +10 -0
  66. package/dist/components/sports/SeasonSelector.d.ts.map +1 -0
  67. package/dist/components/sports/SeasonSelector.js +13 -0
  68. package/dist/components/sports/SeasonSelector.js.map +1 -0
  69. package/dist/components/ui/AnimatedCollapse.d.ts +9 -0
  70. package/dist/components/ui/AnimatedCollapse.d.ts.map +1 -0
  71. package/dist/components/ui/AnimatedCollapse.js +8 -0
  72. package/dist/components/ui/AnimatedCollapse.js.map +1 -0
  73. package/dist/components/ui/FavoriteStar.d.ts +13 -0
  74. package/dist/components/ui/FavoriteStar.d.ts.map +1 -0
  75. package/dist/components/ui/FavoriteStar.js +47 -0
  76. package/dist/components/ui/FavoriteStar.js.map +1 -0
  77. package/dist/components/wallet/ConnectedWalletMenu.d.ts +16 -0
  78. package/dist/components/wallet/ConnectedWalletMenu.d.ts.map +1 -0
  79. package/dist/components/wallet/ConnectedWalletMenu.js +131 -0
  80. package/dist/components/wallet/ConnectedWalletMenu.js.map +1 -0
  81. package/dist/components/wallet/DealerRoute.d.ts +6 -0
  82. package/dist/components/wallet/DealerRoute.d.ts.map +1 -0
  83. package/dist/components/wallet/DealerRoute.js +20 -0
  84. package/dist/components/wallet/DealerRoute.js.map +1 -0
  85. package/dist/components/wallet/ProtectedRoute.d.ts +8 -0
  86. package/dist/components/wallet/ProtectedRoute.d.ts.map +1 -0
  87. package/dist/components/wallet/ProtectedRoute.js +17 -0
  88. package/dist/components/wallet/ProtectedRoute.js.map +1 -0
  89. package/dist/components/wallet/WalletConnectionModal.d.ts +7 -0
  90. package/dist/components/wallet/WalletConnectionModal.d.ts.map +1 -0
  91. package/dist/components/wallet/WalletConnectionModal.js +334 -0
  92. package/dist/components/wallet/WalletConnectionModal.js.map +1 -0
  93. package/dist/config/app.d.ts +24 -0
  94. package/dist/config/app.d.ts.map +1 -0
  95. package/dist/config/app.js +18 -0
  96. package/dist/config/app.js.map +1 -0
  97. package/dist/config/chains.d.ts +1070 -0
  98. package/dist/config/chains.d.ts.map +1 -0
  99. package/dist/config/chains.js +28 -0
  100. package/dist/config/chains.js.map +1 -0
  101. package/dist/config/contracts.d.ts +15 -0
  102. package/dist/config/contracts.d.ts.map +1 -0
  103. package/dist/config/contracts.js +62 -0
  104. package/dist/config/contracts.js.map +1 -0
  105. package/dist/config/sportCodes.d.ts +58 -0
  106. package/dist/config/sportCodes.d.ts.map +1 -0
  107. package/dist/config/sportCodes.js +78 -0
  108. package/dist/config/sportCodes.js.map +1 -0
  109. package/dist/context/IndexerContext.d.ts +34 -0
  110. package/dist/context/IndexerContext.d.ts.map +1 -0
  111. package/dist/context/IndexerContext.js +40 -0
  112. package/dist/context/IndexerContext.js.map +1 -0
  113. package/dist/context/WalletAuthContext.d.ts +26 -0
  114. package/dist/context/WalletAuthContext.d.ts.map +1 -0
  115. package/dist/context/WalletAuthContext.js +148 -0
  116. package/dist/context/WalletAuthContext.js.map +1 -0
  117. package/dist/hooks/index.d.ts +13 -0
  118. package/dist/hooks/index.d.ts.map +1 -0
  119. package/dist/hooks/index.js +13 -0
  120. package/dist/hooks/index.js.map +1 -0
  121. package/dist/hooks/useContractWithToast.d.ts +1348 -0
  122. package/dist/hooks/useContractWithToast.d.ts.map +1 -0
  123. package/dist/hooks/useContractWithToast.js +395 -0
  124. package/dist/hooks/useContractWithToast.js.map +1 -0
  125. package/dist/hooks/useDealerNFT.d.ts +71 -0
  126. package/dist/hooks/useDealerNFT.d.ts.map +1 -0
  127. package/dist/hooks/useDealerNFT.js +127 -0
  128. package/dist/hooks/useDealerNFT.js.map +1 -0
  129. package/dist/hooks/useDealerPermission.d.ts +11 -0
  130. package/dist/hooks/useDealerPermission.d.ts.map +1 -0
  131. package/dist/hooks/useDealerPermission.js +48 -0
  132. package/dist/hooks/useDealerPermission.js.map +1 -0
  133. package/dist/hooks/useFilteredSportsData.d.ts +20 -0
  134. package/dist/hooks/useFilteredSportsData.d.ts.map +1 -0
  135. package/dist/hooks/useFilteredSportsData.js +52 -0
  136. package/dist/hooks/useFilteredSportsData.js.map +1 -0
  137. package/dist/hooks/useGameMarkets.d.ts +23 -0
  138. package/dist/hooks/useGameMarkets.d.ts.map +1 -0
  139. package/dist/hooks/useGameMarkets.js +50 -0
  140. package/dist/hooks/useGameMarkets.js.map +1 -0
  141. package/dist/hooks/useLeagueMarkets.d.ts +11 -0
  142. package/dist/hooks/useLeagueMarkets.d.ts.map +1 -0
  143. package/dist/hooks/useLeagueMarkets.js +38 -0
  144. package/dist/hooks/useLeagueMarkets.js.map +1 -0
  145. package/dist/hooks/useMarketContract.d.ts +219 -0
  146. package/dist/hooks/useMarketContract.d.ts.map +1 -0
  147. package/dist/hooks/useMarketContract.js +790 -0
  148. package/dist/hooks/useMarketContract.js.map +1 -0
  149. package/dist/hooks/useToastActions.d.ts +13 -0
  150. package/dist/hooks/useToastActions.d.ts.map +1 -0
  151. package/dist/hooks/useToastActions.js +40 -0
  152. package/dist/hooks/useToastActions.js.map +1 -0
  153. package/dist/index.d.ts +43 -0
  154. package/dist/index.d.ts.map +1 -0
  155. package/dist/index.js +47 -0
  156. package/dist/index.js.map +1 -0
  157. package/dist/lib/evmClient.d.ts +299 -0
  158. package/dist/lib/evmClient.d.ts.map +1 -0
  159. package/dist/lib/evmClient.js +691 -0
  160. package/dist/lib/evmClient.js.map +1 -0
  161. package/dist/types/auth.d.ts +44 -0
  162. package/dist/types/auth.d.ts.map +1 -0
  163. package/dist/types/auth.js +17 -0
  164. package/dist/types/auth.js.map +1 -0
  165. package/dist/types/dealer.d.ts +59 -0
  166. package/dist/types/dealer.d.ts.map +1 -0
  167. package/dist/types/dealer.js +31 -0
  168. package/dist/types/dealer.js.map +1 -0
  169. package/dist/types/market.d.ts +79 -0
  170. package/dist/types/market.d.ts.map +1 -0
  171. package/dist/types/market.js +47 -0
  172. package/dist/types/market.js.map +1 -0
  173. package/dist/utils/conditionData.d.ts +8 -0
  174. package/dist/utils/conditionData.d.ts.map +1 -0
  175. package/dist/utils/conditionData.js +7 -0
  176. package/dist/utils/conditionData.js.map +1 -0
  177. package/dist/utils/datetime.d.ts +3 -0
  178. package/dist/utils/datetime.d.ts.map +1 -0
  179. package/dist/utils/datetime.js +13 -0
  180. package/dist/utils/datetime.js.map +1 -0
  181. package/dist/utils/format.d.ts +79 -0
  182. package/dist/utils/format.d.ts.map +1 -0
  183. package/dist/utils/format.js +144 -0
  184. package/dist/utils/format.js.map +1 -0
  185. package/dist/utils/marketDisplay.d.ts +28 -0
  186. package/dist/utils/marketDisplay.d.ts.map +1 -0
  187. package/dist/utils/marketDisplay.js +45 -0
  188. package/dist/utils/marketDisplay.js.map +1 -0
  189. package/dist/utils/marketId.d.ts +8 -0
  190. package/dist/utils/marketId.d.ts.map +1 -0
  191. package/dist/utils/marketId.js +12 -0
  192. package/dist/utils/marketId.js.map +1 -0
  193. package/dist/utils/oracleId.d.ts +33 -0
  194. package/dist/utils/oracleId.d.ts.map +1 -0
  195. package/dist/utils/oracleId.js +62 -0
  196. package/dist/utils/oracleId.js.map +1 -0
  197. package/dist/utils/sportsSeason.d.ts +10 -0
  198. package/dist/utils/sportsSeason.d.ts.map +1 -0
  199. package/dist/utils/sportsSeason.js +39 -0
  200. package/dist/utils/sportsSeason.js.map +1 -0
  201. package/package.json +85 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chains.d.ts","sourceRoot":"","sources":["../../src/config/chains.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import { mainnet, sepolia, polygon, arbitrum, optimism } from 'viem/chains';
2
+ // Supported chains for the prediction market
3
+ export const supportedChains = [
4
+ mainnet,
5
+ sepolia,
6
+ polygon,
7
+ arbitrum,
8
+ optimism,
9
+ ];
10
+ // Default chain (Sepolia for testing)
11
+ export const defaultChain = sepolia;
12
+ // Chain IDs for quick reference
13
+ export const CHAIN_IDS = {
14
+ MAINNET: mainnet.id,
15
+ SEPOLIA: sepolia.id,
16
+ POLYGON: polygon.id,
17
+ ARBITRUM: arbitrum.id,
18
+ OPTIMISM: optimism.id,
19
+ };
20
+ // Get chain by ID
21
+ export function getChainById(chainId) {
22
+ return supportedChains.find(chain => chain.id === chainId);
23
+ }
24
+ // Check if chain is supported
25
+ export function isSupportedChain(chainId) {
26
+ return supportedChains.some(chain => chain.id === chainId);
27
+ }
28
+ //# sourceMappingURL=chains.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chains.js","sourceRoot":"","sources":["../../src/config/chains.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5E,6CAA6C;AAC7C,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,OAAO;IACP,OAAO;IACP,OAAO;IACP,QAAQ;IACR,QAAQ;CACA,CAAC;AAEX,sCAAsC;AACtC,MAAM,CAAC,MAAM,YAAY,GAAG,OAAO,CAAC;AAEpC,gCAAgC;AAChC,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,OAAO,EAAE,OAAO,CAAC,EAAE;IACnB,OAAO,EAAE,OAAO,CAAC,EAAE;IACnB,OAAO,EAAE,OAAO,CAAC,EAAE;IACnB,QAAQ,EAAE,QAAQ,CAAC,EAAE;IACrB,QAAQ,EAAE,QAAQ,CAAC,EAAE;CACb,CAAC;AAEX,kBAAkB;AAClB,MAAM,UAAU,YAAY,CAAC,OAAe;IAC1C,OAAO,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,OAAO,CAAC,CAAC;AAC7D,CAAC;AAED,8BAA8B;AAC9B,MAAM,UAAU,gBAAgB,CAAC,OAAe;IAC9C,OAAO,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,OAAO,CAAC,CAAC;AAC7D,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { Address } from 'viem';
2
+ export interface ContractAddresses {
3
+ predictionMarket: Address;
4
+ dealerNFT: Address;
5
+ oracleResolver: Address;
6
+ usdc: Address;
7
+ }
8
+ /**
9
+ * Set contract address overrides. Called by consuming apps to configure
10
+ * contract addresses (typically from env vars).
11
+ */
12
+ export declare function setContractAddresses(chainId: number, addresses: Partial<ContractAddresses>): void;
13
+ export declare function getContractAddresses(chainId: number): ContractAddresses | undefined;
14
+ export declare function getContractAddress(chainId: number, contract: keyof ContractAddresses): Address | undefined;
15
+ //# sourceMappingURL=contracts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../../src/config/contracts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAGpC,MAAM,WAAW,iBAAiB;IAChC,gBAAgB,EAAE,OAAO,CAAC;IAC1B,SAAS,EAAE,OAAO,CAAC;IACnB,cAAc,EAAE,OAAO,CAAC;IACxB,IAAI,EAAE,OAAO,CAAC;CACf;AAwCD;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,OAAO,CAAC,iBAAiB,CAAC,GACpC,IAAI,CAEN;AAED,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,GACd,iBAAiB,GAAG,SAAS,CAa/B;AAED,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,iBAAiB,GAChC,OAAO,GAAG,SAAS,CAErB"}
@@ -0,0 +1,62 @@
1
+ import { CHAIN_IDS } from './chains';
2
+ const ZERO = '0x0000000000000000000000000000000000000000';
3
+ // Default addresses per chain (well-known USDC addresses, zero for contracts)
4
+ const defaultAddresses = {
5
+ [CHAIN_IDS.SEPOLIA]: {
6
+ predictionMarket: ZERO,
7
+ dealerNFT: ZERO,
8
+ oracleResolver: ZERO,
9
+ usdc: ZERO,
10
+ },
11
+ [CHAIN_IDS.MAINNET]: {
12
+ predictionMarket: ZERO,
13
+ dealerNFT: ZERO,
14
+ oracleResolver: ZERO,
15
+ usdc: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',
16
+ },
17
+ [CHAIN_IDS.POLYGON]: {
18
+ predictionMarket: ZERO,
19
+ dealerNFT: ZERO,
20
+ oracleResolver: ZERO,
21
+ usdc: '0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359',
22
+ },
23
+ [CHAIN_IDS.ARBITRUM]: {
24
+ predictionMarket: ZERO,
25
+ dealerNFT: ZERO,
26
+ oracleResolver: ZERO,
27
+ usdc: '0xaf88d065e77c8cC2239327C5EDb3A432268e5831',
28
+ },
29
+ [CHAIN_IDS.OPTIMISM]: {
30
+ predictionMarket: ZERO,
31
+ dealerNFT: ZERO,
32
+ oracleResolver: ZERO,
33
+ usdc: '0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85',
34
+ },
35
+ };
36
+ const _overrides = {};
37
+ /**
38
+ * Set contract address overrides. Called by consuming apps to configure
39
+ * contract addresses (typically from env vars).
40
+ */
41
+ export function setContractAddresses(chainId, addresses) {
42
+ _overrides[chainId] = { ..._overrides[chainId], ...addresses };
43
+ }
44
+ export function getContractAddresses(chainId) {
45
+ const defaults = defaultAddresses[chainId];
46
+ const overrides = _overrides[chainId];
47
+ if (!defaults && !overrides)
48
+ return undefined;
49
+ return {
50
+ ...(defaults || {
51
+ predictionMarket: ZERO,
52
+ dealerNFT: ZERO,
53
+ oracleResolver: ZERO,
54
+ usdc: ZERO,
55
+ }),
56
+ ...overrides,
57
+ };
58
+ }
59
+ export function getContractAddress(chainId, contract) {
60
+ return getContractAddresses(chainId)?.[contract];
61
+ }
62
+ //# sourceMappingURL=contracts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contracts.js","sourceRoot":"","sources":["../../src/config/contracts.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AASrC,MAAM,IAAI,GAAY,4CAA4C,CAAC;AAEnE,8EAA8E;AAC9E,MAAM,gBAAgB,GAAsC;IAC1D,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE;QACnB,gBAAgB,EAAE,IAAI;QACtB,SAAS,EAAE,IAAI;QACf,cAAc,EAAE,IAAI;QACpB,IAAI,EAAE,IAAI;KACX;IACD,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE;QACnB,gBAAgB,EAAE,IAAI;QACtB,SAAS,EAAE,IAAI;QACf,cAAc,EAAE,IAAI;QACpB,IAAI,EAAE,4CAAuD;KAC9D;IACD,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE;QACnB,gBAAgB,EAAE,IAAI;QACtB,SAAS,EAAE,IAAI;QACf,cAAc,EAAE,IAAI;QACpB,IAAI,EAAE,4CAAuD;KAC9D;IACD,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE;QACpB,gBAAgB,EAAE,IAAI;QACtB,SAAS,EAAE,IAAI;QACf,cAAc,EAAE,IAAI;QACpB,IAAI,EAAE,4CAAuD;KAC9D;IACD,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE;QACpB,gBAAgB,EAAE,IAAI;QACtB,SAAS,EAAE,IAAI;QACf,cAAc,EAAE,IAAI;QACpB,IAAI,EAAE,4CAAuD;KAC9D;CACF,CAAC;AAEF,MAAM,UAAU,GAA+C,EAAE,CAAC;AAElE;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAClC,OAAe,EACf,SAAqC;IAErC,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC,OAAO,CAAC,EAAE,GAAG,SAAS,EAAE,CAAC;AACjE,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,OAAe;IAEf,MAAM,QAAQ,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAC3C,MAAM,SAAS,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;IACtC,IAAI,CAAC,QAAQ,IAAI,CAAC,SAAS;QAAE,OAAO,SAAS,CAAC;IAC9C,OAAO;QACL,GAAG,CAAC,QAAQ,IAAI;YACd,gBAAgB,EAAE,IAAI;YACtB,SAAS,EAAE,IAAI;YACf,cAAc,EAAE,IAAI;YACpB,IAAI,EAAE,IAAI;SACX,CAAC;QACF,GAAG,SAAS;KACb,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,OAAe,EACf,QAAiC;IAEjC,OAAO,oBAAoB,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;AACnD,CAAC"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * @fileoverview Sport code constants and helpers
3
+ * @description Maps sport slugs to numeric codes used as market subCategory
4
+ * values and in oracleId encoding.
5
+ */
6
+ /** Numeric sport codes matching market subCategory values for SPORTS category */
7
+ export declare const SPORT_CODES: {
8
+ readonly soccer: 1;
9
+ readonly basketball: 2;
10
+ readonly nfl: 3;
11
+ readonly baseball: 4;
12
+ readonly hockey: 5;
13
+ readonly rugby: 6;
14
+ readonly f1: 7;
15
+ readonly mma: 8;
16
+ readonly handball: 9;
17
+ readonly volleyball: 10;
18
+ };
19
+ /** Numeric sport code value */
20
+ export type SportCode = (typeof SPORT_CODES)[keyof typeof SPORT_CODES];
21
+ /** Sport URL slug */
22
+ export type SportSlug = keyof typeof SPORT_CODES;
23
+ /**
24
+ * Get the URL slug for a numeric sport code.
25
+ *
26
+ * @param code - Numeric sport code
27
+ * @returns The sport slug (e.g., 'soccer') or undefined if invalid
28
+ */
29
+ export declare function getSportSlug(code: number): SportSlug | undefined;
30
+ /**
31
+ * Get the numeric code for a sport slug.
32
+ *
33
+ * @param slug - Sport URL slug (e.g., 'soccer')
34
+ * @returns The numeric sport code or undefined if invalid
35
+ */
36
+ export declare function getSportCode(slug: string): SportCode | undefined;
37
+ /**
38
+ * Type guard to check if a number is a valid sport code.
39
+ *
40
+ * @param value - Number to check
41
+ * @returns True if value is a valid SportCode
42
+ */
43
+ export declare function isSportCode(value: number): value is SportCode;
44
+ /**
45
+ * Get the event page path segment for a sport.
46
+ * Soccer uses "matches", F1 uses "races", MMA uses "fights", others use "games".
47
+ */
48
+ export declare function getSportEventPath(slug: SportSlug): string;
49
+ /**
50
+ * Build the full event page URL for a sport event.
51
+ *
52
+ * @param lang - Language prefix
53
+ * @param sportCode - Numeric sport code
54
+ * @param gameId - Game/fixture/race/fight ID
55
+ * @returns URL path like /en/sports/soccer/matches/123, or null if invalid sport
56
+ */
57
+ export declare function getSportEventUrl(lang: string, sportCode: number, gameId: number): string | null;
58
+ //# sourceMappingURL=sportCodes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sportCodes.d.ts","sourceRoot":"","sources":["../../src/config/sportCodes.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,iFAAiF;AACjF,eAAO,MAAM,WAAW;;;;;;;;;;;CAWd,CAAC;AAEX,+BAA+B;AAC/B,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,OAAO,WAAW,CAAC,CAAC;AAEvE,qBAAqB;AACrB,MAAM,MAAM,SAAS,GAAG,MAAM,OAAO,WAAW,CAAC;AAMjD;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAEhE;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAEhE;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,SAAS,CAE7D;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CAWzD;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,GACb,MAAM,GAAG,IAAI,CAKf"}
@@ -0,0 +1,78 @@
1
+ /**
2
+ * @fileoverview Sport code constants and helpers
3
+ * @description Maps sport slugs to numeric codes used as market subCategory
4
+ * values and in oracleId encoding.
5
+ */
6
+ /** Numeric sport codes matching market subCategory values for SPORTS category */
7
+ export const SPORT_CODES = {
8
+ soccer: 1,
9
+ basketball: 2,
10
+ nfl: 3,
11
+ baseball: 4,
12
+ hockey: 5,
13
+ rugby: 6,
14
+ f1: 7,
15
+ mma: 8,
16
+ handball: 9,
17
+ volleyball: 10,
18
+ };
19
+ const slugByCode = Object.fromEntries(Object.entries(SPORT_CODES).map(([slug, code]) => [code, slug]));
20
+ /**
21
+ * Get the URL slug for a numeric sport code.
22
+ *
23
+ * @param code - Numeric sport code
24
+ * @returns The sport slug (e.g., 'soccer') or undefined if invalid
25
+ */
26
+ export function getSportSlug(code) {
27
+ return slugByCode[code];
28
+ }
29
+ /**
30
+ * Get the numeric code for a sport slug.
31
+ *
32
+ * @param slug - Sport URL slug (e.g., 'soccer')
33
+ * @returns The numeric sport code or undefined if invalid
34
+ */
35
+ export function getSportCode(slug) {
36
+ return SPORT_CODES[slug];
37
+ }
38
+ /**
39
+ * Type guard to check if a number is a valid sport code.
40
+ *
41
+ * @param value - Number to check
42
+ * @returns True if value is a valid SportCode
43
+ */
44
+ export function isSportCode(value) {
45
+ return value >= 1 && value <= 10 && Number.isInteger(value);
46
+ }
47
+ /**
48
+ * Get the event page path segment for a sport.
49
+ * Soccer uses "matches", F1 uses "races", MMA uses "fights", others use "games".
50
+ */
51
+ export function getSportEventPath(slug) {
52
+ switch (slug) {
53
+ case 'soccer':
54
+ return 'matches';
55
+ case 'f1':
56
+ return 'races';
57
+ case 'mma':
58
+ return 'fights';
59
+ default:
60
+ return 'games';
61
+ }
62
+ }
63
+ /**
64
+ * Build the full event page URL for a sport event.
65
+ *
66
+ * @param lang - Language prefix
67
+ * @param sportCode - Numeric sport code
68
+ * @param gameId - Game/fixture/race/fight ID
69
+ * @returns URL path like /en/sports/soccer/matches/123, or null if invalid sport
70
+ */
71
+ export function getSportEventUrl(lang, sportCode, gameId) {
72
+ const slug = getSportSlug(sportCode);
73
+ if (!slug)
74
+ return null;
75
+ const segment = getSportEventPath(slug);
76
+ return `/${lang}/sports/${slug}/${segment}/${gameId}`;
77
+ }
78
+ //# sourceMappingURL=sportCodes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sportCodes.js","sourceRoot":"","sources":["../../src/config/sportCodes.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,iFAAiF;AACjF,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,MAAM,EAAE,CAAC;IACT,UAAU,EAAE,CAAC;IACb,GAAG,EAAE,CAAC;IACN,QAAQ,EAAE,CAAC;IACX,MAAM,EAAE,CAAC;IACT,KAAK,EAAE,CAAC;IACR,EAAE,EAAE,CAAC;IACL,GAAG,EAAE,CAAC;IACN,QAAQ,EAAE,CAAC;IACX,UAAU,EAAE,EAAE;CACN,CAAC;AAQX,MAAM,UAAU,GAAG,MAAM,CAAC,WAAW,CACnC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAChC,CAAC;AAElC;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,OAAO,UAAU,CAAC,IAAiB,CAAC,CAAC;AACvC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,OAAO,WAAW,CAAC,IAAiB,CAAC,CAAC;AACxC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,KAAa;IACvC,OAAO,KAAK,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE,IAAI,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAC9D,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAe;IAC/C,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,QAAQ;YACX,OAAO,SAAS,CAAC;QACnB,KAAK,IAAI;YACP,OAAO,OAAO,CAAC;QACjB,KAAK,KAAK;YACR,OAAO,QAAQ,CAAC;QAClB;YACE,OAAO,OAAO,CAAC;IACnB,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAC9B,IAAY,EACZ,SAAiB,EACjB,MAAc;IAEd,MAAM,IAAI,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;IACrC,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,MAAM,OAAO,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACxC,OAAO,IAAI,IAAI,WAAW,IAAI,IAAI,OAAO,IAAI,MAAM,EAAE,CAAC;AACxD,CAAC"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * @fileoverview Indexer Context Provider
3
+ * @description Provides a singleton IndexerClient instance to the React component tree.
4
+ * Always use the `useIndexer()` hook to access the client rather than constructing one directly.
5
+ */
6
+ import { type ReactNode } from 'react';
7
+ import { IndexerClient } from '@heavymath/indexer_client';
8
+ /** Shape of the IndexerContext value */
9
+ interface IndexerContextType {
10
+ /** The shared IndexerClient instance for API communication */
11
+ indexerClient: IndexerClient;
12
+ }
13
+ /** Props for the IndexerProvider component */
14
+ interface IndexerProviderProps {
15
+ children: ReactNode;
16
+ }
17
+ /**
18
+ * Provides a memoized IndexerClient instance to descendant components.
19
+ * Must be placed inside SudobilityApp (which provides the DI network client).
20
+ *
21
+ * @param props - Component props containing children
22
+ * @returns The provider wrapping children with IndexerClient access
23
+ */
24
+ export declare function IndexerProvider({ children }: IndexerProviderProps): import("react/jsx-runtime").JSX.Element;
25
+ /**
26
+ * Hook to access the IndexerClient from context.
27
+ * Must be used within an IndexerProvider.
28
+ *
29
+ * @returns Object containing the shared indexerClient instance
30
+ * @throws Error if used outside of IndexerProvider
31
+ */
32
+ export declare function useIndexer(): IndexerContextType;
33
+ export {};
34
+ //# sourceMappingURL=IndexerContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IndexerContext.d.ts","sourceRoot":"","sources":["../../src/context/IndexerContext.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAsC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAE3E,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAG1D,wCAAwC;AACxC,UAAU,kBAAkB;IAC1B,8DAA8D;IAC9D,aAAa,EAAE,aAAa,CAAC;CAC9B;AAID,8CAA8C;AAC9C,UAAU,oBAAoB;IAC5B,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,EAAE,QAAQ,EAAE,EAAE,oBAAoB,2CAajE;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,uBAMzB"}
@@ -0,0 +1,40 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ /**
3
+ * @fileoverview Indexer Context Provider
4
+ * @description Provides a singleton IndexerClient instance to the React component tree.
5
+ * Always use the `useIndexer()` hook to access the client rather than constructing one directly.
6
+ */
7
+ import { createContext, useContext, useMemo } from 'react';
8
+ import { webNetworkClient } from '@sudobility/di';
9
+ import { IndexerClient } from '@heavymath/indexer_client';
10
+ import { getAppConfig } from '../config/app';
11
+ const IndexerContext = createContext(undefined);
12
+ /**
13
+ * Provides a memoized IndexerClient instance to descendant components.
14
+ * Must be placed inside SudobilityApp (which provides the DI network client).
15
+ *
16
+ * @param props - Component props containing children
17
+ * @returns The provider wrapping children with IndexerClient access
18
+ */
19
+ export function IndexerProvider({ children }) {
20
+ const indexerClient = useMemo(() => new IndexerClient(getAppConfig().indexerUrl, webNetworkClient), []);
21
+ const value = {
22
+ indexerClient,
23
+ };
24
+ return (_jsx(IndexerContext.Provider, { value: value, children: children }));
25
+ }
26
+ /**
27
+ * Hook to access the IndexerClient from context.
28
+ * Must be used within an IndexerProvider.
29
+ *
30
+ * @returns Object containing the shared indexerClient instance
31
+ * @throws Error if used outside of IndexerProvider
32
+ */
33
+ export function useIndexer() {
34
+ const context = useContext(IndexerContext);
35
+ if (context === undefined) {
36
+ throw new Error('useIndexer must be used within an IndexerProvider');
37
+ }
38
+ return context;
39
+ }
40
+ //# sourceMappingURL=IndexerContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IndexerContext.js","sourceRoot":"","sources":["../../src/context/IndexerContext.tsx"],"names":[],"mappings":";AAAA;;;;GAIG;AAEH,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,OAAO,EAAkB,MAAM,OAAO,CAAC;AAC3E,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAQ7C,MAAM,cAAc,GAAG,aAAa,CAAiC,SAAS,CAAC,CAAC;AAOhF;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAAC,EAAE,QAAQ,EAAwB;IAChE,MAAM,aAAa,GAAG,OAAO,CAC3B,GAAG,EAAE,CAAC,IAAI,aAAa,CAAC,YAAY,EAAE,CAAC,UAAU,EAAE,gBAAgB,CAAC,EACpE,EAAE,CACH,CAAC;IAEF,MAAM,KAAK,GAAuB;QAChC,aAAa;KACd,CAAC;IAEF,OAAO,CACL,KAAC,cAAc,CAAC,QAAQ,IAAC,KAAK,EAAE,KAAK,YAAG,QAAQ,GAA2B,CAC5E,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,UAAU;IACxB,MAAM,OAAO,GAAG,UAAU,CAAC,cAAc,CAAC,CAAC;IAC3C,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;IACvE,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,26 @@
1
+ import { type ReactNode } from 'react';
2
+ import { AuthStatus } from '../types/auth';
3
+ import type { Address } from 'viem';
4
+ interface AuthContextType {
5
+ address: Address | undefined;
6
+ chainId: number | undefined;
7
+ isConnected: boolean;
8
+ isConnecting: boolean;
9
+ isVerified: boolean;
10
+ status: AuthStatus;
11
+ isDealer: boolean;
12
+ dealerTokenIds: bigint[];
13
+ connect: () => void;
14
+ disconnect: () => void;
15
+ switchChain: (chainId: number) => void;
16
+ signVerificationMessage: () => Promise<boolean>;
17
+ }
18
+ interface AuthProviderProps {
19
+ children: ReactNode;
20
+ }
21
+ export declare function AuthProvider({ children }: AuthProviderProps): import("react/jsx-runtime").JSX.Element;
22
+ export declare function useAuth(): AuthContextType;
23
+ /** Alias for useAuth — used by apps that have a separate Firebase AuthContext */
24
+ export declare const useWalletAuth: typeof useAuth;
25
+ export {};
26
+ //# sourceMappingURL=WalletAuthContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WalletAuthContext.d.ts","sourceRoot":"","sources":["../../src/context/WalletAuthContext.tsx"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAUf,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAmBpC,UAAU,eAAe;IAEvB,OAAO,EAAE,OAAO,GAAG,SAAS,CAAC;IAC7B,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,WAAW,EAAE,OAAO,CAAC;IACrB,YAAY,EAAE,OAAO,CAAC;IACtB,UAAU,EAAE,OAAO,CAAC;IACpB,MAAM,EAAE,UAAU,CAAC;IAGnB,QAAQ,EAAE,OAAO,CAAC;IAClB,cAAc,EAAE,MAAM,EAAE,CAAC;IAGzB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,uBAAuB,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;CACjD;AAID,UAAU,iBAAiB;IACzB,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,wBAAgB,YAAY,CAAC,EAAE,QAAQ,EAAE,EAAE,iBAAiB,2CAoI3D;AAED,wBAAgB,OAAO,oBAMtB;AAED,iFAAiF;AACjF,eAAO,MAAM,aAAa,gBAAU,CAAC"}
@@ -0,0 +1,148 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { createContext, useContext, useMemo, useState, useCallback, } from 'react';
3
+ import { useAccount, useConnect, useDisconnect, useSwitchChain, useSignMessage, useReadContract, useReadContracts, } from 'wagmi';
4
+ import { AuthStatus } from '../types/auth';
5
+ import { erc721Abi } from 'viem';
6
+ import { getContractAddress } from '../config/contracts';
7
+ const STORAGE_KEY = 'heavymath_verified';
8
+ const tokenOfOwnerByIndexAbi = [
9
+ {
10
+ inputs: [
11
+ { name: 'owner', type: 'address' },
12
+ { name: 'index', type: 'uint256' },
13
+ ],
14
+ name: 'tokenOfOwnerByIndex',
15
+ outputs: [{ name: '', type: 'uint256' }],
16
+ stateMutability: 'view',
17
+ type: 'function',
18
+ },
19
+ ];
20
+ const AuthContext = createContext(undefined);
21
+ export function AuthProvider({ children }) {
22
+ const { address, chainId, isConnected, isConnecting, status: wagmiStatus, } = useAccount();
23
+ const { connect, connectors } = useConnect();
24
+ const { disconnect } = useDisconnect();
25
+ const { switchChain: wagmiSwitchChain } = useSwitchChain();
26
+ const { signMessageAsync } = useSignMessage();
27
+ // Version counter to trigger re-computation of isVerified after signing
28
+ const [verificationVersion, setVerificationVersion] = useState(0);
29
+ // Compute isVerified from localStorage (derived state, not effect-based)
30
+ const isVerified = useMemo(() => {
31
+ // verificationVersion is used to trigger re-computation after signing
32
+ void verificationVersion;
33
+ if (!address)
34
+ return false;
35
+ const storedAddress = localStorage.getItem(STORAGE_KEY);
36
+ return storedAddress === address;
37
+ }, [address, verificationVersion]);
38
+ // Map wagmi status to our AuthStatus
39
+ const status = useMemo(() => {
40
+ if (isConnecting)
41
+ return AuthStatus.Connecting;
42
+ if (isConnected && isVerified)
43
+ return AuthStatus.Verified;
44
+ if (isConnected)
45
+ return AuthStatus.Connected;
46
+ if (wagmiStatus === 'reconnecting')
47
+ return AuthStatus.Connecting;
48
+ return AuthStatus.Disconnected;
49
+ }, [isConnected, isConnecting, isVerified, wagmiStatus]);
50
+ // Connect handler - uses first available connector
51
+ const handleConnect = () => {
52
+ const connector = connectors[0];
53
+ if (connector) {
54
+ connect({ connector });
55
+ }
56
+ };
57
+ // Disconnect handler
58
+ const handleDisconnect = useCallback(() => {
59
+ disconnect();
60
+ localStorage.removeItem(STORAGE_KEY);
61
+ setVerificationVersion(v => v + 1);
62
+ }, [disconnect]);
63
+ // Sign verification message
64
+ const signVerificationMessage = useCallback(async () => {
65
+ if (!address)
66
+ return false;
67
+ try {
68
+ const message = `Welcome to HeavyMath!\n\nSign this message to verify your wallet ownership.\n\nWallet: ${address}\nTimestamp: ${Date.now()}`;
69
+ await signMessageAsync({ message });
70
+ // Store verified address and trigger re-computation
71
+ localStorage.setItem(STORAGE_KEY, address);
72
+ setVerificationVersion(v => v + 1);
73
+ return true;
74
+ }
75
+ catch (error) {
76
+ console.error('Signing failed:', error);
77
+ return false;
78
+ }
79
+ }, [address, signMessageAsync]);
80
+ // Switch chain handler
81
+ const handleSwitchChain = (targetChainId) => {
82
+ wagmiSwitchChain({ chainId: targetChainId });
83
+ };
84
+ // Check dealer status on-chain via ERC721 balanceOf
85
+ const dealerNFTAddress = chainId
86
+ ? getContractAddress(chainId, 'dealerNFT')
87
+ : undefined;
88
+ const { data: nftBalance } = useReadContract({
89
+ address: dealerNFTAddress,
90
+ abi: erc721Abi,
91
+ functionName: 'balanceOf',
92
+ args: address ? [address] : undefined,
93
+ query: {
94
+ enabled: !!address && !!dealerNFTAddress,
95
+ },
96
+ });
97
+ const isDealer = (nftBalance ?? 0n) > 0n;
98
+ // Enumerate dealer token IDs via ERC721Enumerable.tokenOfOwnerByIndex
99
+ const balanceCount = Number(nftBalance ?? 0n);
100
+ const tokenIdContracts = useMemo(() => {
101
+ if (!address || !dealerNFTAddress || balanceCount === 0)
102
+ return [];
103
+ return Array.from({ length: balanceCount }, (_, i) => ({
104
+ address: dealerNFTAddress,
105
+ abi: tokenOfOwnerByIndexAbi,
106
+ functionName: 'tokenOfOwnerByIndex',
107
+ args: [address, BigInt(i)],
108
+ }));
109
+ }, [address, dealerNFTAddress, balanceCount]);
110
+ const { data: tokenIdResults } = useReadContracts({
111
+ contracts: tokenIdContracts,
112
+ query: {
113
+ enabled: tokenIdContracts.length > 0,
114
+ },
115
+ });
116
+ const dealerTokenIds = useMemo(() => {
117
+ if (!tokenIdResults)
118
+ return [];
119
+ return tokenIdResults
120
+ .filter(r => r.status === 'success' && r.result !== undefined)
121
+ .map(r => r.result);
122
+ }, [tokenIdResults]);
123
+ const value = {
124
+ address,
125
+ chainId,
126
+ isConnected,
127
+ isConnecting,
128
+ isVerified,
129
+ status,
130
+ isDealer,
131
+ dealerTokenIds,
132
+ connect: handleConnect,
133
+ disconnect: handleDisconnect,
134
+ switchChain: handleSwitchChain,
135
+ signVerificationMessage,
136
+ };
137
+ return _jsx(AuthContext.Provider, { value: value, children: children });
138
+ }
139
+ export function useAuth() {
140
+ const context = useContext(AuthContext);
141
+ if (context === undefined) {
142
+ throw new Error('useAuth must be used within an AuthProvider');
143
+ }
144
+ return context;
145
+ }
146
+ /** Alias for useAuth — used by apps that have a separate Firebase AuthContext */
147
+ export const useWalletAuth = useAuth;
148
+ //# sourceMappingURL=WalletAuthContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WalletAuthContext.js","sourceRoot":"","sources":["../../src/context/WalletAuthContext.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * @fileoverview Hooks barrel export
3
+ * @description Re-exports all contract interaction hooks for convenient importing.
4
+ * Base hooks interact directly with the smart contract. Toast-wrapped variants
5
+ * additionally provide user-facing notification feedback.
6
+ */
7
+ /** Base contract interaction hooks (no UI feedback) */
8
+ export { useEVMClient, usePlacePrediction, useUpdatePrediction, useWithdrawPrediction, useClaimWinnings, useClaimRefund, useOnChainMarket, useOnChainPrediction, useCreateMarket, useResolveMarket, useResolveMarketWithOracle, useRequestOracleResolution, useCompleteOracleResolution, useLockMarket, useClaimLockRefund, useLockRefundAmount, useMarketSplit, useCancelMarket, useWithdrawDealerFees, useTestMode, useContractOwner, usePendingResolution, } from './useMarketContract';
9
+ /** Contract interaction hooks with toast notification feedback */
10
+ export { usePlacePredictionWithToast, useUpdatePredictionWithToast, useClaimWinningsWithToast, useClaimRefundWithToast, useCreateMarketWithToast, useResolveMarketWithToast, useResolveMarketWithOracleWithToast, useRequestOracleResolutionWithToast, useCompleteOracleResolutionWithToast, useLockMarketWithToast, useClaimLockRefundWithToast, useCancelMarketWithToast, useWithdrawDealerFeesWithToast, } from './useContractWithToast';
11
+ /** Dealer NFT hooks */
12
+ export { useMintDealerNFT, useMintDealerNFTWithToast } from './useDealerNFT';
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,uDAAuD;AACvD,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,mBAAmB,EACnB,qBAAqB,EACrB,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,oBAAoB,EACpB,eAAe,EACf,gBAAgB,EAChB,0BAA0B,EAC1B,0BAA0B,EAC1B,2BAA2B,EAC3B,aAAa,EACb,kBAAkB,EAClB,mBAAmB,EACnB,cAAc,EACd,eAAe,EACf,qBAAqB,EACrB,WAAW,EACX,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,qBAAqB,CAAC;AAE7B,kEAAkE;AAClE,OAAO,EACL,2BAA2B,EAC3B,4BAA4B,EAC5B,yBAAyB,EACzB,uBAAuB,EACvB,wBAAwB,EACxB,yBAAyB,EACzB,mCAAmC,EACnC,mCAAmC,EACnC,oCAAoC,EACpC,sBAAsB,EACtB,2BAA2B,EAC3B,wBAAwB,EACxB,8BAA8B,GAC/B,MAAM,wBAAwB,CAAC;AAEhC,uBAAuB;AACvB,OAAO,EAAE,gBAAgB,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * @fileoverview Hooks barrel export
3
+ * @description Re-exports all contract interaction hooks for convenient importing.
4
+ * Base hooks interact directly with the smart contract. Toast-wrapped variants
5
+ * additionally provide user-facing notification feedback.
6
+ */
7
+ /** Base contract interaction hooks (no UI feedback) */
8
+ export { useEVMClient, usePlacePrediction, useUpdatePrediction, useWithdrawPrediction, useClaimWinnings, useClaimRefund, useOnChainMarket, useOnChainPrediction, useCreateMarket, useResolveMarket, useResolveMarketWithOracle, useRequestOracleResolution, useCompleteOracleResolution, useLockMarket, useClaimLockRefund, useLockRefundAmount, useMarketSplit, useCancelMarket, useWithdrawDealerFees, useTestMode, useContractOwner, usePendingResolution, } from './useMarketContract';
9
+ /** Contract interaction hooks with toast notification feedback */
10
+ export { usePlacePredictionWithToast, useUpdatePredictionWithToast, useClaimWinningsWithToast, useClaimRefundWithToast, useCreateMarketWithToast, useResolveMarketWithToast, useResolveMarketWithOracleWithToast, useRequestOracleResolutionWithToast, useCompleteOracleResolutionWithToast, useLockMarketWithToast, useClaimLockRefundWithToast, useCancelMarketWithToast, useWithdrawDealerFeesWithToast, } from './useContractWithToast';
11
+ /** Dealer NFT hooks */
12
+ export { useMintDealerNFT, useMintDealerNFTWithToast } from './useDealerNFT';
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,uDAAuD;AACvD,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,mBAAmB,EACnB,qBAAqB,EACrB,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,oBAAoB,EACpB,eAAe,EACf,gBAAgB,EAChB,0BAA0B,EAC1B,0BAA0B,EAC1B,2BAA2B,EAC3B,aAAa,EACb,kBAAkB,EAClB,mBAAmB,EACnB,cAAc,EACd,eAAe,EACf,qBAAqB,EACrB,WAAW,EACX,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,qBAAqB,CAAC;AAE7B,kEAAkE;AAClE,OAAO,EACL,2BAA2B,EAC3B,4BAA4B,EAC5B,yBAAyB,EACzB,uBAAuB,EACvB,wBAAwB,EACxB,yBAAyB,EACzB,mCAAmC,EACnC,mCAAmC,EACnC,oCAAoC,EACpC,sBAAsB,EACtB,2BAA2B,EAC3B,wBAAwB,EACxB,8BAA8B,GAC/B,MAAM,wBAAwB,CAAC;AAEhC,uBAAuB;AACvB,OAAO,EAAE,gBAAgB,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC"}