'use strict'; var chunk64ITUOXI_cjs = require('./chunk-64ITUOXI.cjs'); // src/server/handlers/validate-avatar.ts var AVATAR_MAX_BYTES = 512 * 1024; function validateMetadataAvatarUrl(metadata) { if (!metadata || !("avatarUrl" in metadata) || metadata.avatarUrl === null || metadata.avatarUrl === void 0) return; if (typeof metadata.avatarUrl !== "string") { throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "metadata.avatarUrl must be a string" }); } const dataUrl = metadata.avatarUrl; const match = dataUrl.match(/^data:([^;]+);base64,(.+)$/); if (!match) { throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "metadata.avatarUrl must be a valid data URL (data:;base64,)" }); } const base64Payload = match[2]; const isStrictBase64 = base64Payload.length > 0 && base64Payload.length % 4 === 0 && /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(base64Payload); if (!isStrictBase64) { throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "metadata.avatarUrl contains invalid base64" }); } const byteLength = Buffer.from(base64Payload, "base64").byteLength; if (byteLength === 0) { throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "metadata.avatarUrl is empty" }); } if (byteLength > AVATAR_MAX_BYTES) { throw new chunk64ITUOXI_cjs.HTTPException(413, { message: `metadata.avatarUrl exceeds ${AVATAR_MAX_BYTES}-byte limit (got ${byteLength})` }); } } exports.validateMetadataAvatarUrl = validateMetadataAvatarUrl; //# sourceMappingURL=chunk-ZCX2J552.cjs.map //# sourceMappingURL=chunk-ZCX2J552.cjs.map