chore: first commit
This commit is contained in:
@@ -0,0 +1,132 @@
|
||||
import { Injectable } from "@nestjs/common";
|
||||
import { Observable } from "rxjs";
|
||||
|
||||
import { WildDuckBaseService } from "./wildduck-base.service";
|
||||
import { ListMessagesQueryDto, SearchMessagesQueryDto, UpdateMessageDto, UploadMessageDto } from "../DTO/message.dto";
|
||||
import {
|
||||
MessageDeleteAllResponse,
|
||||
MessageDetails,
|
||||
MessageEventsResponse,
|
||||
MessageFlaggedResponse,
|
||||
MessageForwardResponse,
|
||||
MessageListResponse,
|
||||
MessageSearchResponse,
|
||||
MessageSubmitResponse,
|
||||
MessageUploadResponse,
|
||||
} from "../interfaces/messages-response.interface";
|
||||
import { WildDuckSuccessResponse } from "../interfaces/wildduck-response.interface";
|
||||
|
||||
@Injectable()
|
||||
export class WildDuckMessagesService extends WildDuckBaseService {
|
||||
/**
|
||||
* List messages in a mailbox
|
||||
*/
|
||||
listMessages(userId: string, mailboxId: string, query?: ListMessagesQueryDto): Observable<MessageListResponse> {
|
||||
return this.get<MessageListResponse>(`/users/${userId}/mailboxes/${mailboxId}/messages`, query);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get message details
|
||||
*/
|
||||
getMessage(userId: string, mailboxId: string, messageId: number): Observable<MessageDetails> {
|
||||
return this.get<MessageDetails>(`/users/${userId}/mailboxes/${mailboxId}/messages/${messageId}`);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update message details
|
||||
*/
|
||||
updateMessage(userId: string, mailboxId: string, messageId: number | string, data: UpdateMessageDto): Observable<WildDuckSuccessResponse> {
|
||||
return this.put<WildDuckSuccessResponse>(`/users/${userId}/mailboxes/${mailboxId}/messages/${messageId}`, data);
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete a message
|
||||
*/
|
||||
deleteMessage(userId: string, mailboxId: string, messageId: number): Observable<WildDuckSuccessResponse> {
|
||||
return this.delete<WildDuckSuccessResponse>(`/users/${userId}/mailboxes/${mailboxId}/messages/${messageId}`);
|
||||
}
|
||||
|
||||
/**
|
||||
* Upload message to mailbox
|
||||
*/
|
||||
uploadMessage(userId: string, mailboxId: string, data: UploadMessageDto): Observable<MessageUploadResponse> {
|
||||
return this.post<MessageUploadResponse>(`/users/${userId}/mailboxes/${mailboxId}/messages`, data);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get message source (raw email)
|
||||
*/
|
||||
getMessageSource(userId: string, mailboxId: string, messageId: number): Observable<string> {
|
||||
// This returns raw email content, not JSON
|
||||
return this.get<string>(`/users/${userId}/mailboxes/${mailboxId}/messages/${messageId}/message.eml`);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get message attachment
|
||||
*/
|
||||
getMessageAttachment(userId: string, mailboxId: string, messageId: number, attachmentId: string): Observable<any> {
|
||||
// This returns binary content
|
||||
return this.get<any>(`/users/${userId}/mailboxes/${mailboxId}/messages/${messageId}/attachments/${attachmentId}`);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get message events/timeline
|
||||
*/
|
||||
getMessageEvents(userId: string, mailboxId: string, messageId: number): Observable<MessageEventsResponse> {
|
||||
return this.get<MessageEventsResponse>(`/users/${userId}/mailboxes/${mailboxId}/messages/${messageId}/events`);
|
||||
}
|
||||
|
||||
/**
|
||||
* List flagged messages across all mailboxes
|
||||
*/
|
||||
listFlaggedMessages(userId: string, query?: { order?: "asc" | "desc"; limit?: number; page?: number }): Observable<MessageFlaggedResponse> {
|
||||
return this.get<MessageFlaggedResponse>(`/users/${userId}/flagged`, query);
|
||||
}
|
||||
|
||||
/**
|
||||
* Search for messages across all mailboxes
|
||||
*/
|
||||
searchMessages(userId: string, query: SearchMessagesQueryDto): Observable<MessageSearchResponse> {
|
||||
return this.get<MessageSearchResponse>(`/users/${userId}/search`, query);
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete all messages from a mailbox
|
||||
*/
|
||||
deleteAllMessages(userId: string, mailboxId: string): Observable<MessageDeleteAllResponse> {
|
||||
return this.delete<MessageDeleteAllResponse>(`/users/${userId}/mailboxes/${mailboxId}/messages`);
|
||||
}
|
||||
|
||||
/**
|
||||
* Forward stored message
|
||||
*/
|
||||
forwardMessage(
|
||||
userId: string,
|
||||
mailboxId: string,
|
||||
messageId: number,
|
||||
data: {
|
||||
target: string[];
|
||||
from?: string;
|
||||
sessId?: string;
|
||||
ip?: string;
|
||||
},
|
||||
): Observable<MessageForwardResponse> {
|
||||
return this.post<MessageForwardResponse>(`/users/${userId}/mailboxes/${mailboxId}/messages/${messageId}/forward`, data);
|
||||
}
|
||||
|
||||
/**
|
||||
* Submit draft for delivery
|
||||
*/
|
||||
submitDraft(
|
||||
userId: string,
|
||||
mailboxId: string,
|
||||
messageId: number,
|
||||
data?: {
|
||||
deleteFiles?: boolean;
|
||||
sess?: string;
|
||||
ip?: string;
|
||||
},
|
||||
): Observable<MessageSubmitResponse> {
|
||||
return this.post<MessageSubmitResponse>(`/users/${userId}/mailboxes/${mailboxId}/messages/${messageId}/submit`, data);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user