@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,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Auto-registration result — pure API, no browser needed.
|
|
3
|
+
*/
|
|
4
|
+
export interface AutoRegisterResult {
|
|
5
|
+
/** The API key / token to use with the provider. */
|
|
6
|
+
apiKey: string;
|
|
7
|
+
/** The provider name ("maildrop" or "mail.cx"). */
|
|
8
|
+
provider: string;
|
|
9
|
+
/** The email address used for registration (if applicable). */
|
|
10
|
+
email: string;
|
|
11
|
+
/** ISO timestamp of registration. */
|
|
12
|
+
registeredAt: string;
|
|
13
|
+
/** Provider-specific metadata (e.g. private key for maildrop). */
|
|
14
|
+
metadata?: Record<string, string>;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* MailDrop uses RSA Public-Key authentication.
|
|
18
|
+
*
|
|
19
|
+
* Registration flow (all pure HTTP + Node.js crypto):
|
|
20
|
+
* 1. Generate RSA 2048 keypair (RSASSA-PKCS1-v1_5, SHA-256)
|
|
21
|
+
* 2. POST /api/register.php { username, pubkey, auth_type: "pubkey" }
|
|
22
|
+
* 3. Sign timestamp-username to create a passcode
|
|
23
|
+
* 4. POST /api/login.php { username, pubkey: passcode } → sets session cookie
|
|
24
|
+
* 5. GET /account (with session cookie) or POST /api/create_api_key.php → get API key
|
|
25
|
+
*
|
|
26
|
+
* All crypto is done with Node's built-in `crypto` module — no browser needed.
|
|
27
|
+
*/
|
|
28
|
+
export declare function autoRegisterMailDrop(options?: {
|
|
29
|
+
username?: string;
|
|
30
|
+
timeoutMs?: number;
|
|
31
|
+
}): Promise<AutoRegisterResult>;
|
|
32
|
+
export declare function autoRegisterMailCx(options?: {
|
|
33
|
+
tokenName?: string;
|
|
34
|
+
timeoutMs?: number;
|
|
35
|
+
}): Promise<AutoRegisterResult>;
|
|
36
|
+
/**
|
|
37
|
+
* Auto-register on a provider and obtain an API key/token.
|
|
38
|
+
* Dispatches to the appropriate registration function based on provider name.
|
|
39
|
+
*/
|
|
40
|
+
export declare function autoRegister(provider: "maildrop" | "mail.cx", options?: {
|
|
41
|
+
username?: string;
|
|
42
|
+
tokenName?: string;
|
|
43
|
+
timeoutMs?: number;
|
|
44
|
+
}): Promise<AutoRegisterResult>;
|
|
45
|
+
//# sourceMappingURL=auto-register.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto-register.d.ts","sourceRoot":"","sources":["../../src/providers/auto-register.ts"],"names":[],"mappings":"AAOA;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,oDAAoD;IACpD,MAAM,EAAE,MAAM,CAAC;IACf,mDAAmD;IACnD,QAAQ,EAAE,MAAM,CAAC;IACjB,+DAA+D;IAC/D,KAAK,EAAE,MAAM,CAAC;IACd,qCAAqC;IACrC,YAAY,EAAE,MAAM,CAAC;IACrB,kEAAkE;IAClE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC;AAID;;;;;;;;;;;GAWG;AACH,wBAAsB,oBAAoB,CAAC,OAAO,CAAC,EAAE;IACnD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAmJ9B;AAmBD,wBAAsB,kBAAkB,CAAC,OAAO,CAAC,EAAE;IACjD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAmG9B;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAChC,QAAQ,EAAE,UAAU,GAAG,SAAS,EAChC,OAAO,CAAC,EAAE;IACR,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GACA,OAAO,CAAC,kBAAkB,CAAC,CAW7B"}
|
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
import { generateKeyPairSync, createSign, } from "node:crypto";
|
|
2
|
+
import { sleep, randomString, stripHtml } from "../utils.js";
|
|
3
|
+
// ─── MailDrop auto-registration ────────────────────────────────────────────
|
|
4
|
+
/**
|
|
5
|
+
* MailDrop uses RSA Public-Key authentication.
|
|
6
|
+
*
|
|
7
|
+
* Registration flow (all pure HTTP + Node.js crypto):
|
|
8
|
+
* 1. Generate RSA 2048 keypair (RSASSA-PKCS1-v1_5, SHA-256)
|
|
9
|
+
* 2. POST /api/register.php { username, pubkey, auth_type: "pubkey" }
|
|
10
|
+
* 3. Sign timestamp-username to create a passcode
|
|
11
|
+
* 4. POST /api/login.php { username, pubkey: passcode } → sets session cookie
|
|
12
|
+
* 5. GET /account (with session cookie) or POST /api/create_api_key.php → get API key
|
|
13
|
+
*
|
|
14
|
+
* All crypto is done with Node's built-in `crypto` module — no browser needed.
|
|
15
|
+
*/
|
|
16
|
+
export async function autoRegisterMailDrop(options) {
|
|
17
|
+
const username = options?.username ?? `tmp_${randomString(10)}`;
|
|
18
|
+
const timeoutMs = options?.timeoutMs ?? 60_000;
|
|
19
|
+
const deadline = Date.now() + timeoutMs;
|
|
20
|
+
const base = "https://maildrop.cx";
|
|
21
|
+
// Step 1: Generate RSA 2048 keypair
|
|
22
|
+
// Store as KeyObject for signing, and export to base64 DER for API upload
|
|
23
|
+
const { publicKey, privateKey } = generateKeyPairSync("rsa", {
|
|
24
|
+
modulusLength: 2048,
|
|
25
|
+
publicKeyEncoding: {
|
|
26
|
+
type: "spki",
|
|
27
|
+
format: "der",
|
|
28
|
+
},
|
|
29
|
+
privateKeyEncoding: {
|
|
30
|
+
type: "pkcs8",
|
|
31
|
+
format: "der",
|
|
32
|
+
},
|
|
33
|
+
});
|
|
34
|
+
// Convert to base64 (matching the browser's exportKey("spki") → base64)
|
|
35
|
+
const publicKeyBase64 = Buffer.from(publicKey).toString("base64");
|
|
36
|
+
const privateKeyBase64 = Buffer.from(privateKey).toString("base64");
|
|
37
|
+
// Re-import private key as KeyObject for signing
|
|
38
|
+
const privKeyObj = await import("node:crypto").then((m) => m.createPrivateKey({
|
|
39
|
+
key: Buffer.from(privateKeyBase64, "base64"),
|
|
40
|
+
format: "der",
|
|
41
|
+
type: "pkcs8",
|
|
42
|
+
}));
|
|
43
|
+
// Step 2: Register
|
|
44
|
+
const regRes = await fetch(`${base}/api/register.php`, {
|
|
45
|
+
method: "POST",
|
|
46
|
+
headers: {
|
|
47
|
+
"Content-Type": "application/json",
|
|
48
|
+
Origin: base,
|
|
49
|
+
Referer: `${base}/app`,
|
|
50
|
+
},
|
|
51
|
+
body: JSON.stringify({
|
|
52
|
+
username,
|
|
53
|
+
pubkey: publicKeyBase64,
|
|
54
|
+
auth_type: "pubkey",
|
|
55
|
+
}),
|
|
56
|
+
});
|
|
57
|
+
const regData = await regRes.json().catch(() => ({}));
|
|
58
|
+
if (!regData.success) {
|
|
59
|
+
throw new Error(`MailDrop registration failed: ${regData.error || regRes.statusText}`);
|
|
60
|
+
}
|
|
61
|
+
// Step 3: Generate passcode (sign timestamp-username with RSA-SHA256)
|
|
62
|
+
const timestamp = Math.floor(Date.now() / 1000);
|
|
63
|
+
const dataToSign = `${timestamp}-${username}`;
|
|
64
|
+
const signer = createSign("RSA-SHA256");
|
|
65
|
+
signer.update(dataToSign);
|
|
66
|
+
signer.end();
|
|
67
|
+
const signature = signer.sign(privKeyObj);
|
|
68
|
+
const signatureBase64 = signature.toString("base64");
|
|
69
|
+
const dataToSignBase64 = Buffer.from(dataToSign).toString("base64");
|
|
70
|
+
const passcode = `${signatureBase64}&&${dataToSignBase64}`;
|
|
71
|
+
// Step 4: Login (get session cookie)
|
|
72
|
+
const loginRes = await fetch(`${base}/api/login.php`, {
|
|
73
|
+
method: "POST",
|
|
74
|
+
headers: {
|
|
75
|
+
"Content-Type": "application/json",
|
|
76
|
+
Origin: base,
|
|
77
|
+
Referer: `${base}/app`,
|
|
78
|
+
},
|
|
79
|
+
body: JSON.stringify({ username, pubkey: passcode }),
|
|
80
|
+
});
|
|
81
|
+
const loginData = await loginRes.json().catch(() => ({}));
|
|
82
|
+
if (!loginData.success) {
|
|
83
|
+
throw new Error(`MailDrop login failed: ${loginData.error || loginRes.statusText}`);
|
|
84
|
+
}
|
|
85
|
+
// Extract session cookie from Set-Cookie header
|
|
86
|
+
const setCookie = loginRes.headers.get("set-cookie") || "";
|
|
87
|
+
const cookies = setCookie
|
|
88
|
+
.split(",")
|
|
89
|
+
.map((c) => c.trim().split(";")[0])
|
|
90
|
+
.filter(Boolean)
|
|
91
|
+
.join("; ");
|
|
92
|
+
if (Date.now() >= deadline)
|
|
93
|
+
throw new Error("MailDrop registration timed out");
|
|
94
|
+
// Step 5: Create an API key via /api/account/keys.php
|
|
95
|
+
const commonHeaders = {
|
|
96
|
+
Cookie: cookies,
|
|
97
|
+
"Content-Type": "application/json",
|
|
98
|
+
Origin: base,
|
|
99
|
+
Referer: `${base}/account`,
|
|
100
|
+
};
|
|
101
|
+
// First, check if there are existing keys
|
|
102
|
+
const keysListRes = await fetch(`${base}/api/account/keys.php`, {
|
|
103
|
+
headers: commonHeaders,
|
|
104
|
+
});
|
|
105
|
+
const keysList = await keysListRes.json().catch(() => ({}));
|
|
106
|
+
let apiKey = null;
|
|
107
|
+
// Check if we already have a key
|
|
108
|
+
if (keysList.keys && keysList.keys.length > 0) {
|
|
109
|
+
apiKey = keysList.keys[0].api_key;
|
|
110
|
+
}
|
|
111
|
+
// If no existing key, create one
|
|
112
|
+
if (!apiKey) {
|
|
113
|
+
const createKeyRes = await fetch(`${base}/api/account/keys.php`, {
|
|
114
|
+
method: "POST",
|
|
115
|
+
headers: commonHeaders,
|
|
116
|
+
body: JSON.stringify({ action: "create" }),
|
|
117
|
+
});
|
|
118
|
+
const createKeyData = await createKeyRes.json().catch(() => ({}));
|
|
119
|
+
if (createKeyData.api_key) {
|
|
120
|
+
apiKey = createKeyData.api_key;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
if (!apiKey) {
|
|
124
|
+
throw new Error("MailDrop registration succeeded but could not obtain API key. " +
|
|
125
|
+
"You can try logging in manually at https://maildrop.cx/app to get your API key.");
|
|
126
|
+
}
|
|
127
|
+
return {
|
|
128
|
+
apiKey,
|
|
129
|
+
provider: "maildrop",
|
|
130
|
+
email: `${username}@maildrop.cc`,
|
|
131
|
+
registeredAt: new Date().toISOString(),
|
|
132
|
+
metadata: {
|
|
133
|
+
privateKey: privateKeyBase64,
|
|
134
|
+
username,
|
|
135
|
+
note: "Save the private key to re-login later. Store it securely.",
|
|
136
|
+
},
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
// ─── mail.cx auto-registration ─────────────────────────────────────────────
|
|
140
|
+
/**
|
|
141
|
+
* mail.cx uses a magic-link sign-in flow.
|
|
142
|
+
*
|
|
143
|
+
* Registration flow (all pure HTTP, no browser needed):
|
|
144
|
+
* 1. Create a temp mailbox via mail.tm (no key needed)
|
|
145
|
+
* 2. POST https://mail.cx/v1/auth/magic-link/request { email } → sends magic link
|
|
146
|
+
* 3. Poll mail.tm for the magic link email, extract the token
|
|
147
|
+
* 4. POST https://mail.cx/v1/auth/magic-link/verify { token } → returns API token directly
|
|
148
|
+
*
|
|
149
|
+
* The verify endpoint returns the API token (tm_live_...) in the response body —
|
|
150
|
+
* no need to create a separate token or use session cookies.
|
|
151
|
+
*/
|
|
152
|
+
import { MailTmProvider } from "./mail-tm.js";
|
|
153
|
+
export async function autoRegisterMailCx(options) {
|
|
154
|
+
const tokenName = options?.tokenName ?? "tempmail-mcp";
|
|
155
|
+
const timeoutMs = options?.timeoutMs ?? 120_000;
|
|
156
|
+
const deadline = Date.now() + timeoutMs;
|
|
157
|
+
// Step 1: Create a temp mailbox via mail.tm
|
|
158
|
+
const mailTm = new MailTmProvider();
|
|
159
|
+
const mailbox = await mailTm.createMailbox({});
|
|
160
|
+
const email = mailbox.address;
|
|
161
|
+
// Step 2: Request magic link from mail.cx
|
|
162
|
+
const magicRes = await fetch("https://mail.cx/v1/auth/magic-link/request", {
|
|
163
|
+
method: "POST",
|
|
164
|
+
headers: { "Content-Type": "application/json" },
|
|
165
|
+
body: JSON.stringify({ email }),
|
|
166
|
+
});
|
|
167
|
+
if (!magicRes.ok) {
|
|
168
|
+
const text = await magicRes.text().catch(() => "");
|
|
169
|
+
throw new Error(`mail.cx magic link request failed: ${magicRes.status} ${text}`);
|
|
170
|
+
}
|
|
171
|
+
const magicData = await magicRes.json().catch(() => ({}));
|
|
172
|
+
// mail.cx should return some kind of request_id or just { success: true }
|
|
173
|
+
// Step 3: Poll mail.tm for the magic link email
|
|
174
|
+
let magicLink = "";
|
|
175
|
+
const startWait = Date.now();
|
|
176
|
+
while (Date.now() - startWait < 90_000 && Date.now() < deadline) {
|
|
177
|
+
const messages = await mailTm.getMessages(mailbox);
|
|
178
|
+
if (messages.length > 0) {
|
|
179
|
+
const full = await mailTm.getMessage(mailbox, messages[0].id);
|
|
180
|
+
const body = full.bodyText || (full.bodyHtml ? stripHtml(full.bodyHtml) : "") || "";
|
|
181
|
+
// Look for mail.cx magic link URL
|
|
182
|
+
const match = body.match(/https:\/\/mail\.cx\/magic[^\s"'<>\\]+/i);
|
|
183
|
+
if (match) {
|
|
184
|
+
magicLink = match[0];
|
|
185
|
+
break;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
await sleep(3_000);
|
|
189
|
+
}
|
|
190
|
+
if (!magicLink) {
|
|
191
|
+
throw new Error("Timed out waiting for mail.cx magic link email");
|
|
192
|
+
}
|
|
193
|
+
// Step 4: Extract the token from the magic link URL
|
|
194
|
+
const tokenMatch = magicLink.match(/token=([a-f0-9]+)/i);
|
|
195
|
+
if (!tokenMatch) {
|
|
196
|
+
throw new Error(`Could not extract token from magic link URL: ${magicLink}`);
|
|
197
|
+
}
|
|
198
|
+
const magicToken = tokenMatch[1];
|
|
199
|
+
// Step 5: Verify the magic link token — this returns the API token directly
|
|
200
|
+
const verifyRes = await fetch("https://mail.cx/v1/auth/magic-link/verify", {
|
|
201
|
+
method: "POST",
|
|
202
|
+
headers: { "Content-Type": "application/json" },
|
|
203
|
+
body: JSON.stringify({ token: magicToken }),
|
|
204
|
+
});
|
|
205
|
+
if (!verifyRes.ok) {
|
|
206
|
+
const text = await verifyRes.text().catch(() => "");
|
|
207
|
+
throw new Error(`mail.cx magic link verification failed: ${verifyRes.status} ${text}`);
|
|
208
|
+
}
|
|
209
|
+
const verifyData = await verifyRes.json().catch(() => ({}));
|
|
210
|
+
let apiToken = null;
|
|
211
|
+
if (verifyData.token) {
|
|
212
|
+
apiToken = verifyData.token;
|
|
213
|
+
}
|
|
214
|
+
else if (verifyData.data?.token) {
|
|
215
|
+
apiToken = verifyData.data.token;
|
|
216
|
+
}
|
|
217
|
+
else if (verifyData.api_token) {
|
|
218
|
+
apiToken = verifyData.api_token;
|
|
219
|
+
}
|
|
220
|
+
if (!apiToken) {
|
|
221
|
+
throw new Error("mail.cx magic link verification succeeded but no API token in response. " +
|
|
222
|
+
"Response: " + JSON.stringify(verifyData));
|
|
223
|
+
}
|
|
224
|
+
return {
|
|
225
|
+
apiKey: apiToken,
|
|
226
|
+
provider: "mail.cx",
|
|
227
|
+
email,
|
|
228
|
+
registeredAt: new Date().toISOString(),
|
|
229
|
+
metadata: {
|
|
230
|
+
tempMailbox: mailbox.address,
|
|
231
|
+
note: "The temp mailbox was used only to receive the magic link.",
|
|
232
|
+
},
|
|
233
|
+
};
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Auto-register on a provider and obtain an API key/token.
|
|
237
|
+
* Dispatches to the appropriate registration function based on provider name.
|
|
238
|
+
*/
|
|
239
|
+
export async function autoRegister(provider, options) {
|
|
240
|
+
switch (provider) {
|
|
241
|
+
case "maildrop":
|
|
242
|
+
return autoRegisterMailDrop(options);
|
|
243
|
+
case "mail.cx":
|
|
244
|
+
return autoRegisterMailCx(options);
|
|
245
|
+
default:
|
|
246
|
+
throw new Error(`Auto-registration not supported for provider "${provider}". Supported: maildrop, mail.cx`);
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
//# sourceMappingURL=auto-register.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto-register.js","sourceRoot":"","sources":["../../src/providers/auto-register.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { TempMailbox, EmailMessage, CreateMailboxParams } from "../types.js";
|
|
2
|
+
import { BaseProvider } from "../base-provider.js";
|
|
3
|
+
/**
|
|
4
|
+
* Catchmail provider — free, no auth required for public endpoints.
|
|
5
|
+
* API docs: https://catchmail.io/docs
|
|
6
|
+
* Rate limit: 1 req/s per IP (anonymous).
|
|
7
|
+
* Custom domains supported via MX records.
|
|
8
|
+
*/
|
|
9
|
+
export declare class CatchmailProvider extends BaseProvider {
|
|
10
|
+
readonly name = "catchmail";
|
|
11
|
+
readonly description = "Free temporary email via catchmail.io. No API key required. Supports custom domains via MX records.";
|
|
12
|
+
readonly requiresApiKey = false;
|
|
13
|
+
private baseUrl;
|
|
14
|
+
getDomains(): Promise<string[]>;
|
|
15
|
+
createMailbox(params: CreateMailboxParams): Promise<TempMailbox>;
|
|
16
|
+
getMessages(mailbox: TempMailbox): Promise<EmailMessage[]>;
|
|
17
|
+
getMessage(mailbox: TempMailbox, messageId: string): Promise<EmailMessage>;
|
|
18
|
+
deleteMailbox(mailbox: TempMailbox): Promise<void>;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=catchmail.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catchmail.d.ts","sourceRoot":"","sources":["../../src/providers/catchmail.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;;;;;GAKG;AACH,qBAAa,iBAAkB,SAAQ,YAAY;IACjD,QAAQ,CAAC,IAAI,eAAe;IAC5B,QAAQ,CAAC,WAAW,yGACoF;IACxG,QAAQ,CAAC,cAAc,SAAS;IAEhC,OAAO,CAAC,OAAO,CAA8B;IAEvC,UAAU,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAK/B,aAAa,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,WAAW,CAAC;IAahE,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IA2B1D,UAAU,CACd,OAAO,EAAE,WAAW,EACpB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,YAAY,CAAC;IAyClB,aAAa,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;CAWzD"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { BaseProvider } from "../base-provider.js";
|
|
2
|
+
import { randomUsername } from "../utils.js";
|
|
3
|
+
/**
|
|
4
|
+
* Catchmail provider — free, no auth required for public endpoints.
|
|
5
|
+
* API docs: https://catchmail.io/docs
|
|
6
|
+
* Rate limit: 1 req/s per IP (anonymous).
|
|
7
|
+
* Custom domains supported via MX records.
|
|
8
|
+
*/
|
|
9
|
+
export class CatchmailProvider extends BaseProvider {
|
|
10
|
+
name = "catchmail";
|
|
11
|
+
description = "Free temporary email via catchmail.io. No API key required. Supports custom domains via MX records.";
|
|
12
|
+
requiresApiKey = false;
|
|
13
|
+
baseUrl = "https://api.catchmail.io";
|
|
14
|
+
async getDomains() {
|
|
15
|
+
// Catchmail uses a single public domain + any custom domain with MX setup
|
|
16
|
+
return ["catchmail.io"];
|
|
17
|
+
}
|
|
18
|
+
async createMailbox(params) {
|
|
19
|
+
const username = params.username || randomUsername();
|
|
20
|
+
const domain = params.domain || "catchmail.io";
|
|
21
|
+
const address = `${username}@${domain}`;
|
|
22
|
+
// Catchmail doesn't require account creation — any address works.
|
|
23
|
+
return {
|
|
24
|
+
address,
|
|
25
|
+
provider: this.name,
|
|
26
|
+
createdAt: new Date().toISOString(),
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
async getMessages(mailbox) {
|
|
30
|
+
const url = new URL(`${this.baseUrl}/api/v1/mailbox`);
|
|
31
|
+
url.searchParams.set("address", mailbox.address);
|
|
32
|
+
const res = await fetch(url);
|
|
33
|
+
if (!res.ok) {
|
|
34
|
+
const text = await res.text().catch(() => "");
|
|
35
|
+
throw new Error(`Catchmail API error ${res.status}: ${text || res.statusText}`);
|
|
36
|
+
}
|
|
37
|
+
const data = (await res.json());
|
|
38
|
+
return (data.messages ?? []).map((m) => ({
|
|
39
|
+
id: m.id,
|
|
40
|
+
from: m.from,
|
|
41
|
+
subject: m.subject,
|
|
42
|
+
date: m.date,
|
|
43
|
+
}));
|
|
44
|
+
}
|
|
45
|
+
async getMessage(mailbox, messageId) {
|
|
46
|
+
const url = new URL(`${this.baseUrl}/api/v1/message/${messageId}`);
|
|
47
|
+
url.searchParams.set("mailbox", mailbox.address);
|
|
48
|
+
const res = await fetch(url);
|
|
49
|
+
if (!res.ok) {
|
|
50
|
+
const text = await res.text().catch(() => "");
|
|
51
|
+
throw new Error(`Catchmail API error ${res.status}: ${text || res.statusText}`);
|
|
52
|
+
}
|
|
53
|
+
const m = (await res.json());
|
|
54
|
+
return {
|
|
55
|
+
id: m.id,
|
|
56
|
+
from: m.from,
|
|
57
|
+
subject: m.subject,
|
|
58
|
+
date: m.date,
|
|
59
|
+
bodyText: m.body?.text,
|
|
60
|
+
bodyHtml: m.body?.html,
|
|
61
|
+
attachments: m.attachments?.map((a) => ({
|
|
62
|
+
filename: a.filename,
|
|
63
|
+
contentType: a.content_type,
|
|
64
|
+
size: a.size,
|
|
65
|
+
downloadUrl: a.download_url,
|
|
66
|
+
})),
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
async deleteMailbox(mailbox) {
|
|
70
|
+
// Delete all messages in the mailbox
|
|
71
|
+
const messages = await this.getMessages(mailbox);
|
|
72
|
+
for (const msg of messages) {
|
|
73
|
+
const url = new URL(`${this.baseUrl}/api/v1/message/${msg.id}`);
|
|
74
|
+
url.searchParams.set("mailbox", mailbox.address);
|
|
75
|
+
await fetch(url, { method: "DELETE" });
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=catchmail.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catchmail.js","sourceRoot":"","sources":["../../src/providers/catchmail.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { TempMailbox, EmailMessage, CreateMailboxParams } from "../types.js";
|
|
2
|
+
import { BaseProvider } from "../base-provider.js";
|
|
3
|
+
/**
|
|
4
|
+
* Guerrilla Mail provider — free, session-based.
|
|
5
|
+
* API docs: https://www.guerrillamail.com/GuerrillaMailAPI.html
|
|
6
|
+
* Uses PHPSESSID cookie for session management.
|
|
7
|
+
* Emails expire after 60 minutes.
|
|
8
|
+
*/
|
|
9
|
+
export declare class GuerrillaMailProvider extends BaseProvider {
|
|
10
|
+
readonly name = "guerrillamail";
|
|
11
|
+
readonly description = "Free temporary email via Guerrilla Mail. Session-based, 60 min expiry. No API key required.";
|
|
12
|
+
readonly requiresApiKey = false;
|
|
13
|
+
private baseUrl;
|
|
14
|
+
private api;
|
|
15
|
+
getDomains(): Promise<string[]>;
|
|
16
|
+
createMailbox(params: CreateMailboxParams): Promise<TempMailbox>;
|
|
17
|
+
getMessages(mailbox: TempMailbox): Promise<EmailMessage[]>;
|
|
18
|
+
getMessage(mailbox: TempMailbox, messageId: string): Promise<EmailMessage>;
|
|
19
|
+
deleteMailbox(mailbox: TempMailbox): Promise<void>;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=guerrillamail.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guerrillamail.d.ts","sourceRoot":"","sources":["../../src/providers/guerrillamail.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;;;;;GAKG;AACH,qBAAa,qBAAsB,SAAQ,YAAY;IACrD,QAAQ,CAAC,IAAI,mBAAmB;IAChC,QAAQ,CAAC,WAAW,iGAC4E;IAChG,QAAQ,CAAC,cAAc,SAAS;IAEhC,OAAO,CAAC,OAAO,CAA4C;YAE7C,GAAG;IAuBX,UAAU,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAe/B,aAAa,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,WAAW,CAAC;IAmChE,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IA0B1D,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,114 @@
|
|
|
1
|
+
import { BaseProvider } from "../base-provider.js";
|
|
2
|
+
import { randomUsername } from "../utils.js";
|
|
3
|
+
/**
|
|
4
|
+
* Guerrilla Mail provider — free, session-based.
|
|
5
|
+
* API docs: https://www.guerrillamail.com/GuerrillaMailAPI.html
|
|
6
|
+
* Uses PHPSESSID cookie for session management.
|
|
7
|
+
* Emails expire after 60 minutes.
|
|
8
|
+
*/
|
|
9
|
+
export class GuerrillaMailProvider extends BaseProvider {
|
|
10
|
+
name = "guerrillamail";
|
|
11
|
+
description = "Free temporary email via Guerrilla Mail. Session-based, 60 min expiry. No API key required.";
|
|
12
|
+
requiresApiKey = false;
|
|
13
|
+
baseUrl = "https://api.guerrillamail.com/ajax.php";
|
|
14
|
+
async api(params, method = "GET", sessionId) {
|
|
15
|
+
const url = new URL(this.baseUrl);
|
|
16
|
+
for (const [k, v] of Object.entries(params)) {
|
|
17
|
+
url.searchParams.set(k, v);
|
|
18
|
+
}
|
|
19
|
+
const headers = {};
|
|
20
|
+
if (sessionId) {
|
|
21
|
+
headers["Cookie"] = `PHPSESSID=${sessionId}`;
|
|
22
|
+
}
|
|
23
|
+
const res = await fetch(url, { method, headers });
|
|
24
|
+
if (!res.ok) {
|
|
25
|
+
const text = await res.text().catch(() => "");
|
|
26
|
+
throw new Error(`Guerrilla Mail API error ${res.status}: ${text || res.statusText}`);
|
|
27
|
+
}
|
|
28
|
+
return res.json();
|
|
29
|
+
}
|
|
30
|
+
async getDomains() {
|
|
31
|
+
// Guerrilla Mail has fixed domains
|
|
32
|
+
return [
|
|
33
|
+
"guerrillamail.com",
|
|
34
|
+
"guerrillamailblock.com",
|
|
35
|
+
"grr.la",
|
|
36
|
+
"sharklasers.com",
|
|
37
|
+
"guerrillamail.net",
|
|
38
|
+
"guerrillamail.org",
|
|
39
|
+
"guerrillamail.biz",
|
|
40
|
+
"spam4.me",
|
|
41
|
+
"pokemail.net",
|
|
42
|
+
];
|
|
43
|
+
}
|
|
44
|
+
async createMailbox(params) {
|
|
45
|
+
// Initialize session
|
|
46
|
+
const init = await this.api({
|
|
47
|
+
f: "get_email_address",
|
|
48
|
+
lang: "en",
|
|
49
|
+
});
|
|
50
|
+
const sessionId = init.sid_token;
|
|
51
|
+
let address = init.email_addr;
|
|
52
|
+
// If user wants a custom username, set it
|
|
53
|
+
if (params.username || params.domain) {
|
|
54
|
+
const username = params.username || randomUsername();
|
|
55
|
+
const domains = await this.getDomains();
|
|
56
|
+
const domain = params.domain && domains.includes(params.domain)
|
|
57
|
+
? params.domain
|
|
58
|
+
: "guerrillamailblock.com";
|
|
59
|
+
const setResult = await this.api({ f: "set_email_user", email_user: username, lang: "en" }, "POST", sessionId);
|
|
60
|
+
address = setResult.email_addr;
|
|
61
|
+
}
|
|
62
|
+
return {
|
|
63
|
+
address,
|
|
64
|
+
provider: this.name,
|
|
65
|
+
sessionId,
|
|
66
|
+
createdAt: new Date().toISOString(),
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
async getMessages(mailbox) {
|
|
70
|
+
if (!mailbox.sessionId) {
|
|
71
|
+
throw new Error("No session ID for Guerrilla Mail mailbox");
|
|
72
|
+
}
|
|
73
|
+
const data = await this.api({ f: "check_email", seq: "0" }, "GET", mailbox.sessionId);
|
|
74
|
+
return (data.list ?? []).map((m) => ({
|
|
75
|
+
id: m.mail_id,
|
|
76
|
+
from: m.mail_from,
|
|
77
|
+
subject: decodeHtmlEntities(m.mail_subject),
|
|
78
|
+
bodyText: decodeHtmlEntities(m.mail_excerpt),
|
|
79
|
+
date: m.mail_date || new Date(m.mail_timestamp * 1000).toISOString(),
|
|
80
|
+
}));
|
|
81
|
+
}
|
|
82
|
+
async getMessage(mailbox, messageId) {
|
|
83
|
+
if (!mailbox.sessionId) {
|
|
84
|
+
throw new Error("No session ID for Guerrilla Mail mailbox");
|
|
85
|
+
}
|
|
86
|
+
const m = await this.api({ f: "fetch_email", email_id: messageId }, "GET", mailbox.sessionId);
|
|
87
|
+
return {
|
|
88
|
+
id: m.mail_id,
|
|
89
|
+
from: m.mail_from,
|
|
90
|
+
subject: decodeHtmlEntities(m.mail_subject),
|
|
91
|
+
bodyText: decodeHtmlEntities(m.mail_body),
|
|
92
|
+
bodyHtml: m.mail_body,
|
|
93
|
+
date: m.mail_date || new Date(m.mail_timestamp * 1000).toISOString(),
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
async deleteMailbox(mailbox) {
|
|
97
|
+
if (!mailbox.sessionId)
|
|
98
|
+
return;
|
|
99
|
+
await this.api({ f: "forget_me", email_addr: mailbox.address }, "POST", mailbox.sessionId);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Decode HTML entities (Guerrilla Mail escapes subject/excerpt).
|
|
104
|
+
*/
|
|
105
|
+
function decodeHtmlEntities(text) {
|
|
106
|
+
return text
|
|
107
|
+
.replace(/&/g, "&")
|
|
108
|
+
.replace(/</g, "<")
|
|
109
|
+
.replace(/>/g, ">")
|
|
110
|
+
.replace(/"/g, '"')
|
|
111
|
+
.replace(/'/g, "'")
|
|
112
|
+
.replace(/ /g, " ");
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=guerrillamail.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guerrillamail.js","sourceRoot":"","sources":["../../src/providers/guerrillamail.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { TempMailbox, EmailMessage, CreateMailboxParams } from "../types.js";
|
|
2
|
+
import { BaseProvider } from "../base-provider.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 declare class MailCxProvider extends BaseProvider {
|
|
12
|
+
readonly name = "mail.cx";
|
|
13
|
+
readonly description = "Temporary email via mail.cx. Free tier: 500 req/day. Supports long-poll. Requires API token.";
|
|
14
|
+
readonly requiresApiKey = true;
|
|
15
|
+
private baseUrl;
|
|
16
|
+
private apiToken;
|
|
17
|
+
constructor(apiToken?: string);
|
|
18
|
+
private getHeaders;
|
|
19
|
+
private api;
|
|
20
|
+
getDomains(): Promise<string[]>;
|
|
21
|
+
createMailbox(params: CreateMailboxParams): Promise<TempMailbox>;
|
|
22
|
+
getMessages(mailbox: TempMailbox): Promise<EmailMessage[]>;
|
|
23
|
+
getMessage(_mailbox: TempMailbox, messageId: string): Promise<EmailMessage>;
|
|
24
|
+
/**
|
|
25
|
+
* Override waitForEmail to use mail.cx long-poll (more efficient).
|
|
26
|
+
*/
|
|
27
|
+
waitForEmail(mailbox: TempMailbox, options?: import("../types.js").WaitForEmailOptions): Promise<EmailMessage>;
|
|
28
|
+
deleteMailbox(mailbox: TempMailbox): Promise<void>;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=mail-cx.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mail-cx.d.ts","sourceRoot":"","sources":["../../src/providers/mail-cx.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,cAAe,SAAQ,YAAY;IAC9C,QAAQ,CAAC,IAAI,aAAa;IAC1B,QAAQ,CAAC,WAAW,kGAC6E;IACjG,QAAQ,CAAC,cAAc,QAAQ;IAE/B,OAAO,CAAC,OAAO,CAA4B;IAC3C,OAAO,CAAC,QAAQ,CAAuB;gBAE3B,QAAQ,CAAC,EAAE,MAAM;IAK7B,OAAO,CAAC,UAAU;YAQJ,GAAG;IA6BX,UAAU,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAQ/B,aAAa,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,WAAW,CAAC;IAmBhE,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAqB1D,UAAU,CACd,QAAQ,EAAE,WAAW,EACrB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,YAAY,CAAC;IA8BxB;;OAEG;IACG,YAAY,CAChB,OAAO,EAAE,WAAW,EACpB,OAAO,CAAC,EAAE,OAAO,aAAa,EAAE,mBAAmB,GAClD,OAAO,CAAC,YAAY,CAAC;IA6DlB,aAAa,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;CAIzD"}
|