UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

26 lines (25 loc) • 1.35 kB
//#region src/infra/http-content-encoding.ts const HTTP_QVALUE_PATTERN = /^(?:0(?:\.\d{0,3})?|1(?:\.0{0,3})?)$/; function resolveHttpContentEncodings(header, availableEncodings) { const acceptEncoding = Array.isArray(header) ? header.join(",") : header ?? ""; if (!acceptEncoding.trim()) return ["identity"]; const qualities = /* @__PURE__ */ new Map(); for (const entry of acceptEncoding.split(",")) { const [rawName, ...rawParams] = entry.split(";"); const name = rawName?.trim().toLowerCase(); if (!name) continue; const qualityText = rawParams.find((param) => param.trim().toLowerCase().startsWith("q="))?.trim().slice(2); const quality = qualityText === void 0 ? 1 : HTTP_QVALUE_PATTERN.test(qualityText) ? Number(qualityText) : 0; qualities.set(name, Math.max(qualities.get(name) ?? 0, quality)); } const wildcardQuality = qualities.get("*"); const identityQuality = qualities.get("identity") ?? (wildcardQuality === 0 ? 0 : 1); const qualityFor = (name) => name === "identity" ? identityQuality : qualities.get(name) ?? wildcardQuality ?? 0; return [ "br", "gzip", "identity" ].filter((encoding) => (encoding === "identity" || availableEncodings.has(encoding)) && qualityFor(encoding) > 0).toSorted((left, right) => qualityFor(right) - qualityFor(left)); } //#endregion export { resolveHttpContentEncodings as t };