GIF89a php
Current File : /home/viralhoga/game_viralhoga_com/src/utils/notifications.js
import https from 'https';
import { JWT } from "google-auth-library";
import { ApiError } from "../utils/ApiError.js";
import { ApiResponse } from "../utils/ApiResponse.js";
import { asyncHandler } from "../utils/asyncHandler.js";

const SCOPES = ['https://www.googleapis.com/auth/cloud-platform'];

const key = {
    "type": "service_account",
    "project_id": "matka444app",
    "private_key_id": "15245fd9a1ecd3647edd78ca09b21a222226f866",
    "private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCvwnE1mdNk0XPm\nQtP0NdhEqfb1IUfOvpXCJ5KfLaWkOd2jMiFTYrpNp421LAlHddb/aDmh/Ojuj4ck\ne0ndr308Tr2Zhr+GugO+F8ZGWt98Y+yFxThhhyFGf+g3YR03PrfAY8GCbvIayJe5\ngbK9dZhDt+qn907Q4Hzd77bi4jnC9k6M3ypGidgSch2OYpmpufbkiEB0f/k4FeRV\ne/QsHhpxnAdMUdqUzTbng9fAQU5quz+IX+i2Tga0gKA5Np2B/LVT2ttSA5Hjqcuy\nVoFY9DVaK4OiseYWQ2CDOl/lCgXmZaUmLOPyUzuLAapuyRq9QGKHDaqCXN44h9tm\nhOVqu4BxAgMBAAECggEAKdxczFBj2dpNCWWXR83fQZNdn0qa6LHZx1FXiZP8pJ2n\nnSveZhbYmpAynxjq6Ns3JsOzHlK3Q8JphJXcpPEcGdYDMGK4kSUSqR7OeYlBO0Yt\nWjr7z7a4hSsHqtD1fWfxqd/YgfFctmZaRLOQV7F/X3mZaQHtArDE7LMgUu9gpH9R\nliop8EnQ0+gVp7XUwSZij7XVvdl9ebhl/tRHyZcbCbLMGgee7dYXLRW6nt1j84hs\n4NisvTBsxb/MNSOaCLLEXnThfgz6W1k/ulocWpeYaX879GLo9KxEsi+yvmcioMZV\nvkCjDy6/fxKLi4cTArVYE7hf0eT/J1p5ag21A/FzxQKBgQDxk8kIvR7RW9wXlFjz\nPExYVPLJ5U2vK66Jc/9TAW2jccwj+CLpvm2nf/Htl/VWsnlH46DfUkvQ9S8OTTo9\nk8n4DirKD5UdnNW75GVViSLXZSCdlybBENTiMaPVOeCSpZiNJzmRi0hGY0exh/mF\nKftjSRt4ig3M3E4cCR0Fhjk7rwKBgQC6QLZ62R0SQ5GV/tXMsNl9/MHm4I6WbGqC\nNMgtixQbE3aBx53gXQ5oqbt6p7KsJWpKSF4uLgwd3WvP3mBVsQKV4+byAC5SBsX4\n4fhX1h3YBtwRIt4ghJEgOEqj02Uh10/VFmGHtULn8GfoskkOXuVeFjMVk2XU0bXn\nxIxhsblt3wKBgQDjDsKfghIbOTnOt9I7HGutgnqIpQu1H1t3Oh27SNZiDy2OiUVX\naXLrQmiDppYkHK+9kAe+nz0/c5P83z1kbyogCkDRln/TS3vglDVihfjHdveG53C3\nejh9OacBXNrlOtv9n+aOE9mkvt+9z04JiYIMucQmMavy5wZLd41dieD1ZQKBgBO6\nkxnEMb4jhiJbUg5SlVcxFOD93Fy2szmDmcipOMH9d8obeO+xK7uObxt49AYkGHQx\n4jgGDKaFM8xbA91P2LRD5cywlDeAHCxW01WKirK9V0ZBaUIMiMre65ka5VWGVyB9\nNGuJmcKzxm3xpKdvCeDDfTnF2T2H0TrxqOUYTEoFAoGBALbRRw3OHu5npdZ/I3Ff\nblai0qKGDvDBzeQcCLUxpWqLsQSEzH6Cp2TkIciVuiEqMuWzUZf8aookgEc8y2qm\nxZT2+CJyJx955LgjqidgvOCU5fRR4IJATvcMJkD/qRXlgq7feyO+SeSgEoouIhGP\n9lW+oGYjDgmhgu1vtc9Y1KUz\n-----END PRIVATE KEY-----\n",
    "client_email": "firebase-adminsdk-ja5pv@matka444app.iam.gserviceaccount.com",
    "client_id": "105306369087730610109",
    "auth_uri": "https://accounts.google.com/o/oauth2/auth",
    "token_uri": "https://oauth2.googleapis.com/token",
    "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
    "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/firebase-adminsdk-ja5pv%40matka444app.iam.gserviceaccount.com",
    "universe_domain": "googleapis.com"
}



