/** Register synchronously; replies retain the WebExtension sendResponse contract. */ function registerBackgroundMessages({ messageTypes, requestWeekDetails, requestTimeEntries, requestTimeEntriesSave, requestTimeEntriesDelete, requestLookupTaskType, requestServiceRequestExpand, requestResourceUser, requestActiveServiceRequests, invalidateProductsCache, invalidateResourceUser = async () => {}, getXsrfTokenCookie, refreshXsrfCookie, requestAccountPlans, requestInstallBase, requestCustomerServiceRequest, requestWlActions, requestWorkloads, requestWorkloadForecastUpdate, invalidateWorkloadsCache, requestActionTeamMembers, requestActionFindLookup, requestMgmtAction, requestPostServiceRequest, requestPostInternalServiceRequest, requestInternalServiceRequest, requestSrLookupPrimaryPillar, requestSrLookupWithSession, prepareSrSession, requestSrLookupLanguage, requestSrLookupTechPlatform, requestLookupTypePlatform, requestInternalSrServices, requestSrLookupOpportunityBusiness, requestCurrentUser, requestConsumerTokenService, requestConsumptionTrend, requestConsumptionPlanDetail, requestRatecardByPlan, requestOpptyProducts, runtimeApi }) { runtimeApi.runtime.onMessage.addListener((message, sender, sendResponse) => { if (!message || !message.type) { return false; } if (message.type === messageTypes.requestLookupTaskType) { requestLookupTaskType().then(sendResponse).catch(error => sendResponse({ ok: false, error: error.message, httpStatus: error.httpStatus, debugRequests: error.debugRequests || [] })); return true; } if (message.type === messageTypes.requestTimeEntriesSave) { requestTimeEntriesSave(message).then(sendResponse).catch(error => sendResponse({ ok: false, error: error.message, httpStatus: error.httpStatus, debugRequests: error.debugRequests || [] })); return true; } if (message.type === messageTypes.requestTimeEntriesDelete) { requestTimeEntriesDelete(message).then(sendResponse).catch(error => sendResponse({ ok: false, error: error.message, httpStatus: error.httpStatus, debugRequests: error.debugRequests || [] })); return true; } if ([messageTypes.requestTimeEntries, messageTypes.requestServiceRequestExpand, messageTypes.requestWeekDetails, messageTypes.requestResourceUser, messageTypes.requestActiveServiceRequests].includes(message.type)) { const request = message.type === messageTypes.requestTimeEntries ? requestTimeEntries : message.type === messageTypes.requestServiceRequestExpand ? requestServiceRequestExpand : message.type === messageTypes.requestWeekDetails ? requestWeekDetails : message.type === messageTypes.requestResourceUser ? requestResourceUser : requestActiveServiceRequests; request(message).then(sendResponse).catch(error => sendResponse({ ok: false, error: error.message, httpStatus: error.httpStatus, debugRequests: error.debugRequests || [] })); return true; } if (message.type === messageTypes.requestPostInternalServiceRequest) { requestPostInternalServiceRequest(message).then(sendResponse).catch(error => sendResponse({ ok: false, error: error.message, debugRequests: error.debugRequests || [] })); return true; } if (message.type === messageTypes.requestPostServiceRequest) { requestPostServiceRequest(message).then(sendResponse).catch(error => sendResponse({ ok: false, error: error.message, debugRequests: error.debugRequests || [] })); return true; } if (message.type === messageTypes.prepareSrSession) { prepareSrSession(sender).then(sendResponse).catch(error => sendResponse({ ok: false, error: error.message, debugRequests: error.debugRequests || [] })); return true; } const srLookups = { [messageTypes.requestLookupTypePlatform]: requestLookupTypePlatform, [messageTypes.requestInternalSrServices]: requestInternalSrServices, [messageTypes.requestSrLookupPrimaryPillar]: requestSrLookupPrimaryPillar, [messageTypes.requestSrLookupLanguage]: requestSrLookupLanguage, [messageTypes.requestSrLookupTechPlatform]: requestSrLookupTechPlatform, [messageTypes.requestSrLookupOpportunityBusiness]: requestSrLookupOpportunityBusiness }; if (Object.hasOwn(srLookups, message.type)) { requestSrLookupWithSession(srLookups[message.type], message, sender).then(sendResponse).catch(error => sendResponse({ ok: false, httpStatus: error.httpStatus, error: error.message, debugRequests: error.debugRequests || [] })); return true; } if (message.type === messageTypes.invalidateProductsCache) { Promise.all([invalidateProductsCache(), invalidateWorkloadsCache()]).then(() => invalidateResourceUser()).then(() => sendResponse({ ok: true })).catch(error => sendResponse({ ok: false, error: error.message || "Unable to clear products cache." })); return true; } if (message.type === messageTypes.getXsrfToken) { getXsrfTokenCookie() .then((result) => { sendResponse({ ok: true, cookieName: result.cookie ? result.cookie.name : "", token: result.cookie ? result.cookie.value : "", matchedCookieNames: result.matchedCookieNames, lookupDetails: result.lookupDetails }); }) .catch((error) => { sendResponse({ ok: false, cookieName: "", token: "", matchedCookieNames: [], lookupDetails: [], error: error.message || "Unable to read cookies." }); }); return true; } if (message.type === messageTypes.refreshXsrfCookie) { refreshXsrfCookie(sender) .then(sendResponse) .catch((error) => { sendResponse({ ok: false, refreshed: false, cookieName: "", durationMs: 0, error: error.message || "Unable to refresh XSRF cookie." }); }); return true; } if (message.type === messageTypes.requestOpptyProducts) { requestOpptyProducts(message, sender) .then(sendResponse) .catch((error) => { sendResponse({ ok: false, requestId: message.requestId || "", error: error.message || "Unable to load opportunity products." }); }); return true; } if (message.type === messageTypes.requestConsumerTokenService) { requestConsumerTokenService(sender) .then(sendResponse) .catch((error) => { sendResponse({ ok: false, error: error.message || "Unable to load consumer token service.", debugRequests: Array.isArray(error.debugRequests) ? error.debugRequests : [] }); }); return true; } if (message.type === messageTypes.requestCurrentUser) { requestCurrentUser().then(sendResponse).catch(error => sendResponse({ ok: false, error: error.message || "Unable to load current user.", debugRequests: Array.isArray(error.debugRequests) ? error.debugRequests : [] })); return true; } if ([messageTypes.requestActionTeamMembers, messageTypes.requestActionFindLookup, messageTypes.requestMgmtAction, messageTypes.requestInternalServiceRequest].includes(message.type)) { const request = message.type === messageTypes.requestInternalServiceRequest ? requestInternalServiceRequest : message.type === messageTypes.requestMgmtAction ? requestMgmtAction : message.type === messageTypes.requestActionTeamMembers ? requestActionTeamMembers : requestActionFindLookup; request(message, sender).then(sendResponse).catch(error => sendResponse({ ok: false, httpStatus: error.httpStatus, error: error.message || "Unable to complete request.", debugRequests: Array.isArray(error.debugRequests) ? error.debugRequests : [] })); return true; } if ([messageTypes.requestWorkloads, messageTypes.requestWorkloadForecastUpdate].includes(message.type)) { const request = message.type === messageTypes.requestWorkloads ? requestWorkloads : requestWorkloadForecastUpdate; request(message).then(sendResponse).catch(error => sendResponse({ ok: false, error: error.message || "Unable to load workloads.", httpStatus: error.httpStatus, debugRequests: Array.isArray(error.debugRequests) ? error.debugRequests : [] })); return true; } if (message.type === messageTypes.requestWlActions) { requestWlActions(message).then(sendResponse).catch(error => sendResponse({ ok: false, error: error.message || "Unable to load workload actions.", debugRequests: Array.isArray(error.debugRequests) ? error.debugRequests : [] })); return true; } if (message.type === messageTypes.requestCustomerServiceRequest) { requestCustomerServiceRequest(message).then(sendResponse).catch(error => sendResponse({ ok: false, error: error.message || "Unable to load service requests.", debugRequests: Array.isArray(error.debugRequests) ? error.debugRequests : [] })); return true; } if (message.type === messageTypes.requestInstallBase) { requestInstallBase(message).then(sendResponse).catch(error => sendResponse({ ok: false, error: error.message || "Unable to load installed base.", debugRequests: Array.isArray(error.debugRequests) ? error.debugRequests : [] })); return true; } if (message.type === messageTypes.requestAccountPlans) { requestAccountPlans(message) .then(sendResponse) .catch((error) => { sendResponse({ ok: false, error: error.message || "Unable to load account plans.", debugRequests: Array.isArray(error.debugRequests) ? error.debugRequests : [] }); }); return true; } if (message.type === messageTypes.requestRatecardByPlan) { requestRatecardByPlan(message).then(sendResponse).catch(error => sendResponse({ ok: false, error: error.message || "Unable to load rate card.", debugRequests: Array.isArray(error.debugRequests) ? error.debugRequests : [] })); return true; } if (message.type === messageTypes.requestConsumptionPlanDetail) { requestConsumptionPlanDetail(message).then(sendResponse).catch(error => sendResponse({ ok: false, error: error.message || "Unable to load consumption plan details.", debugRequests: Array.isArray(error.debugRequests) ? error.debugRequests : [] })); return true; } if (message.type === messageTypes.requestConsumptionTrend) { requestConsumptionTrend(message) .then(sendResponse) .catch((error) => { sendResponse({ ok: false, error: error.message || "Unable to load consumption trend.", debugRequests: Array.isArray(error.debugRequests) ? error.debugRequests : [] }); }); return true; } return false; }); }