Human-readableOriginal RPC args as sent to chain {
"file": "web4go.f8ac0f56.js.map",
"names": [
"getNetworkId",
"localStorage",
"getItem",
"getRpcEndpoint",
"networkId",
"getIpfsGateway",
"fetchIpfsHash",
"accountId",
"rpcBase",
"response",
"fetch",
"method",
"headers",
"body",
"JSON",
"stringify",
"request",
"ok",
"Error",
"status",
"result",
"json",
"bodyUrl",
"startsWith",
"replace",
"error",
"console",
"handleSearch",
"event",
"preventDefault",
"searchInput",
"document",
"querySelector",
"value",
"trim",
"toLowerCase",
"alert",
"redirectUrl",
"account",
"command",
"split",
"endsWith",
"ipfsHash",
"subAccount",
"ipfsGateway",
"link",
"createElement",
"href",
"target",
"click",
"setupAutocomplete",
"accounts",
"input",
"suggestions",
"map",
"account_id",
"filter",
"dataList",
"id",
"setAttribute",
"appendChild",
"forEach",
"suggestion",
"option",
"addEventListener",
"parse",
"searchForm"
],
"sources": [
"<anon>",
"src/js/go_bar.js"
],
"version": "3",
"mappings": "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",
"sourcesContent": [
"// search.jsn// Function to get the network ID from localStoragenfunction getNetworkId() {n return localStorage.getItem('networkId') || 'testnet';n}n// Function to determine the RPC endpoint base URLnfunction getRpcEndpoint(networkId) {n if (networkId === 'mainnet') return 'https://rpc.web4.near.page/account/';n else return 'https://rpc.web4.testnet.page/account/';n}n// Function to determine the IPFS gatewaynfunction getIpfsGateway(networkId) {n if (networkId === 'mainnet') return 'https://ipfs.web4.near.page/ipfs/';n else return 'https://ipfs.web4.testnet.page/ipfs/';n}n// Function to fetch IPFS hash using web4_getnasync function fetchIpfsHash(accountId, networkId) {n try {n const rpcBase = getRpcEndpoint(networkId);n const response = await fetch(`${rpcBase}${accountId}/view/web4_get`, {n method: 'POST',n headers: {n 'Content-Type': 'application/json'n },n body: JSON.stringify({n request: {}n })n });n if (!response.ok) throw new Error(`HTTP error! status: ${response.status}`);n const result = await response.json();n if (result.status === 200 && result.bodyUrl && result.bodyUrl.startsWith('ipfs://')) return result.bodyUrl.replace('ipfs://', ''); // Extract CIDn return null;n } catch (error) {n console.error(`Error fetching IPFS hash for ${accountId}:`, error);n return null;n }n}n// Function to handle search form submissionnasync function handleSearch(event) {n event.preventDefault();n const searchInput = document.querySelector('.search-input').value.trim().toLowerCase();n if (!searchInput) {n alert('Please enter an account or command.');n return;n }n const networkId = getNetworkId();n let redirectUrl = '';n // Parse input: account/command or just accountn const [account, command] = searchInput.split('/');n if (!account || !account.endsWith('.near') && !account.endsWith('.testnet')) {n alert('Please provide a valid .near or .testnet account.');n return;n }n if (command) {n if (command === 'page') redirectUrl = `http://${account}.page`;n else if (command === 'ipfs') {n let ipfsHash = await fetchIpfsHash(account, networkId);n if (!ipfsHash) {n // Check subaccount web4.<account> for both mainnet and testnetn const subAccount = `web4.${account}`;n ipfsHash = await fetchIpfsHash(subAccount, networkId);n }n if (ipfsHash) {n const ipfsGateway = getIpfsGateway(networkId);n redirectUrl = `${ipfsGateway}${ipfsHash}`;n } else {n alert(`Could not retrieve IPFS hash for ${account} or its web4 subaccount.`);n return;n }n } else if (command === 'social') {n if (networkId === 'mainnet' && account.endsWith('.near')) redirectUrl = `http://${account}.social`;n else {n alert('/social is only supported for .near accounts on mainnet.');n return;n }n } else {n alert('Invalid command. Use /page, /ipfs, or /social.');n return;n }n } else // Default to /page for valid accountsn redirectUrl = `http://${account}.page`;n const link = document.createElement('a');n link.href = redirectUrl;n link.target = '_blank';n link.click();n}n// Function to setup autocompletenfunction setupAutocomplete(accounts) {n const input = document.querySelector('.search-input');n const commands = [n 'page',n 'ipfs',n 'social'n ];n // Combine accounts and commands for suggestionsn const suggestions = [n ...accounts.map((account)=>account.account_id),n ...accounts.map((account)=>`${account.account_id}/page`),n ...accounts.map((account)=>`${account.account_id}/ipfs`),n ...accounts.filter((account)=>account.account_id.endsWith('.near')).map((account)=>`${account.account_id}/social`)n ];n const dataList = document.createElement('datalist');n dataList.id = 'suggestions';n input.setAttribute('list', 'suggestions');n document.body.appendChild(dataList);n suggestions.forEach((suggestion)=>{n const option = document.createElement('option');n option.value = suggestion;n dataList.appendChild(option);n });n}n// Initialize search functionalityndocument.addEventListener('DOMContentLoaded', async ()=>{n // Load accounts from localStorage for autocompleten let accounts = JSON.parse(localStorage.getItem('web4Accounts') || '[]');n // Setup autocompleten setupAutocomplete(accounts);n // Add event listener for search formn const searchForm = document.querySelector('.search-bar');n searchForm.addEventListener('submit', handleSearch);n});nn//# sourceMappingURL=web4go.f8ac0f56.js.mapn",
"// search.jsnn// Function to get the network ID from localStoragenfunction getNetworkId() {n return localStorage.getItem('networkId') || 'testnet';n}nn// Function to determine the RPC endpoint base URLnfunction getRpcEndpoint(networkId) {n if (networkId === 'mainnet') {n return 'https://rpc.web4.near.page/account/';n } else {n return 'https://rpc.web4.testnet.page/account/';n }n}nn// Function to determine the IPFS gatewaynfunction getIpfsGateway(networkId) {n if (networkId === 'mainnet') {n return 'https://ipfs.web4.near.page/ipfs/';n } else {n return 'https://ipfs.web4.testnet.page/ipfs/';n }n}nn// Function to fetch IPFS hash using web4_getnasync function fetchIpfsHash(accountId, networkId) {n try {n const rpcBase = getRpcEndpoint(networkId);n const response = await fetch(`${rpcBase}${accountId}/view/web4_get`, {n method: 'POST',n headers: { 'Content-Type': 'application/json' },n body: JSON.stringify({ request: {} })n });n if (!response.ok) {n throw new Error(`HTTP error! status: ${response.status}`);n }n const result = await response.json();n if (result.status === 200 && result.bodyUrl && result.bodyUrl.startsWith('ipfs://')) {n return result.bodyUrl.replace('ipfs://', ''); // Extract CIDn }n return null;n } catch (error) {n console.error(`Error fetching IPFS hash for ${accountId}:`, error);n return null;n }n}nn// Function to handle search form submissionnasync function handleSearch(event) {n event.preventDefault();n const searchInput = document.querySelector('.search-input').value.trim().toLowerCase();n n if (!searchInput) {n alert('Please enter an account or command.');n return;n }nn const networkId = getNetworkId();n let redirectUrl = '';nn // Parse input: account/command or just accountn const [account, command] = searchInput.split('/');n if (!account || (!account.endsWith('.near') && !account.endsWith('.testnet'))) {n alert('Please provide a valid .near or .testnet account.');n return;n }nn if (command) {n if (command === 'page') {n redirectUrl = `http://${account}.page`;n } else if (command === 'ipfs') {n let ipfsHash = await fetchIpfsHash(account, networkId);n if (!ipfsHash) {n // Check subaccount web4.<account> for both mainnet and testnetn const subAccount = `web4.${account}`;n ipfsHash = await fetchIpfsHash(subAccount, networkId);n }n if (ipfsHash) {n const ipfsGateway = getIpfsGateway(networkId);n redirectUrl = `${ipfsGateway}${ipfsHash}`;n } else {n alert(`Could not retrieve IPFS hash for ${account} or its web4 subaccount.`);n return;n }n } else if (command === 'social') {n if (networkId === 'mainnet' && account.endsWith('.near')) {n redirectUrl = `http://${account}.social`;n } else {n alert('/social is only supported for .near accounts on mainnet.');n return;n }n } else {n alert('Invalid command. Use /page, /ipfs, or /social.');n return;n }n } else {n // Default to /page for valid accountsn redirectUrl = `http://${account}.page`;n }nn const link = document.createElement('a');n link.href = redirectUrl;n link.target = '_blank';n link.click();n}nn// Function to setup autocompletenfunction setupAutocomplete(accounts) {n const input = document.querySelector('.search-input');n const commands = ['page', 'ipfs', 'social'];n n // Combine accounts and commands for suggestionsn const suggestions = [n ...accounts.map(account => account.account_id),n ...accounts.map(account => `${account.account_id}/page`),n ...accounts.map(account => `${account.account_id}/ipfs`),n ...accounts.filter(account => account.account_id.endsWith('.near')).map(account => `${account.account_id}/social`)n ];nn const dataList = document.createElement('datalist');n dataList.id = 'suggestions';n input.setAttribute('list', 'suggestions');n document.body.appendChild(dataList);nn suggestions.forEach(suggestion => {n const option = document.createElement('option');n option.value = suggestion;n dataList.appendChild(option);n });n}nn// Initialize search functionalityndocument.addEventListener('DOMContentLoaded', async () => {n // Load accounts from localStorage for autocompleten let accounts = JSON.parse(localStorage.getItem('web4Accounts') || '[]');n n // Setup autocompleten setupAutocomplete(accounts);n n // Add event listener for search formn const searchForm = document.querySelector('.search-bar');n searchForm.addEventListener('submit', handleSearch);n});"
]
}