import { login, confirm, forgotPassword, resetPassword, TideClientConfig, MemberInfo } from '@qite/tide-client'; import { MemberConfirmationRequest, MemberForgotPasswordRequest, MemberLoginRequest, MemberResetPasswordRequest } from '@qite/tide-client'; import { JwtPayload, jwtDecode } from 'jwt-decode'; interface MemberInfoPayload extends JwtPayload { company: string; companyName: string; language: string; member: string; email: string; unique_name: string; addressId: string; addressName: string; addressLogo: string; 'http://schemas.xmlsoap.org/ws/2005/05/identity/claims/sid': string; 'http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name': string; 'http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress': string; } export const loginMember = async (username: string, password: string, tideClientConfig: TideClientConfig, portalId: number) => { if (!tideClientConfig.host || !tideClientConfig.apiKey) { return Promise.reject(); } const memberLogingRequest: MemberLoginRequest = { username: username, password: password, portalId: portalId }; const memberInfo = await login(tideClientConfig, memberLogingRequest, undefined); return memberInfo; }; export const confirmMember = async (token: string, password: string, hasAgreed: boolean, tideClientConfig: TideClientConfig) => { if (!tideClientConfig.host || !tideClientConfig.apiKey) { return Promise.reject(); } const memberConfirmationRequest: MemberConfirmationRequest = { token: token, password: password, hasAgreed: hasAgreed }; const response = await confirm(tideClientConfig, memberConfirmationRequest, undefined); return response; }; export const passwordForgotten = async (username: string, tideClientConfig: TideClientConfig, portalId: number) => { if (!tideClientConfig.host || !tideClientConfig.apiKey) { return Promise.reject(); } const memberForgotPasswordRequest: MemberForgotPasswordRequest = { username: username, portalId: portalId }; const response = await forgotPassword(tideClientConfig, memberForgotPasswordRequest, undefined); return response.ok; }; export const newPassword = async (token: string, password: string, tideClientConfig: TideClientConfig) => { if (!tideClientConfig.host || !tideClientConfig.apiKey) { return Promise.reject(); } const memberResetPasswordRequest: MemberResetPasswordRequest = { token: token, password: password }; const response = await resetPassword(tideClientConfig, memberResetPasswordRequest, undefined); return response.ok; }; export const decodeTokenToMemberInfo = (token: string | null): MemberInfo | undefined => { if (!token) { return undefined; } const decodedToken = jwtDecode(token); let member: MemberInfo | undefined = undefined; // check if token is not expired if (decodedToken?.exp && decodedToken.exp * 1000 < new Date().getTime()) { return undefined; } if (decodedToken) { member = { id: decodedToken['http://schemas.xmlsoap.org/ws/2005/05/identity/claims/sid'] ? parseInt(decodedToken['http://schemas.xmlsoap.org/ws/2005/05/identity/claims/sid']) : 0, companyId: decodedToken.company ? parseInt(decodedToken.company) : 0, companyName: decodedToken.companyName, name: decodedToken.unique_name, email: decodedToken.email || decodedToken['http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress'], language: decodedToken.language, agentId: decodedToken['http://schemas.xmlsoap.org/ws/2005/05/identity/claims/sid'] ? parseInt(decodedToken['http://schemas.xmlsoap.org/ws/2005/05/identity/claims/sid']) : 0, addressId: decodedToken.addressId ? parseInt(decodedToken.addressId) : undefined, addressName: decodedToken.addressName, addressLogo: decodedToken.addressLogo } as MemberInfo; } return member; };