@prmichaelsen/firebase-admin-sdk-v8 2.0.19 → 2.0.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/e2e-tests.yml +41 -0
- package/.github/workflows/test.yml +44 -0
- package/README.md +10 -7
- package/package.json +1 -1
- package/firebase.json +0 -9
- package/firestore.indexes.json +0 -33
- package/firestore.rules +0 -11
- package/jest.config.js +0 -12
- package/jest.e2e.config.js +0 -14
- package/service-account.json +0 -13
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
name: E2E Tests
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [ mainline ]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [ mainline ]
|
|
8
|
+
workflow_dispatch: # Allow manual trigger
|
|
9
|
+
|
|
10
|
+
jobs:
|
|
11
|
+
e2e-tests:
|
|
12
|
+
runs-on: ubuntu-latest
|
|
13
|
+
|
|
14
|
+
steps:
|
|
15
|
+
- name: Checkout code
|
|
16
|
+
uses: actions/checkout@v4
|
|
17
|
+
|
|
18
|
+
- name: Setup Node.js
|
|
19
|
+
uses: actions/setup-node@v4
|
|
20
|
+
with:
|
|
21
|
+
node-version: '20'
|
|
22
|
+
cache: 'npm'
|
|
23
|
+
|
|
24
|
+
- name: Install dependencies
|
|
25
|
+
run: npm ci
|
|
26
|
+
|
|
27
|
+
- name: Run unit tests
|
|
28
|
+
run: npm test
|
|
29
|
+
|
|
30
|
+
- name: Create service account file
|
|
31
|
+
run: |
|
|
32
|
+
echo '${{ secrets.FIREBASE_SERVICE_ACCOUNT }}' > service-account.json
|
|
33
|
+
|
|
34
|
+
- name: Run e2e tests
|
|
35
|
+
run: npm run test:e2e
|
|
36
|
+
env:
|
|
37
|
+
NODE_ENV: test
|
|
38
|
+
|
|
39
|
+
- name: Clean up service account file
|
|
40
|
+
if: always()
|
|
41
|
+
run: rm -f service-account.json
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
name: Unit Tests
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [ mainline, develop ]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [ mainline, develop ]
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
test:
|
|
11
|
+
runs-on: ubuntu-latest
|
|
12
|
+
|
|
13
|
+
strategy:
|
|
14
|
+
matrix:
|
|
15
|
+
node-version: [18, 20, 22]
|
|
16
|
+
|
|
17
|
+
steps:
|
|
18
|
+
- name: Checkout code
|
|
19
|
+
uses: actions/checkout@v4
|
|
20
|
+
|
|
21
|
+
- name: Setup Node.js ${{ matrix.node-version }}
|
|
22
|
+
uses: actions/setup-node@v4
|
|
23
|
+
with:
|
|
24
|
+
node-version: ${{ matrix.node-version }}
|
|
25
|
+
cache: 'npm'
|
|
26
|
+
|
|
27
|
+
- name: Install dependencies
|
|
28
|
+
run: npm ci
|
|
29
|
+
|
|
30
|
+
- name: Run unit tests
|
|
31
|
+
run: npm test
|
|
32
|
+
|
|
33
|
+
- name: Run build
|
|
34
|
+
run: npm run build
|
|
35
|
+
|
|
36
|
+
- name: Upload coverage to Codecov (Node 20 only)
|
|
37
|
+
if: matrix.node-version == 20
|
|
38
|
+
uses: codecov/codecov-action@v4
|
|
39
|
+
with:
|
|
40
|
+
token: ${{ secrets.CODECOV_TOKEN }}
|
|
41
|
+
files: ./coverage/lcov.info
|
|
42
|
+
flags: unittests
|
|
43
|
+
name: codecov-umbrella
|
|
44
|
+
fail_ci_if_error: false
|
package/README.md
CHANGED
|
@@ -2,8 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
> Firebase Admin SDK for Cloudflare Workers and edge runtimes using REST APIs
|
|
4
4
|
|
|
5
|
-
[](https://www.npmjs.com/package/firebase-admin-sdk-v8)
|
|
5
|
+
[](https://www.npmjs.com/package/@prmichaelsen/firebase-admin-sdk-v8)
|
|
6
6
|
[](https://opensource.org/licenses/MIT)
|
|
7
|
+
[](https://github.com/prmichaelsen/firebase-admin-sdk-v8/actions/workflows/test.yml)
|
|
8
|
+
[](https://github.com/prmichaelsen/firebase-admin-sdk-v8/actions/workflows/e2e-tests.yml)
|
|
9
|
+
[](https://codecov.io/gh/prmichaelsen/firebase-admin-sdk-v8)
|
|
7
10
|
|
|
8
11
|
This library provides Firebase Admin SDK functionality for Cloudflare Workers and other edge runtimes. It uses REST APIs and JWT token generation instead of the Node.js Admin SDK, making it compatible with environments that don't support Node.js.
|
|
9
12
|
|
|
@@ -25,7 +28,7 @@ This library provides Firebase Admin SDK functionality for Cloudflare Workers an
|
|
|
25
28
|
## 📦 Installation
|
|
26
29
|
|
|
27
30
|
```bash
|
|
28
|
-
npm install firebase-admin-sdk-v8
|
|
31
|
+
npm install @prmichaelsen/firebase-admin-sdk-v8
|
|
29
32
|
```
|
|
30
33
|
|
|
31
34
|
## 🚀 Quick Start
|
|
@@ -78,7 +81,7 @@ FIREBASE_PROJECT_ID=your-project-id
|
|
|
78
81
|
### 2. Verify ID Tokens
|
|
79
82
|
|
|
80
83
|
```typescript
|
|
81
|
-
import { verifyIdToken, getUserFromToken } from 'firebase-admin-sdk-v8';
|
|
84
|
+
import { verifyIdToken, getUserFromToken } from '@prmichaelsen/firebase-admin-sdk-v8';
|
|
82
85
|
|
|
83
86
|
const authHeader = request.headers.get('authorization');
|
|
84
87
|
const idToken = authHeader?.split('Bearer ')[1];
|
|
@@ -94,7 +97,7 @@ try {
|
|
|
94
97
|
### 3. Basic Firestore Operations
|
|
95
98
|
|
|
96
99
|
```typescript
|
|
97
|
-
import { setDocument, getDocument, updateDocument, FieldValue } from 'firebase-admin-sdk-v8';
|
|
100
|
+
import { setDocument, getDocument, updateDocument, FieldValue } from '@prmichaelsen/firebase-admin-sdk-v8';
|
|
98
101
|
|
|
99
102
|
// Set a document (create or overwrite)
|
|
100
103
|
await setDocument('users', 'user123', {
|
|
@@ -116,7 +119,7 @@ await updateDocument('users', 'user123', {
|
|
|
116
119
|
### 4. Advanced Queries
|
|
117
120
|
|
|
118
121
|
```typescript
|
|
119
|
-
import { queryDocuments } from 'firebase-admin-sdk-v8';
|
|
122
|
+
import { queryDocuments } from '@prmichaelsen/firebase-admin-sdk-v8';
|
|
120
123
|
|
|
121
124
|
const activeUsers = await queryDocuments('users', {
|
|
122
125
|
where: [
|
|
@@ -397,7 +400,7 @@ export default {
|
|
|
397
400
|
### Leaderboard Example
|
|
398
401
|
|
|
399
402
|
```typescript
|
|
400
|
-
import { queryDocuments, updateDocument, FieldValue } from 'firebase-admin-sdk-v8';
|
|
403
|
+
import { queryDocuments, updateDocument, FieldValue } from '@prmichaelsen/firebase-admin-sdk-v8';
|
|
401
404
|
|
|
402
405
|
async function getTopPlayers(limit = 10) {
|
|
403
406
|
return await queryDocuments('players', {
|
|
@@ -418,7 +421,7 @@ async function updatePlayerScore(playerId: string, points: number) {
|
|
|
418
421
|
### Bulk Operations Example
|
|
419
422
|
|
|
420
423
|
```typescript
|
|
421
|
-
import { batchWrite, FieldValue } from 'firebase-admin-sdk-v8';
|
|
424
|
+
import { batchWrite, FieldValue } from '@prmichaelsen/firebase-admin-sdk-v8';
|
|
422
425
|
|
|
423
426
|
async function bulkUpdateUsers(userIds: string[], updates: any) {
|
|
424
427
|
const operations = userIds.map(userId => ({
|
package/package.json
CHANGED
package/firebase.json
DELETED
package/firestore.indexes.json
DELETED
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"indexes": [
|
|
3
|
-
{
|
|
4
|
-
"collectionGroup": "e2e-tests",
|
|
5
|
-
"queryScope": "COLLECTION",
|
|
6
|
-
"fields": [
|
|
7
|
-
{
|
|
8
|
-
"fieldPath": "_test",
|
|
9
|
-
"order": "ASCENDING"
|
|
10
|
-
},
|
|
11
|
-
{
|
|
12
|
-
"fieldPath": "age",
|
|
13
|
-
"order": "ASCENDING"
|
|
14
|
-
}
|
|
15
|
-
]
|
|
16
|
-
},
|
|
17
|
-
{
|
|
18
|
-
"collectionGroup": "messages",
|
|
19
|
-
"queryScope": "COLLECTION",
|
|
20
|
-
"fields": [
|
|
21
|
-
{
|
|
22
|
-
"fieldPath": "_test",
|
|
23
|
-
"order": "ASCENDING"
|
|
24
|
-
},
|
|
25
|
-
{
|
|
26
|
-
"fieldPath": "timestamp",
|
|
27
|
-
"order": "ASCENDING"
|
|
28
|
-
}
|
|
29
|
-
]
|
|
30
|
-
}
|
|
31
|
-
],
|
|
32
|
-
"fieldOverrides": []
|
|
33
|
-
}
|
package/firestore.rules
DELETED
package/jest.config.js
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
module.exports = {
|
|
2
|
-
preset: 'ts-jest',
|
|
3
|
-
testEnvironment: 'node',
|
|
4
|
-
roots: ['<rootDir>/src'],
|
|
5
|
-
testMatch: ['**/*.spec.ts'],
|
|
6
|
-
moduleFileExtensions: ['ts', 'js'],
|
|
7
|
-
collectCoverageFrom: [
|
|
8
|
-
'src/**/*.ts',
|
|
9
|
-
'!src/**/*.d.ts',
|
|
10
|
-
'!src/**/*.spec.ts',
|
|
11
|
-
],
|
|
12
|
-
};
|
package/jest.e2e.config.js
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
module.exports = {
|
|
2
|
-
preset: 'ts-jest',
|
|
3
|
-
testEnvironment: 'node',
|
|
4
|
-
testMatch: ['**/*.e2e.ts'],
|
|
5
|
-
testTimeout: 30000, // 30 seconds for real API calls
|
|
6
|
-
roots: ['<rootDir>/src'],
|
|
7
|
-
collectCoverageFrom: [
|
|
8
|
-
'src/**/*.ts',
|
|
9
|
-
'!src/**/*.spec.ts',
|
|
10
|
-
'!src/**/*.e2e.ts',
|
|
11
|
-
'!src/types.ts',
|
|
12
|
-
'!src/index.ts',
|
|
13
|
-
],
|
|
14
|
-
};
|
package/service-account.json
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"type": "service_account",
|
|
3
|
-
"project_id": "prmichaelsen-firebase-e2e",
|
|
4
|
-
"private_key_id": "84caabb8515ec5fab4caa53a0f85405c270d5cd4",
|
|
5
|
-
"private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC/0n8V7m7vCQ9/\n5FGYL5V20pQxliUMF/ycNBSV/xHrXAvTMxyMEjFK8Tg9sBLdYhuxC488lnwm3/o+\nn5JkckQ2AyzXX6mi+camwxdLXmT97kXqdFLisO4PY7Fv6HvvMgRQqysj7aJkyiz7\nrAs0DpQq1L70sBFdVLiScPH9FFnuV0EeyOTuVgYwGYk1L76/U7bb3WLNCmcmtG+Y\nt4BNzyMqFgtIdXCQFVBQf9HXy3x5xk8a1rrkf7pEuiwK0PXCDIVH7GYX4xCiQ1qs\nYF4IunNFhcwu1hk5XTIDSVrIn/qLPMZvEcBqHxIJd5JvePjx5hPP81b1mrGUVske\nsaRimjxxAgMBAAECggEAAWNKVG7KslkMRH5y5q56yYbMLVsAPp5SehDYZfNtU5jG\nucr2CxS7SDxcOKS0UOdmUDlyBQaztED3mbS5hZeGuHtSZjvaHtnpdDMXe+NIHhw3\nY520LHwKOjtG69/bPFz4x1qjBRoG4Zgi4NlFpXqbhinO4zdTkNYi6xBSd+R0oshP\nSo59lQvs8e3bMD4f4uTl7JxUifjVM64R3gCkH6AbGqU01wg8UzsllCf0fQM04w8i\nq1oVjhBVWYYVE7w2H+EU+LdiRSRET+Vrk5dtBL3vI6yckvGmxTBMnkK2gTFAAR6F\nnN4NKlUsiFol9WVRY3tdRNOnStjlORDyerSEFQaqhwKBgQDfAa5ddxBVbxUS3E2a\nnGJRA44fYlRyZf9KnJdz8uWsCvuG7UYbe2bp7TxlpEXdTG6Vqu/hhYWd/msmhupZ\nc+YFg1HWE1Ee+nQv7iwAD+okfncnKGIC65XjwaSEMRGrmtxBL6Qq4yxn/Yug/8YR\nniGRQKuMtJ2ZA0p41vI6Mkt7kwKBgQDcM7eQQ5482FcXuOfUlPoiWnd+pF5mNrU1\ngKoxdsXMYRKyTGMPLrOKqsf6kisQUlA48vWRCQOa9QBSjHktfOt2EZ3mNQz5k3AR\n/dIjCGf+ATr2P9Sc0uo7sA20XB62wmG+t2A/vxf9WzBAgdDk6nENB4nz6lL9xcak\ngvVt2vXSawKBgQCV6JRk4f/J3oVFC3DjaRKyMPid4kSwLh6B8mfhGrwHfc59cgz5\ntmeFAuPh057fV1zTIXhlmpMqlPdEi9cHUOCkfhVKGewjLetiuPE9DXWxGI5SdVQF\ncIZu9yH3duDRAaXj7/mklteoBAmTrbxg5XLdKKLpUBTM4ihyuNNWCa8yHwKBgCYK\noTnBFMM6NMGaZiKpohTxQBeW2eAar2+QzNZCyKUoWAyJecuTq9zW6Dl3qwzky4sr\nHhVyUzcgAHBCaGTdYehB3t94ZsdvGztgeD8pIp4VJFSKbnaxUVoCbjusdnnoVu6V\ny4D3yHMyn8FlK+uAPQudM835u2CwHEMrhK731uQFAoGBAKO0crVWuY1EP1RLSyLK\nIS3uUgbauBbQlE4ZPBTi84vXCZjN/53obFgkPHJ5tdjxj6C8x58jgHg/Hufyvbib\ngOQQxadM90UBumlzA8lV7A9jvL2ryfop9ketnVO5hPvB4O8iw9Z1R+25FeM9ZFJI\nqmEjiy9Nhmvpvur+FZ85qcRm\n-----END PRIVATE KEY-----\n",
|
|
6
|
-
"client_email": "firebase-adminsdk-fbsvc@prmichaelsen-firebase-e2e.iam.gserviceaccount.com",
|
|
7
|
-
"client_id": "103889460014910902622",
|
|
8
|
-
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
|
|
9
|
-
"token_uri": "https://oauth2.googleapis.com/token",
|
|
10
|
-
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
|
|
11
|
-
"client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/firebase-adminsdk-fbsvc%40prmichaelsen-firebase-e2e.iam.gserviceaccount.com",
|
|
12
|
-
"universe_domain": "googleapis.com"
|
|
13
|
-
}
|