UNPKG

@test-org122/merchant-iframe

Version:

Mediator iFrame package. This is used to sandbox the connector code away from the running hypernet core.

49 lines (37 loc) 2.18 kB
import PostmateApi from "@merchant-iframe/implementations/api/PostmateApi"; import { IMerchantConnectorRepository } from "@merchant-iframe/interfaces/data"; import { IContextProvider } from "@merchant-iframe/interfaces/utils"; import { MerchantConnectorRepository } from "@merchant-iframe/implementations/data"; import { ContextProvider } from "@merchant-iframe/implementations/utils"; import { MerchantService } from "@merchant-iframe/implementations/business/MerchantService"; import { IMerchantService } from "@merchant-iframe/interfaces/business"; import { IMerchantIFrameApi } from "@merchant-iframe/interfaces/api"; import { IAjaxUtils, AxiosAjaxUtils } from "@test-org122/utils"; export class MerchantIframe { public contextProvider: IContextProvider; public ajaxUtils: IAjaxUtils; public merchantConnectorRepository: IMerchantConnectorRepository; public merchantService: IMerchantService; public merchantIframeApi: IMerchantIFrameApi; constructor() { // First step, get the mediator URL from the iframe params const urlParams = new URLSearchParams(window.location.search); const merchantUrl = urlParams.get("merchantUrl"); if (merchantUrl == null) { throw new Error("Must provide merchantURL parameter!"); } // Instantiate all the pieces this.contextProvider = new ContextProvider(new URL(merchantUrl)); this.ajaxUtils = new AxiosAjaxUtils(); this.merchantConnectorRepository = new MerchantConnectorRepository(this.ajaxUtils); this.merchantService = new MerchantService(this.merchantConnectorRepository, this.contextProvider); this.merchantIframeApi = new PostmateApi(this.merchantService, this.contextProvider); // Since this iframe is supposed to host a merchant connector, first things first, let's validate the merchant's connector this.merchantService.validateMerchantConnector().andThen(() => { // We're ready to answer questions about the connector, we can activate the API // Note, it would be better to have a waitForValidated() function down lower so that the API // can be activated immediately. return this.merchantIframeApi.activateModel(); }); } }