@cedros/pay-react 1.0.4 → 1.1.0

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 (389) hide show
  1. package/README.md +297 -39
  2. package/dist/CedrosContext-DUT3cLZg.mjs +2474 -0
  3. package/dist/CedrosContext-efFL4kQz.js +11 -0
  4. package/dist/admin/index.d.ts +9 -0
  5. package/dist/admin/index.d.ts.map +1 -0
  6. package/dist/admin/plugin.d.ts +9 -0
  7. package/dist/admin/plugin.d.ts.map +1 -0
  8. package/dist/admin/types.d.ts +115 -0
  9. package/dist/admin/types.d.ts.map +1 -0
  10. package/dist/components/CedrosPay.d.ts.map +1 -1
  11. package/dist/components/CreditsButton.d.ts +42 -0
  12. package/dist/components/CreditsButton.d.ts.map +1 -0
  13. package/dist/components/CreditsSubscribeButton.d.ts +55 -0
  14. package/dist/components/CreditsSubscribeButton.d.ts.map +1 -0
  15. package/dist/components/CryptoButton.d.ts.map +1 -1
  16. package/dist/components/CryptoSubscribeButton.d.ts +50 -0
  17. package/dist/components/CryptoSubscribeButton.d.ts.map +1 -0
  18. package/dist/components/PaymentModal.d.ts +8 -2
  19. package/dist/components/PaymentModal.d.ts.map +1 -1
  20. package/dist/components/PurchaseButton.d.ts +14 -3
  21. package/dist/components/PurchaseButton.d.ts.map +1 -1
  22. package/dist/components/SubscribeButton.d.ts +55 -0
  23. package/dist/components/SubscribeButton.d.ts.map +1 -0
  24. package/dist/components/SubscriptionManagementPanel.d.ts +67 -0
  25. package/dist/components/SubscriptionManagementPanel.d.ts.map +1 -0
  26. package/dist/components/admin/AISettingsSection.d.ts +3 -0
  27. package/dist/components/admin/AISettingsSection.d.ts.map +1 -0
  28. package/dist/components/admin/AdminAuthManager.d.ts +95 -0
  29. package/dist/components/admin/AdminAuthManager.d.ts.map +1 -0
  30. package/dist/components/admin/CedrosPayAdminDashboard.d.ts +40 -0
  31. package/dist/components/admin/CedrosPayAdminDashboard.d.ts.map +1 -0
  32. package/dist/components/admin/ConfigEditor.d.ts +13 -0
  33. package/dist/components/admin/ConfigEditor.d.ts.map +1 -0
  34. package/dist/components/admin/CouponsSection.d.ts +3 -0
  35. package/dist/components/admin/CouponsSection.d.ts.map +1 -0
  36. package/dist/components/admin/Dropdown.d.ts +29 -0
  37. package/dist/components/admin/Dropdown.d.ts.map +1 -0
  38. package/dist/components/admin/FAQSection.d.ts +3 -0
  39. package/dist/components/admin/FAQSection.d.ts.map +1 -0
  40. package/dist/components/admin/MessagingSection.d.ts +10 -0
  41. package/dist/components/admin/MessagingSection.d.ts.map +1 -0
  42. package/dist/components/admin/OverviewSection.d.ts +3 -0
  43. package/dist/components/admin/OverviewSection.d.ts.map +1 -0
  44. package/dist/components/admin/PaymentSettingsSection.d.ts +3 -0
  45. package/dist/components/admin/PaymentSettingsSection.d.ts.map +1 -0
  46. package/dist/components/admin/ProductVariationsEditor.d.ts +14 -0
  47. package/dist/components/admin/ProductVariationsEditor.d.ts.map +1 -0
  48. package/dist/components/admin/ProductsSection.d.ts +3 -0
  49. package/dist/components/admin/ProductsSection.d.ts.map +1 -0
  50. package/dist/components/admin/RefundsSection.d.ts +3 -0
  51. package/dist/components/admin/RefundsSection.d.ts.map +1 -0
  52. package/dist/components/admin/SettingsSection.d.ts +10 -0
  53. package/dist/components/admin/SettingsSection.d.ts.map +1 -0
  54. package/dist/components/admin/SingleCategorySettings.d.ts +21 -0
  55. package/dist/components/admin/SingleCategorySettings.d.ts.map +1 -0
  56. package/dist/components/admin/StatsBar.d.ts +19 -0
  57. package/dist/components/admin/StatsBar.d.ts.map +1 -0
  58. package/dist/components/admin/StorefrontSection.d.ts +3 -0
  59. package/dist/components/admin/StorefrontSection.d.ts.map +1 -0
  60. package/dist/components/admin/SubscriptionsSection.d.ts +3 -0
  61. package/dist/components/admin/SubscriptionsSection.d.ts.map +1 -0
  62. package/dist/components/admin/TransactionsSection.d.ts +3 -0
  63. package/dist/components/admin/TransactionsSection.d.ts.map +1 -0
  64. package/dist/components/admin/VariantInventoryGrid.d.ts +19 -0
  65. package/dist/components/admin/VariantInventoryGrid.d.ts.map +1 -0
  66. package/dist/components/admin/VariationTypeEditor.d.ts +15 -0
  67. package/dist/components/admin/VariationTypeEditor.d.ts.map +1 -0
  68. package/dist/components/admin/configApi.d.ts +104 -0
  69. package/dist/components/admin/configApi.d.ts.map +1 -0
  70. package/dist/components/admin/icons.d.ts +50 -0
  71. package/dist/components/admin/icons.d.ts.map +1 -0
  72. package/dist/components/admin/index.d.ts +16 -0
  73. package/dist/components/admin/index.d.ts.map +1 -0
  74. package/dist/components/admin/sections-more.d.ts +12 -0
  75. package/dist/components/admin/sections-more.d.ts.map +1 -0
  76. package/dist/components/admin/sections.d.ts +12 -0
  77. package/dist/components/admin/sections.d.ts.map +1 -0
  78. package/dist/components/admin/types.d.ts +324 -0
  79. package/dist/components/admin/types.d.ts.map +1 -0
  80. package/dist/components/admin/useAdminAuth.d.ts +50 -0
  81. package/dist/components/admin/useAdminAuth.d.ts.map +1 -0
  82. package/dist/components/admin/useAutosave.d.ts +56 -0
  83. package/dist/components/admin/useAutosave.d.ts.map +1 -0
  84. package/dist/components/admin/useProductVariations.d.ts +56 -0
  85. package/dist/components/admin/useProductVariations.d.ts.map +1 -0
  86. package/dist/components/subscriptionPanelStyles.d.ts +12 -0
  87. package/dist/components/subscriptionPanelStyles.d.ts.map +1 -0
  88. package/dist/context/CedrosContext.d.ts +6 -0
  89. package/dist/context/CedrosContext.d.ts.map +1 -1
  90. package/dist/context/ThemeContext.d.ts +6 -0
  91. package/dist/context/ThemeContext.d.ts.map +1 -1
  92. package/dist/crypto-only.d.ts +1 -1
  93. package/dist/crypto-only.d.ts.map +1 -1
  94. package/dist/crypto-only.js +1 -1
  95. package/dist/crypto-only.mjs +16 -17
  96. package/dist/ecommerce/__tests__/cartCheckoutRequirements.test.d.ts +2 -0
  97. package/dist/ecommerce/__tests__/cartCheckoutRequirements.test.d.ts.map +1 -0
  98. package/dist/ecommerce/__tests__/cartProviderPersistence.test.d.ts +2 -0
  99. package/dist/ecommerce/__tests__/cartProviderPersistence.test.d.ts.map +1 -0
  100. package/dist/ecommerce/__tests__/cartReducer.test.d.ts +2 -0
  101. package/dist/ecommerce/__tests__/cartReducer.test.d.ts.map +1 -0
  102. package/dist/ecommerce/__tests__/cartServerMerge.test.d.ts +2 -0
  103. package/dist/ecommerce/__tests__/cartServerMerge.test.d.ts.map +1 -0
  104. package/dist/ecommerce/__tests__/checkoutPaymentMethods.test.d.ts +2 -0
  105. package/dist/ecommerce/__tests__/checkoutPaymentMethods.test.d.ts.map +1 -0
  106. package/dist/ecommerce/__tests__/checkoutReturn.test.d.ts +2 -0
  107. package/dist/ecommerce/__tests__/checkoutReturn.test.d.ts.map +1 -0
  108. package/dist/ecommerce/__tests__/checkoutSchema.test.d.ts +2 -0
  109. package/dist/ecommerce/__tests__/checkoutSchema.test.d.ts.map +1 -0
  110. package/dist/ecommerce/__tests__/mockAdapter.test.d.ts +2 -0
  111. package/dist/ecommerce/__tests__/mockAdapter.test.d.ts.map +1 -0
  112. package/dist/ecommerce/adapters/CommerceAdapter.d.ts +235 -0
  113. package/dist/ecommerce/adapters/CommerceAdapter.d.ts.map +1 -0
  114. package/dist/ecommerce/adapters/mock/mockAdapter.d.ts +3 -0
  115. package/dist/ecommerce/adapters/mock/mockAdapter.d.ts.map +1 -0
  116. package/dist/ecommerce/adapters/paywall/paywallAdapter.d.ts +6 -0
  117. package/dist/ecommerce/adapters/paywall/paywallAdapter.d.ts.map +1 -0
  118. package/dist/ecommerce/components/cart/CartLineItem.d.ts +12 -0
  119. package/dist/ecommerce/components/cart/CartLineItem.d.ts.map +1 -0
  120. package/dist/ecommerce/components/cart/CartPageContent.d.ts +6 -0
  121. package/dist/ecommerce/components/cart/CartPageContent.d.ts.map +1 -0
  122. package/dist/ecommerce/components/cart/CartPanel.d.ts +5 -0
  123. package/dist/ecommerce/components/cart/CartPanel.d.ts.map +1 -0
  124. package/dist/ecommerce/components/cart/CartSidebar.d.ts +11 -0
  125. package/dist/ecommerce/components/cart/CartSidebar.d.ts.map +1 -0
  126. package/dist/ecommerce/components/cart/CartSummary.d.ts +13 -0
  127. package/dist/ecommerce/components/cart/CartSummary.d.ts.map +1 -0
  128. package/dist/ecommerce/components/cart/PromoCodeInput.d.ts +6 -0
  129. package/dist/ecommerce/components/cart/PromoCodeInput.d.ts.map +1 -0
  130. package/dist/ecommerce/components/catalog/Breadcrumbs.d.ts +9 -0
  131. package/dist/ecommerce/components/catalog/Breadcrumbs.d.ts.map +1 -0
  132. package/dist/ecommerce/components/catalog/CategoryNav.d.ts +8 -0
  133. package/dist/ecommerce/components/catalog/CategoryNav.d.ts.map +1 -0
  134. package/dist/ecommerce/components/catalog/FilterPanel.d.ts +29 -0
  135. package/dist/ecommerce/components/catalog/FilterPanel.d.ts.map +1 -0
  136. package/dist/ecommerce/components/catalog/Price.d.ts +9 -0
  137. package/dist/ecommerce/components/catalog/Price.d.ts.map +1 -0
  138. package/dist/ecommerce/components/catalog/ProductCard.d.ts +14 -0
  139. package/dist/ecommerce/components/catalog/ProductCard.d.ts.map +1 -0
  140. package/dist/ecommerce/components/catalog/ProductGallery.d.ts +6 -0
  141. package/dist/ecommerce/components/catalog/ProductGallery.d.ts.map +1 -0
  142. package/dist/ecommerce/components/catalog/ProductGrid.d.ts +20 -0
  143. package/dist/ecommerce/components/catalog/ProductGrid.d.ts.map +1 -0
  144. package/dist/ecommerce/components/catalog/QuantitySelector.d.ts +8 -0
  145. package/dist/ecommerce/components/catalog/QuantitySelector.d.ts.map +1 -0
  146. package/dist/ecommerce/components/catalog/QuickViewDialog.d.ts +10 -0
  147. package/dist/ecommerce/components/catalog/QuickViewDialog.d.ts.map +1 -0
  148. package/dist/ecommerce/components/catalog/SearchInput.d.ts +7 -0
  149. package/dist/ecommerce/components/catalog/SearchInput.d.ts.map +1 -0
  150. package/dist/ecommerce/components/catalog/VariantSelector.d.ts +19 -0
  151. package/dist/ecommerce/components/catalog/VariantSelector.d.ts.map +1 -0
  152. package/dist/ecommerce/components/chat/ShopChatPanel.d.ts +4 -0
  153. package/dist/ecommerce/components/chat/ShopChatPanel.d.ts.map +1 -0
  154. package/dist/ecommerce/components/checkout/AddressForm.d.ts +9 -0
  155. package/dist/ecommerce/components/checkout/AddressForm.d.ts.map +1 -0
  156. package/dist/ecommerce/components/checkout/CheckoutCancelPage.d.ts +24 -0
  157. package/dist/ecommerce/components/checkout/CheckoutCancelPage.d.ts.map +1 -0
  158. package/dist/ecommerce/components/checkout/CheckoutForm.d.ts +4 -0
  159. package/dist/ecommerce/components/checkout/CheckoutForm.d.ts.map +1 -0
  160. package/dist/ecommerce/components/checkout/CheckoutLayout.d.ts +6 -0
  161. package/dist/ecommerce/components/checkout/CheckoutLayout.d.ts.map +1 -0
  162. package/dist/ecommerce/components/checkout/CheckoutReceipt.d.ts +8 -0
  163. package/dist/ecommerce/components/checkout/CheckoutReceipt.d.ts.map +1 -0
  164. package/dist/ecommerce/components/checkout/CheckoutSuccessPage.d.ts +29 -0
  165. package/dist/ecommerce/components/checkout/CheckoutSuccessPage.d.ts.map +1 -0
  166. package/dist/ecommerce/components/checkout/InventoryVerificationDialog.d.ts +19 -0
  167. package/dist/ecommerce/components/checkout/InventoryVerificationDialog.d.ts.map +1 -0
  168. package/dist/ecommerce/components/checkout/OrderReview.d.ts +4 -0
  169. package/dist/ecommerce/components/checkout/OrderReview.d.ts.map +1 -0
  170. package/dist/ecommerce/components/checkout/PaymentStep.d.ts +15 -0
  171. package/dist/ecommerce/components/checkout/PaymentStep.d.ts.map +1 -0
  172. package/dist/ecommerce/components/checkout/ShippingMethodSelector.d.ts +9 -0
  173. package/dist/ecommerce/components/checkout/ShippingMethodSelector.d.ts.map +1 -0
  174. package/dist/ecommerce/components/faq/FAQItem.d.ts +29 -0
  175. package/dist/ecommerce/components/faq/FAQItem.d.ts.map +1 -0
  176. package/dist/ecommerce/components/faq/FAQItem.test.d.ts +7 -0
  177. package/dist/ecommerce/components/faq/FAQItem.test.d.ts.map +1 -0
  178. package/dist/ecommerce/components/faq/FAQList.d.ts +15 -0
  179. package/dist/ecommerce/components/faq/FAQList.d.ts.map +1 -0
  180. package/dist/ecommerce/components/faq/index.d.ts +3 -0
  181. package/dist/ecommerce/components/faq/index.d.ts.map +1 -0
  182. package/dist/ecommerce/components/general/EmptyState.d.ts +8 -0
  183. package/dist/ecommerce/components/general/EmptyState.d.ts.map +1 -0
  184. package/dist/ecommerce/components/general/ErrorBoundary.d.ts +16 -0
  185. package/dist/ecommerce/components/general/ErrorBoundary.d.ts.map +1 -0
  186. package/dist/ecommerce/components/general/ErrorState.d.ts +7 -0
  187. package/dist/ecommerce/components/general/ErrorState.d.ts.map +1 -0
  188. package/dist/ecommerce/components/general/toast.d.ts +19 -0
  189. package/dist/ecommerce/components/general/toast.d.ts.map +1 -0
  190. package/dist/ecommerce/components/orders/OrderCard.d.ts +7 -0
  191. package/dist/ecommerce/components/orders/OrderCard.d.ts.map +1 -0
  192. package/dist/ecommerce/components/orders/OrderDetails.d.ts +7 -0
  193. package/dist/ecommerce/components/orders/OrderDetails.d.ts.map +1 -0
  194. package/dist/ecommerce/components/orders/OrderList.d.ts +7 -0
  195. package/dist/ecommerce/components/orders/OrderList.d.ts.map +1 -0
  196. package/dist/ecommerce/components/ui/accordion.d.ts +7 -0
  197. package/dist/ecommerce/components/ui/accordion.d.ts.map +1 -0
  198. package/dist/ecommerce/components/ui/badge.d.ts +10 -0
  199. package/dist/ecommerce/components/ui/badge.d.ts.map +1 -0
  200. package/dist/ecommerce/components/ui/button.d.ts +12 -0
  201. package/dist/ecommerce/components/ui/button.d.ts.map +1 -0
  202. package/dist/ecommerce/components/ui/card.d.ts +8 -0
  203. package/dist/ecommerce/components/ui/card.d.ts.map +1 -0
  204. package/dist/ecommerce/components/ui/dialog.d.ts +13 -0
  205. package/dist/ecommerce/components/ui/dialog.d.ts.map +1 -0
  206. package/dist/ecommerce/components/ui/input.d.ts +5 -0
  207. package/dist/ecommerce/components/ui/input.d.ts.map +1 -0
  208. package/dist/ecommerce/components/ui/label.d.ts +3 -0
  209. package/dist/ecommerce/components/ui/label.d.ts.map +1 -0
  210. package/dist/ecommerce/components/ui/select.d.ts +9 -0
  211. package/dist/ecommerce/components/ui/select.d.ts.map +1 -0
  212. package/dist/ecommerce/components/ui/separator.d.ts +4 -0
  213. package/dist/ecommerce/components/ui/separator.d.ts.map +1 -0
  214. package/dist/ecommerce/components/ui/sheet.d.ts +21 -0
  215. package/dist/ecommerce/components/ui/sheet.d.ts.map +1 -0
  216. package/dist/ecommerce/components/ui/skeleton.d.ts +3 -0
  217. package/dist/ecommerce/components/ui/skeleton.d.ts.map +1 -0
  218. package/dist/ecommerce/components/ui/tabs.d.ts +7 -0
  219. package/dist/ecommerce/components/ui/tabs.d.ts.map +1 -0
  220. package/dist/ecommerce/components/ui/textarea.d.ts +5 -0
  221. package/dist/ecommerce/components/ui/textarea.d.ts.map +1 -0
  222. package/dist/ecommerce/config/context.d.ts +13 -0
  223. package/dist/ecommerce/config/context.d.ts.map +1 -0
  224. package/dist/ecommerce/config/types.d.ts +48 -0
  225. package/dist/ecommerce/config/types.d.ts.map +1 -0
  226. package/dist/ecommerce/hooks/checkoutReturn.d.ts +3 -0
  227. package/dist/ecommerce/hooks/checkoutReturn.d.ts.map +1 -0
  228. package/dist/ecommerce/hooks/useAIRelatedProducts.d.ts +33 -0
  229. package/dist/ecommerce/hooks/useAIRelatedProducts.d.ts.map +1 -0
  230. package/dist/ecommerce/hooks/useCartInventory.d.ts +42 -0
  231. package/dist/ecommerce/hooks/useCartInventory.d.ts.map +1 -0
  232. package/dist/ecommerce/hooks/useCatalogUrlState.d.ts +15 -0
  233. package/dist/ecommerce/hooks/useCatalogUrlState.d.ts.map +1 -0
  234. package/dist/ecommerce/hooks/useCategories.d.ts +7 -0
  235. package/dist/ecommerce/hooks/useCategories.d.ts.map +1 -0
  236. package/dist/ecommerce/hooks/useCheckoutResultFromUrl.d.ts +4 -0
  237. package/dist/ecommerce/hooks/useCheckoutResultFromUrl.d.ts.map +1 -0
  238. package/dist/ecommerce/hooks/useHoldExpiry.d.ts +34 -0
  239. package/dist/ecommerce/hooks/useHoldExpiry.d.ts.map +1 -0
  240. package/dist/ecommerce/hooks/useInventoryVerification.d.ts +41 -0
  241. package/dist/ecommerce/hooks/useInventoryVerification.d.ts.map +1 -0
  242. package/dist/ecommerce/hooks/useOrders.d.ts +7 -0
  243. package/dist/ecommerce/hooks/useOrders.d.ts.map +1 -0
  244. package/dist/ecommerce/hooks/usePaymentMethodsConfig.d.ts +6 -0
  245. package/dist/ecommerce/hooks/usePaymentMethodsConfig.d.ts.map +1 -0
  246. package/dist/ecommerce/hooks/useProduct.d.ts +7 -0
  247. package/dist/ecommerce/hooks/useProduct.d.ts.map +1 -0
  248. package/dist/ecommerce/hooks/useProducts.d.ts +8 -0
  249. package/dist/ecommerce/hooks/useProducts.d.ts.map +1 -0
  250. package/dist/ecommerce/hooks/useShippingMethods.d.ts +10 -0
  251. package/dist/ecommerce/hooks/useShippingMethods.d.ts.map +1 -0
  252. package/dist/ecommerce/hooks/useStorefrontSettings.d.ts +32 -0
  253. package/dist/ecommerce/hooks/useStorefrontSettings.d.ts.map +1 -0
  254. package/dist/ecommerce/hooks/useSubscriptionData.d.ts +8 -0
  255. package/dist/ecommerce/hooks/useSubscriptionData.d.ts.map +1 -0
  256. package/dist/ecommerce/index.d.ts +98 -0
  257. package/dist/ecommerce/index.d.ts.map +1 -0
  258. package/dist/ecommerce/integrations/cedros-pay/useCedrosPayCheckoutAdapter.d.ts +10 -0
  259. package/dist/ecommerce/integrations/cedros-pay/useCedrosPayCheckoutAdapter.d.ts.map +1 -0
  260. package/dist/ecommerce/state/cart/CartProvider.d.ts +27 -0
  261. package/dist/ecommerce/state/cart/CartProvider.d.ts.map +1 -0
  262. package/dist/ecommerce/state/cart/cartReducer.d.ts +35 -0
  263. package/dist/ecommerce/state/cart/cartReducer.d.ts.map +1 -0
  264. package/dist/ecommerce/state/checkout/checkoutSchema.d.ts +21 -0
  265. package/dist/ecommerce/state/checkout/checkoutSchema.d.ts.map +1 -0
  266. package/dist/ecommerce/state/checkout/useCheckout.d.ts +34 -0
  267. package/dist/ecommerce/state/checkout/useCheckout.d.ts.map +1 -0
  268. package/dist/ecommerce/templates/CartTemplate.d.ts +5 -0
  269. package/dist/ecommerce/templates/CartTemplate.d.ts.map +1 -0
  270. package/dist/ecommerce/templates/CategoryTemplate.d.ts +11 -0
  271. package/dist/ecommerce/templates/CategoryTemplate.d.ts.map +1 -0
  272. package/dist/ecommerce/templates/CheckoutTemplate.d.ts +9 -0
  273. package/dist/ecommerce/templates/CheckoutTemplate.d.ts.map +1 -0
  274. package/dist/ecommerce/templates/ProductTemplate.d.ts +11 -0
  275. package/dist/ecommerce/templates/ProductTemplate.d.ts.map +1 -0
  276. package/dist/ecommerce/templates/PurchaseHistoryTemplate.d.ts +6 -0
  277. package/dist/ecommerce/templates/PurchaseHistoryTemplate.d.ts.map +1 -0
  278. package/dist/ecommerce/templates/ReceiptTemplate.d.ts +19 -0
  279. package/dist/ecommerce/templates/ReceiptTemplate.d.ts.map +1 -0
  280. package/dist/ecommerce/templates/ShopTemplate.d.ts +15 -0
  281. package/dist/ecommerce/templates/ShopTemplate.d.ts.map +1 -0
  282. package/dist/ecommerce/templates/SubscriptionTemplate.d.ts +15 -0
  283. package/dist/ecommerce/templates/SubscriptionTemplate.d.ts.map +1 -0
  284. package/dist/ecommerce/testing/adapterContract.d.ts +11 -0
  285. package/dist/ecommerce/testing/adapterContract.d.ts.map +1 -0
  286. package/dist/ecommerce/types.d.ts +164 -0
  287. package/dist/ecommerce/types.d.ts.map +1 -0
  288. package/dist/ecommerce/utils/cartCheckoutRequirements.d.ts +18 -0
  289. package/dist/ecommerce/utils/cartCheckoutRequirements.d.ts.map +1 -0
  290. package/dist/ecommerce/utils/cartItemMetadata.d.ts +3 -0
  291. package/dist/ecommerce/utils/cartItemMetadata.d.ts.map +1 -0
  292. package/dist/ecommerce/utils/cn.d.ts +3 -0
  293. package/dist/ecommerce/utils/cn.d.ts.map +1 -0
  294. package/dist/ecommerce/utils/money.d.ts +6 -0
  295. package/dist/ecommerce/utils/money.d.ts.map +1 -0
  296. package/dist/ecommerce/utils/storage.d.ts +5 -0
  297. package/dist/ecommerce/utils/storage.d.ts.map +1 -0
  298. package/dist/en-BXheDBal.mjs +19 -0
  299. package/dist/en-Yikrt96u.js +1 -0
  300. package/dist/hooks/useCreditsPayment.d.ts +64 -0
  301. package/dist/hooks/useCreditsPayment.d.ts.map +1 -0
  302. package/dist/hooks/useCreditsSubscription.d.ts +42 -0
  303. package/dist/hooks/useCreditsSubscription.d.ts.map +1 -0
  304. package/dist/hooks/useCryptoSubscription.d.ts +42 -0
  305. package/dist/hooks/useCryptoSubscription.d.ts.map +1 -0
  306. package/dist/hooks/usePaymentMode.d.ts.map +1 -1
  307. package/dist/hooks/useStripeCheckout.d.ts +1 -0
  308. package/dist/hooks/useStripeCheckout.d.ts.map +1 -1
  309. package/dist/hooks/useSubscription.d.ts +42 -0
  310. package/dist/hooks/useSubscription.d.ts.map +1 -0
  311. package/dist/hooks/useSubscriptionManagement.d.ts +92 -0
  312. package/dist/hooks/useSubscriptionManagement.d.ts.map +1 -0
  313. package/dist/hooks/useX402Payment.d.ts +1 -0
  314. package/dist/hooks/useX402Payment.d.ts.map +1 -1
  315. package/dist/i18n/index.d.ts +7 -0
  316. package/dist/i18n/index.d.ts.map +1 -1
  317. package/dist/index-D2d_ukkR.mjs +26838 -0
  318. package/dist/index-DGkSHjb1.js +136 -0
  319. package/dist/index.d.ts +20 -2
  320. package/dist/index.d.ts.map +1 -1
  321. package/dist/index.js +1 -1
  322. package/dist/index.mjs +79 -625
  323. package/dist/magic-string.es-B81Zo59j.js +10 -0
  324. package/dist/magic-string.es-uPKorP4O.mjs +663 -0
  325. package/dist/managers/CreditsManager.d.ts +151 -0
  326. package/dist/managers/CreditsManager.d.ts.map +1 -0
  327. package/dist/managers/ManagerCache.d.ts +6 -0
  328. package/dist/managers/ManagerCache.d.ts.map +1 -1
  329. package/dist/managers/RouteDiscoveryManager.d.ts.map +1 -1
  330. package/dist/managers/StripeManager.d.ts.map +1 -1
  331. package/dist/managers/SubscriptionChangeManager.d.ts +42 -0
  332. package/dist/managers/SubscriptionChangeManager.d.ts.map +1 -0
  333. package/dist/managers/SubscriptionManager.d.ts +113 -0
  334. package/dist/managers/SubscriptionManager.d.ts.map +1 -0
  335. package/dist/managers/X402Manager.d.ts.map +1 -1
  336. package/dist/pay-react.css +1 -1
  337. package/dist/sections-6IcZ6JeN.js +1 -0
  338. package/dist/sections-a0Dz-MMz.mjs +10 -0
  339. package/dist/stripe-only.d.ts +1 -1
  340. package/dist/stripe-only.d.ts.map +1 -1
  341. package/dist/stripe-only.js +1 -1
  342. package/dist/stripe-only.mjs +12 -13
  343. package/dist/styles-C4-_hbgr.js +1 -0
  344. package/dist/styles-QcAsIVWl.mjs +1909 -0
  345. package/dist/telemetry.js +1 -1
  346. package/dist/telemetry.mjs +1 -1
  347. package/dist/testing/index.js +147 -1
  348. package/dist/testing/index.mjs +10555 -103
  349. package/dist/types/componentOptions.d.ts +14 -4
  350. package/dist/types/componentOptions.d.ts.map +1 -1
  351. package/dist/types/errors.d.ts +26 -4
  352. package/dist/types/errors.d.ts.map +1 -1
  353. package/dist/types/index.d.ts +116 -0
  354. package/dist/types/index.d.ts.map +1 -1
  355. package/dist/types/subscription.d.ts +300 -0
  356. package/dist/types/subscription.d.ts.map +1 -0
  357. package/dist/utils/cartHelpers.d.ts +3 -0
  358. package/dist/utils/cartHelpers.d.ts.map +1 -1
  359. package/dist/utils/cspHelper.d.ts +7 -1
  360. package/dist/utils/cspHelper.d.ts.map +1 -1
  361. package/dist/utils/csvHelpers.d.ts +62 -0
  362. package/dist/utils/csvHelpers.d.ts.map +1 -0
  363. package/dist/utils/csvHelpers.test.d.ts +2 -0
  364. package/dist/utils/csvHelpers.test.d.ts.map +1 -0
  365. package/dist/utils/dateHelpers.d.ts +24 -0
  366. package/dist/utils/dateHelpers.d.ts.map +1 -0
  367. package/dist/utils/eventEmitter.d.ts +1 -1
  368. package/dist/utils/eventEmitter.d.ts.map +1 -1
  369. package/dist/utils/fetchWithTimeout.d.ts +3 -3
  370. package/dist/utils/index.d.ts +2 -1
  371. package/dist/utils/index.d.ts.map +1 -1
  372. package/dist/utils/tokenMintValidator.d.ts +10 -6
  373. package/dist/utils/tokenMintValidator.d.ts.map +1 -1
  374. package/dist/utils/uuid.d.ts.map +1 -1
  375. package/dist/uuid-C5B8o31X.js +1 -0
  376. package/dist/uuid-_z3jSatJ.mjs +17 -0
  377. package/package.json +25 -9
  378. package/dist/CedrosContext-B3iCqN6e.js +0 -11
  379. package/dist/CedrosContext-vX9uqZKp.mjs +0 -1796
  380. package/dist/en-CSsJl3nf.mjs +0 -19
  381. package/dist/en-D-uY3ltT.js +0 -1
  382. package/dist/styles-61pRysGe.js +0 -1
  383. package/dist/styles-DI2LPVdQ.mjs +0 -1625
  384. package/dist/utils/uuid-shim.d.ts +0 -9
  385. package/dist/utils/uuid-shim.d.ts.map +0 -1
  386. package/dist/uuid-C0iMjdcc.js +0 -1
  387. package/dist/uuid-UlzrVY8Y.mjs +0 -17
  388. package/dist/walletDetection-JZR3UCOa.mjs +0 -27
  389. package/dist/walletDetection-bNmV5ItZ.js +0 -1
