@stevenkellner/team-conduct-api 2.0.9 → 2.0.11

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.
@@ -1,4 +1,4 @@
1
- import { FirestoreCollection, FirestoreDocument } from '@stevenkellner/firebase-function';
1
+ import { FirestoreCollection, FirestoreDocument, UserAuthId } from '@stevenkellner/firebase-function';
2
2
  import { FirestoreScheme } from './FirestoreScheme';
3
3
  import { Fine, FineTemplate, Invitation, Person, User, Team } from '../types';
4
4
  /**
@@ -81,7 +81,7 @@ export declare class Firestore {
81
81
  * ```
82
82
  */
83
83
  team(id: Team.Id): FirestoreDocument<Team>;
84
- userAuthentication(id: string): FirestoreDocument<User.Id>;
84
+ userAuth(userAuthId: UserAuthId): FirestoreDocument<User.Id>;
85
85
  /**
86
86
  * Gets a reference to a user document.
87
87
  *
@@ -92,10 +92,10 @@ class Firestore {
92
92
  .collection('teams')
93
93
  .document(id.guidString);
94
94
  }
95
- userAuthentication(id) {
95
+ userAuth(userAuthId) {
96
96
  return this.base
97
- .collection('userAuthIds')
98
- .document(id);
97
+ .collection('userAuthIdDict')
98
+ .document(userAuthId.value);
99
99
  }
100
100
  /**
101
101
  * Gets a reference to a user document.
@@ -15,7 +15,7 @@ import { Fine, FineTemplate, Invitation, Person, Team, User } from '../types';
15
15
  * throughout the application.
16
16
  */
