firebase-admin-edge 1.0.21 → 1.0.23

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.
Files changed (63) hide show
  1. package/README.md +58 -20
  2. package/dist/auth/auth-endpoint-errors.test.d.ts +2 -0
  3. package/dist/auth/auth-endpoint-errors.test.d.ts.map +1 -0
  4. package/dist/auth/auth-endpoint-errors.test.js +403 -0
  5. package/dist/auth/auth-endpoint-errors.test.js.map +1 -0
  6. package/dist/auth/cache-types.d.ts +7 -0
  7. package/dist/auth/cache-types.d.ts.map +1 -0
  8. package/dist/auth/cache-types.js +2 -0
  9. package/dist/auth/cache-types.js.map +1 -0
  10. package/dist/auth/cookie-types.d.ts +4 -0
  11. package/dist/auth/cookie-types.d.ts.map +1 -1
  12. package/dist/auth/errors.test.d.ts +2 -0
  13. package/dist/auth/errors.test.d.ts.map +1 -0
  14. package/dist/auth/errors.test.js +123 -0
  15. package/dist/auth/errors.test.js.map +1 -0
  16. package/dist/auth/firebase-admin-auth.d.ts +75 -10
  17. package/dist/auth/firebase-admin-auth.d.ts.map +1 -1
  18. package/dist/auth/firebase-admin-auth.js +111 -28
  19. package/dist/auth/firebase-admin-auth.js.map +1 -1
  20. package/dist/auth/firebase-admin-auth.test.js +144 -35
  21. package/dist/auth/firebase-admin-auth.test.js.map +1 -1
  22. package/dist/auth/firebase-auth-endpoints.d.ts +50 -11
  23. package/dist/auth/firebase-auth-endpoints.d.ts.map +1 -1
  24. package/dist/auth/firebase-auth-endpoints.js +101 -4
  25. package/dist/auth/firebase-auth-endpoints.js.map +1 -1
  26. package/dist/auth/firebase-auth-endpoints.test.js +331 -8
  27. package/dist/auth/firebase-auth-endpoints.test.js.map +1 -1
  28. package/dist/auth/firebase-auth.d.ts +43 -2
  29. package/dist/auth/firebase-auth.d.ts.map +1 -1
  30. package/dist/auth/firebase-auth.js +85 -7
  31. package/dist/auth/firebase-auth.js.map +1 -1
  32. package/dist/auth/firebase-auth.test.js +57 -4
  33. package/dist/auth/firebase-auth.test.js.map +1 -1
  34. package/dist/auth/firebase-jwt.d.ts.map +1 -1
  35. package/dist/auth/firebase-jwt.js +1 -0
  36. package/dist/auth/firebase-jwt.js.map +1 -1
  37. package/dist/auth/firebase-types.d.ts +17 -0
  38. package/dist/auth/firebase-types.d.ts.map +1 -1
  39. package/dist/auth/google-oauth.d.ts +5 -10
  40. package/dist/auth/google-oauth.d.ts.map +1 -1
  41. package/dist/auth/google-oauth.js +12 -1
  42. package/dist/auth/google-oauth.js.map +1 -1
  43. package/dist/auth/oauth.d.ts +2 -2
  44. package/dist/auth/oauth.d.ts.map +1 -1
  45. package/dist/auth/oauth.js +43 -23
  46. package/dist/auth/oauth.js.map +1 -1
  47. package/dist/auth/oauth.test.js +44 -172
  48. package/dist/auth/oauth.test.js.map +1 -1
  49. package/dist/firebase-edge-server.d.ts +28 -14
  50. package/dist/firebase-edge-server.d.ts.map +1 -1
  51. package/dist/firebase-edge-server.js +61 -35
  52. package/dist/firebase-edge-server.js.map +1 -1
  53. package/dist/firebase-edge-server.test.js +7 -7
  54. package/dist/firebase-edge-server.test.js.map +1 -1
  55. package/dist/index.d.ts +1 -0
  56. package/dist/index.d.ts.map +1 -1
  57. package/dist/index.js +1 -0
  58. package/dist/index.js.map +1 -1
  59. package/dist/utils/token-cache.d.ts +9 -0
  60. package/dist/utils/token-cache.d.ts.map +1 -0
  61. package/dist/utils/token-cache.js +27 -0
  62. package/dist/utils/token-cache.js.map +1 -0
  63. package/package.json +1 -1
