From 59bc1fde6b051353c4a5fe47ea79e3c066c898c0 Mon Sep 17 00:00:00 2001 From: Benoy Bose Date: Thu, 17 Apr 2025 19:55:26 +0530 Subject: [PATCH] Avoiding recursive references --- functions/src/email/index.ts | 4 ++-- functions/src/index.ts | 12 +++++----- functions/src/notifications/index.ts | 2 +- .../src/notifications/processNotification.ts | 22 +++++++++++-------- functions/src/payments/cashfree/createLink.ts | 8 +++++-- functions/src/payments/cashfree/index.ts | 6 ++--- functions/src/places/autocomplete.ts | 7 ++++-- functions/src/places/details.ts | 6 +++-- functions/src/places/index.ts | 4 ++-- functions/src/shared/config.ts | 3 ++- functions/src/shared/middleware.ts | 2 +- functions/src/sms/index.ts | 2 +- functions/src/sms/sendSMS.ts | 7 ++++-- functions/src/storage/accessFile.ts | 8 +++++-- functions/src/storage/index.ts | 2 +- 15 files changed, 58 insertions(+), 37 deletions(-) diff --git a/functions/src/email/index.ts b/functions/src/email/index.ts index 1721dfb..13a1701 100644 --- a/functions/src/email/index.ts +++ b/functions/src/email/index.ts @@ -1,2 +1,2 @@ -export * from './sendEmail'; -export * from './sendEmailWithAttachment'; +export { sendEmailMessage } from './sendEmail'; +export { sendEmailWithAttachment } from './sendEmailWithAttachment'; diff --git a/functions/src/index.ts b/functions/src/index.ts index c8bbb4b..cf82272 100644 --- a/functions/src/index.ts +++ b/functions/src/index.ts @@ -1,7 +1,7 @@ export * from './shared/config'; -export * from './email'; -export * from './storage'; -export * from './sms'; -export * from './notifications'; -export * from './payments'; -export * from './places'; +export { sendEmailMessage, sendEmailWithAttachment } from './email'; +export { accessFile } from './storage'; +export { sendSMSMessage } from './sms'; +export { processNotificationOnCreate } from './notifications'; +export { createCashfreeLink, createCashfreeOrder, verifyCashfreePayment } from './payments'; +export { getPlaceDetails, getPlacesAutocomplete } from './places'; diff --git a/functions/src/notifications/index.ts b/functions/src/notifications/index.ts index cddb4e3..c9fed3e 100644 --- a/functions/src/notifications/index.ts +++ b/functions/src/notifications/index.ts @@ -1 +1 @@ -export * from './processNotification'; +export { processNotificationOnCreate } from './processNotification'; diff --git a/functions/src/notifications/processNotification.ts b/functions/src/notifications/processNotification.ts index e21b6ea..b995b87 100644 --- a/functions/src/notifications/processNotification.ts +++ b/functions/src/notifications/processNotification.ts @@ -1,6 +1,10 @@ import { onDocumentCreated } from "firebase-functions/v2/firestore"; -import { logger } from "../shared/config"; -import { admin } from "../shared/config"; +import { getLogger } from "../shared/config"; +import { getAdmin } from "../shared/config"; +import * as admin from 'firebase-admin'; + +const app = getAdmin(); +const logger = getLogger(); interface NotificationData { notificationSent?: boolean; @@ -49,7 +53,7 @@ export const processNotificationOnCreate = onDocumentCreated({ const message = prepareNotificationMessage(notification, fcmToken); try { - const fcmResponse = await admin.messaging().send({ + const fcmResponse = await app.messaging().send({ ...message, token: fcmToken }); @@ -80,7 +84,7 @@ async function getUserAndFCMToken(notification: NotificationData): Promise<{ use userId = notification.invitorId; fcmToken = await getFCMTokenFromUserDoc(userId); } else if (notification.phoneNumber) { - const userQuery = await admin + const userQuery = await app .firestore() .collection('users') .where('phoneNumber', '==', notification.phoneNumber) @@ -98,7 +102,7 @@ async function getUserAndFCMToken(notification: NotificationData): Promise<{ use } async function getFCMTokenFromUserDoc(userId: string): Promise { - const userDoc = await admin.firestore().collection('users').doc(userId).get(); + const userDoc = await app.firestore().collection('users').doc(userId).get(); return userDoc.exists ? userDoc.data()?.fcmToken : null; } @@ -204,15 +208,15 @@ function getInvitationBody(status: string, name?: string): string { } async function markNotificationAsSent(notificationId: string): Promise { - await admin.firestore().collection('notifications').doc(notificationId).update({ + await app.firestore().collection('notifications').doc(notificationId).update({ notificationSent: true, - sentAt: admin.firestore.FieldValue.serverTimestamp() + sentAt: app.firestore.FieldValue.serverTimestamp() }); } async function updateNotificationWithError(notificationId: string, error: string): Promise { - await admin.firestore().collection('notifications').doc(notificationId).update({ + await app.firestore().collection('notifications').doc(notificationId).update({ notificationError: error, - updatedAt: admin.firestore.FieldValue.serverTimestamp() + updatedAt: app.firestore.FieldValue.serverTimestamp() }); } diff --git a/functions/src/payments/cashfree/createLink.ts b/functions/src/payments/cashfree/createLink.ts index 14d3aad..ba7e69c 100644 --- a/functions/src/payments/cashfree/createLink.ts +++ b/functions/src/payments/cashfree/createLink.ts @@ -1,10 +1,14 @@ import { onRequest } from "firebase-functions/v2/https"; import { Request } from "firebase-functions/v2/https"; -import { corsHandler } from "../../shared/middleware"; -import { admin, logger } from "../../shared/config"; +import { getCorsHandler } from "../../shared/middleware"; +import { getAdmin, getLogger } from "../../shared/config"; import axios from "axios"; const { v4: uuidv4 } = require('uuid'); +const corsHandler = getCorsHandler(); +const admin = getAdmin(); +const logger = getLogger(); + interface CashfreeLinkRequest { amount: number; customerName?: string; diff --git a/functions/src/payments/cashfree/index.ts b/functions/src/payments/cashfree/index.ts index 68a2744..b75cf11 100644 --- a/functions/src/payments/cashfree/index.ts +++ b/functions/src/payments/cashfree/index.ts @@ -1,3 +1,3 @@ -export * from './createOrder'; -export * from './createLink'; -export * from './verifyPayment'; \ No newline at end of file +export { createCashfreeLink } from './createLink'; +export { verifyCashfreePayment } from './verifyPayment'; +export { createCashfreeOrder } from './createOrder'; diff --git a/functions/src/places/autocomplete.ts b/functions/src/places/autocomplete.ts index cc204a8..c846d3e 100644 --- a/functions/src/places/autocomplete.ts +++ b/functions/src/places/autocomplete.ts @@ -1,9 +1,12 @@ import { onRequest } from "firebase-functions/v2/https"; import { Request } from "firebase-functions/v2/https"; import * as express from "express"; -import { logger } from "../shared/config"; +import { getLogger } from "../shared/config"; +import { getCorsHandler } from "../shared/middleware"; import axios from "axios"; -import { corsHandler } from "../shared/middleware"; + +const logger = getLogger(); +const corsHandler = getCorsHandler(); export const getPlacesAutocomplete = onRequest({ region: '#{SERVICES_RGN}#' diff --git a/functions/src/places/details.ts b/functions/src/places/details.ts index 9478b0e..41dbf64 100644 --- a/functions/src/places/details.ts +++ b/functions/src/places/details.ts @@ -1,9 +1,11 @@ import { onRequest } from "firebase-functions/v2/https"; import { Request } from "firebase-functions/v2/https"; import * as express from "express"; -import * as logger from "firebase-functions/logger"; import axios from "axios"; -import { corsHandler } from "../shared/middleware"; + +const corsHandler = require('../shared/middleware').corsHandler; +const logger = require('../shared/config').getLogger(); + export const getPlaceDetails = onRequest({ region: '#{SERVICES_RGN}#' diff --git a/functions/src/places/index.ts b/functions/src/places/index.ts index 8b3364b..a280b3c 100644 --- a/functions/src/places/index.ts +++ b/functions/src/places/index.ts @@ -1,2 +1,2 @@ -export * from './autocomplete'; -export * from './details'; \ No newline at end of file +export { getPlaceDetails } from './details'; +export { getPlacesAutocomplete } from './autocomplete'; diff --git a/functions/src/shared/config.ts b/functions/src/shared/config.ts index c9ea1d2..b25c8fa 100644 --- a/functions/src/shared/config.ts +++ b/functions/src/shared/config.ts @@ -5,4 +5,5 @@ if (!admin.apps.length) { admin.initializeApp(); } -export { admin, logger }; \ No newline at end of file +export const getAdmin = () => admin; +export const getLogger = () => logger; \ No newline at end of file diff --git a/functions/src/shared/middleware.ts b/functions/src/shared/middleware.ts index dab0c9e..e89ea6d 100644 --- a/functions/src/shared/middleware.ts +++ b/functions/src/shared/middleware.ts @@ -1,3 +1,3 @@ import cors from 'cors'; -export const corsHandler = cors({ origin: true }); +export const getCorsHandler = () => cors({ origin: true }); diff --git a/functions/src/sms/index.ts b/functions/src/sms/index.ts index 1cd8996..f1afb2c 100644 --- a/functions/src/sms/index.ts +++ b/functions/src/sms/index.ts @@ -1 +1 @@ -export * from './sendSMS'; \ No newline at end of file +export { sendSMSMessage } from './sendSMS'; \ No newline at end of file diff --git a/functions/src/sms/sendSMS.ts b/functions/src/sms/sendSMS.ts index ae427bc..5887e9a 100644 --- a/functions/src/sms/sendSMS.ts +++ b/functions/src/sms/sendSMS.ts @@ -1,9 +1,12 @@ import { onRequest } from "firebase-functions/v2/https"; import { Request } from "firebase-functions/v2/https"; -import { corsHandler } from "../shared/middleware"; -import { logger } from "../shared/config"; +import { getCorsHandler } from "../shared/middleware"; +import { getLogger } from "../shared/config"; import twilio from 'twilio'; +const corsHandler = getCorsHandler(); +const logger = getLogger(); + // Initialize Twilio client const twilioClient = twilio(process.env.TWILIO_ACCOUNT_SID, process.env.TWILIO_AUTH_TOKEN); diff --git a/functions/src/storage/accessFile.ts b/functions/src/storage/accessFile.ts index 5968e3e..7fe1e61 100644 --- a/functions/src/storage/accessFile.ts +++ b/functions/src/storage/accessFile.ts @@ -1,8 +1,12 @@ import { onRequest } from "firebase-functions/v2/https"; import { Request } from "firebase-functions/v2/https"; import * as path from 'path'; -import { corsHandler } from "../shared/middleware"; -import { admin, logger } from "../shared/config"; +import { getCorsHandler } from "../shared/middleware"; +import { getLogger, getAdmin } from "../shared/config"; + +const corsHandler = getCorsHandler(); +const admin = getAdmin(); +const logger = getLogger(); export const accessFile = onRequest({ region: '#{SERVICES_RGN}#' diff --git a/functions/src/storage/index.ts b/functions/src/storage/index.ts index 113d9ee..582151a 100644 --- a/functions/src/storage/index.ts +++ b/functions/src/storage/index.ts @@ -1 +1 @@ -export * from './accessFile'; \ No newline at end of file +export { accessFile } from './accessFile'; \ No newline at end of file