feat(api): add accepting invites to workspace
This commit is contained in:
@@ -1,4 +1,5 @@
|
|||||||
export enum WorkspaceApiOperations {
|
export enum WorkspaceApiOperations {
|
||||||
Creating,
|
Creating,
|
||||||
Inviting,
|
Inviting,
|
||||||
|
Accepting,
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
import { WorkspaceType } from '@standardnotes/common'
|
import { WorkspaceType } from '@standardnotes/common'
|
||||||
import { WorkspaceInvitationResponse } from '../../Response'
|
|
||||||
import { WorkspaceCreationResponse } from '../../Response/Workspace/WorkspaceCreationResponse'
|
import { WorkspaceCreationResponse } from '../../Response/Workspace/WorkspaceCreationResponse'
|
||||||
|
import { WorkspaceInvitationAcceptingResponse } from '../../Response/Workspace/WorkspaceInvitationAcceptingResponse'
|
||||||
|
import { WorkspaceInvitationResponse } from '../../Response/Workspace/WorkspaceInvitationResponse'
|
||||||
import { WorkspaceServerInterface } from '../../Server/Workspace/WorkspaceServerInterface'
|
import { WorkspaceServerInterface } from '../../Server/Workspace/WorkspaceServerInterface'
|
||||||
|
|
||||||
import { WorkspaceApiOperations } from './WorkspaceApiOperations'
|
import { WorkspaceApiOperations } from './WorkspaceApiOperations'
|
||||||
@@ -19,6 +20,9 @@ describe('WorkspaceApiService', () => {
|
|||||||
workspaceServer.inviteToWorkspace = jest.fn().mockReturnValue({
|
workspaceServer.inviteToWorkspace = jest.fn().mockReturnValue({
|
||||||
data: { uuid: 'i-1-2-3' },
|
data: { uuid: 'i-1-2-3' },
|
||||||
} as jest.Mocked<WorkspaceInvitationResponse>)
|
} as jest.Mocked<WorkspaceInvitationResponse>)
|
||||||
|
workspaceServer.acceptInvite = jest.fn().mockReturnValue({
|
||||||
|
data: { success: true },
|
||||||
|
} as jest.Mocked<WorkspaceInvitationAcceptingResponse>)
|
||||||
})
|
})
|
||||||
|
|
||||||
it('should create a workspace', async () => {
|
it('should create a workspace', async () => {
|
||||||
@@ -136,4 +140,66 @@ describe('WorkspaceApiService', () => {
|
|||||||
|
|
||||||
expect(error).not.toBeNull()
|
expect(error).not.toBeNull()
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it('should accept invite to a workspace', async () => {
|
||||||
|
const response = await createService().acceptInvite({
|
||||||
|
userUuid: 'u-1-2-3',
|
||||||
|
inviteUuid: 'i-1-2-3',
|
||||||
|
publicKey: 'foo',
|
||||||
|
encryptedPrivateKey: 'bar',
|
||||||
|
})
|
||||||
|
|
||||||
|
expect(response).toEqual({
|
||||||
|
data: {
|
||||||
|
success: true,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
expect(workspaceServer.acceptInvite).toHaveBeenCalledWith({
|
||||||
|
userUuid: 'u-1-2-3',
|
||||||
|
inviteUuid: 'i-1-2-3',
|
||||||
|
publicKey: 'foo',
|
||||||
|
encryptedPrivateKey: 'bar',
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should not accept invite to a workspace if it is already accepting', async () => {
|
||||||
|
const service = createService()
|
||||||
|
Object.defineProperty(service, 'operationsInProgress', {
|
||||||
|
get: () => new Map([[WorkspaceApiOperations.Accepting, true]]),
|
||||||
|
})
|
||||||
|
|
||||||
|
let error = null
|
||||||
|
try {
|
||||||
|
await service.acceptInvite({
|
||||||
|
userUuid: 'u-1-2-3',
|
||||||
|
inviteUuid: 'i-1-2-3',
|
||||||
|
publicKey: 'foo',
|
||||||
|
encryptedPrivateKey: 'bar',
|
||||||
|
})
|
||||||
|
} catch (caughtError) {
|
||||||
|
error = caughtError
|
||||||
|
}
|
||||||
|
|
||||||
|
expect(error).not.toBeNull()
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should not accept invite to a workspace if the server fails', async () => {
|
||||||
|
workspaceServer.acceptInvite = jest.fn().mockImplementation(() => {
|
||||||
|
throw new Error('Oops')
|
||||||
|
})
|
||||||
|
|
||||||
|
let error = null
|
||||||
|
try {
|
||||||
|
await createService().acceptInvite({
|
||||||
|
userUuid: 'u-1-2-3',
|
||||||
|
inviteUuid: 'i-1-2-3',
|
||||||
|
publicKey: 'foo',
|
||||||
|
encryptedPrivateKey: 'bar',
|
||||||
|
})
|
||||||
|
} catch (caughtError) {
|
||||||
|
error = caughtError
|
||||||
|
}
|
||||||
|
|
||||||
|
expect(error).not.toBeNull()
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -3,13 +3,13 @@ import { Uuid, WorkspaceType } from '@standardnotes/common'
|
|||||||
import { ErrorMessage } from '../../Error/ErrorMessage'
|
import { ErrorMessage } from '../../Error/ErrorMessage'
|
||||||
import { ApiCallError } from '../../Error/ApiCallError'
|
import { ApiCallError } from '../../Error/ApiCallError'
|
||||||
import { WorkspaceCreationResponse } from '../../Response/Workspace/WorkspaceCreationResponse'
|
import { WorkspaceCreationResponse } from '../../Response/Workspace/WorkspaceCreationResponse'
|
||||||
|
import { WorkspaceInvitationAcceptingResponse } from '../../Response/Workspace/WorkspaceInvitationAcceptingResponse'
|
||||||
|
import { WorkspaceInvitationResponse } from '../../Response/Workspace/WorkspaceInvitationResponse'
|
||||||
import { WorkspaceServerInterface } from '../../Server/Workspace/WorkspaceServerInterface'
|
import { WorkspaceServerInterface } from '../../Server/Workspace/WorkspaceServerInterface'
|
||||||
|
|
||||||
import { WorkspaceApiServiceInterface } from './WorkspaceApiServiceInterface'
|
import { WorkspaceApiServiceInterface } from './WorkspaceApiServiceInterface'
|
||||||
import { WorkspaceApiOperations } from './WorkspaceApiOperations'
|
import { WorkspaceApiOperations } from './WorkspaceApiOperations'
|
||||||
|
|
||||||
import { WorkspaceInvitationResponse } from '../../Response'
|
|
||||||
|
|
||||||
export class WorkspaceApiService implements WorkspaceApiServiceInterface {
|
export class WorkspaceApiService implements WorkspaceApiServiceInterface {
|
||||||
private operationsInProgress: Map<WorkspaceApiOperations, boolean>
|
private operationsInProgress: Map<WorkspaceApiOperations, boolean>
|
||||||
|
|
||||||
@@ -17,12 +17,32 @@ export class WorkspaceApiService implements WorkspaceApiServiceInterface {
|
|||||||
this.operationsInProgress = new Map()
|
this.operationsInProgress = new Map()
|
||||||
}
|
}
|
||||||
|
|
||||||
async inviteToWorkspace(dto: { inviteeEmail: string; workspaceUuid: Uuid }): Promise<WorkspaceInvitationResponse> {
|
async acceptInvite(dto: {
|
||||||
if (this.operationsInProgress.get(WorkspaceApiOperations.Inviting)) {
|
inviteUuid: string
|
||||||
throw new ApiCallError(ErrorMessage.GenericInProgress)
|
userUuid: string
|
||||||
}
|
publicKey: string
|
||||||
|
encryptedPrivateKey: string
|
||||||
|
}): Promise<WorkspaceInvitationAcceptingResponse> {
|
||||||
|
this.lockOperation(WorkspaceApiOperations.Accepting)
|
||||||
|
|
||||||
this.operationsInProgress.set(WorkspaceApiOperations.Inviting, true)
|
try {
|
||||||
|
const response = await this.workspaceServer.acceptInvite({
|
||||||
|
encryptedPrivateKey: dto.encryptedPrivateKey,
|
||||||
|
publicKey: dto.publicKey,
|
||||||
|
inviteUuid: dto.inviteUuid,
|
||||||
|
userUuid: dto.userUuid,
|
||||||
|
})
|
||||||
|
|
||||||
|
this.unlockOperation(WorkspaceApiOperations.Accepting)
|
||||||
|
|
||||||
|
return response
|
||||||
|
} catch (error) {
|
||||||
|
throw new ApiCallError(ErrorMessage.GenericFail)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async inviteToWorkspace(dto: { inviteeEmail: string; workspaceUuid: Uuid }): Promise<WorkspaceInvitationResponse> {
|
||||||
|
this.lockOperation(WorkspaceApiOperations.Inviting)
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const response = await this.workspaceServer.inviteToWorkspace({
|
const response = await this.workspaceServer.inviteToWorkspace({
|
||||||
@@ -30,7 +50,7 @@ export class WorkspaceApiService implements WorkspaceApiServiceInterface {
|
|||||||
workspaceUuid: dto.workspaceUuid,
|
workspaceUuid: dto.workspaceUuid,
|
||||||
})
|
})
|
||||||
|
|
||||||
this.operationsInProgress.set(WorkspaceApiOperations.Inviting, false)
|
this.unlockOperation(WorkspaceApiOperations.Inviting)
|
||||||
|
|
||||||
return response
|
return response
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
@@ -45,11 +65,7 @@ export class WorkspaceApiService implements WorkspaceApiServiceInterface {
|
|||||||
publicKey?: string
|
publicKey?: string
|
||||||
workspaceName?: string
|
workspaceName?: string
|
||||||
}): Promise<WorkspaceCreationResponse> {
|
}): Promise<WorkspaceCreationResponse> {
|
||||||
if (this.operationsInProgress.get(WorkspaceApiOperations.Creating)) {
|
this.lockOperation(WorkspaceApiOperations.Creating)
|
||||||
throw new ApiCallError(ErrorMessage.GenericInProgress)
|
|
||||||
}
|
|
||||||
|
|
||||||
this.operationsInProgress.set(WorkspaceApiOperations.Creating, true)
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const response = await this.workspaceServer.createWorkspace({
|
const response = await this.workspaceServer.createWorkspace({
|
||||||
@@ -60,11 +76,23 @@ export class WorkspaceApiService implements WorkspaceApiServiceInterface {
|
|||||||
workspaceName: dto.workspaceName,
|
workspaceName: dto.workspaceName,
|
||||||
})
|
})
|
||||||
|
|
||||||
this.operationsInProgress.set(WorkspaceApiOperations.Creating, false)
|
this.unlockOperation(WorkspaceApiOperations.Creating)
|
||||||
|
|
||||||
return response
|
return response
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
throw new ApiCallError(ErrorMessage.GenericFail)
|
throw new ApiCallError(ErrorMessage.GenericFail)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private lockOperation(operation: WorkspaceApiOperations): void {
|
||||||
|
if (this.operationsInProgress.get(operation)) {
|
||||||
|
throw new ApiCallError(ErrorMessage.GenericInProgress)
|
||||||
|
}
|
||||||
|
|
||||||
|
this.operationsInProgress.set(operation, true)
|
||||||
|
}
|
||||||
|
|
||||||
|
private unlockOperation(operation: WorkspaceApiOperations): void {
|
||||||
|
this.operationsInProgress.set(operation, false)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
import { Uuid, WorkspaceType } from '@standardnotes/common'
|
import { Uuid, WorkspaceType } from '@standardnotes/common'
|
||||||
|
|
||||||
import { WorkspaceCreationResponse, WorkspaceInvitationResponse } from '../../Response'
|
import { WorkspaceCreationResponse } from '../../Response/Workspace/WorkspaceCreationResponse'
|
||||||
|
import { WorkspaceInvitationAcceptingResponse } from '../../Response/Workspace/WorkspaceInvitationAcceptingResponse'
|
||||||
|
import { WorkspaceInvitationResponse } from '../../Response/Workspace/WorkspaceInvitationResponse'
|
||||||
|
|
||||||
export interface WorkspaceApiServiceInterface {
|
export interface WorkspaceApiServiceInterface {
|
||||||
createWorkspace(dto: {
|
createWorkspace(dto: {
|
||||||
@@ -11,4 +13,10 @@ export interface WorkspaceApiServiceInterface {
|
|||||||
workspaceName?: string
|
workspaceName?: string
|
||||||
}): Promise<WorkspaceCreationResponse>
|
}): Promise<WorkspaceCreationResponse>
|
||||||
inviteToWorkspace(dto: { inviteeEmail: string; workspaceUuid: Uuid }): Promise<WorkspaceInvitationResponse>
|
inviteToWorkspace(dto: { inviteeEmail: string; workspaceUuid: Uuid }): Promise<WorkspaceInvitationResponse>
|
||||||
|
acceptInvite(dto: {
|
||||||
|
inviteUuid: Uuid
|
||||||
|
userUuid: Uuid
|
||||||
|
publicKey: string
|
||||||
|
encryptedPrivateKey: string
|
||||||
|
}): Promise<WorkspaceInvitationAcceptingResponse>
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,9 @@
|
|||||||
|
import { Uuid } from '@standardnotes/common'
|
||||||
|
|
||||||
|
export type WorkspaceInvitationAcceptingRequestParams = {
|
||||||
|
inviteUuid: Uuid
|
||||||
|
userUuid: Uuid
|
||||||
|
publicKey: string
|
||||||
|
encryptedPrivateKey: string
|
||||||
|
[additionalParam: string]: unknown
|
||||||
|
}
|
||||||
@@ -7,4 +7,5 @@ export * from './Subscription/SubscriptionInviteRequestParams'
|
|||||||
export * from './User/UserRegistrationRequestParams'
|
export * from './User/UserRegistrationRequestParams'
|
||||||
export * from './WebSocket/WebSocketConnectionTokenRequestParams'
|
export * from './WebSocket/WebSocketConnectionTokenRequestParams'
|
||||||
export * from './Workspace/WorkspaceCreationRequestParams'
|
export * from './Workspace/WorkspaceCreationRequestParams'
|
||||||
|
export * from './Workspace/WorkspaceInvitationAcceptingRequestParams'
|
||||||
export * from './Workspace/WorkspaceInvitationRequestParams'
|
export * from './Workspace/WorkspaceInvitationRequestParams'
|
||||||
|
|||||||
@@ -0,0 +1,9 @@
|
|||||||
|
import { Either } from '@standardnotes/common'
|
||||||
|
|
||||||
|
import { HttpErrorResponseBody } from '../../Http/HttpErrorResponseBody'
|
||||||
|
import { HttpResponse } from '../../Http/HttpResponse'
|
||||||
|
import { WorkspaceInvitationAcceptingResponseBody } from './WorkspaceInvitationAcceptingResponseBody'
|
||||||
|
|
||||||
|
export interface WorkspaceInvitationAcceptingResponse extends HttpResponse {
|
||||||
|
data: Either<WorkspaceInvitationAcceptingResponseBody, HttpErrorResponseBody>
|
||||||
|
}
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
export type WorkspaceInvitationAcceptingResponseBody = {
|
||||||
|
success: boolean
|
||||||
|
}
|
||||||
@@ -14,5 +14,7 @@ export * from './WebSocket/WebSocketConnectionTokenResponse'
|
|||||||
export * from './WebSocket/WebSocketConnectionTokenResponseBody'
|
export * from './WebSocket/WebSocketConnectionTokenResponseBody'
|
||||||
export * from './Workspace/WorkspaceCreationResponse'
|
export * from './Workspace/WorkspaceCreationResponse'
|
||||||
export * from './Workspace/WorkspaceCreationResponseBody'
|
export * from './Workspace/WorkspaceCreationResponseBody'
|
||||||
|
export * from './Workspace/WorkspaceInvitationAcceptingResponse'
|
||||||
|
export * from './Workspace/WorkspaceInvitationAcceptingResponseBody'
|
||||||
export * from './Workspace/WorkspaceInvitationResponse'
|
export * from './Workspace/WorkspaceInvitationResponse'
|
||||||
export * from './Workspace/WorkspaceInvitationResponseBody'
|
export * from './Workspace/WorkspaceInvitationResponseBody'
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ import { Uuid } from '@standardnotes/common'
|
|||||||
const WorkspacePaths = {
|
const WorkspacePaths = {
|
||||||
createWorkspace: '/v1/workspaces',
|
createWorkspace: '/v1/workspaces',
|
||||||
inviteToWorkspace: (uuid: Uuid) => `/v1/workspaces/${uuid}/invites`,
|
inviteToWorkspace: (uuid: Uuid) => `/v1/workspaces/${uuid}/invites`,
|
||||||
|
acceptInvite: (uuid: Uuid) => `/v1/invites/${uuid}/accept`,
|
||||||
}
|
}
|
||||||
|
|
||||||
export const Paths = {
|
export const Paths = {
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
import { WorkspaceType } from '@standardnotes/common'
|
import { WorkspaceType } from '@standardnotes/common'
|
||||||
import { HttpServiceInterface } from '../../Http'
|
import { HttpServiceInterface } from '../../Http'
|
||||||
import { WorkspaceCreationResponse } from '../../Response/Workspace/WorkspaceCreationResponse'
|
import { WorkspaceCreationResponse } from '../../Response/Workspace/WorkspaceCreationResponse'
|
||||||
|
import { WorkspaceInvitationAcceptingResponse } from '../../Response/Workspace/WorkspaceInvitationAcceptingResponse'
|
||||||
import { WorkspaceInvitationResponse } from '../../Response/Workspace/WorkspaceInvitationResponse'
|
import { WorkspaceInvitationResponse } from '../../Response/Workspace/WorkspaceInvitationResponse'
|
||||||
|
|
||||||
import { WorkspaceServer } from './WorkspaceServer'
|
import { WorkspaceServer } from './WorkspaceServer'
|
||||||
@@ -48,4 +49,23 @@ describe('WorkspaceServer', () => {
|
|||||||
},
|
},
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it('should accept invitation to a workspace', async () => {
|
||||||
|
httpService.post = jest.fn().mockReturnValue({
|
||||||
|
data: { success: true },
|
||||||
|
} as jest.Mocked<WorkspaceInvitationAcceptingResponse>)
|
||||||
|
|
||||||
|
const response = await createServer().acceptInvite({
|
||||||
|
encryptedPrivateKey: 'foo',
|
||||||
|
inviteUuid: 'i-1-2-3',
|
||||||
|
publicKey: 'bar',
|
||||||
|
userUuid: 'u-1-2-3',
|
||||||
|
})
|
||||||
|
|
||||||
|
expect(response).toEqual({
|
||||||
|
data: {
|
||||||
|
success: true,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -3,6 +3,8 @@ import { WorkspaceInvitationRequestParams } from '../../Request/Workspace/Worksp
|
|||||||
import { WorkspaceCreationRequestParams } from '../../Request/Workspace/WorkspaceCreationRequestParams'
|
import { WorkspaceCreationRequestParams } from '../../Request/Workspace/WorkspaceCreationRequestParams'
|
||||||
import { WorkspaceInvitationResponse } from '../../Response/Workspace/WorkspaceInvitationResponse'
|
import { WorkspaceInvitationResponse } from '../../Response/Workspace/WorkspaceInvitationResponse'
|
||||||
import { WorkspaceCreationResponse } from '../../Response/Workspace/WorkspaceCreationResponse'
|
import { WorkspaceCreationResponse } from '../../Response/Workspace/WorkspaceCreationResponse'
|
||||||
|
import { WorkspaceInvitationAcceptingRequestParams } from '../../Request/Workspace/WorkspaceInvitationAcceptingRequestParams'
|
||||||
|
import { WorkspaceInvitationAcceptingResponse } from '../../Response/Workspace/WorkspaceInvitationAcceptingResponse'
|
||||||
|
|
||||||
import { Paths } from './Paths'
|
import { Paths } from './Paths'
|
||||||
import { WorkspaceServerInterface } from './WorkspaceServerInterface'
|
import { WorkspaceServerInterface } from './WorkspaceServerInterface'
|
||||||
@@ -10,6 +12,12 @@ import { WorkspaceServerInterface } from './WorkspaceServerInterface'
|
|||||||
export class WorkspaceServer implements WorkspaceServerInterface {
|
export class WorkspaceServer implements WorkspaceServerInterface {
|
||||||
constructor(private httpService: HttpServiceInterface) {}
|
constructor(private httpService: HttpServiceInterface) {}
|
||||||
|
|
||||||
|
async acceptInvite(params: WorkspaceInvitationAcceptingRequestParams): Promise<WorkspaceInvitationAcceptingResponse> {
|
||||||
|
const response = await this.httpService.post(Paths.v1.acceptInvite(params.inviteUuid), params)
|
||||||
|
|
||||||
|
return response as WorkspaceInvitationAcceptingResponse
|
||||||
|
}
|
||||||
|
|
||||||
async inviteToWorkspace(params: WorkspaceInvitationRequestParams): Promise<WorkspaceInvitationResponse> {
|
async inviteToWorkspace(params: WorkspaceInvitationRequestParams): Promise<WorkspaceInvitationResponse> {
|
||||||
const response = await this.httpService.post(Paths.v1.inviteToWorkspace(params.workspaceUuid), params)
|
const response = await this.httpService.post(Paths.v1.inviteToWorkspace(params.workspaceUuid), params)
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,11 @@ import { WorkspaceInvitationRequestParams } from '../../Request/Workspace/Worksp
|
|||||||
import { WorkspaceCreationRequestParams } from '../../Request/Workspace/WorkspaceCreationRequestParams'
|
import { WorkspaceCreationRequestParams } from '../../Request/Workspace/WorkspaceCreationRequestParams'
|
||||||
import { WorkspaceInvitationResponse } from '../../Response/Workspace/WorkspaceInvitationResponse'
|
import { WorkspaceInvitationResponse } from '../../Response/Workspace/WorkspaceInvitationResponse'
|
||||||
import { WorkspaceCreationResponse } from '../../Response/Workspace/WorkspaceCreationResponse'
|
import { WorkspaceCreationResponse } from '../../Response/Workspace/WorkspaceCreationResponse'
|
||||||
|
import { WorkspaceInvitationAcceptingRequestParams } from '../../Request/Workspace/WorkspaceInvitationAcceptingRequestParams'
|
||||||
|
import { WorkspaceInvitationAcceptingResponse } from '../../Response/Workspace/WorkspaceInvitationAcceptingResponse'
|
||||||
|
|
||||||
export interface WorkspaceServerInterface {
|
export interface WorkspaceServerInterface {
|
||||||
createWorkspace(params: WorkspaceCreationRequestParams): Promise<WorkspaceCreationResponse>
|
createWorkspace(params: WorkspaceCreationRequestParams): Promise<WorkspaceCreationResponse>
|
||||||
inviteToWorkspace(params: WorkspaceInvitationRequestParams): Promise<WorkspaceInvitationResponse>
|
inviteToWorkspace(params: WorkspaceInvitationRequestParams): Promise<WorkspaceInvitationResponse>
|
||||||
|
acceptInvite(params: WorkspaceInvitationAcceptingRequestParams): Promise<WorkspaceInvitationAcceptingResponse>
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,4 +9,10 @@ export interface WorkspaceClientInterface {
|
|||||||
workspaceName?: string
|
workspaceName?: string
|
||||||
}): Promise<{ uuid: string } | null>
|
}): Promise<{ uuid: string } | null>
|
||||||
inviteToWorkspace(dto: { inviteeEmail: string; workspaceUuid: Uuid }): Promise<{ uuid: string } | null>
|
inviteToWorkspace(dto: { inviteeEmail: string; workspaceUuid: Uuid }): Promise<{ uuid: string } | null>
|
||||||
|
acceptInvite(dto: {
|
||||||
|
inviteUuid: Uuid
|
||||||
|
userUuid: Uuid
|
||||||
|
publicKey: string
|
||||||
|
encryptedPrivateKey: string
|
||||||
|
}): Promise<{ success: boolean }>
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,6 +13,25 @@ export class WorkspaceManager extends AbstractService implements WorkspaceClient
|
|||||||
super(internalEventBus)
|
super(internalEventBus)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async acceptInvite(dto: {
|
||||||
|
inviteUuid: string
|
||||||
|
userUuid: string
|
||||||
|
publicKey: string
|
||||||
|
encryptedPrivateKey: string
|
||||||
|
}): Promise<{ success: boolean }> {
|
||||||
|
try {
|
||||||
|
const result = await this.workspaceApiService.acceptInvite(dto)
|
||||||
|
|
||||||
|
if (result.data.error !== undefined) {
|
||||||
|
return { success: false }
|
||||||
|
}
|
||||||
|
|
||||||
|
return result.data
|
||||||
|
} catch (error) {
|
||||||
|
return { success: false }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
async inviteToWorkspace(dto: { inviteeEmail: string; workspaceUuid: Uuid }): Promise<{ uuid: string } | null> {
|
async inviteToWorkspace(dto: { inviteeEmail: string; workspaceUuid: Uuid }): Promise<{ uuid: string } | null> {
|
||||||
try {
|
try {
|
||||||
const result = await this.workspaceApiService.inviteToWorkspace(dto)
|
const result = await this.workspaceApiService.inviteToWorkspace(dto)
|
||||||
|
|||||||
Reference in New Issue
Block a user