mailbucket
Version:
An npm library that aggregates multiple APIs for creating and receiving temporary emails.
96 lines (95 loc) • 4.04 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.MailBucket = void 0;
const mailtm_provider_1 = require("./providers/mailtm.provider");
class MailBucket {
providers;
constructor(config) {
this.providers = new Map();
if (config?.providers && config.providers.length > 0) {
config.providers.forEach(p => this.registerProvider(p));
}
else {
this.registerProvider(new mailtm_provider_1.MailTmProvider({ baseUrl: 'https://api.mail.tm', providerName: 'mail.tm' }));
this.registerProvider(new mailtm_provider_1.MailTmProvider({ baseUrl: 'https://api.mail.gw', providerName: 'mail.gw' }));
}
}
registerProvider(provider) {
if (this.providers.has(provider.providerName)) {
}
this.providers.set(provider.providerName, provider);
}
getAvailableProviders() {
return Array.from(this.providers.keys());
}
getProvider(name) {
return this.providers.get(name);
}
async createAccount(providerName) {
let provider;
if (providerName) {
provider = this.getProvider(providerName);
if (!provider) {
return { success: false, message: `Provider "${providerName}" not found.` };
}
}
else {
const availableProviders = this.getAvailableProviders();
if (availableProviders.length === 0) {
return { success: false, message: 'No email providers registered.' };
}
const randomProviderName = availableProviders[Math.floor(Math.random() * availableProviders.length)];
provider = this.getProvider(randomProviderName);
if (!provider) {
return { success: false, message: `Failed to get random provider instance for "${randomProviderName}".` };
}
}
try {
const result = await provider.createAccount();
if (result.success) {
}
else {
}
return result;
}
catch (error) {
console.error(`Unexpected error during account creation with ${provider.providerName}:`, error);
return { success: false, message: `Client error during account creation: ${error.message}`, error };
}
}
async getMessages(account) {
const provider = this.getProvider(account.providerName);
if (!provider) {
return { success: false, message: `Provider "${account.providerName}" associated with this account not found.` };
}
return provider.getMessages(account);
}
async getMessage(account, messageId) {
const provider = this.getProvider(account.providerName);
if (!provider) {
return { success: false, message: `Provider "${account.providerName}" associated with this account not found.` };
}
return provider.getMessage(account, messageId);
}
async deleteMessage(account, messageId) {
const provider = this.getProvider(account.providerName);
if (!provider) {
return { success: false, message: `Provider "${account.providerName}" associated with this account not found.` };
}
if (!provider.deleteMessage) {
return { success: false, message: `Provider "${account.providerName}" does not support deleting messages.` };
}
return provider.deleteMessage(account, messageId);
}
async deleteAccount(account) {
const provider = this.getProvider(account.providerName);
if (!provider) {
return { success: false, message: `Provider "${account.providerName}" associated with this account not found.` };
}
if (!provider.deleteAccount) {
return { success: false, message: `Provider "${account.providerName}" does not support deleting accounts.` };
}
return provider.deleteAccount(account);
}
}
exports.MailBucket = MailBucket;