Skip to content

Commit a57a86a

Browse files
Resul AvanResul Avan
authored andcommitted
modules for shared types and functions
1 parent 553a0cc commit a57a86a

37 files changed

+216
-593
lines changed

.circleci/config.yml

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,8 @@ jobs:
77
steps:
88
- checkout
99
- run:
10-
name: Install commons-types dependencies
11-
command: npm --prefix functions commons-types
12-
- run:
13-
name: Build commons-types
14-
command: npm --prefix functions run build
10+
name: Install dependencies
11+
command: npm run install
1512
- run:
1613
name: Add .env
1714
command: |
@@ -45,21 +42,15 @@ jobs:
4542
echo " console.log('firebase-messaging-sw.js setBackgroundMessageHandler', payload)" >> src/static/firebase-messaging-sw.js
4643
echo "})" >> src/static/firebase-messaging-sw.js
4744
echo "" >> src/static/firebase-messaging-sw.js
48-
echo ""
49-
cat src/static/firebase-messaging-sw.js
50-
- run:
51-
name: Install functions dependencies
52-
command: npm --prefix functions install
53-
- run:
54-
name: Install src dependencies
55-
command: npm --prefix src install
5645
- run:
5746
name: deploy to Firebase Hosting
5847
command: ./src/node_modules/.bin/firebase deploy --project=$FIREBASE_PROJECT_ID --token=$FIREBASE_CI_TOKEN
5948
- run:
6049
name: Call to warm up
6150
command: |
6251
curl "$WEBSITE_URL"
52+
curl "$WEBSITE_URL/api/healthy"
53+
curl "$WEBSITE_URL/sitemap.xml"
6354
6455
workflows:
6556
version: 2

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ node_modules
103103

104104
# modules
105105
lib
106-
**/*.tar.gz
106+
**/*.tgz
107107

108108
# firebase
109109
functions/nuxt.config.ts