package/README.md CHANGED
@@ -23,9 +23,12 @@ npm i firebase-admin-edge
23
23
  ### Basic setup
24
24
 
25
25
  ```typescript
26
- import { createFirebaseEdgeServer } from 'firebase-admin-edge';
26
+ import { createFirebaseEdgeServer, TokenCache } from 'firebase-admin-edge';
27
27
  import { getCookie, setCookie } from 'your-framework-library';
28
28
 
29
+ // Optional: Create a cache for service account tokens (recommended for performance)
30
+ const cache = new TokenCache();
31
+
29
32
  // Create the edge server once during initialization. Keep secrets out of
30
33
  // source control — load the `serviceAccount` and client secrets from
31
34
  // environment variables or a secret manager.
@@ -44,6 +47,10 @@ export const firebaseServer = createFirebaseEdgeServer({
44
47
  google: {
45
48
  client_id: 'your-google-oauth-client-id',
46
49
  client_secret: 'your-google-oauth-client-secret'
50
+ },
51
+ github: {
52
+ client_id: 'your-github-oauth-client-id',
53
+ client_secret: 'your-github-oauth-client-secret'
47
54
  }
48
55
  },
49
56
  cookies: {
@@ -51,8 +58,27 @@ export const firebaseServer = createFirebaseEdgeServer({
51
58
  getSession: (name) => getCookie(name),
52
59
  saveSession: (name, value, options) => setCookie(name, value, options)
53
60
  },
61
+ // Optional: Token caching for improved performance (tokens cached for 1 hour)
62
+ cache: {
63
+ getCache: (name) => cache.get(name),
64
+ setCache: (name, value, ttl) => cache.set(name, value, ttl)
65
+ },
66
+ // Optional: Custom session cookie name (defaults to '__session')
67
+ cookieName: '__session',
68
+ // Optional: Custom cookie options
69
+ cookieOptions: {
70
+ httpOnly: true,
71
+ secure: true,
72
+ sameSite: 'lax',
73
+ path: '/',
74
+ maxAge: 60 * 60 * 24 * 5 // 5 days
75
+ },
54
76
  // OAuth callback URL (registered with your provider)
55
- redirectUri: 'https://example.com/auth/callback'
77
+ redirectUri: 'https://example.com/auth/callback',
78
+ // Optional: Tenant ID for multi-tenancy
79
+ tenantId: 'your-tenant-id',
80
+ // Optional: Automatically link accounts with same email
81
+ autoLinkProviders: false
56
82
  });
57
83
  ```
58
84
 
@@ -99,29 +125,41 @@ redirect(302, '/');
99
125
  - ✅ **Zero Dependencies** - Uses only fetch API and jose
100
126
  - ✅ **TypeScript Support** - Full type safety and IntelliSense
101
127
  - ✅ **Session Management** - Secure HTTP-only cookies
102
- - ✅ **Google OAuth** - Complete OAuth 2.0 flow
128
+ - ✅ **OAuth Support** - Google and GitHub OAuth 2.0 flows
103
129
  - ✅ **Token Management** - Generate client tokens from server sessions
