import { BuildPayload } from "../RequestDTOs/PaymentRequest"; import { sign } from "./SignatureGeneration"; import { VerifyUtil } from "./VerifyUtil"; export function transformUndefinedToNull(obj: any): any { if (obj === undefined || obj === null) { return undefined; // This will exclude the property } if (Array.isArray(obj)) { return obj .map(transformUndefinedToNull) .filter(item => item !== undefined); // Filter out undefined items } if (obj !== null && typeof obj === 'object') { return Object.fromEntries( Object.entries(obj) .map(([key, value]) => [key, transformUndefinedToNull(value)]) .filter(([key, value]) => value !== undefined) // Filter out entries with undefined values ); } return obj; } export function createHeader(countryCode: string, signature: string, authorization: string, contentType: string): any { return { countryCode: countryCode, signature: signature, authorization: authorization, contentType: contentType }; } export function removeUndefinedValues(obj: { [key: string]: any }) { const result: { [key: string]: any } = {}; for (const key in obj) { if (obj[key] !== undefined) { result[key] = obj[key]; } } return result; } export function createSign(builder: BuildPayload, privateKey: string): string { // const privateKey = 'MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAIOyRj9C52bdWLXnNsqSIWkmOPEBdAWgFoV4WuBmylQRR9+QqsOaJ6rtr0K9C2TOz2BcxCDokyxaqcAmBzq9/zHa0hip0kmGZ9/q+suvOsYnAWjdZczvhCvQr90JTkt+vo1N+YLFJ9DtP53EkjEijHmhQt3iReQGPA7ZBtS2zwCRAgMBAAECgYAcAJkdNG2dmq0VKI+m7QF7qSvsWuG/nHWNdbTlCBY3X+FHcSxOIQYUOyvL5gR5L9w6Yh813B4HDVQQzkU1QVb0gk0qETjjaZMHdpMrNK55JOCMFfakN3qctNBJiFpHP+mgUoyK+xP9ZuAPMNjK8YpwdDlnN2yJbyVH5BH2D6Sv3QJBAPa7r59rS3yuDldSuUgAoPCB/zpfRf0jS9/WyPyOwyc2bKDNQrH+ZNpOFQChpRiKCGSJ8J5V6znB9ushMh/FagcCQQCIpIWLmz8Gr8ArGHONR4XNG+ETYzlTusK90DxJ9r6pVxKekgQVBI+kiyt19Ht2Ws6WIv4wMW4tTCDoAKzBpPqnAkBiTW7wZjBCMZrXIcdeL5nvmOuWVyUscOam/Q1AyqRoOB/ZhU5AWmnWLGvjv4NmnoAvhmHOw86fSW9WSPiOffn7AkBX884h9mOzIh1HoA2AurDdPTy7Bfs4cdY353lnAnPm/Cz39HS8MptjBlGLMzrlC7491XhX/Pk2HvJvYz/PxSmxAkEAy5mjFohizx7Ll9FLFgugD5XAm4VBPQmcu8HCycFDp/WudOpLhjxFXuHzfv6lO3+oDCT4oqwaDwBi2aApGeAGbw=='; const publicKey = 'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoGpZKHHnogcZ12PU7M7nLi8QnkVgBzIPdFUXOTY2OGq/yyUA4aS5N08ue7vJxH++AA1Mdvck4nn1cZIRoAEwbgDrd3tDx6Wzz+v8jo+/6vj8TkeSePNcthMRgi5yT20GW1qOoULrN97I0KdRD6jpWFnspQ1Y6c9nfO0Fps0oQy2GB2Vd8e/AEIO4Q7wTiKQ9clI26s9WkCRclYRxzi4f32vlmZQK0YidnQUZEqdWHhwhRWJKUOPJL0CfW5tKx9d7PfjM9Gjkm/bhJSUHDjr9dxNMUGZQSiwWURG4zegoRI1BC6IwqtmgpsByqK7iogNUJ2TEbCowsk86iIgto778JwIDAQAB'; // var privateKey = 'MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAICK1MVSH/1bR1ghWfzlXl2v/wVkLhwZT9CfzwFVE5VwifdKBRzSi5GjeZqM9vcuC7bZrpkI2IKhXH9QbzPWHgP1eeCCwTDp6esKux6LWpT60DKvYGIrAGBFCM8WMS24d2luOaB6BTEJS7WBN0j81cJGzNqdsfB1nnnr8J4T/euXAgMBAAECgYB7X0RqArGrZNFr98672JWizAmzbfyHgY/Gh6uR9sruEm6IxyVzDW1hogpT2NosUahynilivke30RHLLDMfCHITNFkTmxIMH0uaBfWPM8xRCL4Jq4hJKsvMZhVxvVK8SxKjElawhlswBt5xBcuT/i5GasBvIiNw6Gr7gV7OIJN2CQJBALl/s8FvKkmgQ2AwQzfbx0Q5M89Yx/qfY2vgMJkpVnNrgmcRKhXZFFoQwqPCvRcW4Ij2QTwiqZuF09QDFTXPIWUCQQCxZXxZbxJnKfUV2tZnefLpag7sp5hJuvbGx5oRx22oKzxl5NA3tLVH10xFeZ5Qjf72luKxl3ghdlNiPy/QKedLAkEAknEIXdr+zWUiC5vOVRjCdU+bYUO7jFWsTYuNkjyaLUBgkDFywhDACmJU5qdkVAgRds7BrVHICClck3FjmzlMKQJAMaX7pXQmrGTbySAUPaWtzJH4V1eYkZoYEw4uGqe8EwL2xnXBqLWUvuSM3izpmBYFs7ILBDUmVAcv0yFoGlR//QJACMBGCaNr6e3JmGTo8HJRmPpdOJlJPISLYxHlXhDtUs+UuYzZrnU4SEQUnflmUijTDX4FXxm2TX4gm+6OTUkkHg=='; const requestPayload = builder.build(); const trimmedRequestPayload = removeUndefinedValues(requestPayload); console.log('trimmedRequestPayload: ', trimmedRequestPayload); const signedRequest = sign(requestPayload.toJSON(), privateKey); console.log('Signed Request:', signedRequest); const verifiedRequest = VerifyUtil.verify(requestPayload.toJSON(), signedRequest, publicKey); console.log('Verified Request:', verifiedRequest); return signedRequest; }