@ttt-productions/auth-core 0.6.0 → 1.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/dist/server/assertAuth.d.ts +1 -1
- package/dist/server/assertAuth.d.ts.map +1 -1
- package/dist/server/assertAuth.js +9 -55
- package/dist/server/assertAuth.js.map +1 -1
- package/dist/server/assertAuth.test.js +3 -224
- package/dist/server/assertAuth.test.js.map +1 -1
- package/dist/server/types.d.ts +6 -55
- package/dist/server/types.d.ts.map +1 -1
- package/dist/server/types.js +1 -2
- package/dist/server/types.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import type { AssertAuthConfig, AssertAuthFn } from "./types.js";
|
|
2
|
-
export declare function createAssertAuth<TUser
|
|
2
|
+
export declare function createAssertAuth<TUser>(config: AssertAuthConfig<TUser>): AssertAuthFn<TUser>;
|
|
3
3
|
//# sourceMappingURL=assertAuth.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assertAuth.d.ts","sourceRoot":"","sources":["../../src/server/assertAuth.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"assertAuth.d.ts","sourceRoot":"","sources":["../../src/server/assertAuth.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EACV,gBAAgB,EAChB,YAAY,EAGb,MAAM,YAAY,CAAC;AAEpB,wBAAgB,gBAAgB,CAAC,KAAK,EACpC,MAAM,EAAE,gBAAgB,CAAC,KAAK,CAAC,GAC9B,YAAY,CAAC,KAAK,CAAC,CAkErB"}
|
|
@@ -1,17 +1,15 @@
|
|
|
1
1
|
// packages/auth-core/src/server/assertAuth.ts
|
|
2
2
|
//
|
|
3
3
|
// Factory that produces an assertAuth function bound to a consuming app's
|
|
4
|
-
// Firestore paths, user
|
|
4
|
+
// Firestore paths, user shape, and admin check.
|
|
5
5
|
//
|
|
6
6
|
// Every Cloud Functions callable in the consuming app should invoke the
|
|
7
7
|
// returned assertAuth as its first executable line. The check order is:
|
|
8
8
|
// 1. Authentication
|
|
9
9
|
// 2. Email verification
|
|
10
|
-
// 3.
|
|
10
|
+
// 3. User doc Firestore read (when status check is needed)
|
|
11
11
|
// 4. Status check (banned / disabled)
|
|
12
|
-
// 5.
|
|
13
|
-
// 6. Project membership check
|
|
14
|
-
// 7. Admin check (delegated to config.requireAdmin)
|
|
12
|
+
// 5. Admin check (delegated to config.requireAdmin)
|
|
15
13
|
import { HttpsError } from "firebase-functions/v2/https";
|
|
16
14
|
export function createAssertAuth(config) {
|
|
17
15
|
return async function assertAuth(request, requirements = {}) {
|
|
@@ -28,18 +26,11 @@ export function createAssertAuth(config) {
|
|
|
28
26
|
throw new HttpsError("failed-precondition", "Email must be verified");
|
|
29
27
|
}
|
|
30
28
|
}
|
|
31
|
-
// 3.
|
|
32
|
-
const needsUserDoc = requirements.creator === true || requirements.allowAnyStatus !== true;
|
|
33
|
-
const needsProject = requirements.projectMembership !== undefined;
|
|
29
|
+
// 3. User doc Firestore read (skipped when allowAnyStatus is set)
|
|
34
30
|
const db = config.firestore();
|
|
35
|
-
const
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
: Promise.resolve(null),
|
|
39
|
-
needsProject
|
|
40
|
-
? db.doc(config.projectPath(requirements.projectMembership.projectId)).get()
|
|
41
|
-
: Promise.resolve(null),
|
|
42
|
-
]);
|
|
31
|
+
const userSnap = requirements.allowAnyStatus !== true
|
|
32
|
+
? await db.doc(config.userProfilePath(uid)).get()
|
|
33
|
+
: null;
|
|
43
34
|
let userDoc;
|
|
44
35
|
// 4. Status check (default: block banned + disabled; skipped if allowAnyStatus)
|
|
45
36
|
if (requirements.allowAnyStatus !== true) {
|
|
@@ -56,52 +47,15 @@ export function createAssertAuth(config) {
|
|
|
56
47
|
}
|
|
57
48
|
userDoc = userData;
|
|
58
49
|
}
|
|
59
|
-
// 5.
|
|
60
|
-
if (requirements.creator === true) {
|
|
61
|
-
if (!userDoc) {
|
|
62
|
-
// allowAnyStatus is true — user doc was still fetched, validate now
|
|
63
|
-
if (!userSnap || !userSnap.exists) {
|
|
64
|
-
throw new HttpsError("not-found", "User profile not found");
|
|
65
|
-
}
|
|
66
|
-
userDoc = userSnap.data();
|
|
67
|
-
}
|
|
68
|
-
if (!config.isUserCreator(userDoc)) {
|
|
69
|
-
throw new HttpsError("failed-precondition", "Creator status required");
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
// 6. Project membership check
|
|
73
|
-
let projectContext;
|
|
74
|
-
if (requirements.projectMembership !== undefined) {
|
|
75
|
-
if (!projectSnap || !projectSnap.exists) {
|
|
76
|
-
throw new HttpsError("not-found", "Project not found");
|
|
77
|
-
}
|
|
78
|
-
const projectData = projectSnap.data();
|
|
79
|
-
const isOwner = config.isProjectOwner(projectData, uid);
|
|
80
|
-
const isMember = isOwner || config.isProjectMember(projectData, uid);
|
|
81
|
-
const { projectId, action } = requirements.projectMembership;
|
|
82
|
-
const allowed = await config.isProjectActionAllowed({
|
|
83
|
-
project: projectData,
|
|
84
|
-
projectId,
|
|
85
|
-
uid,
|
|
86
|
-
action,
|
|
87
|
-
});
|
|
88
|
-
if (!allowed) {
|
|
89
|
-
throw new HttpsError("permission-denied", "Project action is not allowed");
|
|
90
|
-
}
|
|
91
|
-
projectContext = { data: projectData, isOwner, isMember };
|
|
92
|
-
}
|
|
93
|
-
// 7. Admin check (delegates to config.requireAdmin)
|
|
50
|
+
// 5. Admin check (delegates to config.requireAdmin)
|
|
94
51
|
if (requirements.admin !== undefined) {
|
|
95
52
|
await config.requireAdmin(uid, token, requirements.admin);
|
|
96
53
|
}
|
|
97
|
-
//
|
|
54
|
+
// 6. Return context with whatever docs were fetched
|
|
98
55
|
const ctx = { uid, token };
|
|
99
56
|
if (userDoc !== undefined) {
|
|
100
57
|
ctx.userDoc = userDoc;
|
|
101
58
|
}
|
|
102
|
-
if (projectContext !== undefined) {
|
|
103
|
-
ctx.project = projectContext;
|
|
104
|
-
}
|
|
105
59
|
return ctx;
|
|
106
60
|
};
|
|
107
61
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assertAuth.js","sourceRoot":"","sources":["../../src/server/assertAuth.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAC9C,EAAE;AACF,0EAA0E;AAC1E,
|
|
1
|
+
{"version":3,"file":"assertAuth.js","sourceRoot":"","sources":["../../src/server/assertAuth.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAC9C,EAAE;AACF,0EAA0E;AAC1E,gDAAgD;AAChD,EAAE;AACF,wEAAwE;AACxE,wEAAwE;AACxE,sBAAsB;AACtB,0BAA0B;AAC1B,6DAA6D;AAC7D,wCAAwC;AACxC,sDAAsD;AAEtD,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AASzD,MAAM,UAAU,gBAAgB,CAC9B,MAA+B;IAE/B,OAAO,KAAK,UAAU,UAAU,CAC9B,OAAwB,EACxB,eAAiC,EAAE;QAEnC,yCAAyC;QACzC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YAClB,MAAM,IAAI,UAAU,CAAC,iBAAiB,EAAE,2BAA2B,CAAC,CAAC;QACvE,CAAC;QAED,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;QAC7B,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;QAEjC,8BAA8B;QAC9B,IACE,YAAY,CAAC,aAAa,KAAK,IAAI;YACnC,YAAY,CAAC,eAAe,KAAK,IAAI,EACrC,CAAC;YACD,IAAI,KAAK,CAAC,cAAc,KAAK,IAAI,EAAE,CAAC;gBAClC,MAAM,IAAI,UAAU,CAAC,qBAAqB,EAAE,wBAAwB,CAAC,CAAC;YACxE,CAAC;QACH,CAAC;QAED,kEAAkE;QAClE,MAAM,EAAE,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;QAC9B,MAAM,QAAQ,GACZ,YAAY,CAAC,cAAc,KAAK,IAAI;YAClC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE;YACjD,CAAC,CAAC,IAAI,CAAC;QAEX,IAAI,OAA0B,CAAC;QAE/B,gFAAgF;QAChF,IAAI,YAAY,CAAC,cAAc,KAAK,IAAI,EAAE,CAAC;YACzC,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;gBAClC,MAAM,IAAI,UAAU,CAAC,WAAW,EAAE,wBAAwB,CAAC,CAAC;YAC9D,CAAC;YACD,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,EAAW,CAAC;YAC1C,MAAM,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;YAC9C,IAAI,MAAM,KAAK,UAAU,EAAE,CAAC;gBAC1B,MAAM,IAAI,UAAU,CAClB,mBAAmB,EACnB,iCAAiC,CAClC,CAAC;YACJ,CAAC;YACD,IAAI,MAAM,KAAK,QAAQ,IAAI,YAAY,CAAC,WAAW,KAAK,IAAI,EAAE,CAAC;gBAC7D,MAAM,IAAI,UAAU,CAClB,mBAAmB,EACnB,iCAAiC,CAClC,CAAC;YACJ,CAAC;YACD,OAAO,GAAG,QAAQ,CAAC;QACrB,CAAC;QAED,oDAAoD;QACpD,IAAI,YAAY,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YACrC,MAAM,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC;QAC5D,CAAC;QAED,oDAAoD;QACpD,MAAM,GAAG,GAAuB,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;QAC/C,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,GAAG,CAAC,OAAO,GAAG,OAAO,CAAC;QACxB,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -30,46 +30,20 @@ const activeUserDoc = {
|
|
|
30
30
|
displayName: "Test User",
|
|
31
31
|
status: "active",
|
|
32
32
|
};
|
|
33
|
-
const creatorUserDoc = {
|
|
34
|
-
...activeUserDoc,
|
|
35
|
-
creator: "creator-12345",
|
|
36
|
-
};
|
|
37
|
-
function memberProjectDoc(callerUid) {
|
|
38
|
-
return {
|
|
39
|
-
projectId: "p1",
|
|
40
|
-
ownedBy: { uid: "owner-uid" },
|
|
41
|
-
activeUserIds: { [callerUid]: true },
|
|
42
|
-
activeUsers: [],
|
|
43
|
-
};
|
|
44
|
-
}
|
|
45
33
|
// --- harness ---------------------------------------------------------------
|
|
46
34
|
let mockUserGet;
|
|
47
|
-
let mockProjectGet;
|
|
48
35
|
let mockRequireAdmin;
|
|
49
|
-
let mockIsProjectActionAllowed;
|
|
50
36
|
let mockDbDoc;
|
|
51
37
|
let assertAuth;
|
|
52
38
|
beforeEach(() => {
|
|
53
39
|
mockUserGet = vi.fn().mockResolvedValue({ exists: true, data: () => activeUserDoc });
|
|
54
|
-
mockProjectGet = vi.fn().mockResolvedValue({
|
|
55
|
-
exists: true,
|
|
56
|
-
data: () => memberProjectDoc("uid-123"),
|
|
57
|
-
});
|
|
58
40
|
mockRequireAdmin = vi.fn().mockResolvedValue(undefined);
|
|
59
|
-
mockIsProjectActionAllowed = vi.fn(async ({ project, uid, action }) => action === "project.read" &&
|
|
60
|
-
(project.ownedBy?.uid === uid || project.activeUserIds?.[uid] === true || (project.activeUsers || []).some((u) => u.uid === uid)));
|
|
61
41
|
const userDocRef = { get: mockUserGet };
|
|
62
|
-
|
|
63
|
-
mockDbDoc = vi.fn((path) => {
|
|
64
|
-
if (path.startsWith("allProjects/"))
|
|
65
|
-
return projectDocRef;
|
|
66
|
-
return userDocRef;
|
|
67
|
-
});
|
|
42
|
+
mockDbDoc = vi.fn(() => userDocRef);
|
|
68
43
|
const fakeDb = { doc: mockDbDoc };
|
|
69
44
|
const config = {
|
|
70
45
|
firestore: () => fakeDb,
|
|
71
46
|
userProfilePath: (uid) => `userProfiles/${uid}`,
|
|
72
|
-
projectPath: (projectId) => `allProjects/${projectId}`,
|
|
73
47
|
getUserStatus: (user) => {
|
|
74
48
|
if (user.status === "disabled")
|
|
75
49
|
return "disabled";
|
|
@@ -77,12 +51,6 @@ beforeEach(() => {
|
|
|
77
51
|
return "banned";
|
|
78
52
|
return "ok";
|
|
79
53
|
},
|
|
80
|
-
isUserCreator: (user) => Boolean(user.creator),
|
|
81
|
-
isProjectOwner: (project, uid) => project.ownedBy?.uid === uid,
|
|
82
|
-
isProjectMember: (project, uid) => project.ownedBy?.uid === uid ||
|
|
83
|
-
project.activeUserIds?.[uid] === true ||
|
|
84
|
-
(project.activeUsers || []).some((u) => u.uid === uid),
|
|
85
|
-
isProjectActionAllowed: mockIsProjectActionAllowed,
|
|
86
54
|
requireAdmin: mockRequireAdmin,
|
|
87
55
|
};
|
|
88
56
|
assertAuth = createAssertAuth(config);
|
|
@@ -98,7 +66,6 @@ describe("Authentication", () => {
|
|
|
98
66
|
const ctx = await assertAuth(makeRequest(), { allowAnyStatus: true });
|
|
99
67
|
expect(ctx.uid).toBe("uid-123");
|
|
100
68
|
expect(ctx.userDoc).toBeUndefined();
|
|
101
|
-
expect(ctx.project).toBeUndefined();
|
|
102
69
|
expect(mockDbDoc).not.toHaveBeenCalled();
|
|
103
70
|
});
|
|
104
71
|
});
|
|
@@ -189,146 +156,6 @@ describe("allowBanned opt-in", () => {
|
|
|
189
156
|
await expect(assertAuth(makeRequest(), { allowBanned: true })).rejects.toMatchObject({ code: "not-found" });
|
|
190
157
|
});
|
|
191
158
|
});
|
|
192
|
-
describe("Creator check", () => {
|
|
193
|
-
it("throws failed-precondition when user has no creator field", async () => {
|
|
194
|
-
mockUserGet.mockResolvedValue({
|
|
195
|
-
exists: true,
|
|
196
|
-
data: () => ({ ...activeUserDoc }),
|
|
197
|
-
});
|
|
198
|
-
await expect(assertAuth(makeRequest(), { creator: true, allowAnyStatus: true })).rejects.toMatchObject({ code: "failed-precondition" });
|
|
199
|
-
});
|
|
200
|
-
it("succeeds when user has a truthy creator string", async () => {
|
|
201
|
-
mockUserGet.mockResolvedValue({
|
|
202
|
-
exists: true,
|
|
203
|
-
data: () => creatorUserDoc,
|
|
204
|
-
});
|
|
205
|
-
const ctx = await assertAuth(makeRequest(), {
|
|
206
|
-
creator: true,
|
|
207
|
-
allowAnyStatus: true,
|
|
208
|
-
});
|
|
209
|
-
expect(ctx.userDoc).toMatchObject({ creator: "creator-12345" });
|
|
210
|
-
});
|
|
211
|
-
it("throws not-found when user doc is missing and creator check runs", async () => {
|
|
212
|
-
mockUserGet.mockResolvedValue({ exists: false, data: () => null });
|
|
213
|
-
await expect(assertAuth(makeRequest(), { creator: true, allowAnyStatus: true })).rejects.toMatchObject({ code: "not-found" });
|
|
214
|
-
});
|
|
215
|
-
it("throws permission-denied (not failed-precondition) when user is banned and creator=true", async () => {
|
|
216
|
-
mockUserGet.mockResolvedValue({
|
|
217
|
-
exists: true,
|
|
218
|
-
data: () => ({ ...creatorUserDoc, status: "banned" }),
|
|
219
|
-
});
|
|
220
|
-
// banned check in step 4 fires before creator check in step 5
|
|
221
|
-
await expect(assertAuth(makeRequest(), { creator: true })).rejects.toMatchObject({ code: "permission-denied" });
|
|
222
|
-
});
|
|
223
|
-
});
|
|
224
|
-
describe("Project membership", () => {
|
|
225
|
-
it("throws not-found when project doc does not exist", async () => {
|
|
226
|
-
mockProjectGet.mockResolvedValue({ exists: false, data: () => null });
|
|
227
|
-
await expect(assertAuth(makeRequest(), {
|
|
228
|
-
projectMembership: { projectId: "p1", action: "project.read" },
|
|
229
|
-
allowAnyStatus: true,
|
|
230
|
-
})).rejects.toMatchObject({ code: "not-found" });
|
|
231
|
-
});
|
|
232
|
-
it("throws permission-denied when caller is not in any membership field", async () => {
|
|
233
|
-
mockProjectGet.mockResolvedValue({
|
|
234
|
-
exists: true,
|
|
235
|
-
data: () => ({
|
|
236
|
-
projectId: "p1",
|
|
237
|
-
ownedBy: { uid: "other-uid" },
|
|
238
|
-
activeUserIds: { "another-uid": true },
|
|
239
|
-
activeUsers: [{ uid: "yet-another-uid" }],
|
|
240
|
-
}),
|
|
241
|
-
});
|
|
242
|
-
await expect(assertAuth(makeRequest(), {
|
|
243
|
-
projectMembership: { projectId: "p1", action: "project.read" },
|
|
244
|
-
allowAnyStatus: true,
|
|
245
|
-
})).rejects.toMatchObject({ code: "permission-denied" });
|
|
246
|
-
});
|
|
247
|
-
it("succeeds and sets isMember=true, isOwner=false when caller is in activeUserIds", async () => {
|
|
248
|
-
mockProjectGet.mockResolvedValue({
|
|
249
|
-
exists: true,
|
|
250
|
-
data: () => ({
|
|
251
|
-
projectId: "p1",
|
|
252
|
-
ownedBy: { uid: "owner-uid" },
|
|
253
|
-
activeUserIds: { "uid-123": true },
|
|
254
|
-
activeUsers: [],
|
|
255
|
-
}),
|
|
256
|
-
});
|
|
257
|
-
const ctx = await assertAuth(makeRequest(), {
|
|
258
|
-
projectMembership: { projectId: "p1", action: "project.read" },
|
|
259
|
-
allowAnyStatus: true,
|
|
260
|
-
});
|
|
261
|
-
expect(ctx.project?.isMember).toBe(true);
|
|
262
|
-
expect(ctx.project?.isOwner).toBe(false);
|
|
263
|
-
});
|
|
264
|
-
it("succeeds when caller is in activeUsers array but not in activeUserIds", async () => {
|
|
265
|
-
mockProjectGet.mockResolvedValue({
|
|
266
|
-
exists: true,
|
|
267
|
-
data: () => ({
|
|
268
|
-
projectId: "p1",
|
|
269
|
-
ownedBy: { uid: "owner-uid" },
|
|
270
|
-
activeUserIds: {},
|
|
271
|
-
activeUsers: [{ uid: "uid-123" }],
|
|
272
|
-
}),
|
|
273
|
-
});
|
|
274
|
-
const ctx = await assertAuth(makeRequest(), {
|
|
275
|
-
projectMembership: { projectId: "p1", action: "project.read" },
|
|
276
|
-
allowAnyStatus: true,
|
|
277
|
-
});
|
|
278
|
-
expect(ctx.project?.isMember).toBe(true);
|
|
279
|
-
expect(ctx.project?.isOwner).toBe(false);
|
|
280
|
-
});
|
|
281
|
-
it("succeeds and sets isOwner=true, isMember=true when caller is ownedBy.uid", async () => {
|
|
282
|
-
mockProjectGet.mockResolvedValue({
|
|
283
|
-
exists: true,
|
|
284
|
-
data: () => ({
|
|
285
|
-
projectId: "p1",
|
|
286
|
-
ownedBy: { uid: "uid-123" },
|
|
287
|
-
activeUserIds: {},
|
|
288
|
-
activeUsers: [],
|
|
289
|
-
}),
|
|
290
|
-
});
|
|
291
|
-
const ctx = await assertAuth(makeRequest(), {
|
|
292
|
-
projectMembership: { projectId: "p1", action: "project.read" },
|
|
293
|
-
allowAnyStatus: true,
|
|
294
|
-
});
|
|
295
|
-
expect(ctx.project?.isOwner).toBe(true);
|
|
296
|
-
expect(ctx.project?.isMember).toBe(true);
|
|
297
|
-
});
|
|
298
|
-
it("throws permission-denied when action callback denies the project action", async () => {
|
|
299
|
-
mockProjectGet.mockResolvedValue({
|
|
300
|
-
exists: true,
|
|
301
|
-
data: () => ({
|
|
302
|
-
projectId: "p1",
|
|
303
|
-
ownedBy: { uid: "owner-uid" },
|
|
304
|
-
activeUserIds: { "uid-123": true },
|
|
305
|
-
activeUsers: [],
|
|
306
|
-
}),
|
|
307
|
-
});
|
|
308
|
-
mockIsProjectActionAllowed.mockResolvedValue(false);
|
|
309
|
-
await expect(assertAuth(makeRequest(), {
|
|
310
|
-
projectMembership: { projectId: "p1", action: "member.role.update" },
|
|
311
|
-
allowAnyStatus: true,
|
|
312
|
-
})).rejects.toMatchObject({ code: "permission-denied" });
|
|
313
|
-
});
|
|
314
|
-
it("succeeds when action callback allows the project action", async () => {
|
|
315
|
-
mockProjectGet.mockResolvedValue({
|
|
316
|
-
exists: true,
|
|
317
|
-
data: () => ({
|
|
318
|
-
projectId: "p1",
|
|
319
|
-
ownedBy: { uid: "uid-123" },
|
|
320
|
-
activeUserIds: {},
|
|
321
|
-
activeUsers: [],
|
|
322
|
-
}),
|
|
323
|
-
});
|
|
324
|
-
mockIsProjectActionAllowed.mockResolvedValue(true);
|
|
325
|
-
const ctx = await assertAuth(makeRequest(), {
|
|
326
|
-
projectMembership: { projectId: "p1", action: "member.role.update" },
|
|
327
|
-
allowAnyStatus: true,
|
|
328
|
-
});
|
|
329
|
-
expect(ctx.project?.isOwner).toBe(true);
|
|
330
|
-
});
|
|
331
|
-
});
|
|
332
159
|
describe("Admin check", () => {
|
|
333
160
|
it("propagates the error when requireAdmin throws", async () => {
|
|
334
161
|
mockRequireAdmin.mockRejectedValue(Object.assign(new Error("Administrator access required"), {
|
|
@@ -350,64 +177,16 @@ describe("Admin check", () => {
|
|
|
350
177
|
});
|
|
351
178
|
});
|
|
352
179
|
describe("Combined checks", () => {
|
|
353
|
-
it("fails on email check first when emailVerified and creator are both required but email is unverified", async () => {
|
|
354
|
-
await expect(assertAuth(makeRequest({ emailVerified: false }), {
|
|
355
|
-
emailVerified: true,
|
|
356
|
-
creator: true,
|
|
357
|
-
})).rejects.toMatchObject({
|
|
358
|
-
code: "failed-precondition",
|
|
359
|
-
message: expect.stringContaining("Email"),
|
|
360
|
-
});
|
|
361
|
-
});
|
|
362
|
-
it("fails with creator error when email is verified but user lacks creator status", async () => {
|
|
363
|
-
mockUserGet.mockResolvedValue({ exists: true, data: () => activeUserDoc });
|
|
364
|
-
await expect(assertAuth(makeRequest({ emailVerified: true }), {
|
|
365
|
-
emailVerified: true,
|
|
366
|
-
creator: true,
|
|
367
|
-
})).rejects.toMatchObject({
|
|
368
|
-
code: "failed-precondition",
|
|
369
|
-
message: expect.stringContaining("Creator"),
|
|
370
|
-
});
|
|
371
|
-
});
|
|
372
180
|
it("returns fully populated ctx when all checks pass", async () => {
|
|
373
|
-
mockUserGet.mockResolvedValue({ exists: true, data: () =>
|
|
374
|
-
mockProjectGet.mockResolvedValue({
|
|
375
|
-
exists: true,
|
|
376
|
-
data: () => ({
|
|
377
|
-
projectId: "p1",
|
|
378
|
-
ownedBy: { uid: "uid-123" },
|
|
379
|
-
activeUserIds: {},
|
|
380
|
-
activeUsers: [],
|
|
381
|
-
}),
|
|
382
|
-
});
|
|
181
|
+
mockUserGet.mockResolvedValue({ exists: true, data: () => activeUserDoc });
|
|
383
182
|
mockRequireAdmin.mockResolvedValue(undefined);
|
|
384
183
|
const ctx = await assertAuth(makeRequest({ emailVerified: true }), {
|
|
385
184
|
emailVerified: true,
|
|
386
|
-
creator: true,
|
|
387
|
-
projectMembership: { projectId: "p1", action: "project.read" },
|
|
388
185
|
admin: { allowJrAdmin: true },
|
|
389
186
|
});
|
|
390
187
|
expect(ctx.uid).toBe("uid-123");
|
|
391
|
-
expect(ctx.userDoc).toMatchObject({
|
|
392
|
-
expect(ctx.project?.isOwner).toBe(true);
|
|
393
|
-
expect(ctx.project?.isMember).toBe(true);
|
|
188
|
+
expect(ctx.userDoc).toMatchObject({ status: "active" });
|
|
394
189
|
expect(mockRequireAdmin).toHaveBeenCalled();
|
|
395
190
|
});
|
|
396
191
|
});
|
|
397
|
-
describe("Parallelization", () => {
|
|
398
|
-
it("calls both user-doc and project-doc get() when both are needed", async () => {
|
|
399
|
-
mockUserGet.mockResolvedValue({ exists: true, data: () => creatorUserDoc });
|
|
400
|
-
mockProjectGet.mockResolvedValue({
|
|
401
|
-
exists: true,
|
|
402
|
-
data: () => memberProjectDoc("uid-123"),
|
|
403
|
-
});
|
|
404
|
-
await assertAuth(makeRequest(), {
|
|
405
|
-
creator: true,
|
|
406
|
-
projectMembership: { projectId: "p1", action: "project.read" },
|
|
407
|
-
allowAnyStatus: true,
|
|
408
|
-
});
|
|
409
|
-
expect(mockUserGet).toHaveBeenCalledOnce();
|
|
410
|
-
expect(mockProjectGet).toHaveBeenCalledOnce();
|
|
411
|
-
});
|
|
412
|
-
});
|
|
413
192
|
//# sourceMappingURL=assertAuth.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assertAuth.test.js","sourceRoot":"","sources":["../../src/server/assertAuth.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"assertAuth.test.js","sourceRoot":"","sources":["../../src/server/assertAuth.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAE9D,EAAE,CAAC,IAAI,CAAC,6BAA6B,EAAE,GAAG,EAAE;IAC1C,MAAM,UAAW,SAAQ,KAAK;QAC5B,IAAI,CAAS;QACb,YAAY,IAAY,EAAE,OAAe;YACvC,KAAK,CAAC,OAAO,CAAC,CAAC;YACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;YACjB,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC;QAC3B,CAAC;KACF;IACD,OAAO,EAAE,UAAU,EAAE,CAAC;AACxB,CAAC,CAAC,CAAC;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAUnD,SAAS,WAAW,CAAC,IAAgD;IACnE,MAAM,GAAG,GAAG,IAAI,EAAE,GAAG,IAAI,SAAS,CAAC;IACnC,OAAO;QACL,IAAI,EAAE,EAAE;QACR,UAAU,EAAE,EAAE;QACd,IAAI,EAAE;YACJ,GAAG;YACH,KAAK,EAAE,EAAE,GAAG,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,IAAI,IAAI,EAAE;SAC5D;KACF,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB;IACxB,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;AACvD,CAAC;AAED,MAAM,aAAa,GAAa;IAC9B,GAAG,EAAE,SAAS;IACd,WAAW,EAAE,WAAW;IACxB,MAAM,EAAE,QAAQ;CACjB,CAAC;AAEF,8EAA8E;AAE9E,IAAI,WAAqC,CAAC;AAC1C,IAAI,gBAA0C,CAAC;AAC/C,IAAI,SAAmC,CAAC;AACxC,IAAI,UAAyD,CAAC;AAE9D,UAAU,CAAC,GAAG,EAAE;IACd,WAAW,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,aAAa,EAAE,CAAC,CAAC;IACrF,gBAAgB,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;IAExD,MAAM,UAAU,GAAG,EAAE,GAAG,EAAE,WAAW,EAAE,CAAC;IAExC,SAAS,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,CAAC;IAEpC,MAAM,MAAM,GAAG,EAAE,GAAG,EAAE,SAAS,EAAS,CAAC;IAEzC,MAAM,MAAM,GAA+B;QACzC,SAAS,EAAE,GAAG,EAAE,CAAC,MAAM;QACvB,eAAe,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,gBAAgB,GAAG,EAAE;QAC/C,aAAa,EAAE,CAAC,IAAI,EAAc,EAAE;YAClC,IAAI,IAAI,CAAC,MAAM,KAAK,UAAU;gBAAE,OAAO,UAAU,CAAC;YAClD,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ;gBAAE,OAAO,QAAQ,CAAC;YAC9C,OAAO,IAAI,CAAC;QACd,CAAC;QACD,YAAY,EAAE,gBAAuB;KACtC,CAAC;IAEF,UAAU,GAAG,gBAAgB,CAAW,MAAM,CAAC,CAAC;AAClD,CAAC,CAAC,CAAC;AAEH,8EAA8E;AAE9E,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,EAAE,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;QAClE,MAAM,MAAM,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC;YAClE,IAAI,EAAE,iBAAiB;SACxB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kEAAkE,EAAE,KAAK,IAAI,EAAE;QAChF,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,WAAW,EAAE,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC;QACtE,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAChC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE,CAAC;QACpC,MAAM,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;IAC3C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,EAAE,CAAC,0FAA0F,EAAE,KAAK,IAAI,EAAE;QACxG,MAAM,MAAM,CACV,UAAU,CAAC,WAAW,CAAC,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC,EAAE;YAChD,aAAa,EAAE,IAAI;YACnB,cAAc,EAAE,IAAI;SACrB,CAAC,CACH,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,qBAAqB,EAAE,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uEAAuE,EAAE,KAAK,IAAI,EAAE;QACrF,MAAM,MAAM,CACV,UAAU,CAAC,WAAW,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE;YAC/C,aAAa,EAAE,IAAI;YACnB,cAAc,EAAE,IAAI;SACrB,CAAC,CACH,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uEAAuE,EAAE,KAAK,IAAI,EAAE;QACrF,MAAM,MAAM,CACV,UAAU,CAAC,WAAW,CAAC,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC,EAAE;YAChD,aAAa,EAAE,IAAI;YACnB,eAAe,EAAE,IAAI;YACrB,cAAc,EAAE,IAAI;SACrB,CAAC,CACH,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,qCAAqC,EAAE,GAAG,EAAE;IACnD,EAAE,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;QACnE,WAAW,CAAC,iBAAiB,CAAC;YAC5B,MAAM,EAAE,IAAI;YACZ,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;SACrD,CAAC,CAAC;QACH,MAAM,MAAM,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC;YAC5D,IAAI,EAAE,mBAAmB;SAC1B,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;QACrE,WAAW,CAAC,iBAAiB,CAAC;YAC5B,MAAM,EAAE,IAAI;YACZ,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;SACvD,CAAC,CAAC;QACH,MAAM,MAAM,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC;YAC5D,IAAI,EAAE,mBAAmB;SAC1B,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;QAC7D,WAAW,CAAC,iBAAiB,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;QACnE,MAAM,MAAM,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC;YAC5D,IAAI,EAAE,WAAW;SAClB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;QAC1D,WAAW,CAAC,iBAAiB,CAAC;YAC5B,MAAM,EAAE,IAAI;YACZ,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC;SACtD,CAAC,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC;QAC5C,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAChC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;QACnD,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC;QAC5C,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAChC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0DAA0D,EAAE,KAAK,IAAI,EAAE;QACxE,MAAM,UAAU,CAAC,WAAW,EAAE,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1D,MAAM,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;IAC7C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,EAAE,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;QAC7D,WAAW,CAAC,iBAAiB,CAAC;YAC5B,MAAM,EAAE,IAAI;YACZ,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;SACrD,CAAC,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,WAAW,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;QACnE,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAChC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4DAA4D,EAAE,KAAK,IAAI,EAAE;QAC1E,WAAW,CAAC,iBAAiB,CAAC;YAC5B,MAAM,EAAE,IAAI;YACZ,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;SACvD,CAAC,CAAC;QACH,MAAM,MAAM,CACV,UAAU,CAAC,WAAW,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CACjD,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+DAA+D,EAAE,KAAK,IAAI,EAAE;QAC7E,WAAW,CAAC,iBAAiB,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;QACnE,MAAM,MAAM,CACV,UAAU,CAAC,WAAW,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CACjD,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAGH,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAC3B,EAAE,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;QAC7D,gBAAgB,CAAC,iBAAiB,CAChC,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,+BAA+B,CAAC,EAAE;YACxD,IAAI,EAAE,mBAAmB;SAC1B,CAAC,CACH,CAAC;QACF,MAAM,MAAM,CACV,UAAU,CAAC,WAAW,EAAE,EAAE;YACxB,KAAK,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE;YAC9B,cAAc,EAAE,IAAI;SACrB,CAAC,CACH,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;QACnE,gBAAgB,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;QAC9C,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,WAAW,EAAE,EAAE;YAC1C,KAAK,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;YAC7B,cAAc,EAAE,IAAI;SACrB,CAAC,CAAC;QACH,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAChC,MAAM,CAAC,gBAAgB,CAAC,CAAC,oBAAoB,CAC3C,SAAS,EACT,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAClB,EAAE,YAAY,EAAE,IAAI,EAAE,CACvB,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,EAAE,CAAC,kDAAkD,EAAE,KAAK,IAAI,EAAE;QAChE,WAAW,CAAC,iBAAiB,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,aAAa,EAAE,CAAC,CAAC;QAC3E,gBAAgB,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;QAE9C,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,WAAW,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE;YACjE,aAAa,EAAE,IAAI;YACnB,KAAK,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;SAC9B,CAAC,CAAC;QAEH,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAChC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;QACxD,MAAM,CAAC,gBAAgB,CAAC,CAAC,gBAAgB,EAAE,CAAC;IAC9C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
package/dist/server/types.d.ts
CHANGED
|
@@ -17,11 +17,6 @@ export interface AuthRequirements {
|
|
|
17
17
|
* Default: false. Skipped when allowUnverified=true.
|
|
18
18
|
*/
|
|
19
19
|
emailVerified?: boolean;
|
|
20
|
-
/**
|
|
21
|
-
* Require the user has creator status (config.isUserCreator(user) returns true).
|
|
22
|
-
* Default: false. Implies a Firestore read of the user doc.
|
|
23
|
-
*/
|
|
24
|
-
creator?: boolean;
|
|
25
20
|
/**
|
|
26
21
|
* Require user status is not 'banned' or 'disabled'.
|
|
27
22
|
* Default: true (always enforced unless allowAnyStatus=true).
|
|
@@ -40,15 +35,6 @@ export interface AuthRequirements {
|
|
|
40
35
|
* Default: false. Does NOT skip the existence check.
|
|
41
36
|
*/
|
|
42
37
|
allowBanned?: boolean;
|
|
43
|
-
/**
|
|
44
|
-
* Require the caller is allowed to perform a project action.
|
|
45
|
-
* Owner access is implicit in the consuming app's isProjectActionAllowed callback.
|
|
46
|
-
* Baseline member reads should use an app-defined action such as `project.read`.
|
|
47
|
-
*/
|
|
48
|
-
projectMembership?: {
|
|
49
|
-
projectId: string;
|
|
50
|
-
action: string;
|
|
51
|
-
};
|
|
52
38
|
/**
|
|
53
39
|
* Require admin status. Delegates to config.requireAdmin().
|
|
54
40
|
* The shape of this object is forwarded verbatim to the consumer's
|
|
@@ -67,20 +53,14 @@ export interface AdminCheckOptions {
|
|
|
67
53
|
[key: string]: unknown;
|
|
68
54
|
}
|
|
69
55
|
/**
|
|
70
|
-
* Return value from assertAuth. Generic over the consuming app's user
|
|
71
|
-
*
|
|
56
|
+
* Return value from assertAuth. Generic over the consuming app's user
|
|
57
|
+
* document type.
|
|
72
58
|
*/
|
|
73
|
-
export interface AuthContext<TUser = unknown
|
|
59
|
+
export interface AuthContext<TUser = unknown> {
|
|
74
60
|
uid: string;
|
|
75
61
|
token: DecodedIdToken;
|
|
76
|
-
/** Populated when the user doc was read (
|
|
62
|
+
/** Populated when the user doc was read (default not-banned check). */
|
|
77
63
|
userDoc?: TUser;
|
|
78
|
-
/** Populated when projectMembership was checked. */
|
|
79
|
-
project?: {
|
|
80
|
-
data: TProject;
|
|
81
|
-
isOwner: boolean;
|
|
82
|
-
isMember: boolean;
|
|
83
|
-
};
|
|
84
64
|
}
|
|
85
65
|
/**
|
|
86
66
|
* Status the consuming app reports for a user doc. The package only
|
|
@@ -91,7 +71,7 @@ export type UserStatus = "ok" | "banned" | "disabled";
|
|
|
91
71
|
* Configuration for createAssertAuth. The consuming app supplies every
|
|
92
72
|
* app-specific operation as a callback.
|
|
93
73
|
*/
|
|
94
|
-
export interface AssertAuthConfig<TUser
|
|
74
|
+
export interface AssertAuthConfig<TUser> {
|
|
95
75
|
/**
|
|
96
76
|
* Returns the admin Firestore instance. Called every assertAuth invocation
|
|
97
77
|
* that needs a Firestore read. Implementations typically return
|
|
@@ -103,41 +83,12 @@ export interface AssertAuthConfig<TUser, TProject> {
|
|
|
103
83
|
* Example: `userProfiles/${uid}`
|
|
104
84
|
*/
|
|
105
85
|
userProfilePath: (uid: string) => string;
|
|
106
|
-
/**
|
|
107
|
-
* Returns the Firestore document path for a project, given a projectId.
|
|
108
|
-
* Example: `allProjects/${projectId}`
|
|
109
|
-
*/
|
|
110
|
-
projectPath: (projectId: string) => string;
|
|
111
86
|
/**
|
|
112
87
|
* Returns the user's status given the user doc data. The package only
|
|
113
88
|
* acts on 'ok' | 'banned' | 'disabled'. Apps may store status in any
|
|
114
89
|
* field; this callback interprets it.
|
|
115
90
|
*/
|
|
116
91
|
getUserStatus: (user: TUser) => UserStatus;
|
|
117
|
-
/**
|
|
118
|
-
* Returns true if the user is a creator. Called only when
|
|
119
|
-
* AuthRequirements.creator === true.
|
|
120
|
-
*/
|
|
121
|
-
isUserCreator: (user: TUser) => boolean;
|
|
122
|
-
/**
|
|
123
|
-
* Returns true if the given uid is the owner of the project.
|
|
124
|
-
*/
|
|
125
|
-
isProjectOwner: (project: TProject, uid: string) => boolean;
|
|
126
|
-
/**
|
|
127
|
-
* Returns true if the given uid is a member of the project. Owners are
|
|
128
|
-
* typically also members — the callback should reflect that.
|
|
129
|
-
*/
|
|
130
|
-
isProjectMember: (project: TProject, uid: string) => boolean;
|
|
131
|
-
/**
|
|
132
|
-
* Returns true if the caller may perform a project action. Apps can perform
|
|
133
|
-
* async reads here, such as loading allProjects/{projectId}/members/{uid}.
|
|
134
|
-
*/
|
|
135
|
-
isProjectActionAllowed: (args: {
|
|
136
|
-
project: TProject;
|
|
137
|
-
projectId: string;
|
|
138
|
-
uid: string;
|
|
139
|
-
action: string;
|
|
140
|
-
}) => Promise<boolean>;
|
|
141
92
|
/**
|
|
142
93
|
* Admin check. Called only when AuthRequirements.admin is set. The
|
|
143
94
|
* package forwards uid, token, and the admin options verbatim. The
|
|
@@ -148,5 +99,5 @@ export interface AssertAuthConfig<TUser, TProject> {
|
|
|
148
99
|
/**
|
|
149
100
|
* The function returned by createAssertAuth.
|
|
150
101
|
*/
|
|
151
|
-
export type AssertAuthFn<TUser
|
|
102
|
+
export type AssertAuthFn<TUser> = (request: CallableRequest, requirements?: AuthRequirements) => Promise<AuthContext<TUser>>;
|
|
152
103
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/server/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/server/types.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAE1D;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;;;OAIG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;;;OAIG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB;;;;OAIG;IACH,KAAK,CAAC,EAAE,iBAAiB,CAAC;CAC3B;AAED;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;;GAGG;AACH,MAAM,WAAW,WAAW,CAAC,KAAK,GAAG,OAAO;IAC1C,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,cAAc,CAAC;IACtB,uEAAuE;IACvE,OAAO,CAAC,EAAE,KAAK,CAAC;CACjB;AAED;;;GAGG;AACH,MAAM,MAAM,UAAU,GAAG,IAAI,GAAG,QAAQ,GAAG,UAAU,CAAC;AAEtD;;;GAGG;AACH,MAAM,WAAW,gBAAgB,CAAC,KAAK;IACrC;;;;OAIG;IACH,SAAS,EAAE,MAAM,SAAS,CAAC;IAE3B;;;OAGG;IACH,eAAe,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC;IAEzC;;;;OAIG;IACH,aAAa,EAAE,CAAC,IAAI,EAAE,KAAK,KAAK,UAAU,CAAC;IAE3C;;;;OAIG;IACH,YAAY,EAAE,CACZ,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,cAAc,EACrB,OAAO,EAAE,iBAAiB,KACvB,OAAO,CAAC,IAAI,CAAC,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,MAAM,YAAY,CAAC,KAAK,IAAI,CAChC,OAAO,EAAE,eAAe,EACxB,YAAY,CAAC,EAAE,gBAAgB,KAC5B,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC"}
|
package/dist/server/types.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
// packages/auth-core/src/server/types.ts
|
|
2
2
|
//
|
|
3
3
|
// Types for the createAssertAuth factory. Fully generic over the consuming
|
|
4
|
-
// app's user
|
|
5
|
-
// app-specific knowledge.
|
|
4
|
+
// app's user document shape. The package contains no app-specific knowledge.
|
|
6
5
|
export {};
|
|
7
6
|
//# sourceMappingURL=types.js.map
|
package/dist/server/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/server/types.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,EAAE;AACF,2EAA2E;AAC3E,
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/server/types.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,EAAE;AACF,2EAA2E;AAC3E,6EAA6E"}
|