104
-
105
- ## Currently Working On - (in no particular order)
106
-
107
- - ☐ LinkProvider (auto link?)
108
- - ☐ Unlink Provider
109
- - ☐ App Check
110
- - ☐ Magic Link (auto save email?)
111
- - ☐ Email / Password
112
- - ☐ Custom oAuth Scopes
113
- - ☐ Get User
130
+ - ✅ **Token Caching** - Optional caching for service account tokens (1-hour TTL)
131
+ - ✅ **Multi-Tenancy** - Support for Firebase Auth tenant IDs
132
+ - ✅ **Flexible Configuration** - Customizable cookie options and cache implementations
133
+
134
+ ## Firebase Auth Todo
135
+
136
+ - ☐ Magic Link Login (auto save email option)
137
+ - ☐ Link and Unlink Providers
138
+ - ☐ Email / Password / Annonymous Login
139
+ - ☐ Reset Password
140
+ - ☐ Change Email
141
+ - ☐ Get User By ID
142
+ - ☐ Get All Users with Order By and Pagination
143
+ - ☐ Create User
144
+ - ☐ Delete
114
145
  - ☐ Update User
115
- - ☐ Delete User
116
146
  - ☐ Add / Remove Custom Claims
117
- - ☐ Get all Users / Pagination
118
- - ☐ All Providers
147
+ - ☐ Disable User (Ban User)
148
+ - ☐ Add All Providers
149
+ - ☐ Add App Check
119
150
  - ☐ Ban Users
120
151
  - ☐ RBAC
121
152
 
122
- ### Other TODO Notes
153
+ ## Firestore Todo
154
+
155
+ - ☐ Get Document By ID
156
+ - ☐ Create Document
157
+ - ☐ Update Document (merge option)
158
+ - ☐ Delete Document
159
+ - ☐ Query Documents
123
160
 
124
- - Cookie Name, Cookie Options, Debug
125
- - (enableTokenRefreshOnExpiredKidHeader ? cookieSignatureKeys ?)
161
+ ## Firebase Storage
126
162
 
