Files
pedwfrontend/lib/auth/resolveCrmLocale.js
T

42 lines
1.5 KiB
JavaScript

import { azureHeadersPaged } from "../../actions/core/headers";
import { escapeODataString } from "../../actions/core/guards";
import { consoleLogger } from "../../actions/core/logger";
import { relayGetData } from "../../pages/api/middleware/relayForwarding";
import { RELAY_POLICY_STRICT_LOGIN } from "../../pages/api/middleware/relayPolicyPresets";
const WELSH_LANGUAGE_CODE = 846040000;
const EMAIL_PATTERN = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
export const resolveCrmLocale = async (email) => {
if (typeof email !== "string") return null;
const normalizedEmail = email.trim().toLowerCase();
if (!EMAIL_PATTERN.test(normalizedEmail)) return null;
const queryUrl =
"contacts?$filter=emailaddress1 eq '" +
escapeODataString(normalizedEmail) +
"' and statuscode eq 1&$count=true&$select=pinswg_preferredlanguage";
try {
const { data } = await relayGetData({
queryUrl,
requestOptionsBuilder: (accessToken) =>
azureHeadersPaged(accessToken),
relayPolicy: RELAY_POLICY_STRICT_LOGIN
});
const preferredLanguage = data?.value?.[0]?.pinswg_preferredlanguage;
if (preferredLanguage === WELSH_LANGUAGE_CODE) return "cy";
if (preferredLanguage != null) return "en";
return null;
} catch (error) {
consoleLogger({
name: "ResolveCrmLocale",
message: "CRM locale lookup failed"
});
return null;
}
};