| export function getJsonFromURL(url: string) { | |
| // Get data from url | |
| const urlObj = new URL(url); | |
| const dataParam = urlObj.searchParams.get("data"); | |
| if (!dataParam) { | |
| return undefined; | |
| } | |
| // Convert URL-safe base64 to standard base64 | |
| const base64String = dataParam.replace(/-/g, "+").replace(/_/g, "/"); | |
| // Add padding if missing | |
| const pad = base64String.length % 4; | |
| const paddedBase64 = pad ? base64String + "=".repeat(4 - pad) : base64String; | |
| // Decode base64 to Uint8Array | |
| function base64ToUint8Array(base64: string) { | |
| const binary = atob(base64); | |
| const bytes = new Uint8Array(binary.length); | |
| for (let i = 0; i < binary.length; i++) { | |
| bytes[i] = binary.charCodeAt(i); | |
| } | |
| return bytes; | |
| } | |
| const bytes = base64ToUint8Array(paddedBase64); | |
| // Decode UTF-8 bytes to string | |
| const decodedJson = new TextDecoder("utf-8").decode(bytes); | |
| const parsedData = JSON.parse(decodedJson); | |
| if (parsedData.messages && parsedData.messages.length > 0) { | |
| const embeds = parsedData.messages[0].data.embeds; | |
| const content = parsedData.messages[0].data.content; | |
| return { | |
| embeds: embeds, | |
| content: content, | |
| }; | |
| } | |
| } | |