Skip to content
This repository was archived by the owner on Dec 18, 2022. It is now read-only.

Commit 2892ff3

Browse files
committed
Migrate to Firebase 10 and allow not specifying height
1 parent 7fc6509 commit 2892ff3

6 files changed

Lines changed: 63 additions & 56 deletions

File tree

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ $ export FIREBASE_THUMBNAILS_SIZES="64x64,128x128,256x256"
8888
If you want to resize to fit a specific width or height use the following syntax:
8989

9090
```bash
91-
$ export FIREBASE_THUMBNAILS_SIZES="64x0,128x0,256x256"
91+
$ export FIREBASE_THUMBNAILS_SIZES="64,128x0,256x256"
9292
```
9393

9494
The generated file names will have appended `_thumb_{size}` for example:

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@
4747
"lib"
4848
],
4949
"dependencies": {
50-
"firebase-admin": "^9.12.0",
50+
"firebase-admin": "^10.0.2",
5151
"mime": "^3.0.0",
5252
"parse-cloud-image": "^1.0.3"
5353
}

src/FirebaseAuthAdapter.ts

Lines changed: 8 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
1-
import * as path from "path";
2-
import * as admin from "firebase-admin";
3-
import { required } from "./utils";
1+
import { cert, getApp, initializeApp } from "firebase-admin/app";
2+
import { getAuth } from "firebase-admin/auth";
3+
import { credentials } from "./utils";
44

