Skip to content

Commit d8a48e1

Browse files
authored
feat(authentication): delete invitation RPC (#1340)
* feat(authentication): delete invitation RPC * chore: rename function in grpc-sdk for consistency purposes * fix: identify not-found invations correctly
1 parent cf2cecf commit d8a48e1

File tree

3 files changed

+50
-1
lines changed

3 files changed

+50
-1
lines changed

libraries/grpc-sdk/src/modules/authentication/index.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import {
88
Team,
99
ValidateAccessTokenResponse,
1010
UserModifyStatusResponse,
11+
InvitationDeleteResponse,
1112
} from '../../protoUtils/index.js';
1213

1314
export class Authentication extends ConduitModule<typeof AuthenticationDefinition> {
@@ -83,4 +84,8 @@ export class Authentication extends ConduitModule<typeof AuthenticationDefinitio
8384
userModifyStatus(userId: string, active: boolean): Promise<UserModifyStatusResponse> {
8485
return this.client!.userModifyStatus({ id: userId, active });
8586
}
87+
88+
invitationDelete(teamId: string, email: string): Promise<InvitationDeleteResponse> {
89+
return this.client!.invitationDelete({ teamId, email });
90+
}
8691
}

modules/authentication/src/Authentication.ts

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ import {
1919
AnonymousUserCreateRequest,
2020
CreateTeamRequest,
2121
GetTeamRequest,
22+
InvitationDeleteRequest,
23+
InvitationDeleteResponse,
2224
ModifyTeamMembersRequest,
2325
Team as GrpcTeam,
2426
TeamDeleteRequest,
@@ -53,7 +55,7 @@ import { User as UserAuthz } from './authz/index.js';
5355
import { handleAuthentication } from './routes/middleware.js';
5456
import { fileURLToPath } from 'node:url';
5557
import { TeamsHandler } from './handlers/team.js';
56-
import { User } from './models/index.js';
58+
import { Token, User } from './models/index.js';
5759

5860
const __filename = fileURLToPath(import.meta.url);
5961
const __dirname = path.dirname(__filename);
@@ -76,6 +78,7 @@ export default class Authentication extends ManagedModule<Config> {
7678
validateAccessToken: this.validateAccessToken.bind(this),
7779
addTeamMembers: this.addTeamMembers.bind(this),
7880
removeTeamMembers: this.removeTeamMembers.bind(this),
81+
invitationDelete: this.invitationDelete.bind(this),
7982
},
8083
};
8184
protected metricsSchema = metricsSchema;
@@ -650,6 +653,37 @@ export default class Authentication extends ManagedModule<Config> {
650653
}
651654
}
652655

656+
async invitationDelete(
657+
call: GrpcRequest<InvitationDeleteRequest>,
658+
callback: GrpcCallback<InvitationDeleteResponse>,
659+
) {
660+
const { email, teamId } = call.request;
661+
662+
try {
663+
const deletedToken = await Token.getInstance().deleteOne({
664+
// @ts-expect-error Unsafe nested property access
665+
'data.teamId': teamId,
666+
'data.email': email,
667+
});
668+
669+
if (deletedToken.deletedCount === 0) {
670+
return callback({
671+
code: status.NOT_FOUND,
672+
message: 'Invitation not found',
673+
});
674+
}
675+
676+
return callback(null, {
677+
message: 'Invitation deleted successfully',
678+
});
679+
} catch (e) {
680+
return callback({
681+
code: status.INTERNAL,
682+
message: (e as Error).message,
683+
});
684+
}
685+
}
686+
653687
protected registerSchemas() {
654688
const promises = Object.values(models).map(model => {
655689
const modelInstance = model.getInstance(this.database);

modules/authentication/src/authentication.proto

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,15 @@ message UserModifyStatusResponse {
101101
string message = 1;
102102
}
103103

104+
message InvitationDeleteRequest {
105+
string teamId = 1;
106+
string email = 2;
107+
}
108+
109+
message InvitationDeleteResponse {
110+
string message = 1;
111+
}
112+
104113
service Authentication {
105114
rpc UserLogin(UserLoginRequest) returns (UserLoginResponse);
106115
rpc UserCreate(UserCreateRequest) returns (UserCreateResponse);
@@ -115,4 +124,5 @@ service Authentication {
115124
rpc AddTeamMembers(ModifyTeamMembersRequest) returns (google.protobuf.Empty);
116125
rpc RemoveTeamMembers(ModifyTeamMembersRequest) returns (google.protobuf.Empty);
117126
rpc ValidateAccessToken(ValidateAccessTokenRequest) returns (ValidateAccessTokenResponse);
127+
rpc InvitationDelete(InvitationDeleteRequest) returns (InvitationDeleteResponse);
118128
}

0 commit comments

Comments
 (0)