import { createHmac } from 'crypto';

export interface ISignatureHelper {
    isValidSignatureFromString(jsonPayload: string, secret: string, signature: string): boolean;
    getHashFromString(jsonPayload: string, secret: string): string;
    replaceLinebreaks(data: string): string;
}

export class SignatureHelper implements ISignatureHelper {
    isValidSignatureFromString(jsonPayload: string, secret: string, signature: string): boolean {
        return this.getHashFromString(jsonPayload, secret) === signature;
    }

    getHashFromString(jsonPayload: string, secret: string): string {
        return createHmac('sha256', secret)
            .update(jsonPayload, 'utf8')
            .digest('base64');
    }

    replaceLinebreaks(data: string): string {
        return data.replace(/[\r\n]+/gm, '\r\n');
    }
}

export const signatureHelper = new SignatureHelper();
