\n
\n Ownership Validated\n Amount owned: {data.asset.amount}\n {/* Number of Proofs: {data.number_of_proofs} */}\n\n Is Burn: {data.is_burn ? \"Yes\" : \"No\"}\n\n \n\n \n \n \n \n \n \n \n\n \n \n \n \n \n \n\n \n \n\n \n \n \n \n \n\n \n \n {data.exclusion_proofs.map((proof, index) => (\n \n ))}\n \n
\n \n
\n );\n}\n\nexport default ShowProof;\n","import { createConsumer } from \"@rails/actioncable\";\nimport { ExplorerWorkspace } from \"../stores/ExplorerWorkspace\";\n\ndeclare global {\n interface Window {\n ExplorerChannelSubscription: any;\n }\n}\n\nexport const startExplorerActionCable = (\n explorerWorkspace: ExplorerWorkspace\n) => {\n const consumer = createConsumer();\n //console.log(consumer);\n console.log(\"--in start action cable---\");\n // console.log(\"workspace.channelIndex\", workspace.channelIndex);\n window.ExplorerChannelSubscription = consumer.subscriptions.create(\n {\n channel: \"ExplorerChannel\",\n workspaceUuid: explorerWorkspace.workspaceUuid,\n },\n\n {\n connected() {\n console.log(\"a cable connect\");\n },\n\n disconnected() {\n // Called when the subscription has been terminated by the server\n },\n received(data) {\n console.log(\"data received from rails\", data);\n console.log(data);\n if (data.message == \"verify-and-decode-proof\") {\n explorerWorkspace.handleVerifyAndDecodeProof(data);\n }\n\n // if (data.message == \"question-failed\") {\n // workspace.handleQuestionFailure();\n // }\n },\n }\n );\n};\n","export const updateSearchQueryParam = (newSearchValue) => {\n // Create a URL object based on the current document location\n const currentUrl = new URL(window.location);\n\n // Access the URL's search parameters\n const params = currentUrl.searchParams;\n\n // Get the current value of the 'search' parameter\n const currentSearchValue = params.get(\"search\");\n\n // Check if the current search value is different from the new search value\n if (currentSearchValue !== newSearchValue) {\n // Set the 'search' parameter to the new value\n params.set(\"search\", newSearchValue);\n\n // Update the browser's address bar without reloading the page\n window.history.pushState(\n { search: newSearchValue },\n \"\",\n currentUrl.toString()\n );\n }\n};\n\n// Listen for popstate event to handle browser navigation\nwindow.addEventListener(\"popstate\", (event) => {\n window.location.reload();\n});\n","export const MEGALITH_NODE_ADDRESS =\n \"0322d0e43b3d92d30ed187f4e101a9a9605c3ee5fc9721e6dac3ce3d7732fbb13e@164.92.106.32:9735\";\n\nexport const NO_IMAGE_DATA_URL =\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASQAAAEkCAIAAAAJm9u7AAAACXBIWXMAAAsTAAALEwEAmpwYAAALr0lEQVR4nO3c32tbdQPH8a/rTBDTXLQespZDXZfUJi0YCmNFrKLDH8hkF7IbZRf+af4B7kbQgZtjTEEaxdjJkrhl1pa05JAlgywMEph7Lr7P8yVPfpzVrf2kad+vq9M05/Qkzfv8/LYvXb582QA4eCdGvQLAcUFsgAixASLEBogQGyBCbIAIsQEixAaIEBsgQmyACLEBIsQGiBAbIEJsgAixASLEBogQGyBCbIAIsQEixAaIEBsgQmyACLEBIsQGiBAbIEJsgAixASLEBogQGyBCbIAIsQEixAaIEBsgQmyACLEBIsQGiBAbIEJsgAixASLEBogQGyBCbIAIsQEixAaIEBsgQmyACLEBIsQGiBAbIEJsgAixASLEBogQGyBCbIAIsQEixAaIEBsgQmyACLEBIsQGiBAbIEJsgAixASLEBogQGyBCbIAIsQEixAaIEBsgQmyACLEBIsQGiBAbIEJsgAixASLEBogQGyBCbIAIsQEixAaIEBsgQmyACLEBIsQGiBAbIEJsgAixASLEBogQGyBCbIAIsQEixAaIEBsgQmyACLEBIsQGiBAbIEJsgAixASLEBogQGyBCbIAIsQEixAaIEBsgQmyACLEBIsQGiBAbIEJsgAixASLEBogQGyBCbIAIsQEixAaIEBsgQmyACLEBIsQGiBAbIHJy1CuA/7O2tpZKpYwxP/744/3790e9OthP7NkOl1OnTtmJWCw22jXBviM2QITYABFiO1yq1aqdaLVao10T7LuXLl++POp1AI4F9myACLEBIuN6ny2bza6srLgv8/n8xsaGMcbzvPn5+aWlJft4EAR379595g2raDSaTqdnZ2cTiYR7sFAo1Ov1g77Zde7cObe23dbX14vF4rC5vvjii0gkYqcLhUIul/M87+zZs3b93bvRvfwgCH799ddarTZsmdls1hizvLzslmyMaTQaW1tbbmkhMpnMzMzM3Nyc/bLVat27d8/O6Pv+Bx984J7ZvXr96zA9Pe0WYowpl8v1ej3krRgj4xpbj+npadNXoDEmkUgkEolYLBbycemfy7Kf0eXl5Z9//jnkM3pAuj/xPaLRaPeX09PTnudduHDBPbKyshKNRnO53MWLF6empuyD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\";\n","import { timeFormat } from \"d3-time-format\";\n\n// Arrow function to convert Unix timestamp to a nicely formatted local time string\nexport const formatUnixTimestamp = (unixTimestamp) => {\n // Convert Unix timestamp to milliseconds, create a Date object, and format it\n /// %I:%M:%S\n return timeFormat(\"%B %d, %Y\")(new Date(unixTimestamp * 1000));\n};\n\nexport const formatUnixTimeStampWithTime = (unixTimestamp) => {\n const utcDate = new Date(unixTimestamp * 1000).toISOString();\n return timeFormat(\"%B %d, %Y %I:%M:%S %p\")(new Date(utcDate));\n};\n","export const setNostrDataToLocalStorage = (\n nostrPublicKey: string,\n nostrPlatform: string\n) => {\n localStorage.setItem(\"nostrPublicKey\", nostrPublicKey);\n localStorage.setItem(\"nostrPlatform\", nostrPlatform);\n};\n\nexport const getNostrDataFromLocalStorage = () => {\n const nostrPublicKey = localStorage.getItem(\"nostrPublicKey\");\n const nostrPlatform = localStorage.getItem(\"nostrPlatform\");\n\n return {\n nostrPublicKey: nostrPublicKey === \"null\" ? null : nostrPublicKey,\n nostrPlatform: nostrPlatform === \"null\" ? null : nostrPlatform,\n };\n};\n","declare global {\n interface Window {\n nostr?: {\n getPublicKey: () => Promise