firebase-admin-edge 2.0.0 → 3.0.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.
- package/README.md +2 -0
- package/dist/app-check/app-check.d.ts +7 -2
- package/dist/app-check/app-check.d.ts.map +1 -1
- package/dist/app-check/app-check.js +6 -5
- package/dist/app-check/app-check.js.map +1 -1
- package/dist/auth/firebase-admin-auth.d.ts +30 -7
- package/dist/auth/firebase-admin-auth.d.ts.map +1 -1
- package/dist/auth/firebase-admin-auth.js +138 -11
- package/dist/auth/firebase-admin-auth.js.map +1 -1
- package/dist/auth/firebase-auth-endpoints.d.ts +29 -0
- package/dist/auth/firebase-auth-endpoints.d.ts.map +1 -1
- package/dist/auth/firebase-auth-endpoints.js +84 -0
- package/dist/auth/firebase-auth-endpoints.js.map +1 -1
- package/dist/auth/firebase-auth.d.ts +6 -4
- package/dist/auth/firebase-auth.d.ts.map +1 -1
- package/dist/auth/firebase-auth.js +5 -5
- package/dist/auth/firebase-auth.js.map +1 -1
- package/dist/auth/identity-builder-types.d.ts +36 -0
- package/dist/auth/identity-builder-types.d.ts.map +1 -0
- package/dist/auth/identity-builder-types.js +2 -0
- package/dist/auth/identity-builder-types.js.map +1 -0
- package/dist/auth/identity-count-query.d.ts +17 -0
- package/dist/auth/identity-count-query.d.ts.map +1 -0
- package/dist/auth/identity-count-query.js +51 -0
- package/dist/auth/identity-count-query.js.map +1 -0
- package/dist/auth/identity-filter.d.ts +9 -0
- package/dist/auth/identity-filter.d.ts.map +1 -0
- package/dist/auth/identity-filter.js +129 -0
- package/dist/auth/identity-filter.js.map +1 -0
- package/dist/auth/identity-query.d.ts +11 -0
- package/dist/auth/identity-query.d.ts.map +1 -0
- package/dist/auth/identity-query.js +122 -0
- package/dist/auth/identity-query.js.map +1 -0
- package/dist/auth/identity-reference.d.ts +131 -0
- package/dist/auth/identity-reference.d.ts.map +1 -0
- package/dist/auth/identity-reference.js +293 -0
- package/dist/auth/identity-reference.js.map +1 -0
- package/dist/auth/identity-types.d.ts +44 -0
- package/dist/auth/identity-types.d.ts.map +1 -0
- package/dist/auth/identity-types.js +2 -0
- package/dist/auth/identity-types.js.map +1 -0
- package/dist/auth/identity-write.d.ts +41 -0
- package/dist/auth/identity-write.d.ts.map +1 -0
- package/dist/auth/identity-write.js +146 -0
- package/dist/auth/identity-write.js.map +1 -0
- package/dist/auth/identity.d.ts +84 -0
- package/dist/auth/identity.d.ts.map +1 -0
- package/dist/auth/identity.js +319 -0
- package/dist/auth/identity.js.map +1 -0
- package/dist/auth/user-import.d.ts +7 -1
- package/dist/auth/user-import.d.ts.map +1 -1
- package/dist/auth/user-import.js +53 -15
- package/dist/auth/user-import.js.map +1 -1
- package/dist/auth/user-record.d.ts +1 -0
- package/dist/auth/user-record.d.ts.map +1 -1
- package/dist/auth/user-record.js +5 -0
- package/dist/auth/user-record.js.map +1 -1
- package/dist/auth/user-request.d.ts +4 -1
- package/dist/auth/user-request.d.ts.map +1 -1
- package/dist/auth/user-request.js +7 -4
- package/dist/auth/user-request.js.map +1 -1
- package/dist/db/firestore.d.ts +7 -1
- package/dist/db/firestore.d.ts.map +1 -1
- package/dist/db/firestore.js +16 -8
- package/dist/db/firestore.js.map +1 -1
- package/dist/firebase-edge-server.d.ts +2 -0
- package/dist/firebase-edge-server.d.ts.map +1 -1
- package/dist/firebase-edge-server.js +37 -5
- package/dist/firebase-edge-server.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/storage/storage.d.ts +10 -3
- package/dist/storage/storage.d.ts.map +1 -1
- package/dist/storage/storage.js +17 -4
- package/dist/storage/storage.js.map +1 -1
- package/package.json +3 -3
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { type UserImportRecord, type UserMetadataRequest } from './user-import.js';
|
|
2
|
+
import { type CreateRequest, type UpdateRequest } from './user-request.js';
|
|
3
|
+
import { FirebaseEdgeError } from './errors.js';
|
|
4
|
+
export type IdentityImportRecord<Claims extends object = Record<string, unknown>> = Omit<UserImportRecord, 'customClaims'> & {
|
|
5
|
+
customClaims?: Partial<Claims> | null;
|
|
6
|
+
};
|
|
7
|
+
export type IdentityCreateData<Claims extends object = Record<string, unknown>> = CreateRequest & {
|
|
8
|
+
customClaims?: Partial<Claims> | null;
|
|
9
|
+
};
|
|
10
|
+
export type IdentityUpdateData<Claims extends object = Record<string, unknown>> = Omit<UpdateRequest, 'password'> & {
|
|
11
|
+
password?: string | null;
|
|
12
|
+
customClaims?: Partial<Claims> | null;
|
|
13
|
+
metadata?: UserMetadataRequest;
|
|
14
|
+
};
|
|
15
|
+
export type IdentitySetData<Claims extends object = Record<string, unknown>> = Pick<IdentityUpdateData<Claims>, 'displayName' | 'photoURL' | 'phoneNumber' | 'disabled' | 'emailVerified' | 'customClaims'> & {
|
|
16
|
+
email?: string | null;
|
|
17
|
+
metadata?: {
|
|
18
|
+
creationTime?: string | null;
|
|
19
|
+
lastSignInTime?: string | null;
|
|
20
|
+
} | null;
|
|
21
|
+
};
|
|
22
|
+
export interface IdentityWriteResult {
|
|
23
|
+
uid: string;
|
|
24
|
+
}
|
|
25
|
+
/** Validate identity writes and combine supported fields in one request. @internal */
|
|
26
|
+
export declare function buildIdentityWriteRequest(data: IdentityCreateData | IdentityUpdateData | IdentitySetData, operation: 'create' | 'update' | 'set'): {
|
|
27
|
+
data: null;
|
|
28
|
+
error: FirebaseEdgeError;
|
|
29
|
+
} | {
|
|
30
|
+
error: null;
|
|
31
|
+
data: import("./firebase-types.js").UpdateAccountRequest;
|
|
32
|
+
};
|
|
33
|
+
/** Validate and serialize metadata for a dedicated UID update. @internal */
|
|
34
|
+
export declare function buildIdentityMetadataRequest(metadata: UserMetadataRequest | IdentitySetData['metadata'], reset?: boolean): {
|
|
35
|
+
error: null;
|
|
36
|
+
data: Record<string, string>;
|
|
37
|
+
} | {
|
|
38
|
+
data: null;
|
|
39
|
+
error: FirebaseEdgeError;
|
|
40
|
+
};
|
|
41
|
+
//# sourceMappingURL=identity-write.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"identity-write.d.ts","sourceRoot":"","sources":["../../src/auth/identity-write.ts"],"names":[],"mappings":"AAAA,OAAO,EAEH,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,EAC3B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAGH,KAAK,aAAa,EAClB,KAAK,aAAa,EACrB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,iBAAiB,EAAe,MAAM,aAAa,CAAC;AAE7D,MAAM,MAAM,oBAAoB,CAC5B,MAAM,SAAS,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAC/C,IAAI,CAAC,gBAAgB,EAAE,cAAc,CAAC,GAAG;IACzC,YAAY,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;CACzC,CAAC;AACF,MAAM,MAAM,kBAAkB,CAC1B,MAAM,SAAS,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAC/C,aAAa,GAAG;IAChB,YAAY,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;CACzC,CAAC;AACF,MAAM,MAAM,kBAAkB,CAC1B,MAAM,SAAS,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAC/C,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC,GAAG;IAClC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,YAAY,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;IACtC,QAAQ,CAAC,EAAE,mBAAmB,CAAC;CAClC,CAAC;AACF,MAAM,MAAM,eAAe,CAAC,MAAM,SAAS,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IACvE,IAAI,CACA,kBAAkB,CAAC,MAAM,CAAC,EACxB,aAAa,GACb,UAAU,GACV,aAAa,GACb,UAAU,GACV,eAAe,GACf,cAAc,CACnB,GAAG;IACA,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,QAAQ,CAAC,EAAE;QACP,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC7B,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KAClC,GAAG,IAAI,CAAC;CACZ,CAAC;AACN,MAAM,WAAW,mBAAmB;IAChC,GAAG,EAAE,MAAM,CAAC;CACf;AAED,sFAAsF;AACtF,wBAAgB,yBAAyB,CACrC,IAAI,EAAE,kBAAkB,GAAG,kBAAkB,GAAG,eAAe,EAC/D,SAAS,EAAE,QAAQ,GAAG,QAAQ,GAAG,KAAK;;;;;;EA2HzC;AAED,4EAA4E;AAC5E,wBAAgB,4BAA4B,CACxC,QAAQ,EAAE,mBAAmB,GAAG,eAAe,CAAC,UAAU,CAAC,EAC3D,KAAK,UAAQ;;;;;;EAkChB"}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import { buildUserMetadata } from './user-import.js';
|
|
2
|
+
import { buildUserRequest, buildCustomClaimsRequest } from './user-request.js';
|
|
3
|
+
import { FirebaseEdgeError, ensureError } from './errors.js';
|
|
4
|
+
/** Validate identity writes and combine supported fields in one request. @internal */
|
|
5
|
+
export function buildIdentityWriteRequest(data, operation) {
|
|
6
|
+
if (!data || typeof data !== 'object' || Array.isArray(data)) {
|
|
7
|
+
return {
|
|
8
|
+
data: null,
|
|
9
|
+
error: new FirebaseEdgeError({
|
|
10
|
+
code: 'auth/invalid-argument',
|
|
11
|
+
message: 'User properties must be an object.'
|
|
12
|
+
})
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
const allowed = new Set([
|
|
16
|
+
'email',
|
|
17
|
+
'emailVerified',
|
|
18
|
+
'displayName',
|
|
19
|
+
'photoURL',
|
|
20
|
+
'phoneNumber',
|
|
21
|
+
'disabled',
|
|
22
|
+
...(operation === 'set'
|
|
23
|
+
? ['customClaims', 'metadata']
|
|
24
|
+
: [
|
|
25
|
+
'password',
|
|
26
|
+
'multiFactor',
|
|
27
|
+
...(operation === 'create'
|
|
28
|
+
? ['uid', 'customClaims']
|
|
29
|
+
: [
|
|
30
|
+
'providerToLink',
|
|
31
|
+
'providersToUnlink',
|
|
32
|
+
'customClaims',
|
|
33
|
+
'metadata'
|
|
34
|
+
])
|
|
35
|
+
])
|
|
36
|
+
]);
|
|
37
|
+
if (Object.keys(data).some((key) => !allowed.has(key))) {
|
|
38
|
+
return {
|
|
39
|
+
data: null,
|
|
40
|
+
error: new FirebaseEdgeError({
|
|
41
|
+
code: 'auth/invalid-argument',
|
|
42
|
+
message: 'Unsupported identity write field.'
|
|
43
|
+
})
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
if (operation === 'set' &&
|
|
47
|
+
data.email == null &&
|
|
48
|
+
data.emailVerified === true) {
|
|
49
|
+
return {
|
|
50
|
+
data: null,
|
|
51
|
+
error: new FirebaseEdgeError({
|
|
52
|
+
code: 'auth/invalid-argument',
|
|
53
|
+
message: 'A verified email requires an email in the replacement.'
|
|
54
|
+
})
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
const properties = operation === 'set'
|
|
58
|
+
? {
|
|
59
|
+
email: data.email ?? undefined,
|
|
60
|
+
displayName: data.displayName ?? null,
|
|
61
|
+
photoURL: data.photoURL ?? null,
|
|
62
|
+
phoneNumber: data.phoneNumber ?? null,
|
|
63
|
+
disabled: data.disabled === undefined ? false : data.disabled,
|
|
64
|
+
emailVerified: data.emailVerified === undefined
|
|
65
|
+
? false
|
|
66
|
+
: data.emailVerified
|
|
67
|
+
}
|
|
68
|
+
: operation === 'update'
|
|
69
|
+
? {
|
|
70
|
+
...data,
|
|
71
|
+
password: data.password ?? undefined
|
|
72
|
+
}
|
|
73
|
+
: data;
|
|
74
|
+
const { error, data: body } = buildUserRequest(properties, operation === 'create' ? 'create' : 'update');
|
|
75
|
+
if (error) {
|
|
76
|
+
return { error, data: null };
|
|
77
|
+
}
|
|
78
|
+
if (operation === 'update') {
|
|
79
|
+
const update = data;
|
|
80
|
+
if (update.password === null) {
|
|
81
|
+
body.deleteAttribute = [
|
|
82
|
+
...(body.deleteAttribute ?? []),
|
|
83
|
+
'PASSWORD'
|
|
84
|
+
];
|
|
85
|
+
}
|
|
86
|
+
if (update.metadata !== undefined) {
|
|
87
|
+
const { error: metadataError, data: metadataBody } = buildIdentityMetadataRequest(update.metadata);
|
|
88
|
+
if (metadataError) {
|
|
89
|
+
return { error: metadataError, data: null };
|
|
90
|
+
}
|
|
91
|
+
Object.assign(body, metadataBody);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
if (operation === 'set' && data.email == null) {
|
|
95
|
+
body.deleteAttribute = [...(body.deleteAttribute ?? []), 'EMAIL'];
|
|
96
|
+
}
|
|
97
|
+
if (operation === 'set') {
|
|
98
|
+
const { error: metadataError, data: metadataBody } = buildIdentityMetadataRequest(data.metadata ?? null, true);
|
|
99
|
+
if (metadataError) {
|
|
100
|
+
return { error: metadataError, data: null };
|
|
101
|
+
}
|
|
102
|
+
Object.assign(body, metadataBody);
|
|
103
|
+
}
|
|
104
|
+
const { customClaims } = data;
|
|
105
|
+
if (operation === 'set' || customClaims !== undefined) {
|
|
106
|
+
const { error: claimsError, data: claimsBody } = buildCustomClaimsRequest(customClaims ?? null);
|
|
107
|
+
if (claimsError) {
|
|
108
|
+
return { error: claimsError, data: null };
|
|
109
|
+
}
|
|
110
|
+
Object.assign(body, claimsBody);
|
|
111
|
+
}
|
|
112
|
+
return { error: null, data: body };
|
|
113
|
+
}
|
|
114
|
+
/** Validate and serialize metadata for a dedicated UID update. @internal */
|
|
115
|
+
export function buildIdentityMetadataRequest(metadata, reset = false) {
|
|
116
|
+
try {
|
|
117
|
+
if (reset &&
|
|
118
|
+
metadata != null &&
|
|
119
|
+
(typeof metadata !== 'object' || Array.isArray(metadata))) {
|
|
120
|
+
throw new Error('metadata must be an object or null.');
|
|
121
|
+
}
|
|
122
|
+
const properties = reset
|
|
123
|
+
? {
|
|
124
|
+
...metadata,
|
|
125
|
+
creationTime: metadata?.creationTime ?? '1970-01-01T00:00:00.000Z',
|
|
126
|
+
lastSignInTime: metadata?.lastSignInTime ?? '1970-01-01T00:00:00.000Z'
|
|
127
|
+
}
|
|
128
|
+
: metadata;
|
|
129
|
+
const timestamps = buildUserMetadata(properties);
|
|
130
|
+
const body = {};
|
|
131
|
+
for (const [field, value] of Object.entries(timestamps)) {
|
|
132
|
+
body[field] = String(value);
|
|
133
|
+
}
|
|
134
|
+
return { error: null, data: body };
|
|
135
|
+
}
|
|
136
|
+
catch (cause) {
|
|
137
|
+
return {
|
|
138
|
+
data: null,
|
|
139
|
+
error: new FirebaseEdgeError({
|
|
140
|
+
code: 'auth/invalid-argument',
|
|
141
|
+
message: ensureError(cause).message
|
|
142
|
+
})
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=identity-write.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"identity-write.js","sourceRoot":"","sources":["../../src/auth/identity-write.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,iBAAiB,EAGpB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACH,gBAAgB,EAChB,wBAAwB,EAG3B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAuC7D,sFAAsF;AACtF,MAAM,UAAU,yBAAyB,CACrC,IAA+D,EAC/D,SAAsC;IAEtC,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3D,OAAO;YACH,IAAI,EAAE,IAAI;YACV,KAAK,EAAE,IAAI,iBAAiB,CAAC;gBACzB,IAAI,EAAE,uBAAuB;gBAC7B,OAAO,EAAE,oCAAoC;aAChD,CAAC;SACL,CAAC;IACN,CAAC;IACD,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC;QACpB,OAAO;QACP,eAAe;QACf,aAAa;QACb,UAAU;QACV,aAAa;QACb,UAAU;QACV,GAAG,CAAC,SAAS,KAAK,KAAK;YACnB,CAAC,CAAC,CAAC,cAAc,EAAE,UAAU,CAAC;YAC9B,CAAC,CAAC;gBACI,UAAU;gBACV,aAAa;gBACb,GAAG,CAAC,SAAS,KAAK,QAAQ;oBACtB,CAAC,CAAC,CAAC,KAAK,EAAE,cAAc,CAAC;oBACzB,CAAC,CAAC;wBACI,gBAAgB;wBAChB,mBAAmB;wBACnB,cAAc;wBACd,UAAU;qBACb,CAAC;aACX,CAAC;KACX,CAAC,CAAC;IACH,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QACrD,OAAO;YACH,IAAI,EAAE,IAAI;YACV,KAAK,EAAE,IAAI,iBAAiB,CAAC;gBACzB,IAAI,EAAE,uBAAuB;gBAC7B,OAAO,EAAE,mCAAmC;aAC/C,CAAC;SACL,CAAC;IACN,CAAC;IACD,IACI,SAAS,KAAK,KAAK;QACnB,IAAI,CAAC,KAAK,IAAI,IAAI;QAClB,IAAI,CAAC,aAAa,KAAK,IAAI,EAC7B,CAAC;QACC,OAAO;YACH,IAAI,EAAE,IAAI;YACV,KAAK,EAAE,IAAI,iBAAiB,CAAC;gBACzB,IAAI,EAAE,uBAAuB;gBAC7B,OAAO,EACH,wDAAwD;aAC/D,CAAC;SACL,CAAC;IACN,CAAC;IACD,MAAM,UAAU,GACZ,SAAS,KAAK,KAAK;QACf,CAAC,CAAC;YACI,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,SAAS;YAC9B,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,IAAI;YACrC,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,IAAI;YAC/B,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,IAAI;YACrC,QAAQ,EAAE,IAAI,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ;YAC7D,aAAa,EACT,IAAI,CAAC,aAAa,KAAK,SAAS;gBAC5B,CAAC,CAAC,KAAK;gBACP,CAAC,CAAC,IAAI,CAAC,aAAa;SAC/B;QACH,CAAC,CAAC,SAAS,KAAK,QAAQ;YACtB,CAAC,CAAC;gBACI,GAAI,IAA2B;gBAC/B,QAAQ,EAAG,IAA2B,CAAC,QAAQ,IAAI,SAAS;aAC/D;YACH,CAAC,CAAE,IAA2B,CAAC;IACzC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,gBAAgB,CAC1C,UAAU,EACV,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAC/C,CAAC;IACF,IAAI,KAAK,EAAE,CAAC;QACR,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACjC,CAAC;IACD,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,IAA0B,CAAC;QAC1C,IAAI,MAAM,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;YAC3B,IAAI,CAAC,eAAe,GAAG;gBACnB,GAAG,CAAC,IAAI,CAAC,eAAe,IAAI,EAAE,CAAC;gBAC/B,UAAU;aACb,CAAC;QACN,CAAC;QACD,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YAChC,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,YAAY,EAAE,GAC9C,4BAA4B,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAClD,IAAI,aAAa,EAAE,CAAC;gBAChB,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;YAChD,CAAC;YACD,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;QACtC,CAAC;IACL,CAAC;IACD,IAAI,SAAS,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,EAAE,CAAC;QAC5C,IAAI,CAAC,eAAe,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,IAAI,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;IACtE,CAAC;IACD,IAAI,SAAS,KAAK,KAAK,EAAE,CAAC;QACtB,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,YAAY,EAAE,GAC9C,4BAA4B,CACvB,IAAwB,CAAC,QAAQ,IAAI,IAAI,EAC1C,IAAI,CACP,CAAC;QACN,IAAI,aAAa,EAAE,CAAC;YAChB,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QAChD,CAAC;QACD,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IACtC,CAAC;IACD,MAAM,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC;IAC9B,IAAI,SAAS,KAAK,KAAK,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;QACpD,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,EAAE,GAC1C,wBAAwB,CAAC,YAAY,IAAI,IAAI,CAAC,CAAC;QACnD,IAAI,WAAW,EAAE,CAAC;YACd,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QAC9C,CAAC;QACD,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IACpC,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACvC,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,4BAA4B,CACxC,QAA2D,EAC3D,KAAK,GAAG,KAAK;IAEb,IAAI,CAAC;QACD,IACI,KAAK;YACL,QAAQ,IAAI,IAAI;YAChB,CAAC,OAAO,QAAQ,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,EAC3D,CAAC;YACC,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;QAC3D,CAAC;QACD,MAAM,UAAU,GAAG,KAAK;YACpB,CAAC,CAAC;gBACI,GAAG,QAAQ;gBACX,YAAY,EACR,QAAQ,EAAE,YAAY,IAAI,0BAA0B;gBACxD,cAAc,EACV,QAAQ,EAAE,cAAc,IAAI,0BAA0B;aAC7D;YACH,CAAC,CAAC,QAAQ,CAAC;QACf,MAAM,UAAU,GAAG,iBAAiB,CAAC,UAAiC,CAAC,CAAC;QACxE,MAAM,IAAI,GAA2B,EAAE,CAAC;QACxC,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;YACtD,IAAI,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACvC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO;YACH,IAAI,EAAE,IAAI;YACV,KAAK,EAAE,IAAI,iBAAiB,CAAC;gBACzB,IAAI,EAAE,uBAAuB;gBAC7B,OAAO,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,OAAO;aACtC,CAAC;SACL,CAAC;IACN,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import type { IdentityCreateData, IdentityImportRecord } from './identity-write.js';
|
|
2
|
+
import type { UserImportOptions } from './user-import.js';
|
|
3
|
+
export type { IdentityCreateData, IdentityImportRecord, IdentityUpdateData, IdentitySetData, IdentityWriteResult } from './identity-write.js';
|
|
4
|
+
import type { ProviderIdentifier } from './user-request.js';
|
|
5
|
+
import { FirebaseAdminAuth, type FirebaseAdminAuthOptions } from './firebase-admin-auth.js';
|
|
6
|
+
import type { ServiceAccount } from './firebase-types.js';
|
|
7
|
+
import { FirebaseEdgeError } from './errors.js';
|
|
8
|
+
import { IdentityCountQuery } from './identity-count-query.js';
|
|
9
|
+
import { IdentityReference } from './identity-reference.js';
|
|
10
|
+
export { IdentityReference, type IdentityReferenceOptions, type IdentityUserRecord } from './identity-reference.js';
|
|
11
|
+
export { IdentityCountQuery } from './identity-count-query.js';
|
|
12
|
+
import type { IdentityDirection, IdentityStringFilterField, IdentityOrderField, IdentityQueryOptions, IdentityQueryResult } from './identity-types.js';
|
|
13
|
+
export type { IdentityDirection, IdentityIdentifier, IdentityFilterField, IdentityStringFilterField, IdentityOrderField, IdentityQueryResult, IdentityCountResult } from './identity-types.js';
|
|
14
|
+
import type { IdentityQueryBuilder, IdentityTokenSort } from './identity-builder-types.js';
|
|
15
|
+
export type { IdentityQueryBuilder, IdentityNativeFilterField } from './identity-builder-types.js';
|
|
16
|
+
export type IdentityOptions = FirebaseAdminAuthOptions;
|
|
17
|
+
/** Fluent Firebase Authentication queries with automatic endpoint selection. */
|
|
18
|
+
export declare class Identity<Claims extends object = Record<string, unknown>> {
|
|
19
|
+
private readonly auth;
|
|
20
|
+
constructor(serviceAccount: ServiceAccount, options?: IdentityOptions);
|
|
21
|
+
users<Schema extends object = Claims>(): IdentityQueryBuilder<'base', false, true, Schema>;
|
|
22
|
+
}
|
|
23
|
+
/** Immutable query. Invalid builder arguments throw before any network request. */
|
|
24
|
+
export declare class IdentityQuery<Claims extends object = Record<string, unknown>> {
|
|
25
|
+
private readonly auth;
|
|
26
|
+
private readonly options;
|
|
27
|
+
private readonly last;
|
|
28
|
+
private readonly token?;
|
|
29
|
+
constructor(auth: FirebaseAdminAuth, options?: IdentityQueryOptions, last?: boolean, token?: string | undefined);
|
|
30
|
+
/** Append exact-match alternatives to one lookup request. */
|
|
31
|
+
or(field: IdentityStringFilterField, operator: '==', value: string): IdentityQueryBuilder<'or', false, true, Claims>;
|
|
32
|
+
or(field: IdentityStringFilterField, operator: 'in', value: readonly string[]): IdentityQueryBuilder<'or', false, true, Claims>;
|
|
33
|
+
or(field: 'provider', operator: '==', value: ProviderIdentifier): IdentityQueryBuilder<'or', false, true, Claims>;
|
|
34
|
+
or(field: 'provider', operator: 'in', value: readonly ProviderIdentifier[]): IdentityQueryBuilder<'or', false, true, Claims>;
|
|
35
|
+
add(data: IdentityCreateData<Claims>): Promise<{
|
|
36
|
+
data: null;
|
|
37
|
+
error: FirebaseEdgeError;
|
|
38
|
+
} | {
|
|
39
|
+
data: import("./identity-write.js").IdentityWriteResult;
|
|
40
|
+
error: null;
|
|
41
|
+
}>;
|
|
42
|
+
import(records: IdentityImportRecord<Claims>[], options?: UserImportOptions): Promise<{
|
|
43
|
+
data: null;
|
|
44
|
+
error: FirebaseEdgeError;
|
|
45
|
+
} | {
|
|
46
|
+
data: import("./user-batch.js").UserImportResult;
|
|
47
|
+
error: null;
|
|
48
|
+
}>;
|
|
49
|
+
delete(): Promise<{
|
|
50
|
+
data: null;
|
|
51
|
+
error: FirebaseEdgeError;
|
|
52
|
+
} | {
|
|
53
|
+
data: import("./user-batch.js").DeleteUsersResult;
|
|
54
|
+
error: null;
|
|
55
|
+
}>;
|
|
56
|
+
byUid<LookupClaims extends object = Claims>(uid: string): IdentityReference<false, true, LookupClaims>;
|
|
57
|
+
byEmail(email: string): IdentityReference<false, false, Claims>;
|
|
58
|
+
byPhoneNumber(phoneNumber: string): IdentityReference<false, false, Claims>;
|
|
59
|
+
byProvider(providerId: string, providerUid: string): IdentityReference<false, false, Claims>;
|
|
60
|
+
private assertLookupAllowed;
|
|
61
|
+
where(field: 'provider', operator: 'in', value: readonly ProviderIdentifier[]): IdentityQueryBuilder<'lookup', false, true, Claims>;
|
|
62
|
+
where<F extends IdentityStringFilterField>(field: F, operator: 'in', value: readonly string[]): IdentityQueryBuilder<F extends 'uid' ? 'uidBatch' : 'lookup', false, true, Claims>;
|
|
63
|
+
where<F extends IdentityStringFilterField>(field: F, operator: '==', value: string): IdentityQueryBuilder<F extends 'initialEmail' ? 'lookup' : 'filtered', false, false, Claims>;
|
|
64
|
+
orderBy<F extends IdentityOrderField, D extends IdentityDirection = 'asc'>(field: F, direction?: D): IdentityQueryBuilder<'query', true, IdentityTokenSort<F, D>, Claims>;
|
|
65
|
+
offset<N extends number>(value: N): IdentityQueryBuilder<'query', false, N extends 0 ? true : false, Claims>;
|
|
66
|
+
limit(value: number): IdentityQueryBuilder<'query', false, true, Claims>;
|
|
67
|
+
/** Return the last matching users in the query's original order. */
|
|
68
|
+
limitToLast(value: number): IdentityQueryBuilder<'query', false, false, Claims>;
|
|
69
|
+
private withLimit;
|
|
70
|
+
/** Resume a UID-ascending listing using the previous result's opaque token. */
|
|
71
|
+
pageToken(token: string): IdentityQueryBuilder<'token', false, true, Claims>;
|
|
72
|
+
/** Count the matching query with one count-only request. */
|
|
73
|
+
count(): IdentityCountQuery;
|
|
74
|
+
private assertNativeQuery;
|
|
75
|
+
/** Execute at most one account-data request; unsupported combinations fail before I/O. */
|
|
76
|
+
get(): Promise<{
|
|
77
|
+
data: IdentityQueryResult<Claims>;
|
|
78
|
+
error: null;
|
|
79
|
+
} | {
|
|
80
|
+
data: null;
|
|
81
|
+
error: Error;
|
|
82
|
+
}>;
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=identity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../../src/auth/identity.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,319 @@
|
|
|
1
|
+
import { identityLookupIdentifiers, identityOrIdentifiers } from './identity-filter.js';
|
|
2
|
+
import { FirebaseAdminAuth } from './firebase-admin-auth.js';
|
|
3
|
+
import { FirebaseEdgeError, ensureError } from './errors.js';
|
|
4
|
+
import { executeIdentityQuery } from './identity-query.js';
|
|
5
|
+
import { IdentityCountQuery } from './identity-count-query.js';
|
|
6
|
+
import { IdentityReference } from './identity-reference.js';
|
|
7
|
+
export { IdentityReference } from './identity-reference.js';
|
|
8
|
+
export { IdentityCountQuery } from './identity-count-query.js';
|
|
9
|
+
/** Fluent Firebase Authentication queries with automatic endpoint selection. */
|
|
10
|
+
export class Identity {
|
|
11
|
+
auth;
|
|
12
|
+
constructor(serviceAccount, options = {}) {
|
|
13
|
+
this.auth = new FirebaseAdminAuth(serviceAccount, options);
|
|
14
|
+
}
|
|
15
|
+
users() {
|
|
16
|
+
return new IdentityQuery(this.auth);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
/** Immutable query. Invalid builder arguments throw before any network request. */
|
|
20
|
+
export class IdentityQuery {
|
|
21
|
+
auth;
|
|
22
|
+
options;
|
|
23
|
+
last;
|
|
24
|
+
token;
|
|
25
|
+
constructor(auth, options = {}, last = false, token) {
|
|
26
|
+
this.auth = auth;
|
|
27
|
+
this.options = options;
|
|
28
|
+
this.last = last;
|
|
29
|
+
this.token = token;
|
|
30
|
+
}
|
|
31
|
+
or(field, operator, value) {
|
|
32
|
+
if (Object.keys(this.options).some((key) => key !== 'identifiers') ||
|
|
33
|
+
this.last ||
|
|
34
|
+
this.token !== undefined) {
|
|
35
|
+
throw new FirebaseEdgeError({
|
|
36
|
+
code: 'auth/invalid-argument',
|
|
37
|
+
message: 'OR clauses cannot be combined with where clauses, sorting, limits, offsets, or page tokens.'
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
if (operator !== '==' && operator !== 'in') {
|
|
41
|
+
throw new FirebaseEdgeError({
|
|
42
|
+
code: 'auth/invalid-argument',
|
|
43
|
+
message: 'OR clauses support only == and in.'
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
const identifiers = identityLookupIdentifiers(field, operator === 'in'
|
|
47
|
+
? value
|
|
48
|
+
: [value]);
|
|
49
|
+
const validated = identityOrIdentifiers([
|
|
50
|
+
...(this.options.identifiers ?? []),
|
|
51
|
+
...identifiers
|
|
52
|
+
]);
|
|
53
|
+
return new IdentityQuery(this.auth, {
|
|
54
|
+
identifiers: validated
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
add(data) {
|
|
58
|
+
this.assertLookupAllowed();
|
|
59
|
+
return this.auth._writeIdentityUser(undefined, data);
|
|
60
|
+
}
|
|
61
|
+
import(records, options) {
|
|
62
|
+
this.assertLookupAllowed();
|
|
63
|
+
if (!Array.isArray(records)) {
|
|
64
|
+
throw new FirebaseEdgeError({
|
|
65
|
+
code: 'auth/invalid-argument',
|
|
66
|
+
message: 'Import records must be an array.'
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
const users = records.map((record) => {
|
|
70
|
+
if (!record ||
|
|
71
|
+
typeof record !== 'object' ||
|
|
72
|
+
Array.isArray(record)) {
|
|
73
|
+
return record;
|
|
74
|
+
}
|
|
75
|
+
if ('claims' in record) {
|
|
76
|
+
throw new FirebaseEdgeError({
|
|
77
|
+
code: 'auth/invalid-argument',
|
|
78
|
+
message: 'Use customClaims in Identity import records.'
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
const { customClaims, ...data } = record;
|
|
82
|
+
return {
|
|
83
|
+
...data,
|
|
84
|
+
...(customClaims !== undefined && {
|
|
85
|
+
customClaims: customClaims === null ? {} : customClaims
|
|
86
|
+
})
|
|
87
|
+
};
|
|
88
|
+
});
|
|
89
|
+
return this.auth.importUsers(users, options);
|
|
90
|
+
}
|
|
91
|
+
delete() {
|
|
92
|
+
if (this.options.filter?.field !== 'uid' ||
|
|
93
|
+
this.options.filter.operator !== 'in' ||
|
|
94
|
+
this.options.orderBy ||
|
|
95
|
+
this.options.offset !== undefined ||
|
|
96
|
+
this.options.limit !== undefined ||
|
|
97
|
+
this.last ||
|
|
98
|
+
this.token !== undefined) {
|
|
99
|
+
throw new FirebaseEdgeError({
|
|
100
|
+
code: 'auth/invalid-argument',
|
|
101
|
+
message: 'Batch deletion requires only a UID in filter.'
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
return this.auth.deleteUsers([...this.options.filter.value]);
|
|
105
|
+
}
|
|
106
|
+
byUid(uid) {
|
|
107
|
+
this.assertLookupAllowed();
|
|
108
|
+
return new IdentityReference(this.auth, { uid }, { uidReference: true });
|
|
109
|
+
}
|
|
110
|
+
byEmail(email) {
|
|
111
|
+
this.assertLookupAllowed();
|
|
112
|
+
return new IdentityReference(this.auth, {
|
|
113
|
+
email
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
byPhoneNumber(phoneNumber) {
|
|
117
|
+
this.assertLookupAllowed();
|
|
118
|
+
return new IdentityReference(this.auth, {
|
|
119
|
+
phoneNumber
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
byProvider(providerId, providerUid) {
|
|
123
|
+
this.assertLookupAllowed();
|
|
124
|
+
return new IdentityReference(this.auth, {
|
|
125
|
+
providerId,
|
|
126
|
+
providerUid
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
assertLookupAllowed() {
|
|
130
|
+
if (Object.keys(this.options).length > 0 ||
|
|
131
|
+
this.last ||
|
|
132
|
+
this.token !== undefined) {
|
|
133
|
+
throw new FirebaseEdgeError({
|
|
134
|
+
code: 'auth/invalid-argument',
|
|
135
|
+
message: 'Exact lookups cannot be combined with filters, sorting, limits, offsets, or page tokens.'
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
where(field, operator, value) {
|
|
140
|
+
if (this.options.filter !== undefined) {
|
|
141
|
+
throw new FirebaseEdgeError({
|
|
142
|
+
code: 'auth/invalid-argument',
|
|
143
|
+
message: 'Only one where clause is supported: Firebase ignores additional query expressions instead of applying AND.'
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
if (this.options.identifiers !== undefined ||
|
|
147
|
+
this.token !== undefined ||
|
|
148
|
+
((field === 'initialEmail' || operator === 'in') &&
|
|
149
|
+
(Object.keys(this.options).length > 0 || this.last))) {
|
|
150
|
+
throw new FirebaseEdgeError({
|
|
151
|
+
code: 'auth/invalid-argument',
|
|
152
|
+
message: 'This filter cannot be combined with existing query options or a page token.'
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
if (operator !== '==' && operator !== 'in') {
|
|
156
|
+
throw new FirebaseEdgeError({
|
|
157
|
+
code: 'auth/invalid-argument',
|
|
158
|
+
message: 'Identity queries support only == and in filters.'
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
if (![
|
|
162
|
+
'uid',
|
|
163
|
+
'email',
|
|
164
|
+
'phoneNumber',
|
|
165
|
+
'initialEmail',
|
|
166
|
+
'provider'
|
|
167
|
+
].includes(field) ||
|
|
168
|
+
(field === 'provider' && operator !== 'in') ||
|
|
169
|
+
(operator === '==' &&
|
|
170
|
+
(typeof value !== 'string' || value.length === 0))) {
|
|
171
|
+
throw new FirebaseEdgeError({
|
|
172
|
+
code: 'auth/invalid-argument',
|
|
173
|
+
message: 'Specify one supported filter with a string for == or a string array for in.'
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
const identifiers = operator === 'in'
|
|
177
|
+
? identityLookupIdentifiers(field, value)
|
|
178
|
+
: identityLookupIdentifiers(field, [value]);
|
|
179
|
+
const filter = field === 'provider'
|
|
180
|
+
? {
|
|
181
|
+
field,
|
|
182
|
+
operator: 'in',
|
|
183
|
+
value: identifiers
|
|
184
|
+
}
|
|
185
|
+
: operator === 'in'
|
|
186
|
+
? {
|
|
187
|
+
field,
|
|
188
|
+
operator,
|
|
189
|
+
value: [...value]
|
|
190
|
+
}
|
|
191
|
+
: { field, value: value };
|
|
192
|
+
return new IdentityQuery(this.auth, { ...this.options, filter }, this.last, this.token);
|
|
193
|
+
}
|
|
194
|
+
orderBy(field, direction = 'asc') {
|
|
195
|
+
this.assertNativeQuery();
|
|
196
|
+
if (this.token !== undefined &&
|
|
197
|
+
(field !== 'uid' || direction !== 'asc')) {
|
|
198
|
+
throw new FirebaseEdgeError({
|
|
199
|
+
code: 'auth/invalid-argument',
|
|
200
|
+
message: 'Page tokens require UID ascending order.'
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
if (![
|
|
204
|
+
'uid',
|
|
205
|
+
'displayName',
|
|
206
|
+
'createdAt',
|
|
207
|
+
'lastLoginAt',
|
|
208
|
+
'email'
|
|
209
|
+
].includes(field) ||
|
|
210
|
+
!['asc', 'desc'].includes(direction) ||
|
|
211
|
+
this.options.orderBy) {
|
|
212
|
+
throw new FirebaseEdgeError({
|
|
213
|
+
code: 'auth/invalid-argument',
|
|
214
|
+
message: 'Specify one supported sort field and an asc or desc direction.'
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
return new IdentityQuery(this.auth, { ...this.options, orderBy: { field, direction } }, this.last, this.token);
|
|
218
|
+
}
|
|
219
|
+
offset(value) {
|
|
220
|
+
this.assertNativeQuery();
|
|
221
|
+
if (this.token !== undefined && value !== 0) {
|
|
222
|
+
throw new FirebaseEdgeError({
|
|
223
|
+
code: 'auth/invalid-argument',
|
|
224
|
+
message: 'Page tokens cannot be combined with a nonzero offset.'
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
if (!Number.isSafeInteger(value) || value < 0) {
|
|
228
|
+
throw new FirebaseEdgeError({
|
|
229
|
+
code: 'auth/invalid-argument',
|
|
230
|
+
message: 'offset must be a nonnegative safe integer.'
|
|
231
|
+
});
|
|
232
|
+
}
|
|
233
|
+
return new IdentityQuery(this.auth, { ...this.options, offset: value }, this.last, this.token);
|
|
234
|
+
}
|
|
235
|
+
limit(value) {
|
|
236
|
+
return this.withLimit(value, false);
|
|
237
|
+
}
|
|
238
|
+
/** Return the last matching users in the query's original order. */
|
|
239
|
+
limitToLast(value) {
|
|
240
|
+
return this.withLimit(value, true);
|
|
241
|
+
}
|
|
242
|
+
withLimit(value, last) {
|
|
243
|
+
this.assertNativeQuery();
|
|
244
|
+
if (last && this.token !== undefined) {
|
|
245
|
+
throw new FirebaseEdgeError({
|
|
246
|
+
code: 'auth/invalid-argument',
|
|
247
|
+
message: 'Page tokens cannot be combined with limitToLast.'
|
|
248
|
+
});
|
|
249
|
+
}
|
|
250
|
+
if (!Number.isInteger(value) ||
|
|
251
|
+
value < 1 ||
|
|
252
|
+
value > (last ? 500 : 1000)) {
|
|
253
|
+
throw new FirebaseEdgeError({
|
|
254
|
+
code: 'auth/invalid-argument',
|
|
255
|
+
message: last
|
|
256
|
+
? 'limitToLast must be an integer from 1 through 500.'
|
|
257
|
+
: 'limit must be an integer from 1 through 1000; query pagination supports at most 500.'
|
|
258
|
+
});
|
|
259
|
+
}
|
|
260
|
+
return new IdentityQuery(this.auth, { ...this.options, limit: value }, last, this.token);
|
|
261
|
+
}
|
|
262
|
+
/** Resume a UID-ascending listing using the previous result's opaque token. */
|
|
263
|
+
pageToken(token) {
|
|
264
|
+
this.assertNativeQuery();
|
|
265
|
+
if (this.options.filter ||
|
|
266
|
+
this.last ||
|
|
267
|
+
(this.options.offset ?? 0) !== 0 ||
|
|
268
|
+
(this.options.orderBy &&
|
|
269
|
+
(this.options.orderBy.field !== 'uid' ||
|
|
270
|
+
this.options.orderBy.direction !== 'asc'))) {
|
|
271
|
+
throw new FirebaseEdgeError({
|
|
272
|
+
code: 'auth/invalid-argument',
|
|
273
|
+
message: 'Page tokens require an unfiltered UID-ascending listing without offset or limitToLast.'
|
|
274
|
+
});
|
|
275
|
+
}
|
|
276
|
+
if (typeof token !== 'string' || token.length === 0) {
|
|
277
|
+
throw new FirebaseEdgeError({
|
|
278
|
+
code: 'auth/invalid-argument',
|
|
279
|
+
message: 'pageToken must be a nonempty string returned by a previous listing.'
|
|
280
|
+
});
|
|
281
|
+
}
|
|
282
|
+
return new IdentityQuery(this.auth, this.options, this.last, token);
|
|
283
|
+
}
|
|
284
|
+
/** Count the matching query with one count-only request. */
|
|
285
|
+
count() {
|
|
286
|
+
this.assertNativeQuery();
|
|
287
|
+
if (this.token !== undefined) {
|
|
288
|
+
throw new FirebaseEdgeError({
|
|
289
|
+
code: 'auth/invalid-argument',
|
|
290
|
+
message: 'Cannot count from a page token.'
|
|
291
|
+
});
|
|
292
|
+
}
|
|
293
|
+
return new IdentityCountQuery(this.auth, this.options, this.token);
|
|
294
|
+
}
|
|
295
|
+
assertNativeQuery() {
|
|
296
|
+
if (this.options.identifiers !== undefined ||
|
|
297
|
+
this.options.filter?.field === 'initialEmail' ||
|
|
298
|
+
this.options.filter?.operator === 'in') {
|
|
299
|
+
throw new FirebaseEdgeError({
|
|
300
|
+
code: 'auth/invalid-argument',
|
|
301
|
+
message: 'Lookup filters support only get().'
|
|
302
|
+
});
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
/** Execute at most one account-data request; unsupported combinations fail before I/O. */
|
|
306
|
+
async get() {
|
|
307
|
+
try {
|
|
308
|
+
const { error, data } = await executeIdentityQuery(this.auth, this.options, this.last, this.token);
|
|
309
|
+
if (error) {
|
|
310
|
+
return { error, data: null };
|
|
311
|
+
}
|
|
312
|
+
return { error: null, data: data };
|
|
313
|
+
}
|
|
314
|
+
catch (cause) {
|
|
315
|
+
return { data: null, error: ensureError(cause) };
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
//# sourceMappingURL=identity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"identity.js","sourceRoot":"","sources":["../../src/auth/identity.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,11 @@ import { type CreateRequest, type UpdateRequest, type UserProvider } from './use
|
|
|
3
3
|
import type { FirebaseArrayIndexError } from './user-batch.js';
|
|
4
4
|
export type HashAlgorithmType = 'SCRYPT' | 'STANDARD_SCRYPT' | 'HMAC_SHA512' | 'HMAC_SHA256' | 'HMAC_SHA1' | 'HMAC_MD5' | 'MD5' | 'PBKDF_SHA1' | 'BCRYPT' | 'PBKDF2_SHA256' | 'SHA512' | 'SHA256' | 'SHA1';
|
|
5
5
|
export interface UserImportOptions {
|
|
6
|
-
|
|
6
|
+
/** Overwrite existing accounts with matching UIDs rather than rejecting them. */
|
|
7
|
+
allowOverwrite?: boolean;
|
|
8
|
+
/** Check duplicate emails, duplicate federated IDs, and provider validity. */
|
|
9
|
+
sanityCheck?: boolean;
|
|
10
|
+
hash?: {
|
|
7
11
|
algorithm: HashAlgorithmType;
|
|
8
12
|
key?: Uint8Array;
|
|
9
13
|
saltSeparator?: Uint8Array;
|
|
@@ -40,6 +44,8 @@ export interface PreparedUserImport {
|
|
|
40
44
|
indices: number[];
|
|
41
45
|
errors: FirebaseArrayIndexError[];
|
|
42
46
|
}
|
|
47
|
+
/** Validate writable user metadata and translate timestamps to milliseconds. @internal */
|
|
48
|
+
export declare function buildUserMetadata(metadata: UserMetadataRequest): Record<string, number>;
|
|
43
49
|
/** Translate the supported Firebase Admin hash options without hashing on the edge. */
|
|
44
50
|
export declare function buildImportHashOptions(options?: UserImportOptions): Record<string, unknown>;
|
|
45
51
|
/** Convert one imported record, reusing the existing profile and MFA validation. */
|