17
17
  export type FirestoreScheme = FirestoreDocument<never, {
18
- userAuthIds: FirestoreCollection<{
18
+ userAuthIdDict: FirestoreCollection<{
19
19
  [UserAuthId in string]: FirestoreDocument<User.Id>;
20
20
  }>;
21
21
  users: FirestoreCollection<{
@@ -1,3 +1,4 @@
1
+ import { UserAuthId } from '@stevenkellner/firebase-function';
1
2
  import { Team, User, UserRole } from '../types';
2
3
  /**
3
4
  * Type representing expected user role requirements.
@@ -33,5 +34,5 @@ type ExpectedUserRoles = UserRole | ExpectedUserRoles[] | {
33
34
  * @throws {FunctionsError} 'unauthenticated' - If rawUserId is null
34
35
  * @throws {FunctionsError} 'permission-denied' - If any validation check fails
35
36
  */
36
- export declare function checkAuthentication(userAuthId: string | null, teamId: Team.Id, roles: ExpectedUserRoles): Promise<User.Id>;
37
+ export declare function checkAuthentication(userAuthId: UserAuthId | null, teamId: Team.Id, roles: ExpectedUserRoles): Promise<User.Id>;
37
38
  export {};
@@ -40,7 +40,7 @@ function hasUserRoles(userRoles, expectedRoles) {
40
40
  async function checkAuthentication(userAuthId, teamId, roles) {
41
41
  if (userAuthId === null)
42
42
  throw new firebase_function_1.FunctionsError('unauthenticated', 'User is not authenticated');
43
- const userAuthSnapshot = await Firestore_1.Firestore.shared.userAuthentication(userAuthId).snapshot();
43
+ const userAuthSnapshot = await Firestore_1.Firestore.shared.userAuth(userAuthId).snapshot();
44
44
  if (!userAuthSnapshot.exists)
45
45
  throw new firebase_function_1.FunctionsError('permission-denied', 'User authentication does not exist');
46
46
  const userId = types_1.User.Id.builder.build(userAuthSnapshot.data);
@@ -5,12 +5,19 @@ export declare namespace InvitationRegisterFunction {
5
5
  type Parameters = {
6
6
  teamId: Team.Id;
7
7
  personId: Person.Id;
8
+ signInType: User.SignInType;
8
9
  };
9
10
  }
10
11
  export declare class InvitationRegisterFunction implements FirebaseFunction<InvitationRegisterFunction.Parameters, User> {
11
12
  parametersBuilder: ObjectTypeBuilder<{
12
13
  teamId: string;
13
14
  personId: string;
15
+ signInType: {
16
+ type: "email";
17
+ email: string;
18
+ } | {
19
+ type: "google" | "apple";
20
+ };
14
21
  }, InvitationRegisterFunction.Parameters>;
15
22
  returnTypeBuilder: User.TypeBuilder;
16
23
  }
@@ -6,7 +6,8 @@ const typescript_common_functionality_1 = require("@stevenkellner/typescript-com
6
6
  class InvitationRegisterFunction {
7
7
  parametersBuilder = new typescript_common_functionality_1.ObjectTypeBuilder({
8
8
  teamId: types_1.Team.Id.builder,
9
- personId: types_1.Person.Id.builder
9
+ personId: types_1.Person.Id.builder,
10
+ signInType: types_1.User.SignInType.builder
10
11
  });
11
12
  returnTypeBuilder = types_1.User.builder;
12
13
  }
@@ -6,10 +6,11 @@ const checkAuthentication_1 = require("../../src/firebase/checkAuthentication");
6
6
  const index_1 = require("../../src/types/index");
7
7
  const typescript_common_functionality_1 = require("@stevenkellner/typescript-common-functionality");
8
8
  const firebase_utils_1 = require("./firebase-utils");
9
+ const firebase_function_1 = require("@stevenkellner/firebase-function");
9
10
  (0, mocha_1.describe)('checkAuthentication', () => {
10
11
  const teamId = index_1.Team.Id.builder.build('11111111-1111-4111-1111-111111111111');
11
12
  const personId = index_1.Person.Id.builder.build('22222222-2222-4222-2222-222222222222');
12
- const userAuthId = 'auth-123';
13
+ const userAuthId = firebase_function_1.UserAuthId.builder.build('auth-123');
13
14
  const userId = index_1.User.Id.builder.build('user123');
14
15
  (0, mocha_1.describe)('checkAuthentication - basic validation', () => {
15
16
  (0, mocha_1.it)('should throw "unauthenticated" error if rawUserId is null', async () => {
@@ -19,8 +20,8 @@ const firebase_utils_1 = require("./firebase-utils");
19
20
  });
20
21
  (0, mocha_1.it)('should throw "permission-denied" if user authentication does not exist', async () => {
21
22
  (0, firebase_utils_1.configureFirebase)({
22
- userAuthIds: firebase_utils_1.Collection.docs({
23
- [userAuthId]: firebase_utils_1.Document.empty()
23
+ userAuthIdDict: firebase_utils_1.Collection.docs({
24
+ [userAuthId.value]: firebase_utils_1.Document.empty()
24
25
  })
25
26
  });
26
27
  await (0, firebase_utils_1.expectThrowsFunctionsError)(async () => {
@@ -29,8 +30,8 @@ const firebase_utils_1 = require("./firebase-utils");
29
30
  });
30
31
  (0, mocha_1.it)('should throw "permission-denied" if user does not exist', async () => {
31
32
  (0, firebase_utils_1.configureFirebase)({
32
- userAuthIds: firebase_utils_1.Collection.docs({
33
- [userAuthId]: firebase_utils_1.Document.data(userId.value)
33
+ userAuthIdDict: firebase_utils_1.Collection.docs({
34
+ [userAuthId.value]: firebase_utils_1.Document.data(userId.value)
34
35
  }),
35
36
  users: firebase_utils_1.Collection.docs({
36
37
  [userId.value]: firebase_utils_1.Document.empty()
@@ -43,8 +44,8 @@ const firebase_utils_1 = require("./firebase-utils");
43
44
  (0, mocha_1.it)('should throw "permission-denied" if user is not a member of the team', async () => {
44
45
  const emptyTeams = new typescript_common_functionality_1.Dictionary(index_1.Team.Id.builder);
45
46
  (0, firebase_utils_1.configureFirebase)({
46
- userAuthIds: firebase_utils_1.Collection.docs({
47
- [userAuthId]: firebase_utils_1.Document.data(userId.value)
47
+ userAuthIdDict: firebase_utils_1.Collection.docs({
48
+ [userAuthId.value]: firebase_utils_1.Document.data(userId.value)
48
49
  }),
49
50
  users: firebase_utils_1.Collection.docs({
50
51
  [userId.value]: firebase_utils_1.Document.user(userId, emptyTeams)
@@ -62,8 +63,8 @@ const firebase_utils_1 = require("./firebase-utils");
62
63
  personId: personId.guidString
63
64
  }));
64
65
  (0, firebase_utils_1.configureFirebase)({
65
- userAuthIds: firebase_utils_1.Collection.docs({
66
- [userAuthId]: firebase_utils_1.Document.data(userId.value)
66
+ userAuthIdDict: firebase_utils_1.Collection.docs({
67
+ [userAuthId.value]: firebase_utils_1.Document.data(userId.value)
67
68
  }),
68
69
  users: firebase_utils_1.Collection.docs({
69
70
  [userId.value]: firebase_utils_1.Document.user(userId, teams)
@@ -88,8 +89,8 @@ const firebase_utils_1 = require("./firebase-utils");
88
89
  personId: personId.guidString
89
90
  }));
90
91
  (0, firebase_utils_1.configureFirebase)({
91
- userAuthIds: firebase_utils_1.Collection.docs({
92
- [userAuthId]: firebase_utils_1.Document.data(userId.value)
92
+ userAuthIdDict: firebase_utils_1.Collection.docs({
93
+ [userAuthId.value]: firebase_utils_1.Document.data(userId.value)
93
94
  }),
94
95
  users: firebase_utils_1.Collection.docs({
95
96
  [userId.value]: firebase_utils_1.Document.user(userId, teams)
@@ -116,8 +117,8 @@ const firebase_utils_1 = require("./firebase-utils");
116
117
  personId: personId.guidString
117
118
  }));
118
119
  (0, firebase_utils_1.configureFirebase)({
119
- userAuthIds: firebase_utils_1.Collection.docs({
120
- [userAuthId]: firebase_utils_1.Document.data(userId.value)
120
+ userAuthIdDict: firebase_utils_1.Collection.docs({
121
+ [userAuthId.value]: firebase_utils_1.Document.data(userId.value)
121
122
  }),
122
123
  users: firebase_utils_1.Collection.docs({
123
124
  [userId.value]: firebase_utils_1.Document.user(userId, teams)
@@ -142,8 +143,8 @@ const firebase_utils_1 = require("./firebase-utils");
142
143
  personId: personId.guidString
143
144
  }));
144
145
  (0, firebase_utils_1.configureFirebase)({
145
- userAuthIds: firebase_utils_1.Collection.docs({
146
- [userAuthId]: firebase_utils_1.Document.data(userId.value)
146
+ userAuthIdDict: firebase_utils_1.Collection.docs({
147
+ [userAuthId.value]: firebase_utils_1.Document.data(userId.value)
147
148
  }),
148
149
  users: firebase_utils_1.Collection.docs({
149
150
  [userId.value]: firebase_utils_1.Document.user(userId, teams)
@@ -167,8 +168,8 @@ const firebase_utils_1 = require("./firebase-utils");
167
168
  personId: personId.guidString
168
169
  }));
169
170
  (0, firebase_utils_1.configureFirebase)({
170
- userAuthIds: firebase_utils_1.Collection.docs({
171
- [userAuthId]: firebase_utils_1.Document.data(userId.value)
171
+ userAuthIdDict: firebase_utils_1.Collection.docs({
172
+ [userAuthId.value]: firebase_utils_1.Document.data(userId.value)
172
173
  }),
173
174
  users: firebase_utils_1.Collection.docs({
174
175
  [userId.value]: firebase_utils_1.Document.user(userId, teams)
@@ -193,8 +194,8 @@ const firebase_utils_1 = require("./firebase-utils");
193
194
  personId: personId.guidString
194
195
  }));
195
196
  (0, firebase_utils_1.configureFirebase)({
196
- userAuthIds: firebase_utils_1.Collection.docs({
197
- [userAuthId]: firebase_utils_1.Document.data(userId.value)
197
+ userAuthIdDict: firebase_utils_1.Collection.docs({
198
+ [userAuthId.value]: firebase_utils_1.Document.data(userId.value)
198
199
  }),
199
200
  users: firebase_utils_1.Collection.docs({
200
201
  [userId.value]: firebase_utils_1.Document.user(userId, teams)
@@ -218,8 +219,8 @@ const firebase_utils_1 = require("./firebase-utils");
218
219
  personId: personId.guidString
219
220
  }));
220
221
  (0, firebase_utils_1.configureFirebase)({
221
- userAuthIds: firebase_utils_1.Collection.docs({
222
- [userAuthId]: firebase_utils_1.Document.data(userId.value)
222
+ userAuthIdDict: firebase_utils_1.Collection.docs({
223
+ [userAuthId.value]: firebase_utils_1.Document.data(userId.value)
223
224
  }),
224
225
  users: firebase_utils_1.Collection.docs({
225
226
  [userId.value]: firebase_utils_1.Document.user(userId, teams)
@@ -243,8 +244,8 @@ const firebase_utils_1 = require("./firebase-utils");
243
244
  personId: personId.guidString
244
245
  }));
245
246
  (0, firebase_utils_1.configureFirebase)({
246
- userAuthIds: firebase_utils_1.Collection.docs({
247
- [userAuthId]: firebase_utils_1.Document.data(userId.value)
247
+ userAuthIdDict: firebase_utils_1.Collection.docs({
248
+ [userAuthId.value]: firebase_utils_1.Document.data(userId.value)
248
249
  }),
249
250
  users: firebase_utils_1.Collection.docs({
250
251
  [userId.value]: firebase_utils_1.Document.user(userId, teams)
@@ -269,8 +270,8 @@ const firebase_utils_1 = require("./firebase-utils");
269
270
  personId: personId.guidString
270
271
  }));
271
272
  (0, firebase_utils_1.configureFirebase)({
272
- userAuthIds: firebase_utils_1.Collection.docs({
273
- [userAuthId]: firebase_utils_1.Document.data(userId.value)
273
+ userAuthIdDict: firebase_utils_1.Collection.docs({
274
+ [userAuthId.value]: firebase_utils_1.Document.data(userId.value)
274
275
  }),
275
276
  users: firebase_utils_1.Collection.docs({
276
277
  [userId.value]: firebase_utils_1.Document.user(userId, teams)
@@ -297,8 +298,8 @@ const firebase_utils_1 = require("./firebase-utils");
297
298
  personId: personId.guidString
298
299
  }));
299
300
  (0, firebase_utils_1.configureFirebase)({
300
- userAuthIds: firebase_utils_1.Collection.docs({
301
- [userAuthId]: firebase_utils_1.Document.data(userId.value)
301
+ userAuthIdDict: firebase_utils_1.Collection.docs({
302
+ [userAuthId.value]: firebase_utils_1.Document.data(userId.value)
302
303
  }),
303
304
  users: firebase_utils_1.Collection.docs({
304
305
  [userId.value]: firebase_utils_1.Document.user(userId, teams)
@@ -328,8 +329,8 @@ const firebase_utils_1 = require("./firebase-utils");
328
329
  personId: personId.guidString
329
330
  }));
330
331
  (0, firebase_utils_1.configureFirebase)({
331
- userAuthIds: firebase_utils_1.Collection.docs({
332
- [userAuthId]: firebase_utils_1.Document.data(userId.value)
332
+ userAuthIdDict: firebase_utils_1.Collection.docs({
333
+ [userAuthId.value]: firebase_utils_1.Document.data(userId.value)
333
334
  }),
334
335
  users: firebase_utils_1.Collection.docs({
335
336
  [userId.value]: firebase_utils_1.Document.user(userId, teams)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stevenkellner/team-conduct-api",
3
- "version": "2.0.9",
3
+ "version": "2.0.11",
4
4
  "description": "Firebase API for Team Conduct",
5
5
  "license": "MIT",
6
6
  "author": "Steven Kellner",
@@ -22,7 +22,7 @@
22
22
  "release": "npm run rebuild && npm run lint && npm version patch && git push --follow-tags"
23
23
  },
24
24
  "dependencies": {
25
- "@stevenkellner/firebase-function": "^1.4.142",
25
+ "@stevenkellner/firebase-function": "^1.4.143",
26
26
  "@stevenkellner/typescript-common-functionality": "^1.0.61"
27
27
  },
28
28
  "devDependencies": {
@@ -1,4 +1,4 @@
1
- import { FirestoreCollection, FirestoreDocument } from '@stevenkellner/firebase-function';
1
+ import { FirestoreCollection, FirestoreDocument, UserAuthId } from '@stevenkellner/firebase-function';
2
2
  import { FirestoreScheme } from './FirestoreScheme';
3
3
  import { Fine, FineTemplate, Invitation, Person, User, Team } from '../types';
4
4
  import { FirebaseConfiguration } from '.';
@@ -99,10 +99,10 @@ export class Firestore {
99
99
  .document(id.guidString) as FirestoreDocument<Team>;
100
100
  }
101
101
 
102
- public userAuthentication(id: string): FirestoreDocument<User.Id> {
102
+ public userAuth(userAuthId: UserAuthId): FirestoreDocument<User.Id> {
103
103
  return this.base
104
- .collection('userAuthIds')
105
- .document(id);
104
+ .collection('userAuthIdDict')
105
+ .document(userAuthId.value);
106
106
  }
107
107
 
108
108
  /**
@@ -16,7 +16,7 @@ import { Fine, FineTemplate, Invitation, Person, Team, User } from '../types';
16
16
  * throughout the application.
17
17
  */
18
18
  export type FirestoreScheme = FirestoreDocument<never, {
19
- userAuthIds: FirestoreCollection<{
19
+ userAuthIdDict: FirestoreCollection<{
20
20
  [UserAuthId in string]: FirestoreDocument<User.Id>
21
21
  }>,
22
22
  users: FirestoreCollection<{
@@ -1,4 +1,4 @@
1
- import { FunctionsError } from '@stevenkellner/firebase-function';
1
+ import { FunctionsError, UserAuthId } from '@stevenkellner/firebase-function';
2
2
  import { Person, Team, User, UserRole } from '../types';
3
3
  import { Firestore } from './Firestore';
4
4
 
@@ -57,11 +57,11 @@ function hasUserRoles(userRoles: UserRole[], expectedRoles: ExpectedUserRoles):
57
57
  * @throws {FunctionsError} 'unauthenticated' - If rawUserId is null
58
58
  * @throws {FunctionsError} 'permission-denied' - If any validation check fails
59
59
  */
60
- export async function checkAuthentication(userAuthId: string | null, teamId: Team.Id, roles: ExpectedUserRoles): Promise<User.Id> {
60
+ export async function checkAuthentication(userAuthId: UserAuthId | null, teamId: Team.Id, roles: ExpectedUserRoles): Promise<User.Id> {
61
61
  if (userAuthId === null)
62
62
  throw new FunctionsError('unauthenticated', 'User is not authenticated');
63
63
 
64
- const userAuthSnapshot = await Firestore.shared.userAuthentication(userAuthId).snapshot();
64
+ const userAuthSnapshot = await Firestore.shared.userAuth(userAuthId).snapshot();
65
65
  if (!userAuthSnapshot.exists)
66
66
  throw new FunctionsError('permission-denied', 'User authentication does not exist');
67
67
  const userId = User.Id.builder.build(userAuthSnapshot.data);
@@ -7,6 +7,7 @@ export namespace InvitationRegisterFunction {
7
7
  export type Parameters = {
8
8
  teamId: Team.Id
9
9
  personId: Person.Id
10
+ signInType: User.SignInType
10
11
  };
11
12
  }
12
13
 
@@ -14,7 +15,8 @@ export class InvitationRegisterFunction implements FirebaseFunction<InvitationRe
14
15
 
15
16
  public parametersBuilder = new ObjectTypeBuilder<Flattable.Flatten<InvitationRegisterFunction.Parameters>, InvitationRegisterFunction.Parameters>({
16
17
  teamId: Team.Id.builder,
17
- personId: Person.Id.builder
18
+ personId: Person.Id.builder,
19
+ signInType: User.SignInType.builder
18
20
  });
19
21
 
20
22
  public returnTypeBuilder = User.builder;