@vechain/vechain-kit 2.4.2 → 3.0.0-rc.1

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 (136) hide show
  1. package/dist/AccountModal-CK-qcPlQ.js +1 -0
  2. package/dist/AccountModal-ChuVFqPc.js +20 -0
  3. package/dist/AccountModal-ChuVFqPc.js.map +1 -0
  4. package/dist/AccountModal-DNK0IbiE.cjs +1 -0
  5. package/dist/AccountModal-DjAS4w6z.cjs +20 -0
  6. package/dist/AccountModal-DjAS4w6z.cjs.map +1 -0
  7. package/dist/BaseModal-CWAI9-Bi.js +2 -0
  8. package/dist/BaseModal-CWAI9-Bi.js.map +1 -0
  9. package/dist/BaseModal-yevRjczw.cjs +2 -0
  10. package/dist/BaseModal-yevRjczw.cjs.map +1 -0
  11. package/dist/ConnectModal-BXbiUwnz.js +1 -0
  12. package/dist/ConnectModal-C50EF9gE.js +2 -0
  13. package/dist/ConnectModal-C50EF9gE.js.map +1 -0
  14. package/dist/ConnectModal-CvkkVALe.cjs +1 -0
  15. package/dist/ConnectModal-DmIkWb1i.cjs +2 -0
  16. package/dist/ConnectModal-DmIkWb1i.cjs.map +1 -0
  17. package/dist/DisconnectConfirmContent-B4qahKqQ.cjs +2 -0
  18. package/dist/DisconnectConfirmContent-B4qahKqQ.cjs.map +1 -0
  19. package/dist/DisconnectConfirmContent-C9qLnI-m.js +2 -0
  20. package/dist/DisconnectConfirmContent-C9qLnI-m.js.map +1 -0
  21. package/dist/LegalDocumentsModal-5sNOrJI9.js +1 -0
  22. package/dist/LegalDocumentsModal-aWgfKwIL.js +2 -0
  23. package/dist/LegalDocumentsModal-aWgfKwIL.js.map +1 -0
  24. package/dist/LegalDocumentsModal-fnhM40y6.cjs +2 -0
  25. package/dist/LegalDocumentsModal-fnhM40y6.cjs.map +1 -0
  26. package/dist/LegalDocumentsModal-g54lP0U7.cjs +1 -0
  27. package/dist/PrivyCrossAppProvider-B6oIXeWL.js +2 -0
  28. package/dist/PrivyCrossAppProvider-B6oIXeWL.js.map +1 -0
  29. package/dist/PrivyCrossAppProvider-C6aL4Qor.cjs +1 -0
  30. package/dist/PrivyCrossAppProvider-Ccu2yH99.js +1 -0
  31. package/dist/PrivyCrossAppProvider-DSuzrbqs.cjs +2 -0
  32. package/dist/PrivyCrossAppProvider-DSuzrbqs.cjs.map +1 -0
  33. package/dist/PrivyWalletProvider-BkqWSj75.cjs +2 -0
  34. package/dist/PrivyWalletProvider-BkqWSj75.cjs.map +1 -0
  35. package/dist/PrivyWalletProvider-DToo_u0W.js +2 -0
  36. package/dist/PrivyWalletProvider-DToo_u0W.js.map +1 -0
  37. package/dist/ShareButtons-B92JZp47.js +2 -0
  38. package/dist/ShareButtons-B92JZp47.js.map +1 -0
  39. package/dist/ShareButtons-CRMNerbz.cjs +2 -0
  40. package/dist/ShareButtons-CRMNerbz.cjs.map +1 -0
  41. package/dist/UpgradeSmartAccountModal-BAzmVxeJ.js +2 -0
  42. package/dist/UpgradeSmartAccountModal-BAzmVxeJ.js.map +1 -0
  43. package/dist/UpgradeSmartAccountModal-BGjTzYAm.cjs +1 -0
  44. package/dist/UpgradeSmartAccountModal-CpZo27Uk.js +1 -0
  45. package/dist/UpgradeSmartAccountModal-IMcihO0d.cjs +2 -0
  46. package/dist/UpgradeSmartAccountModal-IMcihO0d.cjs.map +1 -0
  47. package/dist/VechainKitThemeProvider-BM5258oA.cjs +75 -0
  48. package/dist/VechainKitThemeProvider-BM5258oA.cjs.map +1 -0
  49. package/dist/VechainKitThemeProvider-Di9a04Es.js +75 -0
  50. package/dist/VechainKitThemeProvider-Di9a04Es.js.map +1 -0
  51. package/dist/assets/index.cjs +1 -1
  52. package/dist/assets/index.d.cts +1 -1
  53. package/dist/assets/{index.d.mts → index.d.ts} +1 -1
  54. package/dist/assets/index.js +1 -0
  55. package/dist/{assets-BL24r-Yp.mjs → assets-CXk1qRDd.js} +5 -5
  56. package/dist/assets-CXk1qRDd.js.map +1 -0
  57. package/dist/{assets-DNJsQD7_.cjs → assets-YPd7adzM.cjs} +7 -7
  58. package/dist/assets-YPd7adzM.cjs.map +1 -0
  59. package/dist/chunk-DjWAcSYV.cjs +1 -0
  60. package/dist/components/index.cjs +1 -0
  61. package/dist/components/index.d.cts +6 -0
  62. package/dist/components/index.d.ts +6 -0
  63. package/dist/components/index.js +1 -0
  64. package/dist/components-QKLypcU1.cjs +2 -0
  65. package/dist/components-QKLypcU1.cjs.map +1 -0
  66. package/dist/components-k36uDisW.js +2 -0
  67. package/dist/components-k36uDisW.js.map +1 -0
  68. package/dist/hooks/index.cjs +1 -0
  69. package/dist/hooks/index.d.cts +6 -0
  70. package/dist/hooks/index.d.ts +6 -0
  71. package/dist/hooks/index.js +1 -0
  72. package/dist/hooks-C8eXQYIN.cjs +8 -0
  73. package/dist/hooks-C8eXQYIN.cjs.map +1 -0
  74. package/dist/hooks-DuTew9oP.js +8 -0
  75. package/dist/hooks-DuTew9oP.js.map +1 -0
  76. package/dist/{index-CpRbZET6.d.mts → index-BGQS0a81.d.ts} +564 -1581
  77. package/dist/index-BGQS0a81.d.ts.map +1 -0
  78. package/dist/index-Bqw0Cz5n.d.cts +587 -0
  79. package/dist/index-Bqw0Cz5n.d.cts.map +1 -0
  80. package/dist/index-BugHmddr.d.ts +587 -0
  81. package/dist/index-BugHmddr.d.ts.map +1 -0
  82. package/dist/{index-D4rz985m.d.cts → index-C8wbz8af.d.cts} +561 -1578
  83. package/dist/index-C8wbz8af.d.cts.map +1 -0
  84. package/dist/{index-CWViOs1U.d.mts → index-COoeacay.d.ts} +5 -5
  85. package/dist/index-COoeacay.d.ts.map +1 -0
  86. package/dist/{index-u3CPquCV.d.cts → index-CmGg4iaS.d.cts} +4 -4
  87. package/dist/{index-CWViOs1U.d.mts.map → index-CmGg4iaS.d.cts.map} +1 -1
  88. package/dist/index-DI_IPiLX.d.ts +324 -0
  89. package/dist/index-DI_IPiLX.d.ts.map +1 -0
  90. package/dist/index-DVxlUr9t.d.cts +324 -0
  91. package/dist/index-DVxlUr9t.d.cts.map +1 -0
  92. package/dist/index.cjs +1 -221
  93. package/dist/index.d.cts +6 -3
  94. package/dist/index.d.ts +6 -0
  95. package/dist/index.js +1 -0
  96. package/dist/network-Cs9YqDJ1.d.cts +536 -0
  97. package/dist/network-Cs9YqDJ1.d.cts.map +1 -0
  98. package/dist/network-yA5VWcPq.d.ts +536 -0
  99. package/dist/network-yA5VWcPq.d.ts.map +1 -0
  100. package/dist/providers/index.cjs +1 -0
  101. package/dist/providers/index.d.cts +3 -0
  102. package/dist/providers/index.d.ts +3 -0
  103. package/dist/providers/index.js +1 -0
  104. package/dist/providers-DImdr6Kk.cjs +124 -0
  105. package/dist/providers-DImdr6Kk.cjs.map +1 -0
  106. package/dist/providers-kA0lotaM.js +124 -0
  107. package/dist/providers-kA0lotaM.js.map +1 -0
  108. package/dist/ssrUtils-C_5ZY26i.cjs +2 -0
  109. package/dist/ssrUtils-C_5ZY26i.cjs.map +1 -0
  110. package/dist/ssrUtils-DSwxhTtm.js +2 -0
  111. package/dist/ssrUtils-DSwxhTtm.js.map +1 -0
  112. package/dist/utils/index.cjs +1 -1
  113. package/dist/utils/index.d.cts +2 -2
  114. package/dist/utils/index.d.ts +3 -0
  115. package/dist/utils/index.js +1 -0
  116. package/dist/utils-B2Eg9TD3.js +2 -0
  117. package/dist/utils-B2Eg9TD3.js.map +1 -0
  118. package/dist/utils-jW13BhAb.cjs +2 -0
  119. package/dist/utils-jW13BhAb.cjs.map +1 -0
  120. package/package.json +46 -9
  121. package/dist/assets/index.mjs +0 -1
  122. package/dist/assets-BL24r-Yp.mjs.map +0 -1
  123. package/dist/assets-DNJsQD7_.cjs.map +0 -1
  124. package/dist/index-CpRbZET6.d.mts.map +0 -1
  125. package/dist/index-D4rz985m.d.cts.map +0 -1
  126. package/dist/index-u3CPquCV.d.cts.map +0 -1
  127. package/dist/index.cjs.map +0 -1
  128. package/dist/index.d.mts +0 -3
  129. package/dist/index.mjs +0 -221
  130. package/dist/index.mjs.map +0 -1
  131. package/dist/utils/index.d.mts +0 -3
  132. package/dist/utils/index.mjs +0 -1
  133. package/dist/utils-BQ9mZctf.cjs +0 -2
  134. package/dist/utils-BQ9mZctf.cjs.map +0 -1
  135. package/dist/utils-BxZj2QIg.mjs +0 -2
  136. package/dist/utils-BxZj2QIg.mjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providers-kA0lotaM.js","names":["vars: CustomizedStyle","cssRules: string[]","internalQueryClient: QueryClient | null","errors: string[]","CURRENCY_STORAGE_KEY","i18n","i18n"],"sources":["../src/utils/i18n.ts","../src/utils/cssVariables.ts","../src/providers/EnsureQueryClient.tsx","../src/providers/ModalProvider.tsx","../src/providers/VeChainKitProvider.tsx","../src/providers/VeChainKitCoreProvider.tsx"],"sourcesContent":["import { resources } from '../../i18n';\n\nexport const initializeI18n = (i18nInstance: any) => {\n // Get all languages from VeChainKit resources\n const languages = Object.keys(resources);\n\n // Add each language's translations to the existing i18n instance\n languages.forEach((lang) => {\n // Check if the namespace exists to avoid duplicates\n const hasNamespace = i18nInstance.hasResourceBundle(\n lang,\n 'translation',\n );\n\n if (!hasNamespace) {\n i18nInstance.addResourceBundle(\n lang,\n 'translation',\n resources[lang as keyof typeof resources].translation,\n true,\n true,\n );\n } else {\n // Merge with existing translations if namespace exists\n i18nInstance.addResourceBundle(\n lang,\n 'translation',\n resources[lang as keyof typeof resources].translation,\n true,\n true,\n );\n }\n });\n};\n","/**\n * CSS variable generators for DAppKit and Privy\n * Converts ThemeTokens to CSS variable objects\n */\n\nimport { ThemeTokens } from '../theme/tokens';\nimport { CustomizedStyle } from '@vechain/dapp-kit-ui';\n\n/**\n * Slightly increase opacity for Privy modals to improve readability\n * while maintaining the glass effect appearance\n */\nexport function improvePrivyReadability(\n color: string,\n darkMode: boolean,\n): string {\n // If it's already a solid color (hex or rgb without alpha), return as-is\n if (!color.includes('rgba') && !color.includes('hsla')) {\n return color;\n }\n\n // Extract rgba values\n const rgbaMatch = color.match(\n /rgba?\\((\\d+),\\s*(\\d+),\\s*(\\d+)(?:,\\s*([\\d.]+))?\\)/,\n );\n if (rgbaMatch) {\n const r = parseInt(rgbaMatch[1], 10);\n const g = parseInt(rgbaMatch[2], 10);\n const b = parseInt(rgbaMatch[3], 10);\n const alpha = rgbaMatch[4] ? parseFloat(rgbaMatch[4]) : 1;\n\n // If alpha is already high, return as-is to maintain glass effect\n if (alpha >= 0.9) {\n return color;\n }\n\n // Only slightly increase opacity (by ~0.15-0.2) to improve readability\n // while maintaining the glass effect look\n const minAlpha = darkMode ? 0.9 : 0.91;\n const targetAlpha = Math.min(Math.max(alpha + 0.15, minAlpha), 0.91);\n return `rgba(${r}, ${g}, ${b}, ${targetAlpha})`;\n }\n\n // If we can't parse it, return the original color\n return color;\n}\n\n/**\n * Generate DAppKit CSS variables from ThemeTokens\n */\nexport function generateDAppKitCSSVariables(\n tokens: ThemeTokens,\n darkMode: boolean,\n): CustomizedStyle {\n const vars: CustomizedStyle = {\n '--vdk-modal-z-index': '10000',\n '--vdk-modal-width': '22rem',\n '--vdk-modal-backdrop-filter': tokens.effects.backdropFilter.modal,\n '--vdk-border-dark-source-card': `1px solid ${tokens.colors.border.default}`,\n '--vdk-border-light-source-card': `1px solid ${tokens.colors.border.default}`,\n '--vdk-font-family': tokens.fonts.body,\n '--vdk-font-size-medium': tokens.fonts.sizes.medium,\n '--vdk-font-size-large': tokens.fonts.sizes.large,\n '--vdk-font-weight-medium': tokens.fonts.weights.medium.toString(),\n };\n\n // Use loginIn variant style: white (light) / transparent (dark) background\n // For hover/active, derive colors that simulate the opacity: 0.5 effect\n // DAppKit uses these CSS variables for background colors\n if (darkMode) {\n vars['--vdk-color-dark-primary'] = 'transparent'; // loginIn dark mode bg\n // For transparent base, use a subtle white overlay to simulate dimming\n // This creates a visual effect similar to opacity: 0.5\n vars['--vdk-color-dark-primary-hover'] = 'rgba(255, 255, 255, 0.05)'; // Subtle white overlay\n vars['--vdk-color-dark-primary-active'] = 'rgba(255, 255, 255, 0.1)'; // Slightly more visible\n // DAppKit uses secondary color for modal background\n vars['--vdk-color-dark-secondary'] = tokens.colors.background.modal;\n // DAppKit uses tertiary color for text\n vars['--vdk-color-dark-tertiary'] = tokens.colors.text.primary;\n } else {\n vars['--vdk-color-light-primary'] = '#ffffff'; // loginIn light mode bg\n // For white base, use a slightly grayed white to simulate opacity: 0.5\n // This makes the button appear dimmed on hover\n vars['--vdk-color-light-primary-hover'] = 'rgba(245, 245, 245, 0.8)'; // Slightly grayed white\n vars['--vdk-color-light-primary-active'] = 'rgba(240, 240, 240, 0.8)'; // Slightly darker for active\n // DAppKit uses secondary color for modal background\n vars['--vdk-color-light-secondary'] = tokens.colors.background.modal;\n // DAppKit uses tertiary color for text\n vars['--vdk-color-light-tertiary'] = tokens.colors.text.primary;\n }\n\n return vars;\n}\n\n/**\n * Generate Privy CSS variables from ThemeTokens\n * Note: Privy modals don't support backdrop filters natively, so we:\n * 1. Slightly increase opacity for readability while maintaining glass effect\n * 2. Inject CSS to apply backdrop filters to Privy modals\n * 3. Map primary hover/active colors to Privy button states (background-2/background-3)\n * 4. Inject CSS to apply card colors to Privy card elements directly\n */\nexport function generatePrivyCSSVariables(\n tokens: ThemeTokens,\n darkMode: boolean,\n): Record<string, string> {\n // Slightly improve readability while maintaining glass effect\n const privyModalBg = improvePrivyReadability(\n tokens.colors.background.modal,\n darkMode,\n );\n\n // Use loginIn variant style: white (light) / transparent (dark) background\n // For hover/active, we'll apply opacity: 0.5 via CSS injection\n const privyButtonBaseBg = darkMode ? 'transparent' : '#ffffff';\n const privyButtonHoverBg = darkMode ? 'transparent' : '#ffffff';\n const privyButtonActiveBg = darkMode ? 'transparent' : '#ffffff';\n\n const variables: Record<string, string> = {\n '--privy-border-radius-sm': tokens.borders.radius.small,\n '--privy-border-radius-md': tokens.borders.radius.medium,\n '--privy-border-radius-lg': tokens.borders.radius.large,\n '--privy-border-radius-full': tokens.borders.radius.full,\n '--privy-color-background': privyModalBg,\n // Use loginIn variant style: white (light) / transparent (dark) background\n // Hover/active will use opacity: 0.5 via CSS injection\n '--privy-color-background-2': privyButtonHoverBg,\n '--privy-color-background-3': privyButtonActiveBg,\n '--privy-color-foreground': tokens.colors.text.primary,\n '--privy-color-foreground-2': tokens.colors.text.primary, // Privy uses this for primary text\n '--privy-color-foreground-3': tokens.colors.text.secondary, // Privy uses this for secondary text\n '--privy-color-foreground-4': tokens.colors.text.tertiary, // Privy uses this for tertiary text\n // Use loginIn text colors: #1a1a1a (light) / white (dark)\n '--privy-color-foreground-accent': darkMode ? '#ffffff' : '#1a1a1a',\n '--privy-color-accent': privyButtonBaseBg, // loginIn background color\n '--privy-color-accent-light': privyButtonHoverBg,\n '--privy-color-accent-lightest': privyButtonActiveBg,\n '--privy-color-accent-dark': privyButtonHoverBg,\n '--privy-color-accent-darkest': privyButtonActiveBg,\n '--privy-color-success': tokens.colors.success,\n '--privy-color-error': tokens.colors.error,\n '--privy-color-error-light': tokens.colors.error + '33',\n };\n\n return variables;\n}\n\n/**\n * Apply DAppKit button styles (hover opacity matching loginIn variant)\n */\nexport function applyDAppKitButtonStyles(): void {\n if (typeof document === 'undefined') return;\n\n const styleId = 'vechain-kit-dappkit-button-styles';\n let styleElement = document.getElementById(styleId);\n\n if (!styleElement) {\n styleElement = document.createElement('style');\n styleElement.id = styleId;\n document.head.appendChild(styleElement);\n }\n\n // Target DAppKit wallet source buttons/cards\n // Apply hover/active opacity to match loginIn variant style\n // Target all button-like elements (buttons, clickable divs, elements with cursor pointer)\n const cssRules = `\n /* CRITICAL: Ensure dappkit modal always has pointer-events enabled */\n /* This fixes an issue where the modal becomes unclickable when opened on top of bottom sheet */\n vdk-modal,\n [data-vdk-modal],\n [id*=\"vdk-modal\"] {\n pointer-events: all !important;\n }\n \n /* DAppKit wallet source buttons - apply loginIn hover style */\n /* Target all button-like elements within DAppKit containers */\n [class*=\"vdk\"] button,\n [class*=\"vdk\"] [role=\"button\"],\n [class*=\"vdk\"] [tabindex],\n [id*=\"vdk\"] button,\n [id*=\"vdk\"] [role=\"button\"],\n [id*=\"vdk\"] [tabindex],\n [data-vdk-modal] button,\n [data-vdk-modal] [role=\"button\"],\n [data-vdk-modal] [tabindex],\n [data-vdk-source-card],\n [class*=\"vdk-source-card\"],\n [class*=\"source-card\"],\n button[class*=\"vdk\"],\n [data-vdk-button],\n [class*=\"vdk-button\"],\n /* Target elements that are likely buttons based on styling */\n [class*=\"vdk\"] [style*=\"cursor\"][style*=\"pointer\"],\n [id*=\"vdk\"] [style*=\"cursor\"][style*=\"pointer\"],\n [data-vdk-modal] [style*=\"cursor\"][style*=\"pointer\"] {\n transition: opacity 0.2s ease !important;\n }\n \n /* Hover states */\n [class*=\"vdk\"] button:hover,\n [class*=\"vdk\"] [role=\"button\"]:hover,\n [class*=\"vdk\"] [tabindex]:hover,\n [id*=\"vdk\"] button:hover,\n [id*=\"vdk\"] [role=\"button\"]:hover,\n [id*=\"vdk\"] [tabindex]:hover,\n [data-vdk-modal] button:hover,\n [data-vdk-modal] [role=\"button\"]:hover,\n [data-vdk-modal] [tabindex]:hover,\n [data-vdk-source-card]:hover,\n [class*=\"vdk-source-card\"]:hover,\n [class*=\"source-card\"]:hover,\n button[class*=\"vdk\"]:hover,\n [data-vdk-button]:hover,\n [class*=\"vdk-button\"]:hover,\n [class*=\"vdk\"] [style*=\"cursor\"][style*=\"pointer\"]:hover,\n [id*=\"vdk\"] [style*=\"cursor\"][style*=\"pointer\"]:hover,\n [data-vdk-modal] [style*=\"cursor\"][style*=\"pointer\"]:hover {\n opacity: 0.5 !important;\n }\n \n /* Active states */\n [class*=\"vdk\"] button:active,\n [class*=\"vdk\"] [role=\"button\"]:active,\n [class*=\"vdk\"] [tabindex]:active,\n [id*=\"vdk\"] button:active,\n [id*=\"vdk\"] [role=\"button\"]:active,\n [id*=\"vdk\"] [tabindex]:active,\n [data-vdk-modal] button:active,\n [data-vdk-modal] [role=\"button\"]:active,\n [data-vdk-modal] [tabindex]:active,\n [data-vdk-source-card]:active,\n [class*=\"vdk-source-card\"]:active,\n [class*=\"source-card\"]:active,\n button[class*=\"vdk\"]:active,\n [data-vdk-button]:active,\n [class*=\"vdk-button\"]:active,\n [class*=\"vdk\"] [style*=\"cursor\"][style*=\"pointer\"]:active,\n [id*=\"vdk\"] [style*=\"cursor\"][style*=\"pointer\"]:active,\n [data-vdk-modal] [style*=\"cursor\"][style*=\"pointer\"]:active {\n opacity: 0.5 !important;\n }\n `;\n\n styleElement.textContent = cssRules;\n\n // Use MutationObserver to apply styles to dynamically added DAppKit elements\n if (typeof MutationObserver !== 'undefined') {\n const observer = new MutationObserver(() => {\n // Ensure dappkit modal always has pointer-events enabled\n const dappKitModals = document.querySelectorAll(\n 'vdk-modal, [data-vdk-modal], [id*=\"vdk-modal\"]',\n );\n for (const element of dappKitModals) {\n if (!(element instanceof HTMLElement)) continue;\n element.style.setProperty('pointer-events', 'all', 'important');\n }\n\n // Re-apply styles when DAppKit adds new elements\n const dappKitElements = document.querySelectorAll(\n '[data-vdk-source-card], [class*=\"vdk-source-card\"], [class*=\"source-card\"], [data-vdk-modal] button, [data-vdk-modal] [role=\"button\"]',\n );\n for (const element of dappKitElements) {\n if (!(element instanceof HTMLElement)) continue;\n element.style.setProperty('opacity', '1', 'important');\n element.style.setProperty(\n 'transition',\n 'opacity 0.2s ease',\n 'important',\n );\n }\n });\n\n // Observe the document body for DAppKit modal additions\n observer.observe(document.body, {\n childList: true,\n subtree: true,\n });\n\n // Cleanup observer after a delay (DAppKit modals are typically short-lived)\n setTimeout(() => {\n observer.disconnect();\n }, 60000); // Disconnect after 60 seconds\n }\n}\n\n/**\n * Apply Privy CSS variables to document body and inject backdrop filter + card styles\n */\nexport function applyPrivyCSSVariables(\n variables: Record<string, string>,\n backdropFilter?: string,\n cardBg?: string,\n cardElevatedBg?: string,\n buttonBaseColor?: string,\n buttonHoverColor?: string,\n buttonActiveColor?: string,\n borderColor?: string,\n): void {\n if (typeof document === 'undefined') return;\n\n const root = document.documentElement;\n Object.entries(variables).forEach(([key, value]) => {\n root.style.setProperty(key, value);\n });\n\n // Inject CSS for backdrop filters, card backgrounds, and button colors\n const styleId = 'vechain-kit-privy-styles';\n let styleElement = document.getElementById(styleId);\n\n if (!styleElement) {\n styleElement = document.createElement('style');\n styleElement.id = styleId;\n document.head.appendChild(styleElement);\n }\n\n const cssRules: string[] = [];\n\n // Apply backdrop filter to Privy modal containers\n if (backdropFilter) {\n cssRules.push(`\n [data-privy-dialog-overlay],\n [data-privy-dialog-content],\n .privy-dialog-overlay,\n .privy-dialog-content {\n backdrop-filter: ${backdropFilter} !important;\n -webkit-backdrop-filter: ${backdropFilter} !important;\n }\n `);\n }\n\n // Apply card backgrounds to Privy card/container elements\n // Target common Privy card selectors without affecting button hover states\n if (cardBg) {\n cssRules.push(`\n [data-privy-card],\n .privy-card,\n [class*=\"privy-card\"],\n [class*=\"privy-connect-wallet-card\"],\n [class*=\"privy-account-card\"] {\n background-color: ${cardBg} !important;\n }\n `);\n }\n\n if (cardElevatedBg) {\n cssRules.push(`\n [data-privy-card][data-elevated],\n .privy-card-elevated,\n [class*=\"privy-card\"][class*=\"elevated\"] {\n background-color: ${cardElevatedBg} !important;\n }\n `);\n }\n\n // Apply loginIn variant style to Privy login method buttons\n // Base: white (light) / transparent (dark)\n // Hover/Active: opacity: 0.5 (matching loginIn variant)\n if (buttonBaseColor) {\n const borderColorValue = borderColor || 'rgba(0, 0, 0, 0.1)';\n cssRules.push(`\n #headlessui-portal-root .login-method-button,\n #headlessui-portal-root [class*=\"login-method-button\"],\n .login-method-button {\n background-color: ${buttonBaseColor} !important;\n border: 1px solid ${borderColorValue} !important;\n }\n `);\n }\n\n // Apply hover state with opacity: 0.5 (matching loginIn variant)\n if (buttonHoverColor) {\n cssRules.push(`\n #headlessui-portal-root .login-method-button:hover,\n #headlessui-portal-root [class*=\"login-method-button\"]:hover,\n .login-method-button:hover {\n background-color: ${buttonHoverColor} !important;\n opacity: 0.5 !important;\n }\n `);\n }\n\n // Apply active state with opacity: 0.5 (matching loginIn variant)\n if (buttonActiveColor) {\n cssRules.push(`\n #headlessui-portal-root .login-method-button:active,\n #headlessui-portal-root [class*=\"login-method-button\"]:active,\n .login-method-button:active {\n background-color: ${buttonActiveColor} !important;\n opacity: 0.5 !important;\n }\n `);\n }\n\n if (cssRules.length > 0) {\n styleElement.textContent = cssRules.join('\\n');\n }\n}\n","import React, { ReactNode } from 'react';\nimport {\n QueryClient,\n QueryClientProvider,\n QueryClientContext,\n} from '@tanstack/react-query';\nimport { hashFn } from 'wagmi/query';\n\n// Singleton instance for internal QueryClient\nlet internalQueryClient: QueryClient | null = null;\n\n// Function to safely get the QueryClient\nexport function getOrCreateQueryClient(): QueryClient {\n if (!internalQueryClient) {\n internalQueryClient = new QueryClient({\n defaultOptions: {\n queries: {\n queryKeyHashFn: hashFn,\n retry: 0,\n staleTime: 30000,\n refetchOnWindowFocus: true,\n refetchOnMount: true,\n refetchOnReconnect: true,\n refetchInterval: false,\n refetchIntervalInBackground: false,\n },\n },\n });\n }\n return internalQueryClient;\n}\n\n// A wrapper component to ensure a QueryClientProvider exists\ninterface EnsureQueryClientProps {\n children: ReactNode;\n}\n\nexport const EnsureQueryClient = ({ children }: EnsureQueryClientProps) => {\n try {\n // Attempt to use the existing QueryClient context\n const existingQueryClient = React.useContext(QueryClientContext);\n\n if (existingQueryClient) {\n return <>{children}</>;\n }\n } catch (e) {\n // Handle any potential errors\n // eslint-disable-next-line no-console\n console.log(e);\n }\n\n // If no QueryClient exists or there was an error, provide one\n const queryClient = getOrCreateQueryClient();\n return (\n <QueryClientProvider client={queryClient}>\n {children}\n </QueryClientProvider>\n );\n};\n","import { ReactNode, useCallback, useState, lazy, Suspense } from 'react';\n// Import context and types from ModalContext to avoid circular dependencies\n// Note: ModalContext exports are made available through providers/index.ts\nimport { ModalContext, type AccountModalOptions } from './ModalContext';\n// Use local type alias to avoid conflict with components/AccountModal/Types\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype AccountModalContentTypes = any;\n// Import modal types from types/modal.ts to avoid circular dependency with components\nimport type {\n ConnectModalContentsTypes,\n UpgradeSmartAccountModalStyle,\n} from '../types/modal';\n// Use optional hook to handle missing DAppKitProvider during Suspense loading\nimport { useOptionalDAppKitWallet } from '../hooks/api/dappkit/useOptionalDAppKitWallet';\nimport { isBrowser } from '../utils/ssrUtils';\nimport { VechainKitThemeProvider } from './VechainKitThemeProvider';\n// Import from VeChainKitContext to avoid circular dependency with VeChainKitProvider\nimport { useVeChainKitConfig } from './VeChainKitContext';\n\n// Lazy load modal components to reduce initial bundle size (~500KB total)\n// Modals are only loaded when they are actually opened\nconst LazyConnectModal = lazy(() =>\n import('../components/ConnectModal').then((mod) => ({\n default: mod.ConnectModal,\n })),\n);\n\nconst LazyAccountModal = lazy(() =>\n import('../components/AccountModal').then((mod) => ({\n default: mod.AccountModal,\n })),\n);\n\nconst LazyUpgradeSmartAccountModal = lazy(() =>\n import('../components/UpgradeSmartAccountModal').then((mod) => ({\n default: mod.UpgradeSmartAccountModal,\n })),\n);\n\nexport const ModalProvider = ({ children }: { children: ReactNode }) => {\n const { darkMode, theme } = useVeChainKitConfig();\n const [isConnectModalOpen, setIsConnectModalOpen] = useState(false);\n const [connectModalContent, setConnectModalContent] =\n useState<ConnectModalContentsTypes>('main');\n const [connectModalPreventAutoClose, setConnectModalPreventAutoClose] =\n useState(false);\n const { setSource, connectV2 } = useOptionalDAppKitWallet();\n const openConnectModal = useCallback(\n (\n initialContent?: ConnectModalContentsTypes,\n preventAutoClose?: boolean,\n ) => {\n // If the user is in the veworld app, connect to the wallet\n if (\n isBrowser() &&\n window.vechain &&\n window.vechain.isInAppBrowser\n ) {\n setSource('veworld');\n connectV2(null);\n } else {\n // Always set the content - default to 'main' if not provided\n setConnectModalContent(initialContent ?? 'main');\n setConnectModalPreventAutoClose(preventAutoClose ?? false);\n setIsConnectModalOpen(true);\n }\n },\n [],\n );\n const closeConnectModal = useCallback(() => {\n setIsConnectModalOpen(false);\n // Reset content to main when modal closes\n setConnectModalContent('main');\n setConnectModalPreventAutoClose(false);\n }, []);\n\n const [isAccountModalOpen, setIsAccountModalOpen] = useState(false);\n const [isolatedView, setIsolatedView] = useState(false);\n const [accountModalContent, setAccountModalContent] =\n useState<AccountModalContentTypes>('main');\n\n const openAccountModal = useCallback(\n (content?: AccountModalContentTypes, options?: AccountModalOptions) => {\n setAccountModalContent(content ?? 'main');\n setIsolatedView(options?.isolatedView ?? false);\n setIsAccountModalOpen(true);\n },\n [],\n );\n const closeAccountModal = useCallback(() => {\n setIsAccountModalOpen(false);\n // Reset content to main when modal closes\n setAccountModalContent('main');\n // Reset isolatedView after modal close animation completes\n setTimeout(() => {\n setIsolatedView(false);\n }, 300);\n }, []);\n\n const [isTransactionModalOpen, setIsTransactionModalOpen] = useState(false);\n const openTransactionModal = useCallback(\n () => setIsTransactionModalOpen(true),\n [],\n );\n const closeTransactionModal = useCallback(\n () => setIsTransactionModalOpen(false),\n [],\n );\n\n const [isTransactionToastOpen, setIsTransactionToastOpen] = useState(false);\n const openTransactionToast = useCallback(\n () => setIsTransactionToastOpen(true),\n [],\n );\n const closeTransactionToast = useCallback(\n () => setIsTransactionToastOpen(false),\n [],\n );\n\n const [isUpgradeSmartAccountModalOpen, setIsUpgradeSmartAccountModalOpen] =\n useState(false);\n const [upgradeSmartAccountModalStyle, setUpgradeSmartAccountModalStyle] =\n useState<UpgradeSmartAccountModalStyle | undefined>(undefined);\n const openUpgradeSmartAccountModal = useCallback(\n (style?: UpgradeSmartAccountModalStyle) => {\n setUpgradeSmartAccountModalStyle(style);\n setIsUpgradeSmartAccountModalOpen(true);\n },\n [],\n );\n const closeUpgradeSmartAccountModal = useCallback(\n () => setIsUpgradeSmartAccountModalOpen(false),\n [],\n );\n\n return (\n <ModalContext.Provider\n value={{\n openConnectModal,\n closeConnectModal,\n isConnectModalOpen,\n connectModalContent,\n setConnectModalContent,\n connectModalPreventAutoClose,\n setConnectModalPreventAutoClose,\n openAccountModal,\n closeAccountModal,\n isAccountModalOpen,\n setAccountModalContent,\n accountModalContent,\n isolatedView,\n openTransactionModal,\n closeTransactionModal,\n isTransactionModalOpen,\n openTransactionToast,\n closeTransactionToast,\n isTransactionToastOpen,\n openUpgradeSmartAccountModal,\n closeUpgradeSmartAccountModal,\n isUpgradeSmartAccountModalOpen,\n }}\n >\n {children}\n <VechainKitThemeProvider darkMode={darkMode} theme={theme}>\n {/* Lazy-load modals only when they are opened to reduce initial bundle size */}\n {isConnectModalOpen && (\n <Suspense fallback={null}>\n <LazyConnectModal\n isOpen={isConnectModalOpen}\n onClose={closeConnectModal}\n initialContent={connectModalContent}\n preventAutoClose={connectModalPreventAutoClose}\n />\n </Suspense>\n )}\n {isAccountModalOpen && (\n <Suspense fallback={null}>\n <LazyAccountModal\n isOpen={isAccountModalOpen}\n onClose={closeAccountModal}\n initialContent={accountModalContent}\n />\n </Suspense>\n )}\n {isUpgradeSmartAccountModalOpen && (\n <Suspense fallback={null}>\n <LazyUpgradeSmartAccountModal\n isOpen={isUpgradeSmartAccountModalOpen}\n onClose={closeUpgradeSmartAccountModal}\n style={upgradeSmartAccountModalStyle}\n />\n </Suspense>\n )}\n </VechainKitThemeProvider>\n </ModalContext.Provider>\n );\n};\n","import { getConfig } from '../config';\nimport { NETWORK_TYPE } from '../config/network';\nimport type { CURRENCY } from '../types';\nimport { isValidUrl } from '../utils';\nimport { getLocalStorageItem, setLocalStorageItem } from '../utils/ssrUtils';\nimport { initializeI18n } from '../utils/i18n';\nimport type {\n LoginMethodOrderOption,\n NonEmptyArray,\n} from '@privy-io/react-auth';\nimport {\n useEffect,\n useMemo,\n useState,\n useRef,\n lazy,\n Suspense,\n} from 'react';\n// Import context and types from dedicated context file to break circular dependencies\n// Hooks should import useVeChainKitConfig from VeChainKitContext.tsx, not from this file\nimport { VeChainKitContext, type VechainKitProviderProps } from './VeChainKitContext';\nimport {\n getDefaultTokens,\n convertThemeConfigToTokens,\n mergeTokens,\n} from '../theme/tokens';\n\n// Re-export context, hook and types from VeChainKitContext for backward compatibility\n// NOTE: Hooks should prefer importing from './VeChainKitContext' to avoid circular dependencies\nexport {\n VeChainKitContext,\n useVeChainKitConfig,\n type VeChainKitConfig,\n type VechainKitProviderProps,\n type LoginMethodOrder,\n} from './VeChainKitContext';\nimport {\n generateDAppKitCSSVariables,\n generatePrivyCSSVariables,\n applyPrivyCSSVariables,\n applyDAppKitButtonStyles,\n improvePrivyReadability,\n} from '../utils/cssVariables';\n\nimport i18n from '../../i18n';\nimport { EnsureQueryClient } from './EnsureQueryClient';\nimport { LegalDocumentsProvider } from './LegalDocumentsProvider';\nimport { ModalProvider } from './ModalProvider';\nimport {\n VECHAIN_KIT_STORAGE_KEYS,\n DEFAULT_PRIVY_ECOSYSTEM_APPS,\n getGenericDelegatorUrl,\n} from '../utils/constants';\nimport { PrivyWalletProvider } from './PrivyWalletProvider';\nimport { ThorProvider } from './ThorProvider';\n\n// Lazy load PrivyCrossAppProvider only when ecosystem login is enabled to reduce bundle size (~150KB wagmi)\nconst LazyPrivyCrossAppProvider = lazy(() =>\n import('./PrivyCrossAppProvider').then((mod) => ({\n default: mod.PrivyCrossAppProvider,\n })),\n);\n\n// Lazy load ReactQueryDevtools only in development to reduce production bundle size (~100KB)\nconst ReactQueryDevtools =\n process.env.NODE_ENV === 'development'\n ? lazy(() =>\n import('@tanstack/react-query-devtools').then((mod) => ({\n default: mod.ReactQueryDevtools,\n })),\n )\n : () => null;\n\n// Lazy load PrivyProvider only when privy is configured to reduce bundle size (~500KB)\nconst LazyPrivyProvider = lazy(() =>\n import('@privy-io/react-auth').then((mod) => ({\n default: mod.PrivyProvider,\n })),\n);\n\n// Lazy load DAppKitProvider only when dappKit is configured to reduce bundle size (~200KB)\nconst LazyDAppKitProvider = lazy(() =>\n import('@vechain/dapp-kit-react').then((mod) => ({\n default: mod.DAppKitProvider,\n })),\n);\n\n// Re-export types from ../types for backward compatibility\n// These types are now defined in types/types.ts to avoid circular dependencies\nexport type { LegalDocument, LegalDocumentOptions } from '../types';\n\nconst validateConfig = (\n props: Omit<VechainKitProviderProps, 'queryClient'>,\n) => {\n const errors: string[] = [];\n\n const validatedProps = { ...props };\n\n // NOTE: dappKit is now optional - if not provided, DAppKitProvider will not be loaded\n // This allows apps that only use Privy to avoid bundling @vechain/dapp-kit-react\n // For backward compatibility, apps that explicitly pass dappKit: {} will get default wallet config\n\n // Check if fee delegation is required based on conditions\n const requiresFeeDelegation =\n validatedProps.privy !== undefined ||\n validatedProps.loginMethods?.some(\n (method) =>\n method.method === 'vechain' || method.method === 'ecosystem',\n );\n\n // Validate fee delegation\n if (requiresFeeDelegation) {\n if (!validatedProps.feeDelegation) {\n validatedProps.feeDelegation = {\n genericDelegatorUrl: getGenericDelegatorUrl(),\n };\n } else {\n if (\n !validatedProps.feeDelegation.delegatorUrl &&\n !validatedProps.feeDelegation.genericDelegatorUrl\n ) {\n validatedProps.feeDelegation.genericDelegatorUrl =\n getGenericDelegatorUrl();\n }\n }\n }\n\n // Validate network - always ensure we have a valid network configuration\n if (!validatedProps.network || !validatedProps.network.type) {\n validatedProps.network = {\n type: 'main',\n };\n } else {\n const networkType = validatedProps.network.type;\n // Validate and narrow the network type\n if (!['main', 'test', 'solo'].includes(networkType)) {\n // Provide helpful error with the invalid value\n errors.push('network.type must be either \"main\", \"test\" or \"solo\"');\n }\n }\n\n // Set default login methods if not provided\n if (!validatedProps.loginMethods) {\n validatedProps.loginMethods = [\n { method: 'vechain', gridColumn: 4 },\n { method: 'ecosystem', gridColumn: 4 },\n { method: 'dappkit', gridColumn: 4 },\n ];\n }\n\n // Validate login methods if Privy is not configured\n if (validatedProps.loginMethods) {\n if (!validatedProps.privy) {\n const invalidMethods = validatedProps.loginMethods.filter(\n (method) =>\n ['email', 'google', 'passkey', 'more'].includes(\n method.method,\n ),\n );\n\n if (invalidMethods.length > 0) {\n errors.push(\n `Login methods ${invalidMethods\n .map((m) => `\"${m.method}\"`)\n .join(', ')} require Privy configuration. ` +\n `Please either remove these methods or configure the privy prop.`,\n );\n }\n }\n }\n\n if (validatedProps?.legalDocuments) {\n if (validatedProps.legalDocuments.termsAndConditions) {\n validatedProps.legalDocuments.termsAndConditions.forEach((term) => {\n if (!isValidUrl(term.url)) {\n errors.push(\n `legalDocuments.termsAndConditions.url is invalid: ${term.url}`,\n );\n }\n });\n }\n if (validatedProps.legalDocuments.privacyPolicy) {\n validatedProps.legalDocuments.privacyPolicy.forEach((term) => {\n if (!isValidUrl(term.url)) {\n errors.push(\n `legalDocuments.privacyPolicy.url is invalid: ${term.url}`,\n );\n }\n });\n }\n if (validatedProps.legalDocuments.cookiePolicy) {\n validatedProps.legalDocuments.cookiePolicy.forEach((term) => {\n if (!isValidUrl(term.url)) {\n errors.push(\n `legalDocuments.cookiePolicy.url is invalid: ${term.url}`,\n );\n }\n });\n }\n }\n\n if (errors.length > 0) {\n throw new Error(\n 'VeChainKit Configuration Error:\\n' + errors.join('\\n'),\n );\n }\n\n return validatedProps;\n};\n\n/**\n * Provider to wrap the application with Privy and DAppKit\n */\nconst CURRENCY_STORAGE_KEY = 'vechain_kit_currency';\n\nexport const VeChainKitProvider = (\n props: Omit<VechainKitProviderProps, 'queryClient'>,\n) => {\n // Validate all configurations at the start\n const validatedProps = validateConfig(props);\n const {\n children,\n headless = false,\n privy,\n feeDelegation,\n dappKit: _dappKit,\n loginModalUI,\n loginMethods,\n darkMode = false,\n i18n: i18nConfig,\n language = 'en',\n network: _network,\n allowCustomTokens,\n legalDocuments,\n defaultCurrency = 'usd',\n theme: customTheme,\n onLanguageChange,\n onCurrencyChange,\n } = validatedProps;\n\n // After validation, network and dappKit are guaranteed to be defined\n // Cast the network type to NETWORK_TYPE since validation ensures it's valid\n const networkType = (_network?.type ?? 'main') as NETWORK_TYPE;\n\n //To avoid this fallback across the codebase, do it globally in the provider\n const nodeUrl = _network?.nodeUrl ?? getConfig(networkType).nodeUrl;\n\n const network = {\n ..._network,\n type: networkType,\n nodeUrl,\n };\n\n // DAppKit config - now optional; if not provided, DAppKitProvider won't be rendered\n // Apps using only Privy can omit this to reduce bundle size\n const dappKit = _dappKit;\n const isDAppKitConfigured = !!_dappKit;\n\n // Initialize current language from i18n or prop\n const [currentLanguage, setCurrentLanguageState] = useState<string>(() => {\n if (typeof window !== 'undefined') {\n const stored = getLocalStorageItem('i18nextLng');\n return stored || language;\n }\n return language;\n });\n\n // Initialize current currency from localStorage or prop\n const [currentCurrency, setCurrentCurrencyState] = useState<CURRENCY>(\n () => {\n try {\n const stored = getLocalStorageItem(CURRENCY_STORAGE_KEY);\n return (stored as CURRENCY) || defaultCurrency;\n } catch {\n return defaultCurrency;\n }\n },\n );\n\n // Track if we're updating from prop to avoid loops\n const isUpdatingFromPropRef = useRef(false);\n const isUpdatingCurrencyFromPropRef = useRef(false);\n\n // Remove the validateLoginMethods call since it's now handled in validateConfig\n const validatedLoginMethods = loginMethods;\n\n const allowedEcosystemApps = useMemo(() => {\n const userEcosystemMethods = validatedLoginMethods?.find(\n (method) => method.method === 'ecosystem',\n );\n return (\n userEcosystemMethods?.allowedApps ??\n DEFAULT_PRIVY_ECOSYSTEM_APPS.map((app) => app.id)\n );\n }, [validatedLoginMethods]);\n\n // Check if Privy is configured\n const isPrivyConfigured = !!privy;\n\n // Check if ecosystem login is enabled in loginMethods\n // This determines whether we need to load PrivyCrossAppProvider/wagmi\n const isEcosystemLoginEnabled = useMemo(() => {\n return validatedLoginMethods?.some(\n (method) => method.method === 'ecosystem' || method.method === 'vechain',\n ) ?? false;\n }, [validatedLoginMethods]);\n\n // Initialize i18n with stored language or prop, and merge translations\n useEffect(() => {\n // Initialize translations from VeChainKit\n initializeI18n(i18n);\n\n if (i18nConfig) {\n // Add custom translations from the app if provided\n Object.keys(i18nConfig).forEach((lang) => {\n i18n.addResourceBundle(\n lang,\n 'translation',\n i18nConfig[lang],\n true,\n true,\n );\n });\n }\n\n // Initialize i18n with stored language or currentLanguage state\n // This ensures stored preferences are respected on page refresh\n const storedLanguage =\n typeof window !== 'undefined'\n ? getLocalStorageItem('i18nextLng')\n : null;\n const initialLanguage = storedLanguage || currentLanguage;\n\n if (initialLanguage && i18n.language !== initialLanguage) {\n isUpdatingFromPropRef.current = true;\n i18n.changeLanguage(initialLanguage);\n if (initialLanguage !== currentLanguage) {\n setCurrentLanguageState(initialLanguage);\n }\n isUpdatingFromPropRef.current = false;\n }\n }, []); // Only run once on mount\n\n // Sync language prop changes to i18n and state (but only if no stored value exists)\n useEffect(() => {\n // Skip on initial mount - let the initialization effect handle it\n const storedLanguage =\n typeof window !== 'undefined'\n ? getLocalStorageItem('i18nextLng')\n : null;\n\n // Only sync prop if there's no stored preference and prop differs from current\n if (language && !storedLanguage && language !== currentLanguage) {\n isUpdatingFromPropRef.current = true;\n i18n.changeLanguage(language);\n setCurrentLanguageState(language);\n isUpdatingFromPropRef.current = false;\n }\n }, [language, currentLanguage]);\n\n // Listen to i18n language changes (from kit settings)\n useEffect(() => {\n const handleLanguageChanged = (lng: string) => {\n if (!isUpdatingFromPropRef.current && lng !== currentLanguage) {\n setCurrentLanguageState(lng);\n onLanguageChange?.(lng);\n }\n };\n\n i18n.on('languageChanged', handleLanguageChanged);\n\n return () => {\n i18n.off('languageChanged', handleLanguageChanged);\n };\n }, [currentLanguage, onLanguageChange]);\n\n // Sync currency prop changes to state (but only if no stored value exists)\n useEffect(() => {\n const stored = getLocalStorageItem(CURRENCY_STORAGE_KEY);\n\n // Only sync prop if there's no stored preference and prop differs from current\n if (defaultCurrency && !stored && defaultCurrency !== currentCurrency) {\n isUpdatingCurrencyFromPropRef.current = true;\n setCurrentCurrencyState(defaultCurrency);\n setLocalStorageItem(CURRENCY_STORAGE_KEY, defaultCurrency);\n isUpdatingCurrencyFromPropRef.current = false;\n }\n }, [defaultCurrency, currentCurrency]);\n\n // Listen to currency localStorage changes (from kit settings)\n useEffect(() => {\n const checkCurrencyChange = () => {\n try {\n const stored = getLocalStorageItem(CURRENCY_STORAGE_KEY);\n if (\n stored &&\n stored !== currentCurrency &&\n !isUpdatingCurrencyFromPropRef.current\n ) {\n const newCurrency = stored as CURRENCY;\n setCurrentCurrencyState(newCurrency);\n onCurrencyChange?.(newCurrency);\n }\n } catch {\n // Ignore errors\n }\n };\n\n // Check on mount\n checkCurrencyChange();\n\n // Listen to storage events (for cross-tab sync)\n const handleStorageChange = (e: StorageEvent) => {\n if (e.key === CURRENCY_STORAGE_KEY && e.newValue) {\n checkCurrencyChange();\n }\n };\n\n window.addEventListener('storage', handleStorageChange);\n\n // Poll for changes (in case storage event doesn't fire)\n const interval = setInterval(checkCurrencyChange, 500);\n\n return () => {\n window.removeEventListener('storage', handleStorageChange);\n clearInterval(interval);\n };\n }, [currentCurrency, onCurrencyChange]);\n\n // Functions to set language/currency from host app\n const setLanguage = (lang: string) => {\n isUpdatingFromPropRef.current = true;\n i18n.changeLanguage(lang);\n setCurrentLanguageState(lang);\n isUpdatingFromPropRef.current = false;\n };\n\n const setCurrency = (currency: CURRENCY) => {\n isUpdatingCurrencyFromPropRef.current = true;\n setCurrentCurrencyState(currency);\n setLocalStorageItem(CURRENCY_STORAGE_KEY, currency);\n isUpdatingCurrencyFromPropRef.current = false;\n };\n\n useEffect(() => {\n setLocalStorageItem(VECHAIN_KIT_STORAGE_KEYS.NETWORK, networkType);\n }, [networkType]);\n\n // Generate tokens from custom theme config\n const tokens = useMemo(() => {\n const defaultTokens = getDefaultTokens(darkMode);\n const customTokens = convertThemeConfigToTokens(customTheme, darkMode);\n return mergeTokens(defaultTokens, customTokens);\n }, [customTheme, darkMode]);\n\n // Generate CSS variables for DAppKit and Privy\n const dappKitThemeVariables = useMemo(\n () => generateDAppKitCSSVariables(tokens, darkMode),\n [tokens, darkMode],\n );\n\n const privyCSSVariables = useMemo(\n () => generatePrivyCSSVariables(tokens, darkMode),\n [tokens, darkMode],\n );\n\n // Apply Privy CSS variables to document and inject backdrop filter + card styles\n useEffect(() => {\n // Prepare card backgrounds with readability improvements\n const privyCardBg = improvePrivyReadability(\n tokens.colors.background.card,\n darkMode,\n );\n const privyCardElevatedBg = improvePrivyReadability(\n tokens.colors.background.cardElevated,\n darkMode,\n );\n // Use loginIn variant style: white (light) / transparent (dark) background\n const privyButtonBaseBg = darkMode ? 'transparent' : '#ffffff';\n const privyButtonHoverBg = darkMode ? 'transparent' : '#ffffff';\n const privyButtonActiveBg = darkMode ? 'transparent' : '#ffffff';\n\n applyPrivyCSSVariables(\n privyCSSVariables,\n tokens.effects.backdropFilter.modal,\n privyCardBg,\n privyCardElevatedBg,\n privyButtonBaseBg,\n privyButtonHoverBg,\n privyButtonActiveBg,\n tokens.colors.border.default,\n );\n }, [\n privyCSSVariables,\n tokens.effects.backdropFilter.modal,\n tokens.colors.background.card,\n tokens.colors.background.cardElevated,\n tokens.colors.border.default,\n darkMode,\n ]);\n\n // Apply DAppKit button styles (hover opacity matching loginIn variant)\n useEffect(() => {\n if (isDAppKitConfigured) {\n applyDAppKitButtonStyles();\n }\n }, [isDAppKitConfigured]);\n\n // Core content that contains modals and legal documents\n // In headless mode, skip ModalProvider to avoid loading Chakra UI (~300KB)\n const coreContent = isPrivyConfigured ? (\n <PrivyWalletProvider\n nodeUrl={network.nodeUrl}\n delegatorUrl={\n feeDelegation?.delegatorUrl ??\n feeDelegation?.genericDelegatorUrl\n }\n delegateAllTransactions={\n feeDelegation?.delegateAllTransactions ?? false\n }\n genericDelegator={\n !feeDelegation?.delegatorUrl &&\n feeDelegation?.genericDelegatorUrl\n ? true\n : false\n }\n >\n {headless ? (\n <LegalDocumentsProvider>{children}</LegalDocumentsProvider>\n ) : (\n <ModalProvider>\n <LegalDocumentsProvider>{children}</LegalDocumentsProvider>\n </ModalProvider>\n )}\n </PrivyWalletProvider>\n ) : headless ? (\n <LegalDocumentsProvider>{children}</LegalDocumentsProvider>\n ) : (\n <ModalProvider>\n <LegalDocumentsProvider>{children}</LegalDocumentsProvider>\n </ModalProvider>\n );\n\n // Inner content wrapped by DAppKitProvider or ThorProvider (fallback)\n const innerContent = isDAppKitConfigured ? (\n <Suspense fallback={<ThorProvider nodeUrl={network.nodeUrl}>{coreContent}</ThorProvider>}>\n <LazyDAppKitProvider\n node={network.nodeUrl}\n alwaysShowConnect={true}\n v2Api={{\n enabled: dappKit?.v2Api?.enabled ?? true, //defaults to true\n external: dappKit?.v2Api?.external ?? false, //defaults to false\n }}\n language={currentLanguage}\n logLevel={dappKit?.logLevel}\n modalParent={dappKit?.modalParent}\n onSourceClick={dappKit?.onSourceClick}\n usePersistence={dappKit?.usePersistence ?? true}\n allowedWallets={dappKit?.allowedWallets}\n walletConnectOptions={dappKit?.walletConnectOptions}\n themeMode={darkMode ? 'DARK' : 'LIGHT'}\n themeVariables={\n dappKit?.themeVariables\n ? {\n ...dappKitThemeVariables,\n ...dappKit.themeVariables,\n }\n : dappKitThemeVariables\n }\n >\n {coreContent}\n </LazyDAppKitProvider>\n </Suspense>\n ) : (\n // When DAppKit is not configured, use ThorProvider for Thor client access\n <ThorProvider nodeUrl={network.nodeUrl}>{coreContent}</ThorProvider>\n );\n\n // Conditionally wrap with PrivyProvider only when privy is configured\n const privyWrappedContent = isPrivyConfigured ? (\n <Suspense fallback={innerContent}>\n <LazyPrivyProvider\n appId={privy.appId}\n clientId={privy.clientId}\n config={{\n loginMethodsAndOrder: {\n primary: (privy.loginMethods.slice(0, 4) ??\n []) as NonEmptyArray<LoginMethodOrderOption>,\n overflow: (privy.loginMethods.slice(4) ??\n []) as Array<LoginMethodOrderOption>,\n },\n externalWallets: {\n walletConnect: {\n enabled: false,\n },\n },\n appearance: {\n theme: darkMode ? 'dark' : 'light',\n accentColor:\n privy.appearance.accentColor ??\n (tokens.buttons.primaryButton.bg?.startsWith('#')\n ? (tokens.buttons.primaryButton\n .bg as `#${string}`)\n : darkMode\n ? '#3182CE'\n : '#2B6CB0'),\n loginMessage: privy.appearance.loginMessage,\n logo: privy.appearance.logo,\n },\n embeddedWallets: {\n createOnLogin:\n privy.embeddedWallets?.createOnLogin ?? 'all-users',\n },\n passkeys: {\n shouldUnlinkOnUnenrollMfa: false,\n },\n }}\n >\n {innerContent}\n </LazyPrivyProvider>\n </Suspense>\n ) : (\n innerContent\n );\n\n // Context value for the provider\n const contextValue = {\n privy,\n privyEcosystemAppIDS: allowedEcosystemApps,\n feeDelegation,\n dappKit,\n loginModalUI,\n loginMethods: validatedLoginMethods,\n darkMode,\n headless,\n i18n: i18nConfig,\n currentLanguage,\n network,\n allowCustomTokens,\n legalDocuments,\n currentCurrency,\n theme: customTheme,\n setLanguage,\n setCurrency,\n };\n\n // Core content without ecosystem provider\n const coreProviderContent = (\n <VeChainKitContext.Provider value={contextValue}>\n {privyWrappedContent}\n </VeChainKitContext.Provider>\n );\n\n // Conditionally wrap with PrivyCrossAppProvider only when ecosystem login is enabled\n // This avoids bundling wagmi (~150KB) for apps that don't use ecosystem login\n const ecosystemWrappedContent = isEcosystemLoginEnabled ? (\n <Suspense fallback={coreProviderContent}>\n <LazyPrivyCrossAppProvider privyEcosystemAppIDS={allowedEcosystemApps}>\n {coreProviderContent}\n </LazyPrivyCrossAppProvider>\n </Suspense>\n ) : (\n coreProviderContent\n );\n\n return (\n <EnsureQueryClient>\n {process.env.NODE_ENV === 'development' && (\n <Suspense fallback={null}>\n <ReactQueryDevtools initialIsOpen={false} />\n </Suspense>\n )}\n {ecosystemWrappedContent}\n </EnsureQueryClient>\n );\n};\n","/**\n * VeChainKitCoreProvider - Minimal provider for advanced users\n *\n * This provider provides only the essential context + React Query setup,\n * without bundling any heavy dependencies like:\n * - Privy (~500KB)\n * - DAppKit (~200KB)\n * - Wagmi (~150KB)\n * - Chakra UI (~300KB)\n *\n * Use this provider when you want maximum control and are building:\n * - Custom authentication flows\n * - Headless applications\n * - Server-side applications\n * - Custom UI with your own components\n *\n * Bundle size: ~60KB (compared to ~1.7MB for full provider)\n *\n * @example\n * ```tsx\n * import { VeChainKitCoreProvider } from '@vechain/vechain-kit/providers';\n *\n * function App() {\n * return (\n * <VeChainKitCoreProvider network={{ type: 'main' }}>\n * <CustomAuthProvider>\n * <MyApp />\n * </CustomAuthProvider>\n * </VeChainKitCoreProvider>\n * );\n * }\n * ```\n */\n\nimport React, { ReactNode, useMemo, useState, useEffect, useRef } from 'react';\nimport { getConfig } from '../config';\nimport { NETWORK_TYPE } from '../config/network';\nimport type { CURRENCY } from '../types';\nimport { getLocalStorageItem, setLocalStorageItem } from '../utils/ssrUtils';\nimport { initializeI18n } from '../utils/i18n';\nimport {\n VeChainKitContext,\n type VeChainKitConfig,\n} from './VeChainKitContext';\nimport { EnsureQueryClient } from './EnsureQueryClient';\nimport { ThorProvider } from './ThorProvider';\nimport { VECHAIN_KIT_STORAGE_KEYS } from '../utils/constants';\nimport type { Certificate, CertificateData } from '@vechain/sdk-core';\nimport i18n from '../../i18n';\n\n/**\n * Props for VeChainKitCoreProvider\n * Simplified compared to VeChainKitProvider - no Privy, DAppKit, Chakra UI options\n */\nexport interface VeChainKitCoreProviderProps {\n children: ReactNode;\n /**\n * Network configuration\n * @default { type: 'main' }\n */\n network?: {\n type?: string; // Accepts any string, validated internally to 'main' | 'test' | 'solo'\n nodeUrl?: string;\n requireCertificate?: boolean;\n connectionCertificate?: {\n message?: Certificate;\n options?: CertificateData;\n };\n };\n /**\n * Initial language for i18n\n * @default 'en'\n */\n language?: string;\n /**\n * Enable dark mode for theming context (even without Chakra UI)\n * @default false\n */\n darkMode?: boolean;\n /**\n * Default currency\n * @default 'usd'\n */\n defaultCurrency?: CURRENCY;\n /**\n * Callback when language changes\n */\n onLanguageChange?: (language: string) => void;\n /**\n * Callback when currency changes\n */\n onCurrencyChange?: (currency: CURRENCY) => void;\n}\n\nconst CURRENCY_STORAGE_KEY = 'vechain_kit_currency';\n\n/**\n * Validates the network configuration\n */\nconst validateNetwork = (network?: VeChainKitCoreProviderProps['network']) => {\n if (!network || !network.type) {\n return { type: 'main' as NETWORK_TYPE };\n }\n\n const networkType = network.type;\n if (!['main', 'test', 'solo'].includes(networkType)) {\n throw new Error(\n `VeChainKitCoreProvider: network.type must be \"main\", \"test\", or \"solo\". Got: \"${networkType}\"`,\n );\n }\n\n return { ...network, type: networkType as NETWORK_TYPE };\n};\n\n/**\n * Minimal provider for VeChain Kit - includes only:\n * - VeChainKitContext (configuration)\n * - React Query (QueryClientProvider)\n * - ThorProvider (Thor client for blockchain operations)\n *\n * Does NOT include:\n * - Privy (social login, embedded wallets)\n * - DAppKit (VeWorld, Sync2, WalletConnect)\n * - Wagmi (ecosystem cross-app connections)\n * - Chakra UI (styling, modals)\n * - ModalProvider (connect/account modals)\n * - LegalDocumentsProvider (terms & privacy)\n *\n * Hooks that require these missing providers will:\n * - Return null/undefined for data\n * - Throw helpful errors when actions are attempted\n * - Work gracefully in read-only scenarios (e.g., balance queries)\n */\nexport const VeChainKitCoreProvider = ({\n children,\n network: _network,\n language = 'en',\n darkMode = false,\n defaultCurrency = 'usd',\n onLanguageChange,\n onCurrencyChange,\n}: VeChainKitCoreProviderProps) => {\n // Validate network configuration\n const validatedNetwork = validateNetwork(_network);\n const networkType = validatedNetwork.type;\n\n // Get node URL from config if not provided\n const nodeUrl = _network?.nodeUrl ?? getConfig(networkType).nodeUrl;\n\n const network = {\n ...validatedNetwork,\n nodeUrl,\n };\n\n // Initialize current language from i18n or prop\n const [currentLanguage, setCurrentLanguageState] = useState<string>(() => {\n if (typeof window !== 'undefined') {\n const stored = getLocalStorageItem('i18nextLng');\n return stored || language;\n }\n return language;\n });\n\n // Initialize current currency from localStorage or prop\n const [currentCurrency, setCurrentCurrencyState] = useState<CURRENCY>(\n () => {\n try {\n const stored = getLocalStorageItem(CURRENCY_STORAGE_KEY);\n return (stored as CURRENCY) || defaultCurrency;\n } catch {\n return defaultCurrency;\n }\n },\n );\n\n // Track if we're updating from prop to avoid loops\n const isUpdatingFromPropRef = useRef(false);\n const isUpdatingCurrencyFromPropRef = useRef(false);\n\n // Initialize i18n\n useEffect(() => {\n initializeI18n(i18n);\n\n const storedLanguage =\n typeof window !== 'undefined'\n ? getLocalStorageItem('i18nextLng')\n : null;\n const initialLanguage = storedLanguage || currentLanguage;\n\n if (initialLanguage && i18n.language !== initialLanguage) {\n isUpdatingFromPropRef.current = true;\n i18n.changeLanguage(initialLanguage);\n if (initialLanguage !== currentLanguage) {\n setCurrentLanguageState(initialLanguage);\n }\n isUpdatingFromPropRef.current = false;\n }\n }, []);\n\n // Sync language prop changes\n useEffect(() => {\n const storedLanguage =\n typeof window !== 'undefined'\n ? getLocalStorageItem('i18nextLng')\n : null;\n\n if (language && !storedLanguage && language !== currentLanguage) {\n isUpdatingFromPropRef.current = true;\n i18n.changeLanguage(language);\n setCurrentLanguageState(language);\n isUpdatingFromPropRef.current = false;\n }\n }, [language, currentLanguage]);\n\n // Listen to i18n language changes\n useEffect(() => {\n const handleLanguageChanged = (lng: string) => {\n if (!isUpdatingFromPropRef.current && lng !== currentLanguage) {\n setCurrentLanguageState(lng);\n onLanguageChange?.(lng);\n }\n };\n\n i18n.on('languageChanged', handleLanguageChanged);\n\n return () => {\n i18n.off('languageChanged', handleLanguageChanged);\n };\n }, [currentLanguage, onLanguageChange]);\n\n // Sync currency prop changes\n useEffect(() => {\n const stored = getLocalStorageItem(CURRENCY_STORAGE_KEY);\n\n if (defaultCurrency && !stored && defaultCurrency !== currentCurrency) {\n isUpdatingCurrencyFromPropRef.current = true;\n setCurrentCurrencyState(defaultCurrency);\n setLocalStorageItem(CURRENCY_STORAGE_KEY, defaultCurrency);\n isUpdatingCurrencyFromPropRef.current = false;\n }\n }, [defaultCurrency, currentCurrency]);\n\n // Listen to currency localStorage changes\n useEffect(() => {\n const checkCurrencyChange = () => {\n try {\n const stored = getLocalStorageItem(CURRENCY_STORAGE_KEY);\n if (\n stored &&\n stored !== currentCurrency &&\n !isUpdatingCurrencyFromPropRef.current\n ) {\n const newCurrency = stored as CURRENCY;\n setCurrentCurrencyState(newCurrency);\n onCurrencyChange?.(newCurrency);\n }\n } catch {\n // Ignore errors\n }\n };\n\n checkCurrencyChange();\n\n const handleStorageChange = (e: StorageEvent) => {\n if (e.key === CURRENCY_STORAGE_KEY && e.newValue) {\n checkCurrencyChange();\n }\n };\n\n window.addEventListener('storage', handleStorageChange);\n const interval = setInterval(checkCurrencyChange, 500);\n\n return () => {\n window.removeEventListener('storage', handleStorageChange);\n clearInterval(interval);\n };\n }, [currentCurrency, onCurrencyChange]);\n\n // Functions to set language/currency\n const setLanguage = (lang: string) => {\n isUpdatingFromPropRef.current = true;\n i18n.changeLanguage(lang);\n setCurrentLanguageState(lang);\n isUpdatingFromPropRef.current = false;\n };\n\n const setCurrency = (currency: CURRENCY) => {\n isUpdatingCurrencyFromPropRef.current = true;\n setCurrentCurrencyState(currency);\n setLocalStorageItem(CURRENCY_STORAGE_KEY, currency);\n isUpdatingCurrencyFromPropRef.current = false;\n };\n\n // Store network type\n useEffect(() => {\n setLocalStorageItem(VECHAIN_KIT_STORAGE_KEYS.NETWORK, networkType);\n }, [networkType]);\n\n // Context value - minimal configuration\n const contextValue = useMemo<VeChainKitConfig>(\n () => ({\n // No Privy configuration\n privy: undefined,\n privyEcosystemAppIDS: [],\n // No fee delegation (requires Privy for smart accounts)\n feeDelegation: undefined,\n // No DAppKit configuration\n dappKit: undefined,\n // No login modal UI\n loginModalUI: undefined,\n // No login methods (manual auth only)\n loginMethods: undefined,\n // Theme settings\n darkMode,\n // Always headless in core provider (no Chakra UI)\n headless: true,\n // No i18n config overrides\n i18n: undefined,\n // Network configuration\n network,\n // Current language\n currentLanguage,\n // No custom tokens (requires DAppKit)\n allowCustomTokens: false,\n // No legal documents (requires LegalDocumentsProvider)\n legalDocuments: undefined,\n // Currency settings\n currentCurrency,\n // No custom theme\n theme: undefined,\n // Language/currency setters\n setLanguage,\n setCurrency,\n }),\n [darkMode, network, currentLanguage, currentCurrency],\n );\n\n return (\n <EnsureQueryClient>\n <VeChainKitContext.Provider value={contextValue}>\n <ThorProvider nodeUrl={nodeUrl}>{children}</ThorProvider>\n </VeChainKitContext.Provider>\n </EnsureQueryClient>\n );\n};\n\n/**\n * Re-export useVeChainKitConfig for convenience\n */\nexport { useVeChainKitConfig } from './VeChainKitContext';\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ const e=e=>{try{return typeof window>`u`?null:localStorage.getItem(e)}catch(t){return console.warn(`Error accessing localStorage for key "${e}":`,t),null}},t=(e,t)=>{try{if(typeof window>`u`)return;localStorage.setItem(e,t)}catch(t){console.warn(`Error setting localStorage for key "${e}":`,t)}},n=e=>{try{if(typeof window>`u`)return;localStorage.removeItem(e)}catch(t){console.warn(`Error removing localStorage for key "${e}":`,t)}},r=()=>{try{return typeof document<`u`?document.title:``}catch{return``}},i=()=>{try{return typeof window<`u`&&window.location?window.location.origin:``}catch{return``}},a=()=>typeof window<`u`&&typeof document<`u`,o=(e,t,n)=>{a()&&window.open(e,t,n)},s=e=>typeof document<`u`?document.querySelector(e):null,c=()=>typeof navigator<`u`,l=()=>c()&&navigator.onLine,u=async e=>{try{return c()&&navigator.clipboard?(await navigator.clipboard.writeText(e),!0):!1}catch(e){return console.warn(`Error copying to clipboard:`,e),!1}};Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return c}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return n}}),Object.defineProperty(exports,`d`,{enumerable:!0,get:function(){return t}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return i}}),Object.defineProperty(exports,`l`,{enumerable:!0,get:function(){return s}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return r}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return a}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return e}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return l}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return u}}),Object.defineProperty(exports,`u`,{enumerable:!0,get:function(){return o}});
2
+ //# sourceMappingURL=ssrUtils-C_5ZY26i.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ssrUtils-C_5ZY26i.cjs","names":[],"sources":["../src/utils/ssrUtils.ts"],"sourcesContent":["/**\n * SSR-safe utilities for browser API access\n */\n\n/**\n * SSR-safe localStorage getter\n */\nexport const getLocalStorageItem = (key: string): string | null => {\n try {\n if (typeof window === 'undefined') {\n return null;\n }\n return localStorage.getItem(key);\n } catch (error) {\n console.warn(`Error accessing localStorage for key \"${key}\":`, error);\n return null;\n }\n};\n\n/**\n * SSR-safe localStorage setter\n */\nexport const setLocalStorageItem = (key: string, value: string): void => {\n try {\n if (typeof window === 'undefined') {\n return;\n }\n localStorage.setItem(key, value);\n } catch (error) {\n console.warn(`Error setting localStorage for key \"${key}\":`, error);\n }\n};\n\n/**\n * SSR-safe localStorage remover\n */\nexport const removeLocalStorageItem = (key: string): void => {\n try {\n if (typeof window === 'undefined') {\n return;\n }\n localStorage.removeItem(key);\n } catch (error) {\n console.warn(`Error removing localStorage for key \"${key}\":`, error);\n }\n};\n\n/**\n * SSR-safe document.title getter\n */\nexport const getDocumentTitle = (): string => {\n try {\n return typeof document !== 'undefined' ? document.title : '';\n } catch {\n return '';\n }\n};\n\n/**\n * SSR-safe window.location.origin getter\n */\nexport const getWindowOrigin = (): string => {\n try {\n return typeof window !== 'undefined' && window.location\n ? window.location.origin\n : '';\n } catch {\n return '';\n }\n};\n\n/**\n * Check if we're in a browser environment\n */\nexport const isBrowser = (): boolean => {\n return typeof window !== 'undefined' && typeof document !== 'undefined';\n};\n\n/**\n * SSR-safe window.open\n */\nexport const safeWindowOpen = (url?: string, target?: string, features?: string): void => {\n if (isBrowser()) {\n window.open(url, target, features);\n }\n};\n\n/**\n * SSR-safe document.querySelector\n */\nexport const safeQuerySelector = <T extends Element>(selector: string): T | null => {\n if (typeof document !== 'undefined') {\n return document.querySelector<T>(selector);\n }\n return null;\n};\n\n/**\n * SSR-safe navigator check\n */\nexport const hasNavigator = (): boolean => {\n return typeof navigator !== 'undefined';\n};\n\n/**\n * SSR-safe navigator.onLine check\n */\nexport const isOnline = (): boolean => {\n return hasNavigator() && navigator.onLine;\n};\n\n/**\n * SSR-safe clipboard write\n */\nexport const copyToClipboard = async (text: string): Promise<boolean> => {\n try {\n if (hasNavigator() && navigator.clipboard) {\n await navigator.clipboard.writeText(text);\n return true;\n }\n return false;\n } catch (error) {\n console.warn('Error copying to clipboard:', error);\n return false;\n }\n};\n"],"mappings":"AAOA,MAAa,EAAuB,GAA+B,CAC/D,GAAI,CAIA,OAHI,OAAO,OAAW,IACX,KAEJ,aAAa,QAAQ,EAAI,OAC3B,EAAO,CAEZ,OADA,QAAQ,KAAK,yCAAyC,EAAI,IAAK,EAAM,CAC9D,OAOF,GAAuB,EAAa,IAAwB,CACrE,GAAI,CACA,GAAI,OAAO,OAAW,IAClB,OAEJ,aAAa,QAAQ,EAAK,EAAM,OAC3B,EAAO,CACZ,QAAQ,KAAK,uCAAuC,EAAI,IAAK,EAAM,GAO9D,EAA0B,GAAsB,CACzD,GAAI,CACA,GAAI,OAAO,OAAW,IAClB,OAEJ,aAAa,WAAW,EAAI,OACvB,EAAO,CACZ,QAAQ,KAAK,wCAAwC,EAAI,IAAK,EAAM,GAO/D,MAAiC,CAC1C,GAAI,CACA,OAAO,OAAO,SAAa,IAAc,SAAS,MAAQ,QACtD,CACJ,MAAO,KAOF,MAAgC,CACzC,GAAI,CACA,OAAO,OAAO,OAAW,KAAe,OAAO,SACzC,OAAO,SAAS,OAChB,QACF,CACJ,MAAO,KAOF,MACF,OAAO,OAAW,KAAe,OAAO,SAAa,IAMnD,GAAkB,EAAc,EAAiB,IAA4B,CAClF,GAAW,EACX,OAAO,KAAK,EAAK,EAAQ,EAAS,EAO7B,EAAwC,GAC7C,OAAO,SAAa,IACb,SAAS,cAAiB,EAAS,CAEvC,KAME,MACF,OAAO,UAAc,IAMnB,MACF,GAAc,EAAI,UAAU,OAM1B,EAAkB,KAAO,IAAmC,CACrE,GAAI,CAKA,OAJI,GAAc,EAAI,UAAU,WAC5B,MAAM,UAAU,UAAU,UAAU,EAAK,CAClC,IAEJ,SACF,EAAO,CAEZ,OADA,QAAQ,KAAK,8BAA+B,EAAM,CAC3C"}
@@ -0,0 +1,2 @@
1
+ const e=e=>{try{return typeof window>`u`?null:localStorage.getItem(e)}catch(t){return console.warn(`Error accessing localStorage for key "${e}":`,t),null}},t=(e,t)=>{try{if(typeof window>`u`)return;localStorage.setItem(e,t)}catch(t){console.warn(`Error setting localStorage for key "${e}":`,t)}},n=e=>{try{if(typeof window>`u`)return;localStorage.removeItem(e)}catch(t){console.warn(`Error removing localStorage for key "${e}":`,t)}},r=()=>{try{return typeof document<`u`?document.title:``}catch{return``}},i=()=>{try{return typeof window<`u`&&window.location?window.location.origin:``}catch{return``}},a=()=>typeof window<`u`&&typeof document<`u`,o=(e,t,n)=>{a()&&window.open(e,t,n)},s=e=>typeof document<`u`?document.querySelector(e):null,c=()=>typeof navigator<`u`,l=()=>c()&&navigator.onLine,u=async e=>{try{return c()&&navigator.clipboard?(await navigator.clipboard.writeText(e),!0):!1}catch(e){return console.warn(`Error copying to clipboard:`,e),!1}};export{c as a,n as c,t as d,i,s as l,r as n,a as o,e as r,l as s,u as t,o as u};
2
+ //# sourceMappingURL=ssrUtils-DSwxhTtm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ssrUtils-DSwxhTtm.js","names":[],"sources":["../src/utils/ssrUtils.ts"],"sourcesContent":["/**\n * SSR-safe utilities for browser API access\n */\n\n/**\n * SSR-safe localStorage getter\n */\nexport const getLocalStorageItem = (key: string): string | null => {\n try {\n if (typeof window === 'undefined') {\n return null;\n }\n return localStorage.getItem(key);\n } catch (error) {\n console.warn(`Error accessing localStorage for key \"${key}\":`, error);\n return null;\n }\n};\n\n/**\n * SSR-safe localStorage setter\n */\nexport const setLocalStorageItem = (key: string, value: string): void => {\n try {\n if (typeof window === 'undefined') {\n return;\n }\n localStorage.setItem(key, value);\n } catch (error) {\n console.warn(`Error setting localStorage for key \"${key}\":`, error);\n }\n};\n\n/**\n * SSR-safe localStorage remover\n */\nexport const removeLocalStorageItem = (key: string): void => {\n try {\n if (typeof window === 'undefined') {\n return;\n }\n localStorage.removeItem(key);\n } catch (error) {\n console.warn(`Error removing localStorage for key \"${key}\":`, error);\n }\n};\n\n/**\n * SSR-safe document.title getter\n */\nexport const getDocumentTitle = (): string => {\n try {\n return typeof document !== 'undefined' ? document.title : '';\n } catch {\n return '';\n }\n};\n\n/**\n * SSR-safe window.location.origin getter\n */\nexport const getWindowOrigin = (): string => {\n try {\n return typeof window !== 'undefined' && window.location\n ? window.location.origin\n : '';\n } catch {\n return '';\n }\n};\n\n/**\n * Check if we're in a browser environment\n */\nexport const isBrowser = (): boolean => {\n return typeof window !== 'undefined' && typeof document !== 'undefined';\n};\n\n/**\n * SSR-safe window.open\n */\nexport const safeWindowOpen = (url?: string, target?: string, features?: string): void => {\n if (isBrowser()) {\n window.open(url, target, features);\n }\n};\n\n/**\n * SSR-safe document.querySelector\n */\nexport const safeQuerySelector = <T extends Element>(selector: string): T | null => {\n if (typeof document !== 'undefined') {\n return document.querySelector<T>(selector);\n }\n return null;\n};\n\n/**\n * SSR-safe navigator check\n */\nexport const hasNavigator = (): boolean => {\n return typeof navigator !== 'undefined';\n};\n\n/**\n * SSR-safe navigator.onLine check\n */\nexport const isOnline = (): boolean => {\n return hasNavigator() && navigator.onLine;\n};\n\n/**\n * SSR-safe clipboard write\n */\nexport const copyToClipboard = async (text: string): Promise<boolean> => {\n try {\n if (hasNavigator() && navigator.clipboard) {\n await navigator.clipboard.writeText(text);\n return true;\n }\n return false;\n } catch (error) {\n console.warn('Error copying to clipboard:', error);\n return false;\n }\n};\n"],"mappings":"AAOA,MAAa,EAAuB,GAA+B,CAC/D,GAAI,CAIA,OAHI,OAAO,OAAW,IACX,KAEJ,aAAa,QAAQ,EAAI,OAC3B,EAAO,CAEZ,OADA,QAAQ,KAAK,yCAAyC,EAAI,IAAK,EAAM,CAC9D,OAOF,GAAuB,EAAa,IAAwB,CACrE,GAAI,CACA,GAAI,OAAO,OAAW,IAClB,OAEJ,aAAa,QAAQ,EAAK,EAAM,OAC3B,EAAO,CACZ,QAAQ,KAAK,uCAAuC,EAAI,IAAK,EAAM,GAO9D,EAA0B,GAAsB,CACzD,GAAI,CACA,GAAI,OAAO,OAAW,IAClB,OAEJ,aAAa,WAAW,EAAI,OACvB,EAAO,CACZ,QAAQ,KAAK,wCAAwC,EAAI,IAAK,EAAM,GAO/D,MAAiC,CAC1C,GAAI,CACA,OAAO,OAAO,SAAa,IAAc,SAAS,MAAQ,QACtD,CACJ,MAAO,KAOF,MAAgC,CACzC,GAAI,CACA,OAAO,OAAO,OAAW,KAAe,OAAO,SACzC,OAAO,SAAS,OAChB,QACF,CACJ,MAAO,KAOF,MACF,OAAO,OAAW,KAAe,OAAO,SAAa,IAMnD,GAAkB,EAAc,EAAiB,IAA4B,CAClF,GAAW,EACX,OAAO,KAAK,EAAK,EAAQ,EAAS,EAO7B,EAAwC,GAC7C,OAAO,SAAa,IACb,SAAS,cAAiB,EAAS,CAEvC,KAME,MACF,OAAO,UAAc,IAMnB,MACF,GAAc,EAAI,UAAU,OAM1B,EAAkB,KAAO,IAAmC,CACrE,GAAI,CAKA,OAJI,GAAc,EAAI,UAAU,WAC5B,MAAM,UAAU,UAAU,UAAU,EAAK,CAClC,IAEJ,SACF,EAAO,CAEZ,OADA,QAAQ,KAAK,8BAA+B,EAAM,CAC3C"}
@@ -1 +1 @@
1
- require(`../assets-DNJsQD7_.cjs`);const e=require(`../utils-BQ9mZctf.cjs`);exports.DEFAULT_GAS_TOKEN_PREFERENCES=e.J,exports.DEFAULT_PRIVY_ECOSYSTEM_APPS=e.Y,exports.ENV=e.X,exports.EconomicNodeStrengthLevelToName=e.c,exports.MinXNodeLevel=e.l,exports.NodeStrengthLevelToImage=e.u,exports.SUPPORTED_GAS_TOKENS=e.Z,exports.TIME=e.s,exports.TOKEN_LOGOS=e.Q,exports.TOKEN_LOGO_COMPONENTS=e.$,exports.TogglePassportCheck=e.et,exports.VECHAIN_KIT_COOKIES_CONFIG=e.tt,exports.VECHAIN_KIT_STORAGE_KEYS=e.nt,exports.VECHAIN_KIT_TERMS_CONFIG=e.rt,exports.VECHAIN_PRIVY_APP_ID=e.it,exports.XNodeStrengthLevelToName=e.d,exports.addPrefix=e.P,exports.allNodeStrengthLevelToName=e.f,exports.buildCallClauses=e.t,exports.buildQueryString=e.p,exports.compare=e.F,exports.compareAddresses=e.k,exports.compareListOfAddresses=e.A,exports.convertUriToUrl=e.g,exports.copyToClipboard=e.ct,exports.executeCallClause=e.n,exports.executeMultipleClausesCall=e.r,exports.formatTokenBalance=e.H,exports.getDocumentTitle=e.lt,exports.getENV=e.at,exports.getGenericDelegatorUrl=e.ot,exports.getLocalStorageItem=e.ut,exports.getPicassoImage=e.U,exports.getWindowOrigin=e.dt,exports.gmNfts=e.m,exports.hasNavigator=e.ft,exports.humanAddress=e.W,exports.humanDomain=e.G,exports.humanNumber=e.K,exports.isBrowser=e.pt,exports.isInvalid=e.I,exports.isOnline=e.mt,exports.isRejectionError=e.a,exports.isValid=e.L,exports.isValidAddress=e.j,exports.isValidUrl=e.i,exports.isZero=e.q,exports.leftPadWithZeros=e.M,exports.normalize=e.R,exports.notFoundImage=e.st,exports.randomTransactionUser=e.V,exports.regexPattern=e.N,exports.removeLocalStorageItem=e.ht,exports.removePrefix=e.z,exports.resolveMediaTypeFromMimeType=e._,exports.safeQuerySelector=e.gt,exports.safeWindowOpen=e._t,exports.setLocalStorageItem=e.vt,exports.simpleHash=e.o,exports.toIPFSURL=e.E,exports.uploadBlobToIPFS=e.D,exports.validate=e.B,exports.validateIpfsUri=e.O,exports.xNodeToGMstartingLevel=e.h;
1
+ const e=require(`../utils-jW13BhAb.cjs`);require(`../assets-YPd7adzM.cjs`);const t=require(`../ssrUtils-C_5ZY26i.cjs`);exports.DEFAULT_GAS_TOKEN_PREFERENCES=e.J,exports.DEFAULT_PRIVY_ECOSYSTEM_APPS=e.Y,exports.ENV=e.X,exports.EconomicNodeStrengthLevelToName=e.c,exports.MinXNodeLevel=e.l,exports.NodeStrengthLevelToImage=e.u,exports.SUPPORTED_GAS_TOKENS=e.Z,exports.TIME=e.s,exports.TOKEN_LOGOS=e.Q,exports.TOKEN_LOGO_COMPONENTS=e.$,exports.TogglePassportCheck=e.et,exports.VECHAIN_KIT_COOKIES_CONFIG=e.tt,exports.VECHAIN_KIT_STORAGE_KEYS=e.nt,exports.VECHAIN_KIT_TERMS_CONFIG=e.rt,exports.VECHAIN_PRIVY_APP_ID=e.it,exports.XNodeStrengthLevelToName=e.d,exports.addPrefix=e.P,exports.allNodeStrengthLevelToName=e.f,exports.buildCallClauses=e.t,exports.buildQueryString=e.p,exports.compare=e.F,exports.compareAddresses=e.k,exports.compareListOfAddresses=e.A,exports.convertUriToUrl=e.g,exports.copyToClipboard=t.t,exports.executeCallClause=e.n,exports.executeMultipleClausesCall=e.r,exports.formatTokenBalance=e.H,exports.getDocumentTitle=t.n,exports.getENV=e.at,exports.getGenericDelegatorUrl=e.ot,exports.getLocalStorageItem=t.r,exports.getPicassoImage=e.U,exports.getWindowOrigin=t.i,exports.gmNfts=e.m,exports.hasNavigator=t.a,exports.humanAddress=e.W,exports.humanDomain=e.G,exports.humanNumber=e.K,exports.isBrowser=t.o,exports.isInvalid=e.I,exports.isOnline=t.s,exports.isRejectionError=e.a,exports.isValid=e.L,exports.isValidAddress=e.j,exports.isValidUrl=e.i,exports.isZero=e.q,exports.leftPadWithZeros=e.M,exports.normalize=e.R,exports.notFoundImage=e.st,exports.randomTransactionUser=e.V,exports.regexPattern=e.N,exports.removeLocalStorageItem=t.c,exports.removePrefix=e.z,exports.resolveMediaTypeFromMimeType=e._,exports.safeQuerySelector=t.l,exports.safeWindowOpen=t.u,exports.setLocalStorageItem=t.d,exports.simpleHash=e.o,exports.toIPFSURL=e.E,exports.uploadBlobToIPFS=e.D,exports.validate=e.B,exports.validateIpfsUri=e.O,exports.xNodeToGMstartingLevel=e.h;
@@ -1,3 +1,3 @@
1
- import "../index-u3CPquCV.cjs";
2
- import { $r as resolveMediaTypeFromMimeType, Ar as buildCallClauses, Br as validate, Ci as VECHAIN_KIT_COOKIES_CONFIG, Cr as removeLocalStorageItem, Di as getENV, Dr as MultipleClausesCallParameters, Ei as VECHAIN_PRIVY_APP_ID, Er as setLocalStorageItem, Fr as compare, Gr as MinXNodeLevel, Hr as simpleHash, Ir as isInvalid, Jr as allNodeStrengthLevelToName, Kr as NodeStrengthLevelToImage, Lr as isValid, Mr as executeMultipleClausesCall, Nr as isValidUrl, Oi as getGenericDelegatorUrl, Or as MultipleClausesCallReturnType, Pr as addPrefix, Qr as convertUriToUrl, Rr as normalize, Si as TogglePassportCheck, Sr as isOnline, Ti as VECHAIN_KIT_TERMS_CONFIG, Tr as safeWindowOpen, Ur as TIME, Vr as isRejectionError, Wr as EconomicNodeStrengthLevelToName, Xr as gmNfts, Yr as buildQueryString, Zr as xNodeToGMstartingLevel, _i as ENV, _r as getDocumentTitle, ai as isValidAddress, bi as TOKEN_LOGOS, br as hasNavigator, ci as randomTransactionUser, di as humanAddress, ei as toIPFSURL, fi as humanDomain, gi as DEFAULT_PRIVY_ECOSYSTEM_APPS, gr as copyToClipboard, hi as DEFAULT_GAS_TOKEN_PREFERENCES, ii as compareListOfAddresses, jr as executeCallClause, ki as notFoundImage, kr as ViewFunctionResult, li as formatTokenBalance, mi as isZero, ni as validateIpfsUri, oi as leftPadWithZeros, pi as humanNumber, qr as XNodeStrengthLevelToName, ri as compareAddresses, si as regexPattern, ti as uploadBlobToIPFS, ui as getPicassoImage, vi as PrivyEcosystemApp, vr as getLocalStorageItem, wi as VECHAIN_KIT_STORAGE_KEYS, wr as safeQuerySelector, xi as TOKEN_LOGO_COMPONENTS, xr as isBrowser, yi as SUPPORTED_GAS_TOKENS, yr as getWindowOrigin, zr as removePrefix } from "../index-D4rz985m.cjs";
1
+ import "../network-Cs9YqDJ1.cjs";
2
+ import { $ as isZero, A as MinXNodeLevel, B as uploadBlobToIPFS, C as normalize, D as simpleHash, E as isRejectionError, F as gmNfts, G as leftPadWithZeros, H as compareAddresses, I as xNodeToGMstartingLevel, J as formatTokenBalance, K as regexPattern, L as convertUriToUrl, M as XNodeStrengthLevelToName, N as allNodeStrengthLevelToName, O as TIME, P as buildQueryString, Q as humanNumber, R as resolveMediaTypeFromMimeType, S as isValid, T as validate, U as compareListOfAddresses, V as validateIpfsUri, W as isValidAddress, X as humanAddress, Y as getPicassoImage, Z as humanDomain, _ as executeMultipleClausesCall, a as hasNavigator, at as TOKEN_LOGOS, b as compare, c as removeLocalStorageItem, ct as VECHAIN_KIT_COOKIES_CONFIG, d as setLocalStorageItem, dt as VECHAIN_PRIVY_APP_ID, et as DEFAULT_GAS_TOKEN_PREFERENCES, f as MultipleClausesCallParameters, ft as getENV, g as executeCallClause, h as buildCallClauses, i as getWindowOrigin, it as SUPPORTED_GAS_TOKENS, j as NodeStrengthLevelToImage, k as EconomicNodeStrengthLevelToName, l as safeQuerySelector, lt as VECHAIN_KIT_STORAGE_KEYS, m as ViewFunctionResult, mt as notFoundImage, n as getDocumentTitle, nt as ENV, o as isBrowser, ot as TOKEN_LOGO_COMPONENTS, p as MultipleClausesCallReturnType, pt as getGenericDelegatorUrl, q as randomTransactionUser, r as getLocalStorageItem, rt as PrivyEcosystemApp, s as isOnline, st as TogglePassportCheck, t as copyToClipboard, tt as DEFAULT_PRIVY_ECOSYSTEM_APPS, u as safeWindowOpen, ut as VECHAIN_KIT_TERMS_CONFIG, v as isValidUrl, w as removePrefix, x as isInvalid, y as addPrefix, z as toIPFSURL } from "../index-DVxlUr9t.cjs";
3
3
  export { DEFAULT_GAS_TOKEN_PREFERENCES, DEFAULT_PRIVY_ECOSYSTEM_APPS, ENV, EconomicNodeStrengthLevelToName, MinXNodeLevel, MultipleClausesCallParameters, MultipleClausesCallReturnType, NodeStrengthLevelToImage, PrivyEcosystemApp, SUPPORTED_GAS_TOKENS, TIME, TOKEN_LOGOS, TOKEN_LOGO_COMPONENTS, TogglePassportCheck, VECHAIN_KIT_COOKIES_CONFIG, VECHAIN_KIT_STORAGE_KEYS, VECHAIN_KIT_TERMS_CONFIG, VECHAIN_PRIVY_APP_ID, ViewFunctionResult, XNodeStrengthLevelToName, addPrefix, allNodeStrengthLevelToName, buildCallClauses, buildQueryString, compare, compareAddresses, compareListOfAddresses, convertUriToUrl, copyToClipboard, executeCallClause, executeMultipleClausesCall, formatTokenBalance, getDocumentTitle, getENV, getGenericDelegatorUrl, getLocalStorageItem, getPicassoImage, getWindowOrigin, gmNfts, hasNavigator, humanAddress, humanDomain, humanNumber, isBrowser, isInvalid, isOnline, isRejectionError, isValid, isValidAddress, isValidUrl, isZero, leftPadWithZeros, normalize, notFoundImage, randomTransactionUser, regexPattern, removeLocalStorageItem, removePrefix, resolveMediaTypeFromMimeType, safeQuerySelector, safeWindowOpen, setLocalStorageItem, simpleHash, toIPFSURL, uploadBlobToIPFS, validate, validateIpfsUri, xNodeToGMstartingLevel };
@@ -0,0 +1,3 @@
1
+ import "../network-yA5VWcPq.js";
2
+ import { $ as isZero, A as MinXNodeLevel, B as uploadBlobToIPFS, C as normalize, D as simpleHash, E as isRejectionError, F as gmNfts, G as leftPadWithZeros, H as compareAddresses, I as xNodeToGMstartingLevel, J as formatTokenBalance, K as regexPattern, L as convertUriToUrl, M as XNodeStrengthLevelToName, N as allNodeStrengthLevelToName, O as TIME, P as buildQueryString, Q as humanNumber, R as resolveMediaTypeFromMimeType, S as isValid, T as validate, U as compareListOfAddresses, V as validateIpfsUri, W as isValidAddress, X as humanAddress, Y as getPicassoImage, Z as humanDomain, _ as executeMultipleClausesCall, a as hasNavigator, at as TOKEN_LOGOS, b as compare, c as removeLocalStorageItem, ct as VECHAIN_KIT_COOKIES_CONFIG, d as setLocalStorageItem, dt as VECHAIN_PRIVY_APP_ID, et as DEFAULT_GAS_TOKEN_PREFERENCES, f as MultipleClausesCallParameters, ft as getENV, g as executeCallClause, h as buildCallClauses, i as getWindowOrigin, it as SUPPORTED_GAS_TOKENS, j as NodeStrengthLevelToImage, k as EconomicNodeStrengthLevelToName, l as safeQuerySelector, lt as VECHAIN_KIT_STORAGE_KEYS, m as ViewFunctionResult, mt as notFoundImage, n as getDocumentTitle, nt as ENV, o as isBrowser, ot as TOKEN_LOGO_COMPONENTS, p as MultipleClausesCallReturnType, pt as getGenericDelegatorUrl, q as randomTransactionUser, r as getLocalStorageItem, rt as PrivyEcosystemApp, s as isOnline, st as TogglePassportCheck, t as copyToClipboard, tt as DEFAULT_PRIVY_ECOSYSTEM_APPS, u as safeWindowOpen, ut as VECHAIN_KIT_TERMS_CONFIG, v as isValidUrl, w as removePrefix, x as isInvalid, y as addPrefix, z as toIPFSURL } from "../index-DI_IPiLX.js";
3
+ export { DEFAULT_GAS_TOKEN_PREFERENCES, DEFAULT_PRIVY_ECOSYSTEM_APPS, ENV, EconomicNodeStrengthLevelToName, MinXNodeLevel, MultipleClausesCallParameters, MultipleClausesCallReturnType, NodeStrengthLevelToImage, PrivyEcosystemApp, SUPPORTED_GAS_TOKENS, TIME, TOKEN_LOGOS, TOKEN_LOGO_COMPONENTS, TogglePassportCheck, VECHAIN_KIT_COOKIES_CONFIG, VECHAIN_KIT_STORAGE_KEYS, VECHAIN_KIT_TERMS_CONFIG, VECHAIN_PRIVY_APP_ID, ViewFunctionResult, XNodeStrengthLevelToName, addPrefix, allNodeStrengthLevelToName, buildCallClauses, buildQueryString, compare, compareAddresses, compareListOfAddresses, convertUriToUrl, copyToClipboard, executeCallClause, executeMultipleClausesCall, formatTokenBalance, getDocumentTitle, getENV, getGenericDelegatorUrl, getLocalStorageItem, getPicassoImage, getWindowOrigin, gmNfts, hasNavigator, humanAddress, humanDomain, humanNumber, isBrowser, isInvalid, isOnline, isRejectionError, isValid, isValidAddress, isValidUrl, isZero, leftPadWithZeros, normalize, notFoundImage, randomTransactionUser, regexPattern, removeLocalStorageItem, removePrefix, resolveMediaTypeFromMimeType, safeQuerySelector, safeWindowOpen, setLocalStorageItem, simpleHash, toIPFSURL, uploadBlobToIPFS, validate, validateIpfsUri, xNodeToGMstartingLevel };
@@ -0,0 +1 @@
1
+ import{$ as e,A as t,B as n,D as r,E as i,F as a,G as o,H as s,I as c,J as l,K as u,L as d,M as f,N as p,O as m,P as h,Q as g,R as _,U as v,V as y,W as b,X as x,Y as S,Z as C,_ as w,a as T,at as E,c as D,d as O,et as k,f as A,g as j,h as M,i as N,it as P,j as F,k as I,l as L,m as R,n as z,nt as B,o as V,ot as H,p as U,q as W,r as G,rt as K,s as q,st as J,t as Y,tt as X,u as Z,z as Q}from"../utils-B2Eg9TD3.js";import"../assets-CXk1qRDd.js";import{a as $,c as ee,d as te,i as ne,l as re,n as ie,o as ae,r as oe,s as se,t as ce,u as le}from"../ssrUtils-DSwxhTtm.js";export{l as DEFAULT_GAS_TOKEN_PREFERENCES,S as DEFAULT_PRIVY_ECOSYSTEM_APPS,x as ENV,D as EconomicNodeStrengthLevelToName,L as MinXNodeLevel,Z as NodeStrengthLevelToImage,C as SUPPORTED_GAS_TOKENS,q as TIME,g as TOKEN_LOGOS,e as TOKEN_LOGO_COMPONENTS,k as TogglePassportCheck,X as VECHAIN_KIT_COOKIES_CONFIG,B as VECHAIN_KIT_STORAGE_KEYS,K as VECHAIN_KIT_TERMS_CONFIG,P as VECHAIN_PRIVY_APP_ID,O as XNodeStrengthLevelToName,h as addPrefix,A as allNodeStrengthLevelToName,Y as buildCallClauses,U as buildQueryString,a as compare,I as compareAddresses,t as compareListOfAddresses,j as convertUriToUrl,ce as copyToClipboard,z as executeCallClause,G as executeMultipleClausesCall,s as formatTokenBalance,ie as getDocumentTitle,E as getENV,H as getGenericDelegatorUrl,oe as getLocalStorageItem,v as getPicassoImage,ne as getWindowOrigin,R as gmNfts,$ as hasNavigator,b as humanAddress,o as humanDomain,u as humanNumber,ae as isBrowser,c as isInvalid,se as isOnline,T as isRejectionError,d as isValid,F as isValidAddress,N as isValidUrl,W as isZero,f as leftPadWithZeros,_ as normalize,J as notFoundImage,y as randomTransactionUser,p as regexPattern,ee as removeLocalStorageItem,Q as removePrefix,w as resolveMediaTypeFromMimeType,re as safeQuerySelector,le as safeWindowOpen,te as setLocalStorageItem,V as simpleHash,i as toIPFSURL,r as uploadBlobToIPFS,n as validate,m as validateIpfsUri,M as xNodeToGMstartingLevel};
@@ -0,0 +1,2 @@
1
+ import{D as e,F as t,N as n,P as r,T as i,c as a,d as ee,f as o,l as s,m as c,p as l,s as u,u as d}from"./assets-CXk1qRDd.js";import{r as f}from"./ssrUtils-DSwxhTtm.js";import te from"react";import{Icon as p}from"@chakra-ui/react";import{jsx as m,jsxs as ne}from"react/jsx-runtime";import{picasso as re}from"@vechain/picasso";import{BigNumber as ie}from"bignumber.js";import{formatEther as ae}from"ethers";import{generatePrivateKey as oe,privateKeyToAccount as se}from"viem/accounts";import{Address as ce}from"@vechain/sdk-core";var le={ipfsFetchingService:`https://api.dev.gateway-proxy.vechain.org/ipfs`,ipfsPinningService:`https://api.dev.gateway-proxy.vechain.org/api/v1/pinning/pinFileToIPFS`,vthoContractAddress:`0x0000000000000000000000000000456E65726779`,b3trContractAddress:`0xd31A6f2DBa8785cE41AB68Ea192791B5175309F4`,vot3ContractAddress:`0x028Af33230576c1e073C8245F72a7A4aa53564E4`,b3trGovernorAddress:`0x36E0e9b46D56dF12Dd69fD560e41954C73cE9ded`,timelockContractAddress:`0x125389845c93Efcf6471BA8BE1AC19c11e128603`,xAllocationPoolContractAddress:`0xC8232c91E2f744E533322B99F95f809b9f7ec446`,xAllocationVotingContractAddress:`0x074F093f4C534a16cDD09cb4b2669713218A762a`,emissionsContractAddress:`0x6a084E85f38400790043788FcCee39595616aa3A`,voterRewardsContractAddress:`0xbAb852081C459c0060960287aDcf9a0C2c1dc4b8`,galaxyMemberContractAddress:`0xbdA1cff75d2D43AB9186Ada41fECF79e25c49Ba3`,treasuryContractAddress:`0xe9414513Fe0e3b9bf7a61eC5c1AC7Df943fB3e77`,x2EarnAppsContractAddress:`0x432C46476f4970575C43B19588A170D237dC4929`,x2EarnRewardsPoolContractAddress:`0x134E4Fce6761f660401808CF86aE0e62cE52a81E`,nodeManagementContractAddress:`0xa96B5057171D797298A71178b48449A7bC615D8E`,veBetterPassportContractAddress:`0x8db6D14452fE36ba86C341AfEFaC0f90A0Db2bcb`,x2EarnCreatorContractAddress:`0x4e5f7eb452e9ecd75c0B29e3540014cBe01bBF52`,veDelegate:`0xfc32a9895C78CE00A1047d602Bd81Ea8134CC32b`,veDelegateVotes:`0xeb71148c9B3cd57e228c2152d79f6e78F5F1ef9a`,veDelegateTokenContractAddress:`0xD3f7b82Df5705D34f64C634d2dEf6B1cB3116950`,oracleContractAddress:`0x49eC7192BF804Abc289645ca86F1eD01a6C17713`,accountFactoryAddress:`0xC06Ad8573022e2BE416CA89DA47E8c592971679A`,cleanifyCampaignsContractAddress:`0x7a11D63338576aE8c038868433ea199d7E5319A6`,cleanifyChallengesContractAddress:`0xa58681692AdDD2e8E37f9113D40Bb9253C03F65e`,veWorldSubdomainClaimerContractAddress:`0x0000000000000000000000000000000000000000`,vetDomainsContractAddress:`0x0000000000000000000000000000000000000000`,vetDomainsPublicResolverAddress:`0x0000000000000000000000000000000000000000`,vetDomainsReverseRegistrarAddress:`0x5c970901a587BA3932C835D4ae5FAE2BEa7e78Bc`,vnsResolverAddress:`0x0000000000000000000000000000000000000000`,gloDollarContractAddress:`0x0000000000000000000000000000000000000000`,vetDomainAvatarUrl:`https://testnet.vet.domains/api/avatar`,indexerUrl:`https://b3tr.testnet.vechain.org/api/v1`,b3trIndexerUrl:`https://b3tr.testnet.vechain.org/api/v1`,graphQlIndexerUrl:`https://graph.vet/subgraphs/name/vns`,nodeUrl:`http://localhost:8669`,network:{id:`solo`,name:`solo`,type:`solo`,defaultNet:!0,urls:[`http://localhost:8669`],explorerUrl:`https://explore-testnet.vechain.org`,blockTime:1e4,genesis:{number:0,id:`0x00000000c05a20fbca2bf6ae3affba6af4a74b800b585bf7a4988aba7aea69f6`,size:170,parentID:`0xffffffff53616c757465202620526573706563742c20457468657265756d2100`,timestamp:1530316800,gasLimit:1e7,beneficiary:`0x0000000000000000000000000000000000000000`,gasUsed:0,totalScore:0,txsRoot:`0x45b0cfc220ceec5b7c1c62c4d4193d38e4eba48e8815729ce75f9c0ab0e4c1c0`,txsFeatures:0,stateRoot:`0x93de0ffb1f33bc0af053abc2a87c4af44594f5dcb1cb879dd823686a15d68550`,receiptsRoot:`0x45b0cfc220ceec5b7c1c62c4d4193d38e4eba48e8815729ce75f9c0ab0e4c1c0`,signer:`0x0000000000000000000000000000000000000000`,isTrunk:!0,transactions:[]}},explorerUrl:`https://explore-testnet.vechain.org`},ue={ipfsFetchingService:`https://api.dev.gateway-proxy.vechain.org/ipfs`,ipfsPinningService:`https://api.dev.gateway-proxy.vechain.org/api/v1/pinning/pinFileToIPFS`,vthoContractAddress:`0x0000000000000000000000000000456E65726779`,b3trContractAddress:`0xbf64cf86894Ee0877C4e7d03936e35Ee8D8b864F`,vot3ContractAddress:`0xa704c45971995467696EE9544Da77DD42Bc9706E`,b3trGovernorAddress:`0xDF5E114D391CAC840529802fe8D01f6bdeBE41eC`,timelockContractAddress:`0x30ee94F303643902a68aD8A7A6456cA69d763192`,xAllocationPoolContractAddress:`0x9B9CA9D0C41Add1d204f90BA0E9a6844f1843A84`,xAllocationVotingContractAddress:`0x5859ff910d8b0c127364c98E24233b0af7443c1c`,emissionsContractAddress:`0x3D7616213191a10460e49CfdB7edBf88D6a10942`,voterRewardsContractAddress:`0x2E47fc4aabB3403037fB5E1f38995E7a91Ce8Ed2`,galaxyMemberContractAddress:`0xa9aC49C030c1148b95F056E86f2531f8F3d5bf27`,x2EarnCreatorContractAddress:``,nodeManagementContractAddress:``,x2EarnAppsContractAddress:`0xcB23Eb1bBD5c07553795b9538b1061D0f4ABA153`,treasuryContractAddress:`0x039893EBe092A2D22B08E2b029735D211bfF7F50`,x2EarnRewardsPoolContractAddress:`0x5F8f86B8D0Fa93cdaE20936d150175dF0205fB38`,veBetterPassportContractAddress:`0x63c061a2753e84635a22ff05954e1687f104f002`,veDelegate:`0xfc32a9895C78CE00A1047d602Bd81Ea8134CC32b`,veDelegateVotes:`0xeb71148c9B3cd57e228c2152d79f6e78F5F1ef9a`,veDelegateTokenContractAddress:`0xD3f7b82Df5705D34f64C634d2dEf6B1cB3116950`,oracleContractAddress:`0xdcCAaBd81B38e0dEEf4c202bC7F1261A4D9192C6`,accountFactoryAddress:`0x713b908Bcf77f3E00EFEf328E50b657a1A23AeaF`,cleanifyCampaignsContractAddress:`0x22d19ACBD2cBf6b2B6C546395c26B9Cb448248BF`,cleanifyChallengesContractAddress:`0x8Cc885DC3e5c376632CCEA0e8e1a51F1B3572442`,veWorldSubdomainClaimerContractAddress:`0xe5af50e7ad1aaab4fbe4efbb2b30f764013918b3`,vetDomainsContractAddress:`0xcBFB30c1F267914816668d53AcBA7bA7c9806D13`,vetDomainsPublicResolverAddress:`0xA6eFd130085a127D090ACb0b100294aD1079EA6f`,vetDomainsReverseRegistrarAddress:`0x6878f1aD5e3015310CfE5B38d7B7071C5D8818Ca`,vnsResolverAddress:`0xc403b8EA53F707d7d4de095f0A20bC491Cf2bc94`,gloDollarContractAddress:`0x0000000000000000000000000000000000000000`,vetDomainAvatarUrl:`https://testnet.vet.domains/api/avatar`,indexerUrl:`https://indexer.testnet.vechain.org/api/v1`,b3trIndexerUrl:`https://indexer.testnet.vechain.org/api/v1`,graphQlIndexerUrl:`https://graph.vet/subgraphs/name/vns`,nodeUrl:`https://testnet.vechain.org`,network:{id:`testnet`,name:`testnet`,type:`test`,defaultNet:!0,urls:[`https://testnet.vechain.org`,`https://vethor-node-test.vechaindev.com`,`https://sync-testnet.veblocks.net`,`https://testnet.vecha.in`],explorerUrl:`https://insight.vecha.in/#/test`,blockTime:1e4,genesis:{number:0,id:`0x000000000b2bce3c70bc649a02749e8687721b09ed2e15997f466536b20bb127`,size:170,parentID:`0xffffffff00000000000000000000000000000000000000000000000000000000`,timestamp:1530014400,gasLimit:1e7,beneficiary:`0x0000000000000000000000000000000000000000`,gasUsed:0,totalScore:0,txsRoot:`0x45b0cfc220ceec5b7c1c62c4d4193d38e4eba48e8815729ce75f9c0ab0e4c1c0`,txsFeatures:0,stateRoot:`0x4ec3af0acbad1ae467ad569337d2fe8576fe303928d35b8cdd91de47e9ac84bb`,receiptsRoot:`0x45b0cfc220ceec5b7c1c62c4d4193d38e4eba48e8815729ce75f9c0ab0e4c1c0`,signer:`0x0000000000000000000000000000000000000000`,isTrunk:!0,transactions:[]}},explorerUrl:`https://explore-testnet.vechain.org/transactions`},h={ipfsFetchingService:`https://api.gateway-proxy.vechain.org/ipfs`,indexerUrl:`https://indexer.mainnet.vechain.org/api/v1`,ipfsPinningService:`https://api.gateway-proxy.vechain.org/api/v1/pinning/pinFileToIPFS`,b3trIndexerUrl:`https://indexer.mainnet.vechain.org/api/v1`,graphQlIndexerUrl:`https://graph.vet/subgraphs/name/vns`,nodeUrl:`https://mainnet.vechain.org`,network:{id:`main`,name:`main`,type:`main`,defaultNet:!0,urls:[`https://mainnet.vechain.org`,`https://vethor-node.vechain.com`,`https://mainnet.veblocks.net`,`https://mainnet.vecha.in`],explorerUrl:`https://vechainstats.com`,blockTime:1e4,genesis:{number:0,id:`0x00000000851caf3cfdb6e899cf5958bfb1ac3413d346d43539627e6be7ec1b4a`,size:170,parentID:`0xffffffff53616c757465202620526573706563742c20457468657265756d2100`,timestamp:1530316800,gasLimit:1e7,beneficiary:`0x0000000000000000000000000000000000000000`,gasUsed:0,totalScore:0,txsRoot:`0x45b0cfc220ceec5b7c1c62c4d4193d38e4eba48e8815729ce75f9c0ab0e4c1c0`,txsFeatures:0,stateRoot:`0x09bfdf9e24dd5cd5b63f3c1b5d58b97ff02ca0490214a021ed7d99b93867839c`,receiptsRoot:`0x45b0cfc220ceec5b7c1c62c4d4193d38e4eba48e8815729ce75f9c0ab0e4c1c0`,signer:`0x0000000000000000000000000000000000000000`,isTrunk:!0,transactions:[]}},explorerUrl:`https://vechainstats.com/transaction`,vthoContractAddress:`0x0000000000000000000000000000456E65726779`,b3trContractAddress:`0x5ef79995FE8a89e0812330E4378eB2660ceDe699`,vot3ContractAddress:`0x76Ca782B59C74d088C7D2Cce2f211BC00836c602`,b3trGovernorAddress:`0x1c65C25fABe2fc1bCb82f253fA0C916a322f777C`,timelockContractAddress:`0x7B7EaF620d88E38782c6491D7Ce0B8D8cF3227e4`,xAllocationPoolContractAddress:`0x4191776F05f4bE4848d3f4d587345078B439C7d3`,xAllocationVotingContractAddress:`0x89A00Bb0947a30FF95BEeF77a66AEdE3842Fe5B7`,emissionsContractAddress:`0xDf94739bd169C84fe6478D8420Bb807F1f47b135`,voterRewardsContractAddress:`0x838A33AF756a6366f93e201423E1425f67eC0Fa7`,galaxyMemberContractAddress:`0x93B8cD34A7Fc4f53271b9011161F7A2B5fEA9D1F`,treasuryContractAddress:`0xD5903BCc66e439c753e525F8AF2FeC7be2429593`,x2EarnAppsContractAddress:`0x8392B7CCc763dB03b47afcD8E8f5e24F9cf0554D`,x2EarnRewardsPoolContractAddress:`0x6Bee7DDab6c99d5B2Af0554EaEA484CE18F52631`,x2EarnCreatorContractAddress:`0xe8e96a768ffd00417d4bd985bec9EcfC6F732a7f`,nodeManagementContractAddress:`0xB0EF9D89C6b49CbA6BBF86Bf2FDf0Eee4968c6AB`,veBetterPassportContractAddress:`0x35a267671d8EDD607B2056A9a13E7ba7CF53c8b3`,veDelegate:`0xfc32a9895C78CE00A1047d602Bd81Ea8134CC32b`,veDelegateVotes:`0xeb71148c9B3cd57e228c2152d79f6e78F5F1ef9a`,veDelegateTokenContractAddress:`0xD3f7b82Df5705D34f64C634d2dEf6B1cB3116950`,oracleContractAddress:`0x49eC7192BF804Abc289645ca86F1eD01a6C17713`,accountFactoryAddress:`0xC06Ad8573022e2BE416CA89DA47E8c592971679A`,cleanifyCampaignsContractAddress:`0x7a11D63338576aE8c038868433ea199d7E5319A6`,cleanifyChallengesContractAddress:`0xa58681692AdDD2e8E37f9113D40Bb9253C03F65e`,veWorldSubdomainClaimerContractAddress:`0xa4173c32fe8a61a8fd0d0234675b559fc360446a`,vetDomainsContractAddress:`0xa9231da8BF8D10e2df3f6E03Dd5449caD600129b`,vetDomainsPublicResolverAddress:`0xabac49445584C8b6c1472b030B1076Ac3901D7cf`,vetDomainsReverseRegistrarAddress:`0x5c970901a587BA3932C835D4ae5FAE2BEa7e78Bc`,vnsResolverAddress:`0xA11413086e163e41901bb81fdc5617c975Fa5a1A`,vetDomainAvatarUrl:`https://vet.domains/api/avatar`,gloDollarContractAddress:`0x29c630cce4ddb23900f5fe66ab55e488c15b9f5e`};const g=e=>{if(e===`solo`)return le;if(e===`test`)return ue;if(e===`main`)return h;throw Error(`Unsupported NETWORK_TYPE ${e}`)},_=({...e})=>ne(p,{viewBox:`0 0 1684.56 1684.56`,...e,children:[m(`rect`,{fill:`#b1f16c`,width:`1684.56`,height:`1684.56`,rx:`157.74`,ry:`157.74`}),m(`path`,{fill:`#1d1d1d`,d:`M844.98,1386.28c-41.46,0-75.1-33.9-75.1-75.67,0-142.78-86.35-274.05-158.8-359.01-89.72-105.25-197.89-186.19-265.28-219.75-37.18-18.54-52.43-63.88-34.09-101.35,18.39-37.47,63.39-52.83,100.58-34.35,75.09,37.41,202.11,127.08,312.7,256.82,32.24,37.81,66.77,83.5,97.66,135.35,34.2-108.83,79.98-205.07,121.61-280.12,91.8-165.56,214.37-317.13,319.84-395.63,33.36-24.83,80.39-17.68,105.02,15.93,24.64,33.61,17.55,81-15.81,105.82-88.03,65.47-197.1,201.95-277.93,347.68-70.82,127.7-155.25,323.08-155.25,528.6,0,41.78-33.64,75.67-75.1,75.67h-.06Z`})]}),v={VET:new URL(`/static/img/coins/64x64/3077.png`,a).toString(),VTHO:new URL(`/static/img/coins/64x64/3012.png`,a).toString(),B3TR:new URL(`/static/img/coins/64x64/33509.png`,a).toString(),VOT3:new URL(`/17ff70aa1d898bc97ad690dbfad1a3b5643f7e0b.png`,a).toString(),veDelegate:new URL(`1c641b86096d56bf13d49f38388accd6db8b8b2e.png`,e).toString(),USDGLO:new URL(`/static/img/coins/64x64/23888.png`,a).toString()},y={VET:m(r,{}),VTHO:m(n,{}),B3TR:m(t,{}),VOT3:m(_,{})},b=`cm4wxxujb022fyujl7g0thb21`,x=l;let S=function(e){return e[e.WhitelistCheck=1]=`WhitelistCheck`,e[e.BlacklistCheck=2]=`BlacklistCheck`,e[e.SignalingCheck=3]=`SignalingCheck`,e[e.ParticipationScoreCheck=4]=`ParticipationScoreCheck`,e[e.GmOwnershipCheck=5]=`GmOwnershipCheck`,e}({});const C={NETWORK:`vechain-kit:network`},w=()=>{if(typeof window>`u`)return{isDevelopment:!1,isProduction:!0};let e=f(C.NETWORK);return{isDevelopment:e===`test`,isProduction:e===`main`}},T={get isDevelopment(){return w().isDevelopment},get isProduction(){return w().isProduction}},E=()=>w().isProduction?`${d}/api/v1/`:`${ee}/api/v1/`,D=[{id:`clz41gcg00e4ay75dmq3uzzgr`,name:`Cleanify`,website:u},{id:`cm153hrup0817axti38avlfyg`,name:`GreenCart`,website:o},{id:`clv9sfos20j6x1431ga80d95f`,name:`Mughsot`,website:c},{id:`cm4l8tiai070i108zo17oieyc`,name:`EVearn`,website:s}],O={url:new URL(`terms`,i).toString(),version:1,required:!0,displayName:`Vechain Kit Terms`},k={url:new URL(`cookies`,i).toString(),version:1,required:!1,displayName:`Vechain Kit Cookies`},A={tokenPriority:[`VET`,`B3TR`,`VTHO`],availableGasTokens:[`VET`,`B3TR`,`VTHO`],excludedTokens:[],alwaysConfirm:!1,gasTokenToUse:`VET`},j={B3TR:{type:`B3TR`,name:`B3TR Token`,symbol:`B3TR`,address:g(process.env.NEXT_PUBLIC_NETWORK_TYPE||`test`).b3trContractAddress,description:`Pay gas with B3TR`},VET:{type:`VET`,name:`VET Token`,symbol:`VET`,description:`Pay gas with VET`},VTHO:{type:`VTHO`,name:`VTHO Token`,symbol:`VTHO`,address:g(process.env.NEXT_PUBLIC_NETWORK_TYPE||`test`).vthoContractAddress,description:`Pay gas with VTHO`}},M=(e,t=6,n=4)=>`${e.slice(0,t)}•••${e.slice(-n)}`,N=(e,t=8,n=6)=>e.length<=t+n?e:`${e.substring(0,t)}•••${e.substring(e.length-n)}`,P=(e,t,n=null)=>{let r=n?` `+n:``;t=t||e;let i=new Intl.NumberFormat(`en-US`,{style:`decimal`,minimumFractionDigits:Number.parseFloat(e.toString())%1==0?0:2}).format(L(Number(e),2));return!F(t)&&F(i)&&(i=`< 0.01`),i+r},F=e=>!e&&e!==0?!1:new ie(e).isZero(),I=(e,t=!1)=>{let n=re(e.toLowerCase());return t?`data:image/svg+xml;base64,${Buffer.from(n,`utf8`).toString(`base64`)}`:`data:image/svg+xml;utf8,${n}`};function L(e,t=0){if(typeof e!=`number`||typeof t!=`number`)throw Error(`Invalid input: number and decimals must be of type number`);let n=parseInt(e.toExponential().split(`e-`)[1]||`0`,10),r=10**Math.max(0,t+n);return Math.floor(e*r)/r}const R=e=>{let t=ae(e),n=t===`0`?`0`:P(t);return{original:e.toString(),scaled:t,formatted:n}},z=(()=>{let e=oe(),t=se(e);return{privateKey:e,account:t,address:t.address}})(),B=/^0[xX]/,V=/^(0[xX])?[a-fA-F0-9]+$/,H=e=>(W(e),e.replace(B,``)),U=e=>(W(e),B.test(e)?e.replace(B,`0x`):`0x${e}`),W=e=>{if(!G(e))throw Error(`Provided hex value is not valid`)},G=e=>!!e&&V.test(e),de=e=>!G(e),K=e=>U(e.toLowerCase().trim()),fe=(e,t)=>{try{return H(e).toLowerCase()===H(t).toLowerCase()}catch{return!1}},q=(e,t)=>{if(!e||!t)return!1;if(t===e)return!0;try{return K(e)===K(t)}catch{return!1}},pe=(e,t)=>{if(e.length!==t.length)return!1;let n=[...e].map(e=>e.toLowerCase()).sort((e,t)=>e.localeCompare(t)),r=[...t].map(e=>e.toLowerCase()).sort((e,t)=>e.localeCompare(t));for(let e=0;e<n.length;e++)if(!q(n[e],r[e]))return!1;return!0},me=()=>/^0x[a-fA-F0-9]{40}$/,he=ce.isValid,ge=(e,t)=>{let n=e.startsWith(`0x`)?e.slice(2):e;if(n.length>t)throw Error(`Input string is longer than the specified length`);return`0x${n.padStart(t,`0`)}`},J=e=>{let t=e.trim();return/^ipfs:\/\/[a-zA-Z0-9]+(\/[^/]+)*\/?$/.test(t)};function _e(e,t){return`ipfs://${e}/${t??``}`}async function ve(e,t,n){try{let r=new FormData;r.append(`file`,e,t);let i=await fetch(g(n).ipfsPinningService,{method:`POST`,headers:{"X-Project-Id":`vechain-kit`},body:r});if(!i.ok)throw Error(`HTTP error! status: ${i.status}`);return(await i.json()).IpfsHash}catch(e){throw console.error(`Error uploading blob:`,e),Error(`Failed to upload blob to IPFS`)}}let Y=function(e){return e.IMAGE=`image`,e.VIDEO=`video`,e.UNKNOWN=`unknown`,e.TEXT=`text`,e}({}),ye=function(e){return e.NONE=`NONE`,e.WHITELIST=`WHITELIST`,e.BLACKLIST=`BLACKLIST`,e}({});const be={usd:`$`,gbp:`£`,eur:`€`},xe=[`display`,`avatar`,`description`,`keywords`,`email`,`url`,`header`,`notice`,`location`,`phone`,`com.x`];function Se(e,t){return e*(1+t)}function Ce(e,t=4){return Number(e).toLocaleString(void 0,{minimumFractionDigits:t,maximumFractionDigits:t})}let we=function(e){return e.TERMS=`terms`,e.PRIVACY=`privacy`,e.COOKIES=`cookies`,e}({}),Te=function(e){return e.VECHAIN_KIT=`vechain-kit`,e.APPLICATION=`application`,e}({});const X=(e,t)=>!!t.find(t=>{if(e?.split(`/`)[0]===t)return!0}),Ee=e=>X(e,[Y.IMAGE])?Y.IMAGE:X(e,[Y.VIDEO])?Y.VIDEO:Y.UNKNOWN,De=(e,t)=>{if(e.startsWith(`data:`))return e;let n=e?.split(`://`);if(n.length!==2)return null;let r=n?.[0]?.trim(),i=n[1];switch(r){case`ipfs`:if(!J(e))throw Error(`Invalid IPFS URI ${e}`);return`${g(t).ipfsFetchingService}/${i}`;case`ar`:return`https://arweave.net/${i}`;default:return e}},Oe=[{level:`1`,name:`Earth`,image:`/images/nft-levels/0.png`,multiplier:1,b3trToUpgrade:0},{level:`2`,name:`Moon`,image:`/images/nft-levels/1.png`,multiplier:1.1,b3trToUpgrade:1e4},{level:`3`,name:`Mercury`,image:`/images/nft-levels/2.png`,multiplier:1.2,b3trToUpgrade:25e3},{level:`4`,name:`Venus`,image:`/images/nft-levels/3.png`,multiplier:1.5,b3trToUpgrade:5e4},{level:`5`,name:`Mars`,image:`/images/nft-levels/4.png`,multiplier:2,b3trToUpgrade:1e5},{level:`6`,name:`Jupiter`,image:`/images/nft-levels/5.png`,multiplier:2.5,b3trToUpgrade:25e4},{level:`7`,name:`Saturn`,image:`/images/nft-levels/6.png`,multiplier:3,b3trToUpgrade:5e5},{level:`8`,name:`Uranus`,image:`/images/nft-levels/7.png`,multiplier:5,b3trToUpgrade:25e5},{level:`9`,name:`Neptune`,image:`/images/nft-levels/8.png`,multiplier:10,b3trToUpgrade:5e6},{level:`10`,name:`Galaxy`,image:`/images/nft-levels/9.png`,multiplier:25,b3trToUpgrade:25e6}],ke={1:2,2:4,3:6,4:2,5:4,6:6,7:7},Z=e=>{let t=new URLSearchParams;return Object.keys(e).forEach(n=>{let r=e[n];r!=null&&t.append(n,String(r))}),t.toString()},Ae={0:`/images/vnt/00-noNode.webp`,1:`/images/vnt/01-strength.webp`,2:`/images/vnt/02-thunder.webp`,3:`/images/vnt/03-mjolnir.webp`,4:`/images/vnt/04-vethorX.webp`,5:`/images/vnt/05-strengthX.webp`,6:`/images/vnt/06-thunderX.webp`,7:`/images/vnt/07-mjolnirX.webp`},je=4,Q={1:`Strength`,2:`Thunder`,3:`Mjolnir`},$={4:`VeThorX`,5:`StrengthX`,6:`ThunderX`,7:`MjolnirX`},Me={...Q,...$},Ne={SECOND:1e3,MINUTE:1e3*60,HOUR:1e3*60*60,DAY:1e3*60*60*24,WEEK:1e3*60*60*24*7,MONTH:1e3*60*60*24*30,YEAR:1e3*60*60*24*365},Pe=e=>e?[`rejected`,`cancelled`,`user denied`,`closed`].some(t=>e.toLowerCase().includes(t.toLowerCase())):!1,Fe=e=>{let t=0;for(let n=0;n<e.length;n++){let r=e.charCodeAt(n);t=(t<<5)-t+r,t&=t}return t.toString(36)},Ie=e=>{try{return new URL(e),!0}catch{return!1}},Le=async({thor:e,contractAddress:t,abi:n,method:r,args:i})=>await e.contracts.load(t,n).read[r](...i),Re=async({thor:e,calls:t})=>{if(!Array.isArray(t))throw Error(`calls must be an array`);let n=t.map(t=>e.contracts.load(t.address,t.abi).clause[t.functionName](...t.args)),r=await e.transactions.executeMultipleClausesCall(n);if(!r.every(e=>e.success))throw Error(`Failed to execute multiple clauses call`);return r.map(e=>e.result.plain)},ze=({thor:e,calls:t})=>{if(!Array.isArray(t))throw Error(`calls must be an array`);return t.map(t=>e.contracts.load(t.address,t.abi).clause[t.functionName](...t.args))};export{y as $,pe as A,W as B,be as C,ve as D,_e as E,fe as F,N as G,R as H,de as I,A as J,P as K,G as L,ge as M,me as N,J as O,U as P,v as Q,K as R,xe as S,ye as T,I as U,z as V,M as W,T as X,D as Y,j as Z,Ee as _,Pe as a,w as at,Se as b,Q as c,g as ct,$ as d,S as et,Me as f,De as g,ke as h,Ie as i,b as it,he as j,q as k,je as l,Oe as m,Le as n,C as nt,Fe as o,E as ot,Z as p,F as q,Re as r,O as rt,Ne as s,x as st,ze as t,k as tt,Ae as u,Te as v,Y as w,Ce as x,we as y,H as z};
2
+ //# sourceMappingURL=utils-B2Eg9TD3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils-B2Eg9TD3.js","names":["config: AppConfig","config","config: AppConfig","config","config: AppConfig","localConfig","testnetConfig","mainnetConfig","VOT3Logo: React.FC<Props>","TOKEN_LOGOS: Record<string, string>","TOKEN_LOGO_COMPONENTS: Record<string, JSX.Element>","DEFAULT_PRIVY_ECOSYSTEM_APPS: PrivyEcosystemApp[]","DEFAULT_GAS_TOKEN_PREFERENCES: GasTokenPreferences","SUPPORTED_GAS_TOKENS: Record<GasTokenType, GasTokenInfo>","randomTransactionUser: {\n privateKey: string;\n account: Account;\n address: string;\n}","HexUtils.normalize","CURRENCY_SYMBOLS: Record<CURRENCY, string>","xNodeToGMstartingLevel: Record<number, number>","NodeStrengthLevelToImage: { [key: string]: string }","EconomicNodeStrengthLevelToName: { [key: string]: string }","XNodeStrengthLevelToName: { [key: string]: string }","allNodeStrengthLevelToName: { [key: string]: string }"],"sources":["../src/config/solo.ts","../src/config/testnet.ts","../src/config/mainnet.ts","../src/config/index.ts","../src/assets/icons/VechainLogo/VOT3Logo.tsx","../src/utils/constants.tsx","../src/utils/formattingUtils.tsx","../src/utils/randomTxForwarder.tsx","../src/utils/hexUtils.ts","../src/utils/addressUtils.ts","../src/utils/ipfs.ts","../src/types/types.ts","../src/types/ensTextRecords.ts","../src/types/gasEstimation.ts","../src/types/index.ts","../src/utils/media.ts","../src/utils/uri.ts","../src/utils/gmNfts.ts","../src/utils/buildQueryString.ts","../src/utils/xNode.ts","../src/utils/time.ts","../src/utils/stringUtils.ts","../src/utils/url.ts","../src/utils/thorUtils.ts"],"sourcesContent":["import { AppConfig } from './appConfig';\nconst config: AppConfig = {\n ipfsFetchingService: 'https://api.dev.gateway-proxy.vechain.org/ipfs',\n ipfsPinningService:\n 'https://api.dev.gateway-proxy.vechain.org/api/v1/pinning/pinFileToIPFS',\n vthoContractAddress: '0x0000000000000000000000000000456E65726779',\n b3trContractAddress: '0xd31A6f2DBa8785cE41AB68Ea192791B5175309F4',\n vot3ContractAddress: '0x028Af33230576c1e073C8245F72a7A4aa53564E4',\n b3trGovernorAddress: '0x36E0e9b46D56dF12Dd69fD560e41954C73cE9ded',\n timelockContractAddress: '0x125389845c93Efcf6471BA8BE1AC19c11e128603',\n xAllocationPoolContractAddress:\n '0xC8232c91E2f744E533322B99F95f809b9f7ec446',\n xAllocationVotingContractAddress:\n '0x074F093f4C534a16cDD09cb4b2669713218A762a',\n emissionsContractAddress: '0x6a084E85f38400790043788FcCee39595616aa3A',\n voterRewardsContractAddress: '0xbAb852081C459c0060960287aDcf9a0C2c1dc4b8',\n galaxyMemberContractAddress: '0xbdA1cff75d2D43AB9186Ada41fECF79e25c49Ba3',\n treasuryContractAddress: '0xe9414513Fe0e3b9bf7a61eC5c1AC7Df943fB3e77',\n x2EarnAppsContractAddress: '0x432C46476f4970575C43B19588A170D237dC4929',\n x2EarnRewardsPoolContractAddress:\n '0x134E4Fce6761f660401808CF86aE0e62cE52a81E',\n nodeManagementContractAddress: '0xa96B5057171D797298A71178b48449A7bC615D8E',\n veBetterPassportContractAddress:\n '0x8db6D14452fE36ba86C341AfEFaC0f90A0Db2bcb',\n x2EarnCreatorContractAddress: '0x4e5f7eb452e9ecd75c0B29e3540014cBe01bBF52',\n veDelegate: '0xfc32a9895C78CE00A1047d602Bd81Ea8134CC32b',\n veDelegateVotes: '0xeb71148c9B3cd57e228c2152d79f6e78F5F1ef9a',\n veDelegateTokenContractAddress:\n '0xD3f7b82Df5705D34f64C634d2dEf6B1cB3116950',\n oracleContractAddress: '0x49eC7192BF804Abc289645ca86F1eD01a6C17713',\n accountFactoryAddress: '0xC06Ad8573022e2BE416CA89DA47E8c592971679A',\n cleanifyCampaignsContractAddress:\n '0x7a11D63338576aE8c038868433ea199d7E5319A6',\n cleanifyChallengesContractAddress:\n '0xa58681692AdDD2e8E37f9113D40Bb9253C03F65e',\n veWorldSubdomainClaimerContractAddress:\n '0x0000000000000000000000000000000000000000',\n vetDomainsContractAddress: '0x0000000000000000000000000000000000000000',\n vetDomainsPublicResolverAddress:\n '0x0000000000000000000000000000000000000000',\n vetDomainsReverseRegistrarAddress:\n '0x5c970901a587BA3932C835D4ae5FAE2BEa7e78Bc',\n vnsResolverAddress: '0x0000000000000000000000000000000000000000',\n gloDollarContractAddress: '0x0000000000000000000000000000000000000000',\n vetDomainAvatarUrl: 'https://testnet.vet.domains/api/avatar',\n indexerUrl: 'https://b3tr.testnet.vechain.org/api/v1',\n b3trIndexerUrl: 'https://b3tr.testnet.vechain.org/api/v1',\n graphQlIndexerUrl: 'https://graph.vet/subgraphs/name/vns',\n nodeUrl: 'http://localhost:8669',\n network: {\n id: 'solo',\n name: 'solo',\n type: 'solo',\n defaultNet: true,\n urls: ['http://localhost:8669'],\n explorerUrl: 'https://explore-testnet.vechain.org',\n blockTime: 10000,\n genesis: {\n number: 0,\n id: '0x00000000c05a20fbca2bf6ae3affba6af4a74b800b585bf7a4988aba7aea69f6',\n size: 170,\n parentID:\n '0xffffffff53616c757465202620526573706563742c20457468657265756d2100',\n timestamp: 1530316800,\n gasLimit: 10000000,\n beneficiary: '0x0000000000000000000000000000000000000000',\n gasUsed: 0,\n totalScore: 0,\n txsRoot:\n '0x45b0cfc220ceec5b7c1c62c4d4193d38e4eba48e8815729ce75f9c0ab0e4c1c0',\n txsFeatures: 0,\n stateRoot:\n '0x93de0ffb1f33bc0af053abc2a87c4af44594f5dcb1cb879dd823686a15d68550',\n receiptsRoot:\n '0x45b0cfc220ceec5b7c1c62c4d4193d38e4eba48e8815729ce75f9c0ab0e4c1c0',\n signer: '0x0000000000000000000000000000000000000000',\n isTrunk: true,\n transactions: [],\n },\n },\n explorerUrl: 'https://explore-testnet.vechain.org',\n};\nexport default config;\n","import { AppConfig } from './appConfig';\n\nconst config: AppConfig = {\n ipfsFetchingService: 'https://api.dev.gateway-proxy.vechain.org/ipfs',\n ipfsPinningService:\n 'https://api.dev.gateway-proxy.vechain.org/api/v1/pinning/pinFileToIPFS',\n vthoContractAddress: '0x0000000000000000000000000000456E65726779',\n b3trContractAddress: '0xbf64cf86894Ee0877C4e7d03936e35Ee8D8b864F',\n vot3ContractAddress: '0xa704c45971995467696EE9544Da77DD42Bc9706E',\n b3trGovernorAddress: '0xDF5E114D391CAC840529802fe8D01f6bdeBE41eC',\n timelockContractAddress: '0x30ee94F303643902a68aD8A7A6456cA69d763192',\n xAllocationPoolContractAddress:\n '0x9B9CA9D0C41Add1d204f90BA0E9a6844f1843A84',\n xAllocationVotingContractAddress:\n '0x5859ff910d8b0c127364c98E24233b0af7443c1c',\n emissionsContractAddress: '0x3D7616213191a10460e49CfdB7edBf88D6a10942',\n voterRewardsContractAddress: '0x2E47fc4aabB3403037fB5E1f38995E7a91Ce8Ed2',\n galaxyMemberContractAddress: '0xa9aC49C030c1148b95F056E86f2531f8F3d5bf27',\n x2EarnCreatorContractAddress: '',\n nodeManagementContractAddress: '',\n x2EarnAppsContractAddress: '0xcB23Eb1bBD5c07553795b9538b1061D0f4ABA153',\n treasuryContractAddress: '0x039893EBe092A2D22B08E2b029735D211bfF7F50',\n x2EarnRewardsPoolContractAddress:\n '0x5F8f86B8D0Fa93cdaE20936d150175dF0205fB38',\n veBetterPassportContractAddress:\n '0x63c061a2753e84635a22ff05954e1687f104f002',\n veDelegate: '0xfc32a9895C78CE00A1047d602Bd81Ea8134CC32b',\n veDelegateVotes: '0xeb71148c9B3cd57e228c2152d79f6e78F5F1ef9a',\n veDelegateTokenContractAddress:\n '0xD3f7b82Df5705D34f64C634d2dEf6B1cB3116950',\n oracleContractAddress: '0xdcCAaBd81B38e0dEEf4c202bC7F1261A4D9192C6',\n accountFactoryAddress: '0x713b908Bcf77f3E00EFEf328E50b657a1A23AeaF',\n cleanifyCampaignsContractAddress:\n '0x22d19ACBD2cBf6b2B6C546395c26B9Cb448248BF',\n cleanifyChallengesContractAddress:\n '0x8Cc885DC3e5c376632CCEA0e8e1a51F1B3572442',\n veWorldSubdomainClaimerContractAddress:\n '0xe5af50e7ad1aaab4fbe4efbb2b30f764013918b3',\n vetDomainsContractAddress: '0xcBFB30c1F267914816668d53AcBA7bA7c9806D13',\n vetDomainsPublicResolverAddress:\n '0xA6eFd130085a127D090ACb0b100294aD1079EA6f',\n vetDomainsReverseRegistrarAddress:\n '0x6878f1aD5e3015310CfE5B38d7B7071C5D8818Ca',\n vnsResolverAddress: '0xc403b8EA53F707d7d4de095f0A20bC491Cf2bc94',\n gloDollarContractAddress: '0x0000000000000000000000000000000000000000',\n vetDomainAvatarUrl: 'https://testnet.vet.domains/api/avatar',\n indexerUrl: 'https://indexer.testnet.vechain.org/api/v1',\n b3trIndexerUrl: 'https://indexer.testnet.vechain.org/api/v1',\n graphQlIndexerUrl: 'https://graph.vet/subgraphs/name/vns',\n nodeUrl: 'https://testnet.vechain.org',\n network: {\n id: 'testnet',\n name: 'testnet',\n type: 'test',\n defaultNet: true,\n urls: [\n 'https://testnet.vechain.org',\n 'https://vethor-node-test.vechaindev.com',\n 'https://sync-testnet.veblocks.net',\n 'https://testnet.vecha.in',\n ],\n explorerUrl: 'https://insight.vecha.in/#/test',\n blockTime: 10000,\n genesis: {\n number: 0,\n id: '0x000000000b2bce3c70bc649a02749e8687721b09ed2e15997f466536b20bb127',\n size: 170,\n parentID:\n '0xffffffff00000000000000000000000000000000000000000000000000000000',\n timestamp: 1530014400,\n gasLimit: 10000000,\n beneficiary: '0x0000000000000000000000000000000000000000',\n gasUsed: 0,\n totalScore: 0,\n txsRoot:\n '0x45b0cfc220ceec5b7c1c62c4d4193d38e4eba48e8815729ce75f9c0ab0e4c1c0',\n txsFeatures: 0,\n stateRoot:\n '0x4ec3af0acbad1ae467ad569337d2fe8576fe303928d35b8cdd91de47e9ac84bb',\n receiptsRoot:\n '0x45b0cfc220ceec5b7c1c62c4d4193d38e4eba48e8815729ce75f9c0ab0e4c1c0',\n signer: '0x0000000000000000000000000000000000000000',\n isTrunk: true,\n transactions: [],\n },\n },\n explorerUrl: 'https://explore-testnet.vechain.org/transactions',\n};\nexport default config;\n","import { AppConfig } from './appConfig';\nconst config: AppConfig = {\n ipfsFetchingService: 'https://api.gateway-proxy.vechain.org/ipfs',\n indexerUrl: 'https://indexer.mainnet.vechain.org/api/v1',\n ipfsPinningService:\n 'https://api.gateway-proxy.vechain.org/api/v1/pinning/pinFileToIPFS',\n b3trIndexerUrl: 'https://indexer.mainnet.vechain.org/api/v1',\n graphQlIndexerUrl: 'https://graph.vet/subgraphs/name/vns',\n nodeUrl: 'https://mainnet.vechain.org',\n network: {\n id: 'main',\n name: 'main',\n type: 'main',\n defaultNet: true,\n urls: [\n 'https://mainnet.vechain.org',\n 'https://vethor-node.vechain.com',\n 'https://mainnet.veblocks.net',\n 'https://mainnet.vecha.in',\n ],\n explorerUrl: 'https://vechainstats.com',\n blockTime: 10000,\n genesis: {\n number: 0,\n id: '0x00000000851caf3cfdb6e899cf5958bfb1ac3413d346d43539627e6be7ec1b4a',\n size: 170,\n parentID:\n '0xffffffff53616c757465202620526573706563742c20457468657265756d2100',\n timestamp: 1530316800,\n gasLimit: 10000000,\n beneficiary: '0x0000000000000000000000000000000000000000',\n gasUsed: 0,\n totalScore: 0,\n txsRoot:\n '0x45b0cfc220ceec5b7c1c62c4d4193d38e4eba48e8815729ce75f9c0ab0e4c1c0',\n txsFeatures: 0,\n stateRoot:\n '0x09bfdf9e24dd5cd5b63f3c1b5d58b97ff02ca0490214a021ed7d99b93867839c',\n receiptsRoot:\n '0x45b0cfc220ceec5b7c1c62c4d4193d38e4eba48e8815729ce75f9c0ab0e4c1c0',\n signer: '0x0000000000000000000000000000000000000000',\n isTrunk: true,\n transactions: [],\n },\n },\n explorerUrl: 'https://vechainstats.com/transaction',\n // general\n vthoContractAddress: '0x0000000000000000000000000000456E65726779',\n //VeBetterDAO\n b3trContractAddress: '0x5ef79995FE8a89e0812330E4378eB2660ceDe699',\n vot3ContractAddress: '0x76Ca782B59C74d088C7D2Cce2f211BC00836c602',\n b3trGovernorAddress: '0x1c65C25fABe2fc1bCb82f253fA0C916a322f777C',\n timelockContractAddress: '0x7B7EaF620d88E38782c6491D7Ce0B8D8cF3227e4',\n xAllocationPoolContractAddress:\n '0x4191776F05f4bE4848d3f4d587345078B439C7d3',\n xAllocationVotingContractAddress:\n '0x89A00Bb0947a30FF95BEeF77a66AEdE3842Fe5B7',\n emissionsContractAddress: '0xDf94739bd169C84fe6478D8420Bb807F1f47b135',\n voterRewardsContractAddress: '0x838A33AF756a6366f93e201423E1425f67eC0Fa7',\n galaxyMemberContractAddress: '0x93B8cD34A7Fc4f53271b9011161F7A2B5fEA9D1F',\n treasuryContractAddress: '0xD5903BCc66e439c753e525F8AF2FeC7be2429593',\n x2EarnAppsContractAddress: '0x8392B7CCc763dB03b47afcD8E8f5e24F9cf0554D',\n x2EarnRewardsPoolContractAddress:\n '0x6Bee7DDab6c99d5B2Af0554EaEA484CE18F52631',\n x2EarnCreatorContractAddress: '0xe8e96a768ffd00417d4bd985bec9EcfC6F732a7f',\n nodeManagementContractAddress: '0xB0EF9D89C6b49CbA6BBF86Bf2FDf0Eee4968c6AB',\n veBetterPassportContractAddress:\n '0x35a267671d8EDD607B2056A9a13E7ba7CF53c8b3',\n //veDelegate\n veDelegate: '0xfc32a9895C78CE00A1047d602Bd81Ea8134CC32b',\n veDelegateVotes: '0xeb71148c9B3cd57e228c2152d79f6e78F5F1ef9a',\n veDelegateTokenContractAddress:\n '0xD3f7b82Df5705D34f64C634d2dEf6B1cB3116950',\n //utility\n oracleContractAddress: '0x49eC7192BF804Abc289645ca86F1eD01a6C17713',\n accountFactoryAddress: '0xC06Ad8573022e2BE416CA89DA47E8c592971679A',\n //cleanify\n cleanifyCampaignsContractAddress:\n '0x7a11D63338576aE8c038868433ea199d7E5319A6',\n cleanifyChallengesContractAddress:\n '0xa58681692AdDD2e8E37f9113D40Bb9253C03F65e',\n veWorldSubdomainClaimerContractAddress:\n '0xa4173c32fe8a61a8fd0d0234675b559fc360446a',\n vetDomainsContractAddress: '0xa9231da8BF8D10e2df3f6E03Dd5449caD600129b',\n vetDomainsPublicResolverAddress:\n '0xabac49445584C8b6c1472b030B1076Ac3901D7cf',\n vetDomainsReverseRegistrarAddress:\n '0x5c970901a587BA3932C835D4ae5FAE2BEa7e78Bc',\n vnsResolverAddress: '0xA11413086e163e41901bb81fdc5617c975Fa5a1A',\n vetDomainAvatarUrl: 'https://vet.domains/api/avatar',\n gloDollarContractAddress: '0x29c630cce4ddb23900f5fe66ab55e488c15b9f5e',\n};\nexport default config;\n","import localConfig from './solo';\nimport testnetConfig from './testnet';\nimport mainnetConfig from './mainnet';\nimport { NETWORK_TYPE } from './network';\n\n// Re-export AppConfig from appConfig.ts to maintain backward compatibility\n// while avoiding circular dependency with network config files\nexport type { AppConfig } from './appConfig';\nimport type { AppConfig } from './appConfig';\n\nexport const getConfig = (env: NETWORK_TYPE): AppConfig => {\n if (env === 'solo') return localConfig;\n if (env === 'test') return testnetConfig;\n if (env === 'main') return mainnetConfig;\n throw new Error(`Unsupported NETWORK_TYPE ${env}`);\n};\n","import { Icon, IconProps } from '@chakra-ui/react';\nimport React from 'react';\n\ntype Props = Omit<IconProps, 'dangerouslySetInnerHTML'>;\n\nexport const VOT3Logo: React.FC<Props> = ({ ...props }) => {\n return (\n <Icon viewBox=\"0 0 1684.56 1684.56\" {...props}>\n <rect\n fill=\"#b1f16c\"\n width=\"1684.56\"\n height=\"1684.56\"\n rx=\"157.74\"\n ry=\"157.74\"\n />\n <path\n fill=\"#1d1d1d\"\n d=\"M844.98,1386.28c-41.46,0-75.1-33.9-75.1-75.67,0-142.78-86.35-274.05-158.8-359.01-89.72-105.25-197.89-186.19-265.28-219.75-37.18-18.54-52.43-63.88-34.09-101.35,18.39-37.47,63.39-52.83,100.58-34.35,75.09,37.41,202.11,127.08,312.7,256.82,32.24,37.81,66.77,83.5,97.66,135.35,34.2-108.83,79.98-205.07,121.61-280.12,91.8-165.56,214.37-317.13,319.84-395.63,33.36-24.83,80.39-17.68,105.02,15.93,24.64,33.61,17.55,81-15.81,105.82-88.03,65.47-197.1,201.95-277.93,347.68-70.82,127.7-155.25,323.08-155.25,528.6,0,41.78-33.64,75.67-75.1,75.67h-.06Z\"\n />\n </Icon>\n );\n};\n","import { VeBetterIcon, VTHOLogo } from '../assets';\nimport { VETLogo } from '../assets/icons/VechainLogo/VETLogo';\nimport { VOT3Logo } from '../assets/icons/VechainLogo/VOT3Logo';\nimport { getLocalStorageItem } from './ssrUtils';\nimport type {\n GasTokenPreferences,\n GasTokenType,\n GasTokenInfo,\n} from '../types/gasToken';\nimport { getConfig } from '../config';\nimport {\n GENERIC_DELEGATOR_MAINNET_URL,\n GENERIC_DELEGATOR_TESTNET_URL,\n VECHAIN_KIT_WEBSITE_BASE_URL,\n COINMARKETCAP_STATIC_BASE_URL,\n VECHAIN_TOKEN_REGISTRY_ASSETS_BASE_URL,\n IMAGE_NOT_FOUND_URL,\n CLEANIFY_APP_BASE_URL,\n EVEARN_BASE_URL,\n GREENCART_BASE_URL,\n MUGSHOT_BASE_URL,\n} from '../constants';\n\nexport const TOKEN_LOGOS: Record<string, string> = {\n VET: new URL(\n '/static/img/coins/64x64/3077.png',\n COINMARKETCAP_STATIC_BASE_URL,\n ).toString(),\n VTHO: new URL(\n '/static/img/coins/64x64/3012.png',\n COINMARKETCAP_STATIC_BASE_URL,\n ).toString(),\n B3TR: new URL(\n '/static/img/coins/64x64/33509.png',\n COINMARKETCAP_STATIC_BASE_URL,\n ).toString(),\n VOT3: new URL(\n '/17ff70aa1d898bc97ad690dbfad1a3b5643f7e0b.png',\n COINMARKETCAP_STATIC_BASE_URL,\n ).toString(),\n veDelegate: new URL(\n '1c641b86096d56bf13d49f38388accd6db8b8b2e.png',\n VECHAIN_TOKEN_REGISTRY_ASSETS_BASE_URL,\n ).toString(),\n USDGLO: new URL(\n '/static/img/coins/64x64/23888.png',\n COINMARKETCAP_STATIC_BASE_URL,\n ).toString(),\n};\n\nexport const TOKEN_LOGO_COMPONENTS: Record<string, JSX.Element> = {\n VET: <VETLogo />,\n VTHO: <VTHOLogo />,\n B3TR: <VeBetterIcon />,\n VOT3: <VOT3Logo />,\n};\n\nexport const VECHAIN_PRIVY_APP_ID = 'cm4wxxujb022fyujl7g0thb21';\n\nexport const notFoundImage = IMAGE_NOT_FOUND_URL;\n\nexport enum TogglePassportCheck {\n WhitelistCheck = 1,\n BlacklistCheck = 2,\n SignalingCheck = 3,\n ParticipationScoreCheck = 4,\n GmOwnershipCheck = 5,\n}\n\nexport const VECHAIN_KIT_STORAGE_KEYS = {\n NETWORK: 'vechain-kit:network',\n};\n\n// SSR-safe ENV getter function\nexport const getENV = () => {\n // During SSR, always return safe defaults\n if (typeof window === 'undefined') {\n return {\n isDevelopment: false,\n isProduction: true,\n };\n }\n\n // In browser, check localStorage using SSR-safe utility\n const network = getLocalStorageItem(VECHAIN_KIT_STORAGE_KEYS.NETWORK);\n return {\n isDevelopment: network === 'test',\n isProduction: network === 'main',\n };\n};\n\n// For backward compatibility, create a getter-based ENV object\n// This ensures ENV properties are evaluated lazily and won't crash during SSR\nexport const ENV = {\n get isDevelopment() {\n return getENV().isDevelopment;\n },\n get isProduction() {\n return getENV().isProduction;\n },\n};\n\nexport const getGenericDelegatorUrl = () => {\n const env = getENV();\n return env.isProduction\n ? `${GENERIC_DELEGATOR_MAINNET_URL}/api/v1/`\n : `${GENERIC_DELEGATOR_TESTNET_URL}/api/v1/`; // or url to your delegator\n};\n\nexport type PrivyEcosystemApp = {\n id: string;\n name: string;\n website: string;\n};\n\nexport const DEFAULT_PRIVY_ECOSYSTEM_APPS: PrivyEcosystemApp[] = [\n {\n id: 'clz41gcg00e4ay75dmq3uzzgr',\n name: 'Cleanify',\n website: CLEANIFY_APP_BASE_URL,\n },\n {\n id: 'cm153hrup0817axti38avlfyg',\n name: 'GreenCart',\n website: GREENCART_BASE_URL,\n },\n {\n id: 'clv9sfos20j6x1431ga80d95f',\n name: 'Mughsot',\n website: MUGSHOT_BASE_URL,\n },\n {\n id: 'cm4l8tiai070i108zo17oieyc',\n name: 'EVearn',\n website: EVEARN_BASE_URL,\n },\n];\n\n//Hardcoded for displaying in the \"Terms and Privacy\" agreements modal\nexport const VECHAIN_KIT_TERMS_CONFIG = {\n url: new URL('terms', VECHAIN_KIT_WEBSITE_BASE_URL).toString(),\n version: 1,\n required: true,\n displayName: 'Vechain Kit Terms',\n};\n\n//Hardcoded for showing up if allowAnalytics is true\n//So we ask users if they agree with data tracking\nexport const VECHAIN_KIT_COOKIES_CONFIG = {\n url: new URL('cookies', VECHAIN_KIT_WEBSITE_BASE_URL).toString(),\n version: 1,\n required: false,\n displayName: 'Vechain Kit Cookies',\n};\n\nexport const DEFAULT_GAS_TOKEN_PREFERENCES: GasTokenPreferences = {\n tokenPriority: ['VET', 'B3TR', 'VTHO'],\n availableGasTokens: ['VET', 'B3TR', 'VTHO'],\n excludedTokens: [],\n alwaysConfirm: false,\n gasTokenToUse: 'VET',\n};\n\nexport const SUPPORTED_GAS_TOKENS: Record<GasTokenType, GasTokenInfo> = {\n B3TR: {\n type: 'B3TR',\n name: 'B3TR Token',\n symbol: 'B3TR',\n address: getConfig(\n (process.env.NEXT_PUBLIC_NETWORK_TYPE as any) || 'test',\n ).b3trContractAddress,\n description: 'Pay gas with B3TR',\n },\n VET: {\n type: 'VET',\n name: 'VET Token',\n symbol: 'VET',\n description: 'Pay gas with VET',\n },\n VTHO: {\n type: 'VTHO',\n name: 'VTHO Token',\n symbol: 'VTHO',\n address: getConfig(\n (process.env.NEXT_PUBLIC_NETWORK_TYPE as any) || 'test',\n ).vthoContractAddress,\n description: 'Pay gas with VTHO',\n },\n};\n","import { picasso } from '@vechain/picasso';\nimport { BigNumber } from 'bignumber.js';\nimport { formatEther } from 'ethers';\n\nexport const humanAddress = (\n address: string,\n charAtStart = 6,\n charAtEnd = 4,\n): string => `${address.slice(0, charAtStart)}•••${address.slice(-charAtEnd)}`;\n\nexport const humanDomain = (\n domain: string,\n lengthBefore = 8,\n lengthAfter = 6,\n) => {\n // if domain is smaller than lengthBefore + lengthAfter, return the domain\n if (domain.length <= lengthBefore + lengthAfter) return domain;\n\n const before = domain.substring(0, lengthBefore);\n const after = domain.substring(domain.length - lengthAfter);\n return `${before}•••${after}`;\n};\n\nexport const humanNumber = (\n formattedValue: BigNumber.Value,\n originalValue?: BigNumber.Value,\n symbol: string | null = null,\n) => {\n const suffix = symbol ? ' ' + symbol : '';\n\n originalValue = originalValue || formattedValue;\n const formatter = new Intl.NumberFormat('en-US', {\n style: 'decimal',\n minimumFractionDigits:\n Number.parseFloat(formattedValue.toString()) % 1 === 0 ? 0 : 2,\n });\n\n let value = formatter.format(\n roundDownSignificantDigits(Number(formattedValue), 2),\n );\n\n //If the original number got scaled down to 0\n if (!isZero(originalValue) && isZero(value)) {\n value = '< 0.01';\n }\n\n return value + suffix;\n};\n\nexport const isZero = (value?: BigNumber.Value) => {\n if (!value && value !== 0) return false;\n return new BigNumber(value).isZero();\n};\n\nexport const getPicassoImage = (address: string, base64 = false): string => {\n const image = picasso(address.toLowerCase());\n if (base64) {\n const base64data = Buffer.from(image, 'utf8').toString('base64');\n return `data:image/svg+xml;base64,${base64data}`;\n }\n return `data:image/svg+xml;utf8,${image}`;\n};\n\n/**\n * Format the number human friendly\n * @param formattedValue - value in string or number\n * @param originalValue - value in string or number to determine if the original value is 0\n * @param symbol - (optional) symbol to append at end of number (with a space)\n * @returns the formatted number\n */\n\nfunction roundDownSignificantDigits(numbers: number, decimals: number = 0) {\n if (typeof numbers !== 'number' || typeof decimals !== 'number') {\n throw new Error(\n 'Invalid input: number and decimals must be of type number',\n );\n }\n\n const significantDigits = parseInt(\n numbers.toExponential().split('e-')[1] || '0',\n 10,\n );\n\n const effectiveDecimals = Math.max(0, decimals + significantDigits);\n const scaleFactor = Math.pow(10, effectiveDecimals);\n\n return Math.floor(numbers * scaleFactor) / scaleFactor;\n}\n\n/**\n * Format the token balance human friendly\n * @param balance - balance in bigint\n * @returns the formatted balance in the form of {@link TokenBalance} (original, scaled down and formatted)\n */\nexport const formatTokenBalance = (balance: bigint) => {\n const scaled = formatEther(balance);\n const formatted = scaled === '0' ? '0' : humanNumber(scaled);\n return {\n original: balance.toString(),\n scaled,\n formatted,\n };\n};\n","import {\n generatePrivateKey,\n privateKeyToAccount,\n Account,\n} from 'viem/accounts';\n\nexport const randomTransactionUser: {\n privateKey: string;\n account: Account;\n address: string;\n} = (() => {\n const privateKey = generatePrivateKey();\n const account = privateKeyToAccount(privateKey);\n return {\n privateKey,\n account,\n address: account.address,\n };\n})();\n","const PREFIX = '0x';\nconst PREFIX_REGEX = /^0[xX]/;\nconst HEX_REGEX = /^(0[xX])?[a-fA-F0-9]+$/;\n\n/**\n * Returns the provied hex string with the hex prefix removed.\n * If the prefix doesn't exist the hex is returned unmodified\n * @param hex - the input hex string\n * @returns the input hex string with the hex prefix removed\n * @throws an error if the input is not a valid hex string\n */\nexport const removePrefix = (hex: string): string => {\n validate(hex);\n return hex.replace(PREFIX_REGEX, '');\n};\n\n/**\n * Returns the provided hex string with the hex prefix added.\n * If the prefix already exists the string is returned unmodified.\n * If the string contains an UPPER case `X` in the prefix it will be replaced with a lower case `x`\n * @param hex - the input hex string\n * @returns the input hex string with the hex prefix added\n * @throws an error if the input is not a valid hex string\n */\nexport const addPrefix = (hex: string): string => {\n validate(hex);\n return PREFIX_REGEX.test(hex)\n ? hex.replace(PREFIX_REGEX, PREFIX)\n : `${PREFIX}${hex}`;\n};\n\n/**\n * Validate the hex string. Throws an Error if not valid\n * @param hex - the input hex string\n * @throws an error if the input is not a valid hex string\n */\nexport const validate = (hex: string) => {\n if (!isValid(hex)) throw Error('Provided hex value is not valid');\n};\n\n/**\n * Check if input string is valid\n * @param hex - the input hex string\n * @returns boolean representing whether the input hex is valid\n */\nexport const isValid = (hex?: string | null): boolean => {\n return !!hex && HEX_REGEX.test(hex);\n};\n\nexport const isInvalid = (hex?: string | null): boolean => {\n return !isValid(hex);\n};\n\nexport const normalize = (hex: string): string => {\n return addPrefix(hex.toLowerCase().trim());\n};\n\nexport const compare = (hex1: string, hex2: string): boolean => {\n try {\n return (\n removePrefix(hex1).toLowerCase() ===\n removePrefix(hex2).toLowerCase()\n );\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (e) {\n return false;\n }\n};\n","import * as HexUtils from './hexUtils';\nimport { Address } from '@vechain/sdk-core';\n\n/**\n * Checks if two addresses are equal. Returns true if both values are strings AND:\n * - The two values are equal OR\n * - The checksumed addresses are equal\n *\n * @param address1\n * @param address2\n */\nexport const compareAddresses = (\n address1?: string,\n address2?: string,\n): boolean => {\n if (!address1 || !address2) return false;\n\n if (address2 === address1) {\n return true;\n }\n\n try {\n return HexUtils.normalize(address1) === HexUtils.normalize(address2);\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (e) {\n return false;\n }\n};\n\nexport const compareListOfAddresses = (add1: string[], add2: string[]) => {\n if (add1.length !== add2.length) return false;\n const sortedAdd1 = [...add1]\n .map((e) => e.toLowerCase())\n .sort((a, b) => a.localeCompare(b));\n const sortedAdd2 = [...add2]\n .map((e) => e.toLowerCase())\n .sort((a, b) => a.localeCompare(b));\n\n for (let i = 0; i < sortedAdd1.length; i++) {\n if (!compareAddresses(sortedAdd1[i], sortedAdd2[i])) return false;\n }\n\n return true;\n};\n\nexport const regexPattern = () => {\n return /^0x[a-fA-F0-9]{40}$/;\n};\n\nexport const isValidAddress = Address.isValid;\n\nexport const leftPadWithZeros = (str: string, length: number): string => {\n // Remove '0x' prefix if it exists\n const cleanStr = str.startsWith('0x') ? str.slice(2) : str;\n if (cleanStr.length > length) {\n throw new Error('Input string is longer than the specified length');\n }\n // Pad the string to the specified length\n const paddedStr = cleanStr.padStart(length, '0');\n return `0x${paddedStr}`;\n};\n","import { getConfig } from '../config';\nimport { NETWORK_TYPE } from '../config/network';\n\n/**\n * Validate IPFS URI strings. An example of a valid IPFS URI is:\n * - ipfs://QmfSTia1TJUiKQ2fyW9NTPzEKNdjMGzbUgrC3QPSTpkum6/406.json\n * - ipfs://QmVPqKfwRXjg5Fqwy6RNRbKR2ZP4pKKVLvmfjmhQfdM3MH/4\n * - ipfs://QmVPqKfwRXjg5Fqwy6RNRbKR2ZP4pKKVLvmfjmhQfdM3MH\n * @param uri\n * @returns\n */\nexport const validateIpfsUri = (uri: string): boolean => {\n const trimmedUri = uri.trim();\n return /^ipfs:\\/\\/[a-zA-Z0-9]+(\\/[^/]+)*\\/?$/.test(trimmedUri);\n};\n\n/**\n * Converts a CID to an IPFS native URL.\n *\n * @param cid - The CID to convert.\n * @param fileName - The name of the file to append to the URL.\n *\n * @returns The IPFS URL in the format `ipfs://${cid}/${fileName}`.\n */\nexport function toIPFSURL(cid: string, fileName?: string): string {\n return `ipfs://${cid}/${fileName ?? ''}`;\n}\n\n/**\n * Uploads a blob to IPFS.\n * @param blob The Blob object to upload.\n * @param filename A name for the file in the FormData payload.\n * @param networkType The network type to use for the IPFS pinning service.\n * @returns The IPFS hash of the uploaded blob.\n */\nexport async function uploadBlobToIPFS(\n blob: Blob,\n filename: string,\n networkType: NETWORK_TYPE,\n): Promise<string> {\n try {\n const form = new FormData();\n form.append('file', blob, filename);\n const response = await fetch(\n getConfig(networkType).ipfsPinningService,\n {\n method: 'POST',\n headers: {\n 'X-Project-Id': 'vechain-kit',\n },\n body: form,\n },\n );\n\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n\n const data = await response.json();\n return data.IpfsHash;\n } catch (error) {\n console.error('Error uploading blob:', error);\n throw new Error('Failed to upload blob to IPFS');\n }\n}\n","import { LoginMethodOrderOption } from '@privy-io/react-auth';\nimport { TransactionClause } from '@vechain/sdk-core';\n\nexport type TokenBalance = {\n original: string;\n scaled: string;\n formatted: string;\n};\n\nexport type ENSRecords = {\n display?: string;\n description?: string;\n email?: string;\n url?: string;\n header?: string;\n notice?: string;\n location?: string;\n phone?: string;\n [key: string]: string | undefined;\n};\n\nexport type Wallet = {\n address: string;\n domain?: string;\n image?: string;\n isLoadingMetadata?: boolean;\n metadata?: ENSRecords;\n} | null;\n\nexport type SmartAccount = Wallet & {\n isDeployed: boolean;\n isActive: boolean;\n version: number | null;\n};\n\nexport type ConnectionSource = {\n type: 'privy' | 'wallet' | 'privy-cross-app';\n displayName: string;\n};\n\n/**\n * Data that the Privy user must sign in order to execute a transaction\n * by authorizing the Smart Account contract\n */\nexport type ExecuteWithAuthorizationSignData = {\n domain: {\n name: string;\n version: string;\n chainId: number;\n verifyingContract: string;\n };\n types: {\n ExecuteWithAuthorization: {\n name: string;\n type: string;\n }[];\n EIP712Domain: {\n name: string;\n type: string;\n }[];\n };\n primaryType: string;\n message: {\n validAfter: number;\n validBefore: number;\n to: string | null | undefined;\n value: string;\n data: string;\n };\n};\n\nexport type ExecuteBatchWithAuthorizationSignData = {\n domain: {\n name: string;\n version: string;\n chainId: number;\n verifyingContract: string;\n };\n types: {\n ExecuteBatchWithAuthorization: {\n name: string;\n type: string;\n }[];\n EIP712Domain: {\n name: string;\n type: string;\n }[];\n };\n primaryType: string;\n message: {\n to: string[] | null | undefined;\n value: string[] | null | undefined;\n data: string[] | null | undefined;\n validAfter: number;\n validBefore: number;\n nonce: string;\n };\n};\n\n/**\n * ready: the user has not clicked on the button yet\n * pending: the user has clicked on the button and we're waiting for the transaction to be sent\n * waitingConfirmation: the transaction has been sent and we're waiting for the transaction to be confirmed by the chain\n * success: the transaction has been confirmed by the chain\n * error: the transaction has failed\n * unknown: the transaction receipt has failed to load\n */\nexport type TransactionStatus =\n | 'ready'\n | 'pending'\n | 'waitingConfirmation'\n | 'success'\n | 'error'\n | 'unknown';\n\nexport type TransactionStatusErrorType = {\n type:\n | 'SendTransactionError'\n | 'TxReceiptError'\n | 'RevertReasonError'\n | 'UserRejectedError';\n reason?: string;\n};\n\n/**\n * An enhanced clause with a comment and an abi\n * @param comment a comment to add to the clause\n * @param abi the abi of the contract to call\n */\nexport type EnhancedClause = TransactionClause;\n\nexport type PrivyAppInfo = {\n id: string;\n name: string;\n logo_url: string;\n icon_url: string | null;\n terms_and_conditions_url: string;\n privacy_policy_url: string;\n theme: string;\n accent_color: string;\n wallet_auth: boolean;\n email_auth: boolean;\n google_oauth: boolean;\n twitter_oauth: boolean;\n url: string;\n website?: string;\n};\n\nexport type PrivyLoginMethod = LoginMethodOrderOption;\n\nexport interface CrossAppConnectionCache {\n timestamp: number;\n ecosystemApp: {\n name: string;\n logoUrl?: string;\n appId: string;\n website?: string;\n };\n}\n\nexport enum NFTMediaType {\n IMAGE = 'image',\n VIDEO = 'video',\n UNKNOWN = 'unknown',\n TEXT = 'text', // mp4 appears as text sometimes\n}\n\nexport enum VePassportUserStatus {\n NONE = 'NONE',\n WHITELIST = 'WHITELIST',\n BLACKLIST = 'BLACKLIST',\n}\n\nexport type CURRENCY = 'usd' | 'gbp' | 'eur';\n\nexport const CURRENCY_SYMBOLS: Record<CURRENCY, string> = {\n usd: '$',\n gbp: '£',\n eur: '€',\n};\n\n/**\n * Legal document configuration for terms, privacy policy, and cookies\n * Used by VeChainKitProvider and LegalDocumentsProvider\n */\nexport type LegalDocument = {\n url: string;\n version: number;\n required: boolean;\n displayName?: string;\n};\n\n/**\n * Options for configuring legal documents in VeChainKitProvider\n */\nexport type LegalDocumentOptions = {\n privacyPolicy?: LegalDocument[];\n termsAndConditions?: LegalDocument[];\n cookiePolicy?: LegalDocument[];\n};\n","export const ENS_TEXT_RECORDS = [\n 'display',\n 'avatar',\n 'description',\n 'keywords',\n 'email',\n 'url',\n 'header',\n 'notice',\n 'location',\n 'phone',\n 'com.x',\n] as const;\n\nexport type TextRecords = {\n [K in (typeof ENS_TEXT_RECORDS)[number]]?: string;\n};\n","export interface VthoPerGasAtSpeed {\n regular: number;\n medium: number;\n high: number;\n legacy: number;\n}\n\nexport interface EstimatedGas {\n vtho: number;\n vet: number;\n b3tr: number;\n smartAccount: number;\n}\n\nexport interface Rate {\n vtho: number;\n vet: number;\n b3tr: number;\n}\n\nexport interface CostLevel {\n vtho: number;\n vet: number;\n b3tr: number;\n vetWithSmartAccount: number;\n b3trWithSmartAccount: number;\n}\n\nexport interface TransactionCost {\n regular: CostLevel;\n medium: CostLevel;\n high: CostLevel;\n legacy: CostLevel;\n}\n\nexport interface EstimationResponse {\n vthoPerGasAtSpeed?: number;\n estimatedGas?: number;\n rate?: number;\n transactionCost?: number;\n serviceFee?: number;\n totalGasUsed?: number;\n}\n\nexport interface DepositAccount {\n depositAccount: string;\n}\n\nexport function calculateTotalCost(\n baseCost: number,\n serviceFeeRate: number,\n): number {\n return baseCost * (1 + serviceFeeRate);\n}\n\nexport function formatGasCost(amount: number, decimals: number = 4): string {\n return Number(amount).toLocaleString(undefined, {\n minimumFractionDigits: decimals,\n maximumFractionDigits: decimals,\n });\n}\n","export * from './types';\nexport * from './ensTextRecords';\nexport * from './gasToken';\nexport * from './gasEstimation';\nexport * from './modal';\n\n// Import LegalDocument from types.ts to avoid circular dependency with providers\nimport type { LegalDocument } from './types';\n\nexport enum LegalDocumentType {\n TERMS = 'terms',\n PRIVACY = 'privacy',\n COOKIES = 'cookies',\n}\n\nexport enum LegalDocumentSource {\n VECHAIN_KIT = 'vechain-kit',\n APPLICATION = 'application',\n}\n\n// Base type for all legal documents (terms, privacy policy, cookies)\nexport type EnrichedLegalDocument = LegalDocument & {\n id: string;\n documentType: LegalDocumentType;\n documentSource: LegalDocumentSource;\n};\n\n// Agreement record stored in localStorage\nexport type LegalDocumentAgreement = EnrichedLegalDocument & {\n walletAddress: string;\n timestamp: number;\n};\n","import { NFTMediaType } from \"@/types\"\n\nconst isValidMimeType = (mime: string, type: NFTMediaType[]) => {\n const found = type.find(t => {\n if (mime?.split(\"/\")[0] === t) {\n return true\n }\n })\n\n return !!found\n}\n\nexport const resolveMediaTypeFromMimeType = (mimeType: string): NFTMediaType => {\n if (isValidMimeType(mimeType, [NFTMediaType.IMAGE])) return NFTMediaType.IMAGE\n else if (isValidMimeType(mimeType, [NFTMediaType.VIDEO])) return NFTMediaType.VIDEO\n\n return NFTMediaType.UNKNOWN\n}\n","import { NETWORK_TYPE } from '../config/network';\nimport { validateIpfsUri } from './ipfs';\nimport { getConfig } from '../config';\n\n/**\n * Convert a URI to a URL\n * We support both IPFS and Arweave URIs. Both should be converted to their https gateway URLs.\n * All other URIs should pass through unchanged.\n *\n * @param uri\n */\nexport const convertUriToUrl = (uri: string, networkType: NETWORK_TYPE) => {\n // if it is a data uri just return it\n if (uri.startsWith('data:')) return uri;\n\n const splitUri = uri?.split('://');\n if (splitUri.length !== 2) return null;\n // if (splitUri.length !== 2) throw new Error(`Invalid URI ${uri}`);\n\n const protocol = splitUri?.[0]?.trim();\n const uriWithoutProtocol = splitUri[1];\n\n switch (protocol) {\n case 'ipfs':\n if (!validateIpfsUri(uri))\n throw new Error(`Invalid IPFS URI ${uri}`);\n\n // Check cache for IPFS document\n return `${\n getConfig(networkType).ipfsFetchingService\n }/${uriWithoutProtocol}`;\n\n case 'ar':\n return `https://arweave.net/${uriWithoutProtocol}`;\n\n default:\n return uri;\n }\n};\n","export const gmNfts = [\n {\n level: '1',\n name: 'Earth',\n image: '/images/nft-levels/0.png',\n multiplier: 1,\n b3trToUpgrade: 0,\n },\n {\n level: '2',\n name: 'Moon',\n image: '/images/nft-levels/1.png',\n multiplier: 1.1,\n b3trToUpgrade: 10_000,\n },\n {\n level: '3',\n name: 'Mercury',\n image: '/images/nft-levels/2.png',\n multiplier: 1.2,\n b3trToUpgrade: 25_000,\n },\n {\n level: '4',\n name: 'Venus',\n image: '/images/nft-levels/3.png',\n multiplier: 1.5,\n b3trToUpgrade: 50_000,\n },\n {\n level: '5',\n name: 'Mars',\n image: '/images/nft-levels/4.png',\n multiplier: 2,\n b3trToUpgrade: 100_000,\n },\n {\n level: '6',\n name: 'Jupiter',\n image: '/images/nft-levels/5.png',\n multiplier: 2.5,\n b3trToUpgrade: 250_000,\n },\n {\n level: '7',\n name: 'Saturn',\n image: '/images/nft-levels/6.png',\n multiplier: 3,\n b3trToUpgrade: 500_000,\n },\n {\n level: '8',\n name: 'Uranus',\n image: '/images/nft-levels/7.png',\n multiplier: 5,\n b3trToUpgrade: 2_500_000,\n },\n {\n level: '9',\n name: 'Neptune',\n image: '/images/nft-levels/8.png',\n multiplier: 10,\n b3trToUpgrade: 5_000_000,\n },\n {\n level: '10',\n name: 'Galaxy',\n image: '/images/nft-levels/9.png',\n multiplier: 25,\n b3trToUpgrade: 25_000_000,\n },\n];\n\n/**\n * Maps the XNode level to the GM starting level.\n */\nexport const xNodeToGMstartingLevel: Record<number, number> = {\n 1: 2,\n 2: 4,\n 3: 6,\n 4: 2,\n 5: 4,\n 6: 6,\n 7: 7,\n};\n","// Function to build query string dynamically\nexport const buildQueryString = (params: { [key: string]: any }) => {\n const searchParams = new URLSearchParams()\n\n // Iterate over the parameters and append only the defined values\n Object.keys(params).forEach(key => {\n const value = params[key]\n if (value !== undefined && value !== null) {\n searchParams.append(key, String(value))\n }\n })\n\n return searchParams.toString()\n}\n","/**\n * Map strength level coming from contract to hq image\n */\nexport const NodeStrengthLevelToImage: { [key: string]: string } = {\n \"0\": \"/images/vnt/00-noNode.webp\",\n \"1\": \"/images/vnt/01-strength.webp\",\n \"2\": \"/images/vnt/02-thunder.webp\",\n \"3\": \"/images/vnt/03-mjolnir.webp\",\n \"4\": \"/images/vnt/04-vethorX.webp\",\n \"5\": \"/images/vnt/05-strengthX.webp\",\n \"6\": \"/images/vnt/06-thunderX.webp\",\n \"7\": \"/images/vnt/07-mjolnirX.webp\",\n}\n\n//after this level the nfts are considered xNode\nexport const MinXNodeLevel = 4\nexport const EconomicNodeStrengthLevelToName: { [key: string]: string } = {\n \"1\": \"Strength\",\n \"2\": \"Thunder\",\n \"3\": \"Mjolnir\",\n}\n\nexport const XNodeStrengthLevelToName: { [key: string]: string } = {\n \"4\": \"VeThorX\",\n \"5\": \"StrengthX\",\n \"6\": \"ThunderX\",\n \"7\": \"MjolnirX\",\n}\n\nexport const allNodeStrengthLevelToName: { [key: string]: string } = {\n ...EconomicNodeStrengthLevelToName,\n ...XNodeStrengthLevelToName,\n}\n","export const TIME = {\n SECOND: 1000,\n MINUTE: 1000 * 60,\n HOUR: 1000 * 60 * 60,\n DAY: 1000 * 60 * 60 * 24,\n WEEK: 1000 * 60 * 60 * 24 * 7,\n MONTH: 1000 * 60 * 60 * 24 * 30,\n YEAR: 1000 * 60 * 60 * 24 * 365,\n}\n","/**\n * Checks if a string contains common rejection-related terms\n * @param errorMessage The error message to check\n * @returns boolean indicating if the message contains rejection terms\n */\nexport const isRejectionError = (errorMessage: string): boolean => {\n if (!errorMessage) return false;\n const rejectionTerms = ['rejected', 'cancelled', 'user denied', 'closed'];\n return rejectionTerms.some((term) =>\n errorMessage.toLowerCase().includes(term.toLowerCase()),\n );\n};\n\n/**\n * Generates a simple hash from a string using a 32-bit hash algorithm\n * @param input The string to hash\n * @returns A base-36 string representation of the hash\n */\nexport const simpleHash = (input: string): string => {\n let hash = 0;\n for (let i = 0; i < input.length; i++) {\n const char = input.charCodeAt(i);\n hash = (hash << 5) - hash + char;\n hash = hash & hash; // Convert to 32bit integer\n }\n return hash.toString(36);\n};\n","export const isValidUrl = (value: string) => {\n try {\n new URL(value);\n return true;\n } catch {\n return false;\n }\n};\n","import { ThorClient } from '@vechain/sdk-network';\nimport {\n ExtractAbiFunctionNames,\n AbiParametersToPrimitiveTypes,\n ExtractAbiFunction,\n} from 'abitype';\nimport { Abi, ContractFunctionParameters } from 'viem';\nimport type {\n MulticallParameters as viem_MulticallParameters,\n MulticallReturnType as viem_MulticallReturnType,\n} from 'viem';\n\ntype ExtractViewFunction<\n TAbi extends Abi,\n TMethod extends ExtractAbiFunctionNames<TAbi, 'pure' | 'view'>,\n> = Extract<\n TAbi[number],\n { type: 'function'; stateMutability: 'pure' | 'view'; name: TMethod }\n>;\n\nexport type ViewFunctionResult<\n TAbi extends Abi,\n TMethod extends ExtractAbiFunctionNames<TAbi, 'pure' | 'view'>,\n> = AbiParametersToPrimitiveTypes<\n ExtractViewFunction<TAbi, TMethod>['outputs'],\n 'outputs'\n>;\n\nexport type MultipleClausesCallParameters<\n contracts extends readonly unknown[] = readonly ContractFunctionParameters[],\n allowFailure extends boolean = true,\n> = viem_MulticallParameters<contracts, allowFailure>['contracts'];\n\nexport type MultipleClausesCallReturnType<\n contracts extends readonly unknown[] = readonly ContractFunctionParameters[],\n allowFailure extends boolean = true,\n> = viem_MulticallReturnType<contracts, allowFailure>;\n\nexport const executeCallClause = async <\n TAbi extends Abi,\n TMethod extends ExtractAbiFunctionNames<TAbi, 'pure' | 'view'>,\n>({\n thor,\n contractAddress,\n abi,\n method,\n args,\n}: {\n thor: ThorClient;\n contractAddress: string;\n abi: TAbi;\n method: TMethod;\n args: AbiParametersToPrimitiveTypes<\n ExtractAbiFunction<TAbi, TMethod>['inputs'],\n 'inputs'\n >;\n}) => {\n const contract = thor.contracts.load(contractAddress, abi);\n const res = await contract.read[method](...args);\n return res as ViewFunctionResult<TAbi, TMethod>;\n};\n\nexport const executeMultipleClausesCall = async <\n contracts extends readonly ContractFunctionParameters[],\n allowFailure extends boolean = false,\n>({\n thor,\n calls,\n}: {\n thor: ThorClient;\n calls: MultipleClausesCallParameters<contracts, allowFailure>;\n}) => {\n if (!Array.isArray(calls)) throw new Error('calls must be an array');\n\n const clauses = calls.map((call) =>\n thor.contracts\n .load(call.address, call.abi)\n .clause[call.functionName](...call.args),\n );\n const res = await thor.transactions.executeMultipleClausesCall(clauses);\n\n if (!res.every((r) => r.success))\n throw new Error('Failed to execute multiple clauses call');\n\n return res.map((r) => r.result.plain) as MultipleClausesCallReturnType<\n contracts,\n allowFailure\n >;\n};\n\nexport const buildCallClauses = <\n contracts extends readonly ContractFunctionParameters[],\n allowFailure extends boolean = false,\n>({\n thor,\n calls,\n}: {\n thor: ThorClient;\n calls: MultipleClausesCallParameters<contracts, allowFailure>;\n}) => {\n if (!Array.isArray(calls)) throw new Error('calls must be an array');\n\n return calls.map((call) =>\n thor.contracts\n .load(call.address, call.abi)\n .clause[call.functionName](...call.args),\n );\n};\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ const e=require(`./chunk-DjWAcSYV.cjs`),t=require(`./assets-YPd7adzM.cjs`),n=require(`./ssrUtils-C_5ZY26i.cjs`);let r=require(`react`);r=e.t(r);let i=require(`@chakra-ui/react`),a=require(`react/jsx-runtime`),o=require(`@vechain/picasso`),ee=require(`bignumber.js`),s=require(`ethers`),c=require(`viem/accounts`),l=require(`@vechain/sdk-core`);const te={ipfsFetchingService:`https://api.dev.gateway-proxy.vechain.org/ipfs`,ipfsPinningService:`https://api.dev.gateway-proxy.vechain.org/api/v1/pinning/pinFileToIPFS`,vthoContractAddress:`0x0000000000000000000000000000456E65726779`,b3trContractAddress:`0xd31A6f2DBa8785cE41AB68Ea192791B5175309F4`,vot3ContractAddress:`0x028Af33230576c1e073C8245F72a7A4aa53564E4`,b3trGovernorAddress:`0x36E0e9b46D56dF12Dd69fD560e41954C73cE9ded`,timelockContractAddress:`0x125389845c93Efcf6471BA8BE1AC19c11e128603`,xAllocationPoolContractAddress:`0xC8232c91E2f744E533322B99F95f809b9f7ec446`,xAllocationVotingContractAddress:`0x074F093f4C534a16cDD09cb4b2669713218A762a`,emissionsContractAddress:`0x6a084E85f38400790043788FcCee39595616aa3A`,voterRewardsContractAddress:`0xbAb852081C459c0060960287aDcf9a0C2c1dc4b8`,galaxyMemberContractAddress:`0xbdA1cff75d2D43AB9186Ada41fECF79e25c49Ba3`,treasuryContractAddress:`0xe9414513Fe0e3b9bf7a61eC5c1AC7Df943fB3e77`,x2EarnAppsContractAddress:`0x432C46476f4970575C43B19588A170D237dC4929`,x2EarnRewardsPoolContractAddress:`0x134E4Fce6761f660401808CF86aE0e62cE52a81E`,nodeManagementContractAddress:`0xa96B5057171D797298A71178b48449A7bC615D8E`,veBetterPassportContractAddress:`0x8db6D14452fE36ba86C341AfEFaC0f90A0Db2bcb`,x2EarnCreatorContractAddress:`0x4e5f7eb452e9ecd75c0B29e3540014cBe01bBF52`,veDelegate:`0xfc32a9895C78CE00A1047d602Bd81Ea8134CC32b`,veDelegateVotes:`0xeb71148c9B3cd57e228c2152d79f6e78F5F1ef9a`,veDelegateTokenContractAddress:`0xD3f7b82Df5705D34f64C634d2dEf6B1cB3116950`,oracleContractAddress:`0x49eC7192BF804Abc289645ca86F1eD01a6C17713`,accountFactoryAddress:`0xC06Ad8573022e2BE416CA89DA47E8c592971679A`,cleanifyCampaignsContractAddress:`0x7a11D63338576aE8c038868433ea199d7E5319A6`,cleanifyChallengesContractAddress:`0xa58681692AdDD2e8E37f9113D40Bb9253C03F65e`,veWorldSubdomainClaimerContractAddress:`0x0000000000000000000000000000000000000000`,vetDomainsContractAddress:`0x0000000000000000000000000000000000000000`,vetDomainsPublicResolverAddress:`0x0000000000000000000000000000000000000000`,vetDomainsReverseRegistrarAddress:`0x5c970901a587BA3932C835D4ae5FAE2BEa7e78Bc`,vnsResolverAddress:`0x0000000000000000000000000000000000000000`,gloDollarContractAddress:`0x0000000000000000000000000000000000000000`,vetDomainAvatarUrl:`https://testnet.vet.domains/api/avatar`,indexerUrl:`https://b3tr.testnet.vechain.org/api/v1`,b3trIndexerUrl:`https://b3tr.testnet.vechain.org/api/v1`,graphQlIndexerUrl:`https://graph.vet/subgraphs/name/vns`,nodeUrl:`http://localhost:8669`,network:{id:`solo`,name:`solo`,type:`solo`,defaultNet:!0,urls:[`http://localhost:8669`],explorerUrl:`https://explore-testnet.vechain.org`,blockTime:1e4,genesis:{number:0,id:`0x00000000c05a20fbca2bf6ae3affba6af4a74b800b585bf7a4988aba7aea69f6`,size:170,parentID:`0xffffffff53616c757465202620526573706563742c20457468657265756d2100`,timestamp:1530316800,gasLimit:1e7,beneficiary:`0x0000000000000000000000000000000000000000`,gasUsed:0,totalScore:0,txsRoot:`0x45b0cfc220ceec5b7c1c62c4d4193d38e4eba48e8815729ce75f9c0ab0e4c1c0`,txsFeatures:0,stateRoot:`0x93de0ffb1f33bc0af053abc2a87c4af44594f5dcb1cb879dd823686a15d68550`,receiptsRoot:`0x45b0cfc220ceec5b7c1c62c4d4193d38e4eba48e8815729ce75f9c0ab0e4c1c0`,signer:`0x0000000000000000000000000000000000000000`,isTrunk:!0,transactions:[]}},explorerUrl:`https://explore-testnet.vechain.org`};var ne=te;const u={ipfsFetchingService:`https://api.dev.gateway-proxy.vechain.org/ipfs`,ipfsPinningService:`https://api.dev.gateway-proxy.vechain.org/api/v1/pinning/pinFileToIPFS`,vthoContractAddress:`0x0000000000000000000000000000456E65726779`,b3trContractAddress:`0xbf64cf86894Ee0877C4e7d03936e35Ee8D8b864F`,vot3ContractAddress:`0xa704c45971995467696EE9544Da77DD42Bc9706E`,b3trGovernorAddress:`0xDF5E114D391CAC840529802fe8D01f6bdeBE41eC`,timelockContractAddress:`0x30ee94F303643902a68aD8A7A6456cA69d763192`,xAllocationPoolContractAddress:`0x9B9CA9D0C41Add1d204f90BA0E9a6844f1843A84`,xAllocationVotingContractAddress:`0x5859ff910d8b0c127364c98E24233b0af7443c1c`,emissionsContractAddress:`0x3D7616213191a10460e49CfdB7edBf88D6a10942`,voterRewardsContractAddress:`0x2E47fc4aabB3403037fB5E1f38995E7a91Ce8Ed2`,galaxyMemberContractAddress:`0xa9aC49C030c1148b95F056E86f2531f8F3d5bf27`,x2EarnCreatorContractAddress:``,nodeManagementContractAddress:``,x2EarnAppsContractAddress:`0xcB23Eb1bBD5c07553795b9538b1061D0f4ABA153`,treasuryContractAddress:`0x039893EBe092A2D22B08E2b029735D211bfF7F50`,x2EarnRewardsPoolContractAddress:`0x5F8f86B8D0Fa93cdaE20936d150175dF0205fB38`,veBetterPassportContractAddress:`0x63c061a2753e84635a22ff05954e1687f104f002`,veDelegate:`0xfc32a9895C78CE00A1047d602Bd81Ea8134CC32b`,veDelegateVotes:`0xeb71148c9B3cd57e228c2152d79f6e78F5F1ef9a`,veDelegateTokenContractAddress:`0xD3f7b82Df5705D34f64C634d2dEf6B1cB3116950`,oracleContractAddress:`0xdcCAaBd81B38e0dEEf4c202bC7F1261A4D9192C6`,accountFactoryAddress:`0x713b908Bcf77f3E00EFEf328E50b657a1A23AeaF`,cleanifyCampaignsContractAddress:`0x22d19ACBD2cBf6b2B6C546395c26B9Cb448248BF`,cleanifyChallengesContractAddress:`0x8Cc885DC3e5c376632CCEA0e8e1a51F1B3572442`,veWorldSubdomainClaimerContractAddress:`0xe5af50e7ad1aaab4fbe4efbb2b30f764013918b3`,vetDomainsContractAddress:`0xcBFB30c1F267914816668d53AcBA7bA7c9806D13`,vetDomainsPublicResolverAddress:`0xA6eFd130085a127D090ACb0b100294aD1079EA6f`,vetDomainsReverseRegistrarAddress:`0x6878f1aD5e3015310CfE5B38d7B7071C5D8818Ca`,vnsResolverAddress:`0xc403b8EA53F707d7d4de095f0A20bC491Cf2bc94`,gloDollarContractAddress:`0x0000000000000000000000000000000000000000`,vetDomainAvatarUrl:`https://testnet.vet.domains/api/avatar`,indexerUrl:`https://indexer.testnet.vechain.org/api/v1`,b3trIndexerUrl:`https://indexer.testnet.vechain.org/api/v1`,graphQlIndexerUrl:`https://graph.vet/subgraphs/name/vns`,nodeUrl:`https://testnet.vechain.org`,network:{id:`testnet`,name:`testnet`,type:`test`,defaultNet:!0,urls:[`https://testnet.vechain.org`,`https://vethor-node-test.vechaindev.com`,`https://sync-testnet.veblocks.net`,`https://testnet.vecha.in`],explorerUrl:`https://insight.vecha.in/#/test`,blockTime:1e4,genesis:{number:0,id:`0x000000000b2bce3c70bc649a02749e8687721b09ed2e15997f466536b20bb127`,size:170,parentID:`0xffffffff00000000000000000000000000000000000000000000000000000000`,timestamp:1530014400,gasLimit:1e7,beneficiary:`0x0000000000000000000000000000000000000000`,gasUsed:0,totalScore:0,txsRoot:`0x45b0cfc220ceec5b7c1c62c4d4193d38e4eba48e8815729ce75f9c0ab0e4c1c0`,txsFeatures:0,stateRoot:`0x4ec3af0acbad1ae467ad569337d2fe8576fe303928d35b8cdd91de47e9ac84bb`,receiptsRoot:`0x45b0cfc220ceec5b7c1c62c4d4193d38e4eba48e8815729ce75f9c0ab0e4c1c0`,signer:`0x0000000000000000000000000000000000000000`,isTrunk:!0,transactions:[]}},explorerUrl:`https://explore-testnet.vechain.org/transactions`};var d=u;const f={ipfsFetchingService:`https://api.gateway-proxy.vechain.org/ipfs`,indexerUrl:`https://indexer.mainnet.vechain.org/api/v1`,ipfsPinningService:`https://api.gateway-proxy.vechain.org/api/v1/pinning/pinFileToIPFS`,b3trIndexerUrl:`https://indexer.mainnet.vechain.org/api/v1`,graphQlIndexerUrl:`https://graph.vet/subgraphs/name/vns`,nodeUrl:`https://mainnet.vechain.org`,network:{id:`main`,name:`main`,type:`main`,defaultNet:!0,urls:[`https://mainnet.vechain.org`,`https://vethor-node.vechain.com`,`https://mainnet.veblocks.net`,`https://mainnet.vecha.in`],explorerUrl:`https://vechainstats.com`,blockTime:1e4,genesis:{number:0,id:`0x00000000851caf3cfdb6e899cf5958bfb1ac3413d346d43539627e6be7ec1b4a`,size:170,parentID:`0xffffffff53616c757465202620526573706563742c20457468657265756d2100`,timestamp:1530316800,gasLimit:1e7,beneficiary:`0x0000000000000000000000000000000000000000`,gasUsed:0,totalScore:0,txsRoot:`0x45b0cfc220ceec5b7c1c62c4d4193d38e4eba48e8815729ce75f9c0ab0e4c1c0`,txsFeatures:0,stateRoot:`0x09bfdf9e24dd5cd5b63f3c1b5d58b97ff02ca0490214a021ed7d99b93867839c`,receiptsRoot:`0x45b0cfc220ceec5b7c1c62c4d4193d38e4eba48e8815729ce75f9c0ab0e4c1c0`,signer:`0x0000000000000000000000000000000000000000`,isTrunk:!0,transactions:[]}},explorerUrl:`https://vechainstats.com/transaction`,vthoContractAddress:`0x0000000000000000000000000000456E65726779`,b3trContractAddress:`0x5ef79995FE8a89e0812330E4378eB2660ceDe699`,vot3ContractAddress:`0x76Ca782B59C74d088C7D2Cce2f211BC00836c602`,b3trGovernorAddress:`0x1c65C25fABe2fc1bCb82f253fA0C916a322f777C`,timelockContractAddress:`0x7B7EaF620d88E38782c6491D7Ce0B8D8cF3227e4`,xAllocationPoolContractAddress:`0x4191776F05f4bE4848d3f4d587345078B439C7d3`,xAllocationVotingContractAddress:`0x89A00Bb0947a30FF95BEeF77a66AEdE3842Fe5B7`,emissionsContractAddress:`0xDf94739bd169C84fe6478D8420Bb807F1f47b135`,voterRewardsContractAddress:`0x838A33AF756a6366f93e201423E1425f67eC0Fa7`,galaxyMemberContractAddress:`0x93B8cD34A7Fc4f53271b9011161F7A2B5fEA9D1F`,treasuryContractAddress:`0xD5903BCc66e439c753e525F8AF2FeC7be2429593`,x2EarnAppsContractAddress:`0x8392B7CCc763dB03b47afcD8E8f5e24F9cf0554D`,x2EarnRewardsPoolContractAddress:`0x6Bee7DDab6c99d5B2Af0554EaEA484CE18F52631`,x2EarnCreatorContractAddress:`0xe8e96a768ffd00417d4bd985bec9EcfC6F732a7f`,nodeManagementContractAddress:`0xB0EF9D89C6b49CbA6BBF86Bf2FDf0Eee4968c6AB`,veBetterPassportContractAddress:`0x35a267671d8EDD607B2056A9a13E7ba7CF53c8b3`,veDelegate:`0xfc32a9895C78CE00A1047d602Bd81Ea8134CC32b`,veDelegateVotes:`0xeb71148c9B3cd57e228c2152d79f6e78F5F1ef9a`,veDelegateTokenContractAddress:`0xD3f7b82Df5705D34f64C634d2dEf6B1cB3116950`,oracleContractAddress:`0x49eC7192BF804Abc289645ca86F1eD01a6C17713`,accountFactoryAddress:`0xC06Ad8573022e2BE416CA89DA47E8c592971679A`,cleanifyCampaignsContractAddress:`0x7a11D63338576aE8c038868433ea199d7E5319A6`,cleanifyChallengesContractAddress:`0xa58681692AdDD2e8E37f9113D40Bb9253C03F65e`,veWorldSubdomainClaimerContractAddress:`0xa4173c32fe8a61a8fd0d0234675b559fc360446a`,vetDomainsContractAddress:`0xa9231da8BF8D10e2df3f6E03Dd5449caD600129b`,vetDomainsPublicResolverAddress:`0xabac49445584C8b6c1472b030B1076Ac3901D7cf`,vetDomainsReverseRegistrarAddress:`0x5c970901a587BA3932C835D4ae5FAE2BEa7e78Bc`,vnsResolverAddress:`0xA11413086e163e41901bb81fdc5617c975Fa5a1A`,vetDomainAvatarUrl:`https://vet.domains/api/avatar`,gloDollarContractAddress:`0x29c630cce4ddb23900f5fe66ab55e488c15b9f5e`};var p=f;const m=e=>{if(e===`solo`)return ne;if(e===`test`)return d;if(e===`main`)return p;throw Error(`Unsupported NETWORK_TYPE ${e}`)},h=({...e})=>(0,a.jsxs)(i.Icon,{viewBox:`0 0 1684.56 1684.56`,...e,children:[(0,a.jsx)(`rect`,{fill:`#b1f16c`,width:`1684.56`,height:`1684.56`,rx:`157.74`,ry:`157.74`}),(0,a.jsx)(`path`,{fill:`#1d1d1d`,d:`M844.98,1386.28c-41.46,0-75.1-33.9-75.1-75.67,0-142.78-86.35-274.05-158.8-359.01-89.72-105.25-197.89-186.19-265.28-219.75-37.18-18.54-52.43-63.88-34.09-101.35,18.39-37.47,63.39-52.83,100.58-34.35,75.09,37.41,202.11,127.08,312.7,256.82,32.24,37.81,66.77,83.5,97.66,135.35,34.2-108.83,79.98-205.07,121.61-280.12,91.8-165.56,214.37-317.13,319.84-395.63,33.36-24.83,80.39-17.68,105.02,15.93,24.64,33.61,17.55,81-15.81,105.82-88.03,65.47-197.1,201.95-277.93,347.68-70.82,127.7-155.25,323.08-155.25,528.6,0,41.78-33.64,75.67-75.1,75.67h-.06Z`})]}),g={VET:new URL(`/static/img/coins/64x64/3077.png`,t.c).toString(),VTHO:new URL(`/static/img/coins/64x64/3012.png`,t.c).toString(),B3TR:new URL(`/static/img/coins/64x64/33509.png`,t.c).toString(),VOT3:new URL(`/17ff70aa1d898bc97ad690dbfad1a3b5643f7e0b.png`,t.c).toString(),veDelegate:new URL(`1c641b86096d56bf13d49f38388accd6db8b8b2e.png`,t.D).toString(),USDGLO:new URL(`/static/img/coins/64x64/23888.png`,t.c).toString()},_={VET:(0,a.jsx)(t.P,{}),VTHO:(0,a.jsx)(t.N,{}),B3TR:(0,a.jsx)(t.F,{}),VOT3:(0,a.jsx)(h,{})},re=`cm4wxxujb022fyujl7g0thb21`,ie=t.p;let ae=function(e){return e[e.WhitelistCheck=1]=`WhitelistCheck`,e[e.BlacklistCheck=2]=`BlacklistCheck`,e[e.SignalingCheck=3]=`SignalingCheck`,e[e.ParticipationScoreCheck=4]=`ParticipationScoreCheck`,e[e.GmOwnershipCheck=5]=`GmOwnershipCheck`,e}({});const v={NETWORK:`vechain-kit:network`},y=()=>{if(typeof window>`u`)return{isDevelopment:!1,isProduction:!0};let e=n.r(v.NETWORK);return{isDevelopment:e===`test`,isProduction:e===`main`}},b={get isDevelopment(){return y().isDevelopment},get isProduction(){return y().isProduction}},x=()=>y().isProduction?`${t.u}/api/v1/`:`${t.d}/api/v1/`,S=[{id:`clz41gcg00e4ay75dmq3uzzgr`,name:`Cleanify`,website:t.s},{id:`cm153hrup0817axti38avlfyg`,name:`GreenCart`,website:t.f},{id:`clv9sfos20j6x1431ga80d95f`,name:`Mughsot`,website:t.m},{id:`cm4l8tiai070i108zo17oieyc`,name:`EVearn`,website:t.l}],C={url:new URL(`terms`,t.T).toString(),version:1,required:!0,displayName:`Vechain Kit Terms`},w={url:new URL(`cookies`,t.T).toString(),version:1,required:!1,displayName:`Vechain Kit Cookies`},T={tokenPriority:[`VET`,`B3TR`,`VTHO`],availableGasTokens:[`VET`,`B3TR`,`VTHO`],excludedTokens:[],alwaysConfirm:!1,gasTokenToUse:`VET`},E={B3TR:{type:`B3TR`,name:`B3TR Token`,symbol:`B3TR`,address:m(process.env.NEXT_PUBLIC_NETWORK_TYPE||`test`).b3trContractAddress,description:`Pay gas with B3TR`},VET:{type:`VET`,name:`VET Token`,symbol:`VET`,description:`Pay gas with VET`},VTHO:{type:`VTHO`,name:`VTHO Token`,symbol:`VTHO`,address:m(process.env.NEXT_PUBLIC_NETWORK_TYPE||`test`).vthoContractAddress,description:`Pay gas with VTHO`}},D=(e,t=6,n=4)=>`${e.slice(0,t)}•••${e.slice(-n)}`,O=(e,t=8,n=6)=>e.length<=t+n?e:`${e.substring(0,t)}•••${e.substring(e.length-n)}`,k=(e,t,n=null)=>{let r=n?` `+n:``;t=t||e;let i=new Intl.NumberFormat(`en-US`,{style:`decimal`,minimumFractionDigits:Number.parseFloat(e.toString())%1==0?0:2}).format(M(Number(e),2));return!A(t)&&A(i)&&(i=`< 0.01`),i+r},A=e=>!e&&e!==0?!1:new ee.BigNumber(e).isZero(),j=(e,t=!1)=>{let n=(0,o.picasso)(e.toLowerCase());return t?`data:image/svg+xml;base64,${Buffer.from(n,`utf8`).toString(`base64`)}`:`data:image/svg+xml;utf8,${n}`};function M(e,t=0){if(typeof e!=`number`||typeof t!=`number`)throw Error(`Invalid input: number and decimals must be of type number`);let n=parseInt(e.toExponential().split(`e-`)[1]||`0`,10),r=10**Math.max(0,t+n);return Math.floor(e*r)/r}const N=e=>{let t=(0,s.formatEther)(e),n=t===`0`?`0`:k(t);return{original:e.toString(),scaled:t,formatted:n}},P=(()=>{let e=(0,c.generatePrivateKey)(),t=(0,c.privateKeyToAccount)(e);return{privateKey:e,account:t,address:t.address}})(),oe=`0x`,F=/^0[xX]/,I=/^(0[xX])?[a-fA-F0-9]+$/,L=e=>(z(e),e.replace(F,``)),R=e=>(z(e),F.test(e)?e.replace(F,`0x`):`0x${e}`),z=e=>{if(!B(e))throw Error(`Provided hex value is not valid`)},B=e=>!!e&&I.test(e),V=e=>!B(e),H=e=>R(e.toLowerCase().trim()),U=(e,t)=>{try{return L(e).toLowerCase()===L(t).toLowerCase()}catch{return!1}},W=(e,t)=>{if(!e||!t)return!1;if(t===e)return!0;try{return H(e)===H(t)}catch{return!1}},G=(e,t)=>{if(e.length!==t.length)return!1;let n=[...e].map(e=>e.toLowerCase()).sort((e,t)=>e.localeCompare(t)),r=[...t].map(e=>e.toLowerCase()).sort((e,t)=>e.localeCompare(t));for(let e=0;e<n.length;e++)if(!W(n[e],r[e]))return!1;return!0},K=()=>/^0x[a-fA-F0-9]{40}$/,q=l.Address.isValid,J=(e,t)=>{let n=e.startsWith(`0x`)?e.slice(2):e;if(n.length>t)throw Error(`Input string is longer than the specified length`);return`0x${n.padStart(t,`0`)}`},Y=e=>{let t=e.trim();return/^ipfs:\/\/[a-zA-Z0-9]+(\/[^/]+)*\/?$/.test(t)};function se(e,t){return`ipfs://${e}/${t??``}`}async function ce(e,t,n){try{let r=new FormData;r.append(`file`,e,t);let i=await fetch(m(n).ipfsPinningService,{method:`POST`,headers:{"X-Project-Id":`vechain-kit`},body:r});if(!i.ok)throw Error(`HTTP error! status: ${i.status}`);return(await i.json()).IpfsHash}catch(e){throw console.error(`Error uploading blob:`,e),Error(`Failed to upload blob to IPFS`)}}let X=function(e){return e.IMAGE=`image`,e.VIDEO=`video`,e.UNKNOWN=`unknown`,e.TEXT=`text`,e}({}),le=function(e){return e.NONE=`NONE`,e.WHITELIST=`WHITELIST`,e.BLACKLIST=`BLACKLIST`,e}({});const ue={usd:`$`,gbp:`£`,eur:`€`},de=[`display`,`avatar`,`description`,`keywords`,`email`,`url`,`header`,`notice`,`location`,`phone`,`com.x`];function fe(e,t){return e*(1+t)}function pe(e,t=4){return Number(e).toLocaleString(void 0,{minimumFractionDigits:t,maximumFractionDigits:t})}let me=function(e){return e.TERMS=`terms`,e.PRIVACY=`privacy`,e.COOKIES=`cookies`,e}({}),he=function(e){return e.VECHAIN_KIT=`vechain-kit`,e.APPLICATION=`application`,e}({});const Z=(e,t)=>!!t.find(t=>{if(e?.split(`/`)[0]===t)return!0}),ge=e=>Z(e,[X.IMAGE])?X.IMAGE:Z(e,[X.VIDEO])?X.VIDEO:X.UNKNOWN,_e=(e,t)=>{if(e.startsWith(`data:`))return e;let n=e?.split(`://`);if(n.length!==2)return null;let r=n?.[0]?.trim(),i=n[1];switch(r){case`ipfs`:if(!Y(e))throw Error(`Invalid IPFS URI ${e}`);return`${m(t).ipfsFetchingService}/${i}`;case`ar`:return`https://arweave.net/${i}`;default:return e}},ve=[{level:`1`,name:`Earth`,image:`/images/nft-levels/0.png`,multiplier:1,b3trToUpgrade:0},{level:`2`,name:`Moon`,image:`/images/nft-levels/1.png`,multiplier:1.1,b3trToUpgrade:1e4},{level:`3`,name:`Mercury`,image:`/images/nft-levels/2.png`,multiplier:1.2,b3trToUpgrade:25e3},{level:`4`,name:`Venus`,image:`/images/nft-levels/3.png`,multiplier:1.5,b3trToUpgrade:5e4},{level:`5`,name:`Mars`,image:`/images/nft-levels/4.png`,multiplier:2,b3trToUpgrade:1e5},{level:`6`,name:`Jupiter`,image:`/images/nft-levels/5.png`,multiplier:2.5,b3trToUpgrade:25e4},{level:`7`,name:`Saturn`,image:`/images/nft-levels/6.png`,multiplier:3,b3trToUpgrade:5e5},{level:`8`,name:`Uranus`,image:`/images/nft-levels/7.png`,multiplier:5,b3trToUpgrade:25e5},{level:`9`,name:`Neptune`,image:`/images/nft-levels/8.png`,multiplier:10,b3trToUpgrade:5e6},{level:`10`,name:`Galaxy`,image:`/images/nft-levels/9.png`,multiplier:25,b3trToUpgrade:25e6}],ye={1:2,2:4,3:6,4:2,5:4,6:6,7:7},be=e=>{let t=new URLSearchParams;return Object.keys(e).forEach(n=>{let r=e[n];r!=null&&t.append(n,String(r))}),t.toString()},xe={0:`/images/vnt/00-noNode.webp`,1:`/images/vnt/01-strength.webp`,2:`/images/vnt/02-thunder.webp`,3:`/images/vnt/03-mjolnir.webp`,4:`/images/vnt/04-vethorX.webp`,5:`/images/vnt/05-strengthX.webp`,6:`/images/vnt/06-thunderX.webp`,7:`/images/vnt/07-mjolnirX.webp`},Se=4,Q={1:`Strength`,2:`Thunder`,3:`Mjolnir`},$={4:`VeThorX`,5:`StrengthX`,6:`ThunderX`,7:`MjolnirX`},Ce={...Q,...$},we={SECOND:1e3,MINUTE:1e3*60,HOUR:1e3*60*60,DAY:1e3*60*60*24,WEEK:1e3*60*60*24*7,MONTH:1e3*60*60*24*30,YEAR:1e3*60*60*24*365},Te=e=>e?[`rejected`,`cancelled`,`user denied`,`closed`].some(t=>e.toLowerCase().includes(t.toLowerCase())):!1,Ee=e=>{let t=0;for(let n=0;n<e.length;n++){let r=e.charCodeAt(n);t=(t<<5)-t+r,t&=t}return t.toString(36)},De=e=>{try{return new URL(e),!0}catch{return!1}},Oe=async({thor:e,contractAddress:t,abi:n,method:r,args:i})=>await e.contracts.load(t,n).read[r](...i),ke=async({thor:e,calls:t})=>{if(!Array.isArray(t))throw Error(`calls must be an array`);let n=t.map(t=>e.contracts.load(t.address,t.abi).clause[t.functionName](...t.args)),r=await e.transactions.executeMultipleClausesCall(n);if(!r.every(e=>e.success))throw Error(`Failed to execute multiple clauses call`);return r.map(e=>e.result.plain)},Ae=({thor:e,calls:t})=>{if(!Array.isArray(t))throw Error(`calls must be an array`);return t.map(t=>e.contracts.load(t.address,t.abi).clause[t.functionName](...t.args))};Object.defineProperty(exports,`$`,{enumerable:!0,get:function(){return _}}),Object.defineProperty(exports,`A`,{enumerable:!0,get:function(){return G}}),Object.defineProperty(exports,`B`,{enumerable:!0,get:function(){return z}}),Object.defineProperty(exports,`C`,{enumerable:!0,get:function(){return ue}}),Object.defineProperty(exports,`D`,{enumerable:!0,get:function(){return ce}}),Object.defineProperty(exports,`E`,{enumerable:!0,get:function(){return se}}),Object.defineProperty(exports,`F`,{enumerable:!0,get:function(){return U}}),Object.defineProperty(exports,`G`,{enumerable:!0,get:function(){return O}}),Object.defineProperty(exports,`H`,{enumerable:!0,get:function(){return N}}),Object.defineProperty(exports,`I`,{enumerable:!0,get:function(){return V}}),Object.defineProperty(exports,`J`,{enumerable:!0,get:function(){return T}}),Object.defineProperty(exports,`K`,{enumerable:!0,get:function(){return k}}),Object.defineProperty(exports,`L`,{enumerable:!0,get:function(){return B}}),Object.defineProperty(exports,`M`,{enumerable:!0,get:function(){return J}}),Object.defineProperty(exports,`N`,{enumerable:!0,get:function(){return K}}),Object.defineProperty(exports,`O`,{enumerable:!0,get:function(){return Y}}),Object.defineProperty(exports,`P`,{enumerable:!0,get:function(){return R}}),Object.defineProperty(exports,`Q`,{enumerable:!0,get:function(){return g}}),Object.defineProperty(exports,`R`,{enumerable:!0,get:function(){return H}}),Object.defineProperty(exports,`S`,{enumerable:!0,get:function(){return de}}),Object.defineProperty(exports,`T`,{enumerable:!0,get:function(){return le}}),Object.defineProperty(exports,`U`,{enumerable:!0,get:function(){return j}}),Object.defineProperty(exports,`V`,{enumerable:!0,get:function(){return P}}),Object.defineProperty(exports,`W`,{enumerable:!0,get:function(){return D}}),Object.defineProperty(exports,`X`,{enumerable:!0,get:function(){return b}}),Object.defineProperty(exports,`Y`,{enumerable:!0,get:function(){return S}}),Object.defineProperty(exports,`Z`,{enumerable:!0,get:function(){return E}}),Object.defineProperty(exports,`_`,{enumerable:!0,get:function(){return ge}}),Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return Te}}),Object.defineProperty(exports,`at`,{enumerable:!0,get:function(){return y}}),Object.defineProperty(exports,`b`,{enumerable:!0,get:function(){return fe}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return Q}}),Object.defineProperty(exports,`ct`,{enumerable:!0,get:function(){return m}}),Object.defineProperty(exports,`d`,{enumerable:!0,get:function(){return $}}),Object.defineProperty(exports,`et`,{enumerable:!0,get:function(){return ae}}),Object.defineProperty(exports,`f`,{enumerable:!0,get:function(){return Ce}}),Object.defineProperty(exports,`g`,{enumerable:!0,get:function(){return _e}}),Object.defineProperty(exports,`h`,{enumerable:!0,get:function(){return ye}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return De}}),Object.defineProperty(exports,`it`,{enumerable:!0,get:function(){return`cm4wxxujb022fyujl7g0thb21`}}),Object.defineProperty(exports,`j`,{enumerable:!0,get:function(){return q}}),Object.defineProperty(exports,`k`,{enumerable:!0,get:function(){return W}}),Object.defineProperty(exports,`l`,{enumerable:!0,get:function(){return 4}}),Object.defineProperty(exports,`m`,{enumerable:!0,get:function(){return ve}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return Oe}}),Object.defineProperty(exports,`nt`,{enumerable:!0,get:function(){return v}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return Ee}}),Object.defineProperty(exports,`ot`,{enumerable:!0,get:function(){return x}}),Object.defineProperty(exports,`p`,{enumerable:!0,get:function(){return be}}),Object.defineProperty(exports,`q`,{enumerable:!0,get:function(){return A}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return ke}}),Object.defineProperty(exports,`rt`,{enumerable:!0,get:function(){return C}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return we}}),Object.defineProperty(exports,`st`,{enumerable:!0,get:function(){return ie}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return Ae}}),Object.defineProperty(exports,`tt`,{enumerable:!0,get:function(){return w}}),Object.defineProperty(exports,`u`,{enumerable:!0,get:function(){return xe}}),Object.defineProperty(exports,`v`,{enumerable:!0,get:function(){return he}}),Object.defineProperty(exports,`w`,{enumerable:!0,get:function(){return X}}),Object.defineProperty(exports,`x`,{enumerable:!0,get:function(){return pe}}),Object.defineProperty(exports,`y`,{enumerable:!0,get:function(){return me}}),Object.defineProperty(exports,`z`,{enumerable:!0,get:function(){return L}});
2
+ //# sourceMappingURL=utils-jW13BhAb.cjs.map