@faskai/svcs-commons 0.0.0-alpha.3 → 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.
@@ -11,5 +11,6 @@ export declare class AuthGuard implements CanActivate {
11
11
  constructor(reflector: Reflector, firebaseAuth: FirebaseAuth, clerkAuth: ClerkAuth, cls: ClsService);
12
12
  canActivate(context: ExecutionContext): Promise<boolean>;
13
13
  private setAuthContext;
14
+ private validateWorkspaceId;
14
15
  isAllowed(context: ExecutionContext): Promise<boolean>;
15
16
  }
@@ -26,6 +26,7 @@ let AuthGuard = class AuthGuard {
26
26
  return this.isAllowed(context);
27
27
  }
28
28
  setAuthContext(request, userId, workspaceId, authProvider, token) {
29
+ this.validateWorkspaceId(request, workspaceId);
29
30
  this.cls.set('userId', userId);
30
31
  this.cls.set('workspaceId', workspaceId);
31
32
  this.cls.set('authProvider', authProvider);
@@ -35,8 +36,23 @@ let AuthGuard = class AuthGuard {
35
36
  if (!request.query['workspace-id']) {
36
37
  request.query['workspace-id'] = workspaceId;
37
38
  }
38
- if (request.params && !request.params['workspace-id']) {
39
- request.params['workspace-id'] = workspaceId;
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');
40
56
  }
41
57
  }
42
58
  async isAllowed(context) {
@@ -60,9 +76,7 @@ let AuthGuard = class AuthGuard {
60
76
  const authProvider = request.headers['x-auth-provider'] || 'api-key';
61
77
  const workspaceId = request.headers['x-workspace-id'];
62
78
  const userId = request.headers['x-user-id'];
63
- if (workspaceId && userId) {
64
- this.setAuthContext(request, userId, workspaceId, authProvider);
65
- }
79
+ this.setAuthContext(request, userId, workspaceId, authProvider);
66
80
  return true;
67
81
  }
68
82
  const authProvider = request.headers['x-auth-provider'];
@@ -72,12 +86,12 @@ let AuthGuard = class AuthGuard {
72
86
  if (authProvider === 'clerk') {
73
87
  const user = await this.clerkAuth.validateClerkToken(token);
74
88
  userId = user.uid;
75
- workspaceId = user.email || user.uid;
89
+ workspaceId = user.uid.toLowerCase();
76
90
  }
77
91
  else {
78
92
  const user = await this.firebaseAuth.validateFirebaseToken(token);
79
93
  userId = user.uid;
80
- workspaceId = user.email || user.uid;
94
+ workspaceId = user.uid.toLowerCase();
81
95
  }
82
96
  this.setAuthContext(request, userId, workspaceId, authProvider || 'firebase', token);
83
97
  return true;
@@ -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"}