chore: first commit

This commit is contained in:
mahyargdz
2025-06-24 11:26:06 +03:30
commit ccbf743ecb
186 changed files with 22258 additions and 0 deletions
@@ -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);
}
}