firebase-admin-edge 1.0.24 → 1.1.0

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 (62) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +343 -46
  3. package/dist/auth/auth-endpoint-errors.d.ts.map +1 -1
  4. package/dist/auth/auth-endpoint-errors.js +11 -0
  5. package/dist/auth/auth-endpoint-errors.js.map +1 -1
  6. package/dist/auth/auth-endpoint-errors.test.js +8 -0
  7. package/dist/auth/auth-endpoint-errors.test.js.map +1 -1
  8. package/dist/auth/auth-error-codes.d.ts +32 -0
  9. package/dist/auth/auth-error-codes.d.ts.map +1 -1
  10. package/dist/auth/auth-error-codes.js +32 -0
  11. package/dist/auth/auth-error-codes.js.map +1 -1
  12. package/dist/auth/firebase-admin-auth.d.ts +48 -0
  13. package/dist/auth/firebase-admin-auth.d.ts.map +1 -1
  14. package/dist/auth/firebase-admin-auth.js +248 -1
  15. package/dist/auth/firebase-admin-auth.js.map +1 -1
  16. package/dist/auth/firebase-admin-auth.test.js +391 -1
  17. package/dist/auth/firebase-admin-auth.test.js.map +1 -1
  18. package/dist/auth/firebase-auth-endpoints.d.ts +174 -1
  19. package/dist/auth/firebase-auth-endpoints.d.ts.map +1 -1
  20. package/dist/auth/firebase-auth-endpoints.js +232 -4
  21. package/dist/auth/firebase-auth-endpoints.js.map +1 -1
  22. package/dist/auth/firebase-auth-endpoints.test.js +210 -3
  23. package/dist/auth/firebase-auth-endpoints.test.js.map +1 -1
  24. package/dist/auth/firebase-auth.d.ts +7 -0
  25. package/dist/auth/firebase-auth.d.ts.map +1 -1
  26. package/dist/auth/firebase-auth.js +45 -3
  27. package/dist/auth/firebase-auth.js.map +1 -1
  28. package/dist/auth/firebase-auth.test.js +3 -3
  29. package/dist/auth/firebase-auth.test.js.map +1 -1
  30. package/dist/auth/firebase-types.d.ts +16 -6
  31. package/dist/auth/firebase-types.d.ts.map +1 -1
  32. package/dist/auth/oauth.d.ts +2 -2
  33. package/dist/auth/oauth.d.ts.map +1 -1
  34. package/dist/auth/oauth.js +8 -8
  35. package/dist/auth/oauth.js.map +1 -1
  36. package/dist/auth/oauth.test.js +11 -7
  37. package/dist/auth/oauth.test.js.map +1 -1
  38. package/dist/auth/user-record.d.ts +69 -0
  39. package/dist/auth/user-record.d.ts.map +1 -0
  40. package/dist/auth/user-record.js +104 -0
  41. package/dist/auth/user-record.js.map +1 -0
  42. package/dist/auth/user-record.test.d.ts +2 -0
  43. package/dist/auth/user-record.test.d.ts.map +1 -0
  44. package/dist/auth/user-record.test.js +198 -0
  45. package/dist/auth/user-record.test.js.map +1 -0
  46. package/dist/auth/user-request.d.ts +88 -0
  47. package/dist/auth/user-request.d.ts.map +1 -0
  48. package/dist/auth/user-request.js +242 -0
  49. package/dist/auth/user-request.js.map +1 -0
  50. package/dist/auth/user-request.test.d.ts +2 -0
  51. package/dist/auth/user-request.test.d.ts.map +1 -0
  52. package/dist/auth/user-request.test.js +269 -0
  53. package/dist/auth/user-request.test.js.map +1 -0
  54. package/dist/firebase-edge-errors.d.ts +4 -0
  55. package/dist/firebase-edge-errors.d.ts.map +1 -1
  56. package/dist/firebase-edge-errors.js +4 -0
  57. package/dist/firebase-edge-errors.js.map +1 -1
  58. package/dist/firebase-edge-server.d.ts +32 -0
  59. package/dist/firebase-edge-server.d.ts.map +1 -1
  60. package/dist/firebase-edge-server.js +170 -3
  61. package/dist/firebase-edge-server.js.map +1 -1
  62. package/package.json +8 -4
