42 lines
1.5 KiB
JavaScript
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;
|
|
}
|
|
}; |