import { BadRequestException, Injectable } from '@nestjs/common'; import { ConfigService } from '@nestjs/config'; import { Environment } from '../../config/env.validation'; import { isTbankErrorCode, TbankErrorCode } from './tbank-error-code'; import { TbankCrypto } from './tbank.crypto'; @Injectable() export class TbankTokenService { private readonly crypto: TbankCrypto; constructor(config: ConfigService) { this.crypto = TbankCrypto.fromBase64( config.getOrThrow('TOKEN_ENCRYPTION_KEY'), ); } encrypt(value: string): string { return this.crypto.encrypt(value); } decrypt(payload: string): string { return this.crypto.decrypt(payload); } async translateInvalidToken(operation: () => Promise): Promise { try { return await operation(); } catch (error) { if (error instanceof Error && isTbankErrorCode(error.message, TbankErrorCode.InvalidToken)) { throw new BadRequestException({ code: TbankErrorCode.InvalidToken }); } throw error; } } }