Experimental browser for the Atmosphere
{ "uri": "at://did:web:nat.vg/li.plonk.paste/3ljivjg3olc2j", "cid": "bafyreifbhcsef36udagi7fqr4t6kdfex7b2xdbx47v77vxr6nkwiafo2ca", "value": { "code": "/**\r\n * Extracts /48, /56, and /64 prefixes from an IPv6 address\r\n * @param {string} ipv6 - The IPv6 address in standard or compressed format\r\n * @returns {Object} Object containing the /48, /56, and /64 prefixes\r\n */\r\nfunction extractIPv6Prefixes(ipv6) {\r\n // Expand the compressed IPv6 address\r\n let expandedIPv6 = expandIPv6(ipv6);\r\n \r\n // Split the address into groups\r\n const groups = expandedIPv6.split(':');\r\n \r\n // Extract prefixes\r\n const prefix48 = groups.slice(0, 3).join(':');\r\n const prefix56 = groups.slice(0, 3).join(':') + ':' + groups[3].substring(0, 1);\r\n const prefix64 = groups.slice(0, 4).join(':');\r\n \r\n return {\r\n prefix48: prefix48,\r\n prefix56: prefix56,\r\n prefix64: prefix64,\r\n expanded: expandedIPv6\r\n };\r\n}\r\n\r\n/**\r\n * Expands a compressed IPv6 address to its full form\r\n * @param {string} ipv6 - The IPv6 address, possibly in compressed format\r\n * @returns {string} The expanded IPv6 address\r\n */\r\nfunction expandIPv6(ipv6) {\r\n // Handle double colon expansion\r\n if (ipv6.includes('::')) {\r\n const parts = ipv6.split('::');\r\n const left = parts[0] ? parts[0].split(':') : [];\r\n const right = parts[1] ? parts[1].split(':') : [];\r\n const missing = 8 - left.length - right.length;\r\n \r\n // Create the expanded middle section\r\n const middle = Array(missing).fill('0000');\r\n \r\n // Join all parts together\r\n const full = [...left, ...middle, ...right];\r\n \r\n // Ensure each part is properly padded\r\n return full.map(part => part.padStart(4, '0')).join(':');\r\n }\r\n \r\n // If no compression, just ensure each part is padded\r\n return ipv6.split(':').map(part => part.padStart(4, '0')).join(':');\r\n}", "lang": "javascript", "$type": "li.plonk.paste", "title": "v4", "shortUrl": "Uf", "createdAt": "2025-03-03T21:30:50.089Z" } }