diff --git a/bun.lockb b/bun.lockb index 803247d..7082e05 100755 Binary files a/bun.lockb and b/bun.lockb differ diff --git a/package.json b/package.json index aac4e7b..7888c66 100644 --- a/package.json +++ b/package.json @@ -50,6 +50,7 @@ "elysia": "^1.3.1", "embla-carousel-autoplay": "^7.1.0", "embla-carousel-react": "^7.1.0", + "firebase-admin": "^13.4.0", "from": "^0.1.7", "import": "^0.0.6", "iron-session": "^8.0.2", diff --git a/service_key.json b/service_key.json new file mode 100644 index 0000000..76bd583 --- /dev/null +++ b/service_key.json @@ -0,0 +1,13 @@ +{ + "type": "service_account", + "project_id": "mobile-darmasaba", + "private_key_id": "764e1207d5acf4db2eac539256c8f1bf397c7d8f", + "private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCwCU9PBpAbXsOl\ntb1syvWrmH3FSDRyI4oOVWZJRqYX+j44UTNfzTjYySpNy7x1lr91uOC2GGHJeFvT\nLg5er6uvzFvzwg42A8Rz4+aqxlUhvhNXYRyfaaP7tbui5X9GEmhKYzvYd6T/6z1u\njo7LE1tBaiB8eB69tSJidGcr90yXOsbvKFgaPkpvlrseNR/t0PYDUaXHsxdKvCHI\ntK13KxhJCJrU9+/W1Wwr+45WGfK9m+jLVuOEZT9dd3FUgDn/0CFzykZLA0iHRLjx\neczahlrlvLVCtUIJjHbmsjG8vLZyl6/puh1l2OkEZyADb6m7OOxFVTo5ADZvj4nD\nVCCirdMVAgMBAAECggEAMF0mbnJBpltnSkA/vkOWsmHPcCOx0QgFloGM/CXOXTkR\n3hwlDrWN4DWIi14ltXLIwFmeVzkkqJsKM19scEQ4WbC+NJ7Ek79+Ok7LYXDjE8Wq\nf6+9EukNtgqMdikySfilsYZI+2SHrw4czyKYhZ+YS0USjs/btkgtHbqYW+JyJvv4\nlXAGp3129kbOHTc6+DBq6tn4XiRMKUdBNtcRHe9k+zAIuwbeAdsl4bock1ADnMIv\n/Q4FfOua+nJl8MUpPCZDvz14az+3j/rUVkR/wgDqQirFNRfFfpEPNM2oXVSjp0oK\nTC8NEy5mN4aj0DYS8U2x8barsAFDr5N4L9JxTtdlgwKBgQDkXK9iieIe1/yJFDw6\ntHbQu/bl+t82DESapss62++6ckh2mo+IScvVg/rCwXIag7IRQO40BHWwYTrOwTbj\nD1VUamn6UaqJHpIjDj/SK+As3DumuOTcb+kbJq9TpjLGeR2hj0aKcFXAjL5+B+yr\nBt7fVsB2uhouS9aD68HV8azsxwKBgQDFV2yRKgSf11vNRsxtJekpZ7ruF4h8OZPA\nHcq1kMDPRJcuVD9XwG7RAEgxcErKKS6NrrT/2Iaq5r+P3owgxZ6yB5pabGGvsgcg\nqrvsVEjzETsrrDbp5IevwE/MTwplakr6vJBnfAyjqMbDQSGSZPp+6S8M5JtZhJDL\n9Pqy6yxNQwKBgEE9ZXGuWKZdKC11VXukAOnDOVcco9ZKDPNtwVPQb52BdshDgcv6\n4Tvfl606HMIMa7vYI/VCbOj17hoRQv/9anBScnJsEF9aF3/iW0NM+591T6li2ydK\n5Xq3Q5GPQqRHB7sXNpzoWOdIjkdtNiTqMpP1sch5hG9DhUZs/RSFFdUTAoGBALyV\nyD2NXu/1WVh5cQBZe1FDPMMtIBQ+3bB5h+8tDuTEEomGnyXX0s7OKy97tS0uX7us\nGnJo1IDblHMDZPwofnh5hYsmCdBiHCeeoYm+HhyS+e3JXIz2BKjy6g8/9ZpnEpI8\nwu7yAA4iSxfq1Q9Win/fjUQP71mDsvAGA9IZpbOLAoGBAK57RjNemVh3oNB5ZaQs\n45WzfmPPjKoDQdMYLtohHz9HhPxYFLuvlDc/9OcWFCz3tZHtyDrUtXvv+vX+rG4Y\nemxXkqdg3lYo7nayw772myJb2w6QIfGyuSRx/C1/phmPhp+UkHk7B+KdvWhpPmCC\nBufws2LSn5VZzivO6LrwSCfR\n-----END PRIVATE KEY-----\n", + "client_email": "firebase-adminsdk-fbsvc@mobile-darmasaba.iam.gserviceaccount.com", + "client_id": "105653213329235865762", + "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-fbsvc%40mobile-darmasaba.iam.gserviceaccount.com", + "universe_domain": "googleapis.com" +} diff --git a/src/app/api/mobile/route.ts b/src/app/api/mobile/route.ts new file mode 100644 index 0000000..9225958 --- /dev/null +++ b/src/app/api/mobile/route.ts @@ -0,0 +1,43 @@ +import { NextResponse } from "next/server"; +import admin from 'firebase-admin'; +import { getApps, initializeApp, getApp } from 'firebase-admin/app'; + +export async function GET(request: Request) { + try { + if(!admin.apps.length){ + const serviceAccount = require("../../../../service_key.json"); + admin.initializeApp({ + credential: admin.credential.cert(serviceAccount), + }); + } + + const firebaseConfig = { + apiKey: "AIzaSyB2hbsW91J3oRQx4_jgrCCNY0tNt5-21e8", + authDomain: "googleapis.com", + projectId: "mobile-darmasaba", + storageBucket: "mobile-darmasaba.appspot.com", + messagingSenderId: "867439221179", + appId: "1:867439221179:android:4509f77478c8dce99b0c9e", + databaseURL: "https://mobile-darmasaba-default-rtdb.asia-southeast1.firebasedatabase.app/", + measurementId: "G-1015652111565" + } + + const app = getApps().length ? getApp() : initializeApp(firebaseConfig); + + const message = { + notification: { + title: 'Dari API', + body: 'Hello World', + }, + token: 'fPfBeTn4R4KsHhDw-8Edj0:APA91bGBjguuZsMhisJua_Wa3m7z7vBCE08vjyDBScmN0eIRgpfINlDx4SI6-upn-rr6tTAcoPxeQkxxbEsohcUbbV5DjUyIG4xR6wuvKOJMp3Mr4rNWFv8', + }; + + const response = await admin.messaging().send(message); + console.log(response) + + return NextResponse.json({ success: true, message: "Sukses" }, { status: 200 }); + } catch (error) { + console.error(error); + return NextResponse.json({ success: false, message: "Gagal", reason: (error as Error).message, }, { status: 500 }); + } +} \ No newline at end of file diff --git a/src/module/_global/bin/firebase.ts b/src/module/_global/bin/firebase.ts new file mode 100644 index 0000000..644759d --- /dev/null +++ b/src/module/_global/bin/firebase.ts @@ -0,0 +1,19 @@ +import { getApp, getApps, initializeApp } from "firebase-admin/app"; +import { getMessaging } from "firebase-admin/messaging"; + +const firebaseConfig = { + apiKey: "AIzaSyB2hbsW91J3oRQx4_jgrCCNY0tNt5-21e8", + authDomain: "googleapis.com", + projectId: "mobile-darmasaba", + storageBucket: "mobile-darmasaba.appspot.com", + messagingSenderId: "867439221179", + appId: "1:867439221179:android:4509f77478c8dce99b0c9e", + databaseURL: "https://mobile-darmasaba-default-rtdb.asia-southeast1.firebasedatabase.app/", + measurementId: "G-1015652111565" +} + +const app = getApps().length ? getApp() : initializeApp(firebaseConfig); + +const messaging = async () => { + return getMessaging(app) +} \ No newline at end of file