@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.
Files changed (54) hide show
  1. package/GUIDE.md +286 -0
  2. package/GUIDE.zh-CN.md +287 -0
  3. package/LICENSE +21 -0
  4. package/README.md +308 -0
  5. package/README.zh-CN.md +308 -0
  6. package/dist/base-provider.d.ts +21 -0
  7. package/dist/base-provider.d.ts.map +1 -0
  8. package/dist/base-provider.js +36 -0
  9. package/dist/base-provider.js.map +1 -0
  10. package/dist/index.d.ts +3 -0
  11. package/dist/index.d.ts.map +1 -0
  12. package/dist/index.js +519 -0
  13. package/dist/index.js.map +1 -0
  14. package/dist/provider-manager.d.ts +36 -0
  15. package/dist/provider-manager.d.ts.map +1 -0
  16. package/dist/provider-manager.js +67 -0
  17. package/dist/provider-manager.js.map +1 -0
  18. package/dist/providers/auto-register.d.ts +45 -0
  19. package/dist/providers/auto-register.d.ts.map +1 -0
  20. package/dist/providers/auto-register.js +249 -0
  21. package/dist/providers/auto-register.js.map +1 -0
  22. package/dist/providers/catchmail.d.ts +20 -0
  23. package/dist/providers/catchmail.d.ts.map +1 -0
  24. package/dist/providers/catchmail.js +79 -0
  25. package/dist/providers/catchmail.js.map +1 -0
  26. package/dist/providers/guerrillamail.d.ts +21 -0
  27. package/dist/providers/guerrillamail.d.ts.map +1 -0
  28. package/dist/providers/guerrillamail.js +114 -0
  29. package/dist/providers/guerrillamail.js.map +1 -0
  30. package/dist/providers/mail-cx.d.ts +30 -0
  31. package/dist/providers/mail-cx.d.ts.map +1 -0
  32. package/dist/providers/mail-cx.js +154 -0
  33. package/dist/providers/mail-cx.js.map +1 -0
  34. package/dist/providers/mail-tm.d.ts +16 -0
  35. package/dist/providers/mail-tm.d.ts.map +1 -0
  36. package/dist/providers/mail-tm.js +109 -0
  37. package/dist/providers/mail-tm.js.map +1 -0
  38. package/dist/providers/maildrop.d.ts +22 -0
  39. package/dist/providers/maildrop.d.ts.map +1 -0
  40. package/dist/providers/maildrop.js +88 -0
  41. package/dist/providers/maildrop.js.map +1 -0
  42. package/dist/providers/one-secmail.d.ts +22 -0
  43. package/dist/providers/one-secmail.d.ts.map +1 -0
  44. package/dist/providers/one-secmail.js +98 -0
  45. package/dist/providers/one-secmail.js.map +1 -0
  46. package/dist/types.d.ts +96 -0
  47. package/dist/types.d.ts.map +1 -0
  48. package/dist/types.js +5 -0
  49. package/dist/types.js.map +1 -0
  50. package/dist/utils.d.ts +33 -0
  51. package/dist/utils.d.ts.map +1 -0
  52. package/dist/utils.js +100 -0
  53. package/dist/utils.js.map +1 -0
  54. package/package.json +56 -0
