UNPKG

onesecmail

Version:

Create and receive email in only 1 second.

179 lines (178 loc) 9.1 kB
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { if (kind === "m") throw new TypeError("Private method is not writable"); if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; }; var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; var _OneSecMailbox_api, _OneSecMailbox_local, _OneSecMailbox_domain, _OneSecMailShortMessage_api, _OneSecMailShortMessage_local, _OneSecMailShortMessage_domain, _OneSecMailShortMessage_emailAddress, _OneSecMailAttachment_api, _OneSecMailAttachment_local, _OneSecMailAttachment_domain, _OneSecMailAttachment_messageId; import { got } from "got"; import { z } from "zod"; import { TypedEmitter } from "tiny-typed-emitter"; import OneSecMailAPI, { FORBIDDEN_LOGIN } from "./OneSecMailAPI.js"; export default async function OneSecMail(a, b) { let emailAddress = null; let options = {}; if (typeof a === "string" && typeof b === "undefined") { emailAddress = a; } else if (typeof a === "object" && typeof b === "undefined") { options = a; } else if (typeof a === "string" && typeof b === "object") { emailAddress = a; options = b; } const api = new OneSecMailAPI(options); if (!emailAddress) { [emailAddress] = await api.genRandomMailbox(); return new OneSecMailbox(emailAddress, api); } const schema = z.string().email(); if (!schema.safeParse(emailAddress).success) { throw new Error("Email address must be a valid email address"); } const [local, domain] = emailAddress.split("@"); if (FORBIDDEN_LOGIN.includes(local)) { throw new Error(`For security reason you cannot read messages from addresses: ${FORBIDDEN_LOGIN.map((local) => `${local}@${domain}`).join(", ")}`); } const domainList = await api.getDomainList(); if (!domainList.includes(domain)) { throw new Error(`Email address must contain a domain contained in the following list: ${domainList .map((domain) => `${local}@${domain}`) .join(", ")}`); } return new OneSecMailbox(emailAddress, api); } class OneSecMailbox extends TypedEmitter { constructor(emailAddress, api) { super(); _OneSecMailbox_api.set(this, void 0); _OneSecMailbox_local.set(this, void 0); _OneSecMailbox_domain.set(this, void 0); const [local, domain] = emailAddress.split("@"); __classPrivateFieldSet(this, _OneSecMailbox_api, api, "f"); __classPrivateFieldSet(this, _OneSecMailbox_local, local, "f"); __classPrivateFieldSet(this, _OneSecMailbox_domain, domain, "f"); this.emailAddress = emailAddress; } async getMessages(options) { const messages = await __classPrivateFieldGet(this, _OneSecMailbox_api, "f").getMessages(__classPrivateFieldGet(this, _OneSecMailbox_local, "f"), __classPrivateFieldGet(this, _OneSecMailbox_domain, "f"), options); return messages.map((message) => { return new OneSecMailShortMessage(this.emailAddress, message, __classPrivateFieldGet(this, _OneSecMailbox_api, "f")); }); } async clearMessages(options) { try { await got.post("https://www.1secmail.com/mailbox", { form: { action: "deleteMailbox", login: __classPrivateFieldGet(this, _OneSecMailbox_local, "f"), domain: __classPrivateFieldGet(this, _OneSecMailbox_domain, "f"), }, retry: { limit: options?.retry ?? __classPrivateFieldGet(this, _OneSecMailbox_api, "f").retry, }, timeout: { request: options?.timeout ?? __classPrivateFieldGet(this, _OneSecMailbox_api, "f").timeout, }, }); } catch (e) { throw new Error("HTTP request failed"); } } } _OneSecMailbox_api = new WeakMap(), _OneSecMailbox_local = new WeakMap(), _OneSecMailbox_domain = new WeakMap(); class OneSecMailShortMessage { constructor(emailAddress, message, api) { _OneSecMailShortMessage_api.set(this, void 0); _OneSecMailShortMessage_local.set(this, void 0); _OneSecMailShortMessage_domain.set(this, void 0); _OneSecMailShortMessage_emailAddress.set(this, void 0); const [local, domain] = emailAddress.split("@"); __classPrivateFieldSet(this, _OneSecMailShortMessage_api, api, "f"); __classPrivateFieldSet(this, _OneSecMailShortMessage_local, local, "f"); __classPrivateFieldSet(this, _OneSecMailShortMessage_domain, domain, "f"); __classPrivateFieldSet(this, _OneSecMailShortMessage_emailAddress, emailAddress, "f"); this.id = message.id; this.from = message.from; this.subject = message.subject; this.date = message.date; } async fetchFullMessage(options) { const message = await __classPrivateFieldGet(this, _OneSecMailShortMessage_api, "f").readMessage(__classPrivateFieldGet(this, _OneSecMailShortMessage_local, "f"), __classPrivateFieldGet(this, _OneSecMailShortMessage_domain, "f"), this.id, options); if (!message) throw new Error("Message no longer exists"); return new OneSecMailMessage(__classPrivateFieldGet(this, _OneSecMailShortMessage_emailAddress, "f"), message, __classPrivateFieldGet(this, _OneSecMailShortMessage_api, "f")); } serialize() { return { id: this.id, from: this.from, subject: this.subject, date: this.date, }; } } _OneSecMailShortMessage_api = new WeakMap(), _OneSecMailShortMessage_local = new WeakMap(), _OneSecMailShortMessage_domain = new WeakMap(), _OneSecMailShortMessage_emailAddress = new WeakMap(); class OneSecMailMessage { constructor(emailAddress, message, api) { this.id = message.id; this.from = message.from; this.subject = message.subject; this.date = message.date; this.attachments = message.attachments.map((attachment) => { return new OneSecMailAttachment(emailAddress, message.id, attachment, api); }); this.body = message.body; this.textBody = message.textBody; this.htmlBody = message.htmlBody; } serialize() { return { id: this.id, from: this.from, subject: this.subject, date: this.date, attachments: this.attachments.map((attachment) => attachment.serialize()), body: this.body, textBody: this.textBody, htmlBody: this.htmlBody, }; } } class OneSecMailAttachment { constructor(emailAddress, messageId, attachment, api) { _OneSecMailAttachment_api.set(this, void 0); _OneSecMailAttachment_local.set(this, void 0); _OneSecMailAttachment_domain.set(this, void 0); _OneSecMailAttachment_messageId.set(this, void 0); const [local, domain] = emailAddress.split("@"); __classPrivateFieldSet(this, _OneSecMailAttachment_api, api, "f"); __classPrivateFieldSet(this, _OneSecMailAttachment_local, local, "f"); __classPrivateFieldSet(this, _OneSecMailAttachment_domain, domain, "f"); __classPrivateFieldSet(this, _OneSecMailAttachment_messageId, messageId, "f"); this.filename = attachment.filename; this.contentType = attachment.contentType; this.size = attachment.size; } async download(options) { const file = await __classPrivateFieldGet(this, _OneSecMailAttachment_api, "f").download(__classPrivateFieldGet(this, _OneSecMailAttachment_local, "f"), __classPrivateFieldGet(this, _OneSecMailAttachment_domain, "f"), __classPrivateFieldGet(this, _OneSecMailAttachment_messageId, "f"), this.filename, options); if (!file) throw new Error("File no longer exists"); return file; } serialize() { return { filename: this.filename, contentType: this.contentType, size: this.size, }; } } _OneSecMailAttachment_api = new WeakMap(), _OneSecMailAttachment_local = new WeakMap(), _OneSecMailAttachment_domain = new WeakMap(), _OneSecMailAttachment_messageId = new WeakMap();