@@ -126,6 +126,10 @@ export declare function formatCSP(directives: CSPDirectives, format?: CSPFormat)
126
126
  export declare function generateCSP(config?: CSPConfig, format?: CSPFormat): string | Record<string, string[]>;
127
127
  /**
128
128
  * Common RPC provider patterns for convenience
129
+ *
130
+ * SECURITY NOTE: These use wildcard subdomains for provider flexibility.
131
+ * In production, consider using specific endpoints instead of wildcards.
132
+ * Pass these to customRpcProviders array in CSPConfig.
129
133
  */
130
134
  export declare const RPC_PROVIDERS: {
131
135
  readonly HELIUS: "https://*.helius-rpc.com";
@@ -143,7 +147,9 @@ export declare const CSP_PRESETS: {
143
147
  */
144
148
  readonly MAINNET_CUSTOM_RPC: (rpcEndpoint: string) => CSPConfig;
145
149
  /**
146
- * Mainnet with Next.js (requires unsafe-inline/eval)
150
+ * Mainnet with Next.js (may require unsafe-inline/eval for some setups)
151
+ * Note: Modern Next.js supports strict CSP without unsafe directives.
152
+ * Only enable allowUnsafeScripts if necessary and understand the security implications.
147
153
  */
148
154
  readonly MAINNET_NEXTJS: (rpcEndpoint?: string) => CSPConfig;
149
155
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"cspHelper.d.ts","sourceRoot":"","sources":["../../src/utils/cspHelper.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAE9C;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB;;;OAGG;IACH,aAAa,CAAC,EAAE,aAAa,CAAC;IAE9B;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAE9B;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAE7B;;;OAGG;IACH,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAE/B;;;OAGG;IACH,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;IAEhC;;;OAGG;IACH,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAE9B;;;;OAIG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,MAAM,SAAS,GACjB,QAAQ,GACR,MAAM,GACN,QAAQ,GACR,QAAQ,GACR,OAAO,GACP,YAAY,CAAC;AA+BjB;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,GAAE,SAAc,GAAG,aAAa,CAmE3E;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,SAAS,CACvB,UAAU,EAAE,aAAa,EACzB,MAAM,GAAE,SAAoB,GAC3B,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CA4CnC;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,WAAW,CACzB,MAAM,GAAE,SAAc,EACtB,MAAM,GAAE,SAAoB,GAC3B,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAGnC;AAED;;GAEG;AACH,eAAO,MAAM,aAAa;;;;;;CAMhB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,WAAW;IACtB;;OAEG;+CAC+B,MAAM,KAAG,SAAS;IAMpD;;OAEG;4CAC4B,MAAM,KAAG,SAAS;IAMjD;;OAEG;2BACS,SAAS;IAKrB;;OAEG;yCACyB,MAAM,KAAG,SAAS;IAM9C;;OAEG;gCACc,SAAS;CAMlB,CAAC"}
1
+ {"version":3,"file":"cspHelper.d.ts","sourceRoot":"","sources":["../../src/utils/cspHelper.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAE9C;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB;;;OAGG;IACH,aAAa,CAAC,EAAE,aAAa,CAAC;IAE9B;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAE9B;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAE7B;;;OAGG;IACH,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAE/B;;;OAGG;IACH,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;IAEhC;;;OAGG;IACH,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAE9B;;;;OAIG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,MAAM,SAAS,GACjB,QAAQ,GACR,MAAM,GACN,QAAQ,GACR,QAAQ,GACR,OAAO,GACP,YAAY,CAAC;AA+BjB;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,GAAE,SAAc,GAAG,aAAa,CA4E3E;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,SAAS,CACvB,UAAU,EAAE,aAAa,EACzB,MAAM,GAAE,SAAoB,GAC3B,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CA4CnC;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,WAAW,CACzB,MAAM,GAAE,SAAc,EACtB,MAAM,GAAE,SAAoB,GAC3B,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAGnC;AAED;;;;;;GAMG;AACH,eAAO,MAAM,aAAa;;;;;;CAMhB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,WAAW;IACtB;;OAEG;+CAC+B,MAAM,KAAG,SAAS;IAMpD;;;;OAIG;4CAC4B,MAAM,KAAG,SAAS;IAMjD;;OAEG;2BACS,SAAS;IAKrB;;OAEG;yCACyB,MAAM,KAAG,SAAS;IAM9C;;OAEG;gCACc,SAAS;CAMlB,CAAC"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * CSV Parsing Utilities
3
+ *
4
+ * Provides safe, consistent CSV string parsing for product tags,
5
+ * category IDs, and other comma-separated values.
6
+ */
7
+ /**
8
+ * Parse a comma-separated string into an array of trimmed, non-empty values
9
+ *
10
+ * @param csv - Comma-separated string (e.g., "tag1, tag2, tag3")
11
+ * @returns Array of trimmed, filtered values (e.g., ["tag1", "tag2", "tag3"])
12
+ *
13
+ * @example
14
+ * parseCsv("a, b, c") // returns ["a", "b", "c"]
15
+ * parseCsv(" x , , y ") // returns ["x", "y"]
16
+ * parseCsv("") // returns []
17
+ * parseCsv(null) // returns []
18
+ * parseCsv(undefined) // returns []
19
+ */
20
+ export declare function parseCsv(csv: string | null | undefined): string[];
21
+ /**
22
+ * Convert an array of values to a comma-separated string
23
+ *
24
+ * @param values - Array of values to join
25
+ * @returns Comma-separated string
26
+ *
27
+ * @example
28
+ * toCsv(["a", "b", "c"]) // returns "a, b, c"
29
+ * toCsv([]) // returns ""
30
+ *
31
+ * @deprecated This function is not used in production code. Will be removed in next major version.
32
+ */
33
+ export declare function toCsv(values: string[]): string;
34
+ /**
35
+ * Add a value to a CSV string (avoiding duplicates)
36
+ *
37
+ * @param csv - Existing CSV string
38
+ * @param value - Value to add
39
+ * @returns Updated CSV string
40
+ *
41
+ * @example
42
+ * addToCsv("a, b", "c") // returns "a, b, c"
43
+ * addToCsv("a, b", "a") // returns "a, b" (no duplicate)
44
+ *
45
+ * @deprecated This function is not used in production code. Will be removed in next major version.
46
+ */
47
+ export declare function addToCsv(csv: string | null | undefined, value: string): string;
48
+ /**
49
+ * Remove a value from a CSV string
50
+ *
51
+ * @param csv - Existing CSV string
52
+ * @param value - Value to remove
53
+ * @returns Updated CSV string
54
+ *
55
+ * @example
56
+ * removeFromCsv("a, b, c", "b") // returns "a, c"
57
+ * removeFromCsv("a, b", "c") // returns "a, b" (no change)
58
+ *
59
+ * @deprecated This function is not used in production code. Will be removed in next major version.
60
+ */
61
+ export declare function removeFromCsv(csv: string | null | undefined, value: string): string;
62
+ //# sourceMappingURL=csvHelpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"csvHelpers.d.ts","sourceRoot":"","sources":["../../src/utils/csvHelpers.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;;;;;;;;;GAYG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,EAAE,CAMjE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAE9C;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAK9E;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAInF"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=csvHelpers.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"csvHelpers.test.d.ts","sourceRoot":"","sources":["../../src/utils/csvHelpers.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Date formatting utilities
3
+ *
4
+ * Shared formatting functions for consistent date display across the application
5
+ */
6
+ /**
7
+ * Format an ISO date string to a locale date string
8
+ * @param isoDate - ISO 8601 date string
9
+ * @returns Formatted date string (e.g., "January 1, 2024")
10
+ *
11
+ * @example
12
+ * formatDate('2024-01-15T12:00:00Z') // returns "January 15, 2024"
13
+ */
14
+ export declare function formatDate(isoDate: string): string;
15
+ /**
16
+ * Format an ISO date string to locale date and time
17
+ * @param iso - ISO 8601 date string
18
+ * @returns Formatted date and time string (e.g., "1/15/2024, 12:00:00 PM")
19
+ *
20
+ * @example
21
+ * formatDateTime('2024-01-15T12:00:00Z') // returns "1/15/2024, 12:00:00 PM"
22
+ */
23
+ export declare function formatDateTime(iso: string): string;
24
+ //# sourceMappingURL=dateHelpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dateHelpers.d.ts","sourceRoot":"","sources":["../../src/utils/dateHelpers.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAMlD;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAElD"}
@@ -17,7 +17,7 @@
17
17
  /**
18
18
  * Payment method type
19
19
  */
20
- export type PaymentMethod = 'stripe' | 'crypto';
20
+ export type PaymentMethod = 'stripe' | 'crypto' | 'credits';
21
21
  /**
22
22
  * Wallet provider type
23
23
  */
@@ -1 +1 @@
1
- {"version":3,"file":"eventEmitter.d.ts","sourceRoot":"","sources":["../../src/utils/eventEmitter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEhD;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,UAAU,GAAG,UAAU,GAAG,MAAM,CAAC;AAE1E;;GAEG;AACH,UAAU,eAAe;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,aAAa,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAmB,SAAQ,eAAe;IACzD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,cAAc,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,uBAAwB,SAAQ,eAAe;IAC9D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAqB,SAAQ,eAAe;IAC3D,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAmB,SAAQ,eAAe;IACzD,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,eAAO,MAAM,aAAa;;;;;;;;CAQhB,CAAC;AAsBX;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,aAAa,EACrB,QAAQ,CAAC,EAAE,MAAM,EACjB,SAAS,CAAC,EAAE,MAAM,GACjB,IAAI,CAON;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,CAK9D;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,cAAc,EACtB,SAAS,EAAE,MAAM,GAChB,IAAI,CAMN;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,cAAc,GAAG,IAAI,CAM5E;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,aAAa,EACrB,QAAQ,CAAC,EAAE,MAAM,EACjB,SAAS,CAAC,EAAE,MAAM,GACjB,IAAI,CAON;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,aAAa,EACrB,aAAa,EAAE,MAAM,EACrB,QAAQ,CAAC,EAAE,MAAM,EACjB,SAAS,CAAC,EAAE,MAAM,GACjB,IAAI,CAQN;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,aAAa,EACrB,KAAK,EAAE,MAAM,EACb,QAAQ,CAAC,EAAE,MAAM,EACjB,SAAS,CAAC,EAAE,MAAM,GACjB,IAAI,CAQN"}
1
+ {"version":3,"file":"eventEmitter.d.ts","sourceRoot":"","sources":["../../src/utils/eventEmitter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;AAE5D;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,UAAU,GAAG,UAAU,GAAG,MAAM,CAAC;AAE1E;;GAEG;AACH,UAAU,eAAe;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,aAAa,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAmB,SAAQ,eAAe;IACzD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,cAAc,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,uBAAwB,SAAQ,eAAe;IAC9D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAqB,SAAQ,eAAe;IAC3D,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAmB,SAAQ,eAAe;IACzD,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,eAAO,MAAM,aAAa;;;;;;;;CAQhB,CAAC;AAsBX;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,aAAa,EACrB,QAAQ,CAAC,EAAE,MAAM,EACjB,SAAS,CAAC,EAAE,MAAM,GACjB,IAAI,CAON;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,CAK9D;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,cAAc,EACtB,SAAS,EAAE,MAAM,GAChB,IAAI,CAMN;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,cAAc,GAAG,IAAI,CAM5E;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,aAAa,EACrB,QAAQ,CAAC,EAAE,MAAM,EACjB,SAAS,CAAC,EAAE,MAAM,GACjB,IAAI,CAON;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,aAAa,EACrB,aAAa,EAAE,MAAM,EACrB,QAAQ,CAAC,EAAE,MAAM,EACjB,SAAS,CAAC,EAAE,MAAM,GACjB,IAAI,CAQN;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,aAAa,EACrB,KAAK,EAAE,MAAM,EACb,QAAQ,CAAC,EAAE,MAAM,EACjB,SAAS,CAAC,EAAE,MAAM,GACjB,IAAI,CAQN"}
@@ -1,13 +1,13 @@
1
1
  /**
2
- * Default timeout for HTTP requests (30 seconds)
2
+ * Default timeout for HTTP requests (15 seconds)
3
3
  */
4
- export declare const DEFAULT_FETCH_TIMEOUT_MS = 30000;
4
+ export declare const DEFAULT_FETCH_TIMEOUT_MS = 15000;
5
5
  /**
6
6
  * Fetch with timeout utility
7
7
  *
8
8
  * Wraps fetch() with an AbortController to enforce timeout
9
9
  * Properly handles external AbortSignals while adding timeout functionality
10
- * Default timeout: 30 seconds
10
+ * Default timeout: 15 seconds
11
11
  */
12
12
  export declare function fetchWithTimeout(url: string, options?: RequestInit, timeoutMs?: number): Promise<Response>;
13
13
  //# sourceMappingURL=fetchWithTimeout.d.ts.map
@@ -7,9 +7,10 @@ export { deduplicateRequest, createDedupedClickHandler, isButtonInCooldown, setB
7
7
  export { getModalCloseButtonStyles } from './modalStyles';
8
8
  export { createWalletPool, WalletPool } from './walletPool';
9
9
  export { CEDROS_EVENTS, emitPaymentStart, emitWalletConnect, emitWalletConnected, emitWalletError, emitPaymentProcessing, emitPaymentSuccess, emitPaymentError, type PaymentMethod, type WalletProvider, type PaymentStartDetail, type WalletConnectDetail, type WalletErrorDetail, type PaymentProcessingDetail, type PaymentSuccessDetail, type PaymentErrorDetail, } from './eventEmitter';
10
- export { parseErrorResponse as parseStructuredErrorResponse, isRetryableError, getUserErrorMessage, } from './errorParser';
10
+ export { isRetryableError, getUserErrorMessage, } from './errorParser';
11
11
  export { createRateLimiter, RATE_LIMITER_PRESETS, type RateLimiter, type RateLimiterConfig, } from './rateLimiter';
12
12
  export { createCircuitBreaker, CircuitState, CircuitBreakerOpenError, CIRCUIT_BREAKER_PRESETS, type CircuitBreaker, type CircuitBreakerConfig, type CircuitBreakerStats, } from './circuitBreaker';
13
13
  export { retryWithBackoff, RETRY_PRESETS, type RetryConfig, type RetryStats, } from './exponentialBackoff';
14
14
  export { generateCSP, generateCSPDirectives, formatCSP, RPC_PROVIDERS, CSP_PRESETS, type CSPConfig, type CSPDirectives, type CSPFormat, } from './cspHelper';
15
+ export { formatDate, formatDateTime } from './dateHelpers';
15
16
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,2BAA2B,EAAE,oBAAoB,EAAE,KAAK,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACtI,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,KAAK,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAC5F,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAClE,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,eAAe,EACf,KAAK,YAAY,GAClB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,kBAAkB,EAClB,yBAAyB,EACzB,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,oBAAoB,EACpB,kBAAkB,EAClB,oBAAoB,EACpB,uBAAuB,EACvB,qBAAqB,EACrB,mBAAmB,EACnB,uBAAuB,GACxB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,iBAAiB,EACjB,mBAAmB,EACnB,eAAe,EACf,qBAAqB,EACrB,kBAAkB,EAClB,gBAAgB,EAChB,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EACtB,KAAK,uBAAuB,EAC5B,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,GACxB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,kBAAkB,IAAI,4BAA4B,EAClD,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EACpB,KAAK,WAAW,EAChB,KAAK,iBAAiB,GACvB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,oBAAoB,EACpB,YAAY,EACZ,uBAAuB,EACvB,uBAAuB,EACvB,KAAK,cAAc,EACnB,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,GACzB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,gBAAgB,EAChB,aAAa,EACb,KAAK,WAAW,EAChB,KAAK,UAAU,GAChB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,WAAW,EACX,qBAAqB,EACrB,SAAS,EACT,aAAa,EACb,WAAW,EACX,KAAK,SAAS,EACd,KAAK,aAAa,EAClB,KAAK,SAAS,GACf,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,2BAA2B,EAAE,oBAAoB,EAAE,KAAK,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACtI,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,KAAK,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAC5F,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAClE,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,eAAe,EACf,KAAK,YAAY,GAClB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,kBAAkB,EAClB,yBAAyB,EACzB,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,oBAAoB,EACpB,kBAAkB,EAClB,oBAAoB,EACpB,uBAAuB,EACvB,qBAAqB,EACrB,mBAAmB,EACnB,uBAAuB,GACxB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,iBAAiB,EACjB,mBAAmB,EACnB,eAAe,EACf,qBAAqB,EACrB,kBAAkB,EAClB,gBAAgB,EAChB,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EACtB,KAAK,uBAAuB,EAC5B,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,GACxB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EACpB,KAAK,WAAW,EAChB,KAAK,iBAAiB,GACvB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,oBAAoB,EACpB,YAAY,EACZ,uBAAuB,EACvB,uBAAuB,EACvB,KAAK,cAAc,EACnB,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,GACzB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,gBAAgB,EAChB,aAAa,EACb,KAAK,WAAW,EAChB,KAAK,UAAU,GAChB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,WAAW,EACX,qBAAqB,EACrB,SAAS,EACT,aAAa,EACb,WAAW,EACX,KAAK,SAAS,EACd,KAAK,aAAa,EAClB,KAAK,SAAS,GACf,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC"}
@@ -8,12 +8,16 @@
8
8
  * This validator helps prevent catastrophic misconfigurations by warning
9
9
  * developers when they use an unrecognized token mint address.
10
10
  */
11
- export declare const KNOWN_STABLECOINS: {
12
- readonly CASHx9KJUStyftLFWGvEVf59SGeG9sh5FfcnZMVPCASH: "CASH";
13
- readonly EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v: "USDC";
14
- readonly Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB: "USDT";
15
- readonly '2b1kV6DkPAnxd5ixfnxCpjxmKwqjjaYmCZfHsFu24GXo': "PYUSD";
16
- };
11
+ /** Stablecoin metadata including symbol, decimals, and icon */
12
+ export interface StablecoinMeta {
13
+ symbol: string;
14
+ decimals: number;
15
+ icon: string;
16
+ }
17
+ /** Known stablecoins with full metadata */
18
+ export declare const STABLECOIN_METADATA: Record<string, StablecoinMeta>;
19
+ /** Simple symbol map for backwards compatibility */
20
+ export declare const KNOWN_STABLECOINS: Record<string, string>;
17
21
  /**
18
22
  * Type guard to check if a token mint is a known stablecoin
19
23
  */
@@ -1 +1 @@
1
- {"version":3,"file":"tokenMintValidator.d.ts","sourceRoot":"","sources":["../../src/utils/tokenMintValidator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,eAAO,MAAM,iBAAiB;;;;;CAKpB,CAAC;AAEX;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,IAAI,MAAM,OAAO,iBAAiB,CAEhG;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAKzE;AAED;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,OAAO,EAAE,OAAO,CAAC;IACjB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,OAAO,GAAE,MAAqB,EAC9B,YAAY,GAAE,OAAe,GAC5B,yBAAyB,CA+E3B;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,QAAQ,GAAE,MAAkB,EAC5B,YAAY,GAAE,OAAe,GAC5B,yBAAyB,CAE3B"}
1
+ {"version":3,"file":"tokenMintValidator.d.ts","sourceRoot":"","sources":["../../src/utils/tokenMintValidator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAQH,+DAA+D;AAC/D,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,2CAA2C;AAC3C,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAqB9D,CAAC;AAEF,oDAAoD;AACpD,eAAO,MAAM,iBAAiB,EAEzB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAE5B;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,IAAI,MAAM,OAAO,iBAAiB,CAEhG;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAKzE;AAED;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,OAAO,EAAE,OAAO,CAAC;IACjB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,OAAO,GAAE,MAAqB,EAC9B,YAAY,GAAE,OAAe,GAC5B,yBAAyB,CA+E3B;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,QAAQ,GAAE,MAAkB,EAC5B,YAAY,GAAE,OAAe,GAC5B,yBAAyB,CAE3B"}
@@ -1 +1 @@
1
- {"version":3,"file":"uuid.d.ts","sourceRoot":"","sources":["../../src/utils/uuid.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;GAIG;AACH,wBAAgB,YAAY,IAAI,MAAM,CA+BrC"}
1
+ {"version":3,"file":"uuid.d.ts","sourceRoot":"","sources":["../../src/utils/uuid.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;GAIG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAmCrC"}
@@ -0,0 +1 @@
1
+ "use strict";function n(){if(typeof crypto<"u"&&crypto.randomUUID)return crypto.randomUUID();if(typeof crypto<"u"&&crypto.getRandomValues){const e=new Uint8Array(16);crypto.getRandomValues(e),e[6]=e[6]&15|64,e[8]=e[8]&63|128;const r=Array.from(e).map(t=>t.toString(16).padStart(2,"0")).join("");return`${r.slice(0,8)}-${r.slice(8,12)}-${r.slice(12,16)}-${r.slice(16,20)}-${r.slice(20)}`}return console.warn("[uuid] Using insecure Math.random() fallback. Upgrade browser for secure UUID generation."),"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{const r=Math.random()*16|0;return(e==="x"?r:r&3|8).toString(16)})}exports.generateUUID=n;
@@ -0,0 +1,17 @@
1
+ function n() {
2
+ if (typeof crypto < "u" && crypto.randomUUID)
3
+ return crypto.randomUUID();
4
+ if (typeof crypto < "u" && crypto.getRandomValues) {
5
+ const r = new Uint8Array(16);
6
+ crypto.getRandomValues(r), r[6] = r[6] & 15 | 64, r[8] = r[8] & 63 | 128;
7
+ const e = Array.from(r).map((x) => x.toString(16).padStart(2, "0")).join("");
8
+ return `${e.slice(0, 8)}-${e.slice(8, 12)}-${e.slice(12, 16)}-${e.slice(16, 20)}-${e.slice(20)}`;
9
+ }
10
+ return console.warn("[uuid] Using insecure Math.random() fallback. Upgrade browser for secure UUID generation."), "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, (r) => {
11
+ const e = Math.random() * 16 | 0;
12
+ return (r === "x" ? e : e & 3 | 8).toString(16);
13
+ });
14
+ }
15
+ export {
16
+ n as g
17
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cedros/pay-react",
3
- "version": "1.0.4",
3
+ "version": "1.1.0",
4
4
  "description": "React frontend library for Cedros Pay - unified Stripe and Solana x402 payments",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.mjs",
@@ -49,12 +49,13 @@
49
49
  "license": "MIT",
50
50
  "repository": {
51
51
  "type": "git",
52
- "url": "https://github.com/CedrosPay/react.git"
52
+ "url": "https://github.com/conorholds/cedros-pay.git",
53
+ "directory": "ui"
53
54
  },
54
55
  "bugs": {
55
- "url": "https://github.com/CedrosPay/react/issues"
56
+ "url": "https://github.com/conorholds/cedros-pay/issues"
56
57
  },
57
- "homepage": "https://github.com/CedrosPay/react#readme",
58
+ "homepage": "https://github.com/conorholds/cedros-pay/tree/main/ui#readme",
58
59
  "peerDependencies": {
59
60
  "@solana/spl-token": "^0.4.14",
60
61
  "@solana/wallet-adapter-base": "^0.9.23",
@@ -86,9 +87,23 @@
86
87
  }
87
88
  },
88
89
  "dependencies": {
90
+ "@radix-ui/react-accordion": "^1.2.12",
91
+ "@radix-ui/react-dialog": "^1.1.15",
92
+ "@radix-ui/react-select": "^2.2.6",
93
+ "@radix-ui/react-separator": "^1.1.7",
94
+ "@radix-ui/react-slot": "^1.2.3",
95
+ "@radix-ui/react-tabs": "^1.1.13",
96
+ "@radix-ui/react-toast": "^1.2.15",
89
97
  "@stripe/stripe-js": "^4.0.0",
98
+ "@types/dompurify": "^3.0.5",
90
99
  "bs58": "^6.0.0",
91
- "js-base64": "^3.7.8"
100
+ "class-variance-authority": "^0.7.1",
101
+ "clsx": "^2.1.1",
102
+ "dompurify": "^3.3.1",
103
+ "js-base64": "^3.7.8",
104
+ "sonner": "^2.0.7",
105
+ "tailwind-merge": "^3.3.1",
106
+ "zod": "^4.1.5"
92
107
  },
93
108
  "devDependencies": {
94
109
  "@solana/spl-token": "^0.4.14",
@@ -109,15 +124,18 @@
109
124
  "@typescript-eslint/parser": "^7.0.0",
110
125
  "@vitejs/plugin-react": "^4.3.0",
111
126
  "@vitest/coverage-v8": "^4.0.8",
127
+ "autoprefixer": "^10.4.20",
112
128
  "eslint": "^8.57.0",
113
129
  "eslint-plugin-react-hooks": "^4.6.0",
114
130
  "eslint-plugin-storybook": "^10.0.6",
115
131
  "husky": "^9.1.7",
116
132
  "jsdom": "^24.0.0",
133
+ "postcss": "^8.4.49",
117
134
  "react": "^18.3.0",
118
135
  "react-dom": "^18.3.0",
119
136
  "rollup-plugin-visualizer": "^5.12.0",
120
137
  "storybook": "^10.0.6",
138
+ "tailwindcss": "^3.4.17",
121
139
  "typescript": "^5.4.0",
122
140
  "uuid": "^13.0.0",
123
141
  "vite": "^7.2.2",
@@ -133,8 +151,6 @@
133
151
  "test:coverage": "vitest run --coverage",
134
152
  "analyze": "ANALYZE=true vite build",
135
153
  "storybook": "storybook dev -p 6006",
136
- "build-storybook": "storybook build",
137
- "prepublishOnly": "npm run lint && npm run type-check && npm test && npm run build",
138
- "prepare": "husky"
154
+ "build-storybook": "storybook build"
139
155
  }
140
- }
156
+ }
@@ -1,11 +0,0 @@
1
- "use strict";var qe=Object.create;var ae=Object.defineProperty;var We=Object.getOwnPropertyDescriptor;var Ke=Object.getOwnPropertyNames;var ze=Object.getPrototypeOf,Ve=Object.prototype.hasOwnProperty;var Ge=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of Ke(e))!Ve.call(t,a)&&a!==r&&ae(t,a,{get:()=>e[a],enumerable:!(n=We(e,a))||n.enumerable});return t};var oe=(t,e,r)=>(r=t!=null?qe(ze(t)):{},Ge(e||!t||!t.__esModule?ae(r,"default",{value:t,enumerable:!0}):r,t));const Q=require("react/jsx-runtime"),b=require("react"),I=require("./uuid-C0iMjdcc.js"),T=require("@solana/web3.js"),ie=require("@solana/spl-token"),se=require("@solana/wallet-adapter-wallets");var ge="https://js.stripe.com/v3",He=/^https:\/\/js\.stripe\.com\/v3\/?(\?.*)?$/;var Xe=function(){for(var e=document.querySelectorAll('script[src^="'.concat(ge,'"]')),r=0;r<e.length;r++){var n=e[r];if(He.test(n.src))return n}return null},ce=function(e){var r="",n=document.createElement("script");n.src="".concat(ge).concat(r);var a=document.head||document.body;if(!a)throw new Error("Expected document.body not to be null. Stripe.js requires a <body> element.");return a.appendChild(n),n},Ye=function(e,r){!e||!e._registerWrapper||e._registerWrapper({name:"stripe-js",version:"4.6.0",startTime:r})},O=null,$=null,j=null,Qe=function(e){return function(){e(new Error("Failed to load Stripe.js"))}},Je=function(e,r){return function(){window.Stripe?e(window.Stripe):r(new Error("Stripe.js not available"))}},Ze=function(e){return O!==null?O:(O=new Promise(function(r,n){if(typeof window>"u"||typeof document>"u"){r(null);return}if(window.Stripe){r(window.Stripe);return}try{var a=Xe();if(!(a&&e)){if(!a)a=ce(e);else if(a&&j!==null&&$!==null){var o;a.removeEventListener("load",j),a.removeEventListener("error",$),(o=a.parentNode)===null||o===void 0||o.removeChild(a),a=ce(e)}}j=Je(r,n),$=Qe(n),a.addEventListener("load",j),a.addEventListener("error",$)}catch(i){n(i);return}}),O.catch(function(r){return O=null,Promise.reject(r)}))},et=function(e,r,n){if(e===null)return null;var a=e.apply(void 0,r);return Ye(a,n),a},B,we=!1,be=function(){return B||(B=Ze(null).catch(function(e){return B=null,Promise.reject(e)}),B)};Promise.resolve().then(function(){return be()}).catch(function(t){we||console.warn(t)});var tt=function(){for(var e=arguments.length,r=new Array(e),n=0;n<e;n++)r[n]=arguments[n];we=!0;var a=Date.now();return be().then(function(o){return et(o,r,a)})},Ee=(t=>(t[t.DEBUG=0]="DEBUG",t[t.INFO=1]="INFO",t[t.WARN=2]="WARN",t[t.ERROR=3]="ERROR",t[t.SILENT=4]="SILENT",t))(Ee||{});class ee{config;constructor(e){this.config=e}setLevel(e){this.config.level=e}getLevel(){return this.config.level}debug(...e){this.config.level<=0&&this.log("DEBUG",console.log,e)}info(...e){this.config.level<=1&&this.log("INFO",console.info,e)}warn(...e){this.config.level<=2&&this.log("WARN",console.warn,e)}error(...e){this.config.level<=3&&this.log("ERROR",console.error,e)}log(e,r,n){const a=this.config.prefix?`${this.config.prefix} `:"",o=new Date().toISOString();r(`[${o}] ${a}[${e}]`,...n)}}const rt=()=>typeof process<"u"&&process.env.NODE_ENV==="development"?0:2;let W=null;function d(){return W||(W=new ee({level:rt(),prefix:"[CedrosPay]"})),W}function nt(t){W=t}function ve(t){return new ee(t)}function U(t,e){return t instanceof Error?t.message:typeof t=="string"?t:e}const at={service_unavailable:"Service temporarily unavailable. Please try again later or contact support.",server_insufficient_funds:"Service temporarily unavailable. Please try again later or contact support.",insufficient_funds_token:"Insufficient token balance in your wallet. Please add more tokens and try again.",insufficient_funds_sol:"Insufficient SOL for transaction fees. Please add some SOL to your wallet and try again.",insufficient_amount:"Payment amount is insufficient. Please check the required amount.",invalid_signature:"Transaction signature is invalid. Please try again.",send_failed:"Failed to send transaction. Please try again or contact support.",timeout:"Transaction timed out. Please check the blockchain explorer or try again."};async function k(t,e,r=!1){try{const n=await t.json();if(r&&n.verificationError){d().debug(`Payment verification failed: ${n.verificationError.code}`);const a=n.verificationError.code;return at[a]||n.verificationError.message||e}return typeof n.error=="string"?n.error:n.error&&typeof n.error=="object"&&"message"in n.error?n.error.message:e}catch{return await t.text()||e}}const ot=3e4;async function R(t,e={},r=ot){const n=new AbortController,a=e.signal;if(a?.aborted)throw n.abort(),new DOMException("The operation was aborted","AbortError");const o=setTimeout(()=>n.abort(),r);let i=null;a&&(i=()=>n.abort(),a.addEventListener("abort",i));try{return await fetch(t,{...e,signal:n.signal})}catch(s){throw s instanceof Error&&s.name==="AbortError"?a?.aborted?s:new Error(`Request timeout after ${r}ms`):s}finally{clearTimeout(o),a&&i&&a.removeEventListener("abort",i)}}function _(t){const{maxRequests:e,windowMs:r}=t;let n=e,a=Date.now();const o=e/r;function i(){const f=Date.now(),h=f-a;if(h>0){const y=h*o;n=Math.min(e,n+y),a=f}}function s(){return i(),n>=1?(n-=1,!0):!1}function l(){return i(),Math.floor(n)}function c(){if(i(),n>=1)return 0;const h=(1-n)/o;return Math.ceil(h)}function u(){n=e,a=Date.now()}return{tryConsume:s,getAvailableTokens:l,getTimeUntilRefill:c,reset:u}}const z={PAYMENT:{maxRequests:10,windowMs:6e4},QUOTE:{maxRequests:30,windowMs:6e4},STRICT:{maxRequests:5,windowMs:6e4},PERMISSIVE:{maxRequests:100,windowMs:6e4}};var Ce=(t=>(t.CLOSED="CLOSED",t.OPEN="OPEN",t.HALF_OPEN="HALF_OPEN",t))(Ce||{});class C extends Error{constructor(e){super(e),this.name="CircuitBreakerOpenError"}}function H(t){const{failureThreshold:e,timeout:r,name:n="circuit-breaker"}=t;let a="CLOSED",o=0,i=0,s=0,l=null,c=null,u=null;function f(){a==="OPEN"&&u!==null&&Date.now()>=u&&(d().debug(`[CircuitBreaker:${n}] Transitioning OPEN → HALF_OPEN (timeout expired)`),a="HALF_OPEN",u=null)}function h(){c=Date.now(),i++,a==="HALF_OPEN"?(d().debug(`[CircuitBreaker:${n}] Success in HALF_OPEN → CLOSED`),a="CLOSED",o=0):a==="CLOSED"&&(o=0)}function y(E){l=Date.now(),o++,d().warn(`[CircuitBreaker:${n}] Failure recorded (${o}/${e}):`,E.message),a==="HALF_OPEN"?(d().warn(`[CircuitBreaker:${n}] Failed in HALF_OPEN → OPEN`),a="OPEN",u=Date.now()+r):a==="CLOSED"&&o>=e&&(d().error(`[CircuitBreaker:${n}] Failure threshold reached (${o}) → OPEN`),a="OPEN",u=Date.now()+r)}async function m(E){if(f(),a==="OPEN"){s++;const g=u?Math.ceil((u-Date.now())/1e3):0;throw new C(`Circuit breaker is OPEN. Service is unavailable. Retry in ${g}s.`)}try{const g=await E();return h(),g}catch(g){throw y(g instanceof Error?g:new Error(String(g))),g}}function p(){return f(),a}function v(){return f(),{state:a,failures:o,successes:i,rejections:s,lastFailureTime:l,lastSuccessTime:c}}function A(){d().debug(`[CircuitBreaker:${n}] Manual reset → CLOSED`),a="CLOSED",o=0,i=0,s=0,l=null,c=null,u=null}function S(){d().warn(`[CircuitBreaker:${n}] Manual trip → OPEN`),a="OPEN",u=Date.now()+r}return{execute:m,getState:p,getStats:v,reset:A,trip:S}}const it={STRICT:{failureThreshold:3,timeout:6e4},STANDARD:{failureThreshold:5,timeout:3e4},LENIENT:{failureThreshold:10,timeout:15e3}};function st(t,e){if(e>=3)return!1;const r=t.message.toLowerCase();return r.includes("network")||r.includes("timeout")||r.includes("fetch failed")||r.includes("econnrefused")||r.includes("503")||r.includes("502")||r.includes("500")||r.includes("429")?!0:(r.includes("400")||r.includes("401")||r.includes("403")||r.includes("404"),!1)}function ct(t,e,r,n,a){const o=e*Math.pow(r,t),i=Math.min(o,n);if(a){const s=Math.random()*i;return Math.floor(s)}return Math.floor(i)}function lt(t){return new Promise(e=>setTimeout(e,t))}async function x(t,e={}){const{maxRetries:r=3,initialDelayMs:n=1e3,backoffFactor:a=2,maxDelayMs:o=3e4,jitter:i=!0,shouldRetry:s=st,name:l="retry"}=e;let c=null,u=0;for(let f=0;f<=r;f++)try{const h=await t();return f>0&&d().debug(`[Retry:${l}] Succeeded on attempt ${f+1}/${r+1} after ${u}ms`),h}catch(h){c=h instanceof Error?h:new Error(String(h));const y=f===r,m=s(c,f);if(y||!m)throw d().warn(`[Retry:${l}] Failed on attempt ${f+1}/${r+1}. ${y?"No more retries.":"Error not retryable."}`),c;const p=ct(f,n,a,o,i);u+=p,d().warn(`[Retry:${l}] Attempt ${f+1}/${r+1} failed: ${c.message}. Retrying in ${p}ms...`),await lt(p)}throw c||new Error("Retry failed with no error")}const P={QUICK:{maxRetries:3,initialDelayMs:1e3,backoffFactor:2,maxDelayMs:1e4},STANDARD:{maxRetries:3,initialDelayMs:2e3,backoffFactor:2,maxDelayMs:3e4},AGGRESSIVE:{maxRetries:5,initialDelayMs:500,backoffFactor:1.5,maxDelayMs:15e3},PATIENT:{maxRetries:5,initialDelayMs:5e3,backoffFactor:2,maxDelayMs:6e4}};class ut{stripe=null;publicKey;routeDiscovery;rateLimiter=_(z.PAYMENT);circuitBreaker=H({failureThreshold:5,timeout:1e4,name:"stripe-manager"});constructor(e,r){this.publicKey=e,this.routeDiscovery=r}async initialize(){if(!this.stripe&&(this.stripe=await tt(this.publicKey),!this.stripe))throw new Error("Failed to initialize Stripe")}async createSession(e){if(!this.rateLimiter.tryConsume())throw new Error("Rate limit exceeded for Stripe session creation. Please try again later.");try{return await this.circuitBreaker.execute(async()=>await x(async()=>{const r=await this.routeDiscovery.buildUrl("/paywall/v1/stripe-session");d().debug("[StripeManager] Creating session with request:",e),e.couponCode?d().debug("[StripeManager] Coupon code included:",e.couponCode):d().debug("[StripeManager] No coupon code in request");const n=await R(r,{method:"POST",headers:{"Content-Type":"application/json","Idempotency-Key":I.generateUUID()},body:JSON.stringify(e)});if(!n.ok){const a=await k(n,"Failed to create Stripe session");throw new Error(a)}return n.json()},{...P.STANDARD,name:"stripe-create-session"}))}catch(r){throw r instanceof C?(d().error("[StripeManager] Circuit breaker is OPEN - Stripe service unavailable"),new Error("Stripe payment service is temporarily unavailable. Please try again in a few moments.")):r}}async redirectToCheckout(e){if(this.stripe||await this.initialize(),!this.stripe)return{success:!1,error:"Stripe not initialized"};const r=await this.stripe.redirectToCheckout({sessionId:e});return r.error?{success:!1,error:r.error.message}:{success:!0}}async processPayment(e){try{const r=await this.createSession(e);return await this.redirectToCheckout(r.sessionId)}catch(r){return{success:!1,error:U(r,"Unknown error")}}}async processCartCheckout(e){const{items:r,successUrl:n,cancelUrl:a,metadata:o,customerEmail:i,couponCode:s}=e;if(!this.rateLimiter.tryConsume())return{success:!1,error:"Rate limit exceeded for cart checkout. Please try again later."};try{const l=await this.circuitBreaker.execute(async()=>await x(async()=>{const c=await this.routeDiscovery.buildUrl("/paywall/v1/cart/checkout"),u={items:r,successUrl:n,cancelUrl:a,metadata:o,customerEmail:i,couponCode:s},f=await R(c,{method:"POST",headers:{"Content-Type":"application/json","Idempotency-Key":I.generateUUID()},body:JSON.stringify(u)});if(!f.ok){const h=await k(f,"Failed to create cart checkout session");throw new Error(h)}return await f.json()},{...P.STANDARD,name:"stripe-cart-checkout"}));return await this.redirectToCheckout(l.sessionId)}catch(l){return l instanceof C?{success:!1,error:"Stripe payment service is temporarily unavailable. Please try again in a few moments."}:{success:!1,error:U(l,"Cart checkout failed")}}}}const xe="3.7.8",dt=xe,D=typeof Buffer=="function",le=typeof TextDecoder=="function"?new TextDecoder:void 0,ue=typeof TextEncoder=="function"?new TextEncoder:void 0,ft="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",N=Array.prototype.slice.call(ft),q=(t=>{let e={};return t.forEach((r,n)=>e[r]=n),e})(N),ht=/^(?:[A-Za-z\d+\/]{4})*?(?:[A-Za-z\d+\/]{2}(?:==)?|[A-Za-z\d+\/]{3}=?)?$/,w=String.fromCharCode.bind(String),de=typeof Uint8Array.from=="function"?Uint8Array.from.bind(Uint8Array):t=>new Uint8Array(Array.prototype.slice.call(t,0)),Pe=t=>t.replace(/=/g,"").replace(/[+\/]/g,e=>e=="+"?"-":"_"),Se=t=>t.replace(/[^A-Za-z0-9\+\/]/g,""),Te=t=>{let e,r,n,a,o="";const i=t.length%3;for(let s=0;s<t.length;){if((r=t.charCodeAt(s++))>255||(n=t.charCodeAt(s++))>255||(a=t.charCodeAt(s++))>255)throw new TypeError("invalid character found");e=r<<16|n<<8|a,o+=N[e>>18&63]+N[e>>12&63]+N[e>>6&63]+N[e&63]}return i?o.slice(0,i-3)+"===".substring(i):o},te=typeof btoa=="function"?t=>btoa(t):D?t=>Buffer.from(t,"binary").toString("base64"):Te,J=D?t=>Buffer.from(t).toString("base64"):t=>{let r=[];for(let n=0,a=t.length;n<a;n+=4096)r.push(w.apply(null,t.subarray(n,n+4096)));return te(r.join(""))},K=(t,e=!1)=>e?Pe(J(t)):J(t),mt=t=>{if(t.length<2){var e=t.charCodeAt(0);return e<128?t:e<2048?w(192|e>>>6)+w(128|e&63):w(224|e>>>12&15)+w(128|e>>>6&63)+w(128|e&63)}else{var e=65536+(t.charCodeAt(0)-55296)*1024+(t.charCodeAt(1)-56320);return w(240|e>>>18&7)+w(128|e>>>12&63)+w(128|e>>>6&63)+w(128|e&63)}},yt=/[\uD800-\uDBFF][\uDC00-\uDFFFF]|[^\x00-\x7F]/g,Re=t=>t.replace(yt,mt),fe=D?t=>Buffer.from(t,"utf8").toString("base64"):ue?t=>J(ue.encode(t)):t=>te(Re(t)),M=(t,e=!1)=>e?Pe(fe(t)):fe(t),he=t=>M(t,!0),pt=/[\xC0-\xDF][\x80-\xBF]|[\xE0-\xEF][\x80-\xBF]{2}|[\xF0-\xF7][\x80-\xBF]{3}/g,gt=t=>{switch(t.length){case 4:var e=(7&t.charCodeAt(0))<<18|(63&t.charCodeAt(1))<<12|(63&t.charCodeAt(2))<<6|63&t.charCodeAt(3),r=e-65536;return w((r>>>10)+55296)+w((r&1023)+56320);case 3:return w((15&t.charCodeAt(0))<<12|(63&t.charCodeAt(1))<<6|63&t.charCodeAt(2));default:return w((31&t.charCodeAt(0))<<6|63&t.charCodeAt(1))}},Ae=t=>t.replace(pt,gt),ke=t=>{if(t=t.replace(/\s+/g,""),!ht.test(t))throw new TypeError("malformed base64.");t+="==".slice(2-(t.length&3));let e,r,n,a=[];for(let o=0;o<t.length;)e=q[t.charAt(o++)]<<18|q[t.charAt(o++)]<<12|(r=q[t.charAt(o++)])<<6|(n=q[t.charAt(o++)]),r===64?a.push(w(e>>16&255)):n===64?a.push(w(e>>16&255,e>>8&255)):a.push(w(e>>16&255,e>>8&255,e&255));return a.join("")},re=typeof atob=="function"?t=>atob(Se(t)):D?t=>Buffer.from(t,"base64").toString("binary"):ke,Me=D?t=>de(Buffer.from(t,"base64")):t=>de(re(t).split("").map(e=>e.charCodeAt(0))),Ue=t=>Me(De(t)),wt=D?t=>Buffer.from(t,"base64").toString("utf8"):le?t=>le.decode(Me(t)):t=>Ae(re(t)),De=t=>Se(t.replace(/[-_]/g,e=>e=="-"?"+":"/")),Z=t=>wt(De(t)),bt=t=>{if(typeof t!="string")return!1;const e=t.replace(/\s+/g,"").replace(/={0,2}$/,"");return!/[^\s0-9a-zA-Z\+/]/.test(e)||!/[^\s0-9a-zA-Z\-_]/.test(e)},Oe=t=>({value:t,enumerable:!1,writable:!0,configurable:!0}),Be=function(){const t=(e,r)=>Object.defineProperty(String.prototype,e,Oe(r));t("fromBase64",function(){return Z(this)}),t("toBase64",function(e){return M(this,e)}),t("toBase64URI",function(){return M(this,!0)}),t("toBase64URL",function(){return M(this,!0)}),t("toUint8Array",function(){return Ue(this)})},Ne=function(){const t=(e,r)=>Object.defineProperty(Uint8Array.prototype,e,Oe(r));t("toBase64",function(e){return K(this,e)}),t("toBase64URI",function(){return K(this,!0)}),t("toBase64URL",function(){return K(this,!0)})},Et=()=>{Be(),Ne()},L={version:xe,VERSION:dt,atob:re,atobPolyfill:ke,btoa:te,btoaPolyfill:Te,fromBase64:Z,toBase64:M,encode:M,encodeURI:he,encodeURL:he,utob:Re,btou:Ae,decode:Z,isValid:bt,fromUint8Array:K,toUint8Array:Ue,extendString:Be,extendUint8Array:Ne,extendBuiltins:Et};class vt{routeDiscovery;quoteRateLimiter=_(z.QUOTE);verifyRateLimiter=_(z.PAYMENT);circuitBreaker=H({failureThreshold:5,timeout:1e4,name:"x402-manager"});constructor(e){this.routeDiscovery=e}async requestQuote(e){const{resource:r,couponCode:n}=e;if(!this.quoteRateLimiter.tryConsume())throw new Error("Rate limit exceeded for quote requests. Please try again later.");try{return await this.circuitBreaker.execute(async()=>await x(async()=>{const a="/paywall/v1/quote";d().debug("[X402Manager] Requesting quote",n?"with coupon":"without coupon");const o=await this.routeDiscovery.buildUrl(a),i=await R(o,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({resource:r,couponCode:n||null})});if(i.status!==402)throw new Error(`Expected 402 status, got ${i.status}`);const s=await i.json();if(!s.accepts||s.accepts.length===0)throw new Error("Invalid x402 response: missing accepts array");return s.accepts[0]},{...P.QUICK,name:"x402-quote"}))}catch(a){throw a instanceof C?(d().error("[X402Manager] Circuit breaker is OPEN - x402 service unavailable"),new Error("Payment service is temporarily unavailable. Please try again in a few moments.")):a}}async requestCartQuote(e){const{items:r,metadata:n,couponCode:a}=e;if(!this.quoteRateLimiter.tryConsume())throw new Error("Rate limit exceeded for cart quote requests. Please try again later.");try{return await this.circuitBreaker.execute(async()=>await x(async()=>{const o=await this.routeDiscovery.buildUrl("/paywall/v1/cart/quote"),i={items:r,metadata:n,couponCode:a},s=await R(o,{method:"POST",headers:{"Content-Type":"application/json","Idempotency-Key":I.generateUUID()},body:JSON.stringify(i)});if(s.status!==402&&!s.ok){const l=await k(s,"Failed to get cart quote");throw new Error(l)}return s.json()},{...P.QUICK,name:"x402-cart-quote"}))}catch(o){throw o instanceof C?(d().error("[X402Manager] Circuit breaker is OPEN - cart quote service unavailable"),new Error("Payment service is temporarily unavailable. Please try again in a few moments.")):o}}buildPaymentHeader(e){const r=JSON.stringify(e);return L.encode(r)}parseSettlementResponse(e){const r=e.headers.get("X-PAYMENT-RESPONSE");if(!r)return null;try{const n=L.decode(r),a=JSON.parse(n);return typeof a.success!="boolean"?(d().error("Invalid settlement response: missing success field"),null):a}catch(n){return d().error("Failed to parse settlement response:",n),null}}async submitPayment(e){const{resource:r,payload:n,couponCode:a,metadata:o,resourceType:i="regular"}=e;if(!this.verifyRateLimiter.tryConsume())return{success:!1,error:"Rate limit exceeded for payment verification. Please try again later."};try{return await this.circuitBreaker.execute(async()=>await x(async()=>{const l={...n,payload:{...n.payload,resource:r,resourceType:i,metadata:{...n.payload.metadata||{},...o||{},...a?{couponCode:a}:{}}}},c=this.buildPaymentHeader(l),u="/paywall/v1/verify";d().debug("[X402Manager] Submitting payment",{resourceType:i,hasCoupon:!!a,hasMetadata:!!o});const f=await this.routeDiscovery.buildUrl(u),h=await R(f,{method:"POST",headers:{"Content-Type":"application/json","X-PAYMENT":c,"Idempotency-Key":I.generateUUID()}});if(h.ok){const{settlement:m,transactionId:p}=await this.handlePaymentVerification(h,n.payload.signature);return{success:!0,transactionId:p,settlement:m||void 0}}return{success:!1,error:await k(h,"Payment verification failed",!0)}},{...P.STANDARD,name:"x402-verify"}))}catch(s){return s instanceof C?{success:!1,error:"Payment verification service is temporarily unavailable. Please try again in a few moments."}:{success:!1,error:U(s,"Unknown error")}}}async buildGaslessTransaction(e){const{resourceId:r,userWallet:n,feePayer:a,couponCode:o}=e;if(!this.quoteRateLimiter.tryConsume())throw new Error("Rate limit exceeded for gasless transaction requests. Please try again later.");try{return await this.circuitBreaker.execute(async()=>await x(async()=>{const i=await this.routeDiscovery.buildUrl("/paywall/v1/gasless-transaction"),s=await R(i,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({resourceId:r,userWallet:n,feePayer:a,couponCode:o})});if(!s.ok){const l=await k(s,"Failed to build gasless transaction");throw new Error(l)}return s.json()},{...P.QUICK,name:"x402-gasless-build"}))}catch(i){throw i instanceof C?(d().error("[X402Manager] Circuit breaker is OPEN - gasless transaction service unavailable"),new Error("Gasless transaction service is temporarily unavailable. Please try again in a few moments.")):i}}async submitGaslessTransaction(e){const{resource:r,partialTx:n,couponCode:a,metadata:o,resourceType:i="regular",requirement:s}=e;if(!this.verifyRateLimiter.tryConsume())return{success:!1,error:"Rate limit exceeded for gasless transaction verification. Please try again later."};try{return await this.circuitBreaker.execute(async()=>await x(async()=>{const c={x402Version:0,scheme:s?.scheme||"solana-spl-transfer",network:s?.network||"mainnet-beta",payload:{signature:"",transaction:n,feePayer:s?.extra?.feePayer||"",resource:r,resourceType:i,metadata:{...o||{},...a?{couponCode:a}:{}}}},u=this.buildPaymentHeader(c),h=await this.routeDiscovery.buildUrl("/paywall/v1/verify"),y=await R(h,{method:"POST",headers:{"Content-Type":"application/json","X-PAYMENT":u,"Idempotency-Key":I.generateUUID()}});if(y.ok){const{settlement:p,transactionId:v}=await this.handlePaymentVerification(y,"gasless-tx");return{success:!0,transactionId:v,settlement:p||void 0}}return{success:!1,error:await k(y,"Gasless transaction failed",!0)}},{...P.STANDARD,name:"x402-gasless-verify"}))}catch(l){return l instanceof C?{success:!1,error:"Gasless transaction verification service is temporarily unavailable. Please try again in a few moments."}:{success:!1,error:U(l,"Unknown error")}}}async handlePaymentVerification(e,r){const n=this.parseSettlementResponse(e),a=e.headers.get("Content-Type")||"";let o=r;if(a.includes("application/json"))try{o=(await e.json()).signature||r}catch(i){d().warn("Failed to parse JSON response body:",i)}return{settlement:n,transactionId:o}}validateRequirement(e){return!!(e.scheme&&e.network&&e.maxAmountRequired&&e.resource&&e.payTo&&e.asset&&e.maxTimeoutSeconds>0)}}function Ct(t){if(t.length>=255)throw new TypeError("Alphabet too long");const e=new Uint8Array(256);for(let c=0;c<e.length;c++)e[c]=255;for(let c=0;c<t.length;c++){const u=t.charAt(c),f=u.charCodeAt(0);if(e[f]!==255)throw new TypeError(u+" is ambiguous");e[f]=c}const r=t.length,n=t.charAt(0),a=Math.log(r)/Math.log(256),o=Math.log(256)/Math.log(r);function i(c){if(c instanceof Uint8Array||(ArrayBuffer.isView(c)?c=new Uint8Array(c.buffer,c.byteOffset,c.byteLength):Array.isArray(c)&&(c=Uint8Array.from(c))),!(c instanceof Uint8Array))throw new TypeError("Expected Uint8Array");if(c.length===0)return"";let u=0,f=0,h=0;const y=c.length;for(;h!==y&&c[h]===0;)h++,u++;const m=(y-h)*o+1>>>0,p=new Uint8Array(m);for(;h!==y;){let S=c[h],E=0;for(let g=m-1;(S!==0||E<f)&&g!==-1;g--,E++)S+=256*p[g]>>>0,p[g]=S%r>>>0,S=S/r>>>0;if(S!==0)throw new Error("Non-zero carry");f=E,h++}let v=m-f;for(;v!==m&&p[v]===0;)v++;let A=n.repeat(u);for(;v<m;++v)A+=t.charAt(p[v]);return A}function s(c){if(typeof c!="string")throw new TypeError("Expected String");if(c.length===0)return new Uint8Array;let u=0,f=0,h=0;for(;c[u]===n;)f++,u++;const y=(c.length-u)*a+1>>>0,m=new Uint8Array(y);for(;u<c.length;){const S=c.charCodeAt(u);if(S>255)return;let E=e[S];if(E===255)return;let g=0;for(let F=y-1;(E!==0||g<h)&&F!==-1;F--,g++)E+=r*m[F]>>>0,m[F]=E%256>>>0,E=E/256>>>0;if(E!==0)throw new Error("Non-zero carry");h=g,u++}let p=y-h;for(;p!==y&&m[p]===0;)p++;const v=new Uint8Array(f+(y-p));let A=f;for(;p!==y;)v[A++]=m[p++];return v}function l(c){const u=s(c);if(u)return u;throw new Error("Non-base"+r+" character")}return{encode:i,decodeUnsafe:s,decode:l}}var xt="123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";const me=Ct(xt),V={CASHx9KJUStyftLFWGvEVf59SGeG9sh5FfcnZMVPCASH:"CASH",EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v:"USDC",Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB:"USDT","2b1kV6DkPAnxd5ixfnxCpjxmKwqjjaYmCZfHsFu24GXo":"PYUSD"};function Pt(t){return t in V}function ne(t,e="token mint",r=!1){if(!t||t.trim().length===0)return{isValid:!0,isKnownStablecoin:!1};const n=t.trim();if(Pt(n))return{isValid:!0,isKnownStablecoin:!0,symbol:V[n]};const a=Object.entries(V).map(([o,i])=>` ${i}: ${o}`).join(`
2
- `);return r?{isValid:!0,isKnownStablecoin:!1,warning:[`Warning: Unrecognized token mint address in ${e}`,` Provided: ${n}`,"","This token mint does not match any known stablecoin addresses.","You have set dangerouslyAllowUnknownMint=true, so this will proceed.","If this is a typo, payments will be sent to the wrong token and funds will be PERMANENTLY LOST.","","Known stablecoin mints (mainnet-beta):",a,"","Double-check your token mint address before deploying to production."].join(`
3
- `)}:{isValid:!1,isKnownStablecoin:!1,error:[`SAFETY ERROR: Unrecognized token mint address in ${e}`,` Provided: ${n}`,"","This token mint does not match any known stablecoin addresses.","Using an unknown token mint can result in PERMANENT LOSS OF FUNDS if it's a typo.","","Known stablecoin mints (mainnet-beta):",a,"","If you are CERTAIN this is the correct mint address (custom token, testnet, or new stablecoin),","set dangerouslyAllowUnknownMint={true} in your CedrosProvider config:",""," <CedrosProvider"," config={{"," ...",' tokenMint: "'+n+'",'," dangerouslyAllowUnknownMint: true, // ⚠️ I have verified this mint address"," }}"," />","","⚠️ WARNING: Only enable dangerouslyAllowUnknownMint if you have TRIPLE-CHECKED the mint address."].join(`
4
- `)}}function St(t,e="unknown",r=!1){return ne(t,`X402Requirement (resource: ${e})`,r)}class Tt{connection;cluster;endpoint;allowUnknownMint;rpcRateLimiter=_({maxRequests:50,windowMs:6e4});rpcCircuitBreaker=H({failureThreshold:5,timeout:1e4,name:"solana-rpc"});constructor(e="mainnet-beta",r,n=!1){this.cluster=e,this.endpoint=r,this.allowUnknownMint=n,this.connection=this.createConnection()}createConnection(){const e=this.endpoint??T.clusterApiUrl(this.cluster);return new T.Connection(e,"confirmed")}transformRpcError(e){const r=e instanceof Error?e.message:typeof e=="string"?e:String(e);return r.includes("403")||r.includes("Access forbidden")?new Error("Public Solana RPC access denied. Please configure a custom RPC endpoint (e.g., from Helius, QuickNode, or Alchemy) in your CedrosProvider config using the solanaEndpoint option."):r.includes("429")||r.includes("Too Many Requests")?new Error("Solana RPC rate limit exceeded. Please configure a custom RPC endpoint with higher limits in your CedrosProvider config using the solanaEndpoint option."):e instanceof Error?e:new Error(r)}async buildTransaction(e){const{requirement:r,payerPublicKey:n,blockhash:a}=e;if(!r||!r.payTo)throw new Error("Invalid requirement: missing payTo");console.log("🔨 [WalletManager] Building NEW transaction for resource:",r.resource);const o=new T.Transaction,i=this.resolveAmountInMinorUnits(r),s=r.asset;if(!s)throw new Error("asset is required in x402 requirement");const l=St(s,r.resource,this.allowUnknownMint);if(!l.isValid&&l.error)throw new Error(l.error);l.warning&&d().warn(l.warning);const c=new T.PublicKey(s),u=await ie.getAssociatedTokenAddress(c,n);if(!this.rpcRateLimiter.tryConsume())throw new Error("RPC rate limit exceeded. Please try again in a moment.");let f;try{f=await this.rpcCircuitBreaker.execute(async()=>await x(async()=>await this.connection.getAccountInfo(u),{...P.QUICK,name:"rpc-get-account-info"}))}catch(m){throw m instanceof C?new Error("Solana RPC service is temporarily unavailable. Please try again in a few moments."):this.transformRpcError(m)}if(!f)throw new Error("Payer is missing an associated token account for this mint");let h;try{h=r.extra?.recipientTokenAccount?new T.PublicKey(r.extra.recipientTokenAccount):new T.PublicKey(r.payTo)}catch{throw new Error("We are currently unable to process payment, please try again later")}if(o.add(ie.createTransferInstruction(u,h,n,i)),r.extra?.memo){const{TransactionInstruction:m}=await import("@solana/web3.js"),p=new m({keys:[],programId:new T.PublicKey("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),data:Buffer.from(r.extra.memo,"utf8")});o.add(p)}let y;if(a)y=a;else{if(!this.rpcRateLimiter.tryConsume())throw new Error("RPC rate limit exceeded. Please try again in a moment.");try{y=(await this.rpcCircuitBreaker.execute(async()=>await x(async()=>await this.connection.getLatestBlockhash(),{...P.QUICK,name:"rpc-get-blockhash"}))).blockhash}catch(m){throw m instanceof C?new Error("Solana RPC service is temporarily unavailable. Please try again in a few moments."):this.transformRpcError(m)}}return o.recentBlockhash=y,r.extra?.feePayer?o.feePayer=new T.PublicKey(r.extra.feePayer):o.feePayer=n,o}resolveAmountInMinorUnits(e){const r=parseInt(e.maxAmountRequired,10);if(Number.isNaN(r)||r<=0)throw new Error("Invalid maxAmountRequired in requirement");return r}buildPaymentPayload(e){const{requirement:r,signedTx:n,payerPublicKey:a}=e;return{x402Version:0,scheme:r.scheme,network:r.network,payload:{signature:n.signature,transaction:n.serialized,payer:a.toString(),memo:r.extra?.memo,recipientTokenAccount:r.extra?.recipientTokenAccount}}}async signTransaction(e){const{transaction:r,signTransaction:n}=e;console.log("✍️ [WalletManager] Requesting wallet to sign transaction");const a=await n(r),o=a.serialize(),i=a.signatures[0]?.signature;if(!i)throw new Error("Signed transaction missing signature");const s=me.encode(i);return console.log("✅ [WalletManager] Transaction signed with signature:",s.substring(0,20)+"..."),{serialized:L.fromUint8Array(o),signature:s}}deserializeTransaction(e){try{const r=L.toUint8Array(e);return T.Transaction.from(r)}catch(r){throw new Error(`Failed to deserialize transaction: ${U(r,"Unknown error")}`)}}async partiallySignTransaction(e){const{transaction:r,signTransaction:n,blockhash:a}=e;a&&r.recentBlockhash!==a&&(r.recentBlockhash=a);const o=await n(r),i=o.signatures[0]?.signature;if(i){const l=me.encode(i);console.log("✅ [WalletManager] Partially signed with signature:",l.substring(0,20)+"...")}const s=o.serialize({requireAllSignatures:!1,verifySignatures:!1});return L.fromUint8Array(s)}async getBalance(e){if(!this.rpcRateLimiter.tryConsume())throw new Error("RPC rate limit exceeded. Please try again in a moment.");try{return await this.rpcCircuitBreaker.execute(async()=>await x(async()=>await this.connection.getBalance(e),{...P.QUICK,name:"rpc-get-balance"}))/T.LAMPORTS_PER_SOL}catch(r){throw r instanceof C?new Error("Solana RPC service is temporarily unavailable. Please try again in a few moments."):this.transformRpcError(r)}}async verifyTransaction(e){if(!this.rpcRateLimiter.tryConsume())return d().warn("[WalletManager] RPC rate limit exceeded for transaction verification"),!1;try{return!!(await this.rpcCircuitBreaker.execute(async()=>await x(async()=>await this.connection.getSignatureStatus(e),{...P.QUICK,name:"rpc-verify-tx"}))).value?.confirmationStatus}catch(r){return r instanceof C&&d().warn("[WalletManager] Circuit breaker OPEN - cannot verify transaction"),!1}}}class Rt{serverUrl;routePrefix=null;discoveryPromise=null;maxRetries=3;baseDelayMs=1e3;constructor(e){this.serverUrl=e}async discoverPrefix(){if(this.routePrefix!==null)return this.routePrefix;if(this.discoveryPromise)return this.discoveryPromise;const e=(async()=>{let r=0;for(;r<this.maxRetries;)try{const n=await R(`${this.serverUrl}/cedros-health`);if(!n.ok){if(n.status>=400&&n.status<500)return d().warn(`Route discovery received ${n.status} - not retrying client error`),this.routePrefix="","";throw new Error(`Health check returned ${n.status}`)}const o=(await n.json()).routePrefix||"";return this.routePrefix=o,d().debug("Route discovery successful, prefix:",o||"(empty)"),o}catch(n){if(r++,r>=this.maxRetries)return d().warn(`Route discovery failed after ${r} attempts, using empty prefix for this request:`,n),"";const a=this.baseDelayMs*Math.pow(2,r-1);d().warn(`Route discovery failed (attempt ${r}/${this.maxRetries}), retrying in ${a}ms:`,n),await new Promise(o=>setTimeout(o,a))}return""})();this.discoveryPromise=e;try{return await this.discoveryPromise}finally{this.discoveryPromise=null}}async buildUrl(e){const r=await this.discoverPrefix(),n=e.startsWith("/")?e:`/${e}`;return`${this.serverUrl}${r}${n}`}reset(){this.routePrefix=null,this.discoveryPromise=null}}const G=new Map;function Ie(t,e,r,n,a){return JSON.stringify({stripePublicKey:t,serverUrl:e,solanaCluster:r,solanaEndpoint:n||"",dangerouslyAllowUnknownMint:a||!1})}function At(t,e,r,n,a){const o=Ie(t,e,r,n,a);let i=G.get(o);if(i)return i.refCount++,d().debug(`[ManagerCache] Reusing cached managers (refCount: ${i.refCount}):`,{stripePublicKey:t.slice(0,10)+"...",serverUrl:e}),i;d().debug("[ManagerCache] Creating new manager instances:",{stripePublicKey:t.slice(0,10)+"...",serverUrl:e});const s=new Rt(e),l=new ut(t,s),c=new vt(s),u=new Tt(r,n,a??!1);return i={stripeManager:l,x402Manager:c,walletManager:u,routeDiscovery:s,refCount:1},G.set(o,i),i}function kt(t,e,r,n,a){const o=Ie(t,e,r,n,a),i=G.get(o);if(!i){d().warn("[ManagerCache] Attempted to release non-existent managers:",{cacheKey:o});return}i.refCount--,d().debug(`[ManagerCache] Released manager reference (refCount: ${i.refCount}):`,{stripePublicKey:t.slice(0,10)+"...",serverUrl:e}),i.refCount<=0&&(G.delete(o),d().debug("[ManagerCache] Removed managers from cache (refCount reached 0)"))}const Mt=["stripePublicKey"],ye=new Set(["mainnet-beta","devnet","testnet"]);function Ut(){if(typeof window<"u"&&window.location)return window.location.origin;throw new Error("serverUrl is required in SSR/Node environments. In browser environments, it defaults to window.location.origin")}function Le(t){const e=[];Mt.forEach(n=>{const a=t[n];(typeof a!="string"||a.trim().length===0)&&e.push({field:n,message:"must be a non-empty string"})});let r;if(t.serverUrl!==void 0)typeof t.serverUrl!="string"||t.serverUrl.trim().length===0?(e.push({field:"serverUrl",message:"must be a non-empty string when provided"}),r=""):r=t.serverUrl;else try{r=Ut()}catch(n){e.push({field:"serverUrl",message:n instanceof Error?n.message:"failed to determine default"}),r=""}if(ye.has(t.solanaCluster)||e.push({field:"solanaCluster",message:`must be one of ${Array.from(ye).join(", ")}`}),t.solanaEndpoint!==void 0&&(typeof t.solanaEndpoint!="string"?e.push({field:"solanaEndpoint",message:"must be a string when provided"}):t.solanaEndpoint.trim().length===0?e.push({field:"solanaEndpoint",message:'must be a non-empty string when provided (e.g., "https://api.mainnet-beta.solana.com")'}):!t.solanaEndpoint.startsWith("http://")&&!t.solanaEndpoint.startsWith("https://")&&e.push({field:"solanaEndpoint",message:'must start with "http://" or "https://" (e.g., "https://api.mainnet-beta.solana.com")'})),t.tokenMint&&typeof t.tokenMint!="string"&&e.push({field:"tokenMint",message:"must be a string when provided"}),e.length>0){const n=e.map(a=>`- ${a.field} ${a.message}`).join(`
5
- `);throw new Error(`Invalid Cedros configuration:
6
- ${n}`)}if(t.tokenMint){const n=t.dangerouslyAllowUnknownMint===!0,a=ne(t.tokenMint,"CedrosConfig.tokenMint",n);if(!a.isValid&&a.error)throw new Error(a.error);a.warning&&d().warn(a.warning)}return{...t,serverUrl:r}}class _e{adapters=null;poolId;isCleanedUp=!1;constructor(e){this.poolId=e??`pool_${Date.now()}_${Math.random().toString(36).slice(2,11)}`,d().debug(`[WalletPool] Created pool: ${this.poolId}`)}getAdapters(){return typeof window>"u"?[]:this.isCleanedUp?(d().warn(`[WalletPool] Attempted to use pool after cleanup: ${this.poolId}`),[]):this.adapters!==null?this.adapters:(d().debug(`[WalletPool] Initializing adapters for pool: ${this.poolId}`),this.adapters=[new se.PhantomWalletAdapter,new se.SolflareWalletAdapter],this.adapters)}async cleanup(){if(this.isCleanedUp){d().debug(`[WalletPool] Pool already cleaned up: ${this.poolId}`);return}if(d().debug(`[WalletPool] Cleaning up pool: ${this.poolId}`),this.isCleanedUp=!0,this.adapters===null)return;const e=this.adapters.map(async r=>{try{r.connected&&(d().debug(`[WalletPool] Disconnecting wallet: ${r.name}`),await r.disconnect())}catch(n){d().warn(`[WalletPool] Failed to disconnect wallet ${r.name}:`,n)}});await Promise.allSettled(e),this.adapters=null,d().debug(`[WalletPool] Pool cleanup complete: ${this.poolId}`)}isInitialized(){return this.adapters!==null}getId(){return this.poolId}}function Fe(t){return new _e(t)}const Dt=Object.freeze({surfaceBackground:"rgba(255, 255, 255, 0)",surfaceText:"#111827",surfaceBorder:"rgba(15, 23, 42, 0.08)",stripeBackground:"linear-gradient(135deg, #635bff 0%, #4f46e5 100%)",stripeText:"#ffffff",stripeShadow:"rgba(79, 70, 229, 0.25)",cryptoBackground:"linear-gradient(135deg, #14f195 0%, #9945ff 100%)",cryptoText:"#ffffff",cryptoShadow:"rgba(99, 102, 241, 0.25)",errorBackground:"#fee2e2",errorBorder:"#fca5a5",errorText:"#b91c1c",successBackground:"#dcfce7",successBorder:"#86efac",successText:"#166534",modalOverlay:"rgba(0, 0, 0, 0.5)",modalBackground:"#ffffff",modalBorder:"rgba(15, 23, 42, 0.08)",buttonBorderRadius:"8px",buttonPadding:"0.75rem 1.5rem",buttonFontSize:"1rem",buttonFontWeight:"600"}),Ot=Object.freeze({surfaceBackground:"rgba(17, 24, 39, 0.6)",surfaceText:"#f9fafb",surfaceBorder:"rgba(148, 163, 184, 0.25)",stripeBackground:"linear-gradient(135deg, #4f46e5 0%, #3730a3 100%)",stripeText:"#f5f3ff",stripeShadow:"rgba(99, 102, 241, 0.35)",cryptoBackground:"linear-gradient(135deg, #1dd4a6 0%, #6d28d9 100%)",cryptoText:"#ecfeff",cryptoShadow:"rgba(75, 85, 99, 0.35)",errorBackground:"#7f1d1d",errorBorder:"#fca5a5",errorText:"#fecaca",successBackground:"#14532d",successBorder:"#4ade80",successText:"#bbf7d0",modalOverlay:"rgba(0, 0, 0, 0.75)",modalBackground:"#1f2937",modalBorder:"rgba(148, 163, 184, 0.25)",buttonBorderRadius:"8px",buttonPadding:"0.75rem 1.5rem",buttonFontSize:"1rem",buttonFontWeight:"600"}),Bt={surfaceBackground:"--cedros-surface-bg",surfaceText:"--cedros-surface-text",surfaceBorder:"--cedros-surface-border",stripeBackground:"--cedros-stripe-bg",stripeText:"--cedros-stripe-text",stripeShadow:"--cedros-stripe-shadow",cryptoBackground:"--cedros-crypto-bg",cryptoText:"--cedros-crypto-text",cryptoShadow:"--cedros-crypto-shadow",errorBackground:"--cedros-error-bg",errorBorder:"--cedros-error-border",errorText:"--cedros-error-text",successBackground:"--cedros-success-bg",successBorder:"--cedros-success-border",successText:"--cedros-success-text",modalOverlay:"--cedros-modal-overlay",modalBackground:"--cedros-modal-bg",modalBorder:"--cedros-modal-border",buttonBorderRadius:"--cedros-button-radius",buttonPadding:"--cedros-button-padding",buttonFontSize:"--cedros-button-font-size",buttonFontWeight:"--cedros-button-font-weight"},$e=b.createContext(null);function Nt(t,e){return{...t==="dark"?Ot:Dt,...e}}function It(t){const e=Object.entries(t).map(([r,n])=>[Bt[r],n]);return Object.fromEntries(e)}function Lt({initialMode:t="light",overrides:e,unstyled:r=!1,children:n}){const[a,o]=b.useState(t),[i,s]=b.useState(e),l=b.useRef(e);b.useEffect(()=>{if(e===l.current)return;(!e||!l.current?e!==l.current:Object.keys({...e,...l.current}).some(f=>e[f]!==l.current?.[f]))&&(l.current=e,s(e))},[e]);const c=b.useMemo(()=>{const u=Nt(a,i),f=r?{}:It(u),h=r?"":`cedros-theme-root cedros-theme cedros-theme--${a}`;return{mode:a,setMode:o,tokens:u,className:h,style:f,unstyled:r}},[a,i,r]);return Q.jsx($e.Provider,{value:c,children:n})}function _t(){const t=b.useContext($e);if(!t)throw new Error("useCedrosTheme must be used within CedrosProvider");return t}let X=!1,Y=!1;async function Ft(){if(X)return Y?{available:!0}:{available:!1,error:pe()};try{return await import("@solana/web3.js"),X=!0,Y=!0,{available:!0}}catch{return X=!0,Y=!1,{available:!1,error:pe()}}}function pe(){return`Solana dependencies not installed. To use crypto payments, install them with:
7
-
8
- npm install @solana/web3.js @solana/spl-token @solana/wallet-adapter-react @solana/wallet-adapter-react-ui @solana/wallet-adapter-wallets @solana/wallet-adapter-base
9
-
10
- Or if you only need Stripe payments, hide the crypto button with:
11
- <CedrosPay showCrypto={false} />`}function $t(){return typeof process<"u"&&process.env.NODE_ENV==="development"?0:2}const je=b.createContext(null);function jt({config:t,children:e}){const r=b.useMemo(()=>Le(t),[t]),n=b.useRef(null);n.current===null&&(n.current=Fe());const[a,o]=b.useState(null);b.useEffect(()=>{let s=!1;return Ft().then(l=>{s||(l.available?o(void 0):o(l.error||"Solana dependencies not available"))}),()=>{s=!0}},[]),b.useEffect(()=>{const s=r.logLevel??$t(),l=ve({level:s,prefix:"[CedrosPay]"});nt(l)},[r.logLevel]),b.useEffect(()=>{const s=n.current;return()=>{s&&s.cleanup().catch(l=>{d().warn("[CedrosProvider] Wallet pool cleanup failed:",l)})}},[]),b.useEffect(()=>{const s=r.stripePublicKey,l=r.serverUrl??"",c=r.solanaCluster,u=r.solanaEndpoint,f=r.dangerouslyAllowUnknownMint;return()=>{kt(s,l,c,u,f)}},[r.stripePublicKey,r.serverUrl,r.solanaCluster,r.solanaEndpoint,r.dangerouslyAllowUnknownMint]);const i=b.useMemo(()=>{const{stripeManager:s,x402Manager:l,walletManager:c}=At(r.stripePublicKey,r.serverUrl??"",r.solanaCluster,r.solanaEndpoint,r.dangerouslyAllowUnknownMint);return{config:r,stripeManager:s,x402Manager:l,walletManager:c,walletPool:n.current,solanaError:a}},[r,a]);return Q.jsx(je.Provider,{value:i,children:Q.jsx(Lt,{initialMode:r.theme??"light",overrides:r.themeOverrides,unstyled:r.unstyled??!1,children:e})})}function qt(){const t=b.useContext(je);if(!t)throw new Error("useCedrosContext must be used within CedrosProvider");return t}exports.CIRCUIT_BREAKER_PRESETS=it;exports.CedrosProvider=jt;exports.CircuitBreakerOpenError=C;exports.CircuitState=Ce;exports.KNOWN_STABLECOINS=V;exports.LogLevel=Ee;exports.Logger=ee;exports.RATE_LIMITER_PRESETS=z;exports.RETRY_PRESETS=P;exports.WalletPool=_e;exports.createCircuitBreaker=H;exports.createLogger=ve;exports.createRateLimiter=_;exports.createWalletPool=Fe;exports.formatError=U;exports.getLogger=d;exports.retryWithBackoff=x;exports.useCedrosContext=qt;exports.useCedrosTheme=_t;exports.validateConfig=Le;exports.validateTokenMint=ne;