@bencibro/tempmail-mcp 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/GUIDE.md +286 -0
- package/GUIDE.zh-CN.md +287 -0
- package/LICENSE +21 -0
- package/README.md +308 -0
- package/README.zh-CN.md +308 -0
- package/dist/base-provider.d.ts +21 -0
- package/dist/base-provider.d.ts.map +1 -0
- package/dist/base-provider.js +36 -0
- package/dist/base-provider.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +519 -0
- package/dist/index.js.map +1 -0
- package/dist/provider-manager.d.ts +36 -0
- package/dist/provider-manager.d.ts.map +1 -0
- package/dist/provider-manager.js +67 -0
- package/dist/provider-manager.js.map +1 -0
- package/dist/providers/auto-register.d.ts +45 -0
- package/dist/providers/auto-register.d.ts.map +1 -0
- package/dist/providers/auto-register.js +249 -0
- package/dist/providers/auto-register.js.map +1 -0
- package/dist/providers/catchmail.d.ts +20 -0
- package/dist/providers/catchmail.d.ts.map +1 -0
- package/dist/providers/catchmail.js +79 -0
- package/dist/providers/catchmail.js.map +1 -0
- package/dist/providers/guerrillamail.d.ts +21 -0
- package/dist/providers/guerrillamail.d.ts.map +1 -0
- package/dist/providers/guerrillamail.js +114 -0
- package/dist/providers/guerrillamail.js.map +1 -0
- package/dist/providers/mail-cx.d.ts +30 -0
- package/dist/providers/mail-cx.d.ts.map +1 -0
- package/dist/providers/mail-cx.js +154 -0
- package/dist/providers/mail-cx.js.map +1 -0
- package/dist/providers/mail-tm.d.ts +16 -0
- package/dist/providers/mail-tm.d.ts.map +1 -0
- package/dist/providers/mail-tm.js +109 -0
- package/dist/providers/mail-tm.js.map +1 -0
- package/dist/providers/maildrop.d.ts +22 -0
- package/dist/providers/maildrop.d.ts.map +1 -0
- package/dist/providers/maildrop.js +88 -0
- package/dist/providers/maildrop.js.map +1 -0
- package/dist/providers/one-secmail.d.ts +22 -0
- package/dist/providers/one-secmail.d.ts.map +1 -0
- package/dist/providers/one-secmail.js +98 -0
- package/dist/providers/one-secmail.js.map +1 -0
- package/dist/types.d.ts +96 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/dist/utils.d.ts +33 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +100 -0
- package/dist/utils.js.map +1 -0
- package/package.json +56 -0
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
import { BaseProvider } from "../base-provider.js";
|
|
2
|
+
import { randomUsername } from "../utils.js";
|
|
3
|
+
/**
|
|
4
|
+
* Mail.cx provider — requires API token (free tier: 500 req/day).
|
|
5
|
+
* API docs: https://mail.cx/api-docs/
|
|
6
|
+
* Supports long-poll and SSE push. Mail kept for 1 hour.
|
|
7
|
+
*
|
|
8
|
+
* This adapter uses long-poll for waitForEmail, which is more efficient
|
|
9
|
+
* than the base class polling.
|
|
10
|
+
*/
|
|
11
|
+
export class MailCxProvider extends BaseProvider {
|
|
12
|
+
name = "mail.cx";
|
|
13
|
+
description = "Temporary email via mail.cx. Free tier: 500 req/day. Supports long-poll. Requires API token.";
|
|
14
|
+
requiresApiKey = true;
|
|
15
|
+
baseUrl = "https://api.mail.cx/v1";
|
|
16
|
+
apiToken = null;
|
|
17
|
+
constructor(apiToken) {
|
|
18
|
+
super();
|
|
19
|
+
if (apiToken)
|
|
20
|
+
this.apiToken = apiToken;
|
|
21
|
+
}
|
|
22
|
+
getHeaders() {
|
|
23
|
+
const headers = {};
|
|
24
|
+
if (this.apiToken) {
|
|
25
|
+
headers["x-api-token"] = this.apiToken;
|
|
26
|
+
}
|
|
27
|
+
return headers;
|
|
28
|
+
}
|
|
29
|
+
async api(path, options = {}, timeoutMs) {
|
|
30
|
+
const controller = new AbortController();
|
|
31
|
+
const timer = timeoutMs
|
|
32
|
+
? setTimeout(() => controller.abort(), timeoutMs)
|
|
33
|
+
: undefined;
|
|
34
|
+
try {
|
|
35
|
+
const res = await fetch(`${this.baseUrl}${path}`, {
|
|
36
|
+
...options,
|
|
37
|
+
headers: { ...this.getHeaders(), ...options.headers },
|
|
38
|
+
signal: controller.signal,
|
|
39
|
+
});
|
|
40
|
+
if (!res.ok && res.status !== 204) {
|
|
41
|
+
const text = await res.text().catch(() => "");
|
|
42
|
+
throw new Error(`Mail.cx API error ${res.status}: ${text || res.statusText}`);
|
|
43
|
+
}
|
|
44
|
+
if (res.status === 204)
|
|
45
|
+
return undefined;
|
|
46
|
+
return res.json();
|
|
47
|
+
}
|
|
48
|
+
finally {
|
|
49
|
+
if (timer)
|
|
50
|
+
clearTimeout(timer);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
async getDomains() {
|
|
54
|
+
const data = await this.api("/config");
|
|
55
|
+
// The config endpoint returns available system domains
|
|
56
|
+
return data.domains ?? data.mail_domains ?? [];
|
|
57
|
+
}
|
|
58
|
+
async createMailbox(params) {
|
|
59
|
+
const domains = await this.getDomains();
|
|
60
|
+
const username = (params.username || randomUsername()).toLowerCase();
|
|
61
|
+
const domain = params.domain && domains.length > 0 && domains.includes(params.domain)
|
|
62
|
+
? params.domain
|
|
63
|
+
: domains[0] ?? "mail.cx";
|
|
64
|
+
const address = `${username}@${domain}`;
|
|
65
|
+
// Mail.cx: mailbox is implicit, no creation needed.
|
|
66
|
+
return {
|
|
67
|
+
address,
|
|
68
|
+
provider: this.name,
|
|
69
|
+
token: this.apiToken ?? undefined,
|
|
70
|
+
createdAt: new Date().toISOString(),
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
async getMessages(mailbox) {
|
|
74
|
+
// Long-poll: block up to 25s for new mail
|
|
75
|
+
const data = await this.api(`/inbox/${mailbox.address}`, {}, 30_000);
|
|
76
|
+
return (data.emails ?? []).map((e) => ({
|
|
77
|
+
id: e.id,
|
|
78
|
+
from: e.from_email ?? "",
|
|
79
|
+
subject: e.subject ?? "",
|
|
80
|
+
bodyText: e.preview_text,
|
|
81
|
+
date: e.created_at ?? new Date().toISOString(),
|
|
82
|
+
}));
|
|
83
|
+
}
|
|
84
|
+
async getMessage(_mailbox, messageId) {
|
|
85
|
+
const m = await this.api(`/email/${messageId}`);
|
|
86
|
+
return {
|
|
87
|
+
id: m.id,
|
|
88
|
+
from: m.from_email ?? "",
|
|
89
|
+
subject: m.subject ?? "",
|
|
90
|
+
bodyText: m.text,
|
|
91
|
+
bodyHtml: m.html,
|
|
92
|
+
date: m.created_at ?? new Date().toISOString(),
|
|
93
|
+
attachments: m.attachments?.map((a) => ({
|
|
94
|
+
filename: a.filename,
|
|
95
|
+
contentType: a.content_type,
|
|
96
|
+
size: a.size,
|
|
97
|
+
})),
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Override waitForEmail to use mail.cx long-poll (more efficient).
|
|
102
|
+
*/
|
|
103
|
+
async waitForEmail(mailbox, options) {
|
|
104
|
+
const opts = {
|
|
105
|
+
subjectContains: options?.subjectContains ?? "",
|
|
106
|
+
fromContains: options?.fromContains ?? "",
|
|
107
|
+
timeoutMs: options?.timeoutMs ?? 60_000,
|
|
108
|
+
pollIntervalMs: options?.pollIntervalMs ?? 25_000, // mail.cx long-poll is 25s
|
|
109
|
+
};
|
|
110
|
+
const deadline = Date.now() + opts.timeoutMs;
|
|
111
|
+
let since;
|
|
112
|
+
while (Date.now() < deadline) {
|
|
113
|
+
let path = `/inbox/${mailbox.address}`;
|
|
114
|
+
const params = new URLSearchParams();
|
|
115
|
+
if (since)
|
|
116
|
+
params.set("since", since);
|
|
117
|
+
if (opts.subjectContains)
|
|
118
|
+
params.set("subject", opts.subjectContains);
|
|
119
|
+
if (opts.fromContains)
|
|
120
|
+
params.set("from", opts.fromContains);
|
|
121
|
+
const qs = params.toString();
|
|
122
|
+
if (qs)
|
|
123
|
+
path += `?${qs}`;
|
|
124
|
+
const data = await this.api(path, {}, 30_000);
|
|
125
|
+
if (data.next_since)
|
|
126
|
+
since = data.next_since;
|
|
127
|
+
for (const e of data.emails ?? []) {
|
|
128
|
+
const full = await this.getMessage(mailbox, e.id);
|
|
129
|
+
const fromField = `${full.from}`.toLowerCase();
|
|
130
|
+
const subjectMatch = opts.subjectContains
|
|
131
|
+
? full.subject
|
|
132
|
+
.toLowerCase()
|
|
133
|
+
.includes(opts.subjectContains.toLowerCase())
|
|
134
|
+
: true;
|
|
135
|
+
const fromMatch = opts.fromContains
|
|
136
|
+
? fromField.includes(opts.fromContains.toLowerCase())
|
|
137
|
+
: true;
|
|
138
|
+
if (subjectMatch && fromMatch) {
|
|
139
|
+
return full;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
throw new Error(`Timed out after ${opts.timeoutMs / 1000}s waiting for email` +
|
|
144
|
+
(opts.subjectContains
|
|
145
|
+
? ` matching subject "${opts.subjectContains}"`
|
|
146
|
+
: "") +
|
|
147
|
+
(opts.fromContains ? ` from "${opts.fromContains}"` : ""));
|
|
148
|
+
}
|
|
149
|
+
async deleteMailbox(mailbox) {
|
|
150
|
+
// Clear all emails at the address
|
|
151
|
+
await this.api(`/inbox/${mailbox.address}`, { method: "DELETE" });
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
//# sourceMappingURL=mail-cx.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mail-cx.js","sourceRoot":"","sources":["../../src/providers/mail-cx.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { TempMailbox, EmailMessage, CreateMailboxParams } from "../types.js";
|
|
2
|
+
import { BaseProvider } from "../base-provider.js";
|
|
3
|
+
export declare class MailTmProvider extends BaseProvider {
|
|
4
|
+
readonly name = "mail.tm";
|
|
5
|
+
readonly description = "Free temporary email via mail.tm. No API key required. 8 QPS rate limit.";
|
|
6
|
+
readonly requiresApiKey = false;
|
|
7
|
+
private baseUrl;
|
|
8
|
+
private token;
|
|
9
|
+
private api;
|
|
10
|
+
getDomains(): Promise<string[]>;
|
|
11
|
+
createMailbox(params: CreateMailboxParams): Promise<TempMailbox>;
|
|
12
|
+
getMessages(mailbox: TempMailbox): Promise<EmailMessage[]>;
|
|
13
|
+
getMessage(mailbox: TempMailbox, messageId: string): Promise<EmailMessage>;
|
|
14
|
+
deleteMailbox(mailbox: TempMailbox): Promise<void>;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=mail-tm.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mail-tm.d.ts","sourceRoot":"","sources":["../../src/providers/mail-tm.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,YAAY,EACZ,mBAAmB,EACpB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AA6DnD,qBAAa,cAAe,SAAQ,YAAY;IAC9C,QAAQ,CAAC,IAAI,aAAa;IAC1B,QAAQ,CAAC,WAAW,8EACyD;IAC7E,QAAQ,CAAC,cAAc,SAAS;IAEhC,OAAO,CAAC,OAAO,CAAyB;IACxC,OAAO,CAAC,KAAK,CAAuB;YAEtB,GAAG;IAyBX,UAAU,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAO/B,aAAa,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,WAAW,CAAC;IAqChE,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAgB1D,UAAU,CACd,OAAO,EAAE,WAAW,EACpB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,YAAY,CAAC;IAuBlB,aAAa,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;CAQzD"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { BaseProvider } from "../base-provider.js";
|
|
2
|
+
import { randomUsername, randomString } from "../utils.js";
|
|
3
|
+
export class MailTmProvider extends BaseProvider {
|
|
4
|
+
name = "mail.tm";
|
|
5
|
+
description = "Free temporary email via mail.tm. No API key required. 8 QPS rate limit.";
|
|
6
|
+
requiresApiKey = false;
|
|
7
|
+
baseUrl = "https://api.mail.tm";
|
|
8
|
+
token = null;
|
|
9
|
+
async api(path, options = {}) {
|
|
10
|
+
const headers = {
|
|
11
|
+
"Content-Type": "application/json",
|
|
12
|
+
...(options.headers ?? {}),
|
|
13
|
+
};
|
|
14
|
+
if (this.token) {
|
|
15
|
+
headers["Authorization"] = `Bearer ${this.token}`;
|
|
16
|
+
}
|
|
17
|
+
const res = await fetch(`${this.baseUrl}${path}`, {
|
|
18
|
+
...options,
|
|
19
|
+
headers,
|
|
20
|
+
});
|
|
21
|
+
if (!res.ok) {
|
|
22
|
+
const text = await res.text().catch(() => "");
|
|
23
|
+
throw new Error(`mail.tm API error ${res.status}: ${text || res.statusText}`);
|
|
24
|
+
}
|
|
25
|
+
if (res.status === 204)
|
|
26
|
+
return undefined;
|
|
27
|
+
return res.json();
|
|
28
|
+
}
|
|
29
|
+
async getDomains() {
|
|
30
|
+
const data = await this.api("/domains");
|
|
31
|
+
return data["hydra:member"]
|
|
32
|
+
.filter((d) => d.isActive)
|
|
33
|
+
.map((d) => d.domain);
|
|
34
|
+
}
|
|
35
|
+
async createMailbox(params) {
|
|
36
|
+
const domains = await this.getDomains();
|
|
37
|
+
if (domains.length === 0) {
|
|
38
|
+
throw new Error("No active domains available from mail.tm");
|
|
39
|
+
}
|
|
40
|
+
const username = params.username || randomUsername();
|
|
41
|
+
const domain = params.domain && domains.includes(params.domain)
|
|
42
|
+
? params.domain
|
|
43
|
+
: domains[Math.floor(Math.random() * domains.length)];
|
|
44
|
+
const address = `${username}@${domain}`;
|
|
45
|
+
const password = randomString(16);
|
|
46
|
+
// Create account
|
|
47
|
+
await this.api("/accounts", {
|
|
48
|
+
method: "POST",
|
|
49
|
+
body: JSON.stringify({ address, password }),
|
|
50
|
+
});
|
|
51
|
+
// Get token
|
|
52
|
+
const tokenData = await this.api("/token", {
|
|
53
|
+
method: "POST",
|
|
54
|
+
body: JSON.stringify({ address, password }),
|
|
55
|
+
});
|
|
56
|
+
this.token = tokenData.token;
|
|
57
|
+
return {
|
|
58
|
+
address,
|
|
59
|
+
provider: this.name,
|
|
60
|
+
token: this.token ?? undefined,
|
|
61
|
+
password,
|
|
62
|
+
createdAt: new Date().toISOString(),
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
async getMessages(mailbox) {
|
|
66
|
+
if (mailbox.token) {
|
|
67
|
+
this.token = mailbox.token;
|
|
68
|
+
}
|
|
69
|
+
const data = await this.api("/messages");
|
|
70
|
+
return data["hydra:member"].map((m) => ({
|
|
71
|
+
id: m.id,
|
|
72
|
+
from: m.from?.address ?? "",
|
|
73
|
+
fromName: m.from?.name,
|
|
74
|
+
subject: m.subject,
|
|
75
|
+
bodyText: m.intro,
|
|
76
|
+
date: m.createdAt,
|
|
77
|
+
}));
|
|
78
|
+
}
|
|
79
|
+
async getMessage(mailbox, messageId) {
|
|
80
|
+
if (mailbox.token) {
|
|
81
|
+
this.token = mailbox.token;
|
|
82
|
+
}
|
|
83
|
+
const m = await this.api(`/messages/${messageId}`);
|
|
84
|
+
return {
|
|
85
|
+
id: m.id,
|
|
86
|
+
from: m.from?.address ?? "",
|
|
87
|
+
fromName: m.from?.name,
|
|
88
|
+
subject: m.subject,
|
|
89
|
+
bodyText: m.text,
|
|
90
|
+
bodyHtml: m.html?.join("\n"),
|
|
91
|
+
date: m.createdAt,
|
|
92
|
+
attachments: m.attachments?.map((a) => ({
|
|
93
|
+
filename: a.filename,
|
|
94
|
+
contentType: a.contentType,
|
|
95
|
+
size: a.size,
|
|
96
|
+
downloadUrl: a.downloadUrl,
|
|
97
|
+
})),
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
async deleteMailbox(mailbox) {
|
|
101
|
+
if (mailbox.token) {
|
|
102
|
+
this.token = mailbox.token;
|
|
103
|
+
}
|
|
104
|
+
const meData = await this.api("/me");
|
|
105
|
+
await this.api(`/accounts/${meData.id}`, { method: "DELETE" });
|
|
106
|
+
this.token = null;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=mail-tm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mail-tm.js","sourceRoot":"","sources":["../../src/providers/mail-tm.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { TempMailbox, EmailMessage, CreateMailboxParams } from "../types.js";
|
|
2
|
+
import { BaseProvider } from "../base-provider.js";
|
|
3
|
+
/**
|
|
4
|
+
* MailDrop provider — requires API key (free tier available, 300 req/day).
|
|
5
|
+
* API docs: https://maildrop.cx/api-docs
|
|
6
|
+
* Auth: Bearer token in Authorization header.
|
|
7
|
+
*/
|
|
8
|
+
export declare class MailDropProvider extends BaseProvider {
|
|
9
|
+
readonly name = "maildrop";
|
|
10
|
+
readonly description = "Temporary email via MailDrop. Free tier: 300 req/day. Requires API key from maildrop.cx.";
|
|
11
|
+
readonly requiresApiKey = true;
|
|
12
|
+
private baseUrl;
|
|
13
|
+
private apiKey;
|
|
14
|
+
constructor(apiKey?: string);
|
|
15
|
+
private getHeaders;
|
|
16
|
+
private api;
|
|
17
|
+
getDomains(): Promise<string[]>;
|
|
18
|
+
createMailbox(params: CreateMailboxParams): Promise<TempMailbox>;
|
|
19
|
+
getMessages(mailbox: TempMailbox): Promise<EmailMessage[]>;
|
|
20
|
+
getMessage(_mailbox: TempMailbox, messageId: string): Promise<EmailMessage>;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=maildrop.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"maildrop.d.ts","sourceRoot":"","sources":["../../src/providers/maildrop.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,YAAY,EACZ,mBAAmB,EAEpB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGnD;;;;GAIG;AACH,qBAAa,gBAAiB,SAAQ,YAAY;IAChD,QAAQ,CAAC,IAAI,cAAc;IAC3B,QAAQ,CAAC,WAAW,8FACyE;IAC7F,QAAQ,CAAC,cAAc,QAAQ;IAE/B,OAAO,CAAC,OAAO,CAAgC;IAC/C,OAAO,CAAC,MAAM,CAAuB;gBAEzB,MAAM,CAAC,EAAE,MAAM;IAK3B,OAAO,CAAC,UAAU;YAUJ,GAAG;IAkBX,UAAU,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAK/B,aAAa,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,WAAW,CAAC;IAuBhE,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAmB1D,UAAU,CACd,QAAQ,EAAE,WAAW,EACrB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,YAAY,CAAC;CA+BzB"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { BaseProvider } from "../base-provider.js";
|
|
2
|
+
import { randomUsername } from "../utils.js";
|
|
3
|
+
/**
|
|
4
|
+
* MailDrop provider — requires API key (free tier available, 300 req/day).
|
|
5
|
+
* API docs: https://maildrop.cx/api-docs
|
|
6
|
+
* Auth: Bearer token in Authorization header.
|
|
7
|
+
*/
|
|
8
|
+
export class MailDropProvider extends BaseProvider {
|
|
9
|
+
name = "maildrop";
|
|
10
|
+
description = "Temporary email via MailDrop. Free tier: 300 req/day. Requires API key from maildrop.cx.";
|
|
11
|
+
requiresApiKey = true;
|
|
12
|
+
baseUrl = "https://maildrop.cx/api/v1";
|
|
13
|
+
apiKey = null;
|
|
14
|
+
constructor(apiKey) {
|
|
15
|
+
super();
|
|
16
|
+
if (apiKey)
|
|
17
|
+
this.apiKey = apiKey;
|
|
18
|
+
}
|
|
19
|
+
getHeaders() {
|
|
20
|
+
const headers = {
|
|
21
|
+
"Content-Type": "application/json",
|
|
22
|
+
};
|
|
23
|
+
if (this.apiKey) {
|
|
24
|
+
headers["Authorization"] = `Bearer ${this.apiKey}`;
|
|
25
|
+
}
|
|
26
|
+
return headers;
|
|
27
|
+
}
|
|
28
|
+
async api(path, options = {}) {
|
|
29
|
+
const res = await fetch(`${this.baseUrl}${path}`, {
|
|
30
|
+
...options,
|
|
31
|
+
headers: { ...this.getHeaders(), ...options.headers },
|
|
32
|
+
});
|
|
33
|
+
if (!res.ok) {
|
|
34
|
+
const text = await res.text().catch(() => "");
|
|
35
|
+
throw new Error(`MailDrop API error ${res.status}: ${text || res.statusText}`);
|
|
36
|
+
}
|
|
37
|
+
if (res.status === 204)
|
|
38
|
+
return undefined;
|
|
39
|
+
return res.json();
|
|
40
|
+
}
|
|
41
|
+
async getDomains() {
|
|
42
|
+
// MailDrop's public domains
|
|
43
|
+
return ["maildrop.cc", "206969.xyz", "8191.us"];
|
|
44
|
+
}
|
|
45
|
+
async createMailbox(params) {
|
|
46
|
+
const username = (params.username || randomUsername()).toLowerCase();
|
|
47
|
+
const domains = await this.getDomains();
|
|
48
|
+
const domain = params.domain && domains.includes(params.domain)
|
|
49
|
+
? params.domain
|
|
50
|
+
: domains[0];
|
|
51
|
+
const data = await this.api("/mailboxes", {
|
|
52
|
+
method: "POST",
|
|
53
|
+
body: JSON.stringify({ prefix: username, suffix: domain }),
|
|
54
|
+
});
|
|
55
|
+
return {
|
|
56
|
+
address: data.address,
|
|
57
|
+
provider: this.name,
|
|
58
|
+
createdAt: new Date().toISOString(),
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
async getMessages(mailbox) {
|
|
62
|
+
const data = await this.api(`/mailboxes/${mailbox.address}/messages`);
|
|
63
|
+
return (data.messages ?? []).map((m) => ({
|
|
64
|
+
id: m.id,
|
|
65
|
+
from: m.from ?? "",
|
|
66
|
+
subject: m.subject ?? "",
|
|
67
|
+
date: m.date ?? new Date().toISOString(),
|
|
68
|
+
}));
|
|
69
|
+
}
|
|
70
|
+
async getMessage(_mailbox, messageId) {
|
|
71
|
+
const m = await this.api(`/messages/${messageId}`);
|
|
72
|
+
return {
|
|
73
|
+
id: m.id,
|
|
74
|
+
from: m.from ?? "",
|
|
75
|
+
subject: m.subject ?? "",
|
|
76
|
+
date: m.date ?? new Date().toISOString(),
|
|
77
|
+
bodyText: m.text,
|
|
78
|
+
bodyHtml: m.html,
|
|
79
|
+
attachments: m.attachments?.map((a) => ({
|
|
80
|
+
filename: a.filename,
|
|
81
|
+
contentType: a.content_type,
|
|
82
|
+
size: a.size,
|
|
83
|
+
downloadUrl: a.download_url,
|
|
84
|
+
})),
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=maildrop.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"maildrop.js","sourceRoot":"","sources":["../../src/providers/maildrop.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { TempMailbox, EmailMessage, CreateMailboxParams } from "../types.js";
|
|
2
|
+
import { BaseProvider } from "../base-provider.js";
|
|
3
|
+
/**
|
|
4
|
+
* 1secmail provider — free, no auth required.
|
|
5
|
+
* API: https://www.1secmail.com/api/v1/
|
|
6
|
+
* Simple query-based API with no session management.
|
|
7
|
+
*
|
|
8
|
+
* Note: 1secmail has a new paid API at api.1secmail.com (requires key).
|
|
9
|
+
* This adapter uses the legacy free public endpoints.
|
|
10
|
+
*/
|
|
11
|
+
export declare class OneSecMailProvider extends BaseProvider {
|
|
12
|
+
readonly name = "1secmail";
|
|
13
|
+
readonly description = "Free temporary email via 1secmail.com. No API key, no session. Simple and fast.";
|
|
14
|
+
readonly requiresApiKey = false;
|
|
15
|
+
private baseUrl;
|
|
16
|
+
private api;
|
|
17
|
+
getDomains(): Promise<string[]>;
|
|
18
|
+
createMailbox(params: CreateMailboxParams): Promise<TempMailbox>;
|
|
19
|
+
getMessages(mailbox: TempMailbox): Promise<EmailMessage[]>;
|
|
20
|
+
getMessage(mailbox: TempMailbox, messageId: string): Promise<EmailMessage>;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=one-secmail.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"one-secmail.d.ts","sourceRoot":"","sources":["../../src/providers/one-secmail.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,YAAY,EACZ,mBAAmB,EACpB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGnD;;;;;;;GAOG;AACH,qBAAa,kBAAmB,SAAQ,YAAY;IAClD,QAAQ,CAAC,IAAI,cAAc;IAC3B,QAAQ,CAAC,WAAW,qFACgE;IACpF,QAAQ,CAAC,cAAc,SAAS;IAEhC,OAAO,CAAC,OAAO,CAAsC;YAEvC,GAAG;IAeX,UAAU,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAa/B,aAAa,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,WAAW,CAAC;IAmBhE,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IA6B1D,UAAU,CACd,OAAO,EAAE,WAAW,EACpB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,YAAY,CAAC;CAyCzB"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { BaseProvider } from "../base-provider.js";
|
|
2
|
+
import { randomUsername } from "../utils.js";
|
|
3
|
+
/**
|
|
4
|
+
* 1secmail provider — free, no auth required.
|
|
5
|
+
* API: https://www.1secmail.com/api/v1/
|
|
6
|
+
* Simple query-based API with no session management.
|
|
7
|
+
*
|
|
8
|
+
* Note: 1secmail has a new paid API at api.1secmail.com (requires key).
|
|
9
|
+
* This adapter uses the legacy free public endpoints.
|
|
10
|
+
*/
|
|
11
|
+
export class OneSecMailProvider extends BaseProvider {
|
|
12
|
+
name = "1secmail";
|
|
13
|
+
description = "Free temporary email via 1secmail.com. No API key, no session. Simple and fast.";
|
|
14
|
+
requiresApiKey = false;
|
|
15
|
+
baseUrl = "https://www.1secmail.com/api/v1/";
|
|
16
|
+
async api(params) {
|
|
17
|
+
const url = new URL(this.baseUrl);
|
|
18
|
+
for (const [k, v] of Object.entries(params)) {
|
|
19
|
+
url.searchParams.set(k, v);
|
|
20
|
+
}
|
|
21
|
+
const res = await fetch(url);
|
|
22
|
+
if (!res.ok) {
|
|
23
|
+
const text = await res.text().catch(() => "");
|
|
24
|
+
throw new Error(`1secmail API error ${res.status}: ${text || res.statusText}`);
|
|
25
|
+
}
|
|
26
|
+
return res.json();
|
|
27
|
+
}
|
|
28
|
+
async getDomains() {
|
|
29
|
+
// Hardcoded fallback list (the live API may return 403)
|
|
30
|
+
return [
|
|
31
|
+
"1secmail.com",
|
|
32
|
+
"1secmail.org",
|
|
33
|
+
"1secmail.net",
|
|
34
|
+
"wwjmp.com",
|
|
35
|
+
"esiix.com",
|
|
36
|
+
"xojxe.com",
|
|
37
|
+
"yoggm.com",
|
|
38
|
+
];
|
|
39
|
+
}
|
|
40
|
+
async createMailbox(params) {
|
|
41
|
+
const domains = await this.getDomains();
|
|
42
|
+
const username = params.username || randomUsername();
|
|
43
|
+
const domain = params.domain && domains.includes(params.domain)
|
|
44
|
+
? params.domain
|
|
45
|
+
: domains[Math.floor(Math.random() * domains.length)];
|
|
46
|
+
const address = `${username}@${domain}`;
|
|
47
|
+
// 1secmail doesn't require account creation — the mailbox is implicit.
|
|
48
|
+
// Any address@domain works and starts receiving mail immediately.
|
|
49
|
+
return {
|
|
50
|
+
address,
|
|
51
|
+
provider: this.name,
|
|
52
|
+
createdAt: new Date().toISOString(),
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
async getMessages(mailbox) {
|
|
56
|
+
const [login, domain] = mailbox.address.split("@");
|
|
57
|
+
const data = await this.api({
|
|
58
|
+
action: "getMessages",
|
|
59
|
+
login,
|
|
60
|
+
domain,
|
|
61
|
+
});
|
|
62
|
+
return data.map((m) => ({
|
|
63
|
+
id: String(m.id),
|
|
64
|
+
from: m.from,
|
|
65
|
+
subject: m.subject,
|
|
66
|
+
date: m.date,
|
|
67
|
+
attachments: m.attachments?.map((a) => ({
|
|
68
|
+
filename: a.name,
|
|
69
|
+
contentType: "",
|
|
70
|
+
size: a.size,
|
|
71
|
+
})),
|
|
72
|
+
}));
|
|
73
|
+
}
|
|
74
|
+
async getMessage(mailbox, messageId) {
|
|
75
|
+
const [login, domain] = mailbox.address.split("@");
|
|
76
|
+
const data = await this.api({
|
|
77
|
+
action: "readMessage",
|
|
78
|
+
login,
|
|
79
|
+
domain,
|
|
80
|
+
id: messageId,
|
|
81
|
+
});
|
|
82
|
+
return {
|
|
83
|
+
id: String(data.id),
|
|
84
|
+
from: data.from,
|
|
85
|
+
subject: data.subject,
|
|
86
|
+
date: data.date,
|
|
87
|
+
bodyText: data.textBody || data.body,
|
|
88
|
+
bodyHtml: data.htmlBody,
|
|
89
|
+
attachments: data.attachments?.map((a) => ({
|
|
90
|
+
filename: a.name,
|
|
91
|
+
contentType: a.contentType,
|
|
92
|
+
size: a.size,
|
|
93
|
+
downloadUrl: a.downloadUrl,
|
|
94
|
+
})),
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=one-secmail.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"one-secmail.js","sourceRoot":"","sources":["../../src/providers/one-secmail.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core type definitions for the temporary email service.
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* A received email message.
|
|
6
|
+
*/
|
|
7
|
+
export interface EmailMessage {
|
|
8
|
+
/** Unique ID of the message within the provider. */
|
|
9
|
+
id: string;
|
|
10
|
+
/** Sender email address. */
|
|
11
|
+
from: string;
|
|
12
|
+
/** Sender display name (if available). */
|
|
13
|
+
fromName?: string;
|
|
14
|
+
/** Email subject line. */
|
|
15
|
+
subject: string;
|
|
16
|
+
/** Plain text body (if available). */
|
|
17
|
+
bodyText?: string;
|
|
18
|
+
/** HTML body (if available). */
|
|
19
|
+
bodyHtml?: string;
|
|
20
|
+
/** ISO 8601 date string. */
|
|
21
|
+
date: string;
|
|
22
|
+
/** List of attachments (metadata only). */
|
|
23
|
+
attachments?: Attachment[];
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* An email attachment.
|
|
27
|
+
*/
|
|
28
|
+
export interface Attachment {
|
|
29
|
+
filename: string;
|
|
30
|
+
contentType: string;
|
|
31
|
+
size: number;
|
|
32
|
+
downloadUrl?: string;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* A temporary email account / mailbox.
|
|
36
|
+
*/
|
|
37
|
+
export interface TempMailbox {
|
|
38
|
+
/** The full email address (e.g. user@example.com). */
|
|
39
|
+
address: string;
|
|
40
|
+
/** The provider that created this mailbox. */
|
|
41
|
+
provider: string;
|
|
42
|
+
/** Provider-specific auth token or session ID (if any). */
|
|
43
|
+
token?: string;
|
|
44
|
+
/** Provider-specific session cookie (for Guerrilla Mail etc.). */
|
|
45
|
+
sessionId?: string;
|
|
46
|
+
/** Account password (for Mail.tm). */
|
|
47
|
+
password?: string;
|
|
48
|
+
/** ISO 8601 creation timestamp. */
|
|
49
|
+
createdAt: string;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Parameters for creating a mailbox.
|
|
53
|
+
*/
|
|
54
|
+
export interface CreateMailboxParams {
|
|
55
|
+
/** Preferred username (local-part). If omitted, a random one is generated. */
|
|
56
|
+
username?: string;
|
|
57
|
+
/** Preferred domain. If omitted, a random one is chosen. */
|
|
58
|
+
domain?: string;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Options for waiting for an email.
|
|
62
|
+
*/
|
|
63
|
+
export interface WaitForEmailOptions {
|
|
64
|
+
/** Subject filter — only return emails whose subject contains this substring. */
|
|
65
|
+
subjectContains?: string;
|
|
66
|
+
/** Sender filter — only return emails whose From contains this substring. */
|
|
67
|
+
fromContains?: string;
|
|
68
|
+
/** Timeout in milliseconds. Default 60_000 (60s). */
|
|
69
|
+
timeoutMs?: number;
|
|
70
|
+
/** Poll interval in milliseconds. Default 3_000 (3s). */
|
|
71
|
+
pollIntervalMs?: number;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* The interface that every temp-mail provider adapter must implement.
|
|
75
|
+
*/
|
|
76
|
+
export interface TempMailProvider {
|
|
77
|
+
/** Unique provider name (e.g. "mail.tm"). */
|
|
78
|
+
name: string;
|
|
79
|
+
/** Human-readable description. */
|
|
80
|
+
description: string;
|
|
81
|
+
/** Whether this provider requires an API key / token. */
|
|
82
|
+
requiresApiKey: boolean;
|
|
83
|
+
/** Get the list of available domains. */
|
|
84
|
+
getDomains(): Promise<string[]>;
|
|
85
|
+
/** Create (or claim) a temporary mailbox. */
|
|
86
|
+
createMailbox(params: CreateMailboxParams): Promise<TempMailbox>;
|
|
87
|
+
/** Get the list of messages for a mailbox. */
|
|
88
|
+
getMessages(mailbox: TempMailbox): Promise<EmailMessage[]>;
|
|
89
|
+
/** Get a single message by ID (full content). */
|
|
90
|
+
getMessage(mailbox: TempMailbox, messageId: string): Promise<EmailMessage>;
|
|
91
|
+
/** Delete a mailbox (if supported). */
|
|
92
|
+
deleteMailbox?(mailbox: TempMailbox): Promise<void>;
|
|
93
|
+
/** Wait for at least one email matching the options. Returns the first match. */
|
|
94
|
+
waitForEmail(mailbox: TempMailbox, options?: WaitForEmailOptions): Promise<EmailMessage>;
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=types.d.ts.map
|