@cedros/login-react 0.0.41 → 0.0.43

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 (128) hide show
  1. package/dist/{AuthenticationSettings-CSoFp-_2.js → AuthenticationSettings-CxAubcoz.js} +1 -1
  2. package/dist/{AuthenticationSettings-CSoFp-_2.js.map → AuthenticationSettings-CxAubcoz.js.map} +1 -1
  3. package/dist/{AuthenticationSettings-Cu5Z2mTC.cjs → AuthenticationSettings-DPr882lj.cjs} +1 -1
  4. package/dist/{AuthenticationSettings-Cu5Z2mTC.cjs.map → AuthenticationSettings-DPr882lj.cjs.map} +1 -1
  5. package/dist/{AuthenticationSettings-DABzZHuI.cjs → AuthenticationSettings-Y40T1djV.cjs} +1 -1
  6. package/dist/{AuthenticationSettings-DABzZHuI.cjs.map → AuthenticationSettings-Y40T1djV.cjs.map} +1 -1
  7. package/dist/{AuthenticationSettings-D4ExU-2a.js → AuthenticationSettings-aVBFKKZ-.js} +1 -1
  8. package/dist/{AuthenticationSettings-D4ExU-2a.js.map → AuthenticationSettings-aVBFKKZ-.js.map} +1 -1
  9. package/dist/AutosaveStatus-ByD01ENa.cjs +1 -0
  10. package/dist/AutosaveStatus-ByD01ENa.cjs.map +1 -0
  11. package/dist/{AutosaveStatus-DMjvXzP2.js → AutosaveStatus-DtF_58rC.js} +608 -279
  12. package/dist/AutosaveStatus-DtF_58rC.js.map +1 -0
  13. package/dist/{CreditSystemSettings-BjQdysRS.js → CreditSystemSettings-BQek2Ux2.js} +1 -1
  14. package/dist/{CreditSystemSettings-BjQdysRS.js.map → CreditSystemSettings-BQek2Ux2.js.map} +1 -1
  15. package/dist/{CreditSystemSettings-DfSfQVE8.cjs → CreditSystemSettings-CbuCce29.cjs} +1 -1
  16. package/dist/{CreditSystemSettings-DfSfQVE8.cjs.map → CreditSystemSettings-CbuCce29.cjs.map} +1 -1
  17. package/dist/{CreditSystemSettings-BWuiRTtA.cjs → CreditSystemSettings-DHG_jhz9.cjs} +1 -1
  18. package/dist/{CreditSystemSettings-BWuiRTtA.cjs.map → CreditSystemSettings-DHG_jhz9.cjs.map} +1 -1
  19. package/dist/{CreditSystemSettings-Du3ac0ID.js → CreditSystemSettings-GDKgYc7I.js} +1 -1
  20. package/dist/{CreditSystemSettings-Du3ac0ID.js.map → CreditSystemSettings-GDKgYc7I.js.map} +1 -1
  21. package/dist/{EmailRegisterForm-CMXsa-_r.js → EmailRegisterForm-p2X5QP58.js} +147 -147
  22. package/dist/EmailRegisterForm-p2X5QP58.js.map +1 -0
  23. package/dist/EmailRegisterForm-xFb6MaVA.cjs +1 -0
  24. package/dist/EmailRegisterForm-xFb6MaVA.cjs.map +1 -0
  25. package/dist/{EmailSettings-CswtKXhb.cjs → EmailSettings-Cg4Z7139.cjs} +1 -1
  26. package/dist/{EmailSettings-CswtKXhb.cjs.map → EmailSettings-Cg4Z7139.cjs.map} +1 -1
  27. package/dist/{EmailSettings-BcHo0cqk.cjs → EmailSettings-CjxBg0cE.cjs} +1 -1
  28. package/dist/{EmailSettings-BcHo0cqk.cjs.map → EmailSettings-CjxBg0cE.cjs.map} +1 -1
  29. package/dist/{EmailSettings-CjngJwDS.js → EmailSettings-Ct6nFslP.js} +1 -1
  30. package/dist/{EmailSettings-CjngJwDS.js.map → EmailSettings-Ct6nFslP.js.map} +1 -1
  31. package/dist/{EmailSettings-ASDHfI0K.js → EmailSettings-D2pCqTKC.js} +1 -1
  32. package/dist/{EmailSettings-ASDHfI0K.js.map → EmailSettings-D2pCqTKC.js.map} +1 -1
  33. package/dist/{EmbeddedWalletSettings-CUY_X7Vj.js → EmbeddedWalletSettings-Bus7UyOX.js} +1 -1
  34. package/dist/{EmbeddedWalletSettings-CUY_X7Vj.js.map → EmbeddedWalletSettings-Bus7UyOX.js.map} +1 -1
  35. package/dist/{EmbeddedWalletSettings-BXlboZ9-.cjs → EmbeddedWalletSettings-CfzvFYnn.cjs} +1 -1
  36. package/dist/{EmbeddedWalletSettings-BXlboZ9-.cjs.map → EmbeddedWalletSettings-CfzvFYnn.cjs.map} +1 -1
  37. package/dist/{EmbeddedWalletSettings-CPLbqlxJ.js → EmbeddedWalletSettings-PwFgtGmK.js} +1 -1
  38. package/dist/{EmbeddedWalletSettings-CPLbqlxJ.js.map → EmbeddedWalletSettings-PwFgtGmK.js.map} +1 -1
  39. package/dist/{EmbeddedWalletSettings-BkwIbTkL.cjs → EmbeddedWalletSettings-t0_5poBu.cjs} +1 -1
  40. package/dist/{EmbeddedWalletSettings-BkwIbTkL.cjs.map → EmbeddedWalletSettings-t0_5poBu.cjs.map} +1 -1
  41. package/dist/GoogleLoginButton-2zNTIKMm.cjs +1 -0
  42. package/dist/GoogleLoginButton-2zNTIKMm.cjs.map +1 -0
  43. package/dist/{GoogleLoginButton-qf4A_A3G.js → GoogleLoginButton-C1WNu7W3.js} +41 -40
  44. package/dist/GoogleLoginButton-C1WNu7W3.js.map +1 -0
  45. package/dist/LoadingSpinner-6vml-zwr.js.map +1 -1
  46. package/dist/LoadingSpinner-d6sSxgQN.cjs.map +1 -1
  47. package/dist/{PermissionsSection-BeFhIgQy.js → PermissionsSection-BDDiEfho.js} +81 -77
  48. package/dist/{PermissionsSection-BeFhIgQy.js.map → PermissionsSection-BDDiEfho.js.map} +1 -1
  49. package/dist/PermissionsSection-CSB_Ikj9.cjs +1 -0
  50. package/dist/{PermissionsSection-B-6DJnN8.cjs.map → PermissionsSection-CSB_Ikj9.cjs.map} +1 -1
  51. package/dist/{ServerSettings-BygCxOTY.cjs → ServerSettings-BjLFs_sb.cjs} +1 -1
  52. package/dist/{ServerSettings-BygCxOTY.cjs.map → ServerSettings-BjLFs_sb.cjs.map} +1 -1
  53. package/dist/{ServerSettings-B9PNMse1.js → ServerSettings-COkhan4u.js} +1 -1
  54. package/dist/{ServerSettings-B9PNMse1.js.map → ServerSettings-COkhan4u.js.map} +1 -1
  55. package/dist/{ServerSettings-BLoWX7KG.js → ServerSettings-D7WJDTbZ.js} +1 -1
  56. package/dist/{ServerSettings-BLoWX7KG.js.map → ServerSettings-D7WJDTbZ.js.map} +1 -1
  57. package/dist/{ServerSettings-CgBdYspU.cjs → ServerSettings-Dmw2rpFA.cjs} +1 -1
  58. package/dist/{ServerSettings-CgBdYspU.cjs.map → ServerSettings-Dmw2rpFA.cjs.map} +1 -1
  59. package/dist/SolanaLoginButton-CqdzSSeJ.cjs +1 -0
  60. package/dist/SolanaLoginButton-CqdzSSeJ.cjs.map +1 -0
  61. package/dist/{SolanaLoginButton-B04dib6X.js → SolanaLoginButton-CyeX35eU.js} +41 -40
  62. package/dist/SolanaLoginButton-CyeX35eU.js.map +1 -0
  63. package/dist/{TeamSection-DbSYDRdI.js → TeamSection-BhsBEckR.js} +1 -1
  64. package/dist/{TeamSection-DbSYDRdI.js.map → TeamSection-BhsBEckR.js.map} +1 -1
  65. package/dist/{TeamSection-B1t1tU-_.cjs → TeamSection-DLxtRmta.cjs} +1 -1
  66. package/dist/{TeamSection-B1t1tU-_.cjs.map → TeamSection-DLxtRmta.cjs.map} +1 -1
  67. package/dist/{UsersSection-C7aRNkK2.cjs → UsersSection-BEKfbhQ4.cjs} +1 -1
  68. package/dist/{UsersSection-C7aRNkK2.cjs.map → UsersSection-BEKfbhQ4.cjs.map} +1 -1
  69. package/dist/{UsersSection--PAE1XRh.js → UsersSection-DbGkmxty.js} +1 -1
  70. package/dist/{UsersSection--PAE1XRh.js.map → UsersSection-DbGkmxty.js.map} +1 -1
  71. package/dist/{WebhookSettings-C-7Yxueu.js → WebhookSettings-CpPvGmV7.js} +1 -1
  72. package/dist/{WebhookSettings-C-7Yxueu.js.map → WebhookSettings-CpPvGmV7.js.map} +1 -1
  73. package/dist/{WebhookSettings-C923ZSKa.js → WebhookSettings-DEHV2ptf.js} +1 -1
  74. package/dist/{WebhookSettings-C923ZSKa.js.map → WebhookSettings-DEHV2ptf.js.map} +1 -1
  75. package/dist/{WebhookSettings-CbU3cfTJ.cjs → WebhookSettings-DbyPJ8V2.cjs} +1 -1
  76. package/dist/{WebhookSettings-CbU3cfTJ.cjs.map → WebhookSettings-DbyPJ8V2.cjs.map} +1 -1
  77. package/dist/{WebhookSettings-D19u9Uok.cjs → WebhookSettings-Rq_nNJuw.cjs} +1 -1
  78. package/dist/{WebhookSettings-D19u9Uok.cjs.map → WebhookSettings-Rq_nNJuw.cjs.map} +1 -1
  79. package/dist/admin-only.cjs +1 -1
  80. package/dist/admin-only.js +1 -1
  81. package/dist/email-only.cjs +1 -1
  82. package/dist/email-only.d.ts +6 -0
  83. package/dist/email-only.js +2 -2
  84. package/dist/google-only.cjs +1 -1
  85. package/dist/google-only.d.ts +6 -0
  86. package/dist/google-only.js +2 -2
  87. package/dist/index.cjs +13 -13
  88. package/dist/index.cjs.map +1 -1
  89. package/dist/index.d.ts +500 -1
  90. package/dist/index.js +5656 -4205
  91. package/dist/index.js.map +1 -1
  92. package/dist/{plugin-BiftIhZe.js → plugin-Bwwe7_ZO.js} +3 -2
  93. package/dist/plugin-Bwwe7_ZO.js.map +1 -0
  94. package/dist/plugin-C4bijrSr.cjs +1 -0
  95. package/dist/plugin-C4bijrSr.cjs.map +1 -0
  96. package/dist/solana-only.cjs +1 -1
  97. package/dist/solana-only.d.ts +6 -0
  98. package/dist/solana-only.js +2 -2
  99. package/dist/useAuth-B1yS_YiD.cjs +1 -0
  100. package/dist/{useAuth-U5CYsHEU.cjs.map → useAuth-B1yS_YiD.cjs.map} +1 -1
  101. package/dist/{useAuth-C-Vw-ggy.js → useAuth-l-itM5am.js} +440 -433
  102. package/dist/{useAuth-C-Vw-ggy.js.map → useAuth-l-itM5am.js.map} +1 -1
  103. package/dist/useUsersStatsSummary-9HQDKBU5.js +1879 -0
  104. package/dist/useUsersStatsSummary-9HQDKBU5.js.map +1 -0
  105. package/dist/useUsersStatsSummary-DiRC8sGs.cjs +1 -0
  106. package/dist/useUsersStatsSummary-DiRC8sGs.cjs.map +1 -0
  107. package/package.json +1 -1
  108. package/dist/AutosaveStatus-B1A1zORa.cjs +0 -1
  109. package/dist/AutosaveStatus-B1A1zORa.cjs.map +0 -1
  110. package/dist/AutosaveStatus-DMjvXzP2.js.map +0 -1
  111. package/dist/EmailRegisterForm-CMXsa-_r.js.map +0 -1
  112. package/dist/EmailRegisterForm-i7f4St2N.cjs +0 -1
  113. package/dist/EmailRegisterForm-i7f4St2N.cjs.map +0 -1
  114. package/dist/GoogleLoginButton-JtRViYWS.cjs +0 -1
  115. package/dist/GoogleLoginButton-JtRViYWS.cjs.map +0 -1
  116. package/dist/GoogleLoginButton-qf4A_A3G.js.map +0 -1
  117. package/dist/PermissionsSection-B-6DJnN8.cjs +0 -1
  118. package/dist/SolanaLoginButton-B04dib6X.js.map +0 -1
  119. package/dist/SolanaLoginButton-nSJHVFpZ.cjs +0 -1
  120. package/dist/SolanaLoginButton-nSJHVFpZ.cjs.map +0 -1
  121. package/dist/plugin-BiftIhZe.js.map +0 -1
  122. package/dist/plugin-BtQdI_Ay.cjs +0 -1
  123. package/dist/plugin-BtQdI_Ay.cjs.map +0 -1
  124. package/dist/useAuth-U5CYsHEU.cjs +0 -1
  125. package/dist/useUsersStatsSummary-5DJwzntC.js +0 -1246
  126. package/dist/useUsersStatsSummary-5DJwzntC.js.map +0 -1
  127. package/dist/useUsersStatsSummary-DgKaUIfs.cjs +0 -1
  128. package/dist/useUsersStatsSummary-DgKaUIfs.cjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"CreditSystemSettings-Du3ac0ID.js","sources":["../src/components/admin/settings/CreditSystemSettings.tsx"],"sourcesContent":["/**\n * Credit System settings page - deposits, withdrawals, privacy period (with tabs)\n */\nimport { useState, useCallback, useEffect, useMemo } from 'react';\nimport type { SystemSetting } from '../../../types';\nimport { LoadingSpinner } from '../../shared/LoadingSpinner';\nimport { ErrorMessage } from '../../shared/ErrorMessage';\nimport { useSettingsAutosave } from '../../../hooks/useSettingsAutosave';\nimport { SettingsSection } from './settingsInputs';\nimport { AutosaveStatus } from './AutosaveStatus';\n\ntype CreditTab = 'deposits' | 'tokens' | 'fees' | 'privacy' | 'treasury';\n\ninterface TabSection {\n title: string;\n description?: string;\n keys: string[];\n}\n\ninterface TabConfig {\n id: CreditTab;\n label: string;\n /** Categories to pull settings from */\n categories: string[];\n /** Specific keys to include (if empty, include all from categories) */\n includeKeys?: string[];\n /** Specific keys to exclude */\n excludeKeys?: string[];\n /** Additional sections rendered below the main settings */\n sections?: TabSection[];\n}\n\nconst TABS: TabConfig[] = [\n {\n id: 'deposits',\n label: 'Deposits',\n categories: ['deposit.general'],\n includeKeys: [\n 'deposit_company_token',\n 'deposit_max_usd',\n 'deposit_min_usd',\n 'deposit_micro_enabled',\n 'deposit_gasless_swap_enabled',\n 'solana_rpc_url',\n 'jupiter_api_key',\n ],\n },\n {\n id: 'tokens',\n label: 'Component',\n categories: ['deposit'],\n includeKeys: [\n 'deposit_show_explainer',\n 'deposit_quick_action_tokens',\n 'deposit_custom_tokens',\n 'deposit_custom_tokens_json',\n ],\n },\n {\n id: 'fees',\n label: 'Fees',\n categories: ['deposit'],\n includeKeys: [\n 'deposit_fee_policy',\n 'privacy_fee_fixed_lamports',\n 'privacy_fee_percent_bps',\n 'swap_fee_fixed_lamports',\n 'swap_fee_percent_bps',\n 'company_fee_fixed_lamports',\n 'company_fee_percent_bps',\n 'private_deposit_min_lamports',\n ],\n },\n {\n id: 'privacy',\n label: 'Privacy',\n categories: ['deposit.general', 'privacy', 'withdrawal'],\n includeKeys: [\n // Enable toggle\n 'deposit_privacy_enabled',\n // Privacy period setting\n 'privacy_period_secs',\n // Withdrawal settings (from privacy pool)\n 'withdrawal_percentage',\n 'withdrawal_min_lamports',\n // Partial withdrawal settings (related to privacy mixing)\n 'partial_withdrawal_count',\n 'partial_withdrawal_min_lamports',\n ],\n sections: [\n {\n title: 'Privacy Pool Worker',\n description: 'Background worker for processing withdrawals from the privacy cash pool.',\n keys: ['withdrawal_poll_interval_secs', 'withdrawal_batch_size'],\n },\n {\n title: 'Sidecar Shared Secrets',\n description:\n 'Auto-generated secrets shared between the auth server and the login-sidecar. Copy these into your sidecar deploy secrets.',\n keys: ['sidecar_api_key', 'note_encryption_key'],\n },\n ],\n },\n {\n id: 'treasury',\n label: 'Treasury',\n categories: ['withdrawal', 'deposit'],\n includeKeys: [\n // Treasury wallet (separate section)\n 'treasury_wallet_address',\n ],\n sections: [\n {\n title: 'Micropayment Batch Worker',\n description: 'Background worker for batching small SOL deposits together.',\n keys: ['micro_batch_threshold_usd', 'micro_batch_poll_secs'],\n },\n ],\n },\n];\n\nexport interface CreditSystemSettingsProps {\n className?: string;\n}\n\nexport function CreditSystemSettings({ className }: CreditSystemSettingsProps) {\n const {\n settings,\n edits,\n isLoading,\n autosaveStatus,\n autosaveError,\n error,\n fetchSettings,\n handleChange,\n getEffectiveValue,\n } = useSettingsAutosave();\n\n const [activeTab, setActiveTab] = useState<CreditTab>('deposits');\n\n useEffect(() => {\n fetchSettings();\n }, [fetchSettings]);\n\n // Get current tab config and filter settings\n const currentTab = TABS.find((t) => t.id === activeTab);\n\n // Collect all settings from the tab's categories\n const allTabSettings = useMemo(() => {\n if (!currentTab) return [];\n const allSettings: SystemSetting[] = [];\n for (const category of currentTab.categories) {\n const categorySettings = settings[category] ?? [];\n allSettings.push(...categorySettings);\n }\n return allSettings;\n }, [settings, currentTab]);\n\n // Get fee policy for conditional visibility\n const feePolicy = getEffectiveValue('deposit_fee_policy') || 'company_pays_all';\n\n const currentSettings = useMemo(() => {\n if (!currentTab) return [];\n\n // Apply include/exclude filters\n let filtered = allTabSettings;\n\n if (currentTab.includeKeys && currentTab.includeKeys.length > 0) {\n // Only include specific keys\n filtered = filtered.filter((s) => currentTab.includeKeys!.includes(s.key));\n // Sort by includeKeys order\n filtered.sort(\n (a, b) => currentTab.includeKeys!.indexOf(a.key) - currentTab.includeKeys!.indexOf(b.key)\n );\n } else if (currentTab.excludeKeys && currentTab.excludeKeys.length > 0) {\n // Exclude specific keys\n filtered = filtered.filter((s) => !currentTab.excludeKeys!.includes(s.key));\n }\n\n // Deposits tab: hide SOL micro payments if minimum > $10\n if (currentTab.id === 'deposits') {\n const minUsd = parseFloat(getEffectiveValue('deposit_min_usd')) || 0;\n if (minUsd > 10) {\n filtered = filtered.filter((s) => s.key !== 'deposit_micro_enabled');\n }\n }\n\n // Fees tab: conditionally show fee settings based on policy\n if (currentTab.id === 'fees') {\n const privacyFeeKeys = [\n 'privacy_fee_fixed_lamports',\n 'privacy_fee_percent_bps',\n 'private_deposit_min_lamports',\n ];\n const swapFeeKeys = ['swap_fee_fixed_lamports', 'swap_fee_percent_bps'];\n const companyFeeKeys = ['company_fee_fixed_lamports', 'company_fee_percent_bps'];\n\n filtered = filtered.filter((s) => {\n // Always show fee policy selector\n if (s.key === 'deposit_fee_policy') return true;\n\n // Hide all fees if company pays all\n if (feePolicy === 'company_pays_all') return false;\n\n // Show privacy fees for user_pays_privacy or user_pays_all\n if (privacyFeeKeys.includes(s.key)) {\n return feePolicy === 'user_pays_privacy' || feePolicy === 'user_pays_all';\n }\n\n // Show swap fees for user_pays_swap or user_pays_all\n if (swapFeeKeys.includes(s.key)) {\n return feePolicy === 'user_pays_swap' || feePolicy === 'user_pays_all';\n }\n\n // Show company fees only for user_pays_all\n if (companyFeeKeys.includes(s.key)) {\n return feePolicy === 'user_pays_all';\n }\n\n return true;\n });\n }\n\n return filtered;\n }, [allTabSettings, currentTab, getEffectiveValue, feePolicy]);\n\n // Helper to get settings for a section\n const getSectionSettings = useCallback(\n (keys: string[]) => {\n return allTabSettings\n .filter((s) => keys.includes(s.key))\n .sort((a, b) => keys.indexOf(a.key) - keys.indexOf(b.key));\n },\n [allTabSettings]\n );\n\n // Compute external warnings for the deposits tab\n const externalWarnings = useMemo(() => {\n if (currentTab?.id !== 'deposits') return undefined;\n\n const warnings: Record<string, string> = {};\n const minUsd = parseFloat(getEffectiveValue('deposit_min_usd')) || 0;\n const microEnabled = getEffectiveValue('deposit_micro_enabled');\n const isMicroDisabled = microEnabled === 'false' || microEnabled === '0' || microEnabled === '';\n\n // Warn if micro payments disabled but minimum < $10\n if (isMicroDisabled && minUsd < 10) {\n warnings['deposit_min_usd'] =\n 'SOL micro payments must be enabled for minimum deposits under $10.';\n }\n\n return Object.keys(warnings).length > 0 ? warnings : undefined;\n }, [currentTab?.id, getEffectiveValue]);\n\n // Credit system master toggle\n const creditsEnabled = getEffectiveValue('feature_credits') === 'true';\n const handleCreditsToggle = () => {\n handleChange('feature_credits', creditsEnabled ? 'false' : 'true');\n };\n\n if (isLoading && Object.keys(settings).length === 0) {\n return (\n <div className={`cedros-system-settings cedros-system-settings-loading ${className ?? ''}`}>\n <LoadingSpinner />\n <span>Loading settings...</span>\n </div>\n );\n }\n\n if (error) {\n return (\n <div className={`cedros-system-settings ${className ?? ''}`}>\n <ErrorMessage error={error.message} />\n </div>\n );\n }\n\n return (\n <div className={`cedros-system-settings ${className ?? ''}`}>\n <div className=\"cedros-settings-page-header\">\n <div className=\"cedros-settings-page-header-content\">\n <h2 className=\"cedros-settings-page-title\">Credit System</h2>\n <p className=\"cedros-settings-page-description\">\n Configure credit deposits, timed withdrawals, and privacy period settings.\n </p>\n </div>\n <div className=\"cedros-settings-page-header-actions\">\n <button\n type=\"button\"\n role=\"switch\"\n aria-checked={creditsEnabled}\n className={`cedros-toggle ${creditsEnabled ? 'cedros-toggle-on' : 'cedros-toggle-off'}`}\n onClick={handleCreditsToggle}\n >\n <span className=\"cedros-toggle-track\">\n <span className=\"cedros-toggle-thumb\" />\n </span>\n <span className=\"cedros-toggle-label\">{creditsEnabled ? 'Enabled' : 'Disabled'}</span>\n </button>\n <AutosaveStatus status={autosaveStatus} error={autosaveError} />\n </div>\n </div>\n\n {/* Tabs */}\n <div className=\"cedros-admin-tabs cedros-admin-tabs--line\">\n {TABS.map((tab) => (\n <button\n key={tab.id}\n type=\"button\"\n className={`cedros-admin-tab ${activeTab === tab.id ? 'cedros-admin-tab-active' : ''}`}\n onClick={() => setActiveTab(tab.id)}\n aria-selected={activeTab === tab.id}\n role=\"tab\"\n >\n {tab.label}\n </button>\n ))}\n </div>\n\n {/* Tab content */}\n <div className=\"cedros-admin-tab-content\" role=\"tabpanel\">\n {currentSettings.length === 0 && !currentTab?.sections?.length ? (\n <div className=\"cedros-system-settings-empty\">\n <p>No settings found for {currentTab?.label ?? 'this section'}.</p>\n </div>\n ) : (\n <>\n {currentSettings.length > 0 && (\n <SettingsSection\n settings={currentSettings}\n edits={edits}\n onChange={handleChange}\n externalWarnings={externalWarnings}\n />\n )}\n {/* Render additional sections */}\n {currentTab?.sections?.map((section) => {\n const sectionSettings = getSectionSettings(section.keys);\n if (sectionSettings.length === 0) return null;\n return (\n <div key={section.title} className=\"cedros-settings-subsection\">\n <div className=\"cedros-settings-subsection-header\">\n <h4 className=\"cedros-settings-subsection-title\">{section.title}</h4>\n {section.description && (\n <p className=\"cedros-settings-subsection-description\">\n {section.description}\n </p>\n )}\n </div>\n <SettingsSection\n settings={sectionSettings}\n edits={edits}\n onChange={handleChange}\n />\n </div>\n );\n })}\n </>\n )}\n </div>\n </div>\n );\n}\n\n// Keep old export name for backwards compatibility\nexport { CreditSystemSettings as PrivacyCashSettings };\nexport type { CreditSystemSettingsProps as PrivacyCashSettingsProps };\n"],"names":["TABS","CreditSystemSettings","className","settings","edits","isLoading","autosaveStatus","autosaveError","error","fetchSettings","handleChange","getEffectiveValue","useSettingsAutosave","activeTab","setActiveTab","useState","useEffect","currentTab","t","allTabSettings","useMemo","allSettings","category","categorySettings","feePolicy","currentSettings","filtered","s","a","b","privacyFeeKeys","swapFeeKeys","companyFeeKeys","getSectionSettings","useCallback","keys","externalWarnings","warnings","minUsd","microEnabled","creditsEnabled","handleCreditsToggle","jsx","LoadingSpinner","ErrorMessage","jsxs","AutosaveStatus","tab","Fragment","SettingsSection","section","sectionSettings"],"mappings":"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"}
