import { Base } from './base'; import { SessionInformation } from './types/session'; import { SessionModel } from './models/session'; export class Session extends Base { private sessionApi = this.config.get('sessionApi'); private membershipApi = this.config.get('membershipApi'); private buildCreateSessionBody(userId: string): Object { return { creationTime: new Date().getTime(), mfa: 'false', rememberMe: 'true', uuid: userId, }; } private async createSessionTokenByPath(userId: string, path: string): Promise { const url = `${this.sessionApi}${path}`; const sessionApiKey = this.config.get('sessionApiKey'); const additionalHeaders = { 'FT-Api-Key': sessionApiKey, 'Accept': 'text/plain', }; const body = this.buildCreateSessionBody(userId); return this.requestPost({ key: sessionApiKey, url, body, additionalHeaders }); } /** * Creates a session token for a specific user. * Docs: https://sessionapi-test.memb.ft.com/swagger-ui/#/default/POST_membership-sessions * @param userId User's UUID. * @returns The session token. */ public async createSessionToken(userId: string): Promise { return this.createSessionTokenByPath(userId, '/membership/sessions'); } /** * Creates a secure session token for a specific user * Docs: https://sessionapi-test.memb.ft.com/swagger-ui/#/default/POST_membership-sessions-s * @param userId User's UUID. * @returns The secure session token. */ public async createSecureSessionToken(userId: string): Promise { return this.createSessionTokenByPath(userId, '/membership/sessions/s'); } /** * Fetches session information for a specific user. * Docs: https://session-api.memb.ft.com/swagger-ui/#/default/GET_membership-sessions-s-sessionId * @param sessionId ID of a secure session. * @returns The session token. */ public async fetchSessionInfo(sessionId: string): Promise { const url = `${this.membershipApi}/sessions/s/${sessionId}`; const sessionApiKey = this.config.get('sessionApiKey'); const sessionInfo = await this.requestGet({ url, key: sessionApiKey }); return new SessionModel(sessionInfo); } }