firebase-admin-edge 1.0.1 → 1.0.4

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 (77) hide show
  1. package/dist/auth/cookie-types.d.ts +19 -0
  2. package/dist/auth/cookie-types.d.ts.map +1 -0
  3. package/dist/auth/cookie-types.js +2 -0
  4. package/dist/auth/cookie-types.js.map +1 -0
  5. package/dist/auth/firebase-admin-auth.d.ts +84 -0
  6. package/dist/auth/firebase-admin-auth.d.ts.map +1 -0
  7. package/dist/auth/firebase-admin-auth.js +196 -0
  8. package/dist/auth/firebase-admin-auth.js.map +1 -0
  9. package/dist/auth/firebase-admin-auth.test.d.ts +2 -0
  10. package/dist/auth/firebase-admin-auth.test.d.ts.map +1 -0
  11. package/dist/auth/firebase-admin-auth.test.js +445 -0
  12. package/dist/auth/firebase-admin-auth.test.js.map +1 -0
  13. package/dist/auth/firebase-auth-endpoints.d.ts +101 -0
  14. package/dist/auth/firebase-auth-endpoints.d.ts.map +1 -0
  15. package/dist/auth/firebase-auth-endpoints.js +134 -0
  16. package/dist/auth/firebase-auth-endpoints.js.map +1 -0
  17. package/dist/auth/firebase-auth-endpoints.test.d.ts +2 -0
  18. package/dist/auth/firebase-auth-endpoints.test.d.ts.map +1 -0
  19. package/dist/auth/firebase-auth-endpoints.test.js +259 -0
  20. package/dist/auth/firebase-auth-endpoints.test.js.map +1 -0
  21. package/dist/auth/firebase-auth.d.ts +43 -0
  22. package/dist/auth/firebase-auth.d.ts.map +1 -0
  23. package/dist/auth/firebase-auth.js +48 -0
  24. package/dist/auth/firebase-auth.js.map +1 -0
  25. package/dist/auth/firebase-auth.test.d.ts +2 -0
  26. package/dist/auth/firebase-auth.test.d.ts.map +1 -0
  27. package/dist/auth/firebase-auth.test.js +97 -0
  28. package/dist/auth/firebase-auth.test.js.map +1 -0
  29. package/dist/auth/firebase-jwt.d.ts +57 -0
  30. package/dist/auth/firebase-jwt.d.ts.map +1 -0
  31. package/dist/auth/firebase-jwt.js +275 -0
  32. package/dist/auth/firebase-jwt.js.map +1 -0
  33. package/dist/auth/firebase-jwt.test.d.ts +2 -0
  34. package/dist/auth/firebase-jwt.test.d.ts.map +1 -0
  35. package/dist/auth/firebase-jwt.test.js +144 -0
  36. package/dist/auth/firebase-jwt.test.js.map +1 -0
  37. package/dist/auth/firebase-types.d.ts +152 -0
  38. package/dist/auth/firebase-types.d.ts.map +1 -0
  39. package/dist/auth/firebase-types.js +2 -0
  40. package/dist/auth/firebase-types.js.map +1 -0
  41. package/dist/auth/google-oauth.d.ts +32 -0
  42. package/dist/auth/google-oauth.d.ts.map +1 -0
  43. package/dist/auth/google-oauth.js +93 -0
  44. package/dist/auth/google-oauth.js.map +1 -0
  45. package/dist/auth/google-oauth.test.d.ts +2 -0
  46. package/dist/auth/google-oauth.test.d.ts.map +1 -0
  47. package/dist/auth/google-oauth.test.js +124 -0
  48. package/dist/auth/google-oauth.test.js.map +1 -0
  49. package/dist/firebase-edge-server.d.ts +102 -0
  50. package/dist/firebase-edge-server.d.ts.map +1 -0
  51. package/dist/firebase-edge-server.js +184 -0
  52. package/dist/firebase-edge-server.js.map +1 -0
  53. package/dist/firebase-edge-server.test.d.ts +2 -0
  54. package/dist/firebase-edge-server.test.d.ts.map +1 -0
  55. package/dist/firebase-edge-server.test.js +164 -0
  56. package/dist/firebase-edge-server.test.js.map +1 -0
  57. package/dist/index.d.ts +4 -1
  58. package/dist/index.d.ts.map +1 -1
  59. package/dist/index.js +4 -1
  60. package/dist/index.js.map +1 -1
  61. package/dist/rest-fetch.d.ts +18 -0
  62. package/dist/rest-fetch.d.ts.map +1 -0
  63. package/dist/rest-fetch.js +57 -0
  64. package/dist/rest-fetch.js.map +1 -0
  65. package/dist/rest-fetch.test.d.ts +2 -0
  66. package/dist/rest-fetch.test.d.ts.map +1 -0
  67. package/dist/rest-fetch.test.js +152 -0
  68. package/dist/rest-fetch.test.js.map +1 -0
  69. package/package.json +6 -2
  70. package/dist/utils.d.ts +0 -2
  71. package/dist/utils.d.ts.map +0 -1
  72. package/dist/utils.js +0 -2
  73. package/dist/utils.js.map +0 -1
  74. package/dist/utils.test.d.ts +0 -2
  75. package/dist/utils.test.d.ts.map +0 -1
  76. package/dist/utils.test.js +0 -6
  77. package/dist/utils.test.js.map +0 -1