package/dist/index.js ADDED
@@ -0,0 +1,519 @@
1
+ #!/usr/bin/env node
2
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
3
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
4
+ import { z } from "zod";
5
+ import { ProviderManager, autoRegister, } from "./provider-manager.js";
6
+ import { MailDropProvider } from "./providers/maildrop.js";
7
+ import { MailCxProvider } from "./providers/mail-cx.js";
8
+ import { extractVerificationCode, stripHtml, } from "./utils.js";
9
+ // ─── In-memory mailbox store ──────────────────────────────────────────────
10
+ // Keeps track of created mailboxes by address for later lookups.
11
+ const mailboxStore = new Map();
12
+ function serializeMailbox(mb) {
13
+ return {
14
+ address: mb.address,
15
+ provider: mb.provider,
16
+ createdAt: mb.createdAt,
17
+ password: mb.password,
18
+ token: mb.token,
19
+ sessionId: mb.sessionId,
20
+ };
21
+ }
22
+ // ─── Initialize providers ─────────────────────────────────────────────────
23
+ const manager = new ProviderManager();
24
+ manager.init({
25
+ maildropApiKey: process.env.MAILDROP_API_KEY,
26
+ mailCxApiToken: process.env.MAILCX_API_TOKEN,
27
+ });
28
+ // ─── Create MCP Server ────────────────────────────────────────────────────
29
+ const server = new McpServer({
30
+ name: "tempmail-mcp",
31
+ version: "0.0.1",
32
+ });
33
+ // ═════════════════════════════════════════════════════════════════════════
34
+ // Tool: list_providers
35
+ // ═════════════════════════════════════════════════════════════════════════
36
+ server.tool("list_providers", "List all available temporary email providers and their capabilities.", {}, async () => {
37
+ const providers = manager.listProviders();
38
+ const lines = providers.map((p) => {
39
+ return `- **${p.name}**: ${p.description} (API key required: ${p.requiresApiKey ? "Yes" : "No"})`;
40
+ });
41
+ return {
42
+ content: [
43
+ {
44
+ type: "text",
45
+ text: `Available temporary email providers:\n\n` +
46
+ lines.join("\n") +
47
+ `\n\nUse the \`create_mailbox\` tool with one of these provider names.`,
48
+ },
49
+ ],
50
+ };
51
+ });
52
+ // ═════════════════════════════════════════════════════════════════════════
53
+ // Tool: create_mailbox
54
+ // ═════════════════════════════════════════════════════════════════════════
55
+ server.tool("create_mailbox", "Create a new temporary email mailbox. Returns the email address and account details.", {
56
+ provider: z
57
+ .string()
58
+ .optional()
59
+ .describe("Provider name (e.g. 'mail.tm', 'guerrillamail', '1secmail', 'catchmail', 'maildrop', 'mail.cx'). Defaults to 'mail.tm'."),
60
+ username: z
61
+ .string()
62
+ .optional()
63
+ .describe("Preferred username (local part of the email). If omitted, a random one is generated."),
64
+ domain: z
65
+ .string()
66
+ .optional()
67
+ .describe("Preferred domain. If omitted, a random one is chosen from the provider's available domains."),
68
+ }, async ({ provider: providerName, username, domain }) => {
69
+ const provider = manager.getProviderOrThrow(providerName ?? "mail.tm");
70
+ const mailbox = await provider.createMailbox({ username, domain });
71
+ mailboxStore.set(mailbox.address, mailbox);
72
+ return {
73
+ content: [
74
+ {
75
+ type: "text",
76
+ text: JSON.stringify({
77
+ success: true,
78
+ address: mailbox.address,
79
+ provider: mailbox.provider,
80
+ createdAt: mailbox.createdAt,
81
+ message: `Mailbox created. Use 'get_messages' to check for incoming emails, or 'wait_for_email' to block until one arrives.`,
82
+ }, null, 2),
83
+ },
84
+ ],
85
+ };
86
+ });
87
+ // ═════════════════════════════════════════════════════════════════════════
88
+ // Tool: get_messages
89
+ // ═════════════════════════════════════════════════════════════════════════
90
+ server.tool("get_messages", "Get the list of received emails for a temporary mailbox. Returns message summaries (ID, from, subject, date).", {
91
+ address: z
92
+ .string()
93
+ .describe("The temporary email address to check for messages."),
94
+ }, async ({ address }) => {
95
+ const mailbox = mailboxStore.get(address);
96
+ if (!mailbox) {
97
+ return {
98
+ content: [
99
+ {
100
+ type: "text",
101
+ text: `Error: No mailbox found for address "${address}". Use 'create_mailbox' first, or ensure the address was created by this server.`,
102
+ },
103
+ ],
104
+ isError: true,
105
+ };
106
+ }
107
+ const provider = manager.getProviderOrThrow(mailbox.provider);
108
+ const messages = await provider.getMessages(mailbox);
109
+ return {
110
+ content: [
111
+ {
112
+ type: "text",
113
+ text: JSON.stringify({
114
+ address,
115
+ count: messages.length,
116
+ messages: messages.map((m) => ({
117
+ id: m.id,
118
+ from: m.from,
119
+ fromName: m.fromName,
120
+ subject: m.subject,
121
+ date: m.date,
122
+ })),
123
+ }, null, 2),
124
+ },
125
+ ],
126
+ };
127
+ });
128
+ // ═════════════════════════════════════════════════════════════════════════
129
+ // Tool: get_message
130
+ // ═════════════════════════════════════════════════════════════════════════
131
+ server.tool("get_message", "Get the full content of a specific email message (body text, HTML, attachments metadata).", {
132
+ address: z
133
+ .string()
134
+ .describe("The temporary email address that received the message."),
135
+ messageId: z
136
+ .string()
137
+ .describe("The message ID (from 'get_messages' result)."),
138
+ }, async ({ address, messageId }) => {
139
+ const mailbox = mailboxStore.get(address);
140
+ if (!mailbox) {
141
+ return {
142
+ content: [
143
+ {
144
+ type: "text",
145
+ text: `Error: No mailbox found for address "${address}".`,
146
+ },
147
+ ],
148
+ isError: true,
149
+ };
150
+ }
151
+ const provider = manager.getProviderOrThrow(mailbox.provider);
152
+ const msg = await provider.getMessage(mailbox, messageId);
153
+ return {
154
+ content: [
155
+ {
156
+ type: "text",
157
+ text: JSON.stringify({
158
+ id: msg.id,
159
+ from: msg.from,
160
+ fromName: msg.fromName,
161
+ subject: msg.subject,
162
+ date: msg.date,
163
+ bodyText: msg.bodyText,
164
+ bodyHtml: msg.bodyHtml,
165
+ bodyTextStripped: msg.bodyHtml
166
+ ? stripHtml(msg.bodyHtml)
167
+ : undefined,
168
+ attachments: msg.attachments,
169
+ }, null, 2),
170
+ },
171
+ ],
172
+ };
173
+ });
174
+ // ═════════════════════════════════════════════════════════════════════════
175
+ // Tool: wait_for_email
176
+ // ═════════════════════════════════════════════════════════════════════════
177
+ server.tool("wait_for_email", "Block (poll/long-poll) until a matching email arrives in the mailbox. Returns the first matching message. Useful for waiting for verification emails during signups.", {
178
+ address: z
179
+ .string()
180
+ .describe("The temporary email address to wait for emails on."),
181
+ subjectContains: z
182
+ .string()
183
+ .optional()
184
+ .describe("Only return emails whose subject contains this substring."),
185
+ fromContains: z
186
+ .string()
187
+ .optional()
188
+ .describe("Only return emails whose sender (from) contains this substring."),
189
+ timeoutMs: z
190
+ .number()
191
+ .optional()
192
+ .describe("Timeout in milliseconds. Default 60000 (60s)."),
193
+ pollIntervalMs: z
194
+ .number()
195
+ .optional()
196
+ .describe("Poll interval in milliseconds. Default 3000 (3s)."),
197
+ }, async ({ address, subjectContains, fromContains, timeoutMs, pollIntervalMs }) => {
198
+ const mailbox = mailboxStore.get(address);
199
+ if (!mailbox) {
200
+ return {
201
+ content: [
202
+ {
203
+ type: "text",
204
+ text: `Error: No mailbox found for address "${address}".`,
205
+ },
206
+ ],
207
+ isError: true,
208
+ };
209
+ }
210
+ const provider = manager.getProviderOrThrow(mailbox.provider);
211
+ try {
212
+ const msg = await provider.waitForEmail(mailbox, {
213
+ subjectContains,
214
+ fromContains,
215
+ timeoutMs,
216
+ pollIntervalMs,
217
+ });
218
+ return {
219
+ content: [
220
+ {
221
+ type: "text",
222
+ text: JSON.stringify({
223
+ found: true,
224
+ message: {
225
+ id: msg.id,
226
+ from: msg.from,
227
+ fromName: msg.fromName,
228
+ subject: msg.subject,
229
+ date: msg.date,
230
+ bodyText: msg.bodyText,
231
+ bodyHtml: msg.bodyHtml,
232
+ bodyTextStripped: msg.bodyHtml
233
+ ? stripHtml(msg.bodyHtml)
234
+ : undefined,
235
+ attachments: msg.attachments,
236
+ },
237
+ }, null, 2),
238
+ },
239
+ ],
240
+ };
241
+ }
242
+ catch (err) {
243
+ return {
244
+ content: [
245
+ {
246
+ type: "text",
247
+ text: `Timed out or error: ${err instanceof Error ? err.message : String(err)}`,
248
+ },
249
+ ],
250
+ isError: true,
251
+ };
252
+ }
253
+ });
254
+ // ═════════════════════════════════════════════════════════════════════════
255
+ // Tool: get_verification_code
256
+ // ═════════════════════════════════════════════════════════════════════════
257
+ server.tool("get_verification_code", "Wait for a verification/confirmation email and automatically extract the verification code from it. Returns the extracted code. This is a convenience tool that combines 'wait_for_email' + code extraction.", {
258
+ address: z
259
+ .string()
260
+ .describe("The temporary email address to check."),
261
+ subjectContains: z
262
+ .string()
263
+ .optional()
264
+ .describe("Filter: only look at emails whose subject contains this (e.g. 'verification', 'confirm', 'code')."),
265
+ fromContains: z
266
+ .string()
267
+ .optional()
268
+ .describe("Filter: only look at emails from senders containing this substring."),
269
+ timeoutMs: z
270
+ .number()
271
+ .optional()
272
+ .describe("Timeout in milliseconds. Default 60000 (60s)."),
273
+ }, async ({ address, subjectContains, fromContains, timeoutMs }) => {
274
+ const mailbox = mailboxStore.get(address);
275
+ if (!mailbox) {
276
+ return {
277
+ content: [
278
+ {
279
+ type: "text",
280
+ text: `Error: No mailbox found for address "${address}".`,
281
+ },
282
+ ],
283
+ isError: true,
284
+ };
285
+ }
286
+ const provider = manager.getProviderOrThrow(mailbox.provider);
287
+ try {
288
+ const msg = await provider.waitForEmail(mailbox, {
289
+ subjectContains,
290
+ fromContains,
291
+ timeoutMs,
292
+ });
293
+ const code = extractVerificationCode(msg);
294
+ return {
295
+ content: [
296
+ {
297
+ type: "text",
298
+ text: JSON.stringify({
299
+ success: true,
300
+ code: code,
301
+ messageId: msg.id,
302
+ from: msg.from,
303
+ subject: msg.subject,
304
+ date: msg.date,
305
+ bodyPreview: (msg.bodyText ?? stripHtml(msg.bodyHtml ?? ""))
306
+ .slice(0, 500),
307
+ }, null, 2),
308
+ },
309
+ ],
310
+ };
311
+ }
312
+ catch (err) {
313
+ return {
314
+ content: [
315
+ {
316
+ type: "text",
317
+ text: `Failed to get verification code: ${err instanceof Error ? err.message : String(err)}`,
318
+ },
319
+ ],
320
+ isError: true,
321
+ };
322
+ }
323
+ });
324
+ // ═════════════════════════════════════════════════════════════════════════
325
+ // Tool: delete_mailbox
326
+ // ═════════════════════════════════════════════════════════════════════════
327
+ server.tool("delete_mailbox", "Delete a temporary mailbox and all its messages (if supported by the provider).", {
328
+ address: z
329
+ .string()
330
+ .describe("The temporary email address to delete."),
331
+ }, async ({ address }) => {
332
+ const mailbox = mailboxStore.get(address);
333
+ if (!mailbox) {
334
+ return {
335
+ content: [
336
+ {
337
+ type: "text",
338
+ text: `Error: No mailbox found for address "${address}".`,
339
+ },
340
+ ],
341
+ isError: true,
342
+ };
343
+ }
344
+ const provider = manager.getProviderOrThrow(mailbox.provider);
345
+ if (provider.deleteMailbox) {
346
+ try {
347
+ await provider.deleteMailbox(mailbox);
348
+ mailboxStore.delete(address);
349
+ return {
350
+ content: [
351
+ {
352
+ type: "text",
353
+ text: JSON.stringify({ success: true, address, deleted: true }),
354
+ },
355
+ ],
356
+ };
357
+ }
358
+ catch (err) {
359
+ return {
360
+ content: [
361
+ {
362
+ type: "text",
363
+ text: `Error deleting mailbox: ${err instanceof Error ? err.message : String(err)}`,
364
+ },
365
+ ],
366
+ isError: true,
367
+ };
368
+ }
369
+ }
370
+ // Provider doesn't support deletion — just remove from store
371
+ mailboxStore.delete(address);
372
+ return {
373
+ content: [
374
+ {
375
+ type: "text",
376
+ text: JSON.stringify({
377
+ success: true,
378
+ address,
379
+ deleted: false,
380
+ note: "This provider does not support explicit mailbox deletion. Mailbox auto-expires.",
381
+ }),
382
+ },
383
+ ],
384
+ };
385
+ });
386
+ // ═════════════════════════════════════════════════════════════════════════
387
+ // Tool: list_mailboxes
388
+ // ═════════════════════════════════════════════════════════════════════════
389
+ server.tool("list_mailboxes", "List all temporary mailboxes created in this session.", {}, async () => {
390
+ const mailboxes = Array.from(mailboxStore.values()).map(serializeMailbox);
391
+ return {
392
+ content: [
393
+ {
394
+ type: "text",
395
+ text: JSON.stringify({ count: mailboxes.length, mailboxes }, null, 2),
396
+ },
397
+ ],
398
+ };
399
+ });
400
+ // ═════════════════════════════════════════════════════════════════════════
401
+ // Tool: get_domains
402
+ // ═════════════════════════════════════════════════════════════════════════
403
+ server.tool("get_domains", "Get the list of available email domains for a given provider.", {
404
+ provider: z
405
+ .string()
406
+ .optional()
407
+ .describe("Provider name. Defaults to 'mail.tm'."),
408
+ }, async ({ provider: providerName }) => {
409
+ const provider = manager.getProviderOrThrow(providerName ?? "mail.tm");
410
+ const domains = await provider.getDomains();
411
+ return {
412
+ content: [
413
+ {
414
+ type: "text",
415
+ text: JSON.stringify({ provider: provider.name, domains }, null, 2),
416
+ },
417
+ ],
418
+ };
419
+ });
420
+ // ═════════════════════════════════════════════════════════════════════════
421
+ // Tool: auto_register
422
+ // ═════════════════════════════════════════════════════════════════════════
423
+ server.tool("auto_register", "Automatically register an account and obtain an API key/token for a provider. " +
424
+ "Uses pure HTTP API calls — no browser automation needed. " +
425
+ "Supported providers: 'maildrop' and 'mail.cx'. " +
426
+ "The resulting API key/token is automatically registered in the current session " +
427
+ "and also returned for the user to save.", {
428
+ provider: z
429
+ .enum(["maildrop", "mail.cx"])
430
+ .describe("The provider to auto-register. " +
431
+ "'maildrop': uses RSA key generation + HTTP API to register and obtain an md_ API key. " +
432
+ "'mail.cx': uses magic-link sign-in flow (creates a temp mailbox via mail.tm, receives the magic link, follows it, and creates an API token)."),
433
+ tokenName: z
434
+ .string()
435
+ .optional()
436
+ .describe("Name for the created API token (mail.cx only). Default: 'tempmail-mcp'."),
437
+ username: z
438
+ .string()
439
+ .optional()
440
+ .describe("Username for the account (maildrop only). If omitted, a random one is generated."),
441
+ timeoutMs: z
442
+ .number()
443
+ .optional()
444
+ .describe("Overall timeout in milliseconds. Default: 120000 (2 minutes)."),
445
+ }, async ({ provider, tokenName, username, timeoutMs }) => {
446
+ try {
447
+ const result = await autoRegister(provider, {
448
+ tokenName: tokenName ?? "tempmail-mcp",
449
+ username,
450
+ timeoutMs: timeoutMs ?? 120_000,
451
+ });
452
+ // Dynamically register the provider with the obtained key
453
+ if (provider === "maildrop") {
454
+ manager.registerProvider("maildrop", new MailDropProvider(result.apiKey));
455
+ process.env.MAILDROP_API_KEY = result.apiKey;
456
+ }
457
+ else if (provider === "mail.cx") {
458
+ manager.registerProvider("mail.cx", new MailCxProvider(result.apiKey));
459
+ process.env.MAILCX_API_TOKEN = result.apiKey;
460
+ }
461
+ // Build a user-friendly summary
462
+ const summary = {
463
+ success: true,
464
+ provider: result.provider,
465
+ apiKey: result.apiKey,
466
+ email: result.email,
467
+ registeredAt: result.registeredAt,
468
+ };
469
+ if (result.metadata) {
470
+ summary.metadata = result.metadata;
471
+ }
472
+ if (provider === "maildrop") {
473
+ summary.instructions =
474
+ "API key is now active for this session. To make it permanent, set:\n" +
475
+ ` MAILDROP_API_KEY=${result.apiKey}\n` +
476
+ (result.metadata?.privateKey
477
+ ? ` MAILDROP_PRIVATE_KEY=${result.metadata.privateKey}\n` +
478
+ " (Save the private key to re-login later if needed.)"
479
+ : "");
480
+ }
481
+ else {
482
+ summary.instructions =
483
+ "API token is now active for this session. To make it permanent, set:\n" +
484
+ ` MAILCX_API_TOKEN=${result.apiKey}`;
485
+ }
486
+ return {
487
+ content: [
488
+ {
489
+ type: "text",
490
+ text: JSON.stringify(summary, null, 2),
491
+ },
492
+ ],
493
+ };
494
+ }
495
+ catch (err) {
496
+ return {
497
+ content: [
498
+ {
499
+ type: "text",
500
+ text: `Auto-registration failed: ${err instanceof Error ? err.message : String(err)}`,
501
+ },
502
+ ],
503
+ isError: true,
504
+ };
505
+ }
506
+ });
507
+ // ═════════════════════════════════════════════════════════════════════════
508
+ // Start the server
509
+ // ═════════════════════════════════════════════════════════════════════════
510
+ async function main() {
511
+ const transport = new StdioServerTransport();
512
+ await server.connect(transport);
513
+ console.error("tempmail-mcp server started on stdio");
514
+ }
515
+ main().catch((err) => {
516
+ console.error("Fatal error:", err);
517
+ process.exit(1);
518
+ });
519
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import type { TempMailProvider } from "./types.js";
2
+ export { MailTmProvider } from "./providers/mail-tm.js";
3
+ export { GuerrillaMailProvider } from "./providers/guerrillamail.js";
4
+ export { OneSecMailProvider } from "./providers/one-secmail.js";
5
+ export { CatchmailProvider } from "./providers/catchmail.js";
6
+ export { MailDropProvider } from "./providers/maildrop.js";
7
+ export { MailCxProvider } from "./providers/mail-cx.js";
8
+ export { autoRegister, autoRegisterMailDrop, autoRegisterMailCx, } from "./providers/auto-register.js";
9
+ export type { AutoRegisterResult } from "./providers/auto-register.js";
10
+ export { BaseProvider } from "./base-provider.js";
11
+ export * from "./types.js";
12
+ export { extractVerificationCode, stripHtml } from "./utils.js";
13
+ /**
14
+ * Provider manager — creates and caches provider instances.
15
+ * Provider instances are singleton per provider name.
16
+ */
17
+ export declare class ProviderManager {
18
+ private providers;
19
+ /**
20
+ * Initialize providers based on available API keys.
21
+ * Providers without API keys are always available.
22
+ * Providers that need keys are only registered if the key is provided.
23
+ */
24
+ init(options?: {
25
+ maildropApiKey?: string;
26
+ mailCxApiToken?: string;
27
+ }): void;
28
+ /**
29
+ * Dynamically register a provider with an API key (e.g. after auto-registration).
30
+ */
31
+ registerProvider(name: string, provider: TempMailProvider): void;
32
+ getProvider(name: string): TempMailProvider | undefined;
33
+ getProviderOrThrow(name: string): TempMailProvider;
34
+ listProviders(): TempMailProvider[];
35
+ }
36
+ //# sourceMappingURL=provider-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-manager.d.ts","sourceRoot":"","sources":["../src/provider-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAQnD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EACL,YAAY,EACZ,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,8BAA8B,CAAC;AACtC,YAAY,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,uBAAuB,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEhE;;;GAGG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,SAAS,CAAuC;IAExD;;;;OAIG;IACH,IAAI,CAAC,OAAO,CAAC,EAAE;QACb,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,cAAc,CAAC,EAAE,MAAM,CAAC;KACzB,GAAG,IAAI;IAgBR;;OAEG;IACH,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,gBAAgB,GAAG,IAAI;IAIhE,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS;IAIvD,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB;IAelD,aAAa,IAAI,gBAAgB,EAAE;CAGpC"}
@@ -0,0 +1,67 @@
1
+ import { MailTmProvider } from "./providers/mail-tm.js";
2
+ import { GuerrillaMailProvider } from "./providers/guerrillamail.js";
3
+ import { OneSecMailProvider } from "./providers/one-secmail.js";
4
+ import { CatchmailProvider } from "./providers/catchmail.js";
5
+ import { MailDropProvider } from "./providers/maildrop.js";
6
+ import { MailCxProvider } from "./providers/mail-cx.js";
7
+ export { MailTmProvider } from "./providers/mail-tm.js";
8
+ export { GuerrillaMailProvider } from "./providers/guerrillamail.js";
9
+ export { OneSecMailProvider } from "./providers/one-secmail.js";
10
+ export { CatchmailProvider } from "./providers/catchmail.js";
11
+ export { MailDropProvider } from "./providers/maildrop.js";
12
+ export { MailCxProvider } from "./providers/mail-cx.js";
13
+ export { autoRegister, autoRegisterMailDrop, autoRegisterMailCx, } from "./providers/auto-register.js";
14
+ export { BaseProvider } from "./base-provider.js";
15
+ export * from "./types.js";
16
+ export { extractVerificationCode, stripHtml } from "./utils.js";
17
+ /**
18
+ * Provider manager — creates and caches provider instances.
19
+ * Provider instances are singleton per provider name.
20
+ */
21
+ export class ProviderManager {
22
+ providers = new Map();
23
+ /**
24
+ * Initialize providers based on available API keys.
25
+ * Providers without API keys are always available.
26
+ * Providers that need keys are only registered if the key is provided.
27
+ */
28
+ init(options) {
29
+ // Always-available providers (no API key needed)
30
+ this.providers.set("mail.tm", new MailTmProvider());
31
+ this.providers.set("guerrillamail", new GuerrillaMailProvider());
32
+ this.providers.set("1secmail", new OneSecMailProvider());
33
+ this.providers.set("catchmail", new CatchmailProvider());
34
+ // Optional providers (require API key)
35
+ if (options?.maildropApiKey) {
36
+ this.providers.set("maildrop", new MailDropProvider(options.maildropApiKey));
37
+ }
38
+ if (options?.mailCxApiToken) {
39
+ this.providers.set("mail.cx", new MailCxProvider(options.mailCxApiToken));
40
+ }
41
+ }
42
+ /**
43
+ * Dynamically register a provider with an API key (e.g. after auto-registration).
44
+ */
45
+ registerProvider(name, provider) {
46
+ this.providers.set(name, provider);
47
+ }
48
+ getProvider(name) {
49
+ return this.providers.get(name);
50
+ }
51
+ getProviderOrThrow(name) {
52
+ const provider = this.providers.get(name);
53
+ if (!provider) {
54
+ throw new Error(`Provider "${name}" not available. ` +
55
+ `Available providers: ${this.listProviders()
56
+ .map((p) => p.name)
57
+ .join(", ")}. ` +
58
+ `If this provider requires an API key, set the corresponding environment variable ` +
59
+ `or use the 'auto_register' tool.`);
60
+ }
61
+ return provider;
62
+ }
63
+ listProviders() {
64
+ return Array.from(this.providers.values());
65
+ }
66
+ }
67
+ //# sourceMappingURL=provider-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-manager.js","sourceRoot":"","sources":["../src/provider-manager.ts"],"names":[],"mappings":"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"}