firebase-admin-edge 1.0.20 → 1.0.22
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/README.md +36 -46
- package/dist/auth/auth-endpoint-errors.test.d.ts +2 -0
- package/dist/auth/auth-endpoint-errors.test.d.ts.map +1 -0
- package/dist/auth/auth-endpoint-errors.test.js +403 -0
- package/dist/auth/auth-endpoint-errors.test.js.map +1 -0
- package/dist/auth/errors.test.d.ts +2 -0
- package/dist/auth/errors.test.d.ts.map +1 -0
- package/dist/auth/errors.test.js +123 -0
- package/dist/auth/errors.test.js.map +1 -0
- package/dist/auth/firebase-admin-auth.test.js +116 -0
- package/dist/auth/firebase-admin-auth.test.js.map +1 -1
- package/dist/auth/firebase-auth-endpoints.d.ts +42 -9
- package/dist/auth/firebase-auth-endpoints.d.ts.map +1 -1
- package/dist/auth/firebase-auth-endpoints.js +93 -0
- package/dist/auth/firebase-auth-endpoints.js.map +1 -1
- package/dist/auth/firebase-auth-endpoints.test.js +330 -5
- package/dist/auth/firebase-auth-endpoints.test.js.map +1 -1
- package/dist/auth/firebase-auth.d.ts +10 -2
- package/dist/auth/firebase-auth.d.ts.map +1 -1
- package/dist/auth/firebase-auth.js +52 -7
- package/dist/auth/firebase-auth.js.map +1 -1
- package/dist/auth/firebase-auth.test.js +57 -4
- package/dist/auth/firebase-auth.test.js.map +1 -1
- package/dist/auth/firebase-types.d.ts +17 -0
- package/dist/auth/firebase-types.d.ts.map +1 -1
- package/dist/auth/google-oauth.test.js.map +1 -1
- package/dist/auth/oauth.d.ts +2 -2
- package/dist/auth/oauth.d.ts.map +1 -1
- package/dist/auth/oauth.js +43 -23
- package/dist/auth/oauth.js.map +1 -1
- package/dist/auth/oauth.test.js +44 -172
- package/dist/auth/oauth.test.js.map +1 -1
- package/dist/firebase-edge-errors.d.ts +4 -0
- package/dist/firebase-edge-errors.d.ts.map +1 -1
- package/dist/firebase-edge-errors.js +4 -0
- package/dist/firebase-edge-errors.js.map +1 -1
- package/dist/firebase-edge-server.d.ts +15 -4
- package/dist/firebase-edge-server.d.ts.map +1 -1
- package/dist/firebase-edge-server.js +41 -19
- package/dist/firebase-edge-server.js.map +1 -1
- package/dist/firebase-edge-server.test.js +31 -18
- package/dist/firebase-edge-server.test.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,55 +1,58 @@
|
|
|
1
1
|
# Firebase Admin Edge
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Lightweight helpers to use Firebase Admin features in edge runtimes and serverless
|
|
4
|
+
environments. Built on top of the Firebase REST APIs; no long-running server
|
|
5
|
+
processes or additional runtime dependencies required.
|
|
6
|
+
|
|
7
|
+
Supported runtimes:
|
|
4
8
|
|
|
5
9
|
- Vercel Edge
|
|
6
|
-
- Cloudflare
|
|
7
|
-
- Deno (
|
|
8
|
-
- Bun
|
|
10
|
+
- Cloudflare Workers
|
|
11
|
+
- Deno (Edge)
|
|
12
|
+
- Bun
|
|
9
13
|
- Node.js
|
|
10
14
|
|
|
11
|
-
Uses Rest API under the hood and has no side effects.
|
|
12
|
-
|
|
13
15
|
## Installation
|
|
14
16
|
|
|
15
17
|
```bash
|
|
16
|
-
npm i
|
|
18
|
+
npm i firebase-admin-edge
|
|
17
19
|
```
|
|
18
20
|
|
|
19
21
|
## Quick Start
|
|
20
22
|
|
|
21
|
-
### Basic
|
|
23
|
+
### Basic setup
|
|
22
24
|
|
|
23
25
|
```typescript
|
|
24
26
|
import { createFirebaseEdgeServer } from 'firebase-admin-edge';
|
|
25
27
|
import { getCookie, setCookie } from 'your-framework-library';
|
|
26
28
|
|
|
29
|
+
// Create the edge server once during initialization. Keep secrets out of
|
|
30
|
+
// source control — load the `serviceAccount` and client secrets from
|
|
31
|
+
// environment variables or a secret manager.
|
|
27
32
|
export const firebaseServer = createFirebaseEdgeServer({
|
|
28
33
|
serviceAccount: {
|
|
29
34
|
type: 'service_account',
|
|
30
35
|
project_id: 'your-project-id',
|
|
31
|
-
private_key_id: 'your-private-key-id'
|
|
36
|
+
private_key_id: 'your-private-key-id'
|
|
32
37
|
...
|
|
33
38
|
},
|
|
34
39
|
firebaseConfig: {
|
|
35
40
|
apiKey: 'your-web-api-key',
|
|
36
|
-
authDomain: 'your-project.firebaseapp.com'
|
|
37
|
-
...
|
|
41
|
+
authDomain: 'your-project.firebaseapp.com'
|
|
38
42
|
},
|
|
39
43
|
providers: {
|
|
40
44
|
google: {
|
|
41
45
|
client_id: 'your-google-oauth-client-id',
|
|
42
|
-
client_secret: 'your-google-oauth-client-secret'
|
|
43
|
-
}
|
|
46
|
+
client_secret: 'your-google-oauth-client-secret'
|
|
47
|
+
}
|
|
44
48
|
},
|
|
45
49
|
cookies: {
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
saveSession: (name, value, options) => {
|
|
50
|
-
return setCookie(name, value, options);
|
|
51
|
-
}
|
|
50
|
+
// Provide your framework's cookie helpers
|
|
51
|
+
getSession: (name) => getCookie(name),
|
|
52
|
+
saveSession: (name, value, options) => setCookie(name, value, options)
|
|
52
53
|
},
|
|
54
|
+
// OAuth callback URL (registered with your provider)
|
|
55
|
+
redirectUri: 'https://example.com/auth/callback'
|
|
53
56
|
});
|
|
54
57
|
```
|
|
55
58
|
|
|
@@ -59,43 +62,32 @@ export const firebaseServer = createFirebaseEdgeServer({
|
|
|
59
62
|
const { data: user } = await firebaseServer.getUser();
|
|
60
63
|
```
|
|
61
64
|
|
|
62
|
-
**Login with
|
|
65
|
+
**Login with code (callback)**
|
|
63
66
|
|
|
64
67
|
```ts
|
|
65
|
-
//
|
|
66
|
-
|
|
67
|
-
const code = url.searchParams.get('code');
|
|
68
|
-
const state = url.searchParams.get('state');
|
|
69
|
-
|
|
70
|
-
const { error } = await firebaseServer.signInWithCode(
|
|
71
|
-
code,
|
|
72
|
-
redirect_uri,
|
|
73
|
-
state
|
|
74
|
-
);
|
|
68
|
+
// Pass the request URL (the server extracts code and state from query params)
|
|
69
|
+
const { error } = await firebaseServer.signInWithCallback(request.url);
|
|
75
70
|
```
|
|
76
71
|
|
|
77
72
|
**Create Login URL**
|
|
78
73
|
|
|
79
74
|
```ts
|
|
80
|
-
//
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
// redirect_uri - is the oAuth redirect url
|
|
84
|
-
|
|
85
|
-
const loginUrl = await firebaseServer.getGoogleLoginURL(redirect_uri, path);
|
|
75
|
+
// Create an OAuth login URL for the `next` state.
|
|
76
|
+
// `next` should be the URL or path to return to after successful login.
|
|
77
|
+
const next = '/dashboard';
|
|
86
78
|
|
|
87
|
-
//
|
|
79
|
+
// Generate provider-specific login URLs (server uses configured redirectUri)
|
|
80
|
+
const loginUrlGoogle = await firebaseServer.getGoogleLoginURL(next);
|
|
81
|
+
const loginUrlGithub = await firebaseServer.getGitHubLoginURL(next);
|
|
88
82
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
// Your framework redirect method
|
|
92
|
-
redirect(302, loginUrl);
|
|
83
|
+
// Redirect the user to the provider's login page
|
|
84
|
+
redirect(302, loginUrlGoogle);
|
|
93
85
|
```
|
|
94
86
|
|
|
95
87
|
**Logout**
|
|
96
88
|
|
|
97
89
|
```ts
|
|
98
|
-
firebaseServer.signOut();
|
|
90
|
+
await firebaseServer.signOut();
|
|
99
91
|
|
|
100
92
|
// Your framework redirect method
|
|
101
93
|
redirect(302, '/');
|
|
@@ -121,7 +113,7 @@ redirect(302, '/');
|
|
|
121
113
|
- ☐ Get User
|
|
122
114
|
- ☐ Update User
|
|
123
115
|
- ☐ Delete User
|
|
124
|
-
- ☐ Add / Remove Claims
|
|
116
|
+
- ☐ Add / Remove Custom Claims
|
|
125
117
|
- ☐ Get all Users / Pagination
|
|
126
118
|
- ☐ All Providers
|
|
127
119
|
- ☐ Ban Users
|
|
@@ -129,9 +121,7 @@ redirect(302, '/');
|
|
|
129
121
|
|
|
130
122
|
### Other TODO Notes
|
|
131
123
|
|
|
132
|
-
- Cookie Name, Cookie Options,
|
|
124
|
+
- Cookie Name, Cookie Options, Debug
|
|
133
125
|
- (enableTokenRefreshOnExpiredKidHeader ? cookieSignatureKeys ?)
|
|
134
|
-
- loginWIthCodeFromURL(url)
|
|
135
|
-
- next path?
|
|
136
126
|
|
|
137
127
|
## Then to DB, then Storage...
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-endpoint-errors.test.d.ts","sourceRoot":"","sources":["../../src/auth/auth-endpoint-errors.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,403 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { mapFirebaseError } from './auth-endpoint-errors.js';
|
|
3
|
+
import { FirebaseEdgeError, FirebaseEndpointErrorInfo } from './errors.js';
|
|
4
|
+
describe('mapFirebaseError', () => {
|
|
5
|
+
describe('Token Errors', () => {
|
|
6
|
+
it('maps INVALID_CUSTOM_TOKEN to structured error', () => {
|
|
7
|
+
const error = mapFirebaseError({
|
|
8
|
+
code: 400,
|
|
9
|
+
message: 'INVALID_CUSTOM_TOKEN: Token format invalid'
|
|
10
|
+
});
|
|
11
|
+
expect(error).toBeInstanceOf(FirebaseEdgeError);
|
|
12
|
+
expect(error.code).toBe(FirebaseEndpointErrorInfo.ENDPOINT_INVALID_CUSTOM_TOKEN.code);
|
|
13
|
+
});
|
|
14
|
+
it('maps INVALID_REFRESH_TOKEN to structured error', () => {
|
|
15
|
+
const error = mapFirebaseError({
|
|
16
|
+
code: 400,
|
|
17
|
+
message: 'INVALID_REFRESH_TOKEN'
|
|
18
|
+
});
|
|
19
|
+
expect(error).toBeInstanceOf(FirebaseEdgeError);
|
|
20
|
+
expect(error.code).toBe(FirebaseEndpointErrorInfo.ENDPOINT_INVALID_REFRESH_TOKEN.code);
|
|
21
|
+
});
|
|
22
|
+
it('maps INVALID_GRANT to refresh token error', () => {
|
|
23
|
+
const error = mapFirebaseError({
|
|
24
|
+
code: 400,
|
|
25
|
+
message: 'INVALID_GRANT: Token has been revoked'
|
|
26
|
+
});
|
|
27
|
+
expect(error).toBeInstanceOf(FirebaseEdgeError);
|
|
28
|
+
expect(error.code).toBe(FirebaseEndpointErrorInfo.ENDPOINT_INVALID_REFRESH_TOKEN.code);
|
|
29
|
+
});
|
|
30
|
+
it('maps TOKEN_EXPIRED to structured error', () => {
|
|
31
|
+
const error = mapFirebaseError({
|
|
32
|
+
code: 401,
|
|
33
|
+
message: 'TOKEN_EXPIRED'
|
|
34
|
+
});
|
|
35
|
+
expect(error).toBeInstanceOf(FirebaseEdgeError);
|
|
36
|
+
expect(error.code).toBe(FirebaseEndpointErrorInfo.ENDPOINT_TOKEN_EXPIRED.code);
|
|
37
|
+
});
|
|
38
|
+
it('maps CREDENTIAL_TOO_OLD_LOGIN_AGAIN to token expired', () => {
|
|
39
|
+
const error = mapFirebaseError({
|
|
40
|
+
code: 401,
|
|
41
|
+
message: 'CREDENTIAL_TOO_OLD_LOGIN_AGAIN'
|
|
42
|
+
});
|
|
43
|
+
expect(error).toBeInstanceOf(FirebaseEdgeError);
|
|
44
|
+
expect(error.code).toBe(FirebaseEndpointErrorInfo.ENDPOINT_TOKEN_EXPIRED.code);
|
|
45
|
+
});
|
|
46
|
+
it('maps INVALID_ID_TOKEN to structured error', () => {
|
|
47
|
+
const error = mapFirebaseError({
|
|
48
|
+
code: 400,
|
|
49
|
+
message: 'INVALID_ID_TOKEN'
|
|
50
|
+
});
|
|
51
|
+
expect(error).toBeInstanceOf(FirebaseEdgeError);
|
|
52
|
+
expect(error.code).toBe(FirebaseEndpointErrorInfo.ENDPOINT_INVALID_ID_TOKEN.code);
|
|
53
|
+
});
|
|
54
|
+
it('maps INVALID_CREDENTIAL to structured error', () => {
|
|
55
|
+
const error = mapFirebaseError({
|
|
56
|
+
code: 400,
|
|
57
|
+
message: 'INVALID_CREDENTIAL'
|
|
58
|
+
});
|
|
59
|
+
expect(error).toBeInstanceOf(FirebaseEdgeError);
|
|
60
|
+
expect(error.code).toBe(FirebaseEndpointErrorInfo.ENDPOINT_INVALID_CREDENTIAL.code);
|
|
61
|
+
});
|
|
62
|
+
});
|
|
63
|
+
describe('User Management Errors', () => {
|
|
64
|
+
it('maps USER_NOT_FOUND to structured error', () => {
|
|
65
|
+
const error = mapFirebaseError({
|
|
66
|
+
code: 404,
|
|
67
|
+
message: 'USER_NOT_FOUND'
|
|
68
|
+
});
|
|
69
|
+
expect(error).toBeInstanceOf(FirebaseEdgeError);
|
|
70
|
+
expect(error.code).toBe(FirebaseEndpointErrorInfo.ENDPOINT_USER_NOT_FOUND.code);
|
|
71
|
+
});
|
|
72
|
+
it('maps EMAIL_NOT_FOUND to user not found error', () => {
|
|
73
|
+
const error = mapFirebaseError({
|
|
74
|
+
code: 400,
|
|
75
|
+
message: 'EMAIL_NOT_FOUND'
|
|
76
|
+
});
|
|
77
|
+
expect(error).toBeInstanceOf(FirebaseEdgeError);
|
|
78
|
+
expect(error.code).toBe(FirebaseEndpointErrorInfo.ENDPOINT_USER_NOT_FOUND.code);
|
|
79
|
+
});
|
|
80
|
+
it('maps USER_DISABLED to structured error', () => {
|
|
81
|
+
const error = mapFirebaseError({
|
|
82
|
+
code: 403,
|
|
83
|
+
message: 'USER_DISABLED'
|
|
84
|
+
});
|
|
85
|
+
expect(error).toBeInstanceOf(FirebaseEdgeError);
|
|
86
|
+
expect(error.code).toBe(FirebaseEndpointErrorInfo.ENDPOINT_USER_DISABLED.code);
|
|
87
|
+
});
|
|
88
|
+
});
|
|
89
|
+
describe('Permission & Access Errors', () => {
|
|
90
|
+
it('maps PERMISSION_DENIED to structured error', () => {
|
|
91
|
+
const error = mapFirebaseError({
|
|
92
|
+
code: 403,
|
|
93
|
+
message: 'PERMISSION_DENIED'
|
|
94
|
+
});
|
|
95
|
+
expect(error).toBeInstanceOf(FirebaseEdgeError);
|
|
96
|
+
expect(error.code).toBe(FirebaseEndpointErrorInfo.ENDPOINT_PERMISSION_DENIED.code);
|
|
97
|
+
});
|
|
98
|
+
it('maps INSUFFICIENT_PERMISSION to structured error', () => {
|
|
99
|
+
const error = mapFirebaseError({
|
|
100
|
+
code: 403,
|
|
101
|
+
message: 'INSUFFICIENT_PERMISSION'
|
|
102
|
+
});
|
|
103
|
+
expect(error).toBeInstanceOf(FirebaseEdgeError);
|
|
104
|
+
expect(error.code).toBe(FirebaseEndpointErrorInfo.ENDPOINT_INSUFFICIENT_PERMISSION.code);
|
|
105
|
+
});
|
|
106
|
+
});
|
|
107
|
+
describe('Rate Limiting & Quota Errors', () => {
|
|
108
|
+
it('maps TOO_MANY_ATTEMPTS_TRY_LATER to structured error', () => {
|
|
109
|
+
const error = mapFirebaseError({
|
|
110
|
+
code: 429,
|
|
111
|
+
message: 'TOO_MANY_ATTEMPTS_TRY_LATER'
|
|
112
|
+
});
|
|
113
|
+
expect(error).toBeInstanceOf(FirebaseEdgeError);
|
|
114
|
+
expect(error.code).toBe(FirebaseEndpointErrorInfo.ENDPOINT_TOO_MANY_REQUESTS.code);
|
|
115
|
+
});
|
|
116
|
+
it('maps QUOTA_EXCEEDED to structured error', () => {
|
|
117
|
+
const error = mapFirebaseError({
|
|
118
|
+
code: 429,
|
|
119
|
+
message: 'QUOTA_EXCEEDED'
|
|
120
|
+
});
|
|
121
|
+
expect(error).toBeInstanceOf(FirebaseEdgeError);
|
|
122
|
+
expect(error.code).toBe(FirebaseEndpointErrorInfo.ENDPOINT_QUOTA_EXCEEDED.code);
|
|
123
|
+
});
|
|
124
|
+
});
|
|
125
|
+
describe('Provider & Configuration Errors', () => {
|
|
126
|
+
it('maps OPERATION_NOT_ALLOWED to provider not enabled', () => {
|
|
127
|
+
const error = mapFirebaseError({
|
|
128
|
+
code: 400,
|
|
129
|
+
message: 'OPERATION_NOT_ALLOWED'
|
|
130
|
+
});
|
|
131
|
+
expect(error).toBeInstanceOf(FirebaseEdgeError);
|
|
132
|
+
expect(error.code).toBe(FirebaseEndpointErrorInfo.ENDPOINT_PROVIDER_NOT_ENABLED.code);
|
|
133
|
+
});
|
|
134
|
+
it('maps INVALID_IDP_RESPONSE to invalid provider id', () => {
|
|
135
|
+
const error = mapFirebaseError({
|
|
136
|
+
code: 400,
|
|
137
|
+
message: 'INVALID_IDP_RESPONSE'
|
|
138
|
+
});
|
|
139
|
+
expect(error).toBeInstanceOf(FirebaseEdgeError);
|
|
140
|
+
expect(error.code).toBe(FirebaseEndpointErrorInfo.ENDPOINT_INVALID_PROVIDER_ID.code);
|
|
141
|
+
});
|
|
142
|
+
});
|
|
143
|
+
describe('API Key Errors', () => {
|
|
144
|
+
it('maps API KEY NOT VALID to structured error', () => {
|
|
145
|
+
const error = mapFirebaseError({
|
|
146
|
+
code: 400,
|
|
147
|
+
message: 'API KEY NOT VALID'
|
|
148
|
+
});
|
|
149
|
+
expect(error).toBeInstanceOf(FirebaseEdgeError);
|
|
150
|
+
expect(error.code).toBe(FirebaseEndpointErrorInfo.ENDPOINT_INVALID_API_KEY.code);
|
|
151
|
+
});
|
|
152
|
+
it('maps INVALID_API_KEY to structured error', () => {
|
|
153
|
+
const error = mapFirebaseError({
|
|
154
|
+
code: 403,
|
|
155
|
+
message: 'INVALID_API_KEY'
|
|
156
|
+
});
|
|
157
|
+
expect(error).toBeInstanceOf(FirebaseEdgeError);
|
|
158
|
+
expect(error.code).toBe(FirebaseEndpointErrorInfo.ENDPOINT_INVALID_API_KEY.code);
|
|
159
|
+
});
|
|
160
|
+
});
|
|
161
|
+
describe('Validation Errors', () => {
|
|
162
|
+
it('maps INVALID_EMAIL to invalid argument', () => {
|
|
163
|
+
const error = mapFirebaseError({
|
|
164
|
+
code: 400,
|
|
165
|
+
message: 'INVALID_EMAIL'
|
|
166
|
+
});
|
|
167
|
+
expect(error).toBeInstanceOf(FirebaseEdgeError);
|
|
168
|
+
expect(error.code).toBe(FirebaseEndpointErrorInfo.ENDPOINT_INVALID_ARGUMENT.code);
|
|
169
|
+
});
|
|
170
|
+
it('maps WEAK_PASSWORD to invalid argument', () => {
|
|
171
|
+
const error = mapFirebaseError({
|
|
172
|
+
code: 400,
|
|
173
|
+
message: 'WEAK_PASSWORD'
|
|
174
|
+
});
|
|
175
|
+
expect(error).toBeInstanceOf(FirebaseEdgeError);
|
|
176
|
+
expect(error.code).toBe(FirebaseEndpointErrorInfo.ENDPOINT_INVALID_ARGUMENT.code);
|
|
177
|
+
});
|
|
178
|
+
it('maps EMAIL_EXISTS to invalid argument', () => {
|
|
179
|
+
const error = mapFirebaseError({
|
|
180
|
+
code: 400,
|
|
181
|
+
message: 'EMAIL_EXISTS'
|
|
182
|
+
});
|
|
183
|
+
expect(error).toBeInstanceOf(FirebaseEdgeError);
|
|
184
|
+
expect(error.code).toBe(FirebaseEndpointErrorInfo.ENDPOINT_INVALID_ARGUMENT.code);
|
|
185
|
+
});
|
|
186
|
+
it('maps INVALID_PASSWORD to invalid argument', () => {
|
|
187
|
+
const error = mapFirebaseError({
|
|
188
|
+
code: 400,
|
|
189
|
+
message: 'INVALID_PASSWORD'
|
|
190
|
+
});
|
|
191
|
+
expect(error).toBeInstanceOf(FirebaseEdgeError);
|
|
192
|
+
expect(error.code).toBe(FirebaseEndpointErrorInfo.ENDPOINT_INVALID_ARGUMENT.code);
|
|
193
|
+
});
|
|
194
|
+
it('maps MISSING_REFRESH_TOKEN to invalid argument', () => {
|
|
195
|
+
const error = mapFirebaseError({
|
|
196
|
+
code: 400,
|
|
197
|
+
message: 'MISSING_REFRESH_TOKEN'
|
|
198
|
+
});
|
|
199
|
+
expect(error).toBeInstanceOf(FirebaseEdgeError);
|
|
200
|
+
expect(error.code).toBe(FirebaseEndpointErrorInfo.ENDPOINT_INVALID_ARGUMENT.code);
|
|
201
|
+
});
|
|
202
|
+
it('maps INVALID_GRANT_TYPE to invalid refresh token', () => {
|
|
203
|
+
const error = mapFirebaseError({
|
|
204
|
+
code: 400,
|
|
205
|
+
message: 'INVALID_GRANT_TYPE'
|
|
206
|
+
});
|
|
207
|
+
expect(error).toBeInstanceOf(FirebaseEdgeError);
|
|
208
|
+
expect(error.code).toBe(FirebaseEndpointErrorInfo.ENDPOINT_INVALID_REFRESH_TOKEN.code);
|
|
209
|
+
});
|
|
210
|
+
});
|
|
211
|
+
describe('Reason Code Mapping', () => {
|
|
212
|
+
it('maps INVALID reason to invalid argument', () => {
|
|
213
|
+
const error = mapFirebaseError({
|
|
214
|
+
code: 400,
|
|
215
|
+
message: 'Some error',
|
|
216
|
+
errors: [
|
|
217
|
+
{
|
|
218
|
+
reason: 'INVALID',
|
|
219
|
+
message: 'Invalid request',
|
|
220
|
+
domain: 'global'
|
|
221
|
+
}
|
|
222
|
+
]
|
|
223
|
+
});
|
|
224
|
+
expect(error).toBeInstanceOf(FirebaseEdgeError);
|
|
225
|
+
expect(error.code).toBe(FirebaseEndpointErrorInfo.ENDPOINT_INVALID_ARGUMENT.code);
|
|
226
|
+
});
|
|
227
|
+
it('maps FORBIDDEN reason to forbidden', () => {
|
|
228
|
+
const error = mapFirebaseError({
|
|
229
|
+
code: 403,
|
|
230
|
+
message: 'Access denied',
|
|
231
|
+
errors: [
|
|
232
|
+
{
|
|
233
|
+
reason: 'FORBIDDEN',
|
|
234
|
+
message: 'No access',
|
|
235
|
+
domain: 'global'
|
|
236
|
+
}
|
|
237
|
+
]
|
|
238
|
+
});
|
|
239
|
+
expect(error).toBeInstanceOf(FirebaseEdgeError);
|
|
240
|
+
expect(error.code).toBe(FirebaseEndpointErrorInfo.ENDPOINT_FORBIDDEN.code);
|
|
241
|
+
});
|
|
242
|
+
it('maps NOTFOUND reason to user not found', () => {
|
|
243
|
+
const error = mapFirebaseError({
|
|
244
|
+
code: 404,
|
|
245
|
+
message: 'Resource not found',
|
|
246
|
+
errors: [
|
|
247
|
+
{
|
|
248
|
+
reason: 'NOTFOUND',
|
|
249
|
+
message: 'Not found',
|
|
250
|
+
domain: 'global'
|
|
251
|
+
}
|
|
252
|
+
]
|
|
253
|
+
});
|
|
254
|
+
expect(error).toBeInstanceOf(FirebaseEdgeError);
|
|
255
|
+
expect(error.code).toBe(FirebaseEndpointErrorInfo.ENDPOINT_USER_NOT_FOUND.code);
|
|
256
|
+
});
|
|
257
|
+
it('maps NOT_FOUND reason to user not found', () => {
|
|
258
|
+
const error = mapFirebaseError({
|
|
259
|
+
code: 404,
|
|
260
|
+
message: 'Resource not found',
|
|
261
|
+
errors: [
|
|
262
|
+
{
|
|
263
|
+
reason: 'NOT_FOUND',
|
|
264
|
+
message: 'Not found',
|
|
265
|
+
domain: 'global'
|
|
266
|
+
}
|
|
267
|
+
]
|
|
268
|
+
});
|
|
269
|
+
expect(error).toBeInstanceOf(FirebaseEdgeError);
|
|
270
|
+
expect(error.code).toBe(FirebaseEndpointErrorInfo.ENDPOINT_USER_NOT_FOUND.code);
|
|
271
|
+
});
|
|
272
|
+
});
|
|
273
|
+
describe('HTTP Status Code Fallbacks', () => {
|
|
274
|
+
it('maps 400 to invalid argument', () => {
|
|
275
|
+
const error = mapFirebaseError({
|
|
276
|
+
code: 400,
|
|
277
|
+
message: 'Unknown error'
|
|
278
|
+
});
|
|
279
|
+
expect(error).toBeInstanceOf(FirebaseEdgeError);
|
|
280
|
+
expect(error.code).toBe(FirebaseEndpointErrorInfo.ENDPOINT_INVALID_ARGUMENT.code);
|
|
281
|
+
});
|
|
282
|
+
it('maps 401 to unauthorized', () => {
|
|
283
|
+
const error = mapFirebaseError({
|
|
284
|
+
code: 401,
|
|
285
|
+
message: 'Unauthorized'
|
|
286
|
+
});
|
|
287
|
+
expect(error).toBeInstanceOf(FirebaseEdgeError);
|
|
288
|
+
expect(error.code).toBe(FirebaseEndpointErrorInfo.ENDPOINT_UNAUTHORIZED.code);
|
|
289
|
+
});
|
|
290
|
+
it('maps 403 to forbidden', () => {
|
|
291
|
+
const error = mapFirebaseError({
|
|
292
|
+
code: 403,
|
|
293
|
+
message: 'Forbidden'
|
|
294
|
+
});
|
|
295
|
+
expect(error).toBeInstanceOf(FirebaseEdgeError);
|
|
296
|
+
expect(error.code).toBe(FirebaseEndpointErrorInfo.ENDPOINT_FORBIDDEN.code);
|
|
297
|
+
});
|
|
298
|
+
it('maps 404 to user not found', () => {
|
|
299
|
+
const error = mapFirebaseError({
|
|
300
|
+
code: 404,
|
|
301
|
+
message: 'Not found'
|
|
302
|
+
});
|
|
303
|
+
expect(error).toBeInstanceOf(FirebaseEdgeError);
|
|
304
|
+
expect(error.code).toBe(FirebaseEndpointErrorInfo.ENDPOINT_USER_NOT_FOUND.code);
|
|
305
|
+
});
|
|
306
|
+
it('maps 429 to too many requests', () => {
|
|
307
|
+
const error = mapFirebaseError({
|
|
308
|
+
code: 429,
|
|
309
|
+
message: 'Rate limit exceeded'
|
|
310
|
+
});
|
|
311
|
+
expect(error).toBeInstanceOf(FirebaseEdgeError);
|
|
312
|
+
expect(error.code).toBe(FirebaseEndpointErrorInfo.ENDPOINT_TOO_MANY_REQUESTS.code);
|
|
313
|
+
});
|
|
314
|
+
it('maps 500 to internal error', () => {
|
|
315
|
+
const error = mapFirebaseError({
|
|
316
|
+
code: 500,
|
|
317
|
+
message: 'Internal server error'
|
|
318
|
+
});
|
|
319
|
+
expect(error).toBeInstanceOf(FirebaseEdgeError);
|
|
320
|
+
expect(error.code).toBe(FirebaseEndpointErrorInfo.ENDPOINT_INTERNAL_ERROR.code);
|
|
321
|
+
});
|
|
322
|
+
it('maps 502 to bad gateway', () => {
|
|
323
|
+
const error = mapFirebaseError({
|
|
324
|
+
code: 502,
|
|
325
|
+
message: 'Bad gateway'
|
|
326
|
+
});
|
|
327
|
+
expect(error).toBeInstanceOf(FirebaseEdgeError);
|
|
328
|
+
expect(error.code).toBe(FirebaseEndpointErrorInfo.ENDPOINT_BAD_GATEWAY.code);
|
|
329
|
+
});
|
|
330
|
+
it('maps 503 to service unavailable', () => {
|
|
331
|
+
const error = mapFirebaseError({
|
|
332
|
+
code: 503,
|
|
333
|
+
message: 'Service unavailable'
|
|
334
|
+
});
|
|
335
|
+
expect(error).toBeInstanceOf(FirebaseEdgeError);
|
|
336
|
+
expect(error.code).toBe(FirebaseEndpointErrorInfo.ENDPOINT_SERVICE_UNAVAILABLE.code);
|
|
337
|
+
});
|
|
338
|
+
it('maps 504 to timeout', () => {
|
|
339
|
+
const error = mapFirebaseError({
|
|
340
|
+
code: 504,
|
|
341
|
+
message: 'Gateway timeout'
|
|
342
|
+
});
|
|
343
|
+
expect(error).toBeInstanceOf(FirebaseEdgeError);
|
|
344
|
+
expect(error.code).toBe(FirebaseEndpointErrorInfo.ENDPOINT_TIMEOUT.code);
|
|
345
|
+
});
|
|
346
|
+
});
|
|
347
|
+
describe('Unknown Errors', () => {
|
|
348
|
+
it('maps unknown status code to unknown error with context', () => {
|
|
349
|
+
const error = mapFirebaseError({
|
|
350
|
+
code: 418,
|
|
351
|
+
message: "I'm a teapot",
|
|
352
|
+
errors: [
|
|
353
|
+
{
|
|
354
|
+
reason: 'TEAPOT',
|
|
355
|
+
message: 'Cannot brew coffee',
|
|
356
|
+
domain: 'global'
|
|
357
|
+
}
|
|
358
|
+
]
|
|
359
|
+
});
|
|
360
|
+
expect(error).toBeInstanceOf(FirebaseEdgeError);
|
|
361
|
+
expect(error.code).toBe(FirebaseEndpointErrorInfo.ENDPOINT_UNKNOWN_ERROR.code);
|
|
362
|
+
expect(error.cause).toBeInstanceOf(Error);
|
|
363
|
+
expect(error.context).toEqual({
|
|
364
|
+
firebaseCode: 418,
|
|
365
|
+
firebaseMessage: "I'm a teapot",
|
|
366
|
+
firebaseErrors: [
|
|
367
|
+
{
|
|
368
|
+
reason: 'TEAPOT',
|
|
369
|
+
message: 'Cannot brew coffee',
|
|
370
|
+
domain: 'global'
|
|
371
|
+
}
|
|
372
|
+
]
|
|
373
|
+
});
|
|
374
|
+
});
|
|
375
|
+
it('handles missing message field', () => {
|
|
376
|
+
const error = mapFirebaseError({
|
|
377
|
+
code: 999,
|
|
378
|
+
message: undefined
|
|
379
|
+
});
|
|
380
|
+
expect(error).toBeInstanceOf(FirebaseEdgeError);
|
|
381
|
+
expect(error.code).toBe(FirebaseEndpointErrorInfo.ENDPOINT_UNKNOWN_ERROR.code);
|
|
382
|
+
});
|
|
383
|
+
});
|
|
384
|
+
describe('Case Insensitivity', () => {
|
|
385
|
+
it('handles lowercase error codes', () => {
|
|
386
|
+
const error = mapFirebaseError({
|
|
387
|
+
code: 400,
|
|
388
|
+
message: 'invalid_custom_token'
|
|
389
|
+
});
|
|
390
|
+
expect(error).toBeInstanceOf(FirebaseEdgeError);
|
|
391
|
+
expect(error.code).toBe(FirebaseEndpointErrorInfo.ENDPOINT_INVALID_CUSTOM_TOKEN.code);
|
|
392
|
+
});
|
|
393
|
+
it('handles mixed case error codes', () => {
|
|
394
|
+
const error = mapFirebaseError({
|
|
395
|
+
code: 400,
|
|
396
|
+
message: 'User_Not_Found'
|
|
397
|
+
});
|
|
398
|
+
expect(error).toBeInstanceOf(FirebaseEdgeError);
|
|
399
|
+
expect(error.code).toBe(FirebaseEndpointErrorInfo.ENDPOINT_USER_NOT_FOUND.code);
|
|
400
|
+
});
|
|
401
|
+
});
|
|
402
|
+
});
|
|
403
|
+
//# sourceMappingURL=auth-endpoint-errors.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-endpoint-errors.test.js","sourceRoot":"","sources":["../../src/auth/auth-endpoint-errors.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.test.d.ts","sourceRoot":"","sources":["../../src/auth/errors.test.ts"],"names":[],"mappings":""}
|