function createBackgroundApplication(overrides = {}) { const environment = { fetch: globalThis.fetch, browser: globalThis.browser, chrome: globalThis.chrome, setTimeout: globalThis.setTimeout, ...overrides }; const messageTypes = createMessageTypes(); const timeEntries = createTimeEntries({ dates: createTimeDates(), fetchJson: (...args) => httpBackgroundJson.fetchJson(...args), getResourceUser: message => fusionSrCreate.getResourceUser(message), saveHeaders: url => srRequestHeaders.timeEntriesHeaders(url) }); const spaCurrentUser = createSpaCurrentUser({ fetchJson: (...args) => httpBackgroundJson.fetchJson(...args) }); const requestCurrentUser = () => spaCurrentUser.requestCurrentUser(); const contracts = createBackgroundContracts(); const productsCacheState = createProductsCacheState(); const authConsumerSession = createAuthConsumerSession({ CUSTOMER_TOKEN_MAX_ATTEMPTS: contracts.CUSTOMER_TOKEN_MAX_ATTEMPTS, CUSTOMER_TOKEN_RETRY_BASE_DELAY_MS: contracts.CUSTOMER_TOKEN_RETRY_BASE_DELAY_MS, CUSTOMER_TOKEN_RETRY_MAX_DELAY_MS: contracts.CUSTOMER_TOKEN_RETRY_MAX_DELAY_MS, CUSTOMER_TOKEN_SERVICE_URL: contracts.CUSTOMER_TOKEN_SERVICE_URL, CUSTOMER_TOKEN_SESSION_URL: contracts.CUSTOMER_TOKEN_SESSION_URL, extractTokenServiceAuthorization: (...args) => authSpaCredentials.extractTokenServiceAuthorization(...args), fetchJson: (...args) => httpBackgroundJson.fetchJson(...args), supportsFirefoxCookieStoreTabs: (...args) => platformBackgroundApi.supportsFirefoxCookieStoreTabs(...args), tabsCreate: (...args) => platformBackgroundApi.tabsCreate(...args), tabsRemove: (...args) => platformBackgroundApi.tabsRemove(...args), wait: (...args) => platformBackgroundApi.wait(...args) }); const authSpaCredentials = createAuthSpaCredentials({ findNestedObject: (...args) => spaResponseShapes.findNestedObject(...args) }); const spaAccounts = createSpaAccounts({ ACCOUNT_PLANS_PAYLOAD: contracts.ACCOUNT_PLANS_PAYLOAD, ACCOUNT_PLANS_URL: contracts.ACCOUNT_PLANS_URL, ACCOUNT_SUMMARY_URL: contracts.ACCOUNT_SUMMARY_URL, extractAccountPlans: (...args) => spaResponseShapes.extractAccountPlans(...args), fetchJson: (...args) => httpBackgroundJson.fetchJson(...args), findAccountPlanId: (...args) => spaResponseShapes.findAccountPlanId(...args), normalizeMessageAuthorization: (...args) => authSpaCredentials.normalizeMessageAuthorization(...args) }); const spaInstallBase = createSpaInstallBase({ ACCOUNT_SUMMARY_URL: contracts.ACCOUNT_SUMMARY_URL, fetchJson: (...args) => httpBackgroundJson.fetchJson(...args), findNestedObject: (...args) => spaResponseShapes.findNestedObject(...args), normalizeMessageAuthorization: (...args) => authSpaCredentials.normalizeMessageAuthorization(...args) }); const spaCustomerServiceRequests = createSpaCustomerServiceRequests({ ACCOUNT_SUMMARY_URL: contracts.ACCOUNT_SUMMARY_URL, fetchJson: (...args) => httpBackgroundJson.fetchJson(...args), findAccountPlanId: (...args) => spaResponseShapes.findAccountPlanId(...args), normalizeMessageAuthorization: (...args) => authSpaCredentials.normalizeMessageAuthorization(...args) }); const spaConsumption = createSpaConsumption({ CONSUMPTION_TREND_REQUESTS: contracts.CONSUMPTION_TREND_REQUESTS, CONSUMPTION_TREND_URL: contracts.CONSUMPTION_TREND_URL, fetchJson: (...args) => httpBackgroundJson.fetchJson(...args), normalizeMessageAuthorization: (...args) => authSpaCredentials.normalizeMessageAuthorization(...args) }); const spaResponseShapes = createSpaResponseShapes(); const httpBackgroundJson = createHttpBackgroundJson({ observeResponseHeaders: (...args) => srRequestHeaders.observeResponseHeaders(...args), previewDebugBody: createDebugBodyPreview, environment }); const productsBackgroundJobs = createProductsBackgroundJobs({ messageTypes, OPPTY_PRODUCTS_CONCURRENCY: contracts.OPPTY_PRODUCTS_CONCURRENCY, getOpptyProducts: (...args) => productsCache.getOpptyProducts(...args), normalizeCacheMaxAge: (...args) => productsCache.normalizeCacheMaxAge(...args), tabsSendMessage: (...args) => platformBackgroundApi.tabsSendMessage(...args) }); const productsCache = createProductsCache({ OPPTY_PRODUCTS_CACHE_KEY: contracts.OPPTY_PRODUCTS_CACHE_KEY, fetchAllOpptyProducts: (...args) => fusionProducts.fetchAllOpptyProducts(...args), productsCacheState, storageLocalGet: (...args) => platformBackgroundApi.storageLocalGet(...args), storageLocalSet: (...args) => platformBackgroundApi.storageLocalSet(...args) }); const fusionProducts = createFusionProducts({ createBackgroundDebugEntry: (...args) => httpBackgroundJson.createBackgroundDebugEntry(...args), completeBackgroundDebugEntry: (...args) => httpBackgroundJson.completeBackgroundDebugEntry(...args), createDebugBody: (...args) => httpBackgroundJson.createDebugBody(...args), headersToObject: (...args) => httpBackgroundJson.headersToObject(...args), OPPTY_PRODUCTS_FIELDS: contracts.OPPTY_PRODUCTS_FIELDS, OPPTY_PRODUCTS_MAX_PAGES: contracts.OPPTY_PRODUCTS_MAX_PAGES, OPPTY_PRODUCTS_PAGE_LIMIT: contracts.OPPTY_PRODUCTS_PAGE_LIMIT, ORACLE_DOMAIN: contracts.ORACLE_DOMAIN, environment }); const authXsrfRecovery = createAuthXsrfRecovery({ COOKIE_REFRESH_POLL_MS: contracts.COOKIE_REFRESH_POLL_MS, COOKIE_REFRESH_TIMEOUT_MS: contracts.COOKIE_REFRESH_TIMEOUT_MS, OPPORTUNITIES_LIST_URL: contracts.OPPORTUNITIES_LIST_URL, getXsrfTokenCookie: (...args) => authXsrfCookies.getXsrfTokenCookie(...args), supportsFirefoxCookieStoreTabs: (...args) => platformBackgroundApi.supportsFirefoxCookieStoreTabs(...args), tabsCreate: (...args) => platformBackgroundApi.tabsCreate(...args), tabsRemove: (...args) => platformBackgroundApi.tabsRemove(...args), wait: (...args) => platformBackgroundApi.wait(...args) }); const authXsrfCookies = createAuthXsrfCookies({ ORACLE_COOKIE_URLS: contracts.ORACLE_COOKIE_URLS, ORACLE_DOMAIN: contracts.ORACLE_DOMAIN, XSRF_COOKIE_NAME: contracts.XSRF_COOKIE_NAME, XSRF_COOKIE_PREFIX: contracts.XSRF_COOKIE_PREFIX, cookiesGet: (...args) => platformBackgroundApi.cookiesGet(...args), cookiesGetAll: (...args) => platformBackgroundApi.cookiesGetAll(...args), cookiesGetAllCookieStores: (...args) => platformBackgroundApi.cookiesGetAllCookieStores(...args), removeUndefinedValues: (...args) => platformBackgroundApi.removeUndefinedValues(...args) }); const platformBackgroundApi = createPlatformBackgroundApi({ runtimeApi: environment.browser || environment.chrome, environment }); const getXsrfTokenCookie = (...args) => authXsrfCookies.getXsrfTokenCookie(...args); const refreshXsrfCookie = (...args) => authXsrfRecovery.refreshXsrfCookie(...args); const requestAccountPlans = (...args) => spaAccounts.requestAccountPlans(...args); const requestInstallBase = (...args) => spaInstallBase.requestInstallBase(...args); const spaWorkloadActions = createSpaWorkloadActions({ fetchJson: (...args) => httpBackgroundJson.fetchJson(...args) }); const requestWlActions = (...args) => spaWorkloadActions.requestWlActions(...args); const spaActionOptions = createSpaActionOptions({ fetchJson: (...args) => httpBackgroundJson.fetchJson(...args) }); const requestActionTeamMembers = (...args) => spaActionOptions.requestActionTeamMembers(...args); const requestActionFindLookup = (...args) => spaActionOptions.requestActionFindLookup(...args); const requestCustomerServiceRequest = (...args) => spaCustomerServiceRequests.requestCustomerServiceRequest(...args); const requestConsumerTokenService = (...args) => authConsumerSession.requestConsumerTokenService(...args); const requestConsumptionTrend = (...args) => spaConsumption.requestConsumptionTrend(...args); const requestConsumptionPlanDetail = (...args) => spaConsumption.requestConsumptionPlanDetail(...args); const requestRatecardByPlan = (...args) => spaConsumption.requestRatecardByPlan(...args); const requestOpptyProducts = (...args) => productsBackgroundJobs.requestOpptyProducts(...args); const runtimeApi = environment.browser || environment.chrome; const srRequestHeaders = createSrRequestHeaders({ runtimeApi }); const fusionSrCreate = createFusionSrCreate({ runtimeApi, fetchJson: (...args) => httpBackgroundJson.fetchJson(...args), tokenHeaders: (...args) => srRequestHeaders.tokenHeaders(...args), internalServiceRequestHeaders: url => srRequestHeaders.internalServiceRequestHeaders(url), previewTokenHeaders: url => srRequestHeaders.previewTokenHeaders(url) }); const fusionSrDetails = createFusionSrDetails({ cookieChanges: runtimeApi?.cookies?.onChanged, cookiesGetAll: (...args) => platformBackgroundApi.cookiesGetAll(...args), tabsCreate: (...args) => platformBackgroundApi.tabsCreate(...args), tabsRemove: (...args) => platformBackgroundApi.tabsRemove(...args), supportsFirefoxCookieStoreTabs: () => platformBackgroundApi.supportsFirefoxCookieStoreTabs(), wait: (...args) => platformBackgroundApi.wait(...args), fetchJson: (...args) => httpBackgroundJson.fetchJson(...args) }); function start() { srRequestHeaders.start(); startBackgroundApplication({ invalidateResourceUser: () => fusionSrCreate.invalidateResourceUser(), requestWeekDetails: message => timeEntries.requestWeekDetails(message), requestTimeEntries: message => timeEntries.requestTimeEntries(message), requestTimeEntriesSave: message => timeEntries.requestTimeEntriesSave(message), requestTimeEntriesDelete: message => timeEntries.requestTimeEntriesDelete(message), requestLookupTaskType: () => timeEntries.requestLookupTaskType(), requestServiceRequestExpand: message => timeEntries.requestServiceRequestExpand(message), requestResourceUser: message => fusionSrCreate.getResourceUser(message), requestActiveServiceRequests: message => timeEntries.requestActiveServiceRequests(message), requestLookupTypePlatform: () => fusionSrDetails.requestLookupTypePlatform(), requestPostInternalServiceRequest: message => fusionSrCreate.requestPostInternalServiceRequest(message), requestInternalSrServices: message => fusionSrDetails.requestInternalSrServices(message), requestPostServiceRequest: message => fusionSrCreate.requestPostServiceRequest(message), prepareSrSession: sender => fusionSrDetails.prepareSession(sender), requestSrLookupWithSession: (...args) => fusionSrDetails.requestLookupWithSession(...args), messageTypes, requestSrLookupLanguage: () => fusionSrDetails.requestSrLookupLanguage(), requestSrLookupTechPlatform: () => fusionSrDetails.requestSrLookupTechPlatform(), requestSrLookupOpportunityBusiness: message => fusionSrDetails.requestSrLookupOpportunityBusiness(message), requestSrLookupPrimaryPillar: () => fusionSrDetails.requestSrLookupPrimaryPillar(), requestInternalServiceRequest: (message, sender) => fusionSrDetails.requestInternalServiceRequest(message, sender), requestMgmtAction: message => spaActionOptions.requestMgmtAction(message), invalidateProductsCache: () => productsCache.invalidate(), requestCurrentUser, getXsrfTokenCookie, refreshXsrfCookie, requestAccountPlans, requestInstallBase, requestCustomerServiceRequest, requestWlActions, requestActionTeamMembers, requestActionFindLookup, requestConsumerTokenService, requestConsumptionTrend, requestConsumptionPlanDetail, requestRatecardByPlan, requestOpptyProducts, runtimeApi }); } return { start, contracts, productsCacheState, authConsumerSession, authSpaCredentials, spaAccounts, spaInstallBase, spaCustomerServiceRequests, spaConsumption, spaResponseShapes, httpBackgroundJson, productsBackgroundJobs, productsCache, fusionProducts, authXsrfRecovery, authXsrfCookies, platformBackgroundApi }; }