127
- ## Then to DB, then Storage...
163
+ - ☐ Create File
164
+ - ☐ Delete File
165
+ - ☐ Get File
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=auth-endpoint-errors.test.d.ts.map
@@ -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":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAE3E,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAC9B,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;QAC1B,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;YACrD,MAAM,KAAK,GAAG,gBAAgB,CAAC;gBAC3B,IAAI,EAAE,GAAG;gBACT,OAAO,EAAE,4CAA4C;aACxD,CAAC,CAAC;YAEH,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;YAChD,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CACnB,yBAAyB,CAAC,6BAA6B,CAAC,IAAI,CAC/D,CAAC;QACN,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;YACtD,MAAM,KAAK,GAAG,gBAAgB,CAAC;gBAC3B,IAAI,EAAE,GAAG;gBACT,OAAO,EAAE,uBAAuB;aACnC,CAAC,CAAC;YAEH,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;YAChD,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CACnB,yBAAyB,CAAC,8BAA8B,CAAC,IAAI,CAChE,CAAC;QACN,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;YACjD,MAAM,KAAK,GAAG,gBAAgB,CAAC;gBAC3B,IAAI,EAAE,GAAG;gBACT,OAAO,EAAE,uCAAuC;aACnD,CAAC,CAAC;YAEH,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;YAChD,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CACnB,yBAAyB,CAAC,8BAA8B,CAAC,IAAI,CAChE,CAAC;QACN,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;YAC9C,MAAM,KAAK,GAAG,gBAAgB,CAAC;gBAC3B,IAAI,EAAE,GAAG;gBACT,OAAO,EAAE,eAAe;aAC3B,CAAC,CAAC;YAEH,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;YAChD,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CACnB,yBAAyB,CAAC,sBAAsB,CAAC,IAAI,CACxD,CAAC;QACN,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;YAC5D,MAAM,KAAK,GAAG,gBAAgB,CAAC;gBAC3B,IAAI,EAAE,GAAG;gBACT,OAAO,EAAE,gCAAgC;aAC5C,CAAC,CAAC;YAEH,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;YAChD,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CACnB,yBAAyB,CAAC,sBAAsB,CAAC,IAAI,CACxD,CAAC;QACN,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;YACjD,MAAM,KAAK,GAAG,gBAAgB,CAAC;gBAC3B,IAAI,EAAE,GAAG;gBACT,OAAO,EAAE,kBAAkB;aAC9B,CAAC,CAAC;YAEH,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;YAChD,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CACnB,yBAAyB,CAAC,yBAAyB,CAAC,IAAI,CAC3D,CAAC;QACN,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;YACnD,MAAM,KAAK,GAAG,gBAAgB,CAAC;gBAC3B,IAAI,EAAE,GAAG;gBACT,OAAO,EAAE,oBAAoB;aAChC,CAAC,CAAC;YAEH,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;YAChD,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CACnB,yBAAyB,CAAC,2BAA2B,CAAC,IAAI,CAC7D,CAAC;QACN,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;QACpC,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;YAC/C,MAAM,KAAK,GAAG,gBAAgB,CAAC;gBAC3B,IAAI,EAAE,GAAG;gBACT,OAAO,EAAE,gBAAgB;aAC5B,CAAC,CAAC;YAEH,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;YAChD,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CACnB,yBAAyB,CAAC,uBAAuB,CAAC,IAAI,CACzD,CAAC;QACN,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;YACpD,MAAM,KAAK,GAAG,gBAAgB,CAAC;gBAC3B,IAAI,EAAE,GAAG;gBACT,OAAO,EAAE,iBAAiB;aAC7B,CAAC,CAAC;YAEH,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;YAChD,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CACnB,yBAAyB,CAAC,uBAAuB,CAAC,IAAI,CACzD,CAAC;QACN,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;YAC9C,MAAM,KAAK,GAAG,gBAAgB,CAAC;gBAC3B,IAAI,EAAE,GAAG;gBACT,OAAO,EAAE,eAAe;aAC3B,CAAC,CAAC;YAEH,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;YAChD,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CACnB,yBAAyB,CAAC,sBAAsB,CAAC,IAAI,CACxD,CAAC;QACN,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,4BAA4B,EAAE,GAAG,EAAE;QACxC,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;YAClD,MAAM,KAAK,GAAG,gBAAgB,CAAC;gBAC3B,IAAI,EAAE,GAAG;gBACT,OAAO,EAAE,mBAAmB;aAC/B,CAAC,CAAC;YAEH,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;YAChD,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CACnB,yBAAyB,CAAC,0BAA0B,CAAC,IAAI,CAC5D,CAAC;QACN,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;YACxD,MAAM,KAAK,GAAG,gBAAgB,CAAC;gBAC3B,IAAI,EAAE,GAAG;gBACT,OAAO,EAAE,yBAAyB;aACrC,CAAC,CAAC;YAEH,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;YAChD,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CACnB,yBAAyB,CAAC,gCAAgC,CAAC,IAAI,CAClE,CAAC;QACN,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,8BAA8B,EAAE,GAAG,EAAE;QAC1C,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;YAC5D,MAAM,KAAK,GAAG,gBAAgB,CAAC;gBAC3B,IAAI,EAAE,GAAG;gBACT,OAAO,EAAE,6BAA6B;aACzC,CAAC,CAAC;YAEH,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;YAChD,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CACnB,yBAAyB,CAAC,0BAA0B,CAAC,IAAI,CAC5D,CAAC;QACN,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;YAC/C,MAAM,KAAK,GAAG,gBAAgB,CAAC;gBAC3B,IAAI,EAAE,GAAG;gBACT,OAAO,EAAE,gBAAgB;aAC5B,CAAC,CAAC;YAEH,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;YAChD,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CACnB,yBAAyB,CAAC,uBAAuB,CAAC,IAAI,CACzD,CAAC;QACN,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,iCAAiC,EAAE,GAAG,EAAE;QAC7C,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;YAC1D,MAAM,KAAK,GAAG,gBAAgB,CAAC;gBAC3B,IAAI,EAAE,GAAG;gBACT,OAAO,EAAE,uBAAuB;aACnC,CAAC,CAAC;YAEH,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;YAChD,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CACnB,yBAAyB,CAAC,6BAA6B,CAAC,IAAI,CAC/D,CAAC;QACN,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;YACxD,MAAM,KAAK,GAAG,gBAAgB,CAAC;gBAC3B,IAAI,EAAE,GAAG;gBACT,OAAO,EAAE,sBAAsB;aAClC,CAAC,CAAC;YAEH,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;YAChD,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CACnB,yBAAyB,CAAC,4BAA4B,CAAC,IAAI,CAC9D,CAAC;QACN,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;QAC5B,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;YAClD,MAAM,KAAK,GAAG,gBAAgB,CAAC;gBAC3B,IAAI,EAAE,GAAG;gBACT,OAAO,EAAE,mBAAmB;aAC/B,CAAC,CAAC;YAEH,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;YAChD,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CACnB,yBAAyB,CAAC,wBAAwB,CAAC,IAAI,CAC1D,CAAC;QACN,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;YAChD,MAAM,KAAK,GAAG,gBAAgB,CAAC;gBAC3B,IAAI,EAAE,GAAG;gBACT,OAAO,EAAE,iBAAiB;aAC7B,CAAC,CAAC;YAEH,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;YAChD,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CACnB,yBAAyB,CAAC,wBAAwB,CAAC,IAAI,CAC1D,CAAC;QACN,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;QAC/B,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;YAC9C,MAAM,KAAK,GAAG,gBAAgB,CAAC;gBAC3B,IAAI,EAAE,GAAG;gBACT,OAAO,EAAE,eAAe;aAC3B,CAAC,CAAC;YAEH,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;YAChD,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CACnB,yBAAyB,CAAC,yBAAyB,CAAC,IAAI,CAC3D,CAAC;QACN,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;YAC9C,MAAM,KAAK,GAAG,gBAAgB,CAAC;gBAC3B,IAAI,EAAE,GAAG;gBACT,OAAO,EAAE,eAAe;aAC3B,CAAC,CAAC;YAEH,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;YAChD,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CACnB,yBAAyB,CAAC,yBAAyB,CAAC,IAAI,CAC3D,CAAC;QACN,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;YAC7C,MAAM,KAAK,GAAG,gBAAgB,CAAC;gBAC3B,IAAI,EAAE,GAAG;gBACT,OAAO,EAAE,cAAc;aAC1B,CAAC,CAAC;YAEH,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;YAChD,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CACnB,yBAAyB,CAAC,yBAAyB,CAAC,IAAI,CAC3D,CAAC;QACN,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;YACjD,MAAM,KAAK,GAAG,gBAAgB,CAAC;gBAC3B,IAAI,EAAE,GAAG;gBACT,OAAO,EAAE,kBAAkB;aAC9B,CAAC,CAAC;YAEH,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;YAChD,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CACnB,yBAAyB,CAAC,yBAAyB,CAAC,IAAI,CAC3D,CAAC;QACN,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;YACtD,MAAM,KAAK,GAAG,gBAAgB,CAAC;gBAC3B,IAAI,EAAE,GAAG;gBACT,OAAO,EAAE,uBAAuB;aACnC,CAAC,CAAC;YAEH,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;YAChD,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CACnB,yBAAyB,CAAC,yBAAyB,CAAC,IAAI,CAC3D,CAAC;QACN,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;YACxD,MAAM,KAAK,GAAG,gBAAgB,CAAC;gBAC3B,IAAI,EAAE,GAAG;gBACT,OAAO,EAAE,oBAAoB;aAChC,CAAC,CAAC;YAEH,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;YAChD,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CACnB,yBAAyB,CAAC,8BAA8B,CAAC,IAAI,CAChE,CAAC;QACN,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;QACjC,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;YAC/C,MAAM,KAAK,GAAG,gBAAgB,CAAC;gBAC3B,IAAI,EAAE,GAAG;gBACT,OAAO,EAAE,YAAY;gBACrB,MAAM,EAAE;oBACJ;wBACI,MAAM,EAAE,SAAS;wBACjB,OAAO,EAAE,iBAAiB;wBAC1B,MAAM,EAAE,QAAQ;qBACnB;iBACJ;aACJ,CAAC,CAAC;YAEH,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;YAChD,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CACnB,yBAAyB,CAAC,yBAAyB,CAAC,IAAI,CAC3D,CAAC;QACN,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;YAC1C,MAAM,KAAK,GAAG,gBAAgB,CAAC;gBAC3B,IAAI,EAAE,GAAG;gBACT,OAAO,EAAE,eAAe;gBACxB,MAAM,EAAE;oBACJ;wBACI,MAAM,EAAE,WAAW;wBACnB,OAAO,EAAE,WAAW;wBACpB,MAAM,EAAE,QAAQ;qBACnB;iBACJ;aACJ,CAAC,CAAC;YAEH,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;YAChD,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CACnB,yBAAyB,CAAC,kBAAkB,CAAC,IAAI,CACpD,CAAC;QACN,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;YAC9C,MAAM,KAAK,GAAG,gBAAgB,CAAC;gBAC3B,IAAI,EAAE,GAAG;gBACT,OAAO,EAAE,oBAAoB;gBAC7B,MAAM,EAAE;oBACJ;wBACI,MAAM,EAAE,UAAU;wBAClB,OAAO,EAAE,WAAW;wBACpB,MAAM,EAAE,QAAQ;qBACnB;iBACJ;aACJ,CAAC,CAAC;YAEH,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;YAChD,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CACnB,yBAAyB,CAAC,uBAAuB,CAAC,IAAI,CACzD,CAAC;QACN,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;YAC/C,MAAM,KAAK,GAAG,gBAAgB,CAAC;gBAC3B,IAAI,EAAE,GAAG;gBACT,OAAO,EAAE,oBAAoB;gBAC7B,MAAM,EAAE;oBACJ;wBACI,MAAM,EAAE,WAAW;wBACnB,OAAO,EAAE,WAAW;wBACpB,MAAM,EAAE,QAAQ;qBACnB;iBACJ;aACJ,CAAC,CAAC;YAEH,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;YAChD,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CACnB,yBAAyB,CAAC,uBAAuB,CAAC,IAAI,CACzD,CAAC;QACN,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,4BAA4B,EAAE,GAAG,EAAE;QACxC,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;YACpC,MAAM,KAAK,GAAG,gBAAgB,CAAC;gBAC3B,IAAI,EAAE,GAAG;gBACT,OAAO,EAAE,eAAe;aAC3B,CAAC,CAAC;YAEH,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;YAChD,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CACnB,yBAAyB,CAAC,yBAAyB,CAAC,IAAI,CAC3D,CAAC;QACN,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;YAChC,MAAM,KAAK,GAAG,gBAAgB,CAAC;gBAC3B,IAAI,EAAE,GAAG;gBACT,OAAO,EAAE,cAAc;aAC1B,CAAC,CAAC;YAEH,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;YAChD,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CACnB,yBAAyB,CAAC,qBAAqB,CAAC,IAAI,CACvD,CAAC;QACN,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uBAAuB,EAAE,GAAG,EAAE;YAC7B,MAAM,KAAK,GAAG,gBAAgB,CAAC;gBAC3B,IAAI,EAAE,GAAG;gBACT,OAAO,EAAE,WAAW;aACvB,CAAC,CAAC;YAEH,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;YAChD,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CACnB,yBAAyB,CAAC,kBAAkB,CAAC,IAAI,CACpD,CAAC;QACN,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;YAClC,MAAM,KAAK,GAAG,gBAAgB,CAAC;gBAC3B,IAAI,EAAE,GAAG;gBACT,OAAO,EAAE,WAAW;aACvB,CAAC,CAAC;YAEH,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;YAChD,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CACnB,yBAAyB,CAAC,uBAAuB,CAAC,IAAI,CACzD,CAAC;QACN,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;YACrC,MAAM,KAAK,GAAG,gBAAgB,CAAC;gBAC3B,IAAI,EAAE,GAAG;gBACT,OAAO,EAAE,qBAAqB;aACjC,CAAC,CAAC;YAEH,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;YAChD,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CACnB,yBAAyB,CAAC,0BAA0B,CAAC,IAAI,CAC5D,CAAC;QACN,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;YAClC,MAAM,KAAK,GAAG,gBAAgB,CAAC;gBAC3B,IAAI,EAAE,GAAG;gBACT,OAAO,EAAE,uBAAuB;aACnC,CAAC,CAAC;YAEH,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;YAChD,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CACnB,yBAAyB,CAAC,uBAAuB,CAAC,IAAI,CACzD,CAAC;QACN,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;YAC/B,MAAM,KAAK,GAAG,gBAAgB,CAAC;gBAC3B,IAAI,EAAE,GAAG;gBACT,OAAO,EAAE,aAAa;aACzB,CAAC,CAAC;YAEH,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;YAChD,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CACnB,yBAAyB,CAAC,oBAAoB,CAAC,IAAI,CACtD,CAAC;QACN,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;YACvC,MAAM,KAAK,GAAG,gBAAgB,CAAC;gBAC3B,IAAI,EAAE,GAAG;gBACT,OAAO,EAAE,qBAAqB;aACjC,CAAC,CAAC;YAEH,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;YAChD,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CACnB,yBAAyB,CAAC,4BAA4B,CAAC,IAAI,CAC9D,CAAC;QACN,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qBAAqB,EAAE,GAAG,EAAE;YAC3B,MAAM,KAAK,GAAG,gBAAgB,CAAC;gBAC3B,IAAI,EAAE,GAAG;gBACT,OAAO,EAAE,iBAAiB;aAC7B,CAAC,CAAC;YAEH,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;YAChD,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CACnB,yBAAyB,CAAC,gBAAgB,CAAC,IAAI,CAClD,CAAC;QACN,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;QAC5B,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;YAC9D,MAAM,KAAK,GAAG,gBAAgB,CAAC;gBAC3B,IAAI,EAAE,GAAG;gBACT,OAAO,EAAE,cAAc;gBACvB,MAAM,EAAE;oBACJ;wBACI,MAAM,EAAE,QAAQ;wBAChB,OAAO,EAAE,oBAAoB;wBAC7B,MAAM,EAAE,QAAQ;qBACnB;iBACJ;aACJ,CAAC,CAAC;YAEH,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;YAChD,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CACnB,yBAAyB,CAAC,sBAAsB,CAAC,IAAI,CACxD,CAAC;YACF,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;YAC1C,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC;gBAC1B,YAAY,EAAE,GAAG;gBACjB,eAAe,EAAE,cAAc;gBAC/B,cAAc,EAAE;oBACZ;wBACI,MAAM,EAAE,QAAQ;wBAChB,OAAO,EAAE,oBAAoB;wBAC7B,MAAM,EAAE,QAAQ;qBACnB;iBACJ;aACJ,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;YACrC,MAAM,KAAK,GAAG,gBAAgB,CAAC;gBAC3B,IAAI,EAAE,GAAG;gBACT,OAAO,EAAE,SAAgB;aAC5B,CAAC,CAAC;YAEH,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;YAChD,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CACnB,yBAAyB,CAAC,sBAAsB,CAAC,IAAI,CACxD,CAAC;QACN,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAChC,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;YACrC,MAAM,KAAK,GAAG,gBAAgB,CAAC;gBAC3B,IAAI,EAAE,GAAG;gBACT,OAAO,EAAE,sBAAsB;aAClC,CAAC,CAAC;YAEH,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;YAChD,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CACnB,yBAAyB,CAAC,6BAA6B,CAAC,IAAI,CAC/D,CAAC;QACN,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;YACtC,MAAM,KAAK,GAAG,gBAAgB,CAAC;gBAC3B,IAAI,EAAE,GAAG;gBACT,OAAO,EAAE,gBAAgB;aAC5B,CAAC,CAAC;YAEH,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;YAChD,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CACnB,yBAAyB,CAAC,uBAAuB,CAAC,IAAI,CACzD,CAAC;QACN,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
@@ -0,0 +1,7 @@
1
+ export type SetCache = <T>(name: string, value: T, ttlMs?: number) => Promise<void> | void;
2
+ export type GetCache = <T>(name: string) => Promise<T | undefined> | T | undefined;
3
+ export type CacheConfig = {
4
+ getCache: GetCache;
5
+ setCache: SetCache;
6
+ };
7
+ //# sourceMappingURL=cache-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache-types.d.ts","sourceRoot":"","sources":["../../src/auth/cache-types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,EACrB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,CAAC,EACR,KAAK,CAAC,EAAE,MAAM,KACb,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAE1B,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,EACrB,IAAI,EAAE,MAAM,KACX,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;AAE5C,MAAM,MAAM,WAAW,GAAG;IACtB,QAAQ,EAAE,QAAQ,CAAC;IACnB,QAAQ,EAAE,QAAQ,CAAC;CACtB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=cache-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache-types.js","sourceRoot":"","sources":["../../src/auth/cache-types.ts"],"names":[],"mappings":""}
@@ -16,4 +16,8 @@ export type CookieOptions = Partial<{
16
16
  };