@@ -1 +1 @@
1
- {"version":3,"file":"oauth.d.ts","sourceRoot":"","sources":["../../src/auth/oauth.ts"],"names":[],"mappings":"AAAA,wBAAgB,yBAAyB,CACrC,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACzC,SAAS,CAAC,EAAE,MAAM,EAAE,UAyBvB;AAED,wBAAgB,yBAAyB,CACrC,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,YAAY,CAAC,EAAE,MAAM,EACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACzC,SAAS,CAAC,EAAE,MAAM,EAAE,UAiCvB"}
1
+ {"version":3,"file":"oauth.d.ts","sourceRoot":"","sources":["../../src/auth/oauth.ts"],"names":[],"mappings":"AAAA,wBAAgB,yBAAyB,CACrC,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,MAAM,GAAE,QAAQ,GAAG,MAAiB,EACpC,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACzC,SAAS,CAAC,EAAE,MAAM,EAAE,UAwBvB;AAED,wBAAgB,yBAAyB,CACrC,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,MAAM,GAAE,QAAQ,GAAG,MAAiB,EACpC,YAAY,CAAC,EAAE,MAAM,EACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACzC,SAAS,CAAC,EAAE,MAAM,EAAE,UAkCvB"}
@@ -1,5 +1,4 @@
1
- export function createGitHubOAuthLoginUrl(redirect_uri, path, client_id, customParameters, addScopes) {
2
- // Build scope string with default scopes and additional ones
1
+ export function createGitHubOAuthLoginUrl(redirect_uri, path, client_id, intent = 'signin', customParameters, addScopes) {
3
2
  const baseScopes = ['read:user', 'user:email'];
4
3
  const scopes = addScopes ? [...baseScopes, ...addScopes] : baseScopes;
5
4
  const params = {
@@ -7,18 +6,18 @@ export function createGitHubOAuthLoginUrl(redirect_uri, path, client_id, customP
7
6
  redirect_uri,
8
7
  scope: scopes.join(' '),
9
8
  state: JSON.stringify({
9
+ intent,
10
10
  next: path,
11
11
  provider: 'github'
12
12
  })
13
13
  };
14
- // Add custom parameters if provided (e.g., 'login', 'allow_signup')
15
14
  if (customParameters) {
16
15
  Object.assign(params, customParameters);
17
16
  }
18
- return new URL('https://github.com/login/oauth/authorize?' +
19
- new URLSearchParams(params).toString()).toString();
17
+ return ('https://github.com/login/oauth/authorize?' +
18
+ new URLSearchParams(params).toString());
20
19
  }
21
- export function createGoogleOAuthLoginUrl(redirect_uri, path, client_id, languageCode, customParameters, addScopes) {
20
+ export function createGoogleOAuthLoginUrl(redirect_uri, path, client_id, intent = 'signin', languageCode, customParameters, addScopes) {
22
21
  // Build scope string with default scopes and additional ones
23
22
  const baseScopes = ['openid', 'email', 'profile'];
24
23
  const scopes = addScopes ? [...baseScopes, ...addScopes] : baseScopes;
@@ -30,6 +29,7 @@ export function createGoogleOAuthLoginUrl(redirect_uri, path, client_id, languag
30
29
  access_type: 'offline',
31
30
  prompt: 'consent',
32
31
  state: JSON.stringify({
32
+ intent,
33
33
  next: path,
34
34
  provider: 'google'
35
35
  })
@@ -42,7 +42,7 @@ export function createGoogleOAuthLoginUrl(redirect_uri, path, client_id, languag
42
42
  if (customParameters) {
43
43
  Object.assign(params, customParameters);
44
44
  }
45
- return new URL('https://accounts.google.com/o/oauth2/v2/auth?' +
46
- new URLSearchParams(params).toString()).toString();
45
+ return ('https://accounts.google.com/o/oauth2/v2/auth?' +
46
+ new URLSearchParams(params).toString());
47
47
  }
48
48
  //# sourceMappingURL=oauth.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"oauth.js","sourceRoot":"","sources":["../../src/auth/oauth.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,yBAAyB,CACrC,YAAoB,EACpB,IAAY,EACZ,SAAiB,EACjB,gBAAyC,EACzC,SAAoB;IAEpB,6DAA6D;IAC7D,MAAM,UAAU,GAAG,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;IAC/C,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;IAEtE,MAAM,MAAM,GAA2B;QACnC,SAAS;QACT,YAAY;QACZ,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;QACvB,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC;YAClB,IAAI,EAAE,IAAI;YACV,QAAQ,EAAE,QAAQ;SACrB,CAAC;KACL,CAAC;IAEF,oEAAoE;IACpE,IAAI,gBAAgB,EAAE,CAAC;QACnB,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAC5C,CAAC;IAED,OAAO,IAAI,GAAG,CACV,2CAA2C;QACvC,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAC7C,CAAC,QAAQ,EAAE,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,yBAAyB,CACrC,YAAoB,EACpB,IAAY,EACZ,SAAiB,EACjB,YAAqB,EACrB,gBAAyC,EACzC,SAAoB;IAEpB,6DAA6D;IAC7D,MAAM,UAAU,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;IAClD,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;IAEtE,MAAM,MAAM,GAA2B;QACnC,SAAS;QACT,YAAY;QACZ,aAAa,EAAE,MAAM;QACrB,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;QACvB,WAAW,EAAE,SAAS;QACtB,MAAM,EAAE,SAAS;QACjB,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC;YAClB,IAAI,EAAE,IAAI;YACV,QAAQ,EAAE,QAAQ;SACrB,CAAC;KACL,CAAC;IAEF,gEAAgE;IAChE,IAAI,YAAY,EAAE,CAAC;QACf,MAAM,CAAC,EAAE,GAAG,YAAY,CAAC;IAC7B,CAAC;IAED,iFAAiF;IACjF,IAAI,gBAAgB,EAAE,CAAC;QACnB,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAC5C,CAAC;IAED,OAAO,IAAI,GAAG,CACV,+CAA+C;QAC3C,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAC7C,CAAC,QAAQ,EAAE,CAAC;AACjB,CAAC"}
1
+ {"version":3,"file":"oauth.js","sourceRoot":"","sources":["../../src/auth/oauth.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,yBAAyB,CACrC,YAAoB,EACpB,IAAY,EACZ,SAAiB,EACjB,SAA4B,QAAQ,EACpC,gBAAyC,EACzC,SAAoB;IAEpB,MAAM,UAAU,GAAG,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;IAC/C,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;IAEtE,MAAM,MAAM,GAA2B;QACnC,SAAS;QACT,YAAY;QACZ,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;QACvB,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC;YAClB,MAAM;YACN,IAAI,EAAE,IAAI;YACV,QAAQ,EAAE,QAAQ;SACrB,CAAC;KACL,CAAC;IAEF,IAAI,gBAAgB,EAAE,CAAC;QACnB,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAC5C,CAAC;IAED,OAAO,CACH,2CAA2C;QAC3C,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CACzC,CAAC;AACN,CAAC;AAED,MAAM,UAAU,yBAAyB,CACrC,YAAoB,EACpB,IAAY,EACZ,SAAiB,EACjB,SAA4B,QAAQ,EACpC,YAAqB,EACrB,gBAAyC,EACzC,SAAoB;IAEpB,6DAA6D;IAC7D,MAAM,UAAU,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;IAClD,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;IAEtE,MAAM,MAAM,GAA2B;QACnC,SAAS;QACT,YAAY;QACZ,aAAa,EAAE,MAAM;QACrB,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;QACvB,WAAW,EAAE,SAAS;QACtB,MAAM,EAAE,SAAS;QACjB,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC;YAClB,MAAM;YACN,IAAI,EAAE,IAAI;YACV,QAAQ,EAAE,QAAQ;SACrB,CAAC;KACL,CAAC;IAEF,gEAAgE;IAChE,IAAI,YAAY,EAAE,CAAC;QACf,MAAM,CAAC,EAAE,GAAG,YAAY,CAAC;IAC7B,CAAC;IAED,iFAAiF;IACjF,IAAI,gBAAgB,EAAE,CAAC;QACnB,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAC5C,CAAC;IAED,OAAO,CACH,+CAA+C;QAC/C,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CACzC,CAAC;AACN,CAAC"}
@@ -11,6 +11,7 @@ describe('OAuth', () => {
11
11
  expect(parsed.searchParams.get('redirect_uri')).toBe('https://example.com/callback');
12
12
  expect(parsed.searchParams.get('scope')).toBe('read:user user:email');
13
13
  expect(JSON.parse(parsed.searchParams.get('state') ?? '')).toEqual({
14
+ intent: 'signin',
14
15
  next: '/next/path',
15
16
  provider: 'github'
16
17
  });
@@ -23,20 +24,21 @@ describe('OAuth', () => {
23
24
  const state = JSON.parse(parsed.searchParams.get('state') ?? '{}');
24
25
  expect(state.next).toBe('/dashboard?tab=settings&theme=dark');
25
26
  expect(state.provider).toBe('github');
27
+ expect(state.intent).toBe('signin');
26
28
  });
27
29
  it('adds custom parameters to URL', () => {
28
- const url = createGitHubOAuthLoginUrl('https://example.com/callback', '/next/path', 'client-123', { login: 'testuser', allow_signup: 'false' });
30
+ const url = createGitHubOAuthLoginUrl('https://example.com/callback', '/next/path', 'client-123', 'signin', { login: 'testuser', allow_signup: 'false' });
29
31
  const parsed = new URL(url);
30
32
  expect(parsed.searchParams.get('login')).toBe('testuser');
31
33
  expect(parsed.searchParams.get('allow_signup')).toBe('false');
32
34
  });
33
35
  it('adds additional scopes to default scopes', () => {
34
- const url = createGitHubOAuthLoginUrl('https://example.com/callback', '/next/path', 'client-123', undefined, ['repo', 'gist']);
36
+ const url = createGitHubOAuthLoginUrl('https://example.com/callback', '/next/path', 'client-123', 'signin', undefined, ['repo', 'gist']);
35
37
  const parsed = new URL(url);
36
38
  expect(parsed.searchParams.get('scope')).toBe('read:user user:email repo gist');
37
39
  });
38
40
  it('combines custom parameters and additional scopes', () => {
39
- const url = createGitHubOAuthLoginUrl('https://example.com/callback', '/next/path', 'client-123', { login: 'testuser' }, ['repo']);
41
+ const url = createGitHubOAuthLoginUrl('https://example.com/callback', '/next/path', 'client-123', 'signin', { login: 'testuser' }, ['repo']);
40
42
  const parsed = new URL(url);
41
43
  expect(parsed.searchParams.get('login')).toBe('testuser');
42
44
  expect(parsed.searchParams.get('scope')).toBe('read:user user:email repo');
@@ -54,23 +56,24 @@ describe('OAuth', () => {
54
56
  expect(parsed.searchParams.get('access_type')).toBe('offline');
55
57
  expect(parsed.searchParams.get('prompt')).toBe('consent');
56
58
  expect(JSON.parse(parsed.searchParams.get('state') ?? '')).toEqual({
59
+ intent: 'signin',
57
60
  next: '/next/path',
58
61
  provider: 'google'
59
62
  });
60
63
  });
61
64
  it('adds language code parameter', () => {
62
- const url = createGoogleOAuthLoginUrl('https://example.com/callback', '/next/path', 'client-123', 'es');
65
+ const url = createGoogleOAuthLoginUrl('https://example.com/callback', '/next/path', 'client-123', 'signin', 'es');
63
66
  const parsed = new URL(url);
64
67
  expect(parsed.searchParams.get('hl')).toBe('es');
65
68
  });
66
69
  it('adds custom parameters to URL', () => {
67
- const url = createGoogleOAuthLoginUrl('https://example.com/callback', '/next/path', 'client-123', undefined, { login_hint: 'user@example.com', hd: 'example.com' });
70
+ const url = createGoogleOAuthLoginUrl('https://example.com/callback', '/next/path', 'client-123', 'signin', undefined, { login_hint: 'user@example.com', hd: 'example.com' });
68
71
  const parsed = new URL(url);
69
72
  expect(parsed.searchParams.get('login_hint')).toBe('user@example.com');
70
73
  expect(parsed.searchParams.get('hd')).toBe('example.com');
71
74
  });
72
75
  it('adds additional scopes to default scopes', () => {
73
- const url = createGoogleOAuthLoginUrl('https://example.com/callback', '/next/path', 'client-123', undefined, undefined, [
76
+ const url = createGoogleOAuthLoginUrl('https://example.com/callback', '/next/path', 'client-123', 'signin', undefined, undefined, [
74
77
  'https://www.googleapis.com/auth/calendar.readonly',
75
78
  'https://www.googleapis.com/auth/drive.file'
76
79
  ]);
@@ -78,7 +81,7 @@ describe('OAuth', () => {
78
81
  expect(parsed.searchParams.get('scope')).toBe('openid email profile https://www.googleapis.com/auth/calendar.readonly https://www.googleapis.com/auth/drive.file');
79
82
  });
80
83
  it('combines language code, custom parameters, and additional scopes', () => {
81
- const url = createGoogleOAuthLoginUrl('https://example.com/callback', '/next/path', 'client-123', 'fr', { login_hint: 'user@example.com' }, ['https://www.googleapis.com/auth/calendar.readonly']);
84
+ const url = createGoogleOAuthLoginUrl('https://example.com/callback', '/next/path', 'client-123', 'signin', 'fr', { login_hint: 'user@example.com' }, ['https://www.googleapis.com/auth/calendar.readonly']);
82
85
  const parsed = new URL(url);
83
86
  expect(parsed.searchParams.get('hl')).toBe('fr');
84
87
  expect(parsed.searchParams.get('login_hint')).toBe('user@example.com');
@@ -92,6 +95,7 @@ describe('OAuth', () => {
92
95
  const parsed = new URL(url);
93
96
  const state = JSON.parse(parsed.searchParams.get('state') ?? '{}');
94
97
  expect(state.next).toBe('/path with spaces & symbols!');
98
+ expect(state.intent).toBe('signin');
95
99
  });
96
100
  it('properly encodes special characters in Google URLs', () => {
97
101
  const url = createGoogleOAuthLoginUrl('https://example.com/auth/callback?foo=bar&baz=qux', '/admin/users?filter=active&sort=name', 'client@example.com');
@@ -1 +1 @@
1
- {"version":3,"file":"oauth.test.js","sourceRoot":"","sources":["../../src/auth/oauth.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"oauth.test.js","sourceRoot":"","sources":["../../src/auth/oauth.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,69 @@
1
+ import type { UserInfo, UserMetadata } from './firebase-types.js';
2
+ import type { UserIdentifier } from './user-request.js';
3
+ export interface GetUsersResult {
4
+ users: UserRecord[];
5
+ notFound: UserIdentifier[];
6
+ }
7
+ /** Convert a batch lookup response and retain identifiers with no matching user. */
8
+ export declare function createGetUsersResult(identifiers: UserIdentifier[], response: ListUsersResponse): GetUsersResult;
9
+ type Serializable<T> = T & {
10
+ toJSON(): object;
11
+ };
12
+ export interface ListUsersResult {
13
+ users: UserRecord[];
14
+ pageToken?: string;
15
+ }
16
+ export interface UserRecord {
17
+ readonly uid: string;
18
+ readonly email?: string;
19
+ readonly emailVerified: boolean;
20
+ readonly displayName?: string;
21
+ readonly photoURL?: string;
22
+ readonly phoneNumber?: string;
23
+ readonly disabled: boolean;
24
+ readonly metadata: Serializable<UserMetadata>;
25
+ readonly providerData: Serializable<{
26
+ uid: string;
27
+ providerId: string;
28
+ email?: string;
29
+ displayName?: string;
30
+ photoURL?: string;
31
+ phoneNumber?: string;
32
+ }>[];
33
+ readonly passwordHash?: string;
34
+ readonly passwordSalt?: string;
35
+ readonly customClaims?: Record<string, any>;
36
+ readonly tokensValidAfterTime?: string;
37
+ readonly tenantId?: string;
38
+ readonly multiFactor?: Serializable<{
39
+ enrolledFactors: Serializable<{
40
+ uid: string;
41
+ displayName?: string;
42
+ factorId: string;
43
+ enrollmentTime?: string | null;
44
+ phoneNumber?: string;
45
+ totpInfo?: Record<string, unknown>;
46
+ }>[];
47
+ }>;
48
+ toJSON(): object;
49
+ }
50
+ export interface ListUsersResponse {
51
+ users?: (UserInfo & {
52
+ phoneNumber?: string;
53
+ passwordHash?: string;
54
+ salt?: string;
55
+ tenantId?: string;
56
+ mfaInfo?: {
57
+ mfaEnrollmentId: string;
58
+ displayName?: string;
59
+ enrolledAt?: string;
60
+ phoneInfo?: string;
61
+ totpInfo?: Record<string, unknown>;
62
+ }[];
63
+ })[];
64
+ nextPageToken?: string;
65
+ }
66
+ /** Convert the batchGet wire format to the Firebase Admin user record shape. */
67
+ export declare function createUserRecord(user: NonNullable<ListUsersResponse['users']>[number]): UserRecord;
68
+ export {};
69
+ //# sourceMappingURL=user-record.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-record.d.ts","sourceRoot":"","sources":["../../src/auth/user-record.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,104 @@
1
+ /** Convert a batch lookup response and retain identifiers with no matching user. */
2
+ export function createGetUsersResult(identifiers, response) {
3
+ const users = (response.users ?? []).map(createUserRecord);
4
+ const notFound = identifiers.filter((id) => !users.some((user) => {
5
+ if ('uid' in id)
6
+ return id.uid === user.uid;
7
+ if ('email' in id)
8
+ return id.email === user.email;
9
+ if ('phoneNumber' in id)
10
+ return id.phoneNumber === user.phoneNumber;
11
+ return (user.providerData.find((provider) => provider.providerId === id.providerId)?.uid === id.providerUid);
12
+ }));
13
+ return { users, notFound };
14
+ }
15
+ /** Add SDK-style JSON snapshots without introducing Node.js dependencies. */
16
+ function withJSON(value) {
17
+ return Object.defineProperty(value, 'toJSON', {
18
+ value() {
19
+ // Non-enumerable methods are omitted, including on nested records.
20
+ return structuredClone(this);
21
+ }
22
+ });
23
+ }
24
+ function timestampToUTC(value) {
25
+ if (value === undefined)
26
+ return null;
27
+ const date = new Date(Number.parseInt(String(value), 10));
28
+ if (Number.isNaN(date.getTime()))
29
+ return null;
30
+ return date.toUTCString();
31
+ }
32
+ /** Convert the batchGet wire format to the Firebase Admin user record shape. */
33
+ export function createUserRecord(user) {
34
+ if (!user.localId)
35
+ throw new Error('Invalid user response: missing localId.');
36
+ const providerData = (user.providerUserInfo ?? []).map((provider) => {
37
+ if (!provider.rawId || !provider.providerId) {
38
+ throw new Error('Invalid provider response: missing user or provider ID.');
39
+ }
40
+ return withJSON({
41
+ uid: provider.rawId,
42
+ providerId: provider.providerId,
43
+ email: provider.email,
44
+ displayName: provider.displayName,
45
+ photoURL: provider.photoUrl,
46
+ phoneNumber: provider.phoneNumber
47
+ });
48
+ });
49
+ const enrolledFactors = [];
50
+ for (const factor of user.mfaInfo ?? []) {
51
+ if (!factor?.mfaEnrollmentId)
52
+ continue;
53
+ const isPhone = factor.phoneInfo !== undefined;
54
+ if (isPhone && !factor.phoneInfo)
55
+ continue;
56
+ if (!isPhone && !factor.totpInfo)
57
+ continue;
58
+ enrolledFactors.push(withJSON({
59
+ uid: factor.mfaEnrollmentId,
60
+ displayName: factor.displayName,
61
+ factorId: isPhone ? 'phone' : 'totp',
62
+ enrollmentTime: factor.enrolledAt
63
+ ? new Date(factor.enrolledAt).toUTCString()
64
+ : null,
65
+ ...(isPhone
66
+ ? { phoneNumber: factor.phoneInfo }
67
+ : { totpInfo: factor.totpInfo })
68
+ }));
69
+ }
70
+ return withJSON({
71
+ uid: user.localId,
72
+ email: user.email,
73
+ emailVerified: !!user.emailVerified,
74
+ displayName: user.displayName,
75
+ photoURL: user.photoUrl,
76
+ phoneNumber: user.phoneNumber,
77
+ disabled: user.disabled || false,
78
+ metadata: withJSON({
79
+ creationTime: timestampToUTC(user.createdAt),
80
+ lastSignInTime: timestampToUTC(user.lastLoginAt),
81
+ lastRefreshTime: user.lastRefreshAt
82
+ ? new Date(user.lastRefreshAt).toUTCString()
83
+ : null
84
+ }),
85
+ providerData,
86
+ passwordHash: user.passwordHash === 'UkVEQUNURUQ='
87
+ ? undefined
88
+ : user.passwordHash,
89
+ passwordSalt: user.salt,
90
+ ...(user.customAttributes && {
91
+ customClaims: JSON.parse(user.customAttributes)
92
+ }),
93
+ tokensValidAfterTime: user.validSince === undefined
94
+ ? undefined
95
+ : (timestampToUTC(Number.parseInt(user.validSince, 10) * 1000) ?? undefined),
96
+ tenantId: user.tenantId,
97
+ ...(enrolledFactors.length > 0 && {
98
+ multiFactor: withJSON({
99
+ enrolledFactors: Object.freeze(enrolledFactors)
100
+ })
101
+ })
102
+ });
103
+ }
104
+ //# sourceMappingURL=user-record.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-record.js","sourceRoot":"","sources":["../../src/auth/user-record.ts"],"names":[],"mappings":"AAQA,oFAAoF;AACpF,MAAM,UAAU,oBAAoB,CAChC,WAA6B,EAC7B,QAA2B;IAE3B,MAAM,KAAK,GAAG,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAC3D,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,CAC/B,CAAC,EAAE,EAAE,EAAE,CACH,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;QACjB,IAAI,KAAK,IAAI,EAAE;YAAE,OAAO,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC;QAC5C,IAAI,OAAO,IAAI,EAAE;YAAE,OAAO,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC;QAClD,IAAI,aAAa,IAAI,EAAE;YACnB,OAAO,EAAE,CAAC,WAAW,KAAK,IAAI,CAAC,WAAW,CAAC;QAC/C,OAAO,CACH,IAAI,CAAC,YAAY,CAAC,IAAI,CAClB,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,UAAU,KAAK,EAAE,CAAC,UAAU,CACtD,EAAE,GAAG,KAAK,EAAE,CAAC,WAAW,CAC5B,CAAC;IACN,CAAC,CAAC,CACT,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;AAC/B,CAAC;AA6DD,6EAA6E;AAC7E,SAAS,QAAQ,CAAmB,KAAQ;IACxC,OAAO,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,QAAQ,EAAE;QAC1C,KAAK;YACD,mEAAmE;YACnE,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC;QACjC,CAAC;KACJ,CAAoB,CAAC;AAC1B,CAAC;AAED,SAAS,cAAc,CAAC,KAAkC;IACtD,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACrC,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAC1D,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QAAE,OAAO,IAAI,CAAC;IAC9C,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;AAC9B,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,gBAAgB,CAC5B,IAAqD;IAErD,IAAI,CAAC,IAAI,CAAC,OAAO;QACb,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAE/D,MAAM,YAAY,GAAG,CAAC,IAAI,CAAC,gBAAgB,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE;QAChE,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;YAC1C,MAAM,IAAI,KAAK,CACX,yDAAyD,CAC5D,CAAC;QACN,CAAC;QACD,OAAO,QAAQ,CAAC;YACZ,GAAG,EAAE,QAAQ,CAAC,KAAK;YACnB,UAAU,EAAE,QAAQ,CAAC,UAAU;YAC/B,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,WAAW,EAAE,QAAQ,CAAC,WAAW;YACjC,QAAQ,EAAE,QAAQ,CAAC,QAAQ;YAC3B,WAAW,EAAE,QAAQ,CAAC,WAAW;SACpC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IACH,MAAM,eAAe,GAEE,EAAE,CAAC;IAC1B,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC;QACtC,IAAI,CAAC,MAAM,EAAE,eAAe;YAAE,SAAS;QACvC,MAAM,OAAO,GAAG,MAAM,CAAC,SAAS,KAAK,SAAS,CAAC;QAC/C,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS;YAAE,SAAS;QAC3C,IAAI,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ;YAAE,SAAS;QAC3C,eAAe,CAAC,IAAI,CAChB,QAAQ,CAAC;YACL,GAAG,EAAE,MAAM,CAAC,eAAe;YAC3B,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM;YACpC,cAAc,EAAE,MAAM,CAAC,UAAU;gBAC7B,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE;gBAC3C,CAAC,CAAC,IAAI;YACV,GAAG,CAAC,OAAO;gBACP,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,SAAS,EAAE;gBACnC,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC;SACvC,CAAC,CACL,CAAC;IACN,CAAC;IAED,OAAO,QAAQ,CAAC;QACZ,GAAG,EAAE,IAAI,CAAC,OAAO;QACjB,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,aAAa,EAAE,CAAC,CAAC,IAAI,CAAC,aAAa;QACnC,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,KAAK;QAChC,QAAQ,EAAE,QAAQ,CAAC;YACf,YAAY,EAAE,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC;YAC5C,cAAc,EAAE,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;YAChD,eAAe,EAAE,IAAI,CAAC,aAAa;gBAC/B,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,WAAW,EAAE;gBAC5C,CAAC,CAAC,IAAI;SACb,CAAC;QACF,YAAY;QACZ,YAAY,EACR,IAAI,CAAC,YAAY,KAAK,cAAc;YAChC,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,IAAI,CAAC,YAAY;QAC3B,YAAY,EAAE,IAAI,CAAC,IAAI;QACvB,GAAG,CAAC,IAAI,CAAC,gBAAgB,IAAI;YACzB,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC;SAClD,CAAC;QACF,oBAAoB,EAChB,IAAI,CAAC,UAAU,KAAK,SAAS;YACzB,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,CAAC,cAAc,CACX,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC,GAAG,IAAI,CAC9C,IAAI,SAAS,CAAC;QACzB,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,GAAG,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,IAAI;YAC9B,WAAW,EAAE,QAAQ,CAAC;gBAClB,eAAe,EAAE,MAAM,CAAC,MAAM,CAC1B,eAAe,CACQ;aAC9B,CAAC;SACL,CAAC;KACL,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=user-record.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-record.test.d.ts","sourceRoot":"","sources":["../../src/auth/user-record.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,198 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { createUserRecord, createGetUsersResult } from './user-record.js';
3
+ describe('createGetUsersResult', () => {
4
+ it('matches primary identifiers and provider UIDs independently of result order', () => {
5
+ const missing = { uid: 'missing' };
6
+ const ids = [
7
+ { uid: 'one' },
8
+ { email: 'user@example.com' },
9
+ { phoneNumber: '+15555550100' },
10
+ { providerId: 'google.com', providerUid: 'external' },
11
+ missing
12
+ ];
13
+ const result = createGetUsersResult(ids, {
14
+ users: [
15
+ { localId: 'two', phoneNumber: '+15555550100' },
16
+ {
17
+ localId: 'one',
18
+ email: 'user@example.com',
19
+ providerUserInfo: [
20
+ { providerId: 'google.com', rawId: 'external' }
21
+ ]
22
+ }
23
+ ]
24
+ });
25
+ expect(result.users.map((user) => user.uid)).toEqual(['two', 'one']);
26
+ expect(result.notFound).toEqual([missing]);
27
+ expect(result.notFound[0]).toBe(missing);
28
+ expect(result.users[0]?.toJSON()).toMatchObject({ uid: 'two' });
29
+ });
30
+ it('keeps unmatched duplicates and does not match provider emails as primary emails', () => {
31
+ const ids = [
32
+ { email: 'linked@example.com' },
33
+ { uid: 'missing' },
34
+ { uid: 'missing' },
35
+ { providerId: 'github.com', providerUid: 'external' },
36
+ { providerId: 'google.com', providerUid: 'wrong' }
37
+ ];
38
+ const result = createGetUsersResult(ids, {
39
+ users: [
40
+ {
41
+ localId: 'one',
42
+ providerUserInfo: [
43
+ {
44
+ providerId: 'google.com',
45
+ rawId: 'external',
46
+ email: 'linked@example.com'
47
+ }
48
+ ]
49
+ }
50
+ ]
51
+ });
52
+ expect(result.notFound).toEqual(ids);
53
+ });
54
+ it('marks all identifiers missing when users are omitted', () => {
55
+ const ids = [{ uid: 'missing' }];
56
+ expect(createGetUsersResult(ids, {})).toEqual({
57
+ users: [],
58
+ notFound: ids
59
+ });
60
+ expect(createGetUsersResult([], {})).toEqual({
61
+ users: [],
62
+ notFound: []
63
+ });
64
+ });
65
+ it('does not duplicate a returned record for repeated identifiers', () => {
66
+ expect(createGetUsersResult([{ uid: 'one' }, { uid: 'one' }], {
67
+ users: [{ localId: 'one' }]
68
+ }).users).toHaveLength(1);
69
+ });
70
+ });
71
+ describe('createUserRecord', () => {
72
+ it('maps profile, metadata, providers, claims, password fields, and MFA', () => {
73
+ const user = createUserRecord({
74
+ localId: 'uid',
75
+ email: 'user@example.com',
76
+ emailVerified: true,
77
+ displayName: 'User',
78
+ photoUrl: 'https://example.com/photo',
79
+ phoneNumber: '+15555550100',
80
+ disabled: true,
81
+ createdAt: '1000',
82
+ lastLoginAt: '2000',
83
+ lastRefreshAt: '2025-01-01T00:00:00Z',
84
+ validSince: '3',
85
+ passwordHash: 'hash',
86
+ salt: 'salt',
87
+ customAttributes: '{"roles":["admin"]}',
88
+ tenantId: 'tenant',
89
+ providerUserInfo: [
90
+ {
91
+ rawId: 'provider-uid',
92
+ providerId: 'google.com',
93
+ photoUrl: 'https://example.com/provider'
94
+ }
95
+ ],
96
+ mfaInfo: [
97
+ {
98
+ mfaEnrollmentId: 'phone',
99
+ phoneInfo: '+15555550100',
100
+ enrolledAt: '2025-01-01T00:00:00Z',
101
+ displayName: 'Phone'
102
+ },
103
+ { mfaEnrollmentId: 'totp', totpInfo: {} },
104
+ { mfaEnrollmentId: 'unsupported' },
105
+ { mfaEnrollmentId: '', phoneInfo: '+15555550100' },
106
+ {
107
+ mfaEnrollmentId: 'invalid-date',
108
+ phoneInfo: '+15555550100',
109
+ enrolledAt: 'invalid'
110
+ }
111
+ ]
112
+ });
113
+ expect(user).toMatchObject({
114
+ uid: 'uid',
115
+ email: 'user@example.com',
116
+ emailVerified: true,
117
+ displayName: 'User',
118
+ photoURL: 'https://example.com/photo',
119
+ phoneNumber: '+15555550100',
120
+ disabled: true,
121
+ passwordHash: 'hash',
122
+ passwordSalt: 'salt',
123
+ tenantId: 'tenant',
124
+ customClaims: { roles: ['admin'] },
125
+ tokensValidAfterTime: 'Thu, 01 Jan 1970 00:00:03 GMT'
126
+ });
127
+ expect(user.metadata.toJSON()).toEqual({
128
+ creationTime: 'Thu, 01 Jan 1970 00:00:01 GMT',
129
+ lastSignInTime: 'Thu, 01 Jan 1970 00:00:02 GMT',
130
+ lastRefreshTime: 'Wed, 01 Jan 2025 00:00:00 GMT'
131
+ });
132
+ expect(user.providerData[0]?.toJSON()).toMatchObject({
133
+ uid: 'provider-uid',
134
+ providerId: 'google.com',
135
+ photoURL: 'https://example.com/provider'
136
+ });
137
+ expect(user.multiFactor?.enrolledFactors).toHaveLength(3);
138
+ expect(user.multiFactor?.enrolledFactors[0]?.toJSON()).toMatchObject({
139
+ uid: 'phone',
140
+ factorId: 'phone',
141
+ phoneNumber: '+15555550100',
142
+ enrollmentTime: 'Wed, 01 Jan 2025 00:00:00 GMT'
143
+ });
144
+ expect(user.multiFactor?.enrolledFactors[1]?.toJSON()).toMatchObject({
145
+ uid: 'totp',
146
+ factorId: 'totp',
147
+ totpInfo: {},
148
+ enrollmentTime: null
149
+ });
150
+ expect(user.multiFactor?.enrolledFactors[2]?.enrollmentTime).toBe('Invalid Date');
151
+ expect(user.multiFactor?.toJSON()).toEqual({
152
+ enrolledFactors: user.multiFactor?.enrolledFactors.map((factor) => factor.toJSON())
153
+ });
154
+ const json = user.toJSON();
155
+ expect(json).not.toHaveProperty('toJSON');
156
+ expect(json.metadata).not.toHaveProperty('toJSON');
157
+ json.customClaims.roles.push('editor');
158
+ expect(user.customClaims?.roles).toEqual(['admin']);
159
+ expect(JSON.parse(JSON.stringify(user))).toMatchObject({
160
+ uid: 'uid',
161
+ providerData: [{ uid: 'provider-uid' }]
162
+ });
163
+ });
164
+ it('normalizes missing and invalid dates and hides redacted password hashes', () => {
165
+ const user = createUserRecord({
166
+ localId: 'uid',
167
+ createdAt: 'invalid',
168
+ validSince: 'invalid',
169
+ passwordHash: 'UkVEQUNURUQ='
170
+ });
171
+ expect(user.metadata.toJSON()).toEqual({
172
+ creationTime: null,
173
+ lastSignInTime: null,
174
+ lastRefreshTime: null
175
+ });
176
+ expect(user.tokensValidAfterTime).toBeUndefined();
177
+ expect(user.passwordHash).toBeUndefined();
178
+ expect(user).not.toHaveProperty('multiFactor');
179
+ expect(user.providerData).toEqual([]);
180
+ });
181
+ it('preserves empty password hash and salt for imported accounts', () => {
182
+ const user = createUserRecord({
183
+ localId: 'uid',
184
+ passwordHash: '',
185
+ salt: ''
186
+ });
187
+ expect(user.passwordHash).toBe('');
188
+ expect(user.passwordSalt).toBe('');
189
+ });
190
+ it.each([
191
+ { localId: '' },
192
+ { localId: 'uid', providerUserInfo: [{ providerId: 'google.com' }] },
193
+ { localId: 'uid', providerUserInfo: [{ rawId: 'provider-uid' }] }
194
+ ])('rejects malformed user/provider records', (user) => {
195
+ expect(() => createUserRecord(user)).toThrow();
196
+ });
197
+ });
198
+ //# sourceMappingURL=user-record.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-record.test.js","sourceRoot":"","sources":["../../src/auth/user-record.test.ts"],"names":[],"mappings":"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"}