// MARK: - Imports // #region Imports import { optimizeImage } from 'wasm-image-optimization'; import { encodeRGBA } from 'skelehash-wasm'; import { createLogger } from '../../util/logger.js'; // #endregion const log = createLogger('import'); // MARK: - SkeleHash Computation // #region SkeleHash Computation /** * Computes SkeleHash base62 hash for an image buffer or base64 string. * * @param {Buffer|string} buffer * @returns {Promise<{base62: string, width: number, height: number, hashLength: number}|null>} */ export async function computeSkeleHash(buffer) { if (!buffer) return null; let input = buffer; if (typeof input === 'string') { const base64Data = input.includes(',') ? input.split(',')[1] : input; input = Buffer.from(base64Data, 'base64'); } const raw = await optimizeImage({ image: input, width: 200, height: 200, fit: 'contain', format: 'raw', }); const result = await encodeRGBA(raw.width, raw.height, raw.data); if (!result?.base62) { throw new Error('encodeRGBA failed to produce a base62 skelehash'); } return { base62: result.base62, width: raw.width, height: raw.height, hashLength: result.hash?.length ?? 0, }; } // #endregion