gun-eth 1.4.21 → 1.4.23

Sign up to get free protection for your applications and to get access to all the features.
@@ -1 +1 @@
1
- {"version":3,"file":"gun-eth.cjs.js","sources":["../src/config/local.js","../src/abis/abis.js","../src/index.js"],"sourcesContent":["let contractAddresses = {\r\n PROOF_OF_INTEGRITY_ADDRESS: \"0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512\",\r\n STEALTH_ANNOUNCER_ADDRESS: \"0x5FbDB2315678afecb367f032d93F642f64180aa3\"\r\n};\r\n\r\nif (typeof window === 'undefined') {\r\n const { fileURLToPath } = require('url');\r\n const { dirname } = require('path');\r\n const { readFileSync } = require('fs');\r\n const { join } = require('path');\r\n\r\n try {\r\n const __filename = fileURLToPath(import.meta.url);\r\n const __dirname = dirname(__filename);\r\n const rawdata = readFileSync(join(__dirname, 'contract-address.json'), 'utf8');\r\n contractAddresses = JSON.parse(rawdata);\r\n console.log(\"Loaded contract addresses:\", contractAddresses);\r\n } catch (error) {\r\n console.warn(\"Warning: contract-address.json not found or invalid\");\r\n }\r\n}\r\n\r\nexport const LOCAL_CONFIG = {\r\n CHAIN_ID: 1337,\r\n PROOF_OF_INTEGRITY_ADDRESS: contractAddresses.PROOF_OF_INTEGRITY_ADDRESS,\r\n STEALTH_ANNOUNCER_ADDRESS: contractAddresses.STEALTH_ANNOUNCER_ADDRESS,\r\n RPC_URL: \"http://127.0.0.1:8545\",\r\n GUN_PEER: \"http://localhost:8765/gun\"\r\n}; ","import { LOCAL_CONFIG } from '../config/local.js';\r\n\r\n// Indirizzi di produzione per diverse chain\r\nexport const CHAIN_CONFIG = {\r\n optimismSepolia: {\r\n STEALTH_ANNOUNCER_ADDRESS: \"\",\r\n PROOF_OF_INTEGRITY_ADDRESS: \"\",\r\n RPC_URL: \"https://sepolia.optimism.io\",\r\n CHAIN_ID: 11155420\r\n },\r\n arbitrumSepolia: {\r\n STEALTH_ANNOUNCER_ADDRESS: \"\",\r\n PROOF_OF_INTEGRITY_ADDRESS: \"\",\r\n RPC_URL: \"https://sepolia-rollup.arbitrum.io/rpc\",\r\n CHAIN_ID: 421614\r\n },\r\n localhost: {\r\n RPC_URL: \"http://127.0.0.1:8545\",\r\n CHAIN_ID: 1337\r\n }\r\n};\r\n\r\n// Funzione per ottenere gli indirizzi corretti\r\nexport function getAddressesForChain(chainName) {\r\n let config;\r\n\r\n // Se è localhost, prova a caricare gli indirizzi locali\r\n if (chainName === 'localhost') {\r\n try {\r\n // Carica gli indirizzi dal file generato dal deploy locale\r\n const localAddresses = require('../config/contract-address.json');\r\n config = {\r\n ...CHAIN_CONFIG.localhost,\r\n ...localAddresses\r\n };\r\n console.log(\"Using local addresses:\", config);\r\n return config;\r\n } catch (err) {\r\n console.warn('No local addresses found');\r\n throw new Error('No local addresses found. Did you run local deployment?');\r\n }\r\n }\r\n\r\n // Altrimenti usa gli indirizzi di produzione\r\n config = CHAIN_CONFIG[chainName];\r\n if (!config) {\r\n throw new Error(`Chain ${chainName} not supported. Supported chains: ${Object.keys(CHAIN_CONFIG).join(', ')}`);\r\n }\r\n\r\n return config;\r\n}\r\n\r\n// Funzione helper per verificare se siamo in ambiente locale\r\nexport function isLocalEnvironment() {\r\n return process.env.NODE_ENV === 'development' && \r\n typeof window !== 'undefined' && \r\n window.location.hostname === 'localhost';\r\n}\r\n\r\nexport const STEALTH_ANNOUNCER_ABI = [\r\n {\r\n \"inputs\": [\r\n {\r\n \"internalType\": \"address\",\r\n \"name\": \"_devAddress\",\r\n \"type\": \"address\"\r\n }\r\n ],\r\n \"stateMutability\": \"nonpayable\",\r\n \"type\": \"constructor\"\r\n },\r\n {\r\n \"anonymous\": false,\r\n \"inputs\": [\r\n {\r\n \"internalType\": \"string\",\r\n \"name\": \"senderPublicKey\",\r\n \"type\": \"string\"\r\n },\r\n {\r\n \"internalType\": \"string\",\r\n \"name\": \"spendingPublicKey\",\r\n \"type\": \"string\"\r\n },\r\n {\r\n \"internalType\": \"address\",\r\n \"name\": \"stealthAddress\",\r\n \"type\": \"address\"\r\n },\r\n {\r\n \"internalType\": \"uint256\",\r\n \"name\": \"timestamp\",\r\n \"type\": \"uint256\"\r\n }\r\n ],\r\n \"name\": \"StealthPaymentAnnounced\",\r\n \"type\": \"event\"\r\n },\r\n {\r\n \"anonymous\": false,\r\n \"inputs\": [\r\n {\r\n \"internalType\": \"address\",\r\n \"name\": \"newAddress\",\r\n \"type\": \"address\"\r\n }\r\n ],\r\n \"name\": \"DevAddressUpdated\",\r\n \"type\": \"event\"\r\n },\r\n {\r\n \"anonymous\": false,\r\n \"inputs\": [\r\n {\r\n \"internalType\": \"uint256\",\r\n \"name\": \"newFee\",\r\n \"type\": \"uint256\"\r\n }\r\n ],\r\n \"name\": \"DevFeeUpdated\",\r\n \"type\": \"event\"\r\n },\r\n {\r\n \"inputs\": [\r\n {\r\n \"internalType\": \"string\",\r\n \"name\": \"senderPublicKey\",\r\n \"type\": \"string\"\r\n },\r\n {\r\n \"internalType\": \"string\",\r\n \"name\": \"spendingPublicKey\",\r\n \"type\": \"string\"\r\n },\r\n {\r\n \"internalType\": \"address\",\r\n \"name\": \"stealthAddress\",\r\n \"type\": \"address\"\r\n }\r\n ],\r\n \"name\": \"announcePayment\",\r\n \"outputs\": [],\r\n \"stateMutability\": \"payable\",\r\n \"type\": \"function\"\r\n },\r\n {\r\n \"inputs\": [],\r\n \"name\": \"devAddress\",\r\n \"outputs\": [\r\n {\r\n \"internalType\": \"address\",\r\n \"name\": \"\",\r\n \"type\": \"address\"\r\n }\r\n ],\r\n \"stateMutability\": \"view\",\r\n \"type\": \"function\"\r\n },\r\n {\r\n \"inputs\": [],\r\n \"name\": \"devFee\",\r\n \"outputs\": [\r\n {\r\n \"internalType\": \"uint256\",\r\n \"name\": \"\",\r\n \"type\": \"uint256\"\r\n }\r\n ],\r\n \"stateMutability\": \"view\",\r\n \"type\": \"function\"\r\n },\r\n {\r\n \"inputs\": [],\r\n \"name\": \"getAnnouncementsCount\",\r\n \"outputs\": [\r\n {\r\n \"internalType\": \"uint256\",\r\n \"name\": \"\",\r\n \"type\": \"uint256\"\r\n }\r\n ],\r\n \"stateMutability\": \"view\",\r\n \"type\": \"function\"\r\n },\r\n {\r\n \"inputs\": [\r\n {\r\n \"internalType\": \"uint256\",\r\n \"name\": \"fromIndex\",\r\n \"type\": \"uint256\"\r\n },\r\n {\r\n \"internalType\": \"uint256\",\r\n \"name\": \"toIndex\",\r\n \"type\": \"uint256\"\r\n }\r\n ],\r\n \"name\": \"getAnnouncementsInRange\",\r\n \"outputs\": [\r\n {\r\n \"components\": [\r\n {\r\n \"internalType\": \"string\",\r\n \"name\": \"senderPublicKey\",\r\n \"type\": \"string\"\r\n },\r\n {\r\n \"internalType\": \"string\",\r\n \"name\": \"spendingPublicKey\",\r\n \"type\": \"string\"\r\n },\r\n {\r\n \"internalType\": \"address\",\r\n \"name\": \"stealthAddress\",\r\n \"type\": \"address\"\r\n },\r\n {\r\n \"internalType\": \"uint256\",\r\n \"name\": \"timestamp\",\r\n \"type\": \"uint256\"\r\n }\r\n ],\r\n \"internalType\": \"struct StealthAnnouncer.StealthAnnouncement[]\",\r\n \"name\": \"\",\r\n \"type\": \"tuple[]\"\r\n }\r\n ],\r\n \"stateMutability\": \"view\",\r\n \"type\": \"function\"\r\n },\r\n {\r\n \"inputs\": [\r\n {\r\n \"internalType\": \"uint256\",\r\n \"name\": \"_newFee\",\r\n \"type\": \"uint256\"\r\n }\r\n ],\r\n \"name\": \"updateDevFee\",\r\n \"outputs\": [],\r\n \"stateMutability\": \"nonpayable\",\r\n \"type\": \"function\"\r\n },\r\n {\r\n \"inputs\": [\r\n {\r\n \"internalType\": \"address\",\r\n \"name\": \"_newAddress\",\r\n \"type\": \"address\"\r\n }\r\n ],\r\n \"name\": \"updateDevAddress\",\r\n \"outputs\": [],\r\n \"stateMutability\": \"nonpayable\",\r\n \"type\": \"function\"\r\n },\r\n {\r\n \"inputs\": [],\r\n \"name\": \"withdrawStuckETH\",\r\n \"outputs\": [],\r\n \"stateMutability\": \"nonpayable\",\r\n \"type\": \"function\"\r\n }\r\n];\r\n\r\nexport const PROOF_OF_INTEGRITY_ABI = [\r\n {\r\n \"inputs\": [\r\n {\r\n \"internalType\": \"bytes[]\",\r\n \"name\": \"nodeIds\",\r\n \"type\": \"bytes[]\"\r\n },\r\n {\r\n \"internalType\": \"bytes32[]\",\r\n \"name\": \"contentHashes\",\r\n \"type\": \"bytes32[]\"\r\n }\r\n ],\r\n \"name\": \"batchUpdateData\",\r\n \"outputs\": [],\r\n \"stateMutability\": \"nonpayable\",\r\n \"type\": \"function\"\r\n },\r\n {\r\n \"anonymous\": false,\r\n \"inputs\": [\r\n {\r\n \"indexed\": true,\r\n \"internalType\": \"bytes\",\r\n \"name\": \"nodeId\",\r\n \"type\": \"bytes\"\r\n },\r\n {\r\n \"indexed\": false,\r\n \"internalType\": \"bytes32\",\r\n \"name\": \"contentHash\",\r\n \"type\": \"bytes32\"\r\n },\r\n {\r\n \"indexed\": false,\r\n \"internalType\": \"address\",\r\n \"name\": \"updater\",\r\n \"type\": \"address\"\r\n }\r\n ],\r\n \"name\": \"DataUpdated\",\r\n \"type\": \"event\"\r\n },\r\n {\r\n \"inputs\": [\r\n {\r\n \"internalType\": \"bytes\",\r\n \"name\": \"nodeId\",\r\n \"type\": \"bytes\"\r\n }\r\n ],\r\n \"name\": \"getLatestRecord\",\r\n \"outputs\": [\r\n {\r\n \"internalType\": \"bytes32\",\r\n \"name\": \"\",\r\n \"type\": \"bytes32\"\r\n },\r\n {\r\n \"internalType\": \"uint256\",\r\n \"name\": \"\",\r\n \"type\": \"uint256\"\r\n },\r\n {\r\n \"internalType\": \"address\",\r\n \"name\": \"\",\r\n \"type\": \"address\"\r\n }\r\n ],\r\n \"stateMutability\": \"view\",\r\n \"type\": \"function\"\r\n },\r\n {\r\n \"inputs\": [\r\n {\r\n \"internalType\": \"bytes\",\r\n \"name\": \"nodeId\",\r\n \"type\": \"bytes\"\r\n },\r\n {\r\n \"internalType\": \"bytes32\",\r\n \"name\": \"contentHash\",\r\n \"type\": \"bytes32\"\r\n }\r\n ],\r\n \"name\": \"updateData\",\r\n \"outputs\": [],\r\n \"stateMutability\": \"nonpayable\",\r\n \"type\": \"function\"\r\n },\r\n {\r\n \"inputs\": [\r\n {\r\n \"internalType\": \"bytes\",\r\n \"name\": \"nodeId\",\r\n \"type\": \"bytes\"\r\n },\r\n {\r\n \"internalType\": \"bytes32\",\r\n \"name\": \"contentHash\",\r\n \"type\": \"bytes32\"\r\n }\r\n ],\r\n \"name\": \"verifyData\",\r\n \"outputs\": [\r\n {\r\n \"internalType\": \"bool\",\r\n \"name\": \"\",\r\n \"type\": \"bool\"\r\n },\r\n {\r\n \"internalType\": \"uint256\",\r\n \"name\": \"\",\r\n \"type\": \"uint256\"\r\n },\r\n {\r\n \"internalType\": \"address\",\r\n \"name\": \"\",\r\n \"type\": \"address\"\r\n }\r\n ],\r\n \"stateMutability\": \"view\",\r\n \"type\": \"function\"\r\n }\r\n];\r\n","// =============================================\r\n// IMPORTS AND GLOBAL VARIABLES\r\n// =============================================\r\nimport Gun from \"gun\";\r\nimport SEA from \"gun/sea.js\";\r\nimport { ethers } from \"ethers\";\r\nimport { PROOF_OF_INTEGRITY_ABI, STEALTH_ANNOUNCER_ABI, getAddressesForChain } from \"./abis/abis.js\";\r\nimport { LOCAL_CONFIG } from \"./config/local.js\";\r\n\r\n// Ottieni gli indirizzi corretti per la chain\r\nconst chainConfig = getAddressesForChain('optimismSepolia'); // o la chain desiderata\r\nconst STEALTH_ANNOUNCER_ADDRESS = chainConfig.STEALTH_ANNOUNCER_ADDRESS;\r\nconst PROOF_OF_INTEGRITY_ADDRESS = chainConfig.PROOF_OF_INTEGRITY_ADDRESS;\r\n\r\nlet PROOF_CONTRACT_ADDRESS;\r\nlet rpcUrl = \"\";\r\nlet privateKey = \"\";\r\n\r\nexport const MESSAGE_TO_SIGN = \"Access GunDB with Ethereum\";\r\n\r\nlet contractAddresses = {\r\n PROOF_OF_INTEGRITY_ADDRESS: null,\r\n STEALTH_ANNOUNCER_ADDRESS: STEALTH_ANNOUNCER_ADDRESS\r\n};\r\n\r\n// Solo per Node.js\r\nif (typeof window === 'undefined') {\r\n const { fileURLToPath } = require('url');\r\n const { dirname } = require('path');\r\n const { readFileSync } = require('fs');\r\n const path = require('path');\r\n \r\n const __filename = fileURLToPath(import.meta.url);\r\n const __dirname = dirname(__filename);\r\n\r\n try {\r\n const rawdata = readFileSync(path.join(__dirname, 'contract-address.json'), 'utf8');\r\n contractAddresses = JSON.parse(rawdata);\r\n console.log('Loaded contract addresses:', contractAddresses);\r\n } catch (err) {\r\n console.warn('Warning: contract-address.json not found or invalid');\r\n }\r\n}\r\n\r\n// =============================================\r\n// UTILITY FUNCTIONS\r\n// =============================================\r\n/**\r\n * Generates a random node ID for GunDB\r\n * @returns {string} A random hexadecimal string\r\n */\r\nexport function generateRandomId() {\r\n return ethers.hexlify(ethers.randomBytes(32)).slice(2);\r\n}\r\n\r\n/**\r\n * Generates a password from a signature.\r\n * @param {string} signature - The signature to derive the password from.\r\n * @returns {string|null} The generated password or null if generation fails.\r\n */\r\nexport function generatePassword(signature) {\r\n try {\r\n const hexSignature = ethers.hexlify(signature);\r\n const hash = ethers.keccak256(hexSignature);\r\n console.log(\"Generated password:\", hash);\r\n return hash;\r\n } catch (error) {\r\n console.error(\"Error generating password:\", error);\r\n return null;\r\n }\r\n}\r\n\r\n/**\r\n * Converts a Gun private key to an Ethereum account.\r\n * @param {string} gunPrivateKey - The Gun private key in base64url format.\r\n * @returns {Object} An object containing the Ethereum account and public key.\r\n */\r\nexport function gunToEthAccount(gunPrivateKey) {\r\n // Function to convert base64url to hex\r\n const base64UrlToHex = (base64url) => {\r\n const padding = \"=\".repeat((4 - (base64url.length % 4)) % 4);\r\n const base64 = base64url.replace(/-/g, \"+\").replace(/_/g, \"/\") + padding;\r\n const binary = atob(base64);\r\n return Array.from(binary, (char) =>\r\n char.charCodeAt(0).toString(16).padStart(2, \"0\")\r\n ).join(\"\");\r\n };\r\n\r\n // Convert Gun private key to hex format\r\n const hexPrivateKey = \"0x\" + base64UrlToHex(gunPrivateKey);\r\n\r\n // Create an Ethereum wallet from the private key\r\n const wallet = new ethers.Wallet(hexPrivateKey);\r\n\r\n // Get the public address (public key)\r\n const publicKey = wallet.address;\r\n\r\n return {\r\n account: wallet,\r\n publicKey: publicKey,\r\n privateKey: hexPrivateKey,\r\n };\r\n}\r\n\r\n/**\r\n * Gets an Ethereum signer based on current configuration\r\n * @returns {Promise<ethers.Signer>} The configured signer\r\n * @throws {Error} If no valid provider is found\r\n */\r\nexport const getSigner = async () => {\r\n if (rpcUrl && privateKey) {\r\n // Standalone mode with local provider\r\n const provider = new ethers.JsonRpcProvider(rpcUrl, {\r\n chainId: LOCAL_CONFIG.CHAIN_ID,\r\n name: \"localhost\"\r\n });\r\n return new ethers.Wallet(privateKey, provider);\r\n } else if (\r\n typeof window !== \"undefined\" &&\r\n typeof window.ethereum !== \"undefined\"\r\n ) {\r\n // Browser mode\r\n await window.ethereum.request({ method: \"eth_requestAccounts\" });\r\n const provider = new ethers.BrowserProvider(window.ethereum);\r\n return provider.getSigner();\r\n } else {\r\n throw new Error(\"No valid Ethereum provider found\");\r\n }\r\n};\r\n\r\n/**\r\n * Utility function to generate stealth address\r\n * @param {string} sharedSecret - The shared secret\r\n * @param {string} spendingPublicKey - The spending public key\r\n * @returns {Object} The stealth address and private key\r\n */\r\nexport function deriveStealthAddress(sharedSecret, spendingPublicKey) {\r\n try {\r\n // Convert shared secret to bytes\r\n const sharedSecretBytes = Buffer.from(sharedSecret, 'base64');\r\n \r\n // Generate stealth private key using shared secret and spending public key\r\n const stealthPrivateKey = ethers.keccak256(\r\n ethers.concat([\r\n sharedSecretBytes,\r\n ethers.getBytes(spendingPublicKey)\r\n ])\r\n );\r\n \r\n // Create stealth wallet\r\n const stealthWallet = new ethers.Wallet(stealthPrivateKey);\r\n\r\n console.log(\"Debug deriveStealthAddress:\", {\r\n sharedSecretHex: ethers.hexlify(sharedSecretBytes),\r\n spendingPublicKey,\r\n stealthPrivateKey,\r\n stealthAddress: stealthWallet.address\r\n });\r\n\r\n return {\r\n stealthPrivateKey,\r\n stealthAddress: stealthWallet.address,\r\n wallet: stealthWallet\r\n };\r\n } catch (error) {\r\n console.error(\"Error in deriveStealthAddress:\", error);\r\n throw error;\r\n }\r\n}\r\n\r\n// =============================================\r\n// BASIC GUN-ETH CHAIN METHODS\r\n// =============================================\r\n\r\n// Set the message to sign\r\nGun.chain.MESSAGE_TO_SIGN = MESSAGE_TO_SIGN;\r\n\r\n/**\r\n * Sets standalone configuration for Gun.\r\n * @param {string} newRpcUrl - The new RPC URL.\r\n * @param {string} newPrivateKey - The new private key.\r\n * @returns {Gun} The Gun instance for chaining.\r\n */\r\nGun.chain.setSigner = function (newRpcUrl, newPrivateKey) {\r\n rpcUrl = newRpcUrl;\r\n privateKey = newPrivateKey;\r\n console.log(\"Standalone configuration set\");\r\n return this;\r\n};\r\n\r\nGun.chain.getSigner = getSigner();\r\n\r\n/**\r\n * Verifies an Ethereum signature.\r\n * @param {string} message - The original message that was signed.\r\n * @param {string} signature - The signature to verify.\r\n * @returns {Promise<string|null>} The recovered address or null if verification fails.\r\n */\r\nGun.chain.verifySignature = async function (message, signature) {\r\n try {\r\n const recoveredAddress = ethers.verifyMessage(message, signature);\r\n return recoveredAddress;\r\n } catch (error) {\r\n console.error(\"Error verifying signature:\", error);\r\n return null;\r\n }\r\n};\r\n\r\n/**\r\n * Generates a password from a signature.\r\n * @param {string} signature - The signature to derive the password from.\r\n * @returns {string|null} The generated password or null if generation fails.\r\n */\r\nGun.chain.generatePassword = function (signature) {\r\n return generatePassword(signature);\r\n};\r\n\r\n/**\r\n * Creates an Ethereum signature for a given message.\r\n * @param {string} message - The message to sign.\r\n * @returns {Promise<string|null>} The signature or null if signing fails.\r\n */\r\nGun.chain.createSignature = async function (message) {\r\n try {\r\n // Check if message matches MESSAGE_TO_SIGN\r\n if (message !== MESSAGE_TO_SIGN) {\r\n throw new Error(\"Invalid message, valid message is: \" + MESSAGE_TO_SIGN);\r\n }\r\n const signer = await getSigner();\r\n const signature = await signer.signMessage(message);\r\n console.log(\"Signature created:\", signature);\r\n return signature;\r\n } catch (error) {\r\n console.error(\"Error creating signature:\", error);\r\n return null;\r\n }\r\n};\r\n\r\n// =============================================\r\n// KEY PAIR MANAGEMENT\r\n// =============================================\r\n/**\r\n * Creates and stores an encrypted key pair for a given address.\r\n * @param {string} address - The Ethereum address to associate with the key pair.\r\n * @param {string} signature - The signature to use for encryption.\r\n * @returns {Promise<void>}\r\n */\r\nGun.chain.createAndStoreEncryptedPair = async function (address, signature) {\r\n try {\r\n const gun = this;\r\n const pair = await SEA.pair();\r\n const v_pair = await SEA.pair();\r\n const s_pair = await SEA.pair();\r\n const password = generatePassword(signature);\r\n\r\n // Save original SEA pairs\r\n const encryptedPair = await SEA.encrypt(JSON.stringify(pair), password);\r\n const encryptedV_pair = await SEA.encrypt(JSON.stringify(v_pair), password);\r\n const encryptedS_pair = await SEA.encrypt(JSON.stringify(s_pair), password);\r\n\r\n // Convert only to get Ethereum addresses\r\n const viewingAccount = gunToEthAccount(v_pair.priv);\r\n const spendingAccount = gunToEthAccount(s_pair.priv);\r\n\r\n gun.get(\"gun-eth\").get(\"users\").get(address).put({\r\n pair: encryptedPair,\r\n v_pair: encryptedV_pair,\r\n s_pair: encryptedS_pair,\r\n publicKeys: {\r\n viewingPublicKey: v_pair.epub, // Use SEA encryption public key\r\n viewingPublicKey: v_pair.epub, // Use SEA encryption public key\r\n spendingPublicKey: spendingAccount.publicKey, // Use Ethereum address\r\n ethViewingAddress: viewingAccount.publicKey // Also save Ethereum address\r\n }\r\n });\r\n\r\n console.log(\"Encrypted pairs and public keys stored for:\", address);\r\n } catch (error) {\r\n console.error(\"Error creating and storing encrypted pair:\", error);\r\n throw error;\r\n }\r\n};\r\n\r\n/**\r\n * Retrieves and decrypts a stored key pair for a given address.\r\n * @param {string} address - The Ethereum address associated with the key pair.\r\n * @param {string} signature - The signature to use for decryption.\r\n * @returns {Promise<Object|null>} The decrypted key pair or null if retrieval fails.\r\n */\r\nGun.chain.getAndDecryptPair = async function (address, signature) {\r\n try {\r\n const gun = this;\r\n const encryptedData = await gun\r\n .get(\"gun-eth\")\r\n .get(\"users\")\r\n .get(address)\r\n .get(\"pair\")\r\n .then();\r\n if (!encryptedData) {\r\n throw new Error(\"No encrypted data found for this address\");\r\n }\r\n const password = generatePassword(signature);\r\n const decryptedPair = await SEA.decrypt(encryptedData, password);\r\n console.log(decryptedPair);\r\n return decryptedPair;\r\n } catch (error) {\r\n console.error(\"Error retrieving and decrypting pair:\", error);\r\n return null;\r\n }\r\n};\r\n\r\n// =============================================\r\n// PROOF OF INTEGRITY\r\n// =============================================\r\n/**\r\n * Proof of Integrity\r\n * @param {string} chain - The blockchain to use (e.g., \"optimismSepolia\").\r\n * @param {string} nodeId - The ID of the node to verify or write.\r\n * @param {Object} data - The data to write (if writing).\r\n * @param {Function} callback - Callback function to handle the result.\r\n * @returns {Gun} The Gun instance for chaining.\r\n */\r\nGun.chain.proof = function (chain, nodeId, data, callback) {\r\n console.log(\"Proof plugin called with:\", { chain, nodeId, data });\r\n\r\n if (typeof callback !== \"function\") {\r\n console.error(\"Callback must be a function\");\r\n return this;\r\n }\r\n\r\n try {\r\n // Se siamo in localhost e in development, usa automaticamente la chain locale\r\n const targetChain = isLocalEnvironment() ? 'localhost' : chain;\r\n const chainConfig = getAddressesForChain(targetChain);\r\n \r\n console.log(`Using ${targetChain} configuration:`, chainConfig);\r\n\r\n // Usa gli indirizzi dalla configurazione\r\n const contract = new ethers.Contract(\r\n chainConfig.PROOF_OF_INTEGRITY_ADDRESS,\r\n PROOF_OF_INTEGRITY_ABI,\r\n signer\r\n );\r\n\r\n // Funzione per verificare on-chain\r\n const verifyOnChain = async (nodeId, contentHash) => {\r\n console.log(\"Verifying on chain:\", { nodeId, contentHash });\r\n const signer = await getSigner();\r\n const contract = new ethers.Contract(\r\n PROOF_CONTRACT_ADDRESS,\r\n PROOF_OF_INTEGRITY_ABI,\r\n signer\r\n );\r\n const [isValid, timestamp, updater] = await contract.verifyData(\r\n ethers.toUtf8Bytes(nodeId),\r\n contentHash\r\n );\r\n console.log(\"Verification result:\", { isValid, timestamp, updater });\r\n return { isValid, timestamp, updater };\r\n };\r\n\r\n // Funzione per scrivere on-chain\r\n const writeOnChain = async (nodeId, contentHash) => {\r\n console.log(\"Writing on chain:\", { nodeId, contentHash });\r\n const signer = await getSigner();\r\n const contract = new ethers.Contract(\r\n PROOF_CONTRACT_ADDRESS,\r\n PROOF_OF_INTEGRITY_ABI,\r\n signer\r\n );\r\n const tx = await contract.updateData(\r\n ethers.toUtf8Bytes(nodeId),\r\n contentHash\r\n );\r\n console.log(\"Transaction sent:\", tx.hash);\r\n const receipt = await tx.wait();\r\n console.log(\"Transaction confirmed:\", receipt);\r\n return tx;\r\n };\r\n\r\n // Funzione per ottenere l'ultimo record\r\n const getLatestRecord = async (nodeId) => {\r\n const signer = await getSigner();\r\n const contract = new ethers.Contract(\r\n PROOF_CONTRACT_ADDRESS,\r\n PROOF_OF_INTEGRITY_ABI,\r\n signer\r\n );\r\n const [contentHash, timestamp, updater] = await contract.getLatestRecord(\r\n ethers.toUtf8Bytes(nodeId)\r\n );\r\n console.log(\"Latest record from blockchain:\", {\r\n nodeId,\r\n contentHash,\r\n timestamp,\r\n updater,\r\n });\r\n return { contentHash, timestamp, updater };\r\n };\r\n\r\n \r\n if (nodeId && !data) {\r\n // Case 1: User passes only node\r\n gun.get(nodeId).once(async (existingData) => {\r\n if (!existingData) {\r\n if (callback) callback({ err: \"Node not found in GunDB\" });\r\n return;\r\n }\r\n\r\n console.log(\"existingData\", existingData);\r\n\r\n // Use stored contentHash instead of recalculating\r\n const contentHash = existingData._contentHash;\r\n console.log(\"contentHash\", contentHash);\r\n\r\n if (!contentHash) {\r\n if (callback) callback({ err: \"No content hash found for this node\" });\r\n return;\r\n }\r\n\r\n try {\r\n const { isValid, timestamp, updater } = await verifyOnChain(\r\n nodeId,\r\n contentHash\r\n );\r\n const latestRecord = await getLatestRecord(nodeId);\r\n\r\n if (isValid) {\r\n if (callback)\r\n callback({\r\n ok: true,\r\n message: \"Data verified on blockchain\",\r\n timestamp,\r\n updater,\r\n latestRecord,\r\n });\r\n } else {\r\n if (callback)\r\n callback({\r\n ok: false,\r\n message: \"Data not verified on blockchain\",\r\n latestRecord,\r\n });\r\n }\r\n } catch (error) {\r\n if (callback) callback({ err: error.message });\r\n }\r\n });\r\n } else if (data && !nodeId) {\r\n // Case 2: User passes only text (data)\r\n const newNodeId = generateRandomId();\r\n const dataString = JSON.stringify(data);\r\n const contentHash = ethers.keccak256(ethers.toUtf8Bytes(dataString));\r\n\r\n gun\r\n .get(newNodeId)\r\n .put({ ...data, _contentHash: contentHash }, async (ack) => {\r\n console.log(\"ack\", ack);\r\n if (ack.err) {\r\n if (callback) callback({ err: \"Error saving data to GunDB\" });\r\n return;\r\n }\r\n\r\n try {\r\n const tx = await writeOnChain(newNodeId, contentHash);\r\n if (callback)\r\n callback({\r\n ok: true,\r\n message: \"Data written to GunDB and blockchain\",\r\n nodeId: newNodeId,\r\n txHash: tx.hash,\r\n });\r\n } catch (error) {\r\n if (callback) callback({ err: error.message });\r\n }\r\n });\r\n } else {\r\n if (callback)\r\n callback({\r\n err: \"Invalid input. Provide either nodeId or data, not both.\",\r\n });\r\n }\r\n\r\n return gun;\r\n } catch (error) {\r\n callback({ err: error.message });\r\n return this;\r\n }\r\n};\r\n\r\n// =============================================\r\n// STEALTH ADDRESS CORE FUNCTIONS\r\n// =============================================\r\n/**\r\n * Converts a Gun private key to an Ethereum account.\r\n * @param {string} gunPrivateKey - The Gun private key in base64url format.\r\n * @returns {Object} An object containing the Ethereum account and public key.\r\n */\r\nGun.chain.gunToEthAccount = function (gunPrivateKey) {\r\n return gunToEthAccount(gunPrivateKey);\r\n};\r\n\r\n/**\r\n * Generate a stealth key and related key pairs\r\n * @param {string} recipientAddress - The recipient's Ethereum address\r\n * @param {string} signature - The sender's signature to access their keys\r\n * @returns {Promise<Object>} Object containing stealth addresses and keys\r\n */\r\nGun.chain.generateStealthAddress = async function (recipientAddress, signature) {\r\n try {\r\n const gun = this;\r\n \r\n // Get recipient's public keys\r\n const recipientData = await gun\r\n .get(\"gun-eth\")\r\n .get(\"users\")\r\n .get(recipientAddress)\r\n .get(\"publicKeys\")\r\n .then();\r\n\r\n if (!recipientData || !recipientData.viewingPublicKey || !recipientData.spendingPublicKey) {\r\n throw new Error(\"Recipient's public keys not found\");\r\n }\r\n\r\n // Get sender's keys\r\n const senderAddress = await this.verifySignature(MESSAGE_TO_SIGN, signature);\r\n const password = generatePassword(signature);\r\n \r\n const senderData = await gun\r\n .get(\"gun-eth\")\r\n .get(\"users\")\r\n .get(senderAddress)\r\n .then();\r\n\r\n if (!senderData || !senderData.s_pair) {\r\n throw new Error(\"Sender's keys not found\");\r\n }\r\n\r\n // Decrypt sender's spending pair\r\n let spendingKeyPair;\r\n try {\r\n const decryptedData = await SEA.decrypt(senderData.s_pair, password);\r\n spendingKeyPair = typeof decryptedData === 'string' ? \r\n JSON.parse(decryptedData) : \r\n decryptedData;\r\n } catch (error) {\r\n console.error(\"Error decrypting spending pair:\", error);\r\n throw new Error(\"Unable to decrypt spending pair\");\r\n }\r\n\r\n // Generate shared secret using SEA ECDH with encryption public key\r\n const sharedSecret = await SEA.secret(recipientData.viewingPublicKey, spendingKeyPair);\r\n\r\n if (!sharedSecret) {\r\n throw new Error(\"Unable to generate shared secret\");\r\n }\r\n\r\n console.log(\"Generate shared secret:\", sharedSecret);\r\n\r\n const { stealthAddress } = deriveStealthAddress(\r\n sharedSecret,\r\n recipientData.spendingPublicKey\r\n );\r\n\r\n return {\r\n stealthAddress,\r\n senderPublicKey: spendingKeyPair.epub, // Use encryption public key\r\n spendingPublicKey: recipientData.spendingPublicKey\r\n };\r\n\r\n } catch (error) {\r\n console.error(\"Error generating stealth address:\", error);\r\n throw error;\r\n }\r\n};\r\n\r\n/**\r\n * Publish public keys needed to receive stealth payments\r\n * @param {string} signature - The signature to authenticate the user\r\n * @returns {Promise<void>}\r\n */\r\nGun.chain.publishStealthKeys = async function (signature) {\r\n try {\r\n const gun = this;\r\n const address = await this.verifySignature(MESSAGE_TO_SIGN, signature);\r\n const password = generatePassword(signature);\r\n\r\n // Get encrypted key pairs\r\n const encryptedData = await gun\r\n .get(\"gun-eth\")\r\n .get(\"users\")\r\n .get(address)\r\n .then();\r\n\r\n if (!encryptedData || !encryptedData.v_pair || !encryptedData.s_pair) {\r\n throw new Error(\"Keys not found\");\r\n }\r\n\r\n // Decrypt viewing and spending pairs\r\n const viewingKeyPair = JSON.parse(\r\n await SEA.decrypt(encryptedData.v_pair, password)\r\n );\r\n const spendingKeyPair = JSON.parse(\r\n await SEA.decrypt(encryptedData.s_pair, password)\r\n );\r\n\r\n const viewingAccount = gunToEthAccount(viewingKeyPair.priv);\r\n const spendingAccount = gunToEthAccount(spendingKeyPair.priv);\r\n\r\n // Publish only public keys\r\n gun.get(\"gun-eth\").get(\"users\").get(address).get(\"publicKeys\").put({\r\n viewingPublicKey: viewingAccount.publicKey,\r\n spendingPublicKey: spendingAccount.publicKey,\r\n });\r\n\r\n console.log(\"Stealth public keys published successfully\");\r\n } catch (error) {\r\n console.error(\"Error publishing stealth keys:\", error);\r\n throw error;\r\n }\r\n};\r\n\r\n// =============================================\r\n// STEALTH PAYMENT FUNCTIONS\r\n// =============================================\r\n/**\r\n * Recover funds from a stealth address\r\n * @param {string} stealthAddress - The stealth address to recover funds from\r\n * @param {string} senderPublicKey - The sender's public key used to generate the address\r\n * @param {string} signature - The signature to decrypt private keys\r\n * @returns {Promise<Object>} Object containing wallet to access funds\r\n */\r\nGun.chain.recoverStealthFunds = async function (\r\n stealthAddress,\r\n senderPublicKey,\r\n signature,\r\n spendingPublicKey\r\n) {\r\n try {\r\n const gun = this;\r\n const password = generatePassword(signature);\r\n\r\n // Get own key pairs\r\n const myAddress = await this.verifySignature(MESSAGE_TO_SIGN, signature);\r\n const encryptedData = await gun\r\n .get(\"gun-eth\")\r\n .get(\"users\")\r\n .get(myAddress)\r\n .then();\r\n\r\n if (!encryptedData || !encryptedData.v_pair || !encryptedData.s_pair) {\r\n throw new Error(\"Keys not found\");\r\n }\r\n\r\n // Decrypt viewing and spending pairs\r\n let viewingKeyPair;\r\n try {\r\n const decryptedViewingData = await SEA.decrypt(encryptedData.v_pair, password);\r\n viewingKeyPair = typeof decryptedViewingData === 'string' ? \r\n JSON.parse(decryptedViewingData) : \r\n decryptedViewingData;\r\n } catch (error) {\r\n console.error(\"Error decrypting keys:\", error);\r\n throw new Error(\"Unable to decrypt keys\");\r\n }\r\n\r\n // Generate shared secret using SEA ECDH\r\n const sharedSecret = await SEA.secret(senderPublicKey, viewingKeyPair);\r\n\r\n if (!sharedSecret) {\r\n throw new Error(\"Unable to generate shared secret\");\r\n }\r\n\r\n console.log(\"Recover shared secret:\", sharedSecret);\r\n\r\n const { wallet, stealthAddress: recoveredAddress } = deriveStealthAddress(\r\n sharedSecret,\r\n spendingPublicKey\r\n );\r\n\r\n // Verify address matches\r\n if (recoveredAddress.toLowerCase() !== stealthAddress.toLowerCase()) {\r\n console.error(\"Mismatch:\", {\r\n recovered: recoveredAddress,\r\n expected: stealthAddress,\r\n sharedSecret\r\n });\r\n throw new Error(\"Recovered stealth address does not match\");\r\n }\r\n\r\n return {\r\n wallet,\r\n address: recoveredAddress,\r\n };\r\n } catch (error) {\r\n console.error(\"Error recovering stealth funds:\", error);\r\n throw error;\r\n }\r\n};\r\n\r\n/**\r\n * Announce a stealth payment\r\n * @param {string} stealthAddress - The generated stealth address\r\n * @param {string} senderPublicKey - The sender's public key\r\n * @param {string} spendingPublicKey - The spending public key\r\n * @param {string} signature - The sender's signature\r\n * @returns {Promise<void>}\r\n */\r\nGun.chain.announceStealthPayment = async function (\r\n stealthAddress,\r\n senderPublicKey,\r\n spendingPublicKey,\r\n signature,\r\n options = { onChain: false, chain: 'optimismSepolia' }\r\n) {\r\n try {\r\n const gun = this;\r\n const senderAddress = await this.verifySignature(MESSAGE_TO_SIGN, signature);\r\n\r\n if (options.onChain) {\r\n // On-chain announcement\r\n const signer = await getSigner();\r\n const chainAddresses = getAddressesForChain(options.chain);\r\n const contractAddress = chainAddresses.STEALTH_ANNOUNCER_ADDRESS;\r\n\r\n console.log(\"Using contract address:\", contractAddress);\r\n\r\n const contract = new ethers.Contract(\r\n contractAddress,\r\n STEALTH_ANNOUNCER_ABI,\r\n signer\r\n );\r\n\r\n // Get dev fee from contract\r\n const devFee = await contract.devFee();\r\n console.log(\"Dev fee:\", devFee.toString());\r\n\r\n // Call contract\r\n const tx = await contract.announcePayment(\r\n senderPublicKey,\r\n spendingPublicKey,\r\n stealthAddress,\r\n { value: devFee }\r\n );\r\n \r\n console.log(\"Transaction sent:\", tx.hash);\r\n const receipt = await tx.wait();\r\n console.log(\"Transaction confirmed:\", receipt.hash);\r\n \r\n console.log(\"Stealth payment announced on-chain (dev fee paid)\");\r\n } else {\r\n // Off-chain announcement (GunDB)\r\n gun\r\n .get(\"gun-eth\")\r\n .get(\"stealth-payments\")\r\n .set({\r\n stealthAddress,\r\n senderAddress,\r\n senderPublicKey,\r\n spendingPublicKey,\r\n timestamp: Date.now(),\r\n });\r\n console.log(\"Stealth payment announced off-chain\");\r\n }\r\n } catch (error) {\r\n console.error(\"Error announcing stealth payment:\", error);\r\n console.error(\"Error details:\", error.stack);\r\n throw error;\r\n }\r\n};\r\n\r\n/**\r\n * Get all stealth payments for an address\r\n * @param {string} signature - The signature to authenticate the user\r\n * @returns {Promise<Array>} List of stealth payments\r\n */\r\nGun.chain.getStealthPayments = async function (signature, options = { source: 'both' }) {\r\n try {\r\n const payments = [];\r\n\r\n if (options.source === 'onChain' || options.source === 'both') {\r\n // Get on-chain payments\r\n const signer = await getSigner();\r\n const contractAddress = process.env.NODE_ENV === 'development' \r\n ? LOCAL_CONFIG.STEALTH_ANNOUNCER_ADDRESS \r\n : STEALTH_ANNOUNCER_ADDRESS;\r\n\r\n const contract = new ethers.Contract(\r\n contractAddress,\r\n STEALTH_ANNOUNCER_ABI,\r\n signer\r\n );\r\n \r\n try {\r\n // Get total number of announcements\r\n const totalAnnouncements = await contract.getAnnouncementsCount();\r\n const totalCount = Number(totalAnnouncements.toString());\r\n console.log(\"Total on-chain announcements:\", totalCount);\r\n \r\n if (totalCount > 0) {\r\n // Get announcements in batches of 100\r\n const batchSize = 100;\r\n const lastIndex = totalCount - 1;\r\n \r\n for(let i = 0; i <= lastIndex; i += batchSize) {\r\n const toIndex = Math.min(i + batchSize - 1, lastIndex);\r\n const batch = await contract.getAnnouncementsInRange(i, toIndex);\r\n \r\n // For each announcement, try to decrypt\r\n for(const announcement of batch) {\r\n try {\r\n // Verify announcement is valid\r\n if (!announcement || !announcement.stealthAddress || \r\n !announcement.senderPublicKey || !announcement.spendingPublicKey) {\r\n console.log(\"Invalid announcement:\", announcement);\r\n continue;\r\n }\r\n\r\n // Try to recover funds to verify if announcement is for us\r\n const recoveredWallet = await this.recoverStealthFunds(\r\n announcement.stealthAddress,\r\n announcement.senderPublicKey,\r\n signature,\r\n announcement.spendingPublicKey\r\n );\r\n \r\n // If no errors thrown, announcement is for us\r\n payments.push({\r\n stealthAddress: announcement.stealthAddress,\r\n senderPublicKey: announcement.senderPublicKey,\r\n spendingPublicKey: announcement.spendingPublicKey,\r\n timestamp: Number(announcement.timestamp),\r\n source: 'onChain',\r\n wallet: recoveredWallet\r\n });\r\n\r\n } catch (e) {\r\n // Not for us, continue\r\n console.log(`Announcement not for us: ${announcement.stealthAddress}`);\r\n continue;\r\n }\r\n }\r\n }\r\n }\r\n } catch (error) {\r\n console.error(\"Error retrieving on-chain announcements:\", error);\r\n }\r\n }\r\n\r\n if (options.source === 'offChain' || options.source === 'both') {\r\n // Get off-chain payments\r\n const gun = this;\r\n const offChainPayments = await new Promise((resolve) => {\r\n const p = [];\r\n gun\r\n .get(\"gun-eth\")\r\n .get(\"stealth-payments\")\r\n .get(recipientAddress)\r\n .map()\r\n .once((payment, id) => {\r\n if (payment?.stealthAddress) {\r\n p.push({ ...payment, id, source: 'offChain' });\r\n }\r\n });\r\n setTimeout(() => resolve(p), 2000);\r\n });\r\n \r\n payments.push(...offChainPayments);\r\n }\r\n\r\n console.log(`Found ${payments.length} stealth payments`);\r\n return payments;\r\n } catch (error) {\r\n console.error(\"Error retrieving stealth payments:\", error);\r\n throw error;\r\n }\r\n};\r\n\r\n/**\r\n * Clean up old stealth payments\r\n * @param {string} recipientAddress - The recipient's address\r\n * @returns {Promise<void>}\r\n */\r\nGun.chain.cleanStealthPayments = async function(recipientAddress) {\r\n try {\r\n const gun = this;\r\n const payments = await gun\r\n .get(\"gun-eth\")\r\n .get(\"stealth-payments\")\r\n .get(recipientAddress)\r\n .map()\r\n .once()\r\n .then();\r\n\r\n // Remove empty or invalid nodes\r\n if (payments) {\r\n Object.keys(payments).forEach(async (key) => {\r\n const payment = payments[key];\r\n if (!payment || !payment.stealthAddress || !payment.senderPublicKey || !payment.spendingPublicKey) {\r\n await gun\r\n .get(\"gun-eth\")\r\n .get(\"stealth-payments\")\r\n .get(recipientAddress)\r\n .get(key)\r\n .put(null);\r\n }\r\n });\r\n }\r\n } catch (error) {\r\n console.error(\"Error cleaning stealth payments:\", error);\r\n }\r\n};\r\n\r\n// =============================================\r\n// EXPORTS\r\n// =============================================\r\n\r\n// Crea una classe GunEth che contiene tutti i metodi e le utility\r\nexport class GunEth {\r\n // Static utility methods\r\n static generateRandomId = generateRandomId;\r\n static generatePassword = generatePassword;\r\n static gunToEthAccount = gunToEthAccount;\r\n static getSigner = getSigner;\r\n static deriveStealthAddress = deriveStealthAddress;\r\n \r\n // Chain methods\r\n static chainMethods = {\r\n setSigner: Gun.chain.setSigner,\r\n getSigner: Gun.chain.getSigner,\r\n verifySignature: Gun.chain.verifySignature,\r\n generatePassword: Gun.chain.generatePassword,\r\n createSignature: Gun.chain.createSignature,\r\n createAndStoreEncryptedPair: Gun.chain.createAndStoreEncryptedPair,\r\n getAndDecryptPair: Gun.chain.getAndDecryptPair,\r\n proof: Gun.chain.proof,\r\n gunToEthAccount: Gun.chain.gunToEthAccount,\r\n generateStealthAddress: Gun.chain.generateStealthAddress,\r\n publishStealthKeys: Gun.chain.publishStealthKeys,\r\n recoverStealthFunds: Gun.chain.recoverStealthFunds,\r\n announceStealthPayment: Gun.chain.announceStealthPayment,\r\n getStealthPayments: Gun.chain.getStealthPayments,\r\n cleanStealthPayments: Gun.chain.cleanStealthPayments\r\n };\r\n\r\n // Constants\r\n static MESSAGE_TO_SIGN = MESSAGE_TO_SIGN;\r\n static PROOF_CONTRACT_ADDRESS = PROOF_CONTRACT_ADDRESS;\r\n static LOCAL_CONFIG = LOCAL_CONFIG;\r\n}\r\n\r\n// Esporta Gun come default\r\nexport default Gun;\r\n"],"names":["contractAddresses","ethers"],"mappings":"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"}
1
+ {"version":3,"file":"gun-eth.cjs.js","sources":["../node_modules/gun/sea.js","../src/config/local.js","../src/abis/abis.js","../src/index.js"],"sourcesContent":[";(function(){\n\n /* UNBUILD */\n function USE(arg, req){\n return req? require(arg) : arg.slice? USE[R(arg)] : function(mod, path){\n arg(mod = {exports: {}});\n USE[R(path)] = mod.exports;\n }\n function R(p){\n return p.split('/').slice(-1).toString().replace('.js','');\n }\n }\n if(typeof module !== \"undefined\"){ var MODULE = module }\n /* UNBUILD */\n\n ;USE(function(module){\n // Security, Encryption, and Authorization: SEA.js\n // MANDATORY READING: https://gun.eco/explainers/data/security.html\n // IT IS IMPLEMENTED IN A POLYFILL/SHIM APPROACH.\n // THIS IS AN EARLY ALPHA!\n\n if(typeof self !== \"undefined\"){ module.window = self } // should be safe for at least browser/worker/nodejs, need to check other envs like RN etc.\n if(typeof window !== \"undefined\"){ module.window = window }\n\n var tmp = module.window || module, u;\n var SEA = tmp.SEA || {};\n\n if(SEA.window = module.window){ SEA.window.SEA = SEA }\n\n try{ if(u+'' !== typeof MODULE){ MODULE.exports = SEA } }catch(e){}\n module.exports = SEA;\n })(USE, './root');\n\n ;USE(function(module){\n var SEA = USE('./root');\n try{ if(SEA.window){\n if(location.protocol.indexOf('s') < 0\n && location.host.indexOf('localhost') < 0\n && ! /^127\\.\\d+\\.\\d+\\.\\d+$/.test(location.hostname)\n && location.protocol.indexOf('file:') < 0){\n console.warn('HTTPS needed for WebCrypto in SEA, redirecting...');\n location.protocol = 'https:'; // WebCrypto does NOT work without HTTPS!\n }\n } }catch(e){}\n })(USE, './https');\n\n ;USE(function(module){\n var u;\n if(u+''== typeof btoa){\n if(u+'' == typeof Buffer){\n try{ global.Buffer = USE(\"buffer\", 1).Buffer }catch(e){ console.log(\"Please `npm install buffer` or add it to your package.json !\") }\n }\n global.btoa = function(data){ return Buffer.from(data, \"binary\").toString(\"base64\") };\n global.atob = function(data){ return Buffer.from(data, \"base64\").toString(\"binary\") };\n }\n })(USE, './base64');\n\n ;USE(function(module){\n USE('./base64');\n // This is Array extended to have .toString(['utf8'|'hex'|'base64'])\n function SeaArray() {}\n Object.assign(SeaArray, { from: Array.from })\n SeaArray.prototype = Object.create(Array.prototype)\n SeaArray.prototype.toString = function(enc, start, end) { enc = enc || 'utf8'; start = start || 0;\n const length = this.length\n if (enc === 'hex') {\n const buf = new Uint8Array(this)\n return [ ...Array(((end && (end + 1)) || length) - start).keys()]\n .map((i) => buf[ i + start ].toString(16).padStart(2, '0')).join('')\n }\n if (enc === 'utf8') {\n return Array.from(\n { length: (end || length) - start },\n (_, i) => String.fromCharCode(this[ i + start])\n ).join('')\n }\n if (enc === 'base64') {\n return btoa(this)\n }\n }\n module.exports = SeaArray;\n })(USE, './array');\n\n ;USE(function(module){\n USE('./base64');\n // This is Buffer implementation used in SEA. Functionality is mostly\n // compatible with NodeJS 'safe-buffer' and is used for encoding conversions\n // between binary and 'hex' | 'utf8' | 'base64'\n // See documentation and validation for safe implementation in:\n // https://github.com/feross/safe-buffer#update\n var SeaArray = USE('./array');\n function SafeBuffer(...props) {\n console.warn('new SafeBuffer() is depreciated, please use SafeBuffer.from()')\n return SafeBuffer.from(...props)\n }\n SafeBuffer.prototype = Object.create(Array.prototype)\n Object.assign(SafeBuffer, {\n // (data, enc) where typeof data === 'string' then enc === 'utf8'|'hex'|'base64'\n from() {\n if (!Object.keys(arguments).length || arguments[0]==null) {\n throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n }\n const input = arguments[0]\n let buf\n if (typeof input === 'string') {\n const enc = arguments[1] || 'utf8'\n if (enc === 'hex') {\n const bytes = input.match(/([\\da-fA-F]{2})/g)\n .map((byte) => parseInt(byte, 16))\n if (!bytes || !bytes.length) {\n throw new TypeError('Invalid first argument for type \\'hex\\'.')\n }\n buf = SeaArray.from(bytes)\n } else if (enc === 'utf8' || 'binary' === enc) { // EDIT BY MARK: I think this is safe, tested it against a couple \"binary\" strings. This lets SafeBuffer match NodeJS Buffer behavior more where it safely btoas regular strings.\n const length = input.length\n const words = new Uint16Array(length)\n Array.from({ length: length }, (_, i) => words[i] = input.charCodeAt(i))\n buf = SeaArray.from(words)\n } else if (enc === 'base64') {\n const dec = atob(input)\n const length = dec.length\n const bytes = new Uint8Array(length)\n Array.from({ length: length }, (_, i) => bytes[i] = dec.charCodeAt(i))\n buf = SeaArray.from(bytes)\n } else if (enc === 'binary') { // deprecated by above comment\n buf = SeaArray.from(input) // some btoas were mishandled.\n } else {\n console.info('SafeBuffer.from unknown encoding: '+enc)\n }\n return buf\n }\n const byteLength = input.byteLength // what is going on here? FOR MARTTI\n const length = input.byteLength ? input.byteLength : input.length\n if (length) {\n let buf\n if (input instanceof ArrayBuffer) {\n buf = new Uint8Array(input)\n }\n return SeaArray.from(buf || input)\n }\n },\n // This is 'safe-buffer.alloc' sans encoding support\n alloc(length, fill = 0 /*, enc*/ ) {\n return SeaArray.from(new Uint8Array(Array.from({ length: length }, () => fill)))\n },\n // This is normal UNSAFE 'buffer.alloc' or 'new Buffer(length)' - don't use!\n allocUnsafe(length) {\n return SeaArray.from(new Uint8Array(Array.from({ length : length })))\n },\n // This puts together array of array like members\n concat(arr) { // octet array\n if (!Array.isArray(arr)) {\n throw new TypeError('First argument must be Array containing ArrayBuffer or Uint8Array instances.')\n }\n return SeaArray.from(arr.reduce((ret, item) => ret.concat(Array.from(item)), []))\n }\n })\n SafeBuffer.prototype.from = SafeBuffer.from\n SafeBuffer.prototype.toString = SeaArray.prototype.toString\n\n module.exports = SafeBuffer;\n })(USE, './buffer');\n\n ;USE(function(module){\n const SEA = USE('./root')\n const api = {Buffer: USE('./buffer')}\n var o = {}, u;\n\n // ideally we can move away from JSON entirely? unlikely due to compatibility issues... oh well.\n JSON.parseAsync = JSON.parseAsync || function(t,cb,r){ var u; try{ cb(u, JSON.parse(t,r)) }catch(e){ cb(e) } }\n JSON.stringifyAsync = JSON.stringifyAsync || function(v,cb,r,s){ var u; try{ cb(u, JSON.stringify(v,r,s)) }catch(e){ cb(e) } }\n\n api.parse = function(t,r){ return new Promise(function(res, rej){\n JSON.parseAsync(t,function(err, raw){ err? rej(err) : res(raw) },r);\n })}\n api.stringify = function(v,r,s){ return new Promise(function(res, rej){\n JSON.stringifyAsync(v,function(err, raw){ err? rej(err) : res(raw) },r,s);\n })}\n\n if(SEA.window){\n api.crypto = SEA.window.crypto || SEA.window.msCrypto\n api.subtle = (api.crypto||o).subtle || (api.crypto||o).webkitSubtle;\n api.TextEncoder = SEA.window.TextEncoder;\n api.TextDecoder = SEA.window.TextDecoder;\n api.random = (len) => api.Buffer.from(api.crypto.getRandomValues(new Uint8Array(api.Buffer.alloc(len))));\n }\n if(!api.TextDecoder)\n {\n const { TextEncoder, TextDecoder } = USE((u+'' == typeof MODULE?'.':'')+'./lib/text-encoding', 1);\n api.TextDecoder = TextDecoder;\n api.TextEncoder = TextEncoder;\n }\n if(!api.crypto)\n {\n try\n {\n var crypto = USE('crypto', 1);\n Object.assign(api, {\n crypto,\n random: (len) => api.Buffer.from(crypto.randomBytes(len))\n }); \n const { Crypto: WebCrypto } = USE('@peculiar/webcrypto', 1);\n api.ossl = api.subtle = new WebCrypto({directory: 'ossl'}).subtle // ECDH\n }\n catch(e){\n console.log(\"Please `npm install @peculiar/webcrypto` or add it to your package.json !\");\n }}\n\n module.exports = api\n })(USE, './shim');\n\n ;USE(function(module){\n var SEA = USE('./root');\n var shim = USE('./shim');\n var s = {};\n s.pbkdf2 = {hash: {name : 'SHA-256'}, iter: 100000, ks: 64};\n s.ecdsa = {\n pair: {name: 'ECDSA', namedCurve: 'P-256'},\n sign: {name: 'ECDSA', hash: {name: 'SHA-256'}}\n };\n s.ecdh = {name: 'ECDH', namedCurve: 'P-256'};\n\n // This creates Web Cryptography API compliant JWK for sign/verify purposes\n s.jwk = function(pub, d){ // d === priv\n pub = pub.split('.');\n var x = pub[0], y = pub[1];\n var jwk = {kty: \"EC\", crv: \"P-256\", x: x, y: y, ext: true};\n jwk.key_ops = d ? ['sign'] : ['verify'];\n if(d){ jwk.d = d }\n return jwk;\n };\n \n s.keyToJwk = function(keyBytes) {\n const keyB64 = keyBytes.toString('base64');\n const k = keyB64.replace(/\\+/g, '-').replace(/\\//g, '_').replace(/\\=/g, '');\n return { kty: 'oct', k: k, ext: false, alg: 'A256GCM' };\n }\n\n s.recall = {\n validity: 12 * 60 * 60, // internally in seconds : 12 hours\n hook: function(props){ return props } // { iat, exp, alias, remember } // or return new Promise((resolve, reject) => resolve(props)\n };\n\n s.check = function(t){ return (typeof t == 'string') && ('SEA{' === t.slice(0,4)) }\n s.parse = async function p(t){ try {\n var yes = (typeof t == 'string');\n if(yes && 'SEA{' === t.slice(0,4)){ t = t.slice(3) }\n return yes ? await shim.parse(t) : t;\n } catch (e) {}\n return t;\n }\n\n SEA.opt = s;\n module.exports = s\n })(USE, './settings');\n\n ;USE(function(module){\n var shim = USE('./shim');\n module.exports = async function(d, o){\n var t = (typeof d == 'string')? d : await shim.stringify(d);\n var hash = await shim.subtle.digest({name: o||'SHA-256'}, new shim.TextEncoder().encode(t));\n return shim.Buffer.from(hash);\n }\n })(USE, './sha256');\n\n ;USE(function(module){\n // This internal func returns SHA-1 hashed data for KeyID generation\n const __shim = USE('./shim')\n const subtle = __shim.subtle\n const ossl = __shim.ossl ? __shim.ossl : subtle\n const sha1hash = (b) => ossl.digest({name: 'SHA-1'}, new ArrayBuffer(b))\n module.exports = sha1hash\n })(USE, './sha1');\n\n ;USE(function(module){\n var SEA = USE('./root');\n var shim = USE('./shim');\n var S = USE('./settings');\n var sha = USE('./sha256');\n var u;\n\n SEA.work = SEA.work || (async (data, pair, cb, opt) => { try { // used to be named `proof`\n var salt = (pair||{}).epub || pair; // epub not recommended, salt should be random!\n opt = opt || {};\n if(salt instanceof Function){\n cb = salt;\n salt = u;\n }\n data = (typeof data == 'string')? data : await shim.stringify(data);\n if('sha' === (opt.name||'').toLowerCase().slice(0,3)){\n var rsha = shim.Buffer.from(await sha(data, opt.name), 'binary').toString(opt.encode || 'base64')\n if(cb){ try{ cb(rsha) }catch(e){console.log(e)} }\n return rsha;\n }\n salt = salt || shim.random(9);\n var key = await (shim.ossl || shim.subtle).importKey('raw', new shim.TextEncoder().encode(data), {name: opt.name || 'PBKDF2'}, false, ['deriveBits']);\n var work = await (shim.ossl || shim.subtle).deriveBits({\n name: opt.name || 'PBKDF2',\n iterations: opt.iterations || S.pbkdf2.iter,\n salt: new shim.TextEncoder().encode(opt.salt || salt),\n hash: opt.hash || S.pbkdf2.hash,\n }, key, opt.length || (S.pbkdf2.ks * 8))\n data = shim.random(data.length) // Erase data in case of passphrase\n var r = shim.Buffer.from(work, 'binary').toString(opt.encode || 'base64')\n if(cb){ try{ cb(r) }catch(e){console.log(e)} }\n return r;\n } catch(e) { \n console.log(e);\n SEA.err = e;\n if(SEA.throw){ throw e }\n if(cb){ cb() }\n return;\n }});\n\n module.exports = SEA.work;\n })(USE, './work');\n\n ;USE(function(module){\n var SEA = USE('./root');\n var shim = USE('./shim');\n var S = USE('./settings');\n\n SEA.name = SEA.name || (async (cb, opt) => { try {\n if(cb){ try{ cb() }catch(e){console.log(e)} }\n return;\n } catch(e) {\n console.log(e);\n SEA.err = e;\n if(SEA.throw){ throw e }\n if(cb){ cb() }\n return;\n }});\n\n //SEA.pair = async (data, proof, cb) => { try {\n SEA.pair = SEA.pair || (async (cb, opt) => { try {\n\n var ecdhSubtle = shim.ossl || shim.subtle;\n // First: ECDSA keys for signing/verifying...\n var sa = await shim.subtle.generateKey({name: 'ECDSA', namedCurve: 'P-256'}, true, [ 'sign', 'verify' ])\n .then(async (keys) => {\n // privateKey scope doesn't leak out from here!\n //const { d: priv } = await shim.subtle.exportKey('jwk', keys.privateKey)\n var key = {};\n key.priv = (await shim.subtle.exportKey('jwk', keys.privateKey)).d;\n var pub = await shim.subtle.exportKey('jwk', keys.publicKey);\n //const pub = Buff.from([ x, y ].join(':')).toString('base64') // old\n key.pub = pub.x+'.'+pub.y; // new\n // x and y are already base64\n // pub is UTF8 but filename/URL safe (https://www.ietf.org/rfc/rfc3986.txt)\n // but split on a non-base64 letter.\n return key;\n })\n \n // To include PGPv4 kind of keyId:\n // const pubId = await SEA.keyid(keys.pub)\n // Next: ECDH keys for encryption/decryption...\n\n try{\n var dh = await ecdhSubtle.generateKey({name: 'ECDH', namedCurve: 'P-256'}, true, ['deriveKey'])\n .then(async (keys) => {\n // privateKey scope doesn't leak out from here!\n var key = {};\n key.epriv = (await ecdhSubtle.exportKey('jwk', keys.privateKey)).d;\n var pub = await ecdhSubtle.exportKey('jwk', keys.publicKey);\n //const epub = Buff.from([ ex, ey ].join(':')).toString('base64') // old\n key.epub = pub.x+'.'+pub.y; // new\n // ex and ey are already base64\n // epub is UTF8 but filename/URL safe (https://www.ietf.org/rfc/rfc3986.txt)\n // but split on a non-base64 letter.\n return key;\n })\n }catch(e){\n if(SEA.window){ throw e }\n if(e == 'Error: ECDH is not a supported algorithm'){ console.log('Ignoring ECDH...') }\n else { throw e }\n } dh = dh || {};\n\n var r = { pub: sa.pub, priv: sa.priv, /* pubId, */ epub: dh.epub, epriv: dh.epriv }\n if(cb){ try{ cb(r) }catch(e){console.log(e)} }\n return r;\n } catch(e) {\n console.log(e);\n SEA.err = e;\n if(SEA.throw){ throw e }\n if(cb){ cb() }\n return;\n }});\n\n module.exports = SEA.pair;\n })(USE, './pair');\n\n ;USE(function(module){\n var SEA = USE('./root');\n var shim = USE('./shim');\n var S = USE('./settings');\n var sha = USE('./sha256');\n var u;\n\n SEA.sign = SEA.sign || (async (data, pair, cb, opt) => { try {\n opt = opt || {};\n if(!(pair||opt).priv){\n if(!SEA.I){ throw 'No signing key.' }\n pair = await SEA.I(null, {what: data, how: 'sign', why: opt.why});\n }\n if(u === data){ throw '`undefined` not allowed.' }\n var json = await S.parse(data);\n var check = opt.check = opt.check || json;\n if(SEA.verify && (SEA.opt.check(check) || (check && check.s && check.m))\n && u !== await SEA.verify(check, pair)){ // don't sign if we already signed it.\n var r = await S.parse(check);\n if(!opt.raw){ r = 'SEA' + await shim.stringify(r) }\n if(cb){ try{ cb(r) }catch(e){console.log(e)} }\n return r;\n }\n var pub = pair.pub;\n var priv = pair.priv;\n var jwk = S.jwk(pub, priv);\n var hash = await sha(json);\n var sig = await (shim.ossl || shim.subtle).importKey('jwk', jwk, {name: 'ECDSA', namedCurve: 'P-256'}, false, ['sign'])\n .then((key) => (shim.ossl || shim.subtle).sign({name: 'ECDSA', hash: {name: 'SHA-256'}}, key, new Uint8Array(hash))) // privateKey scope doesn't leak out from here!\n var r = {m: json, s: shim.Buffer.from(sig, 'binary').toString(opt.encode || 'base64')}\n if(!opt.raw){ r = 'SEA' + await shim.stringify(r) }\n\n if(cb){ try{ cb(r) }catch(e){console.log(e)} }\n return r;\n } catch(e) {\n console.log(e);\n SEA.err = e;\n if(SEA.throw){ throw e }\n if(cb){ cb() }\n return;\n }});\n\n module.exports = SEA.sign;\n })(USE, './sign');\n\n ;USE(function(module){\n var SEA = USE('./root');\n var shim = USE('./shim');\n var S = USE('./settings');\n var sha = USE('./sha256');\n var u;\n\n SEA.verify = SEA.verify || (async (data, pair, cb, opt) => { try {\n var json = await S.parse(data);\n if(false === pair){ // don't verify!\n var raw = await S.parse(json.m);\n if(cb){ try{ cb(raw) }catch(e){console.log(e)} }\n return raw;\n }\n opt = opt || {};\n // SEA.I // verify is free! Requires no user permission.\n var pub = pair.pub || pair;\n var key = SEA.opt.slow_leak? await SEA.opt.slow_leak(pub) : await (shim.ossl || shim.subtle).importKey('jwk', S.jwk(pub), {name: 'ECDSA', namedCurve: 'P-256'}, false, ['verify']);\n var hash = await sha(json.m);\n var buf, sig, check, tmp; try{\n buf = shim.Buffer.from(json.s, opt.encode || 'base64'); // NEW DEFAULT!\n sig = new Uint8Array(buf);\n check = await (shim.ossl || shim.subtle).verify({name: 'ECDSA', hash: {name: 'SHA-256'}}, key, sig, new Uint8Array(hash));\n if(!check){ throw \"Signature did not match.\" }\n }catch(e){\n if(SEA.opt.fallback){\n return await SEA.opt.fall_verify(data, pair, cb, opt);\n }\n }\n var r = check? await S.parse(json.m) : u;\n\n if(cb){ try{ cb(r) }catch(e){console.log(e)} }\n return r;\n } catch(e) {\n console.log(e); // mismatched owner FOR MARTTI\n SEA.err = e;\n if(SEA.throw){ throw e }\n if(cb){ cb() }\n return;\n }});\n\n module.exports = SEA.verify;\n // legacy & ossl memory leak mitigation:\n\n var knownKeys = {};\n var keyForPair = SEA.opt.slow_leak = pair => {\n if (knownKeys[pair]) return knownKeys[pair];\n var jwk = S.jwk(pair);\n knownKeys[pair] = (shim.ossl || shim.subtle).importKey(\"jwk\", jwk, {name: 'ECDSA', namedCurve: 'P-256'}, false, [\"verify\"]);\n return knownKeys[pair];\n };\n\n var O = SEA.opt;\n SEA.opt.fall_verify = async function(data, pair, cb, opt, f){\n if(f === SEA.opt.fallback){ throw \"Signature did not match\" } f = f || 1;\n var tmp = data||'';\n data = SEA.opt.unpack(data) || data;\n var json = await S.parse(data), pub = pair.pub || pair, key = await SEA.opt.slow_leak(pub);\n var hash = (f <= SEA.opt.fallback)? shim.Buffer.from(await shim.subtle.digest({name: 'SHA-256'}, new shim.TextEncoder().encode(await S.parse(json.m)))) : await sha(json.m); // this line is old bad buggy code but necessary for old compatibility.\n var buf; var sig; var check; try{\n buf = shim.Buffer.from(json.s, opt.encode || 'base64') // NEW DEFAULT!\n sig = new Uint8Array(buf)\n check = await (shim.ossl || shim.subtle).verify({name: 'ECDSA', hash: {name: 'SHA-256'}}, key, sig, new Uint8Array(hash))\n if(!check){ throw \"Signature did not match.\" }\n }catch(e){ try{\n buf = shim.Buffer.from(json.s, 'utf8') // AUTO BACKWARD OLD UTF8 DATA!\n sig = new Uint8Array(buf)\n check = await (shim.ossl || shim.subtle).verify({name: 'ECDSA', hash: {name: 'SHA-256'}}, key, sig, new Uint8Array(hash))\n }catch(e){\n if(!check){ throw \"Signature did not match.\" }\n }\n }\n var r = check? await S.parse(json.m) : u;\n O.fall_soul = tmp['#']; O.fall_key = tmp['.']; O.fall_val = data; O.fall_state = tmp['>'];\n if(cb){ try{ cb(r) }catch(e){console.log(e)} }\n return r;\n }\n SEA.opt.fallback = 2;\n\n })(USE, './verify');\n\n ;USE(function(module){\n var shim = USE('./shim');\n var S = USE('./settings');\n var sha256hash = USE('./sha256');\n\n const importGen = async (key, salt, opt) => {\n //const combo = shim.Buffer.concat([shim.Buffer.from(key, 'utf8'), salt || shim.random(8)]).toString('utf8') // old\n opt = opt || {};\n const combo = key + (salt || shim.random(8)).toString('utf8'); // new\n const hash = shim.Buffer.from(await sha256hash(combo), 'binary')\n \n const jwkKey = S.keyToJwk(hash) \n return await shim.subtle.importKey('jwk', jwkKey, {name:'AES-GCM'}, false, ['encrypt', 'decrypt'])\n }\n module.exports = importGen;\n })(USE, './aeskey');\n\n ;USE(function(module){\n var SEA = USE('./root');\n var shim = USE('./shim');\n var S = USE('./settings');\n var aeskey = USE('./aeskey');\n var u;\n\n SEA.encrypt = SEA.encrypt || (async (data, pair, cb, opt) => { try {\n opt = opt || {};\n var key = (pair||opt).epriv || pair;\n if(u === data){ throw '`undefined` not allowed.' }\n if(!key){\n if(!SEA.I){ throw 'No encryption key.' }\n pair = await SEA.I(null, {what: data, how: 'encrypt', why: opt.why});\n key = pair.epriv || pair;\n }\n var msg = (typeof data == 'string')? data : await shim.stringify(data);\n var rand = {s: shim.random(9), iv: shim.random(15)}; // consider making this 9 and 15 or 18 or 12 to reduce == padding.\n var ct = await aeskey(key, rand.s, opt).then((aes) => (/*shim.ossl ||*/ shim.subtle).encrypt({ // Keeping the AES key scope as private as possible...\n name: opt.name || 'AES-GCM', iv: new Uint8Array(rand.iv)\n }, aes, new shim.TextEncoder().encode(msg)));\n var r = {\n ct: shim.Buffer.from(ct, 'binary').toString(opt.encode || 'base64'),\n iv: rand.iv.toString(opt.encode || 'base64'),\n s: rand.s.toString(opt.encode || 'base64')\n }\n if(!opt.raw){ r = 'SEA' + await shim.stringify(r) }\n\n if(cb){ try{ cb(r) }catch(e){console.log(e)} }\n return r;\n } catch(e) { \n console.log(e);\n SEA.err = e;\n if(SEA.throw){ throw e }\n if(cb){ cb() }\n return;\n }});\n\n module.exports = SEA.encrypt;\n })(USE, './encrypt');\n\n ;USE(function(module){\n var SEA = USE('./root');\n var shim = USE('./shim');\n var S = USE('./settings');\n var aeskey = USE('./aeskey');\n\n SEA.decrypt = SEA.decrypt || (async (data, pair, cb, opt) => { try {\n opt = opt || {};\n var key = (pair||opt).epriv || pair;\n if(!key){\n if(!SEA.I){ throw 'No decryption key.' }\n pair = await SEA.I(null, {what: data, how: 'decrypt', why: opt.why});\n key = pair.epriv || pair;\n }\n var json = await S.parse(data);\n var buf, bufiv, bufct; try{\n buf = shim.Buffer.from(json.s, opt.encode || 'base64');\n bufiv = shim.Buffer.from(json.iv, opt.encode || 'base64');\n bufct = shim.Buffer.from(json.ct, opt.encode || 'base64');\n var ct = await aeskey(key, buf, opt).then((aes) => (/*shim.ossl ||*/ shim.subtle).decrypt({ // Keeping aesKey scope as private as possible...\n name: opt.name || 'AES-GCM', iv: new Uint8Array(bufiv), tagLength: 128\n }, aes, new Uint8Array(bufct)));\n }catch(e){\n if('utf8' === opt.encode){ throw \"Could not decrypt\" }\n if(SEA.opt.fallback){\n opt.encode = 'utf8';\n return await SEA.decrypt(data, pair, cb, opt);\n }\n }\n var r = await S.parse(new shim.TextDecoder('utf8').decode(ct));\n if(cb){ try{ cb(r) }catch(e){console.log(e)} }\n return r;\n } catch(e) { \n console.log(e);\n SEA.err = e;\n if(SEA.throw){ throw e }\n if(cb){ cb() }\n return;\n }});\n\n module.exports = SEA.decrypt;\n })(USE, './decrypt');\n\n ;USE(function(module){\n var SEA = USE('./root');\n var shim = USE('./shim');\n var S = USE('./settings');\n // Derive shared secret from other's pub and my epub/epriv \n SEA.secret = SEA.secret || (async (key, pair, cb, opt) => { try {\n opt = opt || {};\n if(!pair || !pair.epriv || !pair.epub){\n if(!SEA.I){ throw 'No secret mix.' }\n pair = await SEA.I(null, {what: key, how: 'secret', why: opt.why});\n }\n var pub = key.epub || key;\n var epub = pair.epub;\n var epriv = pair.epriv;\n var ecdhSubtle = shim.ossl || shim.subtle;\n var pubKeyData = keysToEcdhJwk(pub);\n var props = Object.assign({ public: await ecdhSubtle.importKey(...pubKeyData, true, []) },{name: 'ECDH', namedCurve: 'P-256'}); // Thanks to @sirpy !\n var privKeyData = keysToEcdhJwk(epub, epriv);\n var derived = await ecdhSubtle.importKey(...privKeyData, false, ['deriveBits']).then(async (privKey) => {\n // privateKey scope doesn't leak out from here!\n var derivedBits = await ecdhSubtle.deriveBits(props, privKey, 256);\n var rawBits = new Uint8Array(derivedBits);\n var derivedKey = await ecdhSubtle.importKey('raw', rawBits,{ name: 'AES-GCM', length: 256 }, true, [ 'encrypt', 'decrypt' ]);\n return ecdhSubtle.exportKey('jwk', derivedKey).then(({ k }) => k);\n })\n var r = derived;\n if(cb){ try{ cb(r) }catch(e){console.log(e)} }\n return r;\n } catch(e) {\n console.log(e);\n SEA.err = e;\n if(SEA.throw){ throw e }\n if(cb){ cb() }\n return;\n }});\n\n // can this be replaced with settings.jwk?\n var keysToEcdhJwk = (pub, d) => { // d === priv\n //var [ x, y ] = shim.Buffer.from(pub, 'base64').toString('utf8').split(':') // old\n var [ x, y ] = pub.split('.') // new\n var jwk = d ? { d: d } : {}\n return [ // Use with spread returned value...\n 'jwk',\n Object.assign(\n jwk,\n { x: x, y: y, kty: 'EC', crv: 'P-256', ext: true }\n ), // ??? refactor\n {name: 'ECDH', namedCurve: 'P-256'}\n ]\n }\n\n module.exports = SEA.secret;\n })(USE, './secret');\n\n ;USE(function(module){\n var SEA = USE('./root');\n // This is to certify that a group of \"certificants\" can \"put\" anything at a group of matched \"paths\" to the certificate authority's graph\n SEA.certify = SEA.certify || (async (certificants, policy = {}, authority, cb, opt = {}) => { try {\n /*\n The Certify Protocol was made out of love by a Vietnamese code enthusiast. Vietnamese people around the world deserve respect!\n IMPORTANT: A Certificate is like a Signature. No one knows who (authority) created/signed a cert until you put it into their graph.\n \"certificants\": '*' or a String (Bob.pub) || an Object that contains \"pub\" as a key || an array of [object || string]. These people will have the rights.\n \"policy\": A string ('inbox'), or a RAD/LEX object {'*': 'inbox'}, or an Array of RAD/LEX objects or strings. RAD/LEX object can contain key \"?\" with indexOf(\"*\") > -1 to force key equals certificant pub. This rule is used to check against soul+'/'+key using Gun.text.match or String.match.\n \"authority\": Key pair or priv of the certificate authority.\n \"cb\": A callback function after all things are done.\n \"opt\": If opt.expiry (a timestamp) is set, SEA won't sync data after opt.expiry. If opt.block is set, SEA will look for block before syncing.\n */\n console.log('SEA.certify() is an early experimental community supported method that may change API behavior without warning in any future version.')\n\n certificants = (() => {\n var data = []\n if (certificants) {\n if ((typeof certificants === 'string' || Array.isArray(certificants)) && certificants.indexOf('*') > -1) return '*'\n if (typeof certificants === 'string') return certificants\n if (Array.isArray(certificants)) {\n if (certificants.length === 1 && certificants[0]) return typeof certificants[0] === 'object' && certificants[0].pub ? certificants[0].pub : typeof certificants[0] === 'string' ? certificants[0] : null\n certificants.map(certificant => {\n if (typeof certificant ==='string') data.push(certificant)\n else if (typeof certificant === 'object' && certificant.pub) data.push(certificant.pub)\n })\n }\n\n if (typeof certificants === 'object' && certificants.pub) return certificants.pub\n return data.length > 0 ? data : null\n }\n return\n })()\n\n if (!certificants) return console.log(\"No certificant found.\")\n\n const expiry = opt.expiry && (typeof opt.expiry === 'number' || typeof opt.expiry === 'string') ? parseFloat(opt.expiry) : null\n const readPolicy = (policy || {}).read ? policy.read : null\n const writePolicy = (policy || {}).write ? policy.write : typeof policy === 'string' || Array.isArray(policy) || policy[\"+\"] || policy[\"#\"] || policy[\".\"] || policy[\"=\"] || policy[\"*\"] || policy[\">\"] || policy[\"<\"] ? policy : null\n // The \"blacklist\" feature is now renamed to \"block\". Why ? BECAUSE BLACK LIVES MATTER!\n // We can now use 3 keys: block, blacklist, ban\n const block = (opt || {}).block || (opt || {}).blacklist || (opt || {}).ban || {}\n const readBlock = block.read && (typeof block.read === 'string' || (block.read || {})['#']) ? block.read : null\n const writeBlock = typeof block === 'string' ? block : block.write && (typeof block.write === 'string' || block.write['#']) ? block.write : null\n\n if (!readPolicy && !writePolicy) return console.log(\"No policy found.\")\n\n // reserved keys: c, e, r, w, rb, wb\n const data = JSON.stringify({\n c: certificants,\n ...(expiry ? {e: expiry} : {}), // inject expiry if possible\n ...(readPolicy ? {r: readPolicy } : {}), // \"r\" stands for read, which means read permission.\n ...(writePolicy ? {w: writePolicy} : {}), // \"w\" stands for write, which means write permission.\n ...(readBlock ? {rb: readBlock} : {}), // inject READ block if possible\n ...(writeBlock ? {wb: writeBlock} : {}), // inject WRITE block if possible\n })\n\n const certificate = await SEA.sign(data, authority, null, {raw:1})\n\n var r = certificate\n if(!opt.raw){ r = 'SEA'+JSON.stringify(r) }\n if(cb){ try{ cb(r) }catch(e){console.log(e)} }\n return r;\n } catch(e) {\n SEA.err = e;\n if(SEA.throw){ throw e }\n if(cb){ cb() }\n return;\n }});\n\n module.exports = SEA.certify;\n })(USE, './certify');\n\n ;USE(function(module){\n var shim = USE('./shim');\n // Practical examples about usage found in tests.\n var SEA = USE('./root');\n SEA.work = USE('./work');\n SEA.sign = USE('./sign');\n SEA.verify = USE('./verify');\n SEA.encrypt = USE('./encrypt');\n SEA.decrypt = USE('./decrypt');\n SEA.certify = USE('./certify');\n //SEA.opt.aeskey = USE('./aeskey'); // not official! // this causes problems in latest WebCrypto.\n\n SEA.random = SEA.random || shim.random;\n\n // This is Buffer used in SEA and usable from Gun/SEA application also.\n // For documentation see https://nodejs.org/api/buffer.html\n SEA.Buffer = SEA.Buffer || USE('./buffer');\n\n // These SEA functions support now ony Promises or\n // async/await (compatible) code, use those like Promises.\n //\n // Creates a wrapper library around Web Crypto API\n // for various AES, ECDSA, PBKDF2 functions we called above.\n // Calculate public key KeyID aka PGPv4 (result: 8 bytes as hex string)\n SEA.keyid = SEA.keyid || (async (pub) => {\n try {\n // base64('base64(x):base64(y)') => shim.Buffer(xy)\n const pb = shim.Buffer.concat(\n pub.replace(/-/g, '+').replace(/_/g, '/').split('.')\n .map((t) => shim.Buffer.from(t, 'base64'))\n )\n // id is PGPv4 compliant raw key\n const id = shim.Buffer.concat([\n shim.Buffer.from([0x99, pb.length / 0x100, pb.length % 0x100]), pb\n ])\n const sha1 = await sha1hash(id)\n const hash = shim.Buffer.from(sha1, 'binary')\n return hash.toString('hex', hash.length - 8) // 16-bit ID as hex\n } catch (e) {\n console.log(e)\n throw e\n }\n });\n // all done!\n // Obviously it is missing MANY necessary features. This is only an alpha release.\n // Please experiment with it, audit what I've done so far, and complain about what needs to be added.\n // SEA should be a full suite that is easy and seamless to use.\n // Again, scroll naer the top, where I provide an EXAMPLE of how to create a user and sign in.\n // Once logged in, the rest of the code you just read handled automatically signing/validating data.\n // But all other behavior needs to be equally easy, like opinionated ways of\n // Adding friends (trusted public keys), sending private messages, etc.\n // Cheers! Tell me what you think.\n ((SEA.window||{}).GUN||{}).SEA = SEA;\n\n module.exports = SEA\n // -------------- END SEA MODULES --------------------\n // -- BEGIN SEA+GUN MODULES: BUNDLED BY DEFAULT UNTIL OTHERS USE SEA ON OWN -------\n })(USE, './sea');\n\n ;USE(function(module){\n var SEA = USE('./sea'), Gun, u;\n if(SEA.window){\n Gun = SEA.window.GUN || {chain:{}};\n } else {\n Gun = USE((u+'' == typeof MODULE?'.':'')+'./gun', 1);\n }\n SEA.GUN = Gun;\n\n function User(root){ \n this._ = {$: this};\n }\n User.prototype = (function(){ function F(){}; F.prototype = Gun.chain; return new F() }()) // Object.create polyfill\n User.prototype.constructor = User;\n\n // let's extend the gun chain with a `user` function.\n // only one user can be logged in at a time, per gun instance.\n Gun.chain.user = function(pub){\n var gun = this, root = gun.back(-1), user;\n if(pub){\n pub = SEA.opt.pub((pub._||'')['#']) || pub;\n return root.get('~'+pub);\n }\n if(user = root.back('user')){ return user }\n var root = (root._), at = root, uuid = at.opt.uuid || lex;\n (at = (user = at.user = gun.chain(new User))._).opt = {};\n at.opt.uuid = function(cb){\n var id = uuid(), pub = root.user;\n if(!pub || !(pub = pub.is) || !(pub = pub.pub)){ return id }\n id = '~' + pub + '/' + id;\n if(cb && cb.call){ cb(null, id) }\n return id;\n }\n return user;\n }\n function lex(){ return Gun.state().toString(36).replace('.','') }\n Gun.User = User;\n User.GUN = Gun;\n User.SEA = Gun.SEA = SEA;\n module.exports = User;\n })(USE, './user');\n\n ;USE(function(module){\n var u, Gun = (''+u != typeof GUN)? (GUN||{chain:{}}) : USE((''+u === typeof MODULE?'.':'')+'./gun', 1);\n Gun.chain.then = function(cb, opt){\n var gun = this, p = (new Promise(function(res, rej){\n gun.once(res, opt);\n }));\n return cb? p.then(cb) : p;\n }\n })(USE, './then');\n\n ;USE(function(module){\n var User = USE('./user'), SEA = User.SEA, Gun = User.GUN, noop = function(){};\n\n // Well first we have to actually create a user. That is what this function does.\n User.prototype.create = function(...args){\n var pair = typeof args[0] === 'object' && (args[0].pub || args[0].epub) ? args[0] : typeof args[1] === 'object' && (args[1].pub || args[1].epub) ? args[1] : null;\n var alias = pair && (pair.pub || pair.epub) ? pair.pub : typeof args[0] === 'string' ? args[0] : null;\n var pass = pair && (pair.pub || pair.epub) ? pair : alias && typeof args[1] === 'string' ? args[1] : null;\n var cb = args.filter(arg => typeof arg === 'function')[0] || null; // cb now can stand anywhere, after alias/pass or pair\n var opt = args && args.length > 1 && typeof args[args.length-1] === 'object' ? args[args.length-1] : {}; // opt is always the last parameter which typeof === 'object' and stands after cb\n \n var gun = this, cat = (gun._), root = gun.back(-1);\n cb = cb || noop;\n opt = opt || {};\n if(false !== opt.check){\n var err;\n if(!alias){ err = \"No user.\" }\n if((pass||'').length < 8){ err = \"Password too short!\" }\n if(err){\n cb({err: Gun.log(err)});\n return gun;\n }\n }\n if(cat.ing){\n (cb || noop)({err: Gun.log(\"User is already being created or authenticated!\"), wait: true});\n return gun;\n }\n cat.ing = true;\n var act = {}, u;\n act.a = function(pubs){\n act.pubs = pubs;\n if(pubs && !opt.already){\n // If we can enforce that a user name is already taken, it might be nice to try, but this is not guaranteed.\n var ack = {err: Gun.log('User already created!')};\n cat.ing = false;\n (cb || noop)(ack);\n gun.leave();\n return;\n }\n act.salt = String.random(64); // pseudo-randomly create a salt, then use PBKDF2 function to extend the password with it.\n SEA.work(pass, act.salt, act.b); // this will take some short amount of time to produce a proof, which slows brute force attacks.\n }\n act.b = function(proof){\n act.proof = proof;\n pair ? act.c(pair) : SEA.pair(act.c) // generate a brand new key pair or use the existing.\n }\n act.c = function(pair){\n var tmp\n act.pair = pair || {};\n if(tmp = cat.root.user){\n tmp._.sea = pair;\n tmp.is = {pub: pair.pub, epub: pair.epub, alias: alias};\n }\n // the user's public key doesn't need to be signed. But everything else needs to be signed with it! // we have now automated it! clean up these extra steps now!\n act.data = {pub: pair.pub};\n act.d();\n }\n act.d = function(){\n act.data.alias = alias;\n act.e();\n }\n act.e = function(){\n act.data.epub = act.pair.epub; \n SEA.encrypt({priv: act.pair.priv, epriv: act.pair.epriv}, act.proof, act.f, {raw:1}); // to keep the private key safe, we AES encrypt it with the proof of work!\n }\n act.f = function(auth){\n act.data.auth = JSON.stringify({ek: auth, s: act.salt}); \n act.g(act.data.auth);\n }\n act.g = function(auth){ var tmp;\n act.data.auth = act.data.auth || auth;\n root.get(tmp = '~'+act.pair.pub).put(act.data).on(act.h); // awesome, now we can actually save the user with their public key as their ID.\n var link = {}; link[tmp] = {'#': tmp}; root.get('~@'+alias).put(link).get(tmp).on(act.i); // next up, we want to associate the alias with the public key. So we add it to the alias list.\n }\n act.h = function(data, key, msg, eve){\n eve.off(); act.h.ok = 1; act.i();\n }\n act.i = function(data, key, msg, eve){\n if(eve){ act.i.ok = 1; eve.off() }\n if(!act.h.ok || !act.i.ok){ return }\n cat.ing = false;\n cb({ok: 0, pub: act.pair.pub}); // callback that the user has been created. (Note: ok = 0 because we didn't wait for disk to ack)\n if(noop === cb){ pair ? gun.auth(pair) : gun.auth(alias, pass) } // if no callback is passed, auto-login after signing up.\n }\n root.get('~@'+alias).once(act.a);\n return gun;\n }\n User.prototype.leave = function(opt, cb){\n var gun = this, user = (gun.back(-1)._).user;\n if(user){\n delete user.is;\n delete user._.is;\n delete user._.sea;\n }\n if(SEA.window){\n try{var sS = {};\n sS = SEA.window.sessionStorage;\n delete sS.recall;\n delete sS.pair;\n }catch(e){};\n }\n return gun;\n }\n })(USE, './create');\n\n ;USE(function(module){\n var User = USE('./user'), SEA = User.SEA, Gun = User.GUN, noop = function(){};\n // now that we have created a user, we want to authenticate them!\n User.prototype.auth = function(...args){ // TODO: this PR with arguments need to be cleaned up / refactored.\n var pair = typeof args[0] === 'object' && (args[0].pub || args[0].epub) ? args[0] : typeof args[1] === 'object' && (args[1].pub || args[1].epub) ? args[1] : null;\n var alias = !pair && typeof args[0] === 'string' ? args[0] : null;\n var pass = (alias || (pair && !(pair.priv && pair.epriv))) && typeof args[1] === 'string' ? args[1] : null;\n var cb = args.filter(arg => typeof arg === 'function')[0] || null; // cb now can stand anywhere, after alias/pass or pair\n var opt = args && args.length > 1 && typeof args[args.length-1] === 'object' ? args[args.length-1] : {}; // opt is always the last parameter which typeof === 'object' and stands after cb\n \n var gun = this, cat = (gun._), root = gun.back(-1);\n \n if(cat.ing){\n (cb || noop)({err: Gun.log(\"User is already being created or authenticated!\"), wait: true});\n return gun;\n }\n cat.ing = true;\n \n var act = {}, u, tries = 9;\n act.a = function(data){\n if(!data){ return act.b() }\n if(!data.pub){\n var tmp = []; Object.keys(data).forEach(function(k){ if('_'==k){ return } tmp.push(data[k]) })\n return act.b(tmp);\n }\n if(act.name){ return act.f(data) }\n act.c((act.data = data).auth);\n }\n act.b = function(list){\n var get = (act.list = (act.list||[]).concat(list||[])).shift();\n if(u === get){\n if(act.name){ return act.err('Your user account is not published for dApps to access, please consider syncing it online, or allowing local access by adding your device as a peer.') }\n if(alias && tries--){\n root.get('~@'+alias).once(act.a);\n return;\n }\n return act.err('Wrong user or password.') \n }\n root.get(get).once(act.a);\n }\n act.c = function(auth){\n if(u === auth){ return act.b() }\n if('string' == typeof auth){ return act.c(obj_ify(auth)) } // in case of legacy\n SEA.work(pass, (act.auth = auth).s, act.d, act.enc); // the proof of work is evidence that we've spent some time/effort trying to log in, this slows brute force.\n }\n act.d = function(proof){\n SEA.decrypt(act.auth.ek, proof, act.e, act.enc);\n }\n act.e = function(half){\n if(u === half){\n if(!act.enc){ // try old format\n act.enc = {encode: 'utf8'};\n return act.c(act.auth);\n } act.enc = null; // end backwards\n return act.b();\n }\n act.half = half;\n act.f(act.data);\n }\n act.f = function(pair){\n var half = act.half || {}, data = act.data || {};\n act.g(act.lol = {pub: pair.pub || data.pub, epub: pair.epub || data.epub, priv: pair.priv || half.priv, epriv: pair.epriv || half.epriv});\n }\n act.g = function(pair){\n if(!pair || !pair.pub || !pair.epub){ return act.b() }\n act.pair = pair;\n var user = (root._).user, at = (user._);\n var tmp = at.tag;\n var upt = at.opt;\n at = user._ = root.get('~'+pair.pub)._;\n at.opt = upt;\n // add our credentials in-memory only to our root user instance\n user.is = {pub: pair.pub, epub: pair.epub, alias: alias || pair.pub};\n at.sea = act.pair;\n cat.ing = false;\n try{if(pass && u == (obj_ify(cat.root.graph['~'+pair.pub].auth)||'')[':']){ opt.shuffle = opt.change = pass; } }catch(e){} // migrate UTF8 & Shuffle!\n opt.change? act.z() : (cb || noop)(at);\n if(SEA.window && ((gun.back('user')._).opt||opt).remember){\n // TODO: this needs to be modular.\n try{var sS = {};\n sS = SEA.window.sessionStorage; // TODO: FIX BUG putting on `.is`!\n sS.recall = true;\n sS.pair = JSON.stringify(pair); // auth using pair is more reliable than alias/pass\n }catch(e){}\n }\n try{\n if(root._.tag.auth){ // auth handle might not be registered yet\n (root._).on('auth', at) // TODO: Deprecate this, emit on user instead! Update docs when you do.\n } else { setTimeout(function(){ (root._).on('auth', at) },1) } // if not, hackily add a timeout.\n //at.on('auth', at) // Arrgh, this doesn't work without event \"merge\" code, but \"merge\" code causes stack overflow and crashes after logging in & trying to write data.\n }catch(e){\n Gun.log(\"Your 'auth' callback crashed with:\", e);\n }\n }\n act.h = function(data){\n if(!data){ return act.b() }\n alias = data.alias\n if(!alias)\n alias = data.alias = \"~\" + pair.pub \n if(!data.auth){\n return act.g(pair);\n }\n pair = null;\n act.c((act.data = data).auth);\n }\n act.z = function(){\n // password update so encrypt private key using new pwd + salt\n act.salt = String.random(64); // pseudo-random\n SEA.work(opt.change, act.salt, act.y);\n }\n act.y = function(proof){\n SEA.encrypt({priv: act.pair.priv, epriv: act.pair.epriv}, proof, act.x, {raw:1});\n }\n act.x = function(auth){\n act.w(JSON.stringify({ek: auth, s: act.salt}));\n }\n act.w = function(auth){\n if(opt.shuffle){ // delete in future!\n console.log('migrate core account from UTF8 & shuffle');\n var tmp = {}; Object.keys(act.data).forEach(function(k){ tmp[k] = act.data[k] });\n delete tmp._;\n tmp.auth = auth;\n root.get('~'+act.pair.pub).put(tmp);\n } // end delete\n root.get('~'+act.pair.pub).get('auth').put(auth, cb || noop);\n }\n act.err = function(e){\n var ack = {err: Gun.log(e || 'User cannot be found!')};\n cat.ing = false;\n (cb || noop)(ack);\n }\n act.plugin = function(name){\n if(!(act.name = name)){ return act.err() }\n var tmp = [name];\n if('~' !== name[0]){\n tmp[1] = '~'+name;\n tmp[2] = '~@'+name;\n }\n act.b(tmp);\n }\n if(pair){\n if(pair.priv && pair.epriv)\n act.g(pair);\n else\n root.get('~'+pair.pub).once(act.h);\n } else\n if(alias){\n root.get('~@'+alias).once(act.a);\n } else\n if(!alias && !pass){\n SEA.name(act.plugin);\n }\n return gun;\n }\n function obj_ify(o){\n if('string' != typeof o){ return o }\n try{o = JSON.parse(o);\n }catch(e){o={}};\n return o;\n }\n })(USE, './auth');\n\n ;USE(function(module){\n var User = USE('./user'), SEA = User.SEA, Gun = User.GUN;\n User.prototype.recall = function(opt, cb){\n var gun = this, root = gun.back(-1), tmp;\n opt = opt || {};\n if(opt && opt.sessionStorage){\n if(SEA.window){\n try{\n var sS = {};\n sS = SEA.window.sessionStorage; // TODO: FIX BUG putting on `.is`!\n if(sS){\n (root._).opt.remember = true;\n ((gun.back('user')._).opt||opt).remember = true;\n if(sS.recall || sS.pair) root.user().auth(JSON.parse(sS.pair), cb); // pair is more reliable than alias/pass\n }\n }catch(e){}\n }\n return gun;\n }\n /*\n TODO: copy mhelander's expiry code back in.\n Although, we should check with community,\n should expiry be core or a plugin?\n */\n return gun;\n }\n })(USE, './recall');\n\n ;USE(function(module){\n var User = USE('./user'), SEA = User.SEA, Gun = User.GUN, noop = function(){};\n User.prototype.pair = function(){\n var user = this, proxy; // undeprecated, hiding with proxies.\n try{ proxy = new Proxy({DANGER:'\\u2620'}, {get: function(t,p,r){\n if(!user.is || !(user._||'').sea){ return }\n return user._.sea[p];\n }})}catch(e){}\n return proxy;\n }\n // If authenticated user wants to delete his/her account, let's support it!\n User.prototype.delete = async function(alias, pass, cb){\n console.log(\"user.delete() IS DEPRECATED AND WILL BE MOVED TO A MODULE!!!\");\n var gun = this, root = gun.back(-1), user = gun.back('user');\n try {\n user.auth(alias, pass, function(ack){\n var pub = (user.is||{}).pub;\n // Delete user data\n user.map().once(function(){ this.put(null) });\n // Wipe user data from memory\n user.leave();\n (cb || noop)({ok: 0});\n });\n } catch (e) {\n Gun.log('User.delete failed! Error:', e);\n }\n return gun;\n }\n User.prototype.alive = async function(){\n console.log(\"user.alive() IS DEPRECATED!!!\");\n const gunRoot = this.back(-1)\n try {\n // All is good. Should we do something more with actual recalled data?\n await authRecall(gunRoot)\n return gunRoot._.user._\n } catch (e) {\n const err = 'No session!'\n Gun.log(err)\n throw { err }\n }\n }\n User.prototype.trust = async function(user){\n console.log(\"`.trust` API MAY BE DELETED OR CHANGED OR RENAMED, DO NOT USE!\");\n // TODO: BUG!!! SEA `node` read listener needs to be async, which means core needs to be async too.\n //gun.get('alice').get('age').trust(bob);\n if (Gun.is(user)) {\n user.get('pub').get((ctx, ev) => {\n console.log(ctx, ev)\n })\n }\n user.get('trust').get(path).put(theirPubkey);\n\n // do a lookup on this gun chain directly (that gets bob's copy of the data)\n // do a lookup on the metadata trust table for this path (that gets all the pubkeys allowed to write on this path)\n // do a lookup on each of those pubKeys ON the path (to get the collab data \"layers\")\n // THEN you perform Jachen's mix operation\n // and return the result of that to...\n }\n User.prototype.grant = function(to, cb){\n console.log(\"`.grant` API MAY BE DELETED OR CHANGED OR RENAMED, DO NOT USE!\");\n var gun = this, user = gun.back(-1).user(), pair = user._.sea, path = '';\n gun.back(function(at){ if(at.is){ return } path += (at.get||'') });\n (async function(){\n var enc, sec = await user.get('grant').get(pair.pub).get(path).then();\n sec = await SEA.decrypt(sec, pair);\n if(!sec){\n sec = SEA.random(16).toString();\n enc = await SEA.encrypt(sec, pair);\n user.get('grant').get(pair.pub).get(path).put(enc);\n }\n var pub = to.get('pub').then();\n var epub = to.get('epub').then();\n pub = await pub; epub = await epub;\n var dh = await SEA.secret(epub, pair);\n enc = await SEA.encrypt(sec, dh);\n user.get('grant').get(pub).get(path).put(enc, cb);\n }());\n return gun;\n }\n User.prototype.secret = function(data, cb){\n console.log(\"`.secret` API MAY BE DELETED OR CHANGED OR RENAMED, DO NOT USE!\");\n var gun = this, user = gun.back(-1).user(), pair = user.pair(), path = '';\n gun.back(function(at){ if(at.is){ return } path += (at.get||'') });\n (async function(){\n var enc, sec = await user.get('trust').get(pair.pub).get(path).then();\n sec = await SEA.decrypt(sec, pair);\n if(!sec){\n sec = SEA.random(16).toString();\n enc = await SEA.encrypt(sec, pair);\n user.get('trust').get(pair.pub).get(path).put(enc);\n }\n enc = await SEA.encrypt(data, sec);\n gun.put(enc, cb);\n }());\n return gun;\n }\n\n /**\n * returns the decrypted value, encrypted by secret\n * @returns {Promise<any>}\n // Mark needs to review 1st before officially supported\n User.prototype.decrypt = function(cb) {\n let gun = this,\n path = ''\n gun.back(function(at) {\n if (at.is) {\n return\n }\n path += at.get || ''\n })\n return gun\n .then(async data => {\n if (data == null) {\n return\n }\n const user = gun.back(-1).user()\n const pair = user.pair()\n let sec = await user\n .get('trust')\n .get(pair.pub)\n .get(path)\n sec = await SEA.decrypt(sec, pair)\n if (!sec) {\n return data\n }\n let decrypted = await SEA.decrypt(data, sec)\n return decrypted\n })\n .then(res => {\n cb && cb(res)\n return res\n })\n }\n */\n module.exports = User\n })(USE, './share');\n\n ;USE(function(module){\n var SEA = USE('./sea'), S = USE('./settings'), noop = function() {}, u;\n var Gun = (SEA.window||'').GUN || USE((''+u === typeof MODULE?'.':'')+'./gun', 1);\n // After we have a GUN extension to make user registration/login easy, we then need to handle everything else.\n\n // We do this with a GUN adapter, we first listen to when a gun instance is created (and when its options change)\n Gun.on('opt', function(at){\n if(!at.sea){ // only add SEA once per instance, on the \"at\" context.\n at.sea = {own: {}};\n at.on('put', check, at); // SEA now runs its firewall on HAM diffs, not all i/o.\n }\n this.to.next(at); // make sure to call the \"next\" middleware adapter.\n });\n\n // Alright, this next adapter gets run at the per node level in the graph database.\n // correction: 2020 it gets run on each key/value pair in a node upon a HAM diff.\n // This will let us verify that every property on a node has a value signed by a public key we trust.\n // If the signature does not match, the data is just `undefined` so it doesn't get passed on.\n // If it does match, then we transform the in-memory \"view\" of the data into its plain value (without the signature).\n // Now NOTE! Some data is \"system\" data, not user data. Example: List of public keys, aliases, etc.\n // This data is self-enforced (the value can only match its ID), but that is handled in the `security` function.\n // From the self-enforced data, we can see all the edges in the graph that belong to a public key.\n // Example: ~ASDF is the ID of a node with ASDF as its public key, signed alias and salt, and\n // its encrypted private key, but it might also have other signed values on it like `profile = <ID>` edge.\n // Using that directed edge's ID, we can then track (in memory) which IDs belong to which keys.\n // Here is a problem: Multiple public keys can \"claim\" any node's ID, so this is dangerous!\n // This means we should ONLY trust our \"friends\" (our key ring) public keys, not any ones.\n // I have not yet added that to SEA yet in this alpha release. That is coming soon, but beware in the meanwhile!\n\n function check(msg){ // REVISE / IMPROVE, NO NEED TO PASS MSG/EVE EACH SUB?\n var eve = this, at = eve.as, put = msg.put, soul = put['#'], key = put['.'], val = put[':'], state = put['>'], id = msg['#'], tmp;\n if(!soul || !key){ return }\n if((msg._||'').faith && (at.opt||'').faith && 'function' == typeof msg._){\n SEA.opt.pack(put, function(raw){\n SEA.verify(raw, false, function(data){ // this is synchronous if false\n put['='] = SEA.opt.unpack(data);\n eve.to.next(msg);\n })})\n return \n }\n var no = function(why){ at.on('in', {'@': id, err: msg.err = why}) }; // exploit internal relay stun for now, maybe violates spec, but testing for now. // Note: this may be only the sharded message, not original batch.\n //var no = function(why){ msg.ack(why) };\n (msg._||'').DBG && ((msg._||'').DBG.c = +new Date);\n if(0 <= soul.indexOf('<?')){ // special case for \"do not sync data X old\" forget\n // 'a~pub.key/b<?9'\n tmp = parseFloat(soul.split('<?')[1]||'');\n if(tmp && (state < (Gun.state() - (tmp * 1000)))){ // sec to ms\n (tmp = msg._) && (tmp.stun) && (tmp.stun--); // THIS IS BAD CODE! It assumes GUN internals do something that will probably change in future, but hacking in now.\n return; // omit!\n }\n }\n \n if('~@' === soul){ // special case for shared system data, the list of aliases.\n check.alias(eve, msg, val, key, soul, at, no); return;\n }\n if('~@' === soul.slice(0,2)){ // special case for shared system data, the list of public keys for an alias.\n check.pubs(eve, msg, val, key, soul, at, no); return;\n }\n //if('~' === soul.slice(0,1) && 2 === (tmp = soul.slice(1)).split('.').length){ // special case, account data for a public key.\n if(tmp = SEA.opt.pub(soul)){ // special case, account data for a public key.\n check.pub(eve, msg, val, key, soul, at, no, at.user||'', tmp); return;\n }\n if(0 <= soul.indexOf('#')){ // special case for content addressing immutable hashed data.\n check.hash(eve, msg, val, key, soul, at, no); return;\n } \n check.any(eve, msg, val, key, soul, at, no, at.user||''); return;\n eve.to.next(msg); // not handled\n }\n check.hash = function(eve, msg, val, key, soul, at, no){ // mark unbuilt @i001962 's epic hex contrib!\n SEA.work(val, null, function(data){\n function hexToBase64(hexStr) {\n let base64 = \"\";\n for(let i = 0; i < hexStr.length; i++) {\n base64 += !(i - 1 & 1) ? String.fromCharCode(parseInt(hexStr.substring(i - 1, i + 1), 16)) : \"\"}\n return btoa(base64);} \n if(data && data === key.split('#').slice(-1)[0]){ return eve.to.next(msg) }\n else if (data && data === hexToBase64(key.split('#').slice(-1)[0])){ \n return eve.to.next(msg) }\n no(\"Data hash not same as hash!\");\n }, {name: 'SHA-256'});\n }\n check.alias = function(eve, msg, val, key, soul, at, no){ // Example: {_:#~@, ~@alice: {#~@alice}}\n if(!val){ return no(\"Data must exist!\") } // data MUST exist\n if('~@'+key === link_is(val)){ return eve.to.next(msg) } // in fact, it must be EXACTLY equal to itself\n no(\"Alias not same!\"); // if it isn't, reject.\n };\n check.pubs = function(eve, msg, val, key, soul, at, no){ // Example: {_:#~@alice, ~asdf: {#~asdf}}\n if(!val){ return no(\"Alias must exist!\") } // data MUST exist\n if(key === link_is(val)){ return eve.to.next(msg) } // and the ID must be EXACTLY equal to its property\n no(\"Alias not same!\"); // that way nobody can tamper with the list of public keys.\n };\n check.pub = async function(eve, msg, val, key, soul, at, no, user, pub){ var tmp // Example: {_:#~asdf, hello:'world'~fdsa}}\n const raw = await S.parse(val) || {}\n const verify = (certificate, certificant, cb) => {\n if (certificate.m && certificate.s && certificant && pub)\n // now verify certificate\n return SEA.verify(certificate, pub, data => { // check if \"pub\" (of the graph owner) really issued this cert\n if (u !== data && u !== data.e && msg.put['>'] && msg.put['>'] > parseFloat(data.e)) return no(\"Certificate expired.\") // certificate expired\n // \"data.c\" = a list of certificants/certified users\n // \"data.w\" = lex WRITE permission, in the future, there will be \"data.r\" which means lex READ permission\n if (u !== data && data.c && data.w && (data.c === certificant || data.c.indexOf('*' || certificant) > -1)) {\n // ok, now \"certificant\" is in the \"certificants\" list, but is \"path\" allowed? Check path\n let path = soul.indexOf('/') > -1 ? soul.replace(soul.substring(0, soul.indexOf('/') + 1), '') : ''\n String.match = String.match || Gun.text.match\n const w = Array.isArray(data.w) ? data.w : typeof data.w === 'object' || typeof data.w === 'string' ? [data.w] : []\n for (const lex of w) {\n if ((String.match(path, lex['#']) && String.match(key, lex['.'])) || (!lex['.'] && String.match(path, lex['#'])) || (!lex['#'] && String.match(key, lex['.'])) || String.match((path ? path + '/' + key : key), lex['#'] || lex)) {\n // is Certificant forced to present in Path\n if (lex['+'] && lex['+'].indexOf('*') > -1 && path && path.indexOf(certificant) == -1 && key.indexOf(certificant) == -1) return no(`Path \"${path}\" or key \"${key}\" must contain string \"${certificant}\".`)\n // path is allowed, but is there any WRITE block? Check it out\n if (data.wb && (typeof data.wb === 'string' || ((data.wb || {})['#']))) { // \"data.wb\" = path to the WRITE block\n var root = eve.as.root.$.back(-1)\n if (typeof data.wb === 'string' && '~' !== data.wb.slice(0, 1)) root = root.get('~' + pub)\n return root.get(data.wb).get(certificant).once(value => { // TODO: INTENT TO DEPRECATE.\n if (value && (value === 1 || value === true)) return no(`Certificant ${certificant} blocked.`)\n return cb(data)\n })\n }\n return cb(data)\n }\n }\n return no(\"Certificate verification fail.\")\n }\n })\n return\n }\n \n if ('pub' === key && '~' + pub === soul) {\n if (val === pub) return eve.to.next(msg) // the account MUST match `pub` property that equals the ID of the public key.\n return no(\"Account not same!\")\n }\n\n if ((tmp = user.is) && tmp.pub && !raw['*'] && !raw['+'] && (pub === tmp.pub || (pub !== tmp.pub && ((msg._.msg || {}).opt || {}).cert))){\n SEA.opt.pack(msg.put, packed => {\n SEA.sign(packed, (user._).sea, async function(data) {\n if (u === data) return no(SEA.err || 'Signature fail.')\n msg.put[':'] = {':': tmp = SEA.opt.unpack(data.m), '~': data.s}\n msg.put['='] = tmp\n \n // if writing to own graph, just allow it\n if (pub === user.is.pub) {\n if (tmp = link_is(val)) (at.sea.own[tmp] = at.sea.own[tmp] || {})[pub] = 1\n JSON.stringifyAsync(msg.put[':'], function(err,s){\n if(err){ return no(err || \"Stringify error.\") }\n msg.put[':'] = s;\n return eve.to.next(msg);\n })\n return\n }\n \n // if writing to other's graph, check if cert exists then try to inject cert into put, also inject self pub so that everyone can verify the put\n if (pub !== user.is.pub && ((msg._.msg || {}).opt || {}).cert) {\n const cert = await S.parse(msg._.msg.opt.cert)\n // even if cert exists, we must verify it\n if (cert && cert.m && cert.s)\n verify(cert, user.is.pub, _ => {\n msg.put[':']['+'] = cert // '+' is a certificate\n msg.put[':']['*'] = user.is.pub // '*' is pub of the user who puts\n JSON.stringifyAsync(msg.put[':'], function(err,s){\n if(err){ return no(err || \"Stringify error.\") }\n msg.put[':'] = s;\n return eve.to.next(msg);\n })\n return\n })\n }\n }, {raw: 1})\n })\n return;\n }\n\n SEA.opt.pack(msg.put, packed => {\n SEA.verify(packed, raw['*'] || pub, function(data){ var tmp;\n data = SEA.opt.unpack(data);\n if (u === data) return no(\"Unverified data.\") // make sure the signature matches the account it claims to be on. // reject any updates that are signed with a mismatched account.\n if ((tmp = link_is(data)) && pub === SEA.opt.pub(tmp)) (at.sea.own[tmp] = at.sea.own[tmp] || {})[pub] = 1\n \n // check if cert ('+') and putter's pub ('*') exist\n if (raw['+'] && raw['+']['m'] && raw['+']['s'] && raw['*'])\n // now verify certificate\n verify(raw['+'], raw['*'], _ => {\n msg.put['='] = data;\n return eve.to.next(msg);\n })\n else {\n msg.put['='] = data;\n return eve.to.next(msg);\n }\n });\n })\n return\n };\n check.any = function(eve, msg, val, key, soul, at, no, user){ var tmp, pub;\n if(at.opt.secure){ return no(\"Soul missing public key at '\" + key + \"'.\") }\n // TODO: Ask community if should auto-sign non user-graph data.\n at.on('secure', function(msg){ this.off();\n if(!at.opt.secure){ return eve.to.next(msg) }\n no(\"Data cannot be changed.\");\n }).on.on('secure', msg);\n return;\n }\n\n var valid = Gun.valid, link_is = function(d,l){ return 'string' == typeof (l = valid(d)) && l }, state_ify = (Gun.state||'').ify;\n\n var pubcut = /[^\\w_-]/; // anything not alphanumeric or _ -\n SEA.opt.pub = function(s){\n if(!s){ return }\n s = s.split('~');\n if(!s || !(s = s[1])){ return }\n s = s.split(pubcut).slice(0,2);\n if(!s || 2 != s.length){ return }\n if('@' === (s[0]||'')[0]){ return }\n s = s.slice(0,2).join('.');\n return s;\n }\n SEA.opt.stringy = function(t){\n // TODO: encrypt etc. need to check string primitive. Make as breaking change.\n }\n SEA.opt.pack = function(d,cb,k, n,s){ var tmp, f; // pack for verifying\n if(SEA.opt.check(d)){ return cb(d) }\n if(d && d['#'] && d['.'] && d['>']){ tmp = d[':']; f = 1 }\n JSON.parseAsync(f? tmp : d, function(err, meta){\n var sig = ((u !== (meta||'')[':']) && (meta||'')['~']); // or just ~ check?\n if(!sig){ cb(d); return }\n cb({m: {'#':s||d['#'],'.':k||d['.'],':':(meta||'')[':'],'>':d['>']||Gun.state.is(n, k)}, s: sig});\n });\n }\n var O = SEA.opt;\n SEA.opt.unpack = function(d, k, n){ var tmp;\n if(u === d){ return }\n if(d && (u !== (tmp = d[':']))){ return tmp }\n k = k || O.fall_key; if(!n && O.fall_val){ n = {}; n[k] = O.fall_val }\n if(!k || !n){ return }\n if(d === n[k]){ return d }\n if(!SEA.opt.check(n[k])){ return d }\n var soul = (n && n._ && n._['#']) || O.fall_soul, s = Gun.state.is(n, k) || O.fall_state;\n if(d && 4 === d.length && soul === d[0] && k === d[1] && fl(s) === fl(d[3])){\n return d[2];\n }\n if(s < SEA.opt.shuffle_attack){\n return d;\n }\n }\n SEA.opt.shuffle_attack = 1546329600000; // Jan 1, 2019\n var fl = Math.floor; // TODO: Still need to fix inconsistent state issue.\n // TODO: Potential bug? If pub/priv key starts with `-`? IDK how possible.\n\n })(USE, './index');\n}());\n","let contractAddresses = {\r\n PROOF_OF_INTEGRITY_ADDRESS: \"0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512\",\r\n STEALTH_ANNOUNCER_ADDRESS: \"0x5FbDB2315678afecb367f032d93F642f64180aa3\"\r\n};\r\n\r\nif (typeof window === 'undefined') {\r\n try {\r\n const { fileURLToPath } = require('url');\r\n const { dirname, join } = require('path');\r\n const { readFileSync } = require('fs');\r\n \r\n const __filename = fileURLToPath(import.meta.url);\r\n const __dirname = dirname(__filename);\r\n \r\n const rawdata = readFileSync(join(__dirname, 'contract-address.json'));\r\n contractAddresses = JSON.parse(rawdata);\r\n console.log(\"Loaded contract addresses:\", contractAddresses);\r\n } catch (error) {\r\n console.warn(\"Warning: contract-address.json not found or invalid\");\r\n }\r\n}\r\n\r\nexport const LOCAL_CONFIG = {\r\n CHAIN_ID: 1337,\r\n PROOF_OF_INTEGRITY_ADDRESS: contractAddresses.PROOF_OF_INTEGRITY_ADDRESS,\r\n STEALTH_ANNOUNCER_ADDRESS: contractAddresses.STEALTH_ANNOUNCER_ADDRESS,\r\n RPC_URL: \"http://127.0.0.1:8545\",\r\n GUN_PEER: \"http://localhost:8765/gun\"\r\n}; ","import { LOCAL_CONFIG } from '../config/local.js';\r\n\r\n// Indirizzi di produzione per diverse chain\r\nexport const CHAIN_CONFIG = {\r\n optimismSepolia: {\r\n STEALTH_ANNOUNCER_ADDRESS: \"0xD0F2e9DA59d2DFECFdE67CcF17300BB6093A72f8\",\r\n PROOF_OF_INTEGRITY_ADDRESS: \"0x...\",\r\n RPC_URL: \"https://sepolia.optimism.io\",\r\n CHAIN_ID: 11155420\r\n },\r\n arbitrumSepolia: {\r\n STEALTH_ANNOUNCER_ADDRESS: \"0x...\",\r\n PROOF_OF_INTEGRITY_ADDRESS: \"0x...\",\r\n RPC_URL: \"https://sepolia-rollup.arbitrum.io/rpc\",\r\n CHAIN_ID: 421614\r\n },\r\n localhost: {\r\n RPC_URL: \"http://127.0.0.1:8545\",\r\n CHAIN_ID: 1337\r\n }\r\n};\r\n\r\n// Funzione helper per verificare l'ambiente\r\nexport function isLocalEnvironment() {\r\n return process.env.NODE_ENV === 'development' && \r\n (typeof window === 'undefined' || window.location.hostname === 'localhost');\r\n}\r\n\r\n// Funzione per ottenere gli indirizzi corretti\r\nexport function getAddressesForChain(chainName) {\r\n let config;\r\n\r\n if (chainName === 'localhost') {\r\n if (typeof window === 'undefined') {\r\n // Server-side\r\n try {\r\n const { fileURLToPath } = require('url');\r\n const { dirname, join } = require('path');\r\n const { readFileSync } = require('fs');\r\n \r\n const __filename = fileURLToPath(import.meta.url);\r\n const __dirname = dirname(__filename);\r\n const localAddresses = JSON.parse(\r\n readFileSync(join(__dirname, '../config/contract-address.json'), 'utf8')\r\n );\r\n \r\n config = {\r\n ...LOCAL_CONFIG,\r\n ...localAddresses\r\n };\r\n } catch (err) {\r\n console.warn('No local addresses found:', err);\r\n throw new Error('No local addresses found. Did you run local deployment?');\r\n }\r\n } else {\r\n // Client-side\r\n config = LOCAL_CONFIG;\r\n }\r\n return config;\r\n }\r\n\r\n // Usa gli indirizzi di produzione\r\n config = CHAIN_CONFIG[chainName];\r\n if (!config) {\r\n throw new Error(`Chain ${chainName} not supported`);\r\n }\r\n\r\n return config;\r\n}\r\n\r\nexport const STEALTH_ANNOUNCER_ABI = [\r\n {\r\n \"inputs\": [\r\n {\r\n \"internalType\": \"address\",\r\n \"name\": \"_devAddress\",\r\n \"type\": \"address\"\r\n }\r\n ],\r\n \"stateMutability\": \"nonpayable\",\r\n \"type\": \"constructor\"\r\n },\r\n {\r\n \"anonymous\": false,\r\n \"inputs\": [\r\n {\r\n \"internalType\": \"string\",\r\n \"name\": \"senderPublicKey\",\r\n \"type\": \"string\"\r\n },\r\n {\r\n \"internalType\": \"string\",\r\n \"name\": \"spendingPublicKey\",\r\n \"type\": \"string\"\r\n },\r\n {\r\n \"internalType\": \"address\",\r\n \"name\": \"stealthAddress\",\r\n \"type\": \"address\"\r\n },\r\n {\r\n \"internalType\": \"uint256\",\r\n \"name\": \"timestamp\",\r\n \"type\": \"uint256\"\r\n }\r\n ],\r\n \"name\": \"StealthPaymentAnnounced\",\r\n \"type\": \"event\"\r\n },\r\n {\r\n \"anonymous\": false,\r\n \"inputs\": [\r\n {\r\n \"internalType\": \"address\",\r\n \"name\": \"newAddress\",\r\n \"type\": \"address\"\r\n }\r\n ],\r\n \"name\": \"DevAddressUpdated\",\r\n \"type\": \"event\"\r\n },\r\n {\r\n \"anonymous\": false,\r\n \"inputs\": [\r\n {\r\n \"internalType\": \"uint256\",\r\n \"name\": \"newFee\",\r\n \"type\": \"uint256\"\r\n }\r\n ],\r\n \"name\": \"DevFeeUpdated\",\r\n \"type\": \"event\"\r\n },\r\n {\r\n \"inputs\": [\r\n {\r\n \"internalType\": \"string\",\r\n \"name\": \"senderPublicKey\",\r\n \"type\": \"string\"\r\n },\r\n {\r\n \"internalType\": \"string\",\r\n \"name\": \"spendingPublicKey\",\r\n \"type\": \"string\"\r\n },\r\n {\r\n \"internalType\": \"address\",\r\n \"name\": \"stealthAddress\",\r\n \"type\": \"address\"\r\n }\r\n ],\r\n \"name\": \"announcePayment\",\r\n \"outputs\": [],\r\n \"stateMutability\": \"payable\",\r\n \"type\": \"function\"\r\n },\r\n {\r\n \"inputs\": [],\r\n \"name\": \"devAddress\",\r\n \"outputs\": [\r\n {\r\n \"internalType\": \"address\",\r\n \"name\": \"\",\r\n \"type\": \"address\"\r\n }\r\n ],\r\n \"stateMutability\": \"view\",\r\n \"type\": \"function\"\r\n },\r\n {\r\n \"inputs\": [],\r\n \"name\": \"devFee\",\r\n \"outputs\": [\r\n {\r\n \"internalType\": \"uint256\",\r\n \"name\": \"\",\r\n \"type\": \"uint256\"\r\n }\r\n ],\r\n \"stateMutability\": \"view\",\r\n \"type\": \"function\"\r\n },\r\n {\r\n \"inputs\": [],\r\n \"name\": \"getAnnouncementsCount\",\r\n \"outputs\": [\r\n {\r\n \"internalType\": \"uint256\",\r\n \"name\": \"\",\r\n \"type\": \"uint256\"\r\n }\r\n ],\r\n \"stateMutability\": \"view\",\r\n \"type\": \"function\"\r\n },\r\n {\r\n \"inputs\": [\r\n {\r\n \"internalType\": \"uint256\",\r\n \"name\": \"fromIndex\",\r\n \"type\": \"uint256\"\r\n },\r\n {\r\n \"internalType\": \"uint256\",\r\n \"name\": \"toIndex\",\r\n \"type\": \"uint256\"\r\n }\r\n ],\r\n \"name\": \"getAnnouncementsInRange\",\r\n \"outputs\": [\r\n {\r\n \"components\": [\r\n {\r\n \"internalType\": \"string\",\r\n \"name\": \"senderPublicKey\",\r\n \"type\": \"string\"\r\n },\r\n {\r\n \"internalType\": \"string\",\r\n \"name\": \"spendingPublicKey\",\r\n \"type\": \"string\"\r\n },\r\n {\r\n \"internalType\": \"address\",\r\n \"name\": \"stealthAddress\",\r\n \"type\": \"address\"\r\n },\r\n {\r\n \"internalType\": \"uint256\",\r\n \"name\": \"timestamp\",\r\n \"type\": \"uint256\"\r\n }\r\n ],\r\n \"internalType\": \"struct StealthAnnouncer.StealthAnnouncement[]\",\r\n \"name\": \"\",\r\n \"type\": \"tuple[]\"\r\n }\r\n ],\r\n \"stateMutability\": \"view\",\r\n \"type\": \"function\"\r\n },\r\n {\r\n \"inputs\": [\r\n {\r\n \"internalType\": \"uint256\",\r\n \"name\": \"_newFee\",\r\n \"type\": \"uint256\"\r\n }\r\n ],\r\n \"name\": \"updateDevFee\",\r\n \"outputs\": [],\r\n \"stateMutability\": \"nonpayable\",\r\n \"type\": \"function\"\r\n },\r\n {\r\n \"inputs\": [\r\n {\r\n \"internalType\": \"address\",\r\n \"name\": \"_newAddress\",\r\n \"type\": \"address\"\r\n }\r\n ],\r\n \"name\": \"updateDevAddress\",\r\n \"outputs\": [],\r\n \"stateMutability\": \"nonpayable\",\r\n \"type\": \"function\"\r\n },\r\n {\r\n \"inputs\": [],\r\n \"name\": \"withdrawStuckETH\",\r\n \"outputs\": [],\r\n \"stateMutability\": \"nonpayable\",\r\n \"type\": \"function\"\r\n }\r\n];\r\n\r\nexport const PROOF_OF_INTEGRITY_ABI = [\r\n {\r\n \"inputs\": [\r\n {\r\n \"internalType\": \"bytes[]\",\r\n \"name\": \"nodeIds\",\r\n \"type\": \"bytes[]\"\r\n },\r\n {\r\n \"internalType\": \"bytes32[]\",\r\n \"name\": \"contentHashes\",\r\n \"type\": \"bytes32[]\"\r\n }\r\n ],\r\n \"name\": \"batchUpdateData\",\r\n \"outputs\": [],\r\n \"stateMutability\": \"nonpayable\",\r\n \"type\": \"function\"\r\n },\r\n {\r\n \"anonymous\": false,\r\n \"inputs\": [\r\n {\r\n \"indexed\": true,\r\n \"internalType\": \"bytes\",\r\n \"name\": \"nodeId\",\r\n \"type\": \"bytes\"\r\n },\r\n {\r\n \"indexed\": false,\r\n \"internalType\": \"bytes32\",\r\n \"name\": \"contentHash\",\r\n \"type\": \"bytes32\"\r\n },\r\n {\r\n \"indexed\": false,\r\n \"internalType\": \"address\",\r\n \"name\": \"updater\",\r\n \"type\": \"address\"\r\n }\r\n ],\r\n \"name\": \"DataUpdated\",\r\n \"type\": \"event\"\r\n },\r\n {\r\n \"inputs\": [\r\n {\r\n \"internalType\": \"bytes\",\r\n \"name\": \"nodeId\",\r\n \"type\": \"bytes\"\r\n }\r\n ],\r\n \"name\": \"getLatestRecord\",\r\n \"outputs\": [\r\n {\r\n \"internalType\": \"bytes32\",\r\n \"name\": \"\",\r\n \"type\": \"bytes32\"\r\n },\r\n {\r\n \"internalType\": \"uint256\",\r\n \"name\": \"\",\r\n \"type\": \"uint256\"\r\n },\r\n {\r\n \"internalType\": \"address\",\r\n \"name\": \"\",\r\n \"type\": \"address\"\r\n }\r\n ],\r\n \"stateMutability\": \"view\",\r\n \"type\": \"function\"\r\n },\r\n {\r\n \"inputs\": [\r\n {\r\n \"internalType\": \"bytes\",\r\n \"name\": \"nodeId\",\r\n \"type\": \"bytes\"\r\n },\r\n {\r\n \"internalType\": \"bytes32\",\r\n \"name\": \"contentHash\",\r\n \"type\": \"bytes32\"\r\n }\r\n ],\r\n \"name\": \"updateData\",\r\n \"outputs\": [],\r\n \"stateMutability\": \"nonpayable\",\r\n \"type\": \"function\"\r\n },\r\n {\r\n \"inputs\": [\r\n {\r\n \"internalType\": \"bytes\",\r\n \"name\": \"nodeId\",\r\n \"type\": \"bytes\"\r\n },\r\n {\r\n \"internalType\": \"bytes32\",\r\n \"name\": \"contentHash\",\r\n \"type\": \"bytes32\"\r\n }\r\n ],\r\n \"name\": \"verifyData\",\r\n \"outputs\": [\r\n {\r\n \"internalType\": \"bool\",\r\n \"name\": \"\",\r\n \"type\": \"bool\"\r\n },\r\n {\r\n \"internalType\": \"uint256\",\r\n \"name\": \"\",\r\n \"type\": \"uint256\"\r\n },\r\n {\r\n \"internalType\": \"address\",\r\n \"name\": \"\",\r\n \"type\": \"address\"\r\n }\r\n ],\r\n \"stateMutability\": \"view\",\r\n \"type\": \"function\"\r\n }\r\n];\r\n\r\nexport const PROOF_OF_INTEGRITY_ADDRESS = \"...\";\r\nexport const STEALTH_ANNOUNCER_ADDRESS = \"...\";\r\n\r\nexport const SHINE_OPTIMISM_SEPOLIA = \"0x43D838b683F772F08f321E5FA265ad3e333BE9C2\";\r\n","// =============================================\r\n// IMPORTS AND GLOBAL VARIABLES\r\n// =============================================\r\nimport Gun from \"gun\";\r\nimport SEA from \"gun/sea.js\";\r\nimport { ethers } from \"ethers\";\r\nimport { PROOF_OF_INTEGRITY_ABI, PROOF_OF_INTEGRITY_ADDRESS, STEALTH_ANNOUNCER_ABI, STEALTH_ANNOUNCER_ADDRESS } from \"./abis/abis.js\";\r\nimport { LOCAL_CONFIG } from \"./config/local.js\";\r\n\r\nlet PROOF_CONTRACT_ADDRESS;\r\nlet rpcUrl = \"\";\r\nlet privateKey = \"\";\r\n\r\nexport const MESSAGE_TO_SIGN = \"Access GunDB with Ethereum\";\r\n\r\nlet contractAddresses = {\r\n PROOF_OF_INTEGRITY_ADDRESS: null,\r\n STEALTH_ANNOUNCER_ADDRESS: STEALTH_ANNOUNCER_ADDRESS\r\n};\r\n\r\n// Solo per Node.js\r\nif (typeof window === 'undefined') {\r\n const { fileURLToPath } = require('url');\r\n const { dirname } = require('path');\r\n const { readFileSync } = require('fs');\r\n const path = require('path');\r\n \r\n const __filename = fileURLToPath(import.meta.url);\r\n const __dirname = dirname(__filename);\r\n\r\n try {\r\n const rawdata = readFileSync(path.join(__dirname, 'contract-address.json'), 'utf8');\r\n contractAddresses = JSON.parse(rawdata);\r\n console.log('Loaded contract addresses:', contractAddresses);\r\n } catch (err) {\r\n console.warn('Warning: contract-address.json not found or invalid');\r\n }\r\n}\r\n\r\n// =============================================\r\n// UTILITY FUNCTIONS\r\n// =============================================\r\n/**\r\n * Generates a random node ID for GunDB\r\n * @returns {string} A random hexadecimal string\r\n */\r\nexport function generateRandomId() {\r\n return ethers.hexlify(ethers.randomBytes(32)).slice(2);\r\n}\r\n\r\n/**\r\n * Generates a password from a signature.\r\n * @param {string} signature - The signature to derive the password from.\r\n * @returns {string|null} The generated password or null if generation fails.\r\n */\r\nexport function generatePassword(signature) {\r\n try {\r\n const hexSignature = ethers.hexlify(signature);\r\n const hash = ethers.keccak256(hexSignature);\r\n console.log(\"Generated password:\", hash);\r\n return hash;\r\n } catch (error) {\r\n console.error(\"Error generating password:\", error);\r\n return null;\r\n }\r\n}\r\n\r\n/**\r\n * Converts a Gun private key to an Ethereum account.\r\n * @param {string} gunPrivateKey - The Gun private key in base64url format.\r\n * @returns {Object} An object containing the Ethereum account and public key.\r\n */\r\nexport function gunToEthAccount(gunPrivateKey) {\r\n // Function to convert base64url to hex\r\n const base64UrlToHex = (base64url) => {\r\n const padding = \"=\".repeat((4 - (base64url.length % 4)) % 4);\r\n const base64 = base64url.replace(/-/g, \"+\").replace(/_/g, \"/\") + padding;\r\n const binary = atob(base64);\r\n return Array.from(binary, (char) =>\r\n char.charCodeAt(0).toString(16).padStart(2, \"0\")\r\n ).join(\"\");\r\n };\r\n\r\n // Convert Gun private key to hex format\r\n const hexPrivateKey = \"0x\" + base64UrlToHex(gunPrivateKey);\r\n\r\n // Create an Ethereum wallet from the private key\r\n const wallet = new ethers.Wallet(hexPrivateKey);\r\n\r\n // Get the public address (public key)\r\n const publicKey = wallet.address;\r\n\r\n return {\r\n account: wallet,\r\n publicKey: publicKey,\r\n privateKey: hexPrivateKey,\r\n };\r\n}\r\n\r\n/**\r\n * Gets an Ethereum signer based on current configuration\r\n * @returns {Promise<ethers.Signer>} The configured signer\r\n * @throws {Error} If no valid provider is found\r\n */\r\nexport const getSigner = async () => {\r\n if (rpcUrl && privateKey) {\r\n // Standalone mode with local provider\r\n const provider = new ethers.JsonRpcProvider(rpcUrl, {\r\n chainId: LOCAL_CONFIG.CHAIN_ID,\r\n name: \"localhost\"\r\n });\r\n return new ethers.Wallet(privateKey, provider);\r\n } else if (\r\n typeof window !== \"undefined\" &&\r\n typeof window.ethereum !== \"undefined\"\r\n ) {\r\n // Browser mode\r\n await window.ethereum.request({ method: \"eth_requestAccounts\" });\r\n const provider = new ethers.BrowserProvider(window.ethereum);\r\n return provider.getSigner();\r\n } else {\r\n throw new Error(\"No valid Ethereum provider found\");\r\n }\r\n};\r\n\r\n/**\r\n * Utility function to generate stealth address\r\n * @param {string} sharedSecret - The shared secret\r\n * @param {string} spendingPublicKey - The spending public key\r\n * @returns {Object} The stealth address and private key\r\n */\r\nexport function deriveStealthAddress(sharedSecret, spendingPublicKey) {\r\n try {\r\n // Convert shared secret to bytes\r\n const sharedSecretBytes = Buffer.from(sharedSecret, 'base64');\r\n \r\n // Generate stealth private key using shared secret and spending public key\r\n const stealthPrivateKey = ethers.keccak256(\r\n ethers.concat([\r\n sharedSecretBytes,\r\n ethers.getBytes(spendingPublicKey)\r\n ])\r\n );\r\n \r\n // Create stealth wallet\r\n const stealthWallet = new ethers.Wallet(stealthPrivateKey);\r\n\r\n console.log(\"Debug deriveStealthAddress:\", {\r\n sharedSecretHex: ethers.hexlify(sharedSecretBytes),\r\n spendingPublicKey,\r\n stealthPrivateKey,\r\n stealthAddress: stealthWallet.address\r\n });\r\n\r\n return {\r\n stealthPrivateKey,\r\n stealthAddress: stealthWallet.address,\r\n wallet: stealthWallet\r\n };\r\n } catch (error) {\r\n console.error(\"Error in deriveStealthAddress:\", error);\r\n throw error;\r\n }\r\n}\r\n\r\n// =============================================\r\n// BASIC GUN-ETH CHAIN METHODS\r\n// =============================================\r\n\r\n// Set the message to sign\r\nGun.chain.MESSAGE_TO_SIGN = MESSAGE_TO_SIGN;\r\n\r\n/**\r\n * Sets standalone configuration for Gun.\r\n * @param {string} newRpcUrl - The new RPC URL.\r\n * @param {string} newPrivateKey - The new private key.\r\n * @returns {Gun} The Gun instance for chaining.\r\n */\r\nGun.chain.setSigner = function (newRpcUrl, newPrivateKey) {\r\n rpcUrl = newRpcUrl;\r\n privateKey = newPrivateKey;\r\n console.log(\"Standalone configuration set\");\r\n return this;\r\n};\r\n\r\nGun.chain.getSigner = getSigner();\r\n\r\n/**\r\n * Verifies an Ethereum signature.\r\n * @param {string} message - The original message that was signed.\r\n * @param {string} signature - The signature to verify.\r\n * @returns {Promise<string|null>} The recovered address or null if verification fails.\r\n */\r\nGun.chain.verifySignature = async function (message, signature) {\r\n try {\r\n const recoveredAddress = ethers.verifyMessage(message, signature);\r\n return recoveredAddress;\r\n } catch (error) {\r\n console.error(\"Error verifying signature:\", error);\r\n return null;\r\n }\r\n};\r\n\r\n/**\r\n * Generates a password from a signature.\r\n * @param {string} signature - The signature to derive the password from.\r\n * @returns {string|null} The generated password or null if generation fails.\r\n */\r\nGun.chain.generatePassword = function (signature) {\r\n return generatePassword(signature);\r\n};\r\n\r\n/**\r\n * Creates an Ethereum signature for a given message.\r\n * @param {string} message - The message to sign.\r\n * @returns {Promise<string|null>} The signature or null if signing fails.\r\n */\r\nGun.chain.createSignature = async function (message) {\r\n try {\r\n // Check if message matches MESSAGE_TO_SIGN\r\n if (message !== MESSAGE_TO_SIGN) {\r\n throw new Error(\"Invalid message, valid message is: \" + MESSAGE_TO_SIGN);\r\n }\r\n const signer = await getSigner();\r\n const signature = await signer.signMessage(message);\r\n console.log(\"Signature created:\", signature);\r\n return signature;\r\n } catch (error) {\r\n console.error(\"Error creating signature:\", error);\r\n return null;\r\n }\r\n};\r\n\r\n// =============================================\r\n// KEY PAIR MANAGEMENT\r\n// =============================================\r\n/**\r\n * Creates and stores an encrypted key pair for a given address.\r\n * @param {string} address - The Ethereum address to associate with the key pair.\r\n * @param {string} signature - The signature to use for encryption.\r\n * @returns {Promise<void>}\r\n */\r\nGun.chain.createAndStoreEncryptedPair = async function (address, signature) {\r\n try {\r\n const gun = this;\r\n const pair = await SEA.pair();\r\n const v_pair = await SEA.pair();\r\n const s_pair = await SEA.pair();\r\n const password = generatePassword(signature);\r\n\r\n // Save original SEA pairs\r\n const encryptedPair = await SEA.encrypt(JSON.stringify(pair), password);\r\n const encryptedV_pair = await SEA.encrypt(JSON.stringify(v_pair), password);\r\n const encryptedS_pair = await SEA.encrypt(JSON.stringify(s_pair), password);\r\n\r\n // Convert only to get Ethereum addresses\r\n const viewingAccount = gunToEthAccount(v_pair.priv);\r\n const spendingAccount = gunToEthAccount(s_pair.priv);\r\n\r\n gun.get(\"gun-eth\").get(\"users\").get(address).put({\r\n pair: encryptedPair,\r\n v_pair: encryptedV_pair,\r\n s_pair: encryptedS_pair,\r\n publicKeys: {\r\n viewingPublicKey: v_pair.epub, // Use SEA encryption public key\r\n viewingPublicKey: v_pair.epub, // Use SEA encryption public key\r\n spendingPublicKey: spendingAccount.publicKey, // Use Ethereum address\r\n ethViewingAddress: viewingAccount.publicKey // Also save Ethereum address\r\n }\r\n });\r\n\r\n console.log(\"Encrypted pairs and public keys stored for:\", address);\r\n } catch (error) {\r\n console.error(\"Error creating and storing encrypted pair:\", error);\r\n throw error;\r\n }\r\n};\r\n\r\n/**\r\n * Retrieves and decrypts a stored key pair for a given address.\r\n * @param {string} address - The Ethereum address associated with the key pair.\r\n * @param {string} signature - The signature to use for decryption.\r\n * @returns {Promise<Object|null>} The decrypted key pair or null if retrieval fails.\r\n */\r\nGun.chain.getAndDecryptPair = async function (address, signature) {\r\n try {\r\n const gun = this;\r\n const encryptedData = await gun\r\n .get(\"gun-eth\")\r\n .get(\"users\")\r\n .get(address)\r\n .get(\"pair\")\r\n .then();\r\n if (!encryptedData) {\r\n throw new Error(\"No encrypted data found for this address\");\r\n }\r\n const password = generatePassword(signature);\r\n const decryptedPair = await SEA.decrypt(encryptedData, password);\r\n console.log(decryptedPair);\r\n return decryptedPair;\r\n } catch (error) {\r\n console.error(\"Error retrieving and decrypting pair:\", error);\r\n return null;\r\n }\r\n};\r\n\r\n// =============================================\r\n// PROOF OF INTEGRITY\r\n// =============================================\r\n/**\r\n * Proof of Integrity\r\n * @param {string} chain - The blockchain to use (e.g., \"optimismSepolia\").\r\n * @param {string} nodeId - The ID of the node to verify or write.\r\n * @param {Object} data - The data to write (if writing).\r\n * @param {Function} callback - Callback function to handle the result.\r\n * @returns {Gun} The Gun instance for chaining.\r\n */\r\nGun.chain.proof = function (chain, nodeId, data, callback) {\r\n console.log(\"Proof plugin called with:\", { chain, nodeId, data });\r\n\r\n if (typeof callback !== \"function\") {\r\n console.error(\"Callback must be a function\");\r\n return this;\r\n }\r\n\r\n try {\r\n // Se siamo in localhost e in development, usa automaticamente la chain locale\r\n const targetChain = isLocalEnvironment() ? 'localhost' : chain;\r\n const chainConfig = getAddressesForChain(targetChain);\r\n \r\n console.log(`Using ${targetChain} configuration:`, chainConfig);\r\n\r\n // Usa gli indirizzi dalla configurazione\r\n const contract = new ethers.Contract(\r\n chainConfig.PROOF_OF_INTEGRITY_ADDRESS,\r\n PROOF_OF_INTEGRITY_ABI,\r\n signer\r\n );\r\n\r\n // Funzione per verificare on-chain\r\n const verifyOnChain = async (nodeId, contentHash) => {\r\n console.log(\"Verifying on chain:\", { nodeId, contentHash });\r\n const signer = await getSigner();\r\n const contract = new ethers.Contract(\r\n PROOF_CONTRACT_ADDRESS,\r\n PROOF_OF_INTEGRITY_ABI,\r\n signer\r\n );\r\n const [isValid, timestamp, updater] = await contract.verifyData(\r\n ethers.toUtf8Bytes(nodeId),\r\n contentHash\r\n );\r\n console.log(\"Verification result:\", { isValid, timestamp, updater });\r\n return { isValid, timestamp, updater };\r\n };\r\n\r\n // Funzione per scrivere on-chain\r\n const writeOnChain = async (nodeId, contentHash) => {\r\n console.log(\"Writing on chain:\", { nodeId, contentHash });\r\n const signer = await getSigner();\r\n const contract = new ethers.Contract(\r\n PROOF_CONTRACT_ADDRESS,\r\n PROOF_OF_INTEGRITY_ABI,\r\n signer\r\n );\r\n const tx = await contract.updateData(\r\n ethers.toUtf8Bytes(nodeId),\r\n contentHash\r\n );\r\n console.log(\"Transaction sent:\", tx.hash);\r\n const receipt = await tx.wait();\r\n console.log(\"Transaction confirmed:\", receipt);\r\n return tx;\r\n };\r\n\r\n // Funzione per ottenere l'ultimo record\r\n const getLatestRecord = async (nodeId) => {\r\n const signer = await getSigner();\r\n const contract = new ethers.Contract(\r\n PROOF_CONTRACT_ADDRESS,\r\n PROOF_OF_INTEGRITY_ABI,\r\n signer\r\n );\r\n const [contentHash, timestamp, updater] = await contract.getLatestRecord(\r\n ethers.toUtf8Bytes(nodeId)\r\n );\r\n console.log(\"Latest record from blockchain:\", {\r\n nodeId,\r\n contentHash,\r\n timestamp,\r\n updater,\r\n });\r\n return { contentHash, timestamp, updater };\r\n };\r\n\r\n \r\n if (nodeId && !data) {\r\n // Case 1: User passes only node\r\n gun.get(nodeId).once(async (existingData) => {\r\n if (!existingData) {\r\n if (callback) callback({ err: \"Node not found in GunDB\" });\r\n return;\r\n }\r\n\r\n console.log(\"existingData\", existingData);\r\n\r\n // Use stored contentHash instead of recalculating\r\n const contentHash = existingData._contentHash;\r\n console.log(\"contentHash\", contentHash);\r\n\r\n if (!contentHash) {\r\n if (callback) callback({ err: \"No content hash found for this node\" });\r\n return;\r\n }\r\n\r\n try {\r\n const { isValid, timestamp, updater } = await verifyOnChain(\r\n nodeId,\r\n contentHash\r\n );\r\n const latestRecord = await getLatestRecord(nodeId);\r\n\r\n if (isValid) {\r\n if (callback)\r\n callback({\r\n ok: true,\r\n message: \"Data verified on blockchain\",\r\n timestamp,\r\n updater,\r\n latestRecord,\r\n });\r\n } else {\r\n if (callback)\r\n callback({\r\n ok: false,\r\n message: \"Data not verified on blockchain\",\r\n latestRecord,\r\n });\r\n }\r\n } catch (error) {\r\n if (callback) callback({ err: error.message });\r\n }\r\n });\r\n } else if (data && !nodeId) {\r\n // Case 2: User passes only text (data)\r\n const newNodeId = generateRandomId();\r\n const dataString = JSON.stringify(data);\r\n const contentHash = ethers.keccak256(ethers.toUtf8Bytes(dataString));\r\n\r\n gun\r\n .get(newNodeId)\r\n .put({ ...data, _contentHash: contentHash }, async (ack) => {\r\n console.log(\"ack\", ack);\r\n if (ack.err) {\r\n if (callback) callback({ err: \"Error saving data to GunDB\" });\r\n return;\r\n }\r\n\r\n try {\r\n const tx = await writeOnChain(newNodeId, contentHash);\r\n if (callback)\r\n callback({\r\n ok: true,\r\n message: \"Data written to GunDB and blockchain\",\r\n nodeId: newNodeId,\r\n txHash: tx.hash,\r\n });\r\n } catch (error) {\r\n if (callback) callback({ err: error.message });\r\n }\r\n });\r\n } else {\r\n if (callback)\r\n callback({\r\n err: \"Invalid input. Provide either nodeId or data, not both.\",\r\n });\r\n }\r\n\r\n return gun;\r\n } catch (error) {\r\n callback({ err: error.message });\r\n return this;\r\n }\r\n};\r\n\r\n// =============================================\r\n// STEALTH ADDRESS CORE FUNCTIONS\r\n// =============================================\r\n/**\r\n * Converts a Gun private key to an Ethereum account.\r\n * @param {string} gunPrivateKey - The Gun private key in base64url format.\r\n * @returns {Object} An object containing the Ethereum account and public key.\r\n */\r\nGun.chain.gunToEthAccount = function (gunPrivateKey) {\r\n return gunToEthAccount(gunPrivateKey);\r\n};\r\n\r\n/**\r\n * Generate a stealth key and related key pairs\r\n * @param {string} recipientAddress - The recipient's Ethereum address\r\n * @param {string} signature - The sender's signature to access their keys\r\n * @returns {Promise<Object>} Object containing stealth addresses and keys\r\n */\r\nGun.chain.generateStealthAddress = async function (recipientAddress, signature) {\r\n try {\r\n const gun = this;\r\n \r\n // Get recipient's public keys\r\n const recipientData = await gun\r\n .get(\"gun-eth\")\r\n .get(\"users\")\r\n .get(recipientAddress)\r\n .get(\"publicKeys\")\r\n .then();\r\n\r\n if (!recipientData || !recipientData.viewingPublicKey || !recipientData.spendingPublicKey) {\r\n throw new Error(\"Recipient's public keys not found\");\r\n }\r\n\r\n // Get sender's keys\r\n const senderAddress = await this.verifySignature(MESSAGE_TO_SIGN, signature);\r\n const password = generatePassword(signature);\r\n \r\n const senderData = await gun\r\n .get(\"gun-eth\")\r\n .get(\"users\")\r\n .get(senderAddress)\r\n .then();\r\n\r\n if (!senderData || !senderData.s_pair) {\r\n throw new Error(\"Sender's keys not found\");\r\n }\r\n\r\n // Decrypt sender's spending pair\r\n let spendingKeyPair;\r\n try {\r\n const decryptedData = await SEA.decrypt(senderData.s_pair, password);\r\n spendingKeyPair = typeof decryptedData === 'string' ? \r\n JSON.parse(decryptedData) : \r\n decryptedData;\r\n } catch (error) {\r\n console.error(\"Error decrypting spending pair:\", error);\r\n throw new Error(\"Unable to decrypt spending pair\");\r\n }\r\n\r\n // Generate shared secret using SEA ECDH with encryption public key\r\n const sharedSecret = await SEA.secret(recipientData.viewingPublicKey, spendingKeyPair);\r\n\r\n if (!sharedSecret) {\r\n throw new Error(\"Unable to generate shared secret\");\r\n }\r\n\r\n console.log(\"Generate shared secret:\", sharedSecret);\r\n\r\n const { stealthAddress } = deriveStealthAddress(\r\n sharedSecret,\r\n recipientData.spendingPublicKey\r\n );\r\n\r\n return {\r\n stealthAddress,\r\n senderPublicKey: spendingKeyPair.epub, // Use encryption public key\r\n spendingPublicKey: recipientData.spendingPublicKey\r\n };\r\n\r\n } catch (error) {\r\n console.error(\"Error generating stealth address:\", error);\r\n throw error;\r\n }\r\n};\r\n\r\n/**\r\n * Publish public keys needed to receive stealth payments\r\n * @param {string} signature - The signature to authenticate the user\r\n * @returns {Promise<void>}\r\n */\r\nGun.chain.publishStealthKeys = async function (signature) {\r\n try {\r\n const gun = this;\r\n const address = await this.verifySignature(MESSAGE_TO_SIGN, signature);\r\n const password = generatePassword(signature);\r\n\r\n // Get encrypted key pairs\r\n const encryptedData = await gun\r\n .get(\"gun-eth\")\r\n .get(\"users\")\r\n .get(address)\r\n .then();\r\n\r\n if (!encryptedData || !encryptedData.v_pair || !encryptedData.s_pair) {\r\n throw new Error(\"Keys not found\");\r\n }\r\n\r\n // Decrypt viewing and spending pairs\r\n const viewingKeyPair = JSON.parse(\r\n await SEA.decrypt(encryptedData.v_pair, password)\r\n );\r\n const spendingKeyPair = JSON.parse(\r\n await SEA.decrypt(encryptedData.s_pair, password)\r\n );\r\n\r\n const viewingAccount = gunToEthAccount(viewingKeyPair.priv);\r\n const spendingAccount = gunToEthAccount(spendingKeyPair.priv);\r\n\r\n // Publish only public keys\r\n gun.get(\"gun-eth\").get(\"users\").get(address).get(\"publicKeys\").put({\r\n viewingPublicKey: viewingAccount.publicKey,\r\n spendingPublicKey: spendingAccount.publicKey,\r\n });\r\n\r\n console.log(\"Stealth public keys published successfully\");\r\n } catch (error) {\r\n console.error(\"Error publishing stealth keys:\", error);\r\n throw error;\r\n }\r\n};\r\n\r\n// =============================================\r\n// STEALTH PAYMENT FUNCTIONS\r\n// =============================================\r\n/**\r\n * Recover funds from a stealth address\r\n * @param {string} stealthAddress - The stealth address to recover funds from\r\n * @param {string} senderPublicKey - The sender's public key used to generate the address\r\n * @param {string} signature - The signature to decrypt private keys\r\n * @returns {Promise<Object>} Object containing wallet to access funds\r\n */\r\nGun.chain.recoverStealthFunds = async function (\r\n stealthAddress,\r\n senderPublicKey,\r\n signature,\r\n spendingPublicKey\r\n) {\r\n try {\r\n const gun = this;\r\n const password = generatePassword(signature);\r\n\r\n // Get own key pairs\r\n const myAddress = await this.verifySignature(MESSAGE_TO_SIGN, signature);\r\n const encryptedData = await gun\r\n .get(\"gun-eth\")\r\n .get(\"users\")\r\n .get(myAddress)\r\n .then();\r\n\r\n if (!encryptedData || !encryptedData.v_pair || !encryptedData.s_pair) {\r\n throw new Error(\"Keys not found\");\r\n }\r\n\r\n // Decrypt viewing and spending pairs\r\n let viewingKeyPair;\r\n try {\r\n const decryptedViewingData = await SEA.decrypt(encryptedData.v_pair, password);\r\n viewingKeyPair = typeof decryptedViewingData === 'string' ? \r\n JSON.parse(decryptedViewingData) : \r\n decryptedViewingData;\r\n } catch (error) {\r\n console.error(\"Error decrypting keys:\", error);\r\n throw new Error(\"Unable to decrypt keys\");\r\n }\r\n\r\n // Generate shared secret using SEA ECDH\r\n const sharedSecret = await SEA.secret(senderPublicKey, viewingKeyPair);\r\n\r\n if (!sharedSecret) {\r\n throw new Error(\"Unable to generate shared secret\");\r\n }\r\n\r\n console.log(\"Recover shared secret:\", sharedSecret);\r\n\r\n const { wallet, stealthAddress: recoveredAddress } = deriveStealthAddress(\r\n sharedSecret,\r\n spendingPublicKey\r\n );\r\n\r\n // Verify address matches\r\n if (recoveredAddress.toLowerCase() !== stealthAddress.toLowerCase()) {\r\n console.error(\"Mismatch:\", {\r\n recovered: recoveredAddress,\r\n expected: stealthAddress,\r\n sharedSecret\r\n });\r\n throw new Error(\"Recovered stealth address does not match\");\r\n }\r\n\r\n return {\r\n wallet,\r\n address: recoveredAddress,\r\n };\r\n } catch (error) {\r\n console.error(\"Error recovering stealth funds:\", error);\r\n throw error;\r\n }\r\n};\r\n\r\n/**\r\n * Announce a stealth payment\r\n * @param {string} stealthAddress - The generated stealth address\r\n * @param {string} senderPublicKey - The sender's public key\r\n * @param {string} spendingPublicKey - The spending public key\r\n * @param {string} signature - The sender's signature\r\n * @returns {Promise<void>}\r\n */\r\nGun.chain.announceStealthPayment = async function (\r\n stealthAddress,\r\n senderPublicKey,\r\n spendingPublicKey,\r\n signature,\r\n options = { onChain: false, chain: 'optimismSepolia' }\r\n) {\r\n try {\r\n const gun = this;\r\n const senderAddress = await this.verifySignature(MESSAGE_TO_SIGN, signature);\r\n\r\n if (options.onChain) {\r\n // On-chain announcement\r\n const signer = await getSigner();\r\n const chainAddresses = getAddressesForChain(options.chain);\r\n const contractAddress = chainAddresses.STEALTH_ANNOUNCER_ADDRESS;\r\n\r\n console.log(\"Using contract address:\", contractAddress);\r\n\r\n const contract = new ethers.Contract(\r\n contractAddress,\r\n STEALTH_ANNOUNCER_ABI,\r\n signer\r\n );\r\n\r\n // Get dev fee from contract\r\n const devFee = await contract.devFee();\r\n console.log(\"Dev fee:\", devFee.toString());\r\n\r\n // Call contract\r\n const tx = await contract.announcePayment(\r\n senderPublicKey,\r\n spendingPublicKey,\r\n stealthAddress,\r\n { value: devFee }\r\n );\r\n \r\n console.log(\"Transaction sent:\", tx.hash);\r\n const receipt = await tx.wait();\r\n console.log(\"Transaction confirmed:\", receipt.hash);\r\n \r\n console.log(\"Stealth payment announced on-chain (dev fee paid)\");\r\n } else {\r\n // Off-chain announcement (GunDB)\r\n gun\r\n .get(\"gun-eth\")\r\n .get(\"stealth-payments\")\r\n .set({\r\n stealthAddress,\r\n senderAddress,\r\n senderPublicKey,\r\n spendingPublicKey,\r\n timestamp: Date.now(),\r\n });\r\n console.log(\"Stealth payment announced off-chain\");\r\n }\r\n } catch (error) {\r\n console.error(\"Error announcing stealth payment:\", error);\r\n console.error(\"Error details:\", error.stack);\r\n throw error;\r\n }\r\n};\r\n\r\n/**\r\n * Get all stealth payments for an address\r\n * @param {string} signature - The signature to authenticate the user\r\n * @returns {Promise<Array>} List of stealth payments\r\n */\r\nGun.chain.getStealthPayments = async function (signature, options = { source: 'both' }) {\r\n try {\r\n const payments = [];\r\n\r\n if (options.source === 'onChain' || options.source === 'both') {\r\n // Get on-chain payments\r\n const signer = await getSigner();\r\n const contractAddress = process.env.NODE_ENV === 'development' \r\n ? LOCAL_CONFIG.STEALTH_ANNOUNCER_ADDRESS \r\n : STEALTH_ANNOUNCER_ADDRESS;\r\n\r\n const contract = new ethers.Contract(\r\n contractAddress,\r\n STEALTH_ANNOUNCER_ABI,\r\n signer\r\n );\r\n \r\n try {\r\n // Get total number of announcements\r\n const totalAnnouncements = await contract.getAnnouncementsCount();\r\n const totalCount = Number(totalAnnouncements.toString());\r\n console.log(\"Total on-chain announcements:\", totalCount);\r\n \r\n if (totalCount > 0) {\r\n // Get announcements in batches of 100\r\n const batchSize = 100;\r\n const lastIndex = totalCount - 1;\r\n \r\n for(let i = 0; i <= lastIndex; i += batchSize) {\r\n const toIndex = Math.min(i + batchSize - 1, lastIndex);\r\n const batch = await contract.getAnnouncementsInRange(i, toIndex);\r\n \r\n // For each announcement, try to decrypt\r\n for(const announcement of batch) {\r\n try {\r\n // Verify announcement is valid\r\n if (!announcement || !announcement.stealthAddress || \r\n !announcement.senderPublicKey || !announcement.spendingPublicKey) {\r\n console.log(\"Invalid announcement:\", announcement);\r\n continue;\r\n }\r\n\r\n // Try to recover funds to verify if announcement is for us\r\n const recoveredWallet = await this.recoverStealthFunds(\r\n announcement.stealthAddress,\r\n announcement.senderPublicKey,\r\n signature,\r\n announcement.spendingPublicKey\r\n );\r\n \r\n // If no errors thrown, announcement is for us\r\n payments.push({\r\n stealthAddress: announcement.stealthAddress,\r\n senderPublicKey: announcement.senderPublicKey,\r\n spendingPublicKey: announcement.spendingPublicKey,\r\n timestamp: Number(announcement.timestamp),\r\n source: 'onChain',\r\n wallet: recoveredWallet\r\n });\r\n\r\n } catch (e) {\r\n // Not for us, continue\r\n console.log(`Announcement not for us: ${announcement.stealthAddress}`);\r\n continue;\r\n }\r\n }\r\n }\r\n }\r\n } catch (error) {\r\n console.error(\"Error retrieving on-chain announcements:\", error);\r\n }\r\n }\r\n\r\n if (options.source === 'offChain' || options.source === 'both') {\r\n // Get off-chain payments\r\n const gun = this;\r\n const offChainPayments = await new Promise((resolve) => {\r\n const p = [];\r\n gun\r\n .get(\"gun-eth\")\r\n .get(\"stealth-payments\")\r\n .get(recipientAddress)\r\n .map()\r\n .once((payment, id) => {\r\n if (payment?.stealthAddress) {\r\n p.push({ ...payment, id, source: 'offChain' });\r\n }\r\n });\r\n setTimeout(() => resolve(p), 2000);\r\n });\r\n \r\n payments.push(...offChainPayments);\r\n }\r\n\r\n console.log(`Found ${payments.length} stealth payments`);\r\n return payments;\r\n } catch (error) {\r\n console.error(\"Error retrieving stealth payments:\", error);\r\n throw error;\r\n }\r\n};\r\n\r\n/**\r\n * Clean up old stealth payments\r\n * @param {string} recipientAddress - The recipient's address\r\n * @returns {Promise<void>}\r\n */\r\nGun.chain.cleanStealthPayments = async function(recipientAddress) {\r\n try {\r\n const gun = this;\r\n const payments = await gun\r\n .get(\"gun-eth\")\r\n .get(\"stealth-payments\")\r\n .get(recipientAddress)\r\n .map()\r\n .once()\r\n .then();\r\n\r\n // Remove empty or invalid nodes\r\n if (payments) {\r\n Object.keys(payments).forEach(async (key) => {\r\n const payment = payments[key];\r\n if (!payment || !payment.stealthAddress || !payment.senderPublicKey || !payment.spendingPublicKey) {\r\n await gun\r\n .get(\"gun-eth\")\r\n .get(\"stealth-payments\")\r\n .get(recipientAddress)\r\n .get(key)\r\n .put(null);\r\n }\r\n });\r\n }\r\n } catch (error) {\r\n console.error(\"Error cleaning stealth payments:\", error);\r\n }\r\n};\r\n\r\n// =============================================\r\n// EXPORTS\r\n// =============================================\r\n\r\n// Crea una classe GunEth che contiene tutti i metodi e le utility\r\nexport class GunEth {\r\n // Static utility methods\r\n static generateRandomId = generateRandomId;\r\n static generatePassword = generatePassword;\r\n static gunToEthAccount = gunToEthAccount;\r\n static getSigner = getSigner;\r\n static deriveStealthAddress = deriveStealthAddress;\r\n \r\n // Chain methods\r\n static chainMethods = {\r\n setSigner: Gun.chain.setSigner,\r\n getSigner: Gun.chain.getSigner,\r\n verifySignature: Gun.chain.verifySignature,\r\n generatePassword: Gun.chain.generatePassword,\r\n createSignature: Gun.chain.createSignature,\r\n createAndStoreEncryptedPair: Gun.chain.createAndStoreEncryptedPair,\r\n getAndDecryptPair: Gun.chain.getAndDecryptPair,\r\n proof: Gun.chain.proof,\r\n gunToEthAccount: Gun.chain.gunToEthAccount,\r\n generateStealthAddress: Gun.chain.generateStealthAddress,\r\n publishStealthKeys: Gun.chain.publishStealthKeys,\r\n recoverStealthFunds: Gun.chain.recoverStealthFunds,\r\n announceStealthPayment: Gun.chain.announceStealthPayment,\r\n getStealthPayments: Gun.chain.getStealthPayments,\r\n cleanStealthPayments: Gun.chain.cleanStealthPayments\r\n };\r\n\r\n // Constants\r\n static MESSAGE_TO_SIGN = MESSAGE_TO_SIGN;\r\n static PROOF_CONTRACT_ADDRESS = PROOF_CONTRACT_ADDRESS;\r\n static LOCAL_CONFIG = LOCAL_CONFIG;\r\n}\r\n\r\n// Esporta Gun come default\r\nexport default Gun;\r\n"],"names":["require","global","contractAddresses","ethers"],"mappings":"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","x_google_ignoreList":[0]}