tempmail-sdk 1.2.0 → 1.2.2-dev

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.
@@ -0,0 +1,264 @@
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 = '10minute-one';
8
+ const SITE_ORIGIN = 'https://10minutemail.one';
9
+ const API_BASE = 'https://web.10minutemail.one/api/v1';
10
+ const JWT_RE = /^[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+$/;
11
+ const DEFAULT_PAGE_HEADERS = {
12
+ Accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
13
+ 'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8',
14
+ 'Cache-Control': 'no-cache',
15
+ Pragma: 'no-cache',
16
+ DNT: '1',
17
+ 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
18
+ };
19
+ function extractNuxtDataArray(html) {
20
+ const m = html.match(/<script[^>]*\bid="__NUXT_DATA__"[^>]*>([\s\S]*?)<\/script>/i);
21
+ if (!m)
22
+ throw new Error('10minute-one: __NUXT_DATA__ not found');
23
+ return JSON.parse(m[1].trim());
24
+ }
25
+ function resolveRef(arr, value, depth = 0) {
26
+ if (depth > 64)
27
+ throw new Error('10minute-one: resolveRef too deep');
28
+ if (value == null)
29
+ return value;
30
+ if (typeof value === 'number' && Number.isInteger(value) && value >= 0) {
31
+ if (value >= arr.length)
32
+ return undefined;
33
+ return resolveRef(arr, arr[value], depth + 1);
34
+ }
35
+ return value;
36
+ }
37
+ function parseMailServiceTokenFromPayload(arr) {
38
+ if (!Array.isArray(arr))
39
+ throw new Error('10minute-one: invalid __NUXT_DATA__');
40
+ for (let i = 0; i < Math.min(arr.length, 48); i++) {
41
+ const el = arr[i];
42
+ if (el && typeof el === 'object' && !Array.isArray(el) && 'mailServiceToken' in el) {
43
+ const t = resolveRef(arr, el.mailServiceToken);
44
+ if (typeof t === 'string' && JWT_RE.test(t))
45
+ return t;
46
+ }
47
+ }
48
+ for (const el of arr) {
49
+ if (el && typeof el === 'object' && !Array.isArray(el) && 'mailServiceToken' in el) {
50
+ const t = resolveRef(arr, el.mailServiceToken);
51
+ if (typeof t === 'string' && JWT_RE.test(t))
52
+ return t;
53
+ }
54
+ }
55
+ for (const el of arr) {
56
+ if (typeof el === 'string' && JWT_RE.test(el))
57
+ return el;
58
+ }
59
+ throw new Error('10minute-one: mailServiceToken not found');
60
+ }
61
+ function parseQuotedJsonArrayField(html, field) {
62
+ const key = `${field}:"`;
63
+ const start = html.indexOf(key);
64
+ if (start < 0)
65
+ return [];
66
+ const sliceStart = start + key.length;
67
+ if (html[sliceStart] !== '[')
68
+ return [];
69
+ let depth = 0;
70
+ let j = sliceStart;
71
+ for (; j < html.length; j++) {
72
+ const c = html[j];
73
+ if (c === '[')
74
+ depth++;
75
+ else if (c === ']') {
76
+ depth--;
77
+ if (depth === 0) {
78
+ j++;
79
+ break;
80
+ }
81
+ }
82
+ }
83
+ const raw = html.slice(sliceStart, j);
84
+ const unesc = raw.replace(/\\"/g, '"');
85
+ try {
86
+ const v = JSON.parse(unesc);
87
+ return Array.isArray(v) ? v.map(x => String(x)) : [];
88
+ }
89
+ catch {
90
+ return [];
91
+ }
92
+ }
93
+ function parseEmailDomains(html) {
94
+ const d = parseQuotedJsonArrayField(html, 'emailDomains');
95
+ return d.filter(Boolean);
96
+ }
97
+ function parseBlockedUsernames(html) {
98
+ const list = parseQuotedJsonArrayField(html, 'blockedUsernames');
99
+ return new Set(list.map(s => s.toLowerCase()));
100
+ }
101
+ function randomRequestId() {
102
+ const a = new Uint8Array(16);
103
+ crypto.getRandomValues(a);
104
+ return [...a].map(b => b.toString(16).padStart(2, '0')).join('');
105
+ }
106
+ function b64DecodeUtf8(b64) {
107
+ if (typeof Buffer !== 'undefined') {
108
+ return Buffer.from(b64, 'base64').toString('utf8');
109
+ }
110
+ const bin = atob(b64);
111
+ const bytes = new Uint8Array(bin.length);
112
+ for (let i = 0; i < bin.length; i++)
113
+ bytes[i] = bin.charCodeAt(i);
114
+ return new TextDecoder('utf-8').decode(bytes);
115
+ }
116
+ function b64UrlPayload(jwt) {
117
+ const parts = jwt.split('.');
118
+ if (parts.length < 2)
119
+ return null;
120
+ let b = parts[1].replace(/-/g, '+').replace(/_/g, '/');
121
+ const pad = b.length % 4 ? '='.repeat(4 - (b.length % 4)) : '';
122
+ b += pad;
123
+ try {
124
+ return JSON.parse(b64DecodeUtf8(b));
125
+ }
126
+ catch {
127
+ return null;
128
+ }
129
+ }
130
+ function jwtExpMs(jwt) {
131
+ const p = b64UrlPayload(jwt);
132
+ const exp = p?.exp;
133
+ if (typeof exp === 'number' && Number.isFinite(exp))
134
+ return Math.floor(exp * 1000);
135
+ return undefined;
136
+ }
137
+ function randomLocal(len) {
138
+ const chars = 'abcdefghijklmnopqrstuvwxyz0123456789';
139
+ const a = new Uint8Array(len);
140
+ crypto.getRandomValues(a);
141
+ let s = '';
142
+ for (let i = 0; i < len; i++)
143
+ s += chars[a[i] % chars.length];
144
+ return s;
145
+ }
146
+ function pickLocale(domain) {
147
+ const s = String(domain ?? '').trim();
148
+ if (!s)
149
+ return 'zh';
150
+ if (s.includes('.') && !s.includes('/'))
151
+ return 'zh';
152
+ return s;
153
+ }
154
+ function pickMailboxDomain(domainHint, available) {
155
+ if (!available.length)
156
+ throw new Error('10minute-one: no email domains in page');
157
+ const h = (domainHint ?? '').trim().toLowerCase();
158
+ if (h.includes('.')) {
159
+ for (const d of available) {
160
+ if (d.toLowerCase() === h)
161
+ return d;
162
+ }
163
+ }
164
+ return available[Math.floor(Math.random() * available.length)];
165
+ }
166
+ function apiHeaders(token, extra) {
167
+ const ts = String(Math.floor(Date.now() / 1000));
168
+ return {
169
+ Accept: '*/*',
170
+ 'Accept-Language': DEFAULT_PAGE_HEADERS['Accept-Language'],
171
+ Authorization: `Bearer ${token}`,
172
+ 'Cache-Control': 'no-cache',
173
+ 'Content-Type': 'application/json',
174
+ DNT: '1',
175
+ Origin: SITE_ORIGIN,
176
+ Pragma: 'no-cache',
177
+ Referer: `${SITE_ORIGIN}/`,
178
+ 'Sec-Fetch-Dest': 'empty',
179
+ 'Sec-Fetch-Mode': 'cors',
180
+ 'Sec-Fetch-Site': 'same-site',
181
+ 'User-Agent': DEFAULT_PAGE_HEADERS['User-Agent'],
182
+ 'X-Request-ID': randomRequestId(),
183
+ 'X-Timestamp': ts,
184
+ ...extra,
185
+ };
186
+ }
187
+ function encMailboxPath(email) {
188
+ return encodeURIComponent(email);
189
+ }
190
+ function itemNeedsDetail(item) {
191
+ const id = item.id;
192
+ if (id == null || String(id).trim() === '')
193
+ return false;
194
+ const subj = String(item.subject ?? item.mail_title ?? '').trim();
195
+ const body = String(item.text ?? item.body ?? item.html ?? item.mail_text ?? '').trim();
196
+ return subj === '' && body === '';
197
+ }
198
+ async function generateEmail(domain) {
199
+ const locale = pickLocale(domain ?? undefined);
200
+ const pageUrl = `${SITE_ORIGIN}/${encodeURIComponent(locale)}`;
201
+ const res = await (0, retry_1.fetchWithTimeout)(pageUrl, { headers: { ...DEFAULT_PAGE_HEADERS, Referer: pageUrl } });
202
+ if (!res.ok)
203
+ throw new Error(`10minute-one generate: ${res.status}`);
204
+ const html = await res.text();
205
+ const arr = extractNuxtDataArray(html);
206
+ const token = parseMailServiceTokenFromPayload(arr);
207
+ let domains = parseEmailDomains(html);
208
+ if (domains.length === 0) {
209
+ domains = ['xghff.com', 'oqqaj.com', 'psovv.com'];
210
+ }
211
+ const blocked = parseBlockedUsernames(html);
212
+ const domainHint = (domain ?? '').trim().includes('.') ? (domain ?? '').trim() : undefined;
213
+ const mailDomain = pickMailboxDomain(domainHint, domains);
214
+ let local = '';
215
+ for (let attempt = 0; attempt < 32; attempt++) {
216
+ const cand = randomLocal(10);
217
+ if (!blocked.has(cand.toLowerCase())) {
218
+ local = cand;
219
+ break;
220
+ }
221
+ }
222
+ if (!local)
223
+ throw new Error('10minute-one: could not pick username');
224
+ const address = `${local}@${mailDomain}`;
225
+ const expMs = jwtExpMs(token);
226
+ return {
227
+ channel: CHANNEL,
228
+ email: address,
229
+ token,
230
+ expiresAt: expMs,
231
+ };
232
+ }
233
+ async function getEmails(email, token) {
234
+ const url = `${API_BASE}/mailbox/${encMailboxPath(email)}`;
235
+ const res = await (0, retry_1.fetchWithTimeout)(url, { headers: apiHeaders(token) });
236
+ if (!res.ok)
237
+ throw new Error(`10minute-one inbox: ${res.status}`);
238
+ const list = (await res.json());
239
+ if (!Array.isArray(list))
240
+ throw new Error('10minute-one: invalid inbox JSON');
241
+ const out = [];
242
+ for (const raw of list) {
243
+ if (!raw || typeof raw !== 'object')
244
+ continue;
245
+ let row = raw;
246
+ if (itemNeedsDetail(row)) {
247
+ const id = encodeURIComponent(String(row.id));
248
+ const du = `${API_BASE}/mailbox/${encMailboxPath(email)}/${id}`;
249
+ const dr = await (0, retry_1.fetchWithTimeout)(du, { headers: apiHeaders(token) });
250
+ if (dr.ok) {
251
+ try {
252
+ const detail = (await dr.json());
253
+ row = { ...row, ...detail };
254
+ }
255
+ catch {
256
+ /* keep row */
257
+ }
258
+ }
259
+ }
260
+ out.push((0, normalize_1.normalizeEmail)(row, email));
261
+ }
262
+ return out;
263
+ }
264
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTBtaW51dGUtb25lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Byb3ZpZGVycy8xMG1pbnV0ZS1vbmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFrTUEsc0NBa0NDO0FBRUQsOEJBMkJDO0FBaFFELDRDQUE4QztBQUM5QyxvQ0FBNEM7QUFFNUMsTUFBTSxPQUFPLEdBQVksY0FBYyxDQUFDO0FBQ3hDLE1BQU0sV0FBVyxHQUFHLDBCQUEwQixDQUFDO0FBQy9DLE1BQU0sUUFBUSxHQUFHLHFDQUFxQyxDQUFDO0FBRXZELE1BQU0sTUFBTSxHQUFHLGtEQUFrRCxDQUFDO0FBRWxFLE1BQU0sb0JBQW9CLEdBQTJCO0lBQ25ELE1BQU0sRUFBRSxpRUFBaUU7SUFDekUsaUJBQWlCLEVBQUUseUJBQXlCO0lBQzVDLGVBQWUsRUFBRSxVQUFVO0lBQzNCLE1BQU0sRUFBRSxVQUFVO0lBQ2xCLEdBQUcsRUFBRSxHQUFHO0lBQ1IsWUFBWSxFQUNWLGlIQUFpSDtDQUNwSCxDQUFDO0FBRUYsU0FBUyxvQkFBb0IsQ0FBQyxJQUFZO0lBQ3hDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsNkRBQTZELENBQUMsQ0FBQztJQUNwRixJQUFJLENBQUMsQ0FBQztRQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsdUNBQXVDLENBQUMsQ0FBQztJQUNqRSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFjLENBQUM7QUFDOUMsQ0FBQztBQUVELFNBQVMsVUFBVSxDQUFDLEdBQWMsRUFBRSxLQUFjLEVBQUUsS0FBSyxHQUFHLENBQUM7SUFDM0QsSUFBSSxLQUFLLEdBQUcsRUFBRTtRQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsbUNBQW1DLENBQUMsQ0FBQztJQUNyRSxJQUFJLEtBQUssSUFBSSxJQUFJO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDaEMsSUFBSSxPQUFPLEtB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QUFDO2dCQUNWLElBQUksQ0FBQztvQkFDSCxNQUFNLE1BQU0sR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxDQUE0QixDQUFDO29CQUM1RCxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLE1BQU0sRUFBRSxDQUFDO2dCQUM5QixDQUFDO2dCQUFDLE1BQU0sQ0FBQztvQkFDUCxjQUFjO2dCQUNoQixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFDRCxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUEsMEJBQWMsRUFBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW50ZXJuYWxFbWFpbEluZm8sIEVtYWlsLCBDaGFubmVsIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgbm9ybWFsaXplRW1haWwgfSBmcm9tICcuLi9ub3JtYWxpemUnO1xuaW1wb3J0IHsgZmV0Y2hXaXRoVGltZW91dCB9IGZyb20gJy4uL3JldHJ5JztcblxuY29uc3QgQ0hBTk5FTDogQ2hhbm5lbCA9ICcxMG1pbnV0ZS1vbmUnO1xuY29uc3QgU0lURV9PUklHSU4gPSAnaHR0cHM6Ly8xMG1pbnV0ZW1haWwub25lJztcbmNvbnN0IEFQSV9CQVNFID0gJ2h0dHBzOi8vd2ViLjEwbWludXRlbWFpbC5vbmUvYXBpL3YxJztcblxuY29uc3QgSldUX1JFID0gL15bQS1aYS16MC05Xy1dK1xcLltBLVphLXowLTlfLV0rXFwuW0EtWmEtejAtOV8tXSskLztcblxuY29uc3QgREVGQVVMVF9QQUdFX0hFQURFUlM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gIEFjY2VwdDogJ3RleHQvaHRtbCxhcHBsaWNhdGlvbi94aHRtbCt4bWwsYXBwbGljYXRpb24veG1sO3E9MC45LCovKjtxPTAuOCcsXG4gICdBY2NlcHQtTGFuZ3VhZ2UnOiAnemgtQ04semg7cT0wLjksZW47cT0wLjgnLFxuICAnQ2FjaGUtQ29udHJvbCc6ICduby1jYWNoZScsXG4gIFByYWdtYTogJ25vLWNhY2hlJyxcbiAgRE5UOiAnMScsXG4gICdVc2VyLUFnZW50JzpcbiAgICAnTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzEyMC4wLjAuMCBTYWZhcmkvNTM3LjM2Jyxcbn07XG5cbmZ1bmN0aW9uIGV4dHJhY3ROdXh0RGF0YUFycmF5KGh0bWw6IHN0cmluZyk6IHVua25vd25bXSB7XG4gIGNvbnN0IG0gPSBodG1sLm1hdGNoKC88c2NyaXB0W14+XSpcXGJpZD1cIl9fTlVYVF9EQVRBX19cIltePl0qPihbXFxzXFxTXSo/KTxcXC9zY3JpcHQ+L2kpO1xuICBpZiAoIW0pIHRocm93IG5ldyBFcnJvcignMTBtaW51dGUtb25lOiBfX05VWFRfREFUQV9fIG5vdCBmb3VuZCcpO1xuICByZXR1cm4gSlNPTi5wYXJzZShtWzFdLnRyaW0oKSkgYXMgdW5rbm93bltdO1xufVxuXG5mdW5jdGlvbiByZXNvbHZlUmVmKGFycjogdW5rbm93bltdLCB2YWx1ZTogdW5rbm93biwgZGVwdGggPSAwKTogdW5rbm93biB7XG4gIGlmIChkZXB0aCA+IDY0KSB0aHJvdyBuZXcgRXJyb3IoJzEwbWludXRlLW9uZTogcmVzb2x2ZVJlZiB0b28gZGVlcCcpO1xuICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiBOdW1iZXIuaXNJbnRlZ2VyKHZhbHVlKSAmJiB2YWx1ZSA+PSAwKSB7XG4gICAgaWYgKHZhbHVlID49IGFyci5sZW5ndGgpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHJlc29sdmVSZWYoYXJyLCBhcnJbdmFsdWVdLCBkZXB0aCArIDEpO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZnVuY3Rpb24gcGFyc2VNYWlsU2VydmljZVRva2VuRnJvbVBheWxvYWQoYXJyOiB1bmtub3duW10pOiBzdHJpbmcge1xuICBpZiAoIUFycmF5LmlzQXJyYXkoYXJyKSkgdGhyb3cgbmV3IEVycm9yKCcxMG1pbnV0ZS1vbmU6IGludmFsaWQgX19OVVhUX0RBVEFfXycpO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgTWF0aC5taW4oYXJyLmxlbmd0aCwgNDgpOyBpKyspIHtcbiAgICBjb25zdCBlbCA9IGFycltpXTtcbiAgICBpZiAoZWwgJiYgdHlwZW9mIGVsID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShlbCkgJiYgJ21haWxTZXJ2aWNlVG9rZW4nIGluIGVsKSB7XG4gICAgICBjb25zdCB0ID0gcmVzb2x2ZVJlZihhcnIsIChlbCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikubWFpbFNlcnZpY2VUb2tlbik7XG4gICAgICBpZiAodHlwZW9mIHQgPT09ICdzdHJpbmcnICYmIEpXVF9SRS50ZXN0KHQpKSByZXR1cm4gdDtcbiAgICB9XG4gIH1cbiAgZm9yIChjb25zdCBlbCBvZiBhcnIpIHtcbiAgICBpZiAoZWwgJiYgdHlwZW9mIGVsID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShlbCkgJiYgJ21haWxTZXJ2aWNlVG9rZW4nIGluIGVsKSB7XG4gICAgICBjb25zdCB0ID0gcmVzb2x2ZVJlZihhcnIsIChlbCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikubWFpbFNlcnZpY2VUb2tlbik7XG4gICAgICBpZiAodHlwZW9mIHQgPT09ICdzdHJpbmcnICYmIEpXVF9SRS50ZXN0KHQpKSByZXR1cm4gdDtcbiAgICB9XG4gIH1cbiAgZm9yIChjb25zdCBlbCBvZiBhcnIpIHtcbiAgICBpZiAodHlwZW9mIGVsID09PSAnc3RyaW5nJyAmJiBKV1RfUkUudGVzdChlbCkpIHJldHVybiBlbDtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoJzEwbWludXRlLW9uZTogbWFpbFNlcnZpY2VUb2tlbiBub3QgZm91bmQnKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VRdW90ZWRKc29uQXJyYXlGaWVsZChodG1sOiBzdHJpbmcsIGZpZWxkOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IGtleSA9IGAke2ZpZWxkfTpcImA7XG4gIGNvbnN0IHN0YXJ0ID0gaHRtbC5pbmRleE9mKGtleSk7XG4gIGlmIChzdGFydCA8IDApIHJldHVybiBbXTtcbiAgY29uc3Qgc2xpY2VTdGFydCA9IHN0YXJ0ICsga2V5Lmxlbmd0aDtcbiAgaWYgKGh0bWxbc2xpY2VTdGFydF0gIT09ICdbJykgcmV0dXJuIFtdO1xuICBsZXQgZGVwdGggPSAwO1xuICBsZXQgaiA9IHNsaWNlU3RhcnQ7XG4gIGZvciAoOyBqIDwgaHRtbC5sZW5ndGg7IGorKykge1xuICAgIGNvbnN0IGMgPSBodG1sW2pdO1xuICAgIGlmIChjID09PSAnWycpIGRlcHRoKys7XG4gICAgZWxzZSBpZiAoYyA9PT0gJ10nKSB7XG4gICAgICBkZXB0aC0tO1xuICAgICAgaWYgKGRlcHRoID09PSAwKSB7XG4gICAgICAgIGorKztcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGNvbnN0IHJhdyA9IGh0bWwuc2xpY2Uoc2xpY2VTdGFydCwgaik7XG4gIGNvbnN0IHVuZXNjID0gcmF3LnJlcGxhY2UoL1xcXFxcIi9nLCAnXCInKTtcbiAgdHJ5IHtcbiAgICBjb25zdCB2ID0gSlNPTi5wYXJzZSh1bmVzYyk7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodikgPyB2Lm1hcCh4ID0+IFN0cmluZyh4KSkgOiBbXTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlRW1haWxEb21haW5zKGh0bWw6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgY29uc3QgZCA9IHBhcnNlUXVvdGVkSnNvbkFycmF5RmllbGQoaHRtbCwgJ2VtYWlsRG9tYWlucycpO1xuICByZXR1cm4gZC5maWx0ZXIoQm9vbGVhbik7XG59XG5cbmZ1bmN0aW9uIHBhcnNlQmxvY2tlZFVzZXJuYW1lcyhodG1sOiBzdHJpbmcpOiBTZXQ8c3RyaW5nPiB7XG4gIGNvbnN0IGxpc3QgPSBwYXJzZVF1b3RlZEpzb25BcnJheUZpZWxkKGh0bWwsICdibG9ja2VkVXNlcm5hbWVzJyk7XG4gIHJldHVybiBuZXcgU2V0KGxpc3QubWFwKHMgPT4gcy50b0xvd2VyQ2FzZSgpKSk7XG59XG5cbmZ1bmN0aW9uIHJhbmRvbVJlcXVlc3RJZCgpOiBzdHJpbmcge1xuICBjb25zdCBhID0gbmV3IFVpbnQ4QXJyYXkoMTYpO1xuICBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKGEpO1xuICByZXR1cm4gWy4uLmFdLm1hcChiID0+IGIudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsICcwJykpLmpvaW4oJycpO1xufVxuXG5mdW5jdGlvbiBiNjREZWNvZGVVdGY4KGI2NDogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKHR5cGVvZiBCdWZmZXIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKGI2NCwgJ2Jhc2U2NCcpLnRvU3RyaW5nKCd1dGY4Jyk7XG4gIH1cbiAgY29uc3QgYmluID0gYXRvYihiNjQpO1xuICBjb25zdCBieXRlcyA9IG5ldyBVaW50OEFycmF5KGJpbi5sZW5ndGgpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGJpbi5sZW5ndGg7IGkrKykgYnl0ZXNbaV0gPSBiaW4uY2hhckNvZGVBdChpKTtcbiAgcmV0dXJuIG5ldyBUZXh0RGVjb2RlcigndXRmLTgnKS5kZWNvZGUoYnl0ZXMpO1xufVxuXG5mdW5jdGlvbiBiNjRVcmxQYXlsb2FkKGp3dDogc3RyaW5nKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBudWxsIHtcbiAgY29uc3QgcGFydHMgPSBqd3Quc3BsaXQoJy4nKTtcbiAgaWYgKHBhcnRzLmxlbmd0aCA8IDIpIHJldHVybiBudWxsO1xuICBsZXQgYiA9IHBhcnRzWzFdLnJlcGxhY2UoLy0vZywgJysnKS5yZXBsYWNlKC9fL2csICcvJyk7XG4gIGNvbnN0IHBhZCA9IGIubGVuZ3RoICUgNCA/ICc9Jy5yZXBlYXQoNCAtIChiLmxlbmd0aCAlIDQpKSA6ICcnO1xuICBiICs9IHBhZDtcbiAgdHJ5IHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShiNjREZWNvZGVVdGY4KGIpKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZnVuY3Rpb24gand0RXhwTXMoand0OiBzdHJpbmcpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICBjb25zdCBwID0gYjY0VXJsUGF5bG9hZChqd3QpO1xuICBjb25zdCBleHAgPSBwPy5leHA7XG4gIGlmICh0eXBlb2YgZXhwID09PSAnbnVtYmVyJyAmJiBOdW1iZXIuaXNGaW5pdGUoZXhwKSkgcmV0dXJuIE1hdGguZmxvb3IoZXhwICogMTAwMCk7XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIHJhbmRvbUxvY2FsKGxlbjogbnVtYmVyKTogc3RyaW5nIHtcbiAgY29uc3QgY2hhcnMgPSAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5JztcbiAgY29uc3QgYSA9IG5ldyBVaW50OEFycmF5KGxlbik7XG4gIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMoYSk7XG4gIGxldCBzID0gJyc7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHMgKz0gY2hhcnNbYVtpXSAlIGNoYXJzLmxlbmd0aF07XG4gIHJldHVybiBzO1xufVxuXG5mdW5jdGlvbiBwaWNrTG9jYWxlKGRvbWFpbj86IHN0cmluZyB8IG51bGwpOiBzdHJpbmcge1xuICBjb25zdCBzID0gU3RyaW5nKGRvbWFpbiA/PyAnJykudHJpbSgpO1xuICBpZiAoIXMpIHJldHVybiAnemgnO1xuICBpZiAocy5pbmNsdWRlcygnLicpICYmICFzLmluY2x1ZGVzKCcvJykpIHJldHVybiAnemgnO1xuICByZXR1cm4gcztcbn1cblxuZnVuY3Rpb24gcGlja01haWxib3hEb21haW4oZG9tYWluSGludDogc3RyaW5nIHwgdW5kZWZpbmVkLCBhdmFpbGFibGU6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgaWYgKCFhdmFpbGFibGUubGVuZ3RoKSB0aHJvdyBuZXcgRXJyb3IoJzEwbWludXRlLW9uZTogbm8gZW1haWwgZG9tYWlucyBpbiBwYWdlJyk7XG4gIGNvbnN0IGggPSAoZG9tYWluSGludCA/PyAnJykudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gIGlmIChoLmluY2x1ZGVzKCcuJykpIHtcbiAgICBmb3IgKGNvbnN0IGQgb2YgYXZhaWxhYmxlKSB7XG4gICAgICBpZiAoZC50b0xvd2VyQ2FzZSgpID09PSBoKSByZXR1cm4gZDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGF2YWlsYWJsZVtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBhdmFpbGFibGUubGVuZ3RoKV0hO1xufVxuXG5mdW5jdGlvbiBhcGlIZWFkZXJzKHRva2VuOiBzdHJpbmcsIGV4dHJhPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPik6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICBjb25zdCB0cyA9IFN0cmluZyhNYXRoLmZsb29yKERhdGUubm93KCkgLyAxMDAwKSk7XG4gIHJldHVybiB7XG4gICAgQWNjZXB0OiAnKi8qJyxcbiAgICAnQWNjZXB0LUxhbmd1YWdlJzogREVGQVVMVF9QQUdFX0hFQURFUlNbJ0FjY2VwdC1MYW5ndWFnZSddISxcbiAgICBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YCxcbiAgICAnQ2FjaGUtQ29udHJvbCc6ICduby1jYWNoZScsXG4gICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICBETlQ6ICcxJyxcbiAgICBPcmlnaW46IFNJVEVfT1JJR0lOLFxuICAgIFByYWdtYTogJ25vLWNhY2hlJyxcbiAgICBSZWZlcmVyOiBgJHtTSVRFX09SSUdJTn0vYCxcbiAgICAnU2VjLUZldGNoLURlc3QnOiAnZW1wdHknLFxuICAgICdTZWMtRmV0Y2gtTW9kZSc6ICdjb3JzJyxcbiAgICAnU2VjLUZldGNoLVNpdGUnOiAnc2FtZS1zaXRlJyxcbiAgICAnVXNlci1BZ2VudCc6IERFRkFVTFRfUEFHRV9IRUFERVJTWydVc2VyLUFnZW50J10hLFxuICAgICdYLVJlcXVlc3QtSUQnOiByYW5kb21SZXF1ZXN0SWQoKSxcbiAgICAnWC1UaW1lc3RhbXAnOiB0cyxcbiAgICAuLi5leHRyYSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gZW5jTWFpbGJveFBhdGgoZW1haWw6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQoZW1haWwpO1xufVxuXG5mdW5jdGlvbiBpdGVtTmVlZHNEZXRhaWwoaXRlbTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBib29sZWFuIHtcbiAgY29uc3QgaWQgPSBpdGVtLmlkO1xuICBpZiAoaWQgPT0gbnVsbCB8fCBTdHJpbmcoaWQpLnRyaW0oKSA9PT0gJycpIHJldHVybiBmYWxzZTtcbiAgY29uc3Qgc3ViaiA9IFN0cmluZyhpdGVtLnN1YmplY3QgPz8gaXRlbS5tYWlsX3RpdGxlID8/ICcnKS50cmltKCk7XG4gIGNvbnN0IGJvZHkgPSBTdHJpbmcoaXRlbS50ZXh0ID8/IGl0ZW0uYm9keSA/PyBpdGVtLmh0bWwgPz8gaXRlbS5tYWlsX3RleHQgPz8gJycpLnRyaW0oKTtcbiAgcmV0dXJuIHN1YmogPT09ICcnICYmIGJvZHkgPT09ICcnO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVFbWFpbChkb21haW4/OiBzdHJpbmcgfCBudWxsKTogUHJvbWlzZTxJbnRlcm5hbEVtYWlsSW5mbz4ge1xuICBjb25zdCBsb2NhbGUgPSBwaWNrTG9jYWxlKGRvbWFpbiA/PyB1bmRlZmluZWQpO1xuICBjb25zdCBwYWdlVXJsID0gYCR7U0lURV9PUklHSU59LyR7ZW5jb2RlVVJJQ29tcG9uZW50KGxvY2FsZSl9YDtcbiAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2hXaXRoVGltZW91dChwYWdlVXJsLCB7IGhlYWRlcnM6IHsgLi4uREVGQVVMVF9QQUdFX0hFQURFUlMsIFJlZmVyZXI6IHBhZ2VVcmwgfSB9KTtcbiAgaWYgKCFyZXMub2spIHRocm93IG5ldyBFcnJvcihgMTBtaW51dGUtb25lIGdlbmVyYXRlOiAke3Jlcy5zdGF0dXN9YCk7XG4gIGNvbnN0IGh0bWwgPSBhd2FpdCByZXMudGV4dCgpO1xuICBjb25zdCBhcnIgPSBleHRyYWN0TnV4dERhdGFBcnJheShodG1sKTtcbiAgY29uc3QgdG9rZW4gPSBwYXJzZU1haWxTZXJ2aWNlVG9rZW5Gcm9tUGF5bG9hZChhcnIpO1xuICBsZXQgZG9tYWlucyA9IHBhcnNlRW1haWxEb21haW5zKGh0bWwpO1xuICBpZiAoZG9tYWlucy5sZW5ndGggPT09IDApIHtcbiAgICBkb21haW5zID0gWyd4Z2hmZi5jb20nLCAnb3FxYWouY29tJywgJ3Bzb3Z2LmNvbSddO1xuICB9XG4gIGNvbnN0IGJsb2NrZWQgPSBwYXJzZUJsb2NrZWRVc2VybmFtZXMoaHRtbCk7XG4gIGNvbnN0IGRvbWFpbkhpbnQgPSAoZG9tYWluID8/ICcnKS50cmltKCkuaW5jbHVkZXMoJy4nKSA/IChkb21haW4gPz8gJycpLnRyaW0oKSA6IHVuZGVmaW5lZDtcbiAgY29uc3QgbWFpbERvbWFpbiA9IHBpY2tNYWlsYm94RG9tYWluKGRvbWFpbkhpbnQsIGRvbWFpbnMpO1xuXG4gIGxldCBsb2NhbCA9ICcnO1xuICBmb3IgKGxldCBhdHRlbXB0ID0gMDsgYXR0ZW1wdCA8IDMyOyBhdHRlbXB0KyspIHtcbiAgICBjb25zdCBjYW5kID0gcmFuZG9tTG9jYWwoMTApO1xuICAgIGlmICghYmxvY2tlZC5oYXMoY2FuZC50b0xvd2VyQ2FzZSgpKSkge1xuICAgICAgbG9jYWwgPSBjYW5kO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIGlmICghbG9jYWwpIHRocm93IG5ldyBFcnJvcignMTBtaW51dGUtb25lOiBjb3VsZCBub3QgcGljayB1c2VybmFtZScpO1xuXG4gIGNvbnN0IGFkZHJlc3MgPSBgJHtsb2NhbH1AJHttYWlsRG9tYWlufWA7XG4gIGNvbnN0IGV4cE1zID0gand0RXhwTXModG9rZW4pO1xuICByZXR1cm4ge1xuICAgIGNoYW5uZWw6IENIQU5ORUwsXG4gICAgZW1haWw6IGFkZHJlc3MsXG4gICAgdG9rZW4sXG4gICAgZXhwaXJlc0F0OiBleHBNcyxcbiAgfTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEVtYWlscyhlbWFpbDogc3RyaW5nLCB0b2tlbjogc3RyaW5nKTogUHJvbWlzZTxFbWFpbFtdPiB7XG4gIGNvbnN0IHVybCA9IGAke0FQSV9CQVNFfS9tYWlsYm94LyR7ZW5jTWFpbGJveFBhdGgoZW1haWwpfWA7XG4gIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoV2l0aFRpbWVvdXQodXJsLCB7IGhlYWRlcnM6IGFwaUhlYWRlcnModG9rZW4pIH0pO1xuICBpZiAoIXJlcy5vaykgdGhyb3cgbmV3IEVycm9yKGAxMG1pbnV0ZS1vbmUgaW5ib3g6ICR7cmVzLnN0YXR1c31gKTtcbiAgY29uc3QgbGlzdCA9IChhd2FpdCByZXMuanNvbigpKSBhcyB1bmtub3duO1xuICBpZiAoIUFycmF5LmlzQXJyYXkobGlzdCkpIHRocm93IG5ldyBFcnJvcignMTBtaW51dGUtb25lOiBpbnZhbGlkIGluYm94IEpTT04nKTtcblxuICBjb25zdCBvdXQ6IEVtYWlsW10gPSBbXTtcbiAgZm9yIChjb25zdCByYXcgb2YgbGlzdCkge1xuICAgIGlmICghcmF3IHx8IHR5cGVvZiByYXcgIT09ICdvYmplY3QnKSBjb250aW51ZTtcbiAgICBsZXQgcm93ID0gcmF3IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGlmIChpdGVtTmVlZHNEZXRhaWwocm93KSkge1xuICAgICAgY29uc3QgaWQgPSBlbmNvZGVVUklDb21wb25lbnQoU3RyaW5nKHJvdy5pZCkpO1xuICAgICAgY29uc3QgZHUgPSBgJHtBUElfQkFTRX0vbWFpbGJveC8ke2VuY01haWxib3hQYXRoKGVtYWlsKX0vJHtpZH1gO1xuICAgICAgY29uc3QgZHIgPSBhd2FpdCBmZXRjaFdpdGhUaW1lb3V0KGR1LCB7IGhlYWRlcnM6IGFwaUhlYWRlcnModG9rZW4pIH0pO1xuICAgICAgaWYgKGRyLm9rKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgZGV0YWlsID0gKGF3YWl0IGRyLmpzb24oKSkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICAgICAgcm93ID0geyAuLi5yb3csIC4uLmRldGFpbCB9O1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAvKiBrZWVwIHJvdyAqL1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIG91dC5wdXNoKG5vcm1hbGl6ZUVtYWlsKHJvdywgZW1haWwpKTtcbiAgfVxuICByZXR1cm4gb3V0O1xufVxuIl19
@@ -0,0 +1,3 @@
1
+ import { InternalEmailInfo, Email } from '../types';
2
+ export declare function generateEmail(domain?: string | null): Promise<InternalEmailInfo>;
3
+ export declare function getEmails(email: string, token: string): Promise<Email[]>;
@@ -0,0 +1,214 @@
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 = 'moakt';
8
+ const ORIGIN = 'https://www.moakt.com';
9
+ const TOK_PREFIX = 'mok1:';
10
+ const EMAIL_DIV_RE = /<div\s+id="email-address"\s*>([^<]+)<\/div>/is;
11
+ const HREF_EMAIL_RE = /href="(\/[^"]+\/email\/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})"/gi;
12
+ const TITLE_RE = /<li\s+class="title"\s*>([^<]*)<\/li>/is;
13
+ const DATE_RE = /<li\s+class="date"[^>]*>[\s\S]*?<span[^>]*>([^<]+)<\/span>/is;
14
+ const SENDER_RE = /<li\s+class="sender"[^>]*>[\s\S]*?<span[^>]*>([\s\S]*?)<\/span>\s*<\/li>/is;
15
+ const BODY_RE = /<div\s+class="email-body"\s*>([\s\S]*?)<\/div>/is;
16
+ const FROM_ADDR_RE = /<([a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,})>/;
17
+ const TAG_RE = /<[^>]+>/g;
18
+ function setCookieLines(headers) {
19
+ const h = headers;
20
+ if (typeof h.getSetCookie === 'function') {
21
+ return h.getSetCookie();
22
+ }
23
+ const one = headers.get('set-cookie');
24
+ return one ? [one] : [];
25
+ }
26
+ function localeFromDomain(domain) {
27
+ const s = String(domain ?? '').trim();
28
+ if (!s || /[/?#\\]/.test(s))
29
+ return 'zh';
30
+ return s;
31
+ }
32
+ function parseCookieMap(hdr) {
33
+ const m = new Map();
34
+ for (const part of hdr.split(';')) {
35
+ const p = part.trim();
36
+ if (!p || !p.includes('='))
37
+ continue;
38
+ const i = p.indexOf('=');
39
+ const k = p.slice(0, i).trim();
40
+ const v = p.slice(i + 1).trim();
41
+ if (k)
42
+ m.set(k, v);
43
+ }
44
+ return m;
45
+ }
46
+ function mergeCookieHeader(prev, headers) {
47
+ const m = parseCookieMap(prev);
48
+ for (const line of setCookieLines(headers)) {
49
+ const first = line.split(';')[0] ?? '';
50
+ const i = first.indexOf('=');
51
+ if (i <= 0)
52
+ continue;
53
+ const k = first.slice(0, i).trim();
54
+ const v = first.slice(i + 1).trim();
55
+ if (k)
56
+ m.set(k, v);
57
+ }
58
+ return [...m.entries()]
59
+ .sort((a, b) => a[0].localeCompare(b[0]))
60
+ .map(([k, v]) => `${k}=${v}`)
61
+ .join('; ');
62
+ }
63
+ function lightUnescape(s) {
64
+ return s
65
+ .replace(/&amp;/g, '\u0000')
66
+ .replace(/&quot;/g, '"')
67
+ .replace(/&#34;/g, '"')
68
+ .replace(/&#39;/g, "'")
69
+ .replace(/&lt;/g, '<')
70
+ .replace(/&gt;/g, '>')
71
+ .replace(/\u0000/g, '&');
72
+ }
73
+ function encSess(l, c) {
74
+ const raw = JSON.stringify({ l, c });
75
+ return TOK_PREFIX + Buffer.from(raw, 'utf8').toString('base64');
76
+ }
77
+ function decSess(tok) {
78
+ if (!tok.startsWith(TOK_PREFIX)) {
79
+ throw new Error('moakt: invalid session token');
80
+ }
81
+ let raw;
82
+ try {
83
+ raw = Buffer.from(tok.slice(TOK_PREFIX.length), 'base64').toString('utf8');
84
+ }
85
+ catch {
86
+ throw new Error('moakt: invalid session token');
87
+ }
88
+ const o = JSON.parse(raw);
89
+ const l = (o.l ?? '').trim();
90
+ const c = (o.c ?? '').trim();
91
+ if (!l || !c)
92
+ throw new Error('moakt: invalid session token');
93
+ return { l, c };
94
+ }
95
+ function pageHeaders(referer) {
96
+ return {
97
+ Accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8',
98
+ 'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
99
+ 'Cache-Control': 'no-cache',
100
+ DNT: '1',
101
+ Pragma: 'no-cache',
102
+ Referer: referer,
103
+ 'Upgrade-Insecure-Requests': '1',
104
+ 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36 Edg/146.0.0.0',
105
+ };
106
+ }
107
+ function parseInboxEmail(html) {
108
+ const m = EMAIL_DIV_RE.exec(html);
109
+ if (!m?.[1])
110
+ throw new Error('moakt: email-address not found');
111
+ const addr = lightUnescape(m[1].trim());
112
+ if (!addr)
113
+ throw new Error('moakt: empty email-address');
114
+ return addr;
115
+ }
116
+ function stripTags(s) {
117
+ return s.replace(TAG_RE, ' ').replace(/\s+/g, ' ').trim();
118
+ }
119
+ function listMailIds(html) {
120
+ const seen = new Set();
121
+ const out = [];
122
+ HREF_EMAIL_RE.lastIndex = 0;
123
+ let cap;
124
+ while ((cap = HREF_EMAIL_RE.exec(html)) !== null) {
125
+ const path = cap[1];
126
+ if (path.includes('/delete'))
127
+ continue;
128
+ const id = path.split('/').pop() ?? '';
129
+ if (id.length === 36 && !seen.has(id)) {
130
+ seen.add(id);
131
+ out.push(id);
132
+ }
133
+ }
134
+ return out;
135
+ }
136
+ function parseDetail(page, id, recipient) {
137
+ let fromS = '';
138
+ const sm = SENDER_RE.exec(page);
139
+ if (sm?.[1]) {
140
+ const inner = lightUnescape(sm[1]);
141
+ fromS = stripTags(inner);
142
+ const em = FROM_ADDR_RE.exec(inner);
143
+ if (em?.[1])
144
+ fromS = em[1].trim();
145
+ }
146
+ let subject = '';
147
+ const tm = TITLE_RE.exec(page);
148
+ if (tm?.[1])
149
+ subject = lightUnescape(tm[1].trim());
150
+ let date = '';
151
+ const dm = DATE_RE.exec(page);
152
+ if (dm?.[1])
153
+ date = lightUnescape(dm[1].trim());
154
+ let htmlBody = '';
155
+ const bm = BODY_RE.exec(page);
156
+ if (bm?.[1])
157
+ htmlBody = bm[1].trim();
158
+ return {
159
+ id,
160
+ to: recipient,
161
+ from: fromS,
162
+ subject,
163
+ date,
164
+ html: htmlBody,
165
+ };
166
+ }
167
+ async function generateEmail(domain) {
168
+ const loc = localeFromDomain(domain);
169
+ const base = `${ORIGIN}/${loc}`;
170
+ const inbox = `${base}/inbox`;
171
+ const r1 = await (0, retry_1.fetchWithTimeout)(base, { headers: pageHeaders(base) });
172
+ if (!r1.ok)
173
+ throw new Error(`moakt generate: ${r1.status}`);
174
+ let cookieHdr = mergeCookieHeader('', r1.headers);
175
+ const r2 = await (0, retry_1.fetchWithTimeout)(inbox, {
176
+ headers: { ...pageHeaders(base), Cookie: cookieHdr },
177
+ });
178
+ if (!r2.ok)
179
+ throw new Error(`moakt inbox: ${r2.status}`);
180
+ cookieHdr = mergeCookieHeader(cookieHdr, r2.headers);
181
+ const html = await r2.text();
182
+ const email = parseInboxEmail(html);
183
+ if (!parseCookieMap(cookieHdr).has('tm_session')) {
184
+ throw new Error('moakt: missing tm_session cookie');
185
+ }
186
+ const token = encSess(loc, cookieHdr);
187
+ return { channel: CHANNEL, email, token };
188
+ }
189
+ async function getEmails(email, token) {
190
+ const { l: loc, c: cookieHdr } = decSess(token);
191
+ const inbox = `${ORIGIN}/${loc}/inbox`;
192
+ const baseRef = `${ORIGIN}/${loc}`;
193
+ const r = await (0, retry_1.fetchWithTimeout)(inbox, {
194
+ headers: { ...pageHeaders(baseRef), Cookie: cookieHdr },
195
+ });
196
+ if (!r.ok)
197
+ throw new Error(`moakt inbox: ${r.status}`);
198
+ const inboxHtml = await r.text();
199
+ const ids = listMailIds(inboxHtml);
200
+ const out = [];
201
+ for (const id of ids) {
202
+ const detail = `${ORIGIN}/${loc}/email/${id}/html`;
203
+ const refer = `${ORIGIN}/${loc}/email/${id}`;
204
+ const rd = await (0, retry_1.fetchWithTimeout)(detail, {
205
+ headers: { ...pageHeaders(refer), Cookie: cookieHdr },
206
+ });
207
+ if (!rd.ok)
208
+ continue;
209
+ const page = await rd.text();
210
+ out.push((0, normalize_1.normalizeEmail)(parseDetail(page, id, email), email));
211
+ }
212
+ return out;
213
+ }
214
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ha3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHJvdmlkZXJzL21vYWt0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBdUtBLHNDQXNCQztBQUVELDhCQXVCQztBQXJORCw0Q0FBOEM7QUFDOUMsb0NBQTRDO0FBRTVDLE1BQU0sT0FBTyxHQUFZLE9BQU8sQ0FBQztBQUNqQyxNQUFNLE1BQU0sR0FBRyx1QkFBdUIsQ0FBQztBQUN2QyxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUM7QUFFM0IsTUFBTSxZQUFZLEdBQUcsK0NBQStDLENBQUM7QUFDckUsTUFBTSxhQUFhLEdBQ2pCLHlGQUF5RixDQUFDO0FBQzVGLE1BQU0sUUFBUSxHQUFHLHdDQUF3QyxDQUFDO0FBQzFELE1BQU0sT0FBTyxHQUFHLDhEQUE4RCxDQUFDO0FBQy9FLE1BQU0sU0FBUyxHQUFHLDRFQUE0RSxDQUFDO0FBQy9GLE1BQU0sT0FBTyxHQUFHLGtEQUFrRCxDQUFDO0FBQ25FLE1BQU0sWUFBWSxHQUFHLG9EQUFvRCxDQUFDO0FBQzFFLE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQztBQUUxQixTQUFTLGNBQWMsQ0FBQyxPQUFnQjtJQUN0QyxNQUFNLENBQUMsR0FBRyxPQUFzRCxDQUFDO0lBQ2pFLElBQUksT0FBTyxDQUFDLENBQUMsWUFBWSxLQUFLLFVBQVUsRUFBRSxDQUFDO1FBQ3pDLE9BQU8sQ0FBQyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFDRCxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3RDLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDMUIsQ0FBQztBQUVELFNBQVMsZ0JBQWdCLENBQUMsTUFBc0I7SUFDOUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUMsQ0FB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QUFDO1FBQ0gsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFO1lBQUUsU0FBUztRQUNyQixNQUFNLElBQUksR0FBRyxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUM3QixHQUFHLENBQUMsSUFBSSxDQUFDLElBQUEsMEJBQWMsRUFBQyxXQUFXLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFDRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbnRlcm5hbEVtYWlsSW5mbywgRW1haWwsIENoYW5uZWwgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBub3JtYWxpemVFbWFpbCB9IGZyb20gJy4uL25vcm1hbGl6ZSc7XG5pbXBvcnQgeyBmZXRjaFdpdGhUaW1lb3V0IH0gZnJvbSAnLi4vcmV0cnknO1xuXG5jb25zdCBDSEFOTkVMOiBDaGFubmVsID0gJ21vYWt0JztcbmNvbnN0IE9SSUdJTiA9ICdodHRwczovL3d3dy5tb2FrdC5jb20nO1xuY29uc3QgVE9LX1BSRUZJWCA9ICdtb2sxOic7XG5cbmNvbnN0IEVNQUlMX0RJVl9SRSA9IC88ZGl2XFxzK2lkPVwiZW1haWwtYWRkcmVzc1wiXFxzKj4oW148XSspPFxcL2Rpdj4vaXM7XG5jb25zdCBIUkVGX0VNQUlMX1JFID1cbiAgL2hyZWY9XCIoXFwvW15cIl0rXFwvZW1haWxcXC9bMC05YS1mXXs4fS1bMC05YS1mXXs0fS1bMC05YS1mXXs0fS1bMC05YS1mXXs0fS1bMC05YS1mXXsxMn0pXCIvZ2k7XG5jb25zdCBUSVRMRV9SRSA9IC88bGlcXHMrY2xhc3M9XCJ0aXRsZVwiXFxzKj4oW148XSopPFxcL2xpPi9pcztcbmNvbnN0IERBVEVfUkUgPSAvPGxpXFxzK2NsYXNzPVwiZGF0ZVwiW14+XSo+W1xcc1xcU10qPzxzcGFuW14+XSo+KFtePF0rKTxcXC9zcGFuPi9pcztcbmNvbnN0IFNFTkRFUl9SRSA9IC88bGlcXHMrY2xhc3M9XCJzZW5kZXJcIltePl0qPltcXHNcXFNdKj88c3BhbltePl0qPihbXFxzXFxTXSo/KTxcXC9zcGFuPlxccyo8XFwvbGk+L2lzO1xuY29uc3QgQk9EWV9SRSA9IC88ZGl2XFxzK2NsYXNzPVwiZW1haWwtYm9keVwiXFxzKj4oW1xcc1xcU10qPyk8XFwvZGl2Pi9pcztcbmNvbnN0IEZST01fQUREUl9SRSA9IC88KFthLXpBLVowLTkuXyUrLV0rQFthLXpBLVowLTkuLV0rXFwuW2EtekEtWl17Mix9KT4vO1xuY29uc3QgVEFHX1JFID0gLzxbXj5dKz4vZztcblxuZnVuY3Rpb24gc2V0Q29va2llTGluZXMoaGVhZGVyczogSGVhZGVycyk6IHN0cmluZ1tdIHtcbiAgY29uc3QgaCA9IGhlYWRlcnMgYXMgSGVhZGVycyAmIHsgZ2V0U2V0Q29va2llPzogKCkgPT4gc3RyaW5nW10gfTtcbiAgaWYgKHR5cGVvZiBoLmdldFNldENvb2tpZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBoLmdldFNldENvb2tpZSgpO1xuICB9XG4gIGNvbnN0IG9uZSA9IGhlYWRlcnMuZ2V0KCdzZXQtY29va2llJyk7XG4gIHJldHVybiBvbmUgPyBbb25lXSA6IFtdO1xufVxuXG5mdW5jdGlvbiBsb2NhbGVGcm9tRG9tYWluKGRvbWFpbj86IHN0cmluZyB8IG51bGwpOiBzdHJpbmcge1xuICBjb25zdCBzID0gU3RyaW5nKGRvbWFpbiA/PyAnJykudHJpbSgpO1xuICBpZiAoIXMgfHwgL1svPyNcXFxcXS8udGVzdChzKSkgcmV0dXJuICd6aCc7XG4gIHJldHVybiBzO1xufVxuXG5mdW5jdGlvbiBwYXJzZUNvb2tpZU1hcChoZHI6IHN0cmluZyk6IE1hcDxzdHJpbmcsIHN0cmluZz4ge1xuICBjb25zdCBtID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcbiAgZm9yIChjb25zdCBwYXJ0IG9mIGhkci5zcGxpdCgnOycpKSB7XG4gICAgY29uc3QgcCA9IHBhcnQudHJpbSgpO1xuICAgIGlmICghcCB8fCAhcC5pbmNsdWRlcygnPScpKSBjb250aW51ZTtcbiAgICBjb25zdCBpID0gcC5pbmRleE9mKCc9Jyk7XG4gICAgY29uc3QgayA9IHAuc2xpY2UoMCwgaSkudHJpbSgpO1xuICAgIGNvbnN0IHYgPSBwLnNsaWNlKGkgKyAxKS50cmltKCk7XG4gICAgaWYgKGspIG0uc2V0KGssIHYpO1xuICB9XG4gIHJldHVybiBtO1xufVxuXG5mdW5jdGlvbiBtZXJnZUNvb2tpZUhlYWRlcihwcmV2OiBzdHJpbmcsIGhlYWRlcnM6IEhlYWRlcnMpOiBzdHJpbmcge1xuICBjb25zdCBtID0gcGFyc2VDb29raWVNYXAocHJldik7XG4gIGZvciAoY29uc3QgbGluZSBvZiBzZXRDb29raWVMaW5lcyhoZWFkZXJzKSkge1xuICAgIGNvbnN0IGZpcnN0ID0gbGluZS5zcGxpdCgnOycpWzBdID8/ICcnO1xuICAgIGNvbnN0IGkgPSBmaXJzdC5pbmRleE9mKCc9Jyk7XG4gICAgaWYgKGkgPD0gMCkgY29udGludWU7XG4gICAgY29uc3QgayA9IGZpcnN0LnNsaWNlKDAsIGkpLnRyaW0oKTtcbiAgICBjb25zdCB2ID0gZmlyc3Quc2xpY2UoaSArIDEpLnRyaW0oKTtcbiAgICBpZiAoaykgbS5zZXQoaywgdik7XG4gIH1cbiAgcmV0dXJuIFsuLi5tLmVudHJpZXMoKV1cbiAgICAuc29ydCgoYSwgYikgPT4gYVswXS5sb2NhbGVDb21wYXJlKGJbMF0pKVxuICAgIC5tYXAoKFtrLCB2XSkgPT4gYCR7a309JHt2fWApXG4gICAgLmpvaW4oJzsgJyk7XG59XG5cbmZ1bmN0aW9uIGxpZ2h0VW5lc2NhcGUoczogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHNcbiAgICAucmVwbGFjZSgvJmFtcDsvZywgJ1xcdTAwMDAnKVxuICAgIC5yZXBsYWNlKC8mcXVvdDsvZywgJ1wiJylcbiAgICAucmVwbGFjZSgvJiMzNDsvZywgJ1wiJylcbiAgICAucmVwbGFjZSgvJiMzOTsvZywgXCInXCIpXG4gICAgLnJlcGxhY2UoLyZsdDsvZywgJzwnKVxuICAgIC5yZXBsYWNlKC8mZ3Q7L2csICc+JylcbiAgICAucmVwbGFjZSgvXFx1MDAwMC9nLCAnJicpO1xufVxuXG5mdW5jdGlvbiBlbmNTZXNzKGw6IHN0cmluZywgYzogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgcmF3ID0gSlNPTi5zdHJpbmdpZnkoeyBsLCBjIH0pO1xuICByZXR1cm4gVE9LX1BSRUZJWCArIEJ1ZmZlci5mcm9tKHJhdywgJ3V0ZjgnKS50b1N0cmluZygnYmFzZTY0Jyk7XG59XG5cbmZ1bmN0aW9uIGRlY1Nlc3ModG9rOiBzdHJpbmcpOiB7IGw6IHN0cmluZzsgYzogc3RyaW5nIH0ge1xuICBpZiAoIXRvay5zdGFydHNXaXRoKFRPS19QUkVGSVgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdtb2FrdDogaW52YWxpZCBzZXNzaW9uIHRva2VuJyk7XG4gIH1cbiAgbGV0IHJhdzogc3RyaW5nO1xuICB0cnkge1xuICAgIHJhdyA9IEJ1ZmZlci5mcm9tKHRvay5zbGljZShUT0tfUFJFRklYLmxlbmd0aCksICdiYXNlNjQnKS50b1N0cmluZygndXRmOCcpO1xuICB9IGNhdGNoIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ21vYWt0OiBpbnZhbGlkIHNlc3Npb24gdG9rZW4nKTtcbiAgfVxuICBjb25zdCBvID0gSlNPTi5wYXJzZShyYXcpIGFzIHsgbD86IHN0cmluZzsgYz86IHN0cmluZyB9O1xuICBjb25zdCBsID0gKG8ubCA/PyAnJykudHJpbSgpO1xuICBjb25zdCBjID0gKG8uYyA/PyAnJykudHJpbSgpO1xuICBpZiAoIWwgfHwgIWMpIHRocm93IG5ldyBFcnJvcignbW9ha3Q6IGludmFsaWQgc2Vzc2lvbiB0b2tlbicpO1xuICByZXR1cm4geyBsLCBjIH07XG59XG5cbmZ1bmN0aW9uIHBhZ2VIZWFkZXJzKHJlZmVyZXI6IHN0cmluZyk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICByZXR1cm4ge1xuICAgIEFjY2VwdDpcbiAgICAgICd0ZXh0L2h0bWwsYXBwbGljYXRpb24veGh0bWwreG1sLGFwcGxpY2F0aW9uL3htbDtxPTAuOSxpbWFnZS9hdmlmLGltYWdlL3dlYnAsaW1hZ2UvYXBuZywqLyo7cT0wLjgnLFxuICAgICdBY2NlcHQtTGFuZ3VhZ2UnOiAnemgtQ04semg7cT0wLjksZW47cT0wLjgsZW4tR0I7cT0wLjcsZW4tVVM7cT0wLjYnLFxuICAgICdDYWNoZS1Db250cm9sJzogJ25vLWNhY2hlJyxcbiAgICBETlQ6ICcxJyxcbiAgICBQcmFnbWE6ICduby1jYWNoZScsXG4gICAgUmVmZXJlcjogcmVmZXJlcixcbiAgICAnVXBncmFkZS1JbnNlY3VyZS1SZXF1ZXN0cyc6ICcxJyxcbiAgICAnVXNlci1BZ2VudCc6XG4gICAgICAnTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzE0Ni4wLjAuMCBTYWZhcmkvNTM3LjM2IEVkZy8xNDYuMC4wLjAnLFxuICB9O1xufVxuXG5mdW5jdGlvbiBwYXJzZUluYm94RW1haWwoaHRtbDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgbSA9IEVNQUlMX0RJVl9SRS5leGVjKGh0bWwpO1xuICBpZiAoIW0/LlsxXSkgdGhyb3cgbmV3IEVycm9yKCdtb2FrdDogZW1haWwtYWRkcmVzcyBub3QgZm91bmQnKTtcbiAgY29uc3QgYWRkciA9IGxpZ2h0VW5lc2NhcGUobVsxXS50cmltKCkpO1xuICBpZiAoIWFkZHIpIHRocm93IG5ldyBFcnJvcignbW9ha3Q6IGVtcHR5IGVtYWlsLWFkZHJlc3MnKTtcbiAgcmV0dXJuIGFkZHI7XG59XG5cbmZ1bmN0aW9uIHN0cmlwVGFncyhzOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcy5yZXBsYWNlKFRBR19SRSwgJyAnKS5yZXBsYWNlKC9cXHMrL2csICcgJykudHJpbSgpO1xufVxuXG5mdW5jdGlvbiBsaXN0TWFpbElkcyhodG1sOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IHNlZW4gPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgY29uc3Qgb3V0OiBzdHJpbmdbXSA9IFtdO1xuICBIUkVGX0VNQUlMX1JFLmxhc3RJbmRleCA9IDA7XG4gIGxldCBjYXA6IFJlZ0V4cEV4ZWNBcnJheSB8IG51bGw7XG4gIHdoaWxlICgoY2FwID0gSFJFRl9FTUFJTF9SRS5leGVjKGh0bWwpKSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHBhdGggPSBjYXBbMV07XG4gICAgaWYgKHBhdGguaW5jbHVkZXMoJy9kZWxldGUnKSkgY29udGludWU7XG4gICAgY29uc3QgaWQgPSBwYXRoLnNwbGl0KCcvJykucG9wKCkgPz8gJyc7XG4gICAgaWYgKGlkLmxlbmd0aCA9PT0gMzYgJiYgIXNlZW4uaGFzKGlkKSkge1xuICAgICAgc2Vlbi5hZGQoaWQpO1xuICAgICAgb3V0LnB1c2goaWQpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb3V0O1xufVxuXG5mdW5jdGlvbiBwYXJzZURldGFpbChwYWdlOiBzdHJpbmcsIGlkOiBzdHJpbmcsIHJlY2lwaWVudDogc3RyaW5nKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICBsZXQgZnJvbVMgPSAnJztcbiAgY29uc3Qgc20gPSBTRU5ERVJfUkUuZXhlYyhwYWdlKTtcbiAgaWYgKHNtPy5bMV0pIHtcbiAgICBjb25zdCBpbm5lciA9IGxpZ2h0VW5lc2NhcGUoc21bMV0pO1xuICAgIGZyb21TID0gc3RyaXBUYWdzKGlubmVyKTtcbiAgICBjb25zdCBlbSA9IEZST01fQUREUl9SRS5leGVjKGlubmVyKTtcbiAgICBpZiAoZW0/LlsxXSkgZnJvbVMgPSBlbVsxXS50cmltKCk7XG4gIH1cbiAgbGV0IHN1YmplY3QgPSAnJztcbiAgY29uc3QgdG0gPSBUSVRMRV9SRS5leGVjKHBhZ2UpO1xuICBpZiAodG0/LlsxXSkgc3ViamVjdCA9IGxpZ2h0VW5lc2NhcGUodG1bMV0udHJpbSgpKTtcbiAgbGV0IGRhdGUgPSAnJztcbiAgY29uc3QgZG0gPSBEQVRFX1JFLmV4ZWMocGFnZSk7XG4gIGlmIChkbT8uWzFdKSBkYXRlID0gbGlnaHRVbmVzY2FwZShkbVsxXS50cmltKCkpO1xuICBsZXQgaHRtbEJvZHkgPSAnJztcbiAgY29uc3QgYm0gPSBCT0RZX1JFLmV4ZWMocGFnZSk7XG4gIGlmIChibT8uWzFdKSBodG1sQm9keSA9IGJtWzFdLnRyaW0oKTtcbiAgcmV0dXJuIHtcbiAgICBpZCxcbiAgICB0bzogcmVjaXBpZW50LFxuICAgIGZyb206IGZyb21TLFxuICAgIHN1YmplY3QsXG4gICAgZGF0ZSxcbiAgICBodG1sOiBodG1sQm9keSxcbiAgfTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlRW1haWwoZG9tYWluPzogc3RyaW5nIHwgbnVsbCk6IFByb21pc2U8SW50ZXJuYWxFbWFpbEluZm8+IHtcbiAgY29uc3QgbG9jID0gbG9jYWxlRnJvbURvbWFpbihkb21haW4pO1xuICBjb25zdCBiYXNlID0gYCR7T1JJR0lOfS8ke2xvY31gO1xuICBjb25zdCBpbmJveCA9IGAke2Jhc2V9L2luYm94YDtcblxuICBjb25zdCByMSA9IGF3YWl0IGZldGNoV2l0aFRpbWVvdXQoYmFzZSwgeyBoZWFkZXJzOiBwYWdlSGVhZGVycyhiYXNlKSB9KTtcbiAgaWYgKCFyMS5vaykgdGhyb3cgbmV3IEVycm9yKGBtb2FrdCBnZW5lcmF0ZTogJHtyMS5zdGF0dXN9YCk7XG4gIGxldCBjb29raWVIZHIgPSBtZXJnZUNvb2tpZUhlYWRlcignJywgcjEuaGVhZGVycyk7XG5cbiAgY29uc3QgcjIgPSBhd2FpdCBmZXRjaFdpdGhUaW1lb3V0KGluYm94LCB7XG4gICAgaGVhZGVyczogeyAuLi5wYWdlSGVhZGVycyhiYXNlKSwgQ29va2llOiBjb29raWVIZHIgfSxcbiAgfSk7XG4gIGlmICghcjIub2spIHRocm93IG5ldyBFcnJvcihgbW9ha3QgaW5ib3g6ICR7cjIuc3RhdHVzfWApO1xuICBjb29raWVIZHIgPSBtZXJnZUNvb2tpZUhlYWRlcihjb29raWVIZHIsIHIyLmhlYWRlcnMpO1xuICBjb25zdCBodG1sID0gYXdhaXQgcjIudGV4dCgpO1xuXG4gIGNvbnN0IGVtYWlsID0gcGFyc2VJbmJveEVtYWlsKGh0bWwpO1xuICBpZiAoIXBhcnNlQ29va2llTWFwKGNvb2tpZUhkcikuaGFzKCd0bV9zZXNzaW9uJykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ21vYWt0OiBtaXNzaW5nIHRtX3Nlc3Npb24gY29va2llJyk7XG4gIH1cbiAgY29uc3QgdG9rZW4gPSBlbmNTZXNzKGxvYywgY29va2llSGRyKTtcbiAgcmV0dXJuIHsgY2hhbm5lbDogQ0hBTk5FTCwgZW1haWwsIHRva2VuIH07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRFbWFpbHMoZW1haWw6IHN0cmluZywgdG9rZW46IHN0cmluZyk6IFByb21pc2U8RW1haWxbXT4ge1xuICBjb25zdCB7IGw6IGxvYywgYzogY29va2llSGRyIH0gPSBkZWNTZXNzKHRva2VuKTtcbiAgY29uc3QgaW5ib3ggPSBgJHtPUklHSU59LyR7bG9jfS9pbmJveGA7XG4gIGNvbnN0IGJhc2VSZWYgPSBgJHtPUklHSU59LyR7bG9jfWA7XG5cbiAgY29uc3QgciA9IGF3YWl0IGZldGNoV2l0aFRpbWVvdXQoaW5ib3gsIHtcbiAgICBoZWFkZXJzOiB7IC4uLnBhZ2VIZWFkZXJzKGJhc2VSZWYpLCBDb29raWU6IGNvb2tpZUhkciB9LFxuICB9KTtcbiAgaWYgKCFyLm9rKSB0aHJvdyBuZXcgRXJyb3IoYG1vYWt0IGluYm94OiAke3Iuc3RhdHVzfWApO1xuICBjb25zdCBpbmJveEh0bWwgPSBhd2FpdCByLnRleHQoKTtcbiAgY29uc3QgaWRzID0gbGlzdE1haWxJZHMoaW5ib3hIdG1sKTtcbiAgY29uc3Qgb3V0OiBFbWFpbFtdID0gW107XG4gIGZvciAoY29uc3QgaWQgb2YgaWRzKSB7XG4gICAgY29uc3QgZGV0YWlsID0gYCR7T1JJR0lOfS8ke2xvY30vZW1haWwvJHtpZH0vaHRtbGA7XG4gICAgY29uc3QgcmVmZXIgPSBgJHtPUklHSU59LyR7bG9jfS9lbWFpbC8ke2lkfWA7XG4gICAgY29uc3QgcmQgPSBhd2FpdCBmZXRjaFdpdGhUaW1lb3V0KGRldGFpbCwge1xuICAgICAgaGVhZGVyczogeyAuLi5wYWdlSGVhZGVycyhyZWZlciksIENvb2tpZTogY29va2llSGRyIH0sXG4gICAgfSk7XG4gICAgaWYgKCFyZC5vaykgY29udGludWU7XG4gICAgY29uc3QgcGFnZSA9IGF3YWl0IHJkLnRleHQoKTtcbiAgICBvdXQucHVzaChub3JtYWxpemVFbWFpbChwYXJzZURldGFpbChwYWdlLCBpZCwgZW1haWwpLCBlbWFpbCkpO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG4iXX0=
@@ -0,0 +1,5 @@
1
+ import { InternalEmailInfo, Email } from '../types';
2
+ /** POST /temp-email/address/new(空 body) */
3
+ export declare function generateEmail(): Promise<InternalEmailInfo>;
4
+ /** POST /temp-email/inbox/list */
5
+ export declare function getEmails(email: string, token: string): Promise<Email[]>;
@@ -0,0 +1,55 @@
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 = 'ta-easy';
8
+ const API_BASE = 'https://api-endpoint.ta-easy.com';
9
+ const ORIGIN = 'https://www.ta-easy.com';
10
+ function browserHeaders() {
11
+ return {
12
+ Accept: 'application/json',
13
+ 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36 Edg/146.0.0.0',
14
+ origin: ORIGIN,
15
+ referer: `${ORIGIN}/`,
16
+ };
17
+ }
18
+ /** POST /temp-email/address/new(空 body) */
19
+ async function generateEmail() {
20
+ const res = await (0, retry_1.fetchWithTimeout)(`${API_BASE}/temp-email/address/new`, {
21
+ method: 'POST',
22
+ headers: { ...browserHeaders(), 'Content-Length': '0' },
23
+ });
24
+ if (!res.ok) {
25
+ throw new Error(`ta-easy generate: ${res.status}`);
26
+ }
27
+ const data = await res.json();
28
+ if (data.status !== 'success' || !data.address || !data.token) {
29
+ throw new Error(data.message ? `ta-easy: ${data.message}` : 'ta-easy: create failed');
30
+ }
31
+ return {
32
+ channel: CHANNEL,
33
+ email: data.address,
34
+ token: data.token,
35
+ expiresAt: typeof data.expiresAt === 'number' ? data.expiresAt : undefined,
36
+ };
37
+ }
38
+ /** POST /temp-email/inbox/list */
39
+ async function getEmails(email, token) {
40
+ const res = await (0, retry_1.fetchWithTimeout)(`${API_BASE}/temp-email/inbox/list`, {
41
+ method: 'POST',
42
+ headers: { ...browserHeaders(), 'Content-Type': 'application/json' },
43
+ body: JSON.stringify({ token, email }),
44
+ });
45
+ if (!res.ok) {
46
+ throw new Error(`ta-easy inbox: ${res.status}`);
47
+ }
48
+ const data = await res.json();
49
+ if (data.status !== 'success') {
50
+ throw new Error(data.message ? `ta-easy: ${data.message}` : 'ta-easy: inbox failed');
51
+ }
52
+ const list = Array.isArray(data.data) ? data.data : [];
53
+ return list.map((raw) => (0, normalize_1.normalizeEmail)(raw, email));
54
+ }
55
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGEtZWFzeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcm92aWRlcnMvdGEtZWFzeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQW1CQSxzQ0FrQkM7QUFHRCw4QkFlQztBQXRERCw0Q0FBOEM7QUFDOUMsb0NBQTRDO0FBRTVDLE1BQU0sT0FBTyxHQUFZLFNBQVMsQ0FBQztBQUNuQyxNQUFNLFFBQVEsR0FBRyxrQ0FBa0MsQ0FBQztBQUNwRCxNQUFNLE1BQU0sR0FBRyx5QkFBeUIsQ0FBQztBQUV6QyxTQUFTLGNBQWM7SUFDckIsT0FBTztRQUNMLE1BQU0sRUFBRSxrQkFBa0I7UUFDMUIsWUFBWSxFQUNWLCtIQUErSDtRQUNqSSxNQUFNLEVBQUUsTUFBTTtRQUNkLE9BQU8sRUFBRSxHQUFHLE1BQU0sR0FBRztLQUN0QixDQUFDO0FBQ0osQ0FBQztBQUVELDJDQUEyQztBQUNwQyxLQUFLLFVBQVUsYUFBYTtJQUNqQyxNQUFNLEdBQUcsR0FBRyxNQUFNLElBQUEsd0JBQWdCLEVBQUMsR0FBRyxRQUFRLHlCQUF5QixFQUFFO1FBQ3ZFLE1BQU0sRUFBRSxNQUFNO1FBQ2QsT0FBTyxFQUFFLEVBQUUsR0FBRyxjQUFjLEVBQUUsRUFBRSxnQkFBZ0IsRUFBRSxHQUFHLEVBQUU7S0FDeEQsQ0FBQyxDQUFDO0lBQ0gsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNaLE1BQU0sSUFBSSxLQUFLLENBQUMscUJBQXFCLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFDRCxNQUFNLElBQUksR0FBRyxNQUFNLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUM5QixJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssU0FBUyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUM5RCxNQUFNLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFlBQVksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0lBQ3hGLENBQUM7SUFDRCxPQUFPO1FBQ0wsT0FBTyxFQUFFLE9BQU87UUFDaEIsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFpQjtRQUM3QixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQWU7UUFDM0IsU0FBUyxFQUFFLE9BQU8sSUFBSSxDQUFDLFNBQVMsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVM7S0FDM0UsQ0FBQztBQUNKLENBQUM7QUFFRCxrQ0FBa0M7QUFDM0IsS0FBSyxVQUFVLFNBQVMsQ0FBQyxLQUFhLEVBQUUsS0FBYTtJQUMxRCxNQUFNLEdBQUcsR0FBRyxNQUFNLElBQUEsd0JBQWdCLEVBQUMsR0FBRyxRQUFRLHdCQUF3QixFQUFFO1FBQ3RFLE1BQU0sRUFBRSxNQUFNO1FBQ2QsT0FBTyxFQUFFLEVBQUUsR0FBRyxjQUFjLEVBQUUsRUFBRSxjQUFjLEVBQUUsa0JBQWtCLEVBQUU7UUFDcEUsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUM7S0FDdkMsQ0FBQyxDQUFDO0lBQ0gsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNaLE1BQU0sSUFBSSxLQUFLLENBQUMsa0JBQWtCLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFDRCxNQUFNLElBQUksR0FBRyxNQUFNLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUM5QixJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDOUIsTUFBTSxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxZQUFZLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsdUJBQXVCLENBQUMsQ0FBQztJQUN2RixDQUFDO0lBQ0QsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUN2RCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUFDLElBQUEsMEJBQWMsRUFBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUM1RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW50ZXJuYWxFbWFpbEluZm8sIEVtYWlsLCBDaGFubmVsIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgbm9ybWFsaXplRW1haWwgfSBmcm9tICcuLi9ub3JtYWxpemUnO1xuaW1wb3J0IHsgZmV0Y2hXaXRoVGltZW91dCB9IGZyb20gJy4uL3JldHJ5JztcblxuY29uc3QgQ0hBTk5FTDogQ2hhbm5lbCA9ICd0YS1lYXN5JztcbmNvbnN0IEFQSV9CQVNFID0gJ2h0dHBzOi8vYXBpLWVuZHBvaW50LnRhLWVhc3kuY29tJztcbmNvbnN0IE9SSUdJTiA9ICdodHRwczovL3d3dy50YS1lYXN5LmNvbSc7XG5cbmZ1bmN0aW9uIGJyb3dzZXJIZWFkZXJzKCk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICByZXR1cm4ge1xuICAgIEFjY2VwdDogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICdVc2VyLUFnZW50JzpcbiAgICAgICdNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvMTQ2LjAuMC4wIFNhZmFyaS81MzcuMzYgRWRnLzE0Ni4wLjAuMCcsXG4gICAgb3JpZ2luOiBPUklHSU4sXG4gICAgcmVmZXJlcjogYCR7T1JJR0lOfS9gLFxuICB9O1xufVxuXG4vKiogUE9TVCAvdGVtcC1lbWFpbC9hZGRyZXNzL25ld++8iOepuiBib2R577yJICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVFbWFpbCgpOiBQcm9taXNlPEludGVybmFsRW1haWxJbmZvPiB7XG4gIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoV2l0aFRpbWVvdXQoYCR7QVBJX0JBU0V9L3RlbXAtZW1haWwvYWRkcmVzcy9uZXdgLCB7XG4gICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgaGVhZGVyczogeyAuLi5icm93c2VySGVhZGVycygpLCAnQ29udGVudC1MZW5ndGgnOiAnMCcgfSxcbiAgfSk7XG4gIGlmICghcmVzLm9rKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGB0YS1lYXN5IGdlbmVyYXRlOiAke3Jlcy5zdGF0dXN9YCk7XG4gIH1cbiAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcy5qc29uKCk7XG4gIGlmIChkYXRhLnN0YXR1cyAhPT0gJ3N1Y2Nlc3MnIHx8ICFkYXRhLmFkZHJlc3MgfHwgIWRhdGEudG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoZGF0YS5tZXNzYWdlID8gYHRhLWVhc3k6ICR7ZGF0YS5tZXNzYWdlfWAgOiAndGEtZWFzeTogY3JlYXRlIGZhaWxlZCcpO1xuICB9XG4gIHJldHVybiB7XG4gICAgY2hhbm5lbDogQ0hBTk5FTCxcbiAgICBlbWFpbDogZGF0YS5hZGRyZXNzIGFzIHN0cmluZyxcbiAgICB0b2tlbjogZGF0YS50b2tlbiBhcyBzdHJpbmcsXG4gICAgZXhwaXJlc0F0OiB0eXBlb2YgZGF0YS5leHBpcmVzQXQgPT09ICdudW1iZXInID8gZGF0YS5leHBpcmVzQXQgOiB1bmRlZmluZWQsXG4gIH07XG59XG5cbi8qKiBQT1NUIC90ZW1wLWVtYWlsL2luYm94L2xpc3QgKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRFbWFpbHMoZW1haWw6IHN0cmluZywgdG9rZW46IHN0cmluZyk6IFByb21pc2U8RW1haWxbXT4ge1xuICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaFdpdGhUaW1lb3V0KGAke0FQSV9CQVNFfS90ZW1wLWVtYWlsL2luYm94L2xpc3RgLCB7XG4gICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgaGVhZGVyczogeyAuLi5icm93c2VySGVhZGVycygpLCAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyB0b2tlbiwgZW1haWwgfSksXG4gIH0pO1xuICBpZiAoIXJlcy5vaykge1xuICAgIHRocm93IG5ldyBFcnJvcihgdGEtZWFzeSBpbmJveDogJHtyZXMuc3RhdHVzfWApO1xuICB9XG4gIGNvbnN0IGRhdGEgPSBhd2FpdCByZXMuanNvbigpO1xuICBpZiAoZGF0YS5zdGF0dXMgIT09ICdzdWNjZXNzJykge1xuICAgIHRocm93IG5ldyBFcnJvcihkYXRhLm1lc3NhZ2UgPyBgdGEtZWFzeTogJHtkYXRhLm1lc3NhZ2V9YCA6ICd0YS1lYXN5OiBpbmJveCBmYWlsZWQnKTtcbiAgfVxuICBjb25zdCBsaXN0ID0gQXJyYXkuaXNBcnJheShkYXRhLmRhdGEpID8gZGF0YS5kYXRhIDogW107XG4gIHJldHVybiBsaXN0Lm1hcCgocmF3OiBhbnkpID0+IG5vcm1hbGl6ZUVtYWlsKHJhdywgZW1haWwpKTtcbn1cbiJdfQ==
@@ -0,0 +1,7 @@
1
+ /**
2
+ * tempmailg.com:无 Cookie 罐 GET /public/{locale} 拿会话,POST /public/get_messages 建邮与收信。
3
+ * Token 为 tmg1: + base64(JSON{locale,cookieHdr,csrf})。
4
+ */
5
+ import { InternalEmailInfo, Email } from '../types';
6
+ export declare function generateEmail(domain?: string | null): Promise<InternalEmailInfo>;
7
+ export declare function getEmails(email: string, token: string): Promise<Email[]>;