@@ -0,0 +1,445 @@
1
+ import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
2
+ import { FirebaseAdminAuth } from './firebase-admin-auth.js';
3
+ import { getAccountInfoByUid, createSessionCookie as createSessionCookieEndpoint, } from './firebase-auth-endpoints.js';
4
+ import { getToken } from './google-oauth.js';
5
+ import { signJWTCustomToken, verifyJWT, verifySessionJWT, } from './firebase-jwt.js';
6
+ vi.mock('./firebase-auth-endpoints.js', () => ({
7
+ getAccountInfoByUid: vi.fn(),
8
+ createSessionCookie: vi.fn(),
9
+ }));
10
+ vi.mock('./firebase-jwt.js', () => ({
11
+ signJWTCustomToken: vi.fn(),
12
+ verifyJWT: vi.fn(),
13
+ verifySessionJWT: vi.fn(),
14
+ }));
15
+ vi.mock('./google-oauth.js', () => ({
16
+ getToken: vi.fn(),
17
+ }));
18
+ const mockedGetToken = vi.mocked(getToken);
19
+ const mockedGetAccountInfoByUid = vi.mocked(getAccountInfoByUid);
20
+ const mockedCreateSessionCookieEndpoint = vi.mocked(createSessionCookieEndpoint);
21
+ const mockedVerifyJWT = vi.mocked(verifyJWT);
22
+ const mockedVerifySessionJWT = vi.mocked(verifySessionJWT);
23
+ const mockedSignJWTCustomToken = vi.mocked(signJWTCustomToken);
24
+ const serviceAccountKey = {
25
+ type: 'service_account',
26
+ project_id: 'test-project',
27
+ private_key_id: 'test-private-key-id',
28
+ private_key: 'test-private-key',
29
+ client_email: 'test@test-project.iam.gserviceaccount.com',
30
+ client_id: 'test-client-id',
31
+ auth_uri: 'https://accounts.google.com/o/oauth2/auth',
32
+ token_uri: 'https://oauth2.googleapis.com/token',
33
+ auth_provider_x509_cert_url: 'https://www.googleapis.com/oauth2/v1/certs',
34
+ client_x509_cert_url: 'https://www.googleapis.com/robot/v1/metadata/x509/test%40test-project.iam.gserviceaccount.com',
35
+ };
36
+ // Proper mock data that matches the expected types
37
+ const mockGoogleTokenResponse = {
38
+ access_token: 'test-access-token',
39
+ expires_in: 3600,
40
+ scope: 'scope',
41
+ token_type: 'Bearer',
42
+ id_token: 'test-id-token',
43
+ };
44
+ const mockUserRecord = {
45
+ uid: 'uid-1',
46
+ email: 'test@example.com',
47
+ emailVerified: true,
48
+ disabled: false,
49
+ metadata: {
50
+ creationTime: new Date().toISOString(),
51
+ lastSignInTime: new Date().toISOString(),
52
+ },
53
+ providerData: [],
54
+ };
55
+ const mockFirebasePayload = {
56
+ iss: 'https://securetoken.google.com/test-project',
57
+ aud: 'test-project',
58
+ auth_time: 1000,
59
+ user_id: 'uid-1',
60
+ sub: 'uid-1',
61
+ iat: 1000,
62
+ exp: 2000,
63
+ email: 'test@example.com',
64
+ email_verified: true,
65
+ firebase: {
66
+ identities: {
67
+ email: ['test@example.com'],
68
+ },
69
+ sign_in_provider: 'password',
70
+ },
71
+ };
72
+ describe('FirebaseAdminAuth', () => {
73
+ let auth;
74
+ beforeEach(() => {
75
+ auth = new FirebaseAdminAuth(serviceAccountKey);
76
+ vi.clearAllMocks();
77
+ });
78
+ afterEach(() => {
79
+ vi.resetAllMocks();
80
+ });
81
+ describe('getUser', () => {
82
+ it('returns error when getToken returns an error', async () => {
83
+ mockedGetToken.mockResolvedValueOnce({
84
+ data: null,
85
+ error: { code: 401, message: 'unauthorized', errors: [] },
86
+ });
87
+ const result = await auth.getUser('uid-1');
88
+ expect(mockedGetToken).toHaveBeenCalled();
89
+ expect(result.data).toBeNull();
90
+ expect(result.error).toEqual({
91
+ code: 401,
92
+ message: 'unauthorized',
93
+ errors: [],
94
+ });
95
+ });
96
+ it('returns error when getToken does not return a token', async () => {
97
+ mockedGetToken.mockResolvedValueOnce({
98
+ data: null,
99
+ error: null,
100
+ });
101
+ const result = await auth.getUser('uid-1');
102
+ expect(result.data).toBeNull();
103
+ expect(result.error).toEqual({
104
+ code: 500,
105
+ message: 'No token returned',
106
+ errors: [],
107
+ });
108
+ });
109
+ it('returns user when everything succeeds', async () => {
110
+ mockedGetToken.mockResolvedValueOnce({
111
+ data: mockGoogleTokenResponse,
112
+ error: null,
113
+ });
114
+ mockedGetAccountInfoByUid.mockResolvedValueOnce({
115
+ data: mockUserRecord,
116
+ error: null,
117
+ });
118
+ const result = await auth.getUser('uid-1');
119
+ expect(mockedGetToken).toHaveBeenCalledWith(serviceAccountKey, undefined);
120
+ expect(mockedGetAccountInfoByUid).toHaveBeenCalledWith('uid-1', 'test-access-token', 'test-project', undefined);
121
+ expect(result.data).toEqual(mockUserRecord);
122
+ expect(result.error).toBeNull();
123
+ });
124
+ it('returns error when getAccountInfoByUid fails', async () => {
125
+ mockedGetToken.mockResolvedValueOnce({
126
+ data: mockGoogleTokenResponse,
127
+ error: null,
128
+ });
129
+ const error = { code: 404, message: 'not found', errors: [] };
130
+ mockedGetAccountInfoByUid.mockResolvedValueOnce({
131
+ data: null,
132
+ error,
133
+ });
134
+ const result = await auth.getUser('uid-1');
135
+ expect(result.data).toBeNull();
136
+ expect(result.error).toEqual(error);
137
+ });
138
+ });
139
+ describe('verifyIdToken', () => {
140
+ it('returns error when verifyJWT fails', async () => {
141
+ mockedVerifyJWT.mockResolvedValueOnce({
142
+ data: null,
143
+ error: new Error('bad token'),
144
+ });
145
+ const result = await auth.verifyIdToken('id-token');
146
+ expect(mockedVerifyJWT).toHaveBeenCalledWith('id-token', 'test-project', undefined);
147
+ expect(result.data).toBeNull();
148
+ expect(result.error).toEqual(new Error('bad token'));
149
+ });
150
+ it('returns decoded token when not checking revoked', async () => {
151
+ mockedVerifyJWT.mockResolvedValueOnce({
152
+ data: mockFirebasePayload,
153
+ error: null,
154
+ });
155
+ const result = await auth.verifyIdToken('id-token', false);
156
+ expect(result.data).toEqual(mockFirebasePayload);
157
+ expect(result.error).toBeNull();
158
+ });
159
+ it('returns error when user lookup fails during revoked check', async () => {
160
+ mockedVerifyJWT.mockResolvedValueOnce({
161
+ data: mockFirebasePayload,
162
+ error: null,
163
+ });
164
+ const userError = { code: 500, message: 'fail', errors: [] };
165
+ mockedGetToken.mockResolvedValueOnce({
166
+ data: mockGoogleTokenResponse,
167
+ error: null,
168
+ });
169
+ mockedGetAccountInfoByUid.mockResolvedValueOnce({
170
+ data: null,
171
+ error: userError,
172
+ });
173
+ const result = await auth.verifyIdToken('id-token', true);
174
+ expect(result.data).toBeNull();
175
+ expect(result.error).toEqual(userError);
176
+ });
177
+ it('returns ERR_NO_USER when user is null during revoked check', async () => {
178
+ mockedVerifyJWT.mockResolvedValueOnce({
179
+ data: mockFirebasePayload,
180
+ error: null,
181
+ });
182
+ mockedGetToken.mockResolvedValueOnce({
183
+ data: mockGoogleTokenResponse,
184
+ error: null,
185
+ });
186
+ mockedGetAccountInfoByUid.mockResolvedValueOnce({
187
+ data: null,
188
+ error: null,
189
+ });
190
+ const result = await auth.verifyIdToken('id-token', true);
191
+ expect(result.data).toBeNull();
192
+ expect(result.error).toEqual({
193
+ message: 'No user record found!',
194
+ code: 'ERR_NO_USER',
195
+ });
196
+ });
197
+ it('returns ERR_USER_DISABLED when user.disabled is true', async () => {
198
+ mockedVerifyJWT.mockResolvedValueOnce({
199
+ data: mockFirebasePayload,
200
+ error: null,
201
+ });
202
+ mockedGetToken.mockResolvedValueOnce({
203
+ data: mockGoogleTokenResponse,
204
+ error: null,
205
+ });
206
+ mockedGetAccountInfoByUid.mockResolvedValueOnce({
207
+ data: { ...mockUserRecord, disabled: true },
208
+ error: null,
209
+ });
210
+ const result = await auth.verifyIdToken('id-token', true);
211
+ expect(result.data).toBeNull();
212
+ expect(result.error).toEqual({
213
+ message: 'User is disabled!',
214
+ code: 'ERR_USER_DISABLED',
215
+ });
216
+ });
217
+ it('returns ERR_TOKEN_REVOKED when auth_time < tokensValidAfterTime', async () => {
218
+ mockedVerifyJWT.mockResolvedValueOnce({
219
+ data: mockFirebasePayload,
220
+ error: null,
221
+ });
222
+ mockedGetToken.mockResolvedValueOnce({
223
+ data: mockGoogleTokenResponse,
224
+ error: null,
225
+ });
226
+ // tokensValidAfterTime far in the future compared to auth_time
227
+ mockedGetAccountInfoByUid.mockResolvedValueOnce({
228
+ data: {
229
+ ...mockUserRecord,
230
+ disabled: false,
231
+ tokensValidAfterTime: new Date(2000000 * 1000).toISOString(),
232
+ },
233
+ error: null,
234
+ });
235
+ const result = await auth.verifyIdToken('id-token', true);
236
+ expect(result.data).toBeNull();
237
+ expect(result.error).toEqual({
238
+ message: 'Token has been revoked!',
239
+ code: 'ERR_TOKEN_REVOKED',
240
+ });
241
+ });
242
+ it('returns decoded token when not revoked', async () => {
243
+ const mockPayloadWithLaterAuthTime = {
244
+ ...mockFirebasePayload,
245
+ auth_time: 2000,
246
+ };
247
+ mockedVerifyJWT.mockResolvedValueOnce({
248
+ data: mockPayloadWithLaterAuthTime,
249
+ error: null,
250
+ });
251
+ mockedGetToken.mockResolvedValueOnce({
252
+ data: mockGoogleTokenResponse,
253
+ error: null,
254
+ });
255
+ mockedGetAccountInfoByUid.mockResolvedValueOnce({
256
+ data: {
257
+ ...mockUserRecord,
258
+ disabled: false,
259
+ tokensValidAfterTime: new Date(1000 * 1000).toISOString(),
260
+ },
261
+ error: null,
262
+ });
263
+ const result = await auth.verifyIdToken('id-token', true);
264
+ expect(result.data).toEqual(mockPayloadWithLaterAuthTime);
265
+ expect(result.error).toBeNull();
266
+ });
267
+ });
268
+ describe('createSessionCookie', () => {
269
+ it('returns error when getToken fails', async () => {
270
+ mockedGetToken.mockResolvedValueOnce({
271
+ data: null,
272
+ error: { code: 401, message: 'unauthorized', errors: [] },
273
+ });
274
+ const result = await auth.createSessionCookie('id-token', {
275
+ expiresIn: 3600,
276
+ });
277
+ expect(result.data).toBeNull();
278
+ expect(result.error).toEqual({
279
+ code: 401,
280
+ message: 'unauthorized',
281
+ errors: [],
282
+ });
283
+ });
284
+ it('returns error when token is missing', async () => {
285
+ mockedGetToken.mockResolvedValueOnce({
286
+ data: null,
287
+ error: null,
288
+ });
289
+ const result = await auth.createSessionCookie('id-token', {
290
+ expiresIn: 3600,
291
+ });
292
+ expect(result.data).toBeNull();
293
+ expect(result.error).toEqual({
294
+ code: 500,
295
+ message: 'No token returned',
296
+ errors: [],
297
+ });
298
+ });
299
+ it('returns error when endpoint returns error', async () => {
300
+ mockedGetToken.mockResolvedValueOnce({
301
+ data: mockGoogleTokenResponse,
302
+ error: null,
303
+ });
304
+ const endpointError = {
305
+ code: 400,
306
+ message: 'bad request',
307
+ errors: [],
308
+ };
309
+ mockedCreateSessionCookieEndpoint.mockResolvedValueOnce({
310
+ data: null,
311
+ error: endpointError,
312
+ });
313
+ const result = await auth.createSessionCookie('id-token', {
314
+ expiresIn: 3600,
315
+ });
316
+ expect(mockedCreateSessionCookieEndpoint).toHaveBeenCalledWith('id-token', 'test-access-token', 'test-project', 3600, undefined);
317
+ expect(result.data).toBeNull();
318
+ expect(result.error).toEqual(endpointError);
319
+ });
320
+ it('returns session cookie data on success', async () => {
321
+ mockedGetToken.mockResolvedValueOnce({
322
+ data: mockGoogleTokenResponse,
323
+ error: null,
324
+ });
325
+ const cookieData = 'cookie-value';
326
+ mockedCreateSessionCookieEndpoint.mockResolvedValueOnce({
327
+ data: cookieData,
328
+ error: null,
329
+ });
330
+ const result = await auth.createSessionCookie('id-token', {
331
+ expiresIn: 3600,
332
+ });
333
+ expect(result.data).toEqual(cookieData);
334
+ expect(result.error).toBeNull();
335
+ });
336
+ });
337
+ describe('verifySessionCookie', () => {
338
+ it('returns error when verifySessionJWT fails', async () => {
339
+ mockedVerifySessionJWT.mockResolvedValueOnce({
340
+ data: null,
341
+ error: new Error('bad session token'),
342
+ });
343
+ const result = await auth.verifySessionCookie('session-cookie');
344
+ expect(result.data).toBeNull();
345
+ expect(result.error).toEqual(new Error('bad session token'));
346
+ });
347
+ it('returns data when not checking revoked', async () => {
348
+ mockedVerifySessionJWT.mockResolvedValueOnce({
349
+ data: mockFirebasePayload,
350
+ error: null,
351
+ });
352
+ const result = await auth.verifySessionCookie('session-cookie', false);
353
+ expect(result.data).toEqual(mockFirebasePayload);
354
+ expect(result.error).toBeNull();
355
+ });
356
+ it('returns error when user lookup fails during revoked check', async () => {
357
+ mockedVerifySessionJWT.mockResolvedValueOnce({
358
+ data: mockFirebasePayload,
359
+ error: null,
360
+ });
361
+ mockedGetToken.mockResolvedValueOnce({
362
+ data: mockGoogleTokenResponse,
363
+ error: null,
364
+ });
365
+ const error = { code: 500, message: 'fail', errors: [] };
366
+ mockedGetAccountInfoByUid.mockResolvedValueOnce({
367
+ data: null,
368
+ error,
369
+ });
370
+ const result = await auth.verifySessionCookie('session-cookie', true);
371
+ expect(result.data).toBeNull();
372
+ expect(result.error).toEqual(error);
373
+ });
374
+ it('returns ERR_NO_USER when user is null during revoked check', async () => {
375
+ mockedVerifySessionJWT.mockResolvedValueOnce({
376
+ data: mockFirebasePayload,
377
+ error: null,
378
+ });
379
+ mockedGetToken.mockResolvedValueOnce({
380
+ data: mockGoogleTokenResponse,
381
+ error: null,
382
+ });
383
+ mockedGetAccountInfoByUid.mockResolvedValueOnce({
384
+ data: null,
385
+ error: null,
386
+ });
387
+ const result = await auth.verifySessionCookie('session-cookie', true);
388
+ expect(result.data).toBeNull();
389
+ expect(result.error).toEqual({
390
+ message: 'No user record found!',
391
+ code: 'ERR_NO_USER',
392
+ });
393
+ });
394
+ it('returns decoded data when revoked check passes', async () => {
395
+ mockedVerifySessionJWT.mockResolvedValueOnce({
396
+ data: mockFirebasePayload,
397
+ error: null,
398
+ });
399
+ mockedGetToken.mockResolvedValueOnce({
400
+ data: mockGoogleTokenResponse,
401
+ error: null,
402
+ });
403
+ mockedGetAccountInfoByUid.mockResolvedValueOnce({
404
+ data: mockUserRecord,
405
+ error: null,
406
+ });
407
+ const result = await auth.verifySessionCookie('session-cookie', true);
408
+ expect(result.data).toEqual(mockFirebasePayload);
409
+ expect(result.error).toBeNull();
410
+ });
411
+ });
412
+ describe('createCustomToken', () => {
413
+ it('returns error when signJWTCustomToken fails', async () => {
414
+ mockedSignJWTCustomToken.mockResolvedValueOnce({
415
+ data: null,
416
+ error: new Error('sign failed'),
417
+ });
418
+ const result = await auth.createCustomToken('uid-1');
419
+ expect(mockedSignJWTCustomToken).toHaveBeenCalledWith('uid-1', serviceAccountKey, {});
420
+ expect(result.data).toBeNull();
421
+ expect(result.error).toEqual(new Error('sign failed'));
422
+ });
423
+ it('returns error when no data is returned', async () => {
424
+ mockedSignJWTCustomToken.mockResolvedValueOnce({
425
+ data: null,
426
+ error: new Error('No custom token returned'),
427
+ });
428
+ const result = await auth.createCustomToken('uid-1');
429
+ expect(result.data).toBeNull();
430
+ expect(result.error).toEqual(new Error('No custom token returned'));
431
+ });
432
+ it('returns token when successful', async () => {
433
+ mockedSignJWTCustomToken.mockResolvedValueOnce({
434
+ data: 'custom-token',
435
+ error: null,
436
+ });
437
+ const claims = { role: 'admin' };
438
+ const result = await auth.createCustomToken('uid-1', claims);
439
+ expect(mockedSignJWTCustomToken).toHaveBeenCalledWith('uid-1', serviceAccountKey, claims);
440
+ expect(result.data).toBe('custom-token');
441
+ expect(result.error).toBeNull();
442
+ });
443
+ });
444
+ });
445
+ //# sourceMappingURL=firebase-admin-auth.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"firebase-admin-auth.test.js","sourceRoot":"","sources":["../../src/auth/firebase-admin-auth.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,101 @@
1
+ import type { FirebaseCreateAuthUriResponse, FirebaseIdpSignInResponse, FirebaseRefreshTokenResponse, UserRecord } from './firebase-types.js';
2
+ import type { JsonWebKey } from 'crypto';
3
+ export declare function refreshFirebaseIdToken(refreshToken: string, key: string, fetchFn?: typeof globalThis.fetch): Promise<{
4
+ data: FirebaseRefreshTokenResponse | null;
5
+ error: {
6
+ code: number;
7
+ message: string;
8
+ errors?: {
9
+ message: string;
10
+ domain: string;
11
+ reason: string;
12
+ }[];
13
+ } | null;
14
+ }>;
15
+ export declare function createAuthUri(redirect_uri: string, key: string, fetchFn?: typeof globalThis.fetch): Promise<{
16
+ data: FirebaseCreateAuthUriResponse | null;
17
+ error: {
18
+ code: number;
19
+ message: string;
20
+ errors?: {
21
+ message: string;
22
+ domain: string;
23
+ reason: string;
24
+ }[];
25
+ } | null;
26
+ }>;
27
+ export declare function signInWithIdp(providerIdToken: string, requestUri: string, providerId: string | undefined, key: string, fetchFn?: typeof globalThis.fetch): Promise<{
28
+ data: FirebaseIdpSignInResponse | null;
29
+ error: {
30
+ code: number;
31
+ message: string;
32
+ errors?: {
33
+ message: string;
34
+ domain: string;
35
+ reason: string;
36
+ }[];
37
+ } | null;
38
+ }>;
39
+ export declare function signInWithCustomToken(jwtToken: string, key: string, fetchFn?: typeof globalThis.fetch): Promise<{
40
+ data: FirebaseIdpSignInResponse | null;
41
+ error: {
42
+ code: number;
43
+ message: string;
44
+ errors?: {
45
+ message: string;
46
+ domain: string;
47
+ reason: string;
48
+ }[];
49
+ } | null;
50
+ }>;
51
+ export declare function getAccountInfoByUid(uid: string, token: string, project_id: string, fetchFn?: typeof globalThis.fetch): Promise<{
52
+ data: UserRecord | null | undefined;
53
+ error: {
54
+ code: number;
55
+ message: string;
56
+ errors?: {
57
+ message: string;
58
+ domain: string;
59
+ reason: string;
60
+ }[];
61
+ } | null;
62
+ }>;
63
+ export declare function createSessionCookie(idToken: string, token: string, project_id: string, expiresIn?: number, fetchFn?: typeof globalThis.fetch): Promise<{
64
+ data: string | null;
65
+ error: {
66
+ code: number;
67
+ message: string;
68
+ errors?: {
69
+ message: string;
70
+ domain: string;
71
+ reason: string;
72
+ }[];
73
+ } | null;
74
+ }>;
75
+ export declare function getJWKs(fetchFn?: typeof globalThis.fetch): Promise<{
76
+ data: (JsonWebKey & {
77
+ kid: string;
78
+ })[] | null;
79
+ error: {
80
+ code: number;
81
+ message: string;
82
+ errors?: {
83
+ message: string;
84
+ domain: string;
85
+ reason: string;
86
+ }[];
87
+ } | null;
88
+ }>;
89
+ export declare function getPublicKeys(fetchFn?: typeof globalThis.fetch): Promise<{
90
+ data: Record<string, string> | null;
91
+ error: {
92
+ code: number;
93
+ message: string;
94
+ errors?: {
95
+ message: string;
96
+ domain: string;
97
+ reason: string;
98
+ }[];
99
+ } | null;
100
+ }>;
101
+ //# sourceMappingURL=firebase-auth-endpoints.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"firebase-auth-endpoints.d.ts","sourceRoot":"","sources":["../../src/auth/firebase-auth-endpoints.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACR,6BAA6B,EAC7B,yBAAyB,EACzB,4BAA4B,EAE5B,UAAU,EACb,MAAM,qBAAqB,CAAC;AAE7B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAgBzC,wBAAsB,sBAAsB,CACxC,YAAY,EAAE,MAAM,EACpB,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK;;;;;;;;;;;GAuBpC;AAED,wBAAsB,aAAa,CAC/B,YAAY,EAAE,MAAM,EACpB,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK;;;;;;;;;;;GAsBpC;AAED,wBAAsB,aAAa,CAC/B,eAAe,EAAE,MAAM,EACvB,UAAU,EAAE,MAAM,EAClB,UAAU,oBAAe,EACzB,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK;;;;;;;;;;;GA4BpC;AAED,wBAAsB,qBAAqB,CACvC,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK;;;;;;;;;;;GAsBpC;AAED,wBAAsB,mBAAmB,CACrC,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK;;;;;;;;;;;GAmBpC;AAED,wBAAsB,mBAAmB,CACrC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,MAAM,EAClB,SAAS,GAAE,MAAiC,EAC5C,OAAO,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK;;;;;;;;;;;GAwBpC;AAED,wBAAsB,OAAO,CAAC,OAAO,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK;;aAK1B,MAAM;;;;;;;;;;;GAW1C;AAED,wBAAsB,aAAa,CAAC,OAAO,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK;;;;;;;;;;;GAgBpE"}