import { AccountAccessRequest, AccountAccessResponse, LinkToMerchantResponseType, RemoveCardRequest, RemoveCardServiceResponse, AddCardRequest, AddCardResponse } from '../types/account.types'; import { store } from 'redux/store'; import { createSessionExpiredResponse, withUnhandledRejectionHandler } from '../utils/session-handler'; export class AccountService { private _token: string; private _merchantId: string; constructor(token?: string, merchantId?: string) { this._token = token || store.getState().masterpassRest.token || ''; this._merchantId = merchantId || store.getState().masterpassRest.tokenData?.MerchantId || ''; this.initialize(); } private initialize(): void { if (!window.Masterpass) { return; } if (window.Masterpass.setToken) { window.Masterpass.setToken(this._token); } if (window.Masterpass.setMerchantId) { window.Masterpass.setMerchantId(this._merchantId); } } accountAccess(request: AccountAccessRequest): Promise { return withUnhandledRejectionHandler( () => new Promise((resolve, reject) => { try { this.initialize(); window.Masterpass.accountService.accountAccess( request, (statusCode: number, response: AccountAccessResponse) => { resolve(response); } ); } catch (error) { console.error('AccountAccess error:', error); reject(error); } }), createSessionExpiredResponse() ); } linkToMerchant(request: { accountKey: string; }): Promise { return withUnhandledRejectionHandler( () => new Promise((resolve, reject) => { try { this.initialize(); window.Masterpass.accountService.linkToMerchant( request, (statusCode: number, response: LinkToMerchantResponseType) => { resolve(response); } ); } catch (error) { reject(error); } }), createSessionExpiredResponse() ); } removeCard(req: RemoveCardRequest): Promise { return withUnhandledRejectionHandler( () => new Promise((resolve, reject) => { try { this.initialize(); window.Masterpass.accountService.removeCard( req, (statusCode: number, response: RemoveCardServiceResponse) => { resolve(response); } ); } catch (error) { reject(error); } }), createSessionExpiredResponse() ); } addCard(request: AddCardRequest): Promise { return withUnhandledRejectionHandler( () => new Promise((resolve, reject) => { try { this.initialize(); window.Masterpass.accountService.addCard( request, (statusCode: number, response: AddCardResponse) => { resolve(response); } ); } catch (error) { reject(error); } }), createSessionExpiredResponse() ); } }