17
17
  export type GetSession = (name: string) => Promise<string | null | undefined> | string | null | undefined;
18
18
  export type SetSession = (name: string, value: string, options: CookieOptions) => Promise<void> | void;
19
+ export type CookieConfig = {
20
+ getSession: GetSession;
21
+ saveSession: SetSession;
22
+ };
19
23
  //# sourceMappingURL=cookie-types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cookie-types.d.ts","sourceRoot":"","sources":["../../src/auth/cookie-types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC7B,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC;CACpC;AAED,MAAM,MAAM,aAAa,GAAG,OAAO,CAAC;IAChC,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,IAAI,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IACpC,QAAQ,EAAE,OAAO,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;CACjD,CAAC,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtB,MAAM,MAAM,UAAU,GAAG,CACrB,IAAI,EAAE,MAAM,KACX,OAAO,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;AAEpE,MAAM,MAAM,UAAU,GAAG,CACrB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,aAAa,KACrB,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC"}
1
+ {"version":3,"file":"cookie-types.d.ts","sourceRoot":"","sources":["../../src/auth/cookie-types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC7B,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC;CACpC;AAED,MAAM,MAAM,aAAa,GAAG,OAAO,CAAC;IAChC,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,IAAI,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IACpC,QAAQ,EAAE,OAAO,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;CACjD,CAAC,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtB,MAAM,MAAM,UAAU,GAAG,CACrB,IAAI,EAAE,MAAM,KACX,OAAO,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;AAEpE,MAAM,MAAM,UAAU,GAAG,CACrB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,aAAa,KACrB,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAE1B,MAAM,MAAM,YAAY,GAAG;IACvB,UAAU,EAAE,UAAU,CAAC;IACvB,WAAW,EAAE,UAAU,CAAC;CAC3B,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=errors.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.test.d.ts","sourceRoot":"","sources":["../../src/auth/errors.test.ts"],"names":[],"mappings":""}