import { v4 as uuidv4 } from 'uuid'; import sha256 from 'js-sha256'; ////////////////////////// // Helper functions ////////////////////////// export const splitStream = (splitOn) => { let buffer = ''; return new TransformStream({ transform(chunk, controller) { buffer += chunk; const parts = buffer.split(splitOn); parts.slice(0, -1).forEach((part) => controller.enqueue(part)); buffer = parts[parts.length - 1]; }, flush(controller) { if (buffer) controller.enqueue(buffer); } }); }; export const convertMessagesToHistory = (messages) => { let history = { messages: {}, currentId: null }; let parentMessageId = null; let messageId = null; for (const message of messages) { messageId = uuidv4(); if (parentMessageId !== null) { history.messages[parentMessageId].childrenIds = [ ...history.messages[parentMessageId].childrenIds, messageId ]; } history.messages[messageId] = { ...message, id: messageId, parentId: parentMessageId, childrenIds: [] }; parentMessageId = messageId; } history.currentId = messageId; return history; }; export const getGravatarURL = (email) => { // Trim leading and trailing whitespace from // an email address and force all characters // to lower case const address = String(email).trim().toLowerCase(); // Create a SHA256 hash of the final string const hash = sha256(address); // Grab the actual image URL return `https://www.gravatar.com/avatar/${hash}`; };