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.
- package/README.md +9 -3
- package/dist/index.d.ts +1 -1
- package/dist/index.js +48 -2
- package/dist/normalize.js +5 -3
- package/dist/providers/10mail-wangtz.d.ts +3 -0
- package/dist/providers/10mail-wangtz.js +117 -0
- package/dist/providers/10minute-one.d.ts +3 -0
- package/dist/providers/10minute-one.js +264 -0
- package/dist/providers/moakt.d.ts +3 -0
- package/dist/providers/moakt.js +214 -0
- package/dist/providers/ta-easy.d.ts +5 -0
- package/dist/providers/ta-easy.js +55 -0
- package/dist/providers/tempmailg.d.ts +7 -0
- package/dist/providers/tempmailg.js +202 -0
- package/dist/providers/tmpmails.d.ts +3 -0
- package/dist/providers/tmpmails.js +169 -0
- package/dist/retry.d.ts +5 -1
- package/dist/retry.js +25 -3
- package/dist/types.d.ts +1 -1
- package/dist/types.js +1 -1
- package/package.json +2 -2
- package/src/index.ts +43 -2
- package/src/normalize.ts +4 -2
- package/src/providers/10mail-wangtz.ts +128 -0
- package/src/providers/10minute-one.ts +258 -0
- package/src/providers/moakt.ts +215 -0
- package/src/providers/ta-easy.ts +56 -0
- package/src/providers/tempmailg.ts +208 -0
- package/src/providers/tmpmails.ts +168 -0
- package/src/retry.ts +36 -1
- package/src/types.ts +1 -1
|
@@ -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,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(/&/g, '\u0000')
|
|
66
|
+
.replace(/"/g, '"')
|
|
67
|
+
.replace(/"/g, '"')
|
|
68
|
+
.replace(/'/g, "'")
|
|
69
|
+
.replace(/</g, '<')
|
|
70
|
+
.replace(/>/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[]>;
|