firebase-admin-edge 2.0.0 → 3.0.1
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 +38 -7
- package/dist/auth/firebase-admin-auth.d.ts.map +1 -1
- package/dist/auth/firebase-admin-auth.js +161 -11
- package/dist/auth/firebase-admin-auth.js.map +1 -1
- package/dist/auth/firebase-auth-endpoints.d.ts +37 -0
- package/dist/auth/firebase-auth-endpoints.d.ts.map +1 -1
- package/dist/auth/firebase-auth-endpoints.js +100 -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 +150 -0
- package/dist/auth/identity-reference.d.ts.map +1 -0
- package/dist/auth/identity-reference.js +322 -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,129 @@
|
|
|
1
|
+
import { FirebaseEdgeError } from './errors.js';
|
|
2
|
+
import { buildUsersLookupRequest } from './user-request.js';
|
|
3
|
+
/** Validate direct query construction as well as fluent queries before I/O. @internal */
|
|
4
|
+
export function validateIdentityQueryOptions(options) {
|
|
5
|
+
if (!options ||
|
|
6
|
+
typeof options !== 'object' ||
|
|
7
|
+
Array.isArray(options) ||
|
|
8
|
+
Object.keys(options).some((key) => ![
|
|
9
|
+
'filter',
|
|
10
|
+
'identifiers',
|
|
11
|
+
'orderBy',
|
|
12
|
+
'offset',
|
|
13
|
+
'limit'
|
|
14
|
+
].includes(key))) {
|
|
15
|
+
throw new FirebaseEdgeError({
|
|
16
|
+
code: 'auth/invalid-argument',
|
|
17
|
+
message: 'Unsupported identity query options.'
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
const { filter, orderBy, offset, limit } = options;
|
|
21
|
+
if (filter !== undefined) {
|
|
22
|
+
if (!filter ||
|
|
23
|
+
typeof filter !== 'object' ||
|
|
24
|
+
Array.isArray(filter) ||
|
|
25
|
+
Object.keys(filter).some((key) => !['field', 'operator', 'value'].includes(key)) ||
|
|
26
|
+
(filter.operator !== undefined &&
|
|
27
|
+
filter.operator !== '==' &&
|
|
28
|
+
filter.operator !== 'in') ||
|
|
29
|
+
(filter.field === 'provider' && filter.operator !== 'in')) {
|
|
30
|
+
throw new FirebaseEdgeError({
|
|
31
|
+
code: 'auth/invalid-argument',
|
|
32
|
+
message: 'Specify one supported identity filter.'
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
identityLookupIdentifiers(filter.field, filter.operator === 'in' ? filter.value : [filter.value]);
|
|
36
|
+
}
|
|
37
|
+
if (options.identifiers !== undefined) {
|
|
38
|
+
identityOrIdentifiers(options.identifiers);
|
|
39
|
+
if (filter !== undefined) {
|
|
40
|
+
throw new FirebaseEdgeError({
|
|
41
|
+
code: 'auth/invalid-argument',
|
|
42
|
+
message: 'OR lookups cannot be combined with another filter.'
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
if (orderBy !== undefined &&
|
|
47
|
+
(!orderBy ||
|
|
48
|
+
typeof orderBy !== 'object' ||
|
|
49
|
+
Array.isArray(orderBy) ||
|
|
50
|
+
Object.keys(orderBy).some((key) => !['field', 'direction'].includes(key)) ||
|
|
51
|
+
![
|
|
52
|
+
'uid',
|
|
53
|
+
'email',
|
|
54
|
+
'displayName',
|
|
55
|
+
'createdAt',
|
|
56
|
+
'lastLoginAt'
|
|
57
|
+
].includes(orderBy.field) ||
|
|
58
|
+
!['asc', 'desc'].includes(orderBy.direction))) {
|
|
59
|
+
throw new FirebaseEdgeError({
|
|
60
|
+
code: 'auth/invalid-argument',
|
|
61
|
+
message: 'Specify one supported sort field and direction.'
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
if (offset !== undefined && (!Number.isSafeInteger(offset) || offset < 0)) {
|
|
65
|
+
throw new FirebaseEdgeError({
|
|
66
|
+
code: 'auth/invalid-argument',
|
|
67
|
+
message: 'offset must be a nonnegative safe integer.'
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
if (limit !== undefined &&
|
|
71
|
+
(!Number.isInteger(limit) || limit < 1 || limit > 1000)) {
|
|
72
|
+
throw new FirebaseEdgeError({
|
|
73
|
+
code: 'auth/invalid-argument',
|
|
74
|
+
message: 'limit must be an integer from 1 through 1000.'
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
/** Validate and snapshot an OR of exact identifiers. @internal */
|
|
79
|
+
export function identityOrIdentifiers(identifiers) {
|
|
80
|
+
if (!Array.isArray(identifiers) || identifiers.length === 0) {
|
|
81
|
+
throw new FirebaseEdgeError({
|
|
82
|
+
code: 'auth/invalid-argument',
|
|
83
|
+
message: 'OR requires 1 through 100 exact identifiers.'
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
for (const identifier of identifiers) {
|
|
87
|
+
const keys = Object.keys(identifier ?? {});
|
|
88
|
+
const provider = keys.includes('providerId') && keys.includes('providerUid');
|
|
89
|
+
if (keys.length !== (provider ? 2 : 1)) {
|
|
90
|
+
throw new FirebaseEdgeError({
|
|
91
|
+
code: 'auth/invalid-argument',
|
|
92
|
+
message: 'Each OR branch must contain one identifier or one provider ID/UID pair; AND conditions are unsupported.'
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
const { error } = buildUsersLookupRequest([...identifiers]);
|
|
97
|
+
if (error) {
|
|
98
|
+
throw error;
|
|
99
|
+
}
|
|
100
|
+
return identifiers.map((identifier) => ({ ...identifier }));
|
|
101
|
+
}
|
|
102
|
+
/** Validate one lookup batch without splitting it into multiple requests. @internal */
|
|
103
|
+
export function identityLookupIdentifiers(field, values) {
|
|
104
|
+
if (!['uid', 'email', 'phoneNumber', 'initialEmail', 'provider'].includes(field) ||
|
|
105
|
+
!Array.isArray(values) ||
|
|
106
|
+
values.length === 0 ||
|
|
107
|
+
values.length > 100) {
|
|
108
|
+
throw new FirebaseEdgeError({
|
|
109
|
+
code: 'auth/invalid-argument',
|
|
110
|
+
message: 'Lookup filters require a supported field and 1 through 100 identifiers.'
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
const identifiers = Array.from(values, (value) => {
|
|
114
|
+
if (field === 'provider') {
|
|
115
|
+
const pair = value;
|
|
116
|
+
return {
|
|
117
|
+
providerId: pair?.providerId,
|
|
118
|
+
providerUid: pair?.providerUid
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
return { [field]: value };
|
|
122
|
+
});
|
|
123
|
+
const { error } = buildUsersLookupRequest(identifiers);
|
|
124
|
+
if (error) {
|
|
125
|
+
throw error;
|
|
126
|
+
}
|
|
127
|
+
return identifiers;
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=identity-filter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"identity-filter.js","sourceRoot":"","sources":["../../src/auth/identity-filter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAKhD,OAAO,EACH,uBAAuB,EAG1B,MAAM,mBAAmB,CAAC;AAE3B,yFAAyF;AACzF,MAAM,UAAU,4BAA4B,CACxC,OAA6B;IAE7B,IACI,CAAC,OAAO;QACR,OAAO,OAAO,KAAK,QAAQ;QAC3B,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;QACtB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CACrB,CAAC,GAAG,EAAE,EAAE,CACJ,CAAC;YACG,QAAQ;YACR,aAAa;YACb,SAAS;YACT,QAAQ;YACR,OAAO;SACV,CAAC,QAAQ,CAAC,GAAG,CAAC,CACtB,EACH,CAAC;QACC,MAAM,IAAI,iBAAiB,CAAC;YACxB,IAAI,EAAE,uBAAuB;YAC7B,OAAO,EAAE,qCAAqC;SACjD,CAAC,CAAC;IACP,CAAC;IACD,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;IACnD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACvB,IACI,CAAC,MAAM;YACP,OAAO,MAAM,KAAK,QAAQ;YAC1B,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;YACrB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CACpB,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CACzD;YACD,CAAC,MAAM,CAAC,QAAQ,KAAK,SAAS;gBAC1B,MAAM,CAAC,QAAQ,KAAK,IAAI;gBACxB,MAAM,CAAC,QAAQ,KAAK,IAAI,CAAC;YAC7B,CAAC,MAAM,CAAC,KAAK,KAAK,UAAU,IAAI,MAAM,CAAC,QAAQ,KAAK,IAAI,CAAC,EAC3D,CAAC;YACC,MAAM,IAAI,iBAAiB,CAAC;gBACxB,IAAI,EAAE,uBAAuB;gBAC7B,OAAO,EAAE,wCAAwC;aACpD,CAAC,CAAC;QACP,CAAC;QACD,yBAAyB,CACrB,MAAM,CAAC,KAAK,EACZ,MAAM,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAC3D,CAAC;IACN,CAAC;IACD,IAAI,OAAO,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;QACpC,qBAAqB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAC3C,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACvB,MAAM,IAAI,iBAAiB,CAAC;gBACxB,IAAI,EAAE,uBAAuB;gBAC7B,OAAO,EAAE,oDAAoD;aAChE,CAAC,CAAC;QACP,CAAC;IACL,CAAC;IACD,IACI,OAAO,KAAK,SAAS;QACrB,CAAC,CAAC,OAAO;YACL,OAAO,OAAO,KAAK,QAAQ;YAC3B,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;YACtB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CACrB,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CACjD;YACD,CAAC;gBACG,KAAK;gBACL,OAAO;gBACP,aAAa;gBACb,WAAW;gBACX,aAAa;aAChB,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC;YACzB,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,EACnD,CAAC;QACC,MAAM,IAAI,iBAAiB,CAAC;YACxB,IAAI,EAAE,uBAAuB;YAC7B,OAAO,EAAE,iDAAiD;SAC7D,CAAC,CAAC;IACP,CAAC;IACD,IAAI,MAAM,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC;QACxE,MAAM,IAAI,iBAAiB,CAAC;YACxB,IAAI,EAAE,uBAAuB;YAC7B,OAAO,EAAE,4CAA4C;SACxD,CAAC,CAAC;IACP,CAAC;IACD,IACI,KAAK,KAAK,SAAS;QACnB,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,IAAI,CAAC,EACzD,CAAC;QACC,MAAM,IAAI,iBAAiB,CAAC;YACxB,IAAI,EAAE,uBAAuB;YAC7B,OAAO,EAAE,+CAA+C;SAC3D,CAAC,CAAC;IACP,CAAC;AACL,CAAC;AAED,kEAAkE;AAClE,MAAM,UAAU,qBAAqB,CACjC,WAAsC;IAEtC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1D,MAAM,IAAI,iBAAiB,CAAC;YACxB,IAAI,EAAE,uBAAuB;YAC7B,OAAO,EAAE,8CAA8C;SAC1D,CAAC,CAAC;IACP,CAAC;IACD,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;QACnC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC;QAC3C,MAAM,QAAQ,GACV,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;QAChE,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACrC,MAAM,IAAI,iBAAiB,CAAC;gBACxB,IAAI,EAAE,uBAAuB;gBAC7B,OAAO,EACH,yGAAyG;aAChH,CAAC,CAAC;QACP,CAAC;IACL,CAAC;IACD,MAAM,EAAE,KAAK,EAAE,GAAG,uBAAuB,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC;IAC5D,IAAI,KAAK,EAAE,CAAC;QACR,MAAM,KAAK,CAAC;IAChB,CAAC;IACD,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,UAAU,EAAE,CAAC,CAAC,CAAC;AAChE,CAAC;AAED,uFAAuF;AACvF,MAAM,UAAU,yBAAyB,CACrC,KAA0B,EAC1B,MAAgD;IAEhD,IACI,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,UAAU,CAAC,CAAC,QAAQ,CACjE,KAAK,CACR;QACD,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QACtB,MAAM,CAAC,MAAM,KAAK,CAAC;QACnB,MAAM,CAAC,MAAM,GAAG,GAAG,EACrB,CAAC;QACC,MAAM,IAAI,iBAAiB,CAAC;YACxB,IAAI,EAAE,uBAAuB;YAC7B,OAAO,EACH,yEAAyE;SAChF,CAAC,CAAC;IACP,CAAC;IACD,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;QAC7C,IAAI,KAAK,KAAK,UAAU,EAAE,CAAC;YACvB,MAAM,IAAI,GAAG,KAAkC,CAAC;YAChD,OAAO;gBACH,UAAU,EAAE,IAAI,EAAE,UAAU;gBAC5B,WAAW,EAAE,IAAI,EAAE,WAAW;aACX,CAAC;QAC5B,CAAC;QACD,OAAO,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,EAAoB,CAAC;IAChD,CAAC,CAAC,CAAC;IACH,MAAM,EAAE,KAAK,EAAE,GAAG,uBAAuB,CAAC,WAAW,CAAC,CAAC;IACvD,IAAI,KAAK,EAAE,CAAC;QACR,MAAM,KAAK,CAAC;IAChB,CAAC;IACD,OAAO,WAAW,CAAC;AACvB,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { FirebaseAdminAuth } from './firebase-admin-auth.js';
|
|
2
|
+
import type { IdentityQueryOptions, IdentityQueryResult } from './identity-types.js';
|
|
3
|
+
/** Execute one backend request, never follow a token or scan for more matches. @internal */
|
|
4
|
+
export declare function executeIdentityQuery(auth: FirebaseAdminAuth, options: IdentityQueryOptions, last?: boolean, pageToken?: string): Promise<{
|
|
5
|
+
data: IdentityQueryResult;
|
|
6
|
+
error: null;
|
|
7
|
+
} | {
|
|
8
|
+
data: null;
|
|
9
|
+
error: Error;
|
|
10
|
+
}>;
|
|
11
|
+
//# sourceMappingURL=identity-query.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"identity-query.d.ts","sourceRoot":"","sources":["../../src/auth/identity-query.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAGlE,OAAO,KAAK,EACR,oBAAoB,EACpB,mBAAmB,EACtB,MAAM,qBAAqB,CAAC;AAE7B,4FAA4F;AAC5F,wBAAsB,oBAAoB,CACtC,IAAI,EAAE,iBAAiB,EACvB,OAAO,EAAE,oBAAoB,EAC7B,IAAI,UAAQ,EACZ,SAAS,CAAC,EAAE,MAAM,GACnB,OAAO,CACN;IAAE,IAAI,EAAE,mBAAmB,CAAC;IAAC,KAAK,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,KAAK,CAAA;CAAE,CAC5E,CAyIA"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { identityLookupIdentifiers, identityOrIdentifiers, validateIdentityQueryOptions } from './identity-filter.js';
|
|
2
|
+
import { FirebaseEdgeError } from './errors.js';
|
|
3
|
+
/** Execute one backend request, never follow a token or scan for more matches. @internal */
|
|
4
|
+
export async function executeIdentityQuery(auth, options, last = false, pageToken) {
|
|
5
|
+
validateIdentityQueryOptions(options);
|
|
6
|
+
if (typeof last !== 'boolean' ||
|
|
7
|
+
(pageToken !== undefined &&
|
|
8
|
+
(typeof pageToken !== 'string' || pageToken.length === 0))) {
|
|
9
|
+
throw new FirebaseEdgeError({
|
|
10
|
+
code: 'auth/invalid-argument',
|
|
11
|
+
message: 'Use a boolean last flag and a nonempty page token.'
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
if (options.identifiers !== undefined ||
|
|
15
|
+
options.filter?.field === 'initialEmail' ||
|
|
16
|
+
options.filter?.operator === 'in') {
|
|
17
|
+
if ((options.identifiers !== undefined &&
|
|
18
|
+
options.filter !== undefined) ||
|
|
19
|
+
options.orderBy ||
|
|
20
|
+
options.offset !== undefined ||
|
|
21
|
+
options.limit !== undefined ||
|
|
22
|
+
last ||
|
|
23
|
+
pageToken !== undefined) {
|
|
24
|
+
throw new FirebaseEdgeError({
|
|
25
|
+
code: 'auth/invalid-argument',
|
|
26
|
+
message: 'Lookup filters do not support sorting, limits, offsets, or page tokens.'
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
const identifiers = options.identifiers !== undefined
|
|
30
|
+
? identityOrIdentifiers(options.identifiers)
|
|
31
|
+
: identityLookupIdentifiers(options.filter.field, options.filter.operator === 'in'
|
|
32
|
+
? options.filter.value
|
|
33
|
+
: [options.filter.value]);
|
|
34
|
+
const { error, data } = await auth.getUsers(identifiers);
|
|
35
|
+
if (error) {
|
|
36
|
+
return { error, data: null };
|
|
37
|
+
}
|
|
38
|
+
return {
|
|
39
|
+
error: null,
|
|
40
|
+
data: { users: data.users, nextOffset: null, nextPageToken: null }
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
const offset = options.offset ?? 0;
|
|
44
|
+
const limit = options.limit ?? 500;
|
|
45
|
+
const orderBy = options.orderBy ?? { field: 'uid', direction: 'asc' };
|
|
46
|
+
const useBatch = !options.filter &&
|
|
47
|
+
!last &&
|
|
48
|
+
offset === 0 &&
|
|
49
|
+
orderBy.field === 'uid' &&
|
|
50
|
+
orderBy.direction === 'asc';
|
|
51
|
+
if (pageToken !== undefined && !useBatch) {
|
|
52
|
+
throw new FirebaseEdgeError({
|
|
53
|
+
code: 'auth/invalid-argument',
|
|
54
|
+
message: 'Page tokens require an unfiltered UID-ascending listing without offset or limitToLast.'
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
if (limit > (useBatch ? 1000 : 500)) {
|
|
58
|
+
throw new FirebaseEdgeError({
|
|
59
|
+
code: 'auth/invalid-argument',
|
|
60
|
+
message: useBatch
|
|
61
|
+
? 'Token listings support at most 1000 users per request.'
|
|
62
|
+
: 'Filtered, sorted, and offset queries support at most 500 users per request.'
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
if (last && offset + limit > 500) {
|
|
66
|
+
throw new FirebaseEdgeError({
|
|
67
|
+
code: 'auth/invalid-argument',
|
|
68
|
+
message: 'limitToLast plus offset must not exceed 500 for a single query request.'
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
if (useBatch) {
|
|
72
|
+
const { error, data } = await auth.listUsers(limit, pageToken);
|
|
73
|
+
if (error) {
|
|
74
|
+
return { data: null, error };
|
|
75
|
+
}
|
|
76
|
+
return {
|
|
77
|
+
data: {
|
|
78
|
+
users: data.users,
|
|
79
|
+
nextOffset: null,
|
|
80
|
+
nextPageToken: data.pageToken ?? null
|
|
81
|
+
},
|
|
82
|
+
error: null
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
const request = last
|
|
86
|
+
? {
|
|
87
|
+
...options,
|
|
88
|
+
offset: 0,
|
|
89
|
+
limit: limit + offset,
|
|
90
|
+
orderBy: {
|
|
91
|
+
field: orderBy.field,
|
|
92
|
+
direction: orderBy.direction === 'asc'
|
|
93
|
+
? 'desc'
|
|
94
|
+
: 'asc'
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
: { ...options, orderBy };
|
|
98
|
+
const { error, data } = await auth._queryUsers(request);
|
|
99
|
+
if (error) {
|
|
100
|
+
return { data: null, error };
|
|
101
|
+
}
|
|
102
|
+
if (last) {
|
|
103
|
+
const count = Math.min(limit, Math.max(0, data.length - offset));
|
|
104
|
+
return {
|
|
105
|
+
data: {
|
|
106
|
+
users: data.slice(0, count).reverse(),
|
|
107
|
+
nextOffset: null,
|
|
108
|
+
nextPageToken: null
|
|
109
|
+
},
|
|
110
|
+
error: null
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
return {
|
|
114
|
+
data: {
|
|
115
|
+
users: data,
|
|
116
|
+
nextOffset: data.length === limit ? offset + data.length : null,
|
|
117
|
+
nextPageToken: null
|
|
118
|
+
},
|
|
119
|
+
error: null
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=identity-query.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"identity-query.js","sourceRoot":"","sources":["../../src/auth/identity-query.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import type { IdentityUpdateData, IdentitySetData, IdentityWriteResult } from './identity-write.js';
|
|
2
|
+
import type { UserMetadataRequest } from './user-import.js';
|
|
3
|
+
import type { ActionCodeSettings, FirebaseAdminAuth } from './firebase-admin-auth.js';
|
|
4
|
+
import { type UserIdentifier } from './user-request.js';
|
|
5
|
+
import type { UserRecord } from './user-record.js';
|
|
6
|
+
import { FirebaseEdgeError } from './errors.js';
|
|
7
|
+
export type IdentityUserRecord<Claims extends object = Record<string, unknown>> = Omit<UserRecord, 'customClaims'> & {
|
|
8
|
+
readonly customClaims?: Partial<Claims>;
|
|
9
|
+
};
|
|
10
|
+
type IdentityWriteResponse = {
|
|
11
|
+
error: null;
|
|
12
|
+
data: IdentityWriteResult;
|
|
13
|
+
} | {
|
|
14
|
+
error: Error;
|
|
15
|
+
data: null;
|
|
16
|
+
};
|
|
17
|
+
export interface IdentityReferenceOptions<Multiple extends boolean = false, Uid extends boolean = false> {
|
|
18
|
+
/** Return an array of matches instead of one user or null. Defaults to false. */
|
|
19
|
+
multiple?: Multiple;
|
|
20
|
+
/** Enable mutations for a single UID identifier. Defaults to false. */
|
|
21
|
+
uidReference?: Uid;
|
|
22
|
+
}
|
|
23
|
+
/** Exact lookup with no query modifiers or count operation. */
|
|
24
|
+
export declare class IdentityReference<Multiple extends boolean = false, Uid extends boolean = false, Claims extends object = Record<string, unknown>> {
|
|
25
|
+
private readonly auth;
|
|
26
|
+
private readonly identifier;
|
|
27
|
+
private readonly multiple;
|
|
28
|
+
private readonly uidReference;
|
|
29
|
+
private claimsResource?;
|
|
30
|
+
private metadataResource?;
|
|
31
|
+
constructor(auth: FirebaseAdminAuth, identifier: UserIdentifier, options?: IdentityReferenceOptions<Multiple, Uid>);
|
|
32
|
+
update(this: IdentityReference<false, true, Claims>, data: IdentityUpdateData<Claims>): Promise<{
|
|
33
|
+
data: null;
|
|
34
|
+
error: FirebaseEdgeError;
|
|
35
|
+
} | {
|
|
36
|
+
data: IdentityWriteResult;
|
|
37
|
+
error: null;
|
|
38
|
+
}>;
|
|
39
|
+
set(this: IdentityReference<false, true, Claims>, data: IdentitySetData<Claims>): Promise<{
|
|
40
|
+
data: null;
|
|
41
|
+
error: FirebaseEdgeError;
|
|
42
|
+
} | {
|
|
43
|
+
data: IdentityWriteResult;
|
|
44
|
+
error: null;
|
|
45
|
+
}>;
|
|
46
|
+
/** Disable sign-in for this user. */
|
|
47
|
+
disable(this: IdentityReference<false, true, Claims>): Promise<{
|
|
48
|
+
data: null;
|
|
49
|
+
error: FirebaseEdgeError;
|
|
50
|
+
} | {
|
|
51
|
+
data: IdentityWriteResult;
|
|
52
|
+
error: null;
|
|
53
|
+
}>;
|
|
54
|
+
/** Enable sign-in for this user. */
|
|
55
|
+
enable(this: IdentityReference<false, true, Claims>): Promise<{
|
|
56
|
+
data: null;
|
|
57
|
+
error: FirebaseEdgeError;
|
|
58
|
+
} | {
|
|
59
|
+
data: IdentityWriteResult;
|
|
60
|
+
error: null;
|
|
61
|
+
}>;
|
|
62
|
+
/** Ask Firebase to send a password-reset email to this user. */
|
|
63
|
+
resetPassword(this: IdentityReference<false, true, Claims>, settings?: ActionCodeSettings): Promise<IdentityWriteResponse>;
|
|
64
|
+
private sendPasswordResetEmail;
|
|
65
|
+
/** Custom-claims operations for a UID reference; accessing this performs no I/O. */
|
|
66
|
+
get claims(): Uid extends true ? Multiple extends false ? IdentityClaims<Claims> : never : never;
|
|
67
|
+
/** Writable timestamps for a UID reference; accessing this performs no I/O. */
|
|
68
|
+
get metadata(): Uid extends true ? Multiple extends false ? IdentityMetadata : never : never;
|
|
69
|
+
delete(this: IdentityReference<false, true, Claims>): Promise<IdentityWriteResponse>;
|
|
70
|
+
private requireUid;
|
|
71
|
+
/** Check whether an exact single-user lookup matches an account. */
|
|
72
|
+
exists(this: IdentityReference<false, Uid, Claims>): Promise<{
|
|
73
|
+
error: null;
|
|
74
|
+
data: boolean;
|
|
75
|
+
} | {
|
|
76
|
+
error: Error;
|
|
77
|
+
data: null;
|
|
78
|
+
}>;
|
|
79
|
+
get(): Promise<{
|
|
80
|
+
error: null;
|
|
81
|
+
data: Multiple extends true ? IdentityUserRecord<Claims>[] : IdentityUserRecord<Claims> | null;
|
|
82
|
+
} | {
|
|
83
|
+
error: Error;
|
|
84
|
+
data: null;
|
|
85
|
+
}>;
|
|
86
|
+
}
|
|
87
|
+
/** Update explicitly supplied account timestamps. Access through user.metadata. */
|
|
88
|
+
declare class IdentityMetadata {
|
|
89
|
+
private readonly auth;
|
|
90
|
+
private readonly uid;
|
|
91
|
+
constructor(auth: FirebaseAdminAuth, uid: string);
|
|
92
|
+
update(metadata: UserMetadataRequest): Promise<{
|
|
93
|
+
data: null;
|
|
94
|
+
error: FirebaseEdgeError;
|
|
95
|
+
} | {
|
|
96
|
+
data: IdentityWriteResult;
|
|
97
|
+
error: null;
|
|
98
|
+
}>;
|
|
99
|
+
get(): Promise<{
|
|
100
|
+
error: Error;
|
|
101
|
+
data: null;
|
|
102
|
+
} | {
|
|
103
|
+
error: null;
|
|
104
|
+
data: import("./firebase-types.js").UserMetadata & {
|
|
105
|
+
toJSON(): object;
|
|
106
|
+
};
|
|
107
|
+
}>;
|
|
108
|
+
revokeTokens(): Promise<IdentityWriteResponse>;
|
|
109
|
+
}
|
|
110
|
+
/** Claims stored on one existing UID. Access through user.claims. */
|
|
111
|
+
declare class IdentityClaims<Claims extends object> {
|
|
112
|
+
private readonly auth;
|
|
113
|
+
private readonly uid;
|
|
114
|
+
constructor(auth: FirebaseAdminAuth, uid: string);
|
|
115
|
+
/** Replace all custom claims; null clears them. No read is required. */
|
|
116
|
+
set(claims: Partial<Claims> | null): Promise<IdentityWriteResponse>;
|
|
117
|
+
get(): Promise<{
|
|
118
|
+
error: Error;
|
|
119
|
+
data: null;
|
|
120
|
+
} | {
|
|
121
|
+
error: null;
|
|
122
|
+
data: Partial<Claims>;
|
|
123
|
+
}>;
|
|
124
|
+
/** Select one literal top-level claim key, not a dotted path. */
|
|
125
|
+
byKey<Key extends Extract<keyof Claims, string>>(key: Key): IdentityClaimKey<Claims, Key>;
|
|
126
|
+
/** Shallow-merge claims using a non-atomic read followed by a write. */
|
|
127
|
+
update(claims: Partial<Claims>): Promise<IdentityWriteResponse>;
|
|
128
|
+
/** Clear all custom claims without deleting the user. */
|
|
129
|
+
delete(): Promise<IdentityWriteResponse>;
|
|
130
|
+
}
|
|
131
|
+
/** One claim value. Updates and deletion preserve other top-level claims. */
|
|
132
|
+
declare class IdentityClaimKey<Claims extends object, Key extends Extract<keyof Claims, string>> {
|
|
133
|
+
private readonly claims;
|
|
134
|
+
private readonly key;
|
|
135
|
+
constructor(claims: IdentityClaims<Claims>, key: Key);
|
|
136
|
+
/** Set or replace this key's value while preserving the other claims. */
|
|
137
|
+
set(value: Exclude<Claims[Key], undefined>): Promise<IdentityWriteResponse>;
|
|
138
|
+
/** Read one own claim value; an absent key returns undefined. */
|
|
139
|
+
get(): Promise<{
|
|
140
|
+
error: null;
|
|
141
|
+
data: Claims[Key] | undefined;
|
|
142
|
+
} | {
|
|
143
|
+
error: Error;
|
|
144
|
+
data: null;
|
|
145
|
+
}>;
|
|
146
|
+
update(value: Exclude<Claims[Key], undefined>): Promise<IdentityWriteResponse>;
|
|
147
|
+
delete(): Promise<IdentityWriteResponse>;
|
|
148
|
+
}
|
|
149
|
+
export {};
|
|
150
|
+
//# sourceMappingURL=identity-reference.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"identity-reference.d.ts","sourceRoot":"","sources":["../../src/auth/identity-reference.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACR,kBAAkB,EAClB,eAAe,EACf,mBAAmB,EACtB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,KAAK,EACR,kBAAkB,EAClB,iBAAiB,EACpB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAGH,KAAK,cAAc,EACtB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAe,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAE7D,MAAM,MAAM,kBAAkB,CAC1B,MAAM,SAAS,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAC/C,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,GAAG;IACnC,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;CAC3C,CAAC;AAEF,KAAK,qBAAqB,GACpB;IAAE,KAAK,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,mBAAmB,CAAA;CAAE,GAC1C;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,IAAI,CAAA;CAAE,CAAC;AAEnC,MAAM,WAAW,wBAAwB,CACrC,QAAQ,SAAS,OAAO,GAAG,KAAK,EAChC,GAAG,SAAS,OAAO,GAAG,KAAK;IAE3B,iFAAiF;IACjF,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,uEAAuE;IACvE,YAAY,CAAC,EAAE,GAAG,CAAC;CACtB;AAED,+DAA+D;AAC/D,qBAAa,iBAAiB,CAC1B,QAAQ,SAAS,OAAO,GAAG,KAAK,EAChC,GAAG,SAAS,OAAO,GAAG,KAAK,EAC3B,MAAM,SAAS,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAS3C,OAAO,CAAC,QAAQ,CAAC,IAAI;IAPzB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAiB;IAC5C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAW;IACpC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAM;IACnC,OAAO,CAAC,cAAc,CAAC,CAAyB;IAChD,OAAO,CAAC,gBAAgB,CAAC,CAAmB;gBAGvB,IAAI,EAAE,iBAAiB,EACxC,UAAU,EAAE,cAAc,EAC1B,OAAO,GAAE,wBAAwB,CAAC,QAAQ,EAAE,GAAG,CAAM;IA0BzD,MAAM,CACF,IAAI,EAAE,iBAAiB,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,EAC5C,IAAI,EAAE,kBAAkB,CAAC,MAAM,CAAC;;;;;;;IAMpC,GAAG,CACC,IAAI,EAAE,iBAAiB,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,EAC5C,IAAI,EAAE,eAAe,CAAC,MAAM,CAAC;;;;;;;IAMjC,qCAAqC;IACrC,OAAO,CAAC,IAAI,EAAE,iBAAiB,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC;;;;;;;IAIpD,oCAAoC;IACpC,MAAM,CAAC,IAAI,EAAE,iBAAiB,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC;;;;;;;IAInD,gEAAgE;IAChE,aAAa,CACT,IAAI,EAAE,iBAAiB,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,EAC5C,QAAQ,CAAC,EAAE,kBAAkB;YAMnB,sBAAsB;IAyBpC,oFAAoF;IACpF,IAAI,MAAM,IAAI,GAAG,SAAS,IAAI,GACxB,QAAQ,SAAS,KAAK,GAClB,cAAc,CAAC,MAAM,CAAC,GACtB,KAAK,GACT,KAAK,CAQV;IAED,+EAA+E;IAC/E,IAAI,QAAQ,IAAI,GAAG,SAAS,IAAI,GAC1B,QAAQ,SAAS,KAAK,GAClB,gBAAgB,GAChB,KAAK,GACT,KAAK,CAQV;IAED,MAAM,CAAC,IAAI,EAAE,iBAAiB,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC;IAKnD,OAAO,CAAC,UAAU;IAclB,oEAAoE;IAC9D,MAAM,CACR,IAAI,EAAE,iBAAiB,CAAC,KAAK,EAAE,GAAG,EAAE,MAAM,CAAC,GAC5C,OAAO,CAAC;QAAE,KAAK,EAAE,IAAI,CAAC;QAAC,IAAI,EAAE,OAAO,CAAA;KAAE,GAAG;QAAE,KAAK,EAAE,KAAK,CAAC;QAAC,IAAI,EAAE,IAAI,CAAA;KAAE,CAAC;IAiBnE,GAAG,IAAI,OAAO,CACd;QACI,KAAK,EAAE,IAAI,CAAC;QACZ,IAAI,EAAE,QAAQ,SAAS,IAAI,GACrB,kBAAkB,CAAC,MAAM,CAAC,EAAE,GAC5B,kBAAkB,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;KAC3C,GACD;QAAE,KAAK,EAAE,KAAK,CAAC;QAAC,IAAI,EAAE,IAAI,CAAA;KAAE,CACjC;CAkBJ;AAED,mFAAmF;AACnF,cAAM,gBAAgB;IAEd,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,GAAG;gBADH,IAAI,EAAE,iBAAiB,EACvB,GAAG,EAAE,MAAM;IAGhC,MAAM,CAAC,QAAQ,EAAE,mBAAmB;;;;;;;IAI9B,GAAG;;;;;;;;;IAQT,YAAY;CAMf;AAED,qEAAqE;AACrE,cAAM,cAAc,CAAC,MAAM,SAAS,MAAM;IAElC,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,GAAG;gBADH,IAAI,EAAE,iBAAiB,EACvB,GAAG,EAAE,MAAM;IAGhC,wEAAwE;IACxE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI;IAO5B,GAAG;;;;;cAOkC,OAAO,CAAC,MAAM,CAAC;;IAI1D,iEAAiE;IACjE,KAAK,CAAC,GAAG,SAAS,OAAO,CAAC,MAAM,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,GAAG;IAczD,wEAAwE;IAClE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC;IA+BpC,yDAAyD;IACzD,MAAM;CAGT;AAED,6EAA6E;AAC7E,cAAM,gBAAgB,CAClB,MAAM,SAAS,MAAM,EACrB,GAAG,SAAS,OAAO,CAAC,MAAM,MAAM,EAAE,MAAM,CAAC;IAGrC,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,GAAG;gBADH,MAAM,EAAE,cAAc,CAAC,MAAM,CAAC,EAC9B,GAAG,EAAE,GAAG;IAG7B,yEAAyE;IACzE,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,SAAS,CAAC;IAI1C,iEAAiE;IAC3D,GAAG,IAAI,OAAO,CACd;QAAE,KAAK,EAAE,IAAI,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS,CAAA;KAAE,GAC9C;QAAE,KAAK,EAAE,KAAK,CAAC;QAAC,IAAI,EAAE,IAAI,CAAA;KAAE,CACjC;IAWK,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,SAAS,CAAC;IAsC7C,MAAM;CASf"}
|