// For Generate Access Token 
export const generateAccessToken = asyncHandler(async (req, res) => {

    const jwtClient = new JWT(
        key.client_email,
        null,
        key.private_key,
        SCOPES,
        null
    );

    jwtClient.authorize(function (err, tokens) {
        if (err) {
            console.log(err);
            throw new ApiError(401, err)
        }
        return res.send(tokens.access_token);
    });

})


// For Sending Notification 
export const sendNotification = asyncHandler(async (req, res) => {

    const { fcmToken, body, title, data } = req.body;


    const jwtClient = new JWT(
        key.client_email,
        null,
        key.private_key,
        SCOPES,
        null
    );
    jwtClient.authorize(function (err, tokens) {
        if (err) {
            reject(err);
            throw new ApiError(401, err)

        }
        const accessToken = tokens.access_token;

        const uri = 'https://fcm.googleapis.com/v1/projects/matka444app/messages:send';

        fetch(uri, {
            method: "POST",
            body: JSON.stringify({
                "message": {
                    "token": fcmToken,
                    "notification": {
                        "body": body,
                        "title": title
                    },
                    "data": data,
                }
            }),
            headers: {
                "Content-type": "application/json",
                "Authorization": `Bearer ${accessToken}`
            }
        })
            // Converting to JSON 
            .then(response => response.json())
            // Displaying results to console 
            .then((json) => {
                res.json(json)
            });
    });
});

export const sendNotifcationWithFirebase = async (notificationId, data) => {

    const jwtClient = new JWT(
        key.client_email,
        null,
        key.private_key,
        SCOPES,
        null
    );
    jwtClient.authorize(function (err, tokens) {
        if (err) {
            reject(err);
            throw new ApiError(401, err)

        }
        const accessToken = tokens.access_token;

        const uri = 'https://fcm.googleapis.com/v1/projects/matka444app/messages:send';

        console.log(uri);
        console.log(data);
        console.log(notificationId);

        fetch(uri, {
            method: "POST",
            body: JSON.stringify({
                "message": {
                    "token": notificationId,
                    "notification": data,
                    "data": data,
                }
            }),
            headers: {
                "Content-type": "application/json",
                "Authorization": `Bearer ${accessToken}`
            }
        })
            // Converting to JSON 
            .then(response => response.json())
            // Displaying results to console 
            .then((json) => {
                console.log(json);
                 return json;
            });
    });

}
// export const sendNotifcationWithFirebase = async (notificationId, data) => {
//     const serverKey = 'AAAArdWPWUU:APA91bFJlaDYz8_XqvZ7bTo-bM73jIpxDJaIAjg9kXjj9G3k0VneRj5QKoBnzKaEDJi3PT6mwrv-y4cBpI2MpR_66QWMbIXqHVlVed9WgVfCHbodh5XxGcdNOMjbn-ZHONqXqouZm-42';

//     try {

//         const postData = JSON.stringify({ to: notificationId, notification: data });

//         const options = {
//             hostname: 'fcm.googleapis.com',
//             path: '/fcm/send',
//             method: 'POST',
//             headers: {
//                 'Authorization': 'key=' + serverKey,
//                 'Content-Type': 'application/json',
//             },
//         };

//         const req = https.request(options, (res) => {
//             let response = '';

//             res.setEncoding('utf8');

//             res.on('data', (chunk) => {
//                 response += chunk;
//                 console.log(response);
//             });

//             res.on('end', () => {
//                 console.log('Notification sent:', response);
//             });
//         });

//         req.on('error', (error) => {
//             console.error('Error sending notification:', error);
//         });

//         req.write(postData);
//         req.end();
//     } catch (e) {
//         console.error(e);
//     }
// };