1
+ {"version":3,"file":"CreditSystemSettings-GDKgYc7I.js","sources":["../src/components/admin/settings/CreditSystemSettings.tsx"],"sourcesContent":["/**\n * Credit System settings page - deposits, withdrawals, privacy period (with tabs)\n */\nimport { useState, useCallback, useEffect, useMemo } from 'react';\nimport type { SystemSetting } from '../../../types';\nimport { LoadingSpinner } from '../../shared/LoadingSpinner';\nimport { ErrorMessage } from '../../shared/ErrorMessage';\nimport { useSettingsAutosave } from '../../../hooks/useSettingsAutosave';\nimport { SettingsSection } from './settingsInputs';\nimport { AutosaveStatus } from './AutosaveStatus';\n\ntype CreditTab = 'deposits' | 'tokens' | 'fees' | 'privacy' | 'treasury';\n\ninterface TabSection {\n title: string;\n description?: string;\n keys: string[];\n}\n\ninterface TabConfig {\n id: CreditTab;\n label: string;\n /** Categories to pull settings from */\n categories: string[];\n /** Specific keys to include (if empty, include all from categories) */\n includeKeys?: string[];\n /** Specific keys to exclude */\n excludeKeys?: string[];\n /** Additional sections rendered below the main settings */\n sections?: TabSection[];\n}\n\nconst TABS: TabConfig[] = [\n {\n id: 'deposits',\n label: 'Deposits',\n categories: ['deposit.general'],\n includeKeys: [\n 'deposit_company_token',\n 'deposit_max_usd',\n 'deposit_min_usd',\n 'deposit_micro_enabled',\n 'deposit_gasless_swap_enabled',\n 'solana_rpc_url',\n 'jupiter_api_key',\n ],\n },\n {\n id: 'tokens',\n label: 'Component',\n categories: ['deposit'],\n includeKeys: [\n 'deposit_show_explainer',\n 'deposit_quick_action_tokens',\n 'deposit_custom_tokens',\n 'deposit_custom_tokens_json',\n ],\n },\n {\n id: 'fees',\n label: 'Fees',\n categories: ['deposit'],\n includeKeys: [\n 'deposit_fee_policy',\n 'privacy_fee_fixed_lamports',\n 'privacy_fee_percent_bps',\n 'swap_fee_fixed_lamports',\n 'swap_fee_percent_bps',\n 'company_fee_fixed_lamports',\n 'company_fee_percent_bps',\n 'private_deposit_min_lamports',\n ],\n },\n {\n id: 'privacy',\n label: 'Privacy',\n categories: ['deposit.general', 'privacy', 'withdrawal'],\n includeKeys: [\n // Enable toggle\n 'deposit_privacy_enabled',\n // Privacy period setting\n 'privacy_period_secs',\n // Withdrawal settings (from privacy pool)\n 'withdrawal_percentage',\n 'withdrawal_min_lamports',\n // Partial withdrawal settings (related to privacy mixing)\n 'partial_withdrawal_count',\n 'partial_withdrawal_min_lamports',\n ],\n sections: [\n {\n title: 'Privacy Pool Worker',\n description: 'Background worker for processing withdrawals from the privacy cash pool.',\n keys: ['withdrawal_poll_interval_secs', 'withdrawal_batch_size'],\n },\n {\n title: 'Sidecar Shared Secrets',\n description:\n 'Auto-generated secrets shared between the auth server and the login-sidecar. Copy these into your sidecar deploy secrets.',\n keys: ['sidecar_api_key', 'note_encryption_key'],\n },\n ],\n },\n {\n id: 'treasury',\n label: 'Treasury',\n categories: ['withdrawal', 'deposit'],\n includeKeys: [\n // Treasury wallet (separate section)\n 'treasury_wallet_address',\n ],\n sections: [\n {\n title: 'Micropayment Batch Worker',\n description: 'Background worker for batching small SOL deposits together.',\n keys: ['micro_batch_threshold_usd', 'micro_batch_poll_secs'],\n },\n ],\n },\n];\n\nexport interface CreditSystemSettingsProps {\n className?: string;\n}\n\nexport function CreditSystemSettings({ className }: CreditSystemSettingsProps) {\n const {\n settings,\n edits,\n isLoading,\n autosaveStatus,\n autosaveError,\n error,\n fetchSettings,\n handleChange,\n getEffectiveValue,\n } = useSettingsAutosave();\n\n const [activeTab, setActiveTab] = useState<CreditTab>('deposits');\n\n useEffect(() => {\n fetchSettings();\n }, [fetchSettings]);\n\n // Get current tab config and filter settings\n const currentTab = TABS.find((t) => t.id === activeTab);\n\n // Collect all settings from the tab's categories\n const allTabSettings = useMemo(() => {\n if (!currentTab) return [];\n const allSettings: SystemSetting[] = [];\n for (const category of currentTab.categories) {\n const categorySettings = settings[category] ?? [];\n allSettings.push(...categorySettings);\n }\n return allSettings;\n }, [settings, currentTab]);\n\n // Get fee policy for conditional visibility\n const feePolicy = getEffectiveValue('deposit_fee_policy') || 'company_pays_all';\n\n const currentSettings = useMemo(() => {\n if (!currentTab) return [];\n\n // Apply include/exclude filters\n let filtered = allTabSettings;\n\n if (currentTab.includeKeys && currentTab.includeKeys.length > 0) {\n // Only include specific keys\n filtered = filtered.filter((s) => currentTab.includeKeys!.includes(s.key));\n // Sort by includeKeys order\n filtered.sort(\n (a, b) => currentTab.includeKeys!.indexOf(a.key) - currentTab.includeKeys!.indexOf(b.key)\n );\n } else if (currentTab.excludeKeys && currentTab.excludeKeys.length > 0) {\n // Exclude specific keys\n filtered = filtered.filter((s) => !currentTab.excludeKeys!.includes(s.key));\n }\n\n // Deposits tab: hide SOL micro payments if minimum > $10\n if (currentTab.id === 'deposits') {\n const minUsd = parseFloat(getEffectiveValue('deposit_min_usd')) || 0;\n if (minUsd > 10) {\n filtered = filtered.filter((s) => s.key !== 'deposit_micro_enabled');\n }\n }\n\n // Fees tab: conditionally show fee settings based on policy\n if (currentTab.id === 'fees') {\n const privacyFeeKeys = [\n 'privacy_fee_fixed_lamports',\n 'privacy_fee_percent_bps',\n 'private_deposit_min_lamports',\n ];\n const swapFeeKeys = ['swap_fee_fixed_lamports', 'swap_fee_percent_bps'];\n const companyFeeKeys = ['company_fee_fixed_lamports', 'company_fee_percent_bps'];\n\n filtered = filtered.filter((s) => {\n // Always show fee policy selector\n if (s.key === 'deposit_fee_policy') return true;\n\n // Hide all fees if company pays all\n if (feePolicy === 'company_pays_all') return false;\n\n // Show privacy fees for user_pays_privacy or user_pays_all\n if (privacyFeeKeys.includes(s.key)) {\n return feePolicy === 'user_pays_privacy' || feePolicy === 'user_pays_all';\n }\n\n // Show swap fees for user_pays_swap or user_pays_all\n if (swapFeeKeys.includes(s.key)) {\n return feePolicy === 'user_pays_swap' || feePolicy === 'user_pays_all';\n }\n\n // Show company fees only for user_pays_all\n if (companyFeeKeys.includes(s.key)) {\n return feePolicy === 'user_pays_all';\n }\n\n return true;\n });\n }\n\n return filtered;\n }, [allTabSettings, currentTab, getEffectiveValue, feePolicy]);\n\n // Helper to get settings for a section\n const getSectionSettings = useCallback(\n (keys: string[]) => {\n return allTabSettings\n .filter((s) => keys.includes(s.key))\n .sort((a, b) => keys.indexOf(a.key) - keys.indexOf(b.key));\n },\n [allTabSettings]\n );\n\n // Compute external warnings for the deposits tab\n const externalWarnings = useMemo(() => {\n if (currentTab?.id !== 'deposits') return undefined;\n\n const warnings: Record<string, string> = {};\n const minUsd = parseFloat(getEffectiveValue('deposit_min_usd')) || 0;\n const microEnabled = getEffectiveValue('deposit_micro_enabled');\n const isMicroDisabled = microEnabled === 'false' || microEnabled === '0' || microEnabled === '';\n\n // Warn if micro payments disabled but minimum < $10\n if (isMicroDisabled && minUsd < 10) {\n warnings['deposit_min_usd'] =\n 'SOL micro payments must be enabled for minimum deposits under $10.';\n }\n\n return Object.keys(warnings).length > 0 ? warnings : undefined;\n }, [currentTab?.id, getEffectiveValue]);\n\n // Credit system master toggle\n const creditsEnabled = getEffectiveValue('feature_credits') === 'true';\n const handleCreditsToggle = () => {\n handleChange('feature_credits', creditsEnabled ? 'false' : 'true');\n };\n\n if (isLoading && Object.keys(settings).length === 0) {\n return (\n <div className={`cedros-system-settings cedros-system-settings-loading ${className ?? ''}`}>\n <LoadingSpinner />\n <span>Loading settings...</span>\n </div>\n );\n }\n\n if (error) {\n return (\n <div className={`cedros-system-settings ${className ?? ''}`}>\n <ErrorMessage error={error.message} />\n </div>\n );\n }\n\n return (\n <div className={`cedros-system-settings ${className ?? ''}`}>\n <div className=\"cedros-settings-page-header\">\n <div className=\"cedros-settings-page-header-content\">\n <h2 className=\"cedros-settings-page-title\">Credit System</h2>\n <p className=\"cedros-settings-page-description\">\n Configure credit deposits, timed withdrawals, and privacy period settings.\n </p>\n </div>\n <div className=\"cedros-settings-page-header-actions\">\n <button\n type=\"button\"\n role=\"switch\"\n aria-checked={creditsEnabled}\n className={`cedros-toggle ${creditsEnabled ? 'cedros-toggle-on' : 'cedros-toggle-off'}`}\n onClick={handleCreditsToggle}\n >\n <span className=\"cedros-toggle-track\">\n <span className=\"cedros-toggle-thumb\" />\n </span>\n <span className=\"cedros-toggle-label\">{creditsEnabled ? 'Enabled' : 'Disabled'}</span>\n </button>\n <AutosaveStatus status={autosaveStatus} error={autosaveError} />\n </div>\n </div>\n\n {/* Tabs */}\n <div className=\"cedros-admin-tabs cedros-admin-tabs--line\">\n {TABS.map((tab) => (\n <button\n key={tab.id}\n type=\"button\"\n className={`cedros-admin-tab ${activeTab === tab.id ? 'cedros-admin-tab-active' : ''}`}\n onClick={() => setActiveTab(tab.id)}\n aria-selected={activeTab === tab.id}\n role=\"tab\"\n >\n {tab.label}\n </button>\n ))}\n </div>\n\n {/* Tab content */}\n <div className=\"cedros-admin-tab-content\" role=\"tabpanel\">\n {currentSettings.length === 0 && !currentTab?.sections?.length ? (\n <div className=\"cedros-system-settings-empty\">\n <p>No settings found for {currentTab?.label ?? 'this section'}.</p>\n </div>\n ) : (\n <>\n {currentSettings.length > 0 && (\n <SettingsSection\n settings={currentSettings}\n edits={edits}\n onChange={handleChange}\n externalWarnings={externalWarnings}\n />\n )}\n {/* Render additional sections */}\n {currentTab?.sections?.map((section) => {\n const sectionSettings = getSectionSettings(section.keys);\n if (sectionSettings.length === 0) return null;\n return (\n <div key={section.title} className=\"cedros-settings-subsection\">\n <div className=\"cedros-settings-subsection-header\">\n <h4 className=\"cedros-settings-subsection-title\">{section.title}</h4>\n {section.description && (\n <p className=\"cedros-settings-subsection-description\">\n {section.description}\n </p>\n )}\n </div>\n <SettingsSection\n settings={sectionSettings}\n edits={edits}\n onChange={handleChange}\n />\n </div>\n );\n })}\n </>\n )}\n </div>\n </div>\n );\n}\n\n// Keep old export name for backwards compatibility\nexport { CreditSystemSettings as PrivacyCashSettings };\nexport type { CreditSystemSettingsProps as PrivacyCashSettingsProps };\n"],"names":["TABS","CreditSystemSettings","className","settings","edits","isLoading","autosaveStatus","autosaveError","error","fetchSettings","handleChange","getEffectiveValue","useSettingsAutosave","activeTab","setActiveTab","useState","useEffect","currentTab","t","allTabSettings","useMemo","allSettings","category","categorySettings","feePolicy","currentSettings","filtered","s","a","b","privacyFeeKeys","swapFeeKeys","companyFeeKeys","getSectionSettings","useCallback","keys","externalWarnings","warnings","minUsd","microEnabled","creditsEnabled","handleCreditsToggle","jsx","LoadingSpinner","ErrorMessage","jsxs","AutosaveStatus","tab","Fragment","SettingsSection","section","sectionSettings"],"mappings":"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"}