55
export default class FirebaseAuthAdapter {
66
constructor() {
7-
admin.initializeApp(
7+
initializeApp(
88
{
9-
credential: admin.credential.cert(this.credentials()),
9+
credential: cert(credentials()),
1010
},
1111
"auth"
1212
);
@@ -18,10 +18,9 @@ export default class FirebaseAuthAdapter {
1818
options: unknown
1919
): Promise<void> {
2020
try {
21-
const decodedToken = await admin
22-
.app("auth")
23-
.auth()
24-
.verifyIdToken(authData.access_token);
21+
const decodedToken = await getAuth(getApp("auth")).verifyIdToken(
22+
authData.access_token
23+
);
2524
if (decodedToken && decodedToken.uid === authData.id) {
2625
return;
2726
}
@@ -40,14 +39,4 @@ export default class FirebaseAuthAdapter {
4039
validateAppId(): Promise<void> {
4140
return Promise.resolve();
4241
}
43-
44-
private credentials(): admin.ServiceAccount {
45-
const data = required("FIREBASE_SERVICE_ACCOUNT");
46-
47-
try {
48-
return JSON.parse(data);
49-
} catch (e) {
50-
return require(path.resolve(".", data));
51-
}
52-
}
5342
}

src/FirebaseStorageAdapter.ts

Lines changed: 7 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,11 @@ import {
66
persists,
77
isImage,
88
generateThumbnails,
9+
credentials,
910
} from "./utils";
10-
import * as admin from "firebase-admin";
1111
import { Bucket } from "@google-cloud/storage";
12+
import { cert, initializeApp } from "firebase-admin/app";
13+
import { getStorage } from "firebase-admin/storage";
1214

1315
export interface File {
1416
filename: string;
@@ -30,16 +32,15 @@ export default class FirebaseStorageAdapter {
3032
false
3133
) as boolean;
3234

33-
this.bucket = admin
34-
.initializeApp(
35+
this.bucket = getStorage(
36+
initializeApp(
3537
{
36-
credential: admin.credential.cert(this.credentials()),
38+
credential: cert(credentials()),
3739
storageBucket: required("FIREBASE_STORAGE_BUCKET"),
3840
},
3941
"storage"
4042
)
41-
.storage()
42-
.bucket();
43+
).bucket();
4344
}
4445

4546
async createFile(
@@ -168,16 +169,6 @@ export default class FirebaseStorageAdapter {
168169
return null;
169170
}
170171

171-
private credentials(): admin.ServiceAccount {
172-
const data = required("FIREBASE_SERVICE_ACCOUNT");
173-
174-
try {
175-
return JSON.parse(data);
176-
} catch (e) {
177-
return require(path.resolve(".", data));
178-
}
179-
}
180-
181172
private async uploadFile(bucket: Bucket, file: File): Promise<void> {
182173
const cacheControl = optional(
183174
"FIREBASE_STORAGE_CACHE_CONTROL",

src/utils.ts

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import * as mime from "mime";
33
import { Bucket } from "@google-cloud/storage";
44
import { File } from "./FirebaseStorageAdapter";
55
import { ParseImage } from "parse-cloud-image";
6+
import { ServiceAccount } from "firebase-admin/app";
67

78
const optional = <T extends string | number | boolean | null | undefined>(
89
name: string,
@@ -40,8 +41,9 @@ const generateThumbnail = async (
4041
});
4142

4243
const pipeline = new ParseImage(image.filename, image.data, contentType);
43-
const width = parseInt(size.split("x")[0]);
44-
const height = parseInt(size.split("x")[1]);
44+
const sizes = size.split("x");
45+
const width = sizes.length > 0 ? parseInt(sizes[0]) : 0;
46+
const height = sizes.length > 1 ? parseInt(sizes[1]) : 0;
4547

4648
const sharp = await pipeline.process((sharp) =>
4749
sharp.resize(
@@ -67,4 +69,21 @@ const generateThumbnails = async (
6769
}
6870
};
6971

70-
export { optional, required, persists, isImage, generateThumbnails };
72+
const credentials = (): ServiceAccount => {
73+
const data = required("FIREBASE_SERVICE_ACCOUNT");
74+
75+
try {
76+
return JSON.parse(data);
77+
} catch (e) {
78+
return require(path.resolve(".", data));
79+
}
80+
};
81+
82+
export {
83+
optional,
84+
required,
85+
persists,
86+
isImage,
87+
generateThumbnails,
88+
credentials,
89+
};

yarn.lock

Lines changed: 24 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -53,11 +53,6 @@
5353
minimatch "^3.0.4"
5454
strip-json-comments "^3.1.1"
5555

56-
"@firebase/app-types@0.6.3":
57-
version "0.6.3"
58-
resolved "https://registry.yarnpkg.com/@firebase/app-types/-/app-types-0.6.3.tgz#3f10514786aad846d74cd63cb693556309918f4b"
59-
integrity sha512-/M13DPPati7FQHEQ9Minjk1HGLm/4K4gs9bR4rzLCWJg64yGtVC0zNg9gDpkw9yc2cvol/mNFxqTtd4geGrwdw==
60-
6156
"@firebase/app-types@0.7.0":
6257
version "0.7.0"
6358
resolved "https://registry.yarnpkg.com/@firebase/app-types/-/app-types-0.7.0.tgz#c9e16d1b8bed1a991840b8d2a725fb58d0b5899f"
@@ -96,12 +91,13 @@
9691
"@firebase/app-types" "0.7.0"
9792
"@firebase/util" "1.4.2"
9893

99-
"@firebase/database-types@^0.7.2":
100-
version "0.7.3"
101-
resolved "https://registry.yarnpkg.com/@firebase/database-types/-/database-types-0.7.3.tgz#819f16dd4c767c864b460004458620f265a3f735"
102-
integrity sha512-dSOJmhKQ0nL8O4EQMRNGpSExWCXeHtH57gGg0BfNAdWcKhC8/4Y+qfKLfWXzyHvrSecpLmO0SmAi/iK2D5fp5A==
94+
"@firebase/database-types@^0.9.3":
95+
version "0.9.6"
96+
resolved "https://registry.yarnpkg.com/@firebase/database-types/-/database-types-0.9.6.tgz#dcea2564ada9afe522d2520d889008f13ad8d2a1"
97+
integrity sha512-E7U28X+FtVtug7EkIkaOXbdP8ghCPno21WWgEiDKsneY28N5WOwccfXqSzHgAAezkR40ht/ZqXlCsUhEpv6JXw==
10398
dependencies:
104-
"@firebase/app-types" "0.6.3"
99+
"@firebase/app-types" "0.7.0"
100+
"@firebase/util" "1.5.1"
105101

106102
"@firebase/database@0.12.4":
107103
version "0.12.4"
@@ -129,6 +125,13 @@
129125
dependencies:
130126
tslib "^2.1.0"
131127

128+
"@firebase/util@1.5.1":
129+
version "1.5.1"
130+
resolved "https://registry.yarnpkg.com/@firebase/util/-/util-1.5.1.tgz#80ee586c78ed444eb7b96406e00513f279ef5a82"
131+
integrity sha512-ojwPg8sKVcoU/kC1QdTrD+eUDyjQkZyiH9tlouXeZdAeDddCYNvHgIeBQhZt62WIcjlNhy1zro/xdV5nUUU38A==
132+
dependencies:
133+
tslib "^2.1.0"
134+
132135
"@google-cloud/common@^3.8.1":
133136
version "3.8.1"
134137
resolved "https://registry.yarnpkg.com/@google-cloud/common/-/common-3.8.1.tgz#1313c55bb66df88f69bf7c828135fae25fbd2036"
@@ -1704,18 +1707,18 @@ find-up@^5.0.0:
17041707
locate-path "^6.0.0"
17051708
path-exists "^4.0.0"
17061709

1707-
firebase-admin@^9.12.0:
1708-
version "9.12.0"
1709-
resolved "https://registry.yarnpkg.com/firebase-admin/-/firebase-admin-9.12.0.tgz#d7e889e97c9c31610efbcd131bb6d06a783af757"
1710-
integrity sha512-AtA7OH5RbIFGoc0gZOQgaYC6cdjdhZv4w3XgWoupkPKO1HY+0GzixOuXDa75kFeoVyhIyo4PkLg/GAC1dC1P6w==
1710+
firebase-admin@^10.0.2:
1711+
version "10.0.2"
1712+
resolved "https://registry.yarnpkg.com/firebase-admin/-/firebase-admin-10.0.2.tgz#d1142fb40738fa9b62f6625c4e3fc8cbc0ba61c6"
1713+
integrity sha512-MLH0SPmC4L0aCHvPjs1KThraru/T84T3hxiPY3uCH7NZEgE/T5n4GwecwU3RcM3X+br75BIBY7qhaR5uCxhdXA==
17111714
dependencies:
17121715
"@firebase/database-compat" "^0.1.1"
1713-
"@firebase/database-types" "^0.7.2"
1716+
"@firebase/database-types" "^0.9.3"
17141717
"@types/node" ">=12.12.47"
17151718
dicer "^0.3.0"
17161719
jsonwebtoken "^8.5.1"
17171720
jwks-rsa "^2.0.2"
1718-
node-forge "^0.10.0"
1721+
node-forge "^1.0.0"
17191722
optionalDependencies:
17201723
"@google-cloud/firestore" "^4.5.0"
17211724
"@google-cloud/storage" "^5.3.0"
@@ -3055,6 +3058,11 @@ node-forge@^0.10.0:
30553058
resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.10.0.tgz#32dea2afb3e9926f02ee5ce8794902691a676bf3"
30563059
integrity sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==
30573060

3061+
node-forge@^1.0.0:
3062+
version "1.3.1"
3063+
resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3"
3064+
integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==
3065+
30583066
normalize-package-data@^2.5.0:
30593067
version "2.5.0"
30603068
resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8"

0 commit comments

Comments
 (0)