README.md

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,13 @@ See the [Features](#features) for more functionalities
1717
|<img width="1604" alt="Profile" src="https://firebasestorage.googleapis.com/v0/b/nuxt-ts-firebase-auth-ssr.appspot.com/o/github%2Fprofile.png?alt=media&token=b14fd223-1248-44bc-8f9f-92f45273c716"> | <img width="1604" alt="Ligthbox" src="https://firebasestorage.googleapis.com/v0/b/nuxt-ts-firebase-auth-ssr.appspot.com/o/github%2Flightbox.png?alt=media&token=347fe927-f425-49dd-8d2b-05c626de48cf">|<img width="1604" alt="Ligthbox view" src="https://firebasestorage.googleapis.com/v0/b/nuxt-ts-firebase-auth-ssr.appspot.com/o/github%2Flightbox-view.png?alt=media&token=d6e31892-c0cb-4708-9b9f-d53d52644e9e">|
1818
|<img width="1604" alt="Crop" src="https://firebasestorage.googleapis.com/v0/b/nuxt-ts-firebase-auth-ssr.appspot.com/o/github%2Fcrop.png?alt=media&token=d547fe2e-fe51-4904-8e22-f3c4a6d6e886"> | <img width="1604" alt="login" src="https://firebasestorage.googleapis.com/v0/b/nuxt-ts-firebase-auth-ssr.appspot.com/o/github%2Flogin.png?alt=media&token=08d3333c-d54f-495a-937b-fa178d22b21d">|<img width="1604" alt="register" src="https://firebasestorage.googleapis.com/v0/b/nuxt-ts-firebase-auth-ssr.appspot.com/o/github%2Fregister.png?alt=media&token=2cd96b4d-3f34-4a4c-a4a5-0de7b72c3d6a">|
1919

20+
## Folder Structure
21+
22+
- [functions](./functions): source folder for firebase-functions
23+
- [modules](./functions/modules): Shared types and functions between front-end and back-end (firebase-functions and nuxt serverMiddleware)
24+
- [src](./src): nuxt application
25+
26+
2027
## DETAILED DOCUMENTATION
2128
> Coming soon
2229
@@ -174,10 +181,9 @@ FIREBASE_MEASUREMENT_ID= ***
174181

175182
the root `package.json` has been created to manage build and deployment easily.
176183

177-
### install dependencies
184+
### install dependencies (not `npm install` or `npm i` )
178185
```bash
179-
$ npm --prefix functions install
180-
$ npm --prefix src install
186+
$ npm run install
181187
```
182188

183189
### deploy

functions/README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,3 +37,6 @@
3737

3838
### deploy sitemapApp
3939
firebase deploy --only functions:sitemapApp
40+
41+
## install modules
42+
go to [modules](./modules)

functions/modules/README.md

Lines changed: 9 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,14 @@
11
# modules
2+
The code has nuxt frontend application and firebase functions as backend. Additionally, nuxt application has `serverMiddleware`. That `serverMiddleware` has same functionality as `firebase-functions`. That means there are some shared types and functions.
23

3-
## build
4-
npm i
5-
npm run build
6-
7-
## install local modules
8-
npm i <local-path-of-the-module>
9-
10-
or
11-
npm i <tar.gz-path-of-the-module>
12-
13-
14-
sample
4+
The `modules` has been created to keep consistency, the code clean and reduce the maintenance duration.
155

16-
npm i ../modules/types-module
17-
npm i ../modules/types-module/types-module-1.0.0.tgz
6+
The modules:
7+
- [types-module](./types-module): has all shared types (enums, interfaces, constants)
8+
- [handlers-module](./handlers-module): has all express handlers. Also, has all backend services like firebase-admin and firestore
189

19-
## remove local modules
20-
npm remove <package-name-of-the-module>
10+
## npm install on all modules
11+
npm run install
2112

22-
sample
23-
24-
npm remove types-module
13+
## build all modules
14+
npm run build
Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,19 @@
1-
# types module
1+
# handlers-module
22

33
## build
44
npm i
55
npm run build
66

77
## install
8-
npm i ../modules/types-module
8+
npm i <relative-path-from-target-package>
9+
10+
`on function`
11+
12+
npm i ../modules/handlers-module
13+
14+
`on src (nuxt)`
15+
16+
npm i ../functions/modules/handlers-module
917

1018
## remove local modules
11-
npm remove types-module
19+
npm remove handlers-module

functions/modules/handlers-module/src/config.ts

Lines changed: 0 additions & 25 deletions
This file was deleted.
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import admin from 'firebase-admin'
2+
3+
export class HandlerConfig {
4+
5+
private static credentials = ''
6+
7+
private static readonly defaultInitializer = () => {
8+
admin.initializeApp({
9+
credential: admin.credential.applicationDefault()
10+
})
11+
console.log('firebase admin is initialized by default credentials')
12+
return admin
13+
}
14+
15+
private static readonly credentialsInitializer = () => {
16+
const serviceAccount = HandlerConfig.credentials
17+
// const serviceAccount = require(HandlerConfig.credentials)
18+
admin.initializeApp({
19+
credential: admin.credential.cert(serviceAccount)
20+
})
21+
console.log('firebase admin is initialized by custom credentials')
22+
}
23+
24+
static setCredentials = (credentials: string) => {
25+
HandlerConfig.credentials = credentials
26+
}
27+
28+
static getAdmin () {
29+
if (admin.apps.length === 0) {
30+
this.credentials ? this.credentialsInitializer() : this.defaultInitializer()
31+
}
32+
return admin;
33+
}
34+
35+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,5 @@
1+
export * from './handler-config'
12
export * from './api'
23
export * from './sitemap-handler'
4+
export * from './service/request-handler-service'
5+
export * from './service/global-service'

functions/modules/handlers-module/src/service/firebase-admin-service.ts

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import admin from 'firebase-admin'
21
import {
32
AuthUser,
43
collection,
@@ -13,19 +12,18 @@ import {
1312
WhereClause
1413
} from 'types-module'
1514
import { deleteModel, getModelById, getModelsByWhereClauses } from './firestore-admin-collection-service'
16-
import { HandlerConfig } from '../config'
15+
import { HandlerConfig } from '../handler-config'
16+
import admin from 'firebase-admin'
1717
import DecodedIdToken = admin.auth.DecodedIdToken
1818

19-
HandlerConfig.initialize()
20-
2119
export const getDecodedIdToken = (idToken: string): Promise<DecodedIdToken> => {
22-
return admin.auth()
20+
return HandlerConfig.getAdmin().auth()
2321
.verifyIdToken(idToken)
2422
.then((decodedIdToken: DecodedIdToken) => decodedIdToken)
2523
}
2624

2725
export const setCustomClaims = async (uid: string, firebaseClaims: FirebaseClaims): Promise<void> => {
28-
await admin.auth().setCustomUserClaims(uid, firebaseClaims);
26+
await HandlerConfig.getAdmin().auth().setCustomUserClaims(uid, firebaseClaims);
2927
}
3028

3129
export const validateClaimsAndGet = async (decodedIdToken: DecodedIdToken) => {

0 commit comments

Comments
 (0)