@faskai/svcs-commons 0.0.0-alpha.2 → 0.0.0-alpha.4

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.
@@ -10,5 +10,7 @@ export declare class AuthGuard implements CanActivate {
10
10
  private readonly cls;
11
11
  constructor(reflector: Reflector, firebaseAuth: FirebaseAuth, clerkAuth: ClerkAuth, cls: ClsService);
12
12
  canActivate(context: ExecutionContext): Promise<boolean>;
13
+ private setAuthContext;
14
+ private validateWorkspaceId;
13
15
  isAllowed(context: ExecutionContext): Promise<boolean>;
14
16
  }
@@ -25,6 +25,36 @@ let AuthGuard = class AuthGuard {
25
25
  async canActivate(context) {
26
26
  return this.isAllowed(context);
27
27
  }
28
+ setAuthContext(request, userId, workspaceId, authProvider, token) {
29
+ this.validateWorkspaceId(request, workspaceId);
30
+ this.cls.set('userId', userId);
31
+ this.cls.set('workspaceId', workspaceId);
32
+ this.cls.set('authProvider', authProvider);
33
+ if (token) {
34
+ this.cls.set('userToken', token);
35
+ }
36
+ if (!request.query['workspace-id']) {
37
+ request.query['workspace-id'] = workspaceId;
38
+ }
39
+ if (!request.headers['x-workspace-id']) {
40
+ request.headers['x-workspace-id'] = workspaceId;
41
+ }
42
+ }
43
+ validateWorkspaceId(request, workspaceId) {
44
+ const sources = [
45
+ request.query?.['workspace-id'],
46
+ request.headers?.['x-workspace-id'],
47
+ ].filter(Boolean);
48
+ for (const src of sources) {
49
+ if (src !== src.toLowerCase()) {
50
+ throw new common_1.BadRequestException('workspace-id must be lowercase');
51
+ }
52
+ }
53
+ const unique = new Set(sources);
54
+ if (unique.size > 1) {
55
+ throw new common_1.BadRequestException('workspace-id mismatch across query and header');
56
+ }
57
+ }
28
58
  async isAllowed(context) {
29
59
  const request = context.switchToHttp().getRequest();
30
60
  const isPublic = this.reflector.get('isPublic', context.getHandler());
@@ -38,14 +68,15 @@ let AuthGuard = class AuthGuard {
38
68
  return true;
39
69
  }
40
70
  const authHeader = request.headers['authorization'];
41
- if (!authHeader) {
42
- return false;
43
- }
44
- if (!authHeader.startsWith('Bearer ')) {
71
+ if (!authHeader?.startsWith('Bearer ')) {
45
72
  return false;
46
73
  }
47
74
  const token = authHeader.split(' ')[1];
48
75
  if (token === process.env.API_KEY) {
76
+ const authProvider = request.headers['x-auth-provider'] || 'api-key';
77
+ const workspaceId = request.headers['x-workspace-id'];
78
+ const userId = request.headers['x-user-id'];
79
+ this.setAuthContext(request, userId, workspaceId, authProvider);
49
80
  return true;
50
81
  }
51
82
  const authProvider = request.headers['x-auth-provider'];
@@ -55,27 +86,14 @@ let AuthGuard = class AuthGuard {
55
86
  if (authProvider === 'clerk') {
56
87
  const user = await this.clerkAuth.validateClerkToken(token);
57
88
  userId = user.uid;
58
- workspaceId = user.email || user.uid;
59
- this.cls.set('userId', userId);
60
- this.cls.set('workspaceId', workspaceId);
61
- this.cls.set('userToken', token);
62
- this.cls.set('authProvider', 'clerk');
89
+ workspaceId = user.uid.toLowerCase();
63
90
  }
64
91
  else {
65
92
  const user = await this.firebaseAuth.validateFirebaseToken(token);
66
93
  userId = user.uid;
67
- workspaceId = user.email || user.uid;
68
- this.cls.set('userId', userId);
69
- this.cls.set('workspaceId', workspaceId);
70
- this.cls.set('userToken', token);
71
- this.cls.set('authProvider', 'firebase');
72
- }
73
- if (!request.query['workspace-id']) {
74
- request.query['workspace-id'] = workspaceId;
75
- }
76
- if (request.params && !request.params['workspace-id']) {
77
- request.params['workspace-id'] = workspaceId;
94
+ workspaceId = user.uid.toLowerCase();
78
95
  }
96
+ this.setAuthContext(request, userId, workspaceId, authProvider || 'firebase', token);
79
97
  return true;
80
98
  }
81
99
  catch {
@@ -1 +1 @@
1
- {"version":3,"file":"auth.guard.js","sourceRoot":"","sources":["../../src/auth/auth.guard.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auth.guard.js","sourceRoot":"","sources":["../../src/auth/auth.guard.ts"],"names":[],"mappings":"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"}
@@ -3,7 +3,6 @@ export declare class ClerkAuth {
3
3
  constructor();
4
4
  validateClerkToken(token: string): Promise<{
5
5
  uid: any;
6
- email: string;
7
6
  sessionId: any;
8
7
  orgId: any;
9
8
  }>;
@@ -39,16 +39,8 @@ let ClerkAuth = class ClerkAuth {
39
39
  throw new Error('Token is not authenticated');
40
40
  }
41
41
  const auth = requestState.toAuth();
42
- let email;
43
- try {
44
- const user = await this.clerkClient.users.getUser(auth.userId);
45
- email = user.emailAddresses?.[0]?.emailAddress;
46
- }
47
- catch {
48
- }
49
42
  return {
50
43
  uid: auth.userId,
51
- email,
52
44
  sessionId: auth.sessionId,
53
45
  orgId: auth.orgId,
54
46
  };
@@ -1 +1 @@
1
- {"version":3,"file":"clerk-auth.js","sourceRoot":"","sources":["../../src/auth/clerk-auth.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA4C;AAC5C,4CAAmD;AAG5C,IAAM,SAAS,GAAf,MAAM,SAAS;IAGpB;QACE,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;YACjC,IAAI,CAAC,WAAW,GAAG,IAAA,2BAAiB,EAAC;gBACnC,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB;gBACvC,cAAc,EAAE,OAAO,CAAC,GAAG,CAAC,iCAAiC;aAC9D,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,KAAa;QACpC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAC3C,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;YAEzC,MAAM,WAAW,GAAG,IAAI,OAAO,CAAC,kBAAkB,EAAE;gBAClD,OAAO,EAAE;oBACP,aAAa,EAAE,UAAU,KAAK,EAAE;iBACjC;aACF,CAAC,CAAC;YAEH,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAC7D,WAAW,EACX;gBACE,MAAM;aACP,CACF,CAAC;YAEF,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC;gBAC7B,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;YAChD,CAAC;YAED,MAAM,IAAI,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC;YAEnC,IAAI,KAAyB,CAAC;YAC9B,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC/D,KAAK,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC;YACjD,CAAC;YAAC,MAAM,CAAC;YAET,CAAC;YAED,OAAO;gBACL,GAAG,EAAE,IAAI,CAAC,MAAM;gBAChB,KAAK;gBACL,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,KAAK,EAAE,IAAI,CAAC,KAAK;aAClB,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;CACF,CAAA;AAzDY,8BAAS;oBAAT,SAAS;IADrB,IAAA,mBAAU,GAAE;;GACA,SAAS,CAyDrB"}
1
+ {"version":3,"file":"clerk-auth.js","sourceRoot":"","sources":["../../src/auth/clerk-auth.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA4C;AAC5C,4CAAmD;AAG5C,IAAM,SAAS,GAAf,MAAM,SAAS;IAGpB;QACE,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;YACjC,IAAI,CAAC,WAAW,GAAG,IAAA,2BAAiB,EAAC;gBACnC,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB;gBACvC,cAAc,EAAE,OAAO,CAAC,GAAG,CAAC,iCAAiC;aAC9D,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,KAAa;QACpC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAC3C,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;YAEzC,MAAM,WAAW,GAAG,IAAI,OAAO,CAAC,kBAAkB,EAAE;gBAClD,OAAO,EAAE;oBACP,aAAa,EAAE,UAAU,KAAK,EAAE;iBACjC;aACF,CAAC,CAAC;YAEH,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAC7D,WAAW,EACX;gBACE,MAAM;aACP,CACF,CAAC;YAEF,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC;gBAC7B,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;YAChD,CAAC;YAED,MAAM,IAAI,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC;YAEnC,OAAO;gBACL,GAAG,EAAE,IAAI,CAAC,MAAM;gBAChB,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,KAAK,EAAE,IAAI,CAAC,KAAK;aAClB,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;CACF,CAAA;AAhDY,8BAAS;oBAAT,SAAS;IADrB,IAAA,mBAAU,GAAE;;GACA,SAAS,CAgDrB"}