tempmail-sdk 1.1.3 → 1.1.4
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/README.md +43 -38
- package/demo/poll-emails.ts +290 -28
- package/dist/config.d.ts +16 -0
- package/dist/config.js +4 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.js +30 -15
- package/dist/providers/chatgpt-org-uk.js +120 -54
- package/dist/providers/dropmail.js +134 -3
- package/dist/providers/linshi-email.d.ts +1 -1
- package/dist/providers/linshi-email.js +18 -7
- package/dist/providers/linshi-token.d.ts +25 -0
- package/dist/providers/linshi-token.js +69 -0
- package/dist/providers/mail-tm.js +39 -22
- package/dist/providers/smail-pw.d.ts +9 -0
- package/dist/providers/smail-pw.js +356 -0
- package/dist/types.d.ts +6 -1
- package/dist/types.js +1 -1
- package/package.json +1 -1
- package/src/config.ts +16 -0
- package/src/index.ts +29 -13
- package/src/providers/chatgpt-org-uk.ts +131 -53
- package/src/providers/dropmail.ts +161 -2
- package/src/providers/linshi-email.ts +23 -7
- package/src/providers/linshi-token.ts +86 -0
- package/src/providers/mail-tm.ts +39 -21
- package/src/providers/smail-pw.ts +382 -0
- package/src/types.ts +6 -1
- package/test/example.ts +174 -3
- package/dist/providers/tempmail-la.d.ts +0 -15
- package/dist/providers/tempmail-la.js +0 -90
- package/src/providers/tempmail-la.ts +0 -100
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { InternalEmailInfo, Email } from '../types';
|
|
2
|
-
/**
|
|
3
|
-
* 创建临时邮箱
|
|
4
|
-
* API: POST /api/mail/create
|
|
5
|
-
* 返回: { code: 0, data: { mailId, address, type, startAt, endAt } }
|
|
6
|
-
*/
|
|
7
|
-
export declare function generateEmail(): Promise<InternalEmailInfo>;
|
|
8
|
-
/**
|
|
9
|
-
* 获取邮件列表
|
|
10
|
-
* API: POST /api/mail/box
|
|
11
|
-
* 请求: { address, cursor }
|
|
12
|
-
* 返回: { code: 0, data: { rows: [...], cursor, hasMore } }
|
|
13
|
-
* 每封邮件: { mailboxId, messageFrom, subject, createdAt, html, attachments, read }
|
|
14
|
-
*/
|
|
15
|
-
export declare function getEmails(email: string): Promise<Email[]>;
|
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.generateEmail = generateEmail;
|
|
4
|
-
exports.getEmails = getEmails;
|
|
5
|
-
const normalize_1 = require("../normalize");
|
|
6
|
-
const retry_1 = require("../retry");
|
|
7
|
-
const CHANNEL = 'tempmail-la';
|
|
8
|
-
const BASE_URL = 'https://tempmail.la/api';
|
|
9
|
-
const DEFAULT_HEADERS = {
|
|
10
|
-
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36 Edg/144.0.0.0',
|
|
11
|
-
'Accept': 'application/json, text/plain, */*',
|
|
12
|
-
'Content-Type': 'application/json',
|
|
13
|
-
'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
|
|
14
|
-
'cache-control': 'no-cache',
|
|
15
|
-
'dnt': '1',
|
|
16
|
-
'locale': 'zh-CN',
|
|
17
|
-
'origin': 'https://tempmail.la',
|
|
18
|
-
'platform': 'PC',
|
|
19
|
-
'pragma': 'no-cache',
|
|
20
|
-
'product': 'TEMP_MAIL',
|
|
21
|
-
'referer': 'https://tempmail.la/zh-CN/tempmail',
|
|
22
|
-
'sec-ch-ua': '"Not(A:Brand";v="8", "Chromium";v="144", "Microsoft Edge";v="144"',
|
|
23
|
-
'sec-ch-ua-mobile': '?0',
|
|
24
|
-
'sec-ch-ua-platform': '"Windows"',
|
|
25
|
-
'sec-fetch-dest': 'empty',
|
|
26
|
-
'sec-fetch-mode': 'cors',
|
|
27
|
-
'sec-fetch-site': 'same-origin',
|
|
28
|
-
};
|
|
29
|
-
/**
|
|
30
|
-
* 创建临时邮箱
|
|
31
|
-
* API: POST /api/mail/create
|
|
32
|
-
* 返回: { code: 0, data: { mailId, address, type, startAt, endAt } }
|
|
33
|
-
*/
|
|
34
|
-
async function generateEmail() {
|
|
35
|
-
const response = await (0, retry_1.fetchWithTimeout)(`${BASE_URL}/mail/create`, {
|
|
36
|
-
method: 'POST',
|
|
37
|
-
headers: DEFAULT_HEADERS,
|
|
38
|
-
body: JSON.stringify({ turnstile: '' }),
|
|
39
|
-
});
|
|
40
|
-
if (!response.ok) {
|
|
41
|
-
throw new Error(`Failed to generate email: ${response.status}`);
|
|
42
|
-
}
|
|
43
|
-
const data = await response.json();
|
|
44
|
-
if (data.code !== 0 || !data.data) {
|
|
45
|
-
throw new Error('Failed to generate email');
|
|
46
|
-
}
|
|
47
|
-
return {
|
|
48
|
-
channel: CHANNEL,
|
|
49
|
-
email: data.data.address,
|
|
50
|
-
expiresAt: data.data.endAt,
|
|
51
|
-
createdAt: data.data.startAt,
|
|
52
|
-
};
|
|
53
|
-
}
|
|
54
|
-
/**
|
|
55
|
-
* 获取邮件列表
|
|
56
|
-
* API: POST /api/mail/box
|
|
57
|
-
* 请求: { address, cursor }
|
|
58
|
-
* 返回: { code: 0, data: { rows: [...], cursor, hasMore } }
|
|
59
|
-
* 每封邮件: { mailboxId, messageFrom, subject, createdAt, html, attachments, read }
|
|
60
|
-
*/
|
|
61
|
-
async function getEmails(email) {
|
|
62
|
-
const allEmails = [];
|
|
63
|
-
let cursor = null;
|
|
64
|
-
let hasMore = true;
|
|
65
|
-
// 支持分页,循环获取所有邮件
|
|
66
|
-
while (hasMore) {
|
|
67
|
-
const response = await (0, retry_1.fetchWithTimeout)(`${BASE_URL}/mail/box`, {
|
|
68
|
-
method: 'POST',
|
|
69
|
-
headers: DEFAULT_HEADERS,
|
|
70
|
-
body: JSON.stringify({ address: email, cursor }),
|
|
71
|
-
});
|
|
72
|
-
if (!response.ok) {
|
|
73
|
-
throw new Error(`Failed to get emails: ${response.status}`);
|
|
74
|
-
}
|
|
75
|
-
const data = await response.json();
|
|
76
|
-
if (data.code !== 0 || !data.data) {
|
|
77
|
-
throw new Error('Failed to get emails');
|
|
78
|
-
}
|
|
79
|
-
const rows = data.data.rows || [];
|
|
80
|
-
allEmails.push(...rows);
|
|
81
|
-
if (data.data.hasMore && data.data.cursor) {
|
|
82
|
-
cursor = data.data.cursor;
|
|
83
|
-
}
|
|
84
|
-
else {
|
|
85
|
-
hasMore = false;
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
return allEmails.map((raw) => (0, normalize_1.normalizeEmail)(raw, email));
|
|
89
|
-
}
|
|
90
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcG1haWwtbGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHJvdmlkZXJzL3RlbXBtYWlsLWxhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBaUNBLHNDQXVCQztBQVNELDhCQWtDQztBQWxHRCw0Q0FBOEM7QUFDOUMsb0NBQTRDO0FBRTVDLE1BQU0sT0FBTyxHQUFZLGFBQWEsQ0FBQztBQUN2QyxNQUFNLFFBQVEsR0FBRyx5QkFBeUIsQ0FBQztBQUUzQyxNQUFNLGVBQWUsR0FBMkI7SUFDOUMsWUFBWSxFQUFFLCtIQUErSDtJQUM3SSxRQUFRLEVBQUUsbUNBQW1DO0lBQzdDLGNBQWMsRUFBRSxrQkFBa0I7SUFDbEMsaUJBQWlCLEVBQUUsaURBQWlEO0lBQ3BFLGVBQWUsRUFBRSxVQUFVO0lBQzNCLEtBQUssRUFBRSxHQUFHO0lBQ1YsUUFBUSxFQUFFLE9BQU87SUFDakIsUUFBUSxFQUFFLHFCQUFxQjtJQUMvQixVQUFVLEVBQUUsSUFBSTtJQUNoQixRQUFRLEVBQUUsVUFBVTtJQUNwQixTQUFTLEVBQUUsV0FBVztJQUN0QixTQUFTLEVBQUUsb0NBQW9DO0lBQy9DLFdBQVcsRUFBRSxtRUFBbUU7SUFDaEYsa0JBQWtCLEVBQUUsSUFBSTtJQUN4QixvQkFBb0IsRUFBRSxXQUFXO0lBQ2pDLGdCQUFnQixFQUFFLE9BQU87SUFDekIsZ0JBQWdCLEVBQUUsTUFBTTtJQUN4QixnQkFBZ0IsRUFBRSxhQUFhO0NBQ2hDLENBQUM7QUFFRjs7OztHQUlHO0FBQ0ksS0FBSyxVQUFVLGFBQWE7SUFDakMsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFBLHdCQUFnQixFQUFDLEdBQUcsUUFBUSxjQUFjLEVBQUU7UUFDakUsTUFBTSxFQUFFLE1BQU07UUFDZCxPQUFPLEVBQUUsZUFBZTtRQUN4QixJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsQ0FBQztLQUN4QyxDQUFDLENBQUM7SUFFSCxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQUMsNkJBQTZCLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFRCxNQUFNLElBQUksR0FBRyxNQUFNLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUVuQyxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2xDLE1BQU0sSUFBSSxLQUFLLENBQUMsMEJBQTBCLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRUQsT0FBTztRQUNMLE9BQU8sRUFBRSxPQUFPO1FBQ2hCLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU87UUFDeEIsU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSztRQUMxQixTQUFTLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPO0tBQzdCLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0ksS0FBSyxVQUFVLFNBQVMsQ0FBQyxLQUFhO0lBQzNDLE1BQU0sU0FBUyxHQUFVLEVBQUUsQ0FBQztJQUM1QixJQUFJLE1BQU0sR0FBa0IsSUFBSSxDQUFDO0lBQ2pDLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQztJQUVuQixnQkFBZ0I7SUFDaEIsT0FBTyxPQUFPLEVBQUUsQ0FBQztRQUNmLE1BQU0sUUFBUSxHQUFhLE1BQU0sSUFBQSx3QkFBZ0IsRUFBQyxHQUFHLFFBQVEsV0FBVyxFQUFFO1lBQ3hFLE1BQU0sRUFBRSxNQUFNO1lBQ2QsT0FBTyxFQUFFLGVBQWU7WUFDeEIsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDO1NBQ2pELENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDakIsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDOUQsQ0FBQztRQUVELE1BQU0sSUFBSSxHQUFRLE1BQU0sUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1FBRXhDLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDbEMsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQzFDLENBQUM7UUFFRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7UUFDbEMsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO1FBRXhCLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUMxQyxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDNUIsQ0FBQzthQUFNLENBQUM7WUFDTixPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FBQyxJQUFBLDBCQUFjLEVBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDakUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEludGVybmFsRW1haWxJbmZvLCBFbWFpbCwgQ2hhbm5lbCB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IG5vcm1hbGl6ZUVtYWlsIH0gZnJvbSAnLi4vbm9ybWFsaXplJztcbmltcG9ydCB7IGZldGNoV2l0aFRpbWVvdXQgfSBmcm9tICcuLi9yZXRyeSc7XG5cbmNvbnN0IENIQU5ORUw6IENoYW5uZWwgPSAndGVtcG1haWwtbGEnO1xuY29uc3QgQkFTRV9VUkwgPSAnaHR0cHM6Ly90ZW1wbWFpbC5sYS9hcGknO1xuXG5jb25zdCBERUZBVUxUX0hFQURFUlM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICdVc2VyLUFnZW50JzogJ01vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjA7IFdpbjY0OyB4NjQpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8xNDQuMC4wLjAgU2FmYXJpLzUzNy4zNiBFZGcvMTQ0LjAuMC4wJyxcbiAgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyonLFxuICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAnYWNjZXB0LWxhbmd1YWdlJzogJ3poLUNOLHpoO3E9MC45LGVuO3E9MC44LGVuLUdCO3E9MC43LGVuLVVTO3E9MC42JyxcbiAgJ2NhY2hlLWNvbnRyb2wnOiAnbm8tY2FjaGUnLFxuICAnZG50JzogJzEnLFxuICAnbG9jYWxlJzogJ3poLUNOJyxcbiAgJ29yaWdpbic6ICdodHRwczovL3RlbXBtYWlsLmxhJyxcbiAgJ3BsYXRmb3JtJzogJ1BDJyxcbiAgJ3ByYWdtYSc6ICduby1jYWNoZScsXG4gICdwcm9kdWN0JzogJ1RFTVBfTUFJTCcsXG4gICdyZWZlcmVyJzogJ2h0dHBzOi8vdGVtcG1haWwubGEvemgtQ04vdGVtcG1haWwnLFxuICAnc2VjLWNoLXVhJzogJ1wiTm90KEE6QnJhbmRcIjt2PVwiOFwiLCBcIkNocm9taXVtXCI7dj1cIjE0NFwiLCBcIk1pY3Jvc29mdCBFZGdlXCI7dj1cIjE0NFwiJyxcbiAgJ3NlYy1jaC11YS1tb2JpbGUnOiAnPzAnLFxuICAnc2VjLWNoLXVhLXBsYXRmb3JtJzogJ1wiV2luZG93c1wiJyxcbiAgJ3NlYy1mZXRjaC1kZXN0JzogJ2VtcHR5JyxcbiAgJ3NlYy1mZXRjaC1tb2RlJzogJ2NvcnMnLFxuICAnc2VjLWZldGNoLXNpdGUnOiAnc2FtZS1vcmlnaW4nLFxufTtcblxuLyoqXG4gKiDliJvlu7rkuLTml7bpgq7nrrFcbiAqIEFQSTogUE9TVCAvYXBpL21haWwvY3JlYXRlXG4gKiDov5Tlm546IHsgY29kZTogMCwgZGF0YTogeyBtYWlsSWQsIGFkZHJlc3MsIHR5cGUsIHN0YXJ0QXQsIGVuZEF0IH0gfVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVFbWFpbCgpOiBQcm9taXNlPEludGVybmFsRW1haWxJbmZvPiB7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2hXaXRoVGltZW91dChgJHtCQVNFX1VSTH0vbWFpbC9jcmVhdGVgLCB7XG4gICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgaGVhZGVyczogREVGQVVMVF9IRUFERVJTLFxuICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgdHVybnN0aWxlOiAnJyB9KSxcbiAgfSk7XG5cbiAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGdlbmVyYXRlIGVtYWlsOiAke3Jlc3BvbnNlLnN0YXR1c31gKTtcbiAgfVxuXG4gIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG5cbiAgaWYgKGRhdGEuY29kZSAhPT0gMCB8fCAhZGF0YS5kYXRhKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gZ2VuZXJhdGUgZW1haWwnKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgY2hhbm5lbDogQ0hBTk5FTCxcbiAgICBlbWFpbDogZGF0YS5kYXRhLmFkZHJlc3MsXG4gICAgZXhwaXJlc0F0OiBkYXRhLmRhdGEuZW5kQXQsXG4gICAgY3JlYXRlZEF0OiBkYXRhLmRhdGEuc3RhcnRBdCxcbiAgfTtcbn1cblxuLyoqXG4gKiDojrflj5bpgq7ku7bliJfooahcbiAqIEFQSTogUE9TVCAvYXBpL21haWwvYm94XG4gKiDor7fmsYI6IHsgYWRkcmVzcywgY3Vyc29yIH1cbiAqIOi/lOWbnjogeyBjb2RlOiAwLCBkYXRhOiB7IHJvd3M6IFsuLi5dLCBjdXJzb3IsIGhhc01vcmUgfSB9XG4gKiDmr4/lsIHpgq7ku7Y6IHsgbWFpbGJveElkLCBtZXNzYWdlRnJvbSwgc3ViamVjdCwgY3JlYXRlZEF0LCBodG1sLCBhdHRhY2htZW50cywgcmVhZCB9XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRFbWFpbHMoZW1haWw6IHN0cmluZyk6IFByb21pc2U8RW1haWxbXT4ge1xuICBjb25zdCBhbGxFbWFpbHM6IGFueVtdID0gW107XG4gIGxldCBjdXJzb3I6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBsZXQgaGFzTW9yZSA9IHRydWU7XG5cbiAgLy8g5pSv5oyB5YiG6aG177yM5b6q546v6I635Y+W5omA5pyJ6YKu5Lu2XG4gIHdoaWxlIChoYXNNb3JlKSB7XG4gICAgY29uc3QgcmVzcG9uc2U6IFJlc3BvbnNlID0gYXdhaXQgZmV0Y2hXaXRoVGltZW91dChgJHtCQVNFX1VSTH0vbWFpbC9ib3hgLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGhlYWRlcnM6IERFRkFVTFRfSEVBREVSUyxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgYWRkcmVzczogZW1haWwsIGN1cnNvciB9KSxcbiAgICB9KTtcblxuICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGdldCBlbWFpbHM6ICR7cmVzcG9uc2Uuc3RhdHVzfWApO1xuICAgIH1cblxuICAgIGNvbnN0IGRhdGE6IGFueSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcblxuICAgIGlmIChkYXRhLmNvZGUgIT09IDAgfHwgIWRhdGEuZGF0YSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gZ2V0IGVtYWlscycpO1xuICAgIH1cblxuICAgIGNvbnN0IHJvd3MgPSBkYXRhLmRhdGEucm93cyB8fCBbXTtcbiAgICBhbGxFbWFpbHMucHVzaCguLi5yb3dzKTtcblxuICAgIGlmIChkYXRhLmRhdGEuaGFzTW9yZSAmJiBkYXRhLmRhdGEuY3Vyc29yKSB7XG4gICAgICBjdXJzb3IgPSBkYXRhLmRhdGEuY3Vyc29yO1xuICAgIH0gZWxzZSB7XG4gICAgICBoYXNNb3JlID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGFsbEVtYWlscy5tYXAoKHJhdzogYW55KSA9PiBub3JtYWxpemVFbWFpbChyYXcsIGVtYWlsKSk7XG59XG4iXX0=
|
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
import { InternalEmailInfo, Email, Channel } from '../types';
|
|
2
|
-
import { normalizeEmail } from '../normalize';
|
|
3
|
-
import { fetchWithTimeout } from '../retry';
|
|
4
|
-
|
|
5
|
-
const CHANNEL: Channel = 'tempmail-la';
|
|
6
|
-
const BASE_URL = 'https://tempmail.la/api';
|
|
7
|
-
|
|
8
|
-
const DEFAULT_HEADERS: Record<string, string> = {
|
|
9
|
-
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36 Edg/144.0.0.0',
|
|
10
|
-
'Accept': 'application/json, text/plain, */*',
|
|
11
|
-
'Content-Type': 'application/json',
|
|
12
|
-
'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
|
|
13
|
-
'cache-control': 'no-cache',
|
|
14
|
-
'dnt': '1',
|
|
15
|
-
'locale': 'zh-CN',
|
|
16
|
-
'origin': 'https://tempmail.la',
|
|
17
|
-
'platform': 'PC',
|
|
18
|
-
'pragma': 'no-cache',
|
|
19
|
-
'product': 'TEMP_MAIL',
|
|
20
|
-
'referer': 'https://tempmail.la/zh-CN/tempmail',
|
|
21
|
-
'sec-ch-ua': '"Not(A:Brand";v="8", "Chromium";v="144", "Microsoft Edge";v="144"',
|
|
22
|
-
'sec-ch-ua-mobile': '?0',
|
|
23
|
-
'sec-ch-ua-platform': '"Windows"',
|
|
24
|
-
'sec-fetch-dest': 'empty',
|
|
25
|
-
'sec-fetch-mode': 'cors',
|
|
26
|
-
'sec-fetch-site': 'same-origin',
|
|
27
|
-
};
|
|
28
|
-
|
|
29
|
-
/**
|
|
30
|
-
* 创建临时邮箱
|
|
31
|
-
* API: POST /api/mail/create
|
|
32
|
-
* 返回: { code: 0, data: { mailId, address, type, startAt, endAt } }
|
|
33
|
-
*/
|
|
34
|
-
export async function generateEmail(): Promise<InternalEmailInfo> {
|
|
35
|
-
const response = await fetchWithTimeout(`${BASE_URL}/mail/create`, {
|
|
36
|
-
method: 'POST',
|
|
37
|
-
headers: DEFAULT_HEADERS,
|
|
38
|
-
body: JSON.stringify({ turnstile: '' }),
|
|
39
|
-
});
|
|
40
|
-
|
|
41
|
-
if (!response.ok) {
|
|
42
|
-
throw new Error(`Failed to generate email: ${response.status}`);
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
const data = await response.json();
|
|
46
|
-
|
|
47
|
-
if (data.code !== 0 || !data.data) {
|
|
48
|
-
throw new Error('Failed to generate email');
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
return {
|
|
52
|
-
channel: CHANNEL,
|
|
53
|
-
email: data.data.address,
|
|
54
|
-
expiresAt: data.data.endAt,
|
|
55
|
-
createdAt: data.data.startAt,
|
|
56
|
-
};
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
/**
|
|
60
|
-
* 获取邮件列表
|
|
61
|
-
* API: POST /api/mail/box
|
|
62
|
-
* 请求: { address, cursor }
|
|
63
|
-
* 返回: { code: 0, data: { rows: [...], cursor, hasMore } }
|
|
64
|
-
* 每封邮件: { mailboxId, messageFrom, subject, createdAt, html, attachments, read }
|
|
65
|
-
*/
|
|
66
|
-
export async function getEmails(email: string): Promise<Email[]> {
|
|
67
|
-
const allEmails: any[] = [];
|
|
68
|
-
let cursor: string | null = null;
|
|
69
|
-
let hasMore = true;
|
|
70
|
-
|
|
71
|
-
// 支持分页,循环获取所有邮件
|
|
72
|
-
while (hasMore) {
|
|
73
|
-
const response: Response = await fetchWithTimeout(`${BASE_URL}/mail/box`, {
|
|
74
|
-
method: 'POST',
|
|
75
|
-
headers: DEFAULT_HEADERS,
|
|
76
|
-
body: JSON.stringify({ address: email, cursor }),
|
|
77
|
-
});
|
|
78
|
-
|
|
79
|
-
if (!response.ok) {
|
|
80
|
-
throw new Error(`Failed to get emails: ${response.status}`);
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
const data: any = await response.json();
|
|
84
|
-
|
|
85
|
-
if (data.code !== 0 || !data.data) {
|
|
86
|
-
throw new Error('Failed to get emails');
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
const rows = data.data.rows || [];
|
|
90
|
-
allEmails.push(...rows);
|
|
91
|
-
|
|
92
|
-
if (data.data.hasMore && data.data.cursor) {
|
|
93
|
-
cursor = data.data.cursor;
|
|
94
|
-
} else {
|
|
95
|
-
hasMore = false;
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
return allEmails.map((raw: any) => normalizeEmail(raw, email));
|
|
100
|
-
}
|