/var/www/p4ela.kz/server/delivery/services/firebase
Edit: /var/www/p4ela.kz/server/delivery/services/firebase/index.js (2824B)
const admin = require('firebase-admin')
const logger = require('../../logger')({ service: 'Firebase' })
const serviceAccount = require('./service-account-file.json')
const { isSet } = require('../../api/utils/validator.util')
class Firebase {
constructor({ config, db }) {
this.config = config
// if (!config.firebase.enabled) {
logger.child({ service: 'Firebase', method: 'constructor' }).info(`initializeApp`)
// return
// }
this.db = db
this.a = admin.initializeApp({
credential: admin.credential.cert(serviceAccount),
databaseURL: config.firebaseDbURL
})
}
async SendToDevice(registrationToken, message, options) {
// if (!this.config.firebase.enabled) {
// logger
// .child({ service: 'Firebase', method: 'sendToUser' })
// .info(`Firebase disabled!`)
// return
// }
if (!isSet(options)) {
options = {}
}
logger
.child({ service: 'Firebase', method: 'sendToDevice' })
.info(`Token: ` + registrationToken + ' message: ' + message)
return await this.a.messaging().sendToDevice(registrationToken, message, options)
}
async SendToUser(id, message, options) {
const _db = this.db
if (!isSet(options)) {
options = {}
}
if (!id) {
logger.child({ service: 'Firebase', method: 'sendToUser' }).info(`Id is required`)
return
}
const user = await _db.user.findOne({
include: [{ model: _db.userGoogleToken }],
where: { id }
})
if (!user) {
logger.child({ service: 'Firebase', method: 'sendToUser' }).info(`User not found!`)
return
}
let tasks = []
for (const { token } of user.userGoogleTokens) {
message['token'] = token
tasks.push(
admin
.messaging()
.send(message)
.then((response) => {
// Response is a message ID string.
logger
.child({ service: 'Firebase', method: 'sendToUser' })
.info('Successfully sent message:' + response)
// console.log('Successfully sent message:', response);
})
.catch((error) => {
logger
.child({ service: 'Firebase', method: 'sendToUser' })
.info('Error sending message:' + error)
// console.log('Error sending message:', error);
_db.userGoogleToken.destroy({ where: { token } })
})
)
}
return await Promise.all(tasks)
}
}
module.exports = Firebase
// module.exports = function firebase({ config }) {
// const admin = require('firebase-admin')
// const serviceAccount = require('./service-account-file.json')
// admin.initializeApp({
// credential: admin.credential.cert(serviceAccount),
// databaseURL: config.firebaseDbURL
// })
// this.sendToDevice = async (registrationToken, message, options) => {
// if (!isSet(options)) {
// options = {}
// }
// return admin.messaging().sendToDevice(registrationToken, message, options)
// }
// return this
// }