tempmail-sdk 1.1.2 → 1.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +43 -38
- package/demo/poll-emails.ts +290 -28
- package/dist/config.d.ts +16 -0
- package/dist/config.js +4 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.js +33 -16
- package/dist/providers/awamail.js +4 -3
- package/dist/providers/chatgpt-org-uk.d.ts +1 -1
- package/dist/providers/chatgpt-org-uk.js +188 -20
- package/dist/providers/dropmail.js +135 -3
- package/dist/providers/guerrillamail.js +4 -3
- package/dist/providers/linshi-email.d.ts +1 -1
- package/dist/providers/linshi-email.js +19 -7
- package/dist/providers/linshi-token.d.ts +25 -0
- package/dist/providers/linshi-token.js +69 -0
- package/dist/providers/mail-tm.js +43 -25
- package/dist/providers/maildrop.js +3 -2
- package/dist/providers/smail-pw.d.ts +9 -0
- package/dist/providers/smail-pw.js +356 -0
- package/dist/providers/temp-mail-io.js +5 -4
- package/dist/providers/tempmail-lol.js +4 -3
- package/dist/providers/tempmail.js +4 -3
- package/dist/retry.d.ts +2 -10
- package/dist/retry.js +41 -10
- package/dist/types.d.ts +6 -1
- package/dist/types.js +1 -1
- package/package.json +1 -1
- package/src/config.ts +16 -0
- package/src/index.ts +31 -14
- package/src/providers/awamail.ts +3 -2
- package/src/providers/chatgpt-org-uk.ts +213 -22
- package/src/providers/dropmail.ts +162 -2
- package/src/providers/guerrillamail.ts +3 -2
- package/src/providers/linshi-email.ts +24 -7
- package/src/providers/linshi-token.ts +86 -0
- package/src/providers/mail-tm.ts +43 -24
- package/src/providers/maildrop.ts +2 -1
- package/src/providers/smail-pw.ts +382 -0
- package/src/providers/temp-mail-io.ts +4 -3
- package/src/providers/tempmail-lol.ts +3 -2
- package/src/providers/tempmail.ts +3 -2
- package/src/retry.ts +42 -9
- package/src/types.ts +6 -1
- package/test/example.ts +183 -4
- package/dist/providers/tempmail-la.d.ts +0 -15
- package/dist/providers/tempmail-la.js +0 -89
- package/src/providers/tempmail-la.ts +0 -99
|
@@ -3,40 +3,143 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.generateEmail = generateEmail;
|
|
4
4
|
exports.getEmails = getEmails;
|
|
5
5
|
const normalize_1 = require("../normalize");
|
|
6
|
+
const retry_1 = require("../retry");
|
|
6
7
|
const CHANNEL = 'chatgpt-org-uk';
|
|
7
8
|
const BASE_URL = 'https://mail.chatgpt.org.uk/api';
|
|
9
|
+
const HOME_URL = 'https://mail.chatgpt.org.uk/';
|
|
8
10
|
const DEFAULT_HEADERS = {
|
|
9
11
|
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36',
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
'sec-ch-ua-mobile': '?0',
|
|
15
|
-
'sec-ch-ua-platform': '"Windows"',
|
|
16
|
-
'DNT': '1',
|
|
12
|
+
Accept: '*/*',
|
|
13
|
+
Referer: 'https://mail.chatgpt.org.uk/',
|
|
14
|
+
Origin: 'https://mail.chatgpt.org.uk',
|
|
15
|
+
DNT: '1',
|
|
17
16
|
};
|
|
18
|
-
|
|
19
|
-
|
|
17
|
+
/** 从首页 HTML 解析 window.__BROWSER_AUTH(服务端注入的会话 JWT,供 X-Inbox-Token) */
|
|
18
|
+
function extractBrowserAuthToken(html) {
|
|
19
|
+
const m = html.match(/__BROWSER_AUTH\s*=\s*(\{[\s\S]*?\})\s*;/);
|
|
20
|
+
if (!m) {
|
|
21
|
+
return '';
|
|
22
|
+
}
|
|
23
|
+
try {
|
|
24
|
+
const o = JSON.parse(m[1]);
|
|
25
|
+
return typeof o.token === 'string' ? o.token : '';
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
return '';
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
function extractGmSid(response) {
|
|
32
|
+
const h = response.headers;
|
|
33
|
+
if (typeof h.getSetCookie === 'function') {
|
|
34
|
+
for (const line of h.getSetCookie()) {
|
|
35
|
+
const match = line.match(/^gm_sid=([^;]+)/);
|
|
36
|
+
if (match) {
|
|
37
|
+
return match[1];
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
const setCookie = response.headers.get('set-cookie') || '';
|
|
42
|
+
const match = setCookie.match(/gm_sid=([^;]+)/);
|
|
43
|
+
return match ? match[1] : '';
|
|
44
|
+
}
|
|
45
|
+
async function fetchHomeSession() {
|
|
46
|
+
const response = await (0, retry_1.fetchWithTimeout)(HOME_URL, {
|
|
20
47
|
method: 'GET',
|
|
21
48
|
headers: DEFAULT_HEADERS,
|
|
22
49
|
});
|
|
23
50
|
if (!response.ok) {
|
|
24
|
-
throw new Error(`Failed to
|
|
51
|
+
throw new Error(`Failed to load mail.chatgpt.org.uk: ${response.status}`);
|
|
52
|
+
}
|
|
53
|
+
const html = await response.text();
|
|
54
|
+
const gmSid = extractGmSid(response);
|
|
55
|
+
const browserToken = extractBrowserAuthToken(html);
|
|
56
|
+
if (!gmSid) {
|
|
57
|
+
throw new Error('Failed to extract gm_sid cookie');
|
|
58
|
+
}
|
|
59
|
+
if (!browserToken) {
|
|
60
|
+
throw new Error('Failed to extract __BROWSER_AUTH from homepage (API now requires browser session)');
|
|
61
|
+
}
|
|
62
|
+
return { gmSid, browserToken };
|
|
63
|
+
}
|
|
64
|
+
async function fetchHomeSessionWithRetry() {
|
|
65
|
+
try {
|
|
66
|
+
return await fetchHomeSession();
|
|
67
|
+
}
|
|
68
|
+
catch (error) {
|
|
69
|
+
const message = String(error?.message || error || '').toLowerCase();
|
|
70
|
+
if (message.includes('401') || message.includes('429') || message.includes('extract')) {
|
|
71
|
+
return await fetchHomeSession();
|
|
72
|
+
}
|
|
73
|
+
throw error;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
function sleepMs(ms) {
|
|
77
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
78
|
+
}
|
|
79
|
+
async function fetchInboxToken(email, gmSid) {
|
|
80
|
+
const response = await (0, retry_1.fetchWithTimeout)(`${BASE_URL}/inbox-token`, {
|
|
81
|
+
method: 'POST',
|
|
82
|
+
headers: {
|
|
83
|
+
...DEFAULT_HEADERS,
|
|
84
|
+
'Content-Type': 'application/json',
|
|
85
|
+
Cookie: `gm_sid=${gmSid}`,
|
|
86
|
+
},
|
|
87
|
+
body: JSON.stringify({ email }),
|
|
88
|
+
});
|
|
89
|
+
if (!response.ok) {
|
|
90
|
+
throw new Error(`Failed to get inbox token: ${response.status}`);
|
|
25
91
|
}
|
|
26
92
|
const data = await response.json();
|
|
27
|
-
|
|
28
|
-
|
|
93
|
+
const token = data?.auth?.token;
|
|
94
|
+
if (!token) {
|
|
95
|
+
throw new Error('Failed to get inbox token');
|
|
29
96
|
}
|
|
30
|
-
return
|
|
31
|
-
channel: CHANNEL,
|
|
32
|
-
email: data.data.email,
|
|
33
|
-
};
|
|
97
|
+
return token;
|
|
34
98
|
}
|
|
35
|
-
async function
|
|
99
|
+
async function fetchInboxTokenWithRetry(email, gmSid) {
|
|
100
|
+
try {
|
|
101
|
+
return await fetchInboxToken(email, gmSid);
|
|
102
|
+
}
|
|
103
|
+
catch (error) {
|
|
104
|
+
const message = String(error?.message || error || '').toLowerCase();
|
|
105
|
+
if (message.includes('401')) {
|
|
106
|
+
const { gmSid: sid } = await fetchHomeSessionWithRetry();
|
|
107
|
+
return await fetchInboxToken(email, sid);
|
|
108
|
+
}
|
|
109
|
+
throw error;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
/** 列表接口需同时带 Cookie gm_sid 与 x-inbox-token,否则返回 401 */
|
|
113
|
+
function parseChatgptPackedToken(packed) {
|
|
114
|
+
const t = packed.trim();
|
|
115
|
+
if (t.startsWith('{')) {
|
|
116
|
+
try {
|
|
117
|
+
const o = JSON.parse(t);
|
|
118
|
+
if (typeof o.gmSid === 'string' && typeof o.inbox === 'string') {
|
|
119
|
+
return { gmSid: o.gmSid, inbox: o.inbox };
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
catch {
|
|
123
|
+
/* ignore */
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
return { gmSid: '', inbox: packed };
|
|
127
|
+
}
|
|
128
|
+
async function fetchEmails(inboxToken, email, gmSid) {
|
|
129
|
+
if (!inboxToken) {
|
|
130
|
+
throw new Error('internal error: token missing for chatgpt-org-uk');
|
|
131
|
+
}
|
|
132
|
+
if (!gmSid) {
|
|
133
|
+
throw new Error('internal error: gm_sid missing for chatgpt-org-uk');
|
|
134
|
+
}
|
|
36
135
|
const encodedEmail = encodeURIComponent(email);
|
|
37
|
-
const response = await
|
|
136
|
+
const response = await (0, retry_1.fetchWithTimeout)(`${BASE_URL}/emails?email=${encodedEmail}`, {
|
|
38
137
|
method: 'GET',
|
|
39
|
-
headers:
|
|
138
|
+
headers: {
|
|
139
|
+
...DEFAULT_HEADERS,
|
|
140
|
+
Cookie: `gm_sid=${gmSid}`,
|
|
141
|
+
'x-inbox-token': inboxToken,
|
|
142
|
+
},
|
|
40
143
|
});
|
|
41
144
|
if (!response.ok) {
|
|
42
145
|
throw new Error(`Failed to get emails: ${response.status}`);
|
|
@@ -48,4 +151,69 @@ async function getEmails(email) {
|
|
|
48
151
|
const rawEmails = data.data?.emails || [];
|
|
49
152
|
return rawEmails.map((raw) => (0, normalize_1.normalizeEmail)(raw, email));
|
|
50
153
|
}
|
|
51
|
-
|
|
154
|
+
async function generateEmail() {
|
|
155
|
+
/*
|
|
156
|
+
* generate-email 常返回 429;每次重试前重新拉首页以换新 gm_sid / __BROWSER_AUTH,并做指数退避。
|
|
157
|
+
*/
|
|
158
|
+
const maxAttempts = 6;
|
|
159
|
+
let lastStatus = 0;
|
|
160
|
+
for (let attempt = 0; attempt < maxAttempts; attempt++) {
|
|
161
|
+
const { gmSid, browserToken } = await fetchHomeSessionWithRetry();
|
|
162
|
+
const response = await (0, retry_1.fetchWithTimeout)(`${BASE_URL}/generate-email`, {
|
|
163
|
+
method: 'GET',
|
|
164
|
+
headers: {
|
|
165
|
+
...DEFAULT_HEADERS,
|
|
166
|
+
Cookie: `gm_sid=${gmSid}`,
|
|
167
|
+
'X-Inbox-Token': browserToken,
|
|
168
|
+
},
|
|
169
|
+
});
|
|
170
|
+
if (response.status === 429) {
|
|
171
|
+
lastStatus = 429;
|
|
172
|
+
if (attempt < maxAttempts - 1) {
|
|
173
|
+
const wait = Math.min(3000 * 2 ** attempt, 60000);
|
|
174
|
+
await sleepMs(wait);
|
|
175
|
+
continue;
|
|
176
|
+
}
|
|
177
|
+
throw new Error('Failed to generate email: 429');
|
|
178
|
+
}
|
|
179
|
+
if (!response.ok) {
|
|
180
|
+
lastStatus = response.status;
|
|
181
|
+
throw new Error(`Failed to generate email: ${response.status}`);
|
|
182
|
+
}
|
|
183
|
+
const data = await response.json();
|
|
184
|
+
if (!data.success) {
|
|
185
|
+
throw new Error('Failed to generate email');
|
|
186
|
+
}
|
|
187
|
+
const email = data.data.email;
|
|
188
|
+
const tokenFromAuth = data.auth?.token;
|
|
189
|
+
const inboxJwt = tokenFromAuth || (await fetchInboxTokenWithRetry(email, gmSid));
|
|
190
|
+
return {
|
|
191
|
+
channel: CHANNEL,
|
|
192
|
+
email,
|
|
193
|
+
token: JSON.stringify({ gmSid, inbox: inboxJwt }),
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
throw new Error(`Failed to generate email: ${lastStatus || 'unknown'}`);
|
|
197
|
+
}
|
|
198
|
+
async function getEmails(token, email) {
|
|
199
|
+
if (!token) {
|
|
200
|
+
throw new Error('internal error: token missing for chatgpt-org-uk');
|
|
201
|
+
}
|
|
202
|
+
let { gmSid, inbox } = parseChatgptPackedToken(token);
|
|
203
|
+
if (!gmSid) {
|
|
204
|
+
gmSid = (await fetchHomeSessionWithRetry()).gmSid;
|
|
205
|
+
}
|
|
206
|
+
try {
|
|
207
|
+
return await fetchEmails(inbox, email, gmSid);
|
|
208
|
+
}
|
|
209
|
+
catch (error) {
|
|
210
|
+
const message = String(error?.message || error || '').toLowerCase();
|
|
211
|
+
if (message.includes('401')) {
|
|
212
|
+
const sess = await fetchHomeSessionWithRetry();
|
|
213
|
+
const newInbox = await fetchInboxTokenWithRetry(email, sess.gmSid);
|
|
214
|
+
return await fetchEmails(newInbox, email, sess.gmSid);
|
|
215
|
+
}
|
|
216
|
+
throw error;
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdGdwdC1vcmctdWsuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHJvdmlkZXJzL2NoYXRncHQtb3JnLXVrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBOEtBLHNDQW9EQztBQUVELDhCQXFCQztBQXhQRCw0Q0FBOEM7QUFDOUMsb0NBQTRDO0FBRTVDLE1BQU0sT0FBTyxHQUFZLGdCQUFnQixDQUFDO0FBQzFDLE1BQU0sUUFBUSxHQUFHLGlDQUFpQyxDQUFDO0FBQ25ELE1BQU0sUUFBUSxHQUFHLDhCQUE4QixDQUFDO0FBRWhELE1BQU0sZUFBZSxHQUFHO0lBQ3RCLFlBQVksRUFDVixpSEFBaUg7SUFDbkgsTUFBTSxFQUFFLEtBQUs7SUFDYixPQUFPLEVBQUUsOEJBQThCO0lBQ3ZDLE1BQU0sRUFBRSw2QkFBNkI7SUFDckMsR0FBRyxFQUFFLEdBQUc7Q0FDVCxDQUFDO0FBRUYsc0VBQXNFO0FBQ3RFLFNBQVMsdUJBQXVCLENBQUMsSUFBWTtJQUMzQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLHlDQUF5QyxDQUFDLENBQUM7SUFDaEUsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ1AsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBQ0QsSUFBSSxDQUFDO1FBQ0gsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQXVCLENBQUM7UUFDakQsT0FBTyxPQUFPLENBQUMsQ0FBQyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDcEQsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztBQUNILENBQUM7QUFFRCxTQUFTLFlBQVksQ0FBQyxRQUFrQjtJQUN0QyxNQUFNLENBQUMsR0FBRyxRQUFRLENBQUMsT0FBc0QsQ0FBQztJ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QUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW50ZXJuYWxFbWFpbEluZm8sIEVtYWlsLCBDaGFubmVsIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgbm9ybWFsaXplRW1haWwgfSBmcm9tICcuLi9ub3JtYWxpemUnO1xuaW1wb3J0IHsgZmV0Y2hXaXRoVGltZW91dCB9IGZyb20gJy4uL3JldHJ5JztcblxuY29uc3QgQ0hBTk5FTDogQ2hhbm5lbCA9ICdjaGF0Z3B0LW9yZy11ayc7XG5jb25zdCBCQVNFX1VSTCA9ICdodHRwczovL21haWwuY2hhdGdwdC5vcmcudWsvYXBpJztcbmNvbnN0IEhPTUVfVVJMID0gJ2h0dHBzOi8vbWFpbC5jaGF0Z3B0Lm9yZy51ay8nO1xuXG5jb25zdCBERUZBVUxUX0hFQURFUlMgPSB7XG4gICdVc2VyLUFnZW50JzpcbiAgICAnTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzE0My4wLjAuMCBTYWZhcmkvNTM3LjM2JyxcbiAgQWNjZXB0OiAnKi8qJyxcbiAgUmVmZXJlcjogJ2h0dHBzOi8vbWFpbC5jaGF0Z3B0Lm9yZy51ay8nLFxuICBPcmlnaW46ICdodHRwczovL21haWwuY2hhdGdwdC5vcmcudWsnLFxuICBETlQ6ICcxJyxcbn07XG5cbi8qKiDku47pppbpobUgSFRNTCDop6PmnpAgd2luZG93Ll9fQlJPV1NFUl9BVVRI77yI5pyN5Yqh56uv5rOo5YWl55qE5Lya6K+dIEpXVO+8jOS+myBYLUluYm94LVRva2Vu77yJICovXG5mdW5jdGlvbiBleHRyYWN0QnJvd3NlckF1dGhUb2tlbihodG1sOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBtID0gaHRtbC5tYXRjaCgvX19CUk9XU0VSX0FVVEhcXHMqPVxccyooXFx7W1xcc1xcU10qP1xcfSlcXHMqOy8pO1xuICBpZiAoIW0pIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgdHJ5IHtcbiAgICBjb25zdCBvID0gSlNPTi5wYXJzZShtWzFdKSBhcyB7IHRva2VuPzogc3RyaW5nIH07XG4gICAgcmV0dXJuIHR5cGVvZiBvLnRva2VuID09PSAnc3RyaW5nJyA/IG8udG9rZW4gOiAnJztcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuICcnO1xuICB9XG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RHbVNpZChyZXNwb25zZTogUmVzcG9uc2UpOiBzdHJpbmcge1xuICBjb25zdCBoID0gcmVzcG9uc2UuaGVhZGVycyBhcyBIZWFkZXJzICYgeyBnZXRTZXRDb29raWU/OiAoKSA9PiBzdHJpbmdbXSB9O1xuICBpZiAodHlwZW9mIGguZ2V0U2V0Q29va2llID09PSAnZnVuY3Rpb24nKSB7XG4gICAgZm9yIChjb25zdCBsaW5lIG9mIGguZ2V0U2V0Q29va2llKCkpIHtcbiAgICAgIGNvbnN0IG1hdGNoID0gbGluZS5tYXRjaCgvXmdtX3NpZD0oW147XSspLyk7XG4gICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgcmV0dXJuIG1hdGNoWzFdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBjb25zdCBzZXRDb29raWUgPSByZXNwb25zZS5oZWFkZXJzLmdldCgnc2V0LWNvb2tpZScpIHx8ICcnO1xuICBjb25zdCBtYXRjaCA9IHNldENvb2tpZS5tYXRjaCgvZ21fc2lkPShbXjtdKykvKTtcbiAgcmV0dXJuIG1hdGNoID8gbWF0Y2hbMV0gOiAnJztcbn1cblxuYXN5bmMgZnVuY3Rpb24gZmV0Y2hIb21lU2Vzc2lvbigpOiBQcm9taXNlPHsgZ21TaWQ6IHN0cmluZzsgYnJvd3NlclRva2VuOiBzdHJpbmcgfT4ge1xuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoV2l0aFRpbWVvdXQoSE9NRV9VUkwsIHtcbiAgICBtZXRob2Q6ICdHRVQnLFxuICAgIGhlYWRlcnM6IERFRkFVTFRfSEVBREVSUyxcbiAgfSk7XG5cbiAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGxvYWQgbWFpbC5jaGF0Z3B0Lm9yZy51azogJHtyZXNwb25zZS5zdGF0dXN9YCk7XG4gIH1cblxuICBjb25zdCBodG1sID0gYXdhaXQgcmVzcG9uc2UudGV4dCgpO1xuICBjb25zdCBnbVNpZCA9IGV4dHJhY3RHbVNpZChyZXNwb25zZSk7XG4gIGNvbnN0IGJyb3dzZXJUb2tlbiA9IGV4dHJhY3RCcm93c2VyQXV0aFRva2VuKGh0bWwpO1xuXG4gIGlmICghZ21TaWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBleHRyYWN0IGdtX3NpZCBjb29raWUnKTtcbiAgfVxuICBpZiAoIWJyb3dzZXJUb2tlbikge1xuICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIGV4dHJhY3QgX19CUk9XU0VSX0FVVEggZnJvbSBob21lcGFnZSAoQVBJIG5vdyByZXF1aXJlcyBicm93c2VyIHNlc3Npb24pJyk7XG4gIH1cblxuICByZXR1cm4geyBnbVNpZCwgYnJvd3NlclRva2VuIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZldGNoSG9tZVNlc3Npb25XaXRoUmV0cnkoKTogUHJvbWlzZTx7IGdtU2lkOiBzdHJpbmc7IGJyb3dzZXJUb2tlbjogc3RyaW5nIH0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgZmV0Y2hIb21lU2Vzc2lvbigpO1xuICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IFN0cmluZyhlcnJvcj8ubWVzc2FnZSB8fCBlcnJvciB8fCAnJykudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAobWVzc2FnZS5pbmNsdWRlcygnNDAxJykgfHwgbWVzc2FnZS5pbmNsdWRlcygnNDI5JykgfHwgbWVzc2FnZS5pbmNsdWRlcygnZXh0cmFjdCcpKSB7XG4gICAgICByZXR1cm4gYXdhaXQgZmV0Y2hIb21lU2Vzc2lvbigpO1xuICAgIH1cbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufVxuXG5mdW5jdGlvbiBzbGVlcE1zKG1zOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZldGNoSW5ib3hUb2tlbihlbWFpbDogc3RyaW5nLCBnbVNpZDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaFdpdGhUaW1lb3V0KGAke0JBU0VfVVJMfS9pbmJveC10b2tlbmAsIHtcbiAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICBoZWFkZXJzOiB7XG4gICAgICAuLi5ERUZBVUxUX0hFQURFUlMsXG4gICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgQ29va2llOiBgZ21fc2lkPSR7Z21TaWR9YCxcbiAgICB9LFxuICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgZW1haWwgfSksXG4gIH0pO1xuXG4gIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBnZXQgaW5ib3ggdG9rZW46ICR7cmVzcG9uc2Uuc3RhdHVzfWApO1xuICB9XG5cbiAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcbiAgY29uc3QgdG9rZW4gPSBkYXRhPy5hdXRoPy50b2tlbjtcbiAgaWYgKCF0b2tlbikge1xuICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIGdldCBpbmJveCB0b2tlbicpO1xuICB9XG5cbiAgcmV0dXJuIHRva2VuO1xufVxuXG5hc3luYyBmdW5jdGlvbiBmZXRjaEluYm94VG9rZW5XaXRoUmV0cnkoZW1haWw6IHN0cmluZywgZ21TaWQ6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IGZldGNoSW5ib3hUb2tlbihlbWFpbCwgZ21TaWQpO1xuICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IFN0cmluZyhlcnJvcj8ubWVzc2FnZSB8fCBlcnJvciB8fCAnJykudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAobWVzc2FnZS5pbmNsdWRlcygnNDAxJykpIHtcbiAgICAgIGNvbnN0IHsgZ21TaWQ6IHNpZCB9ID0gYXdhaXQgZmV0Y2hIb21lU2Vzc2lvbldpdGhSZXRyeSgpO1xuICAgICAgcmV0dXJuIGF3YWl0IGZldGNoSW5ib3hUb2tlbihlbWFpbCwgc2lkKTtcbiAgICB9XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn1cblxuLyoqIOWIl+ihqOaOpeWPo+mcgOWQjOaXtuW4piBDb29raWUgZ21fc2lkIOS4jiB4LWluYm94LXRva2Vu77yM5ZCm5YiZ6L+U5ZueIDQwMSAqL1xuZnVuY3Rpb24gcGFyc2VDaGF0Z3B0UGFja2VkVG9rZW4ocGFja2VkOiBzdHJpbmcpOiB7IGdtU2lkOiBzdHJpbmc7IGluYm94OiBzdHJpbmcgfSB7XG4gIGNvbnN0IHQgPSBwYWNrZWQudHJpbSgpO1xuICBpZiAodC5zdGFydHNXaXRoKCd7JykpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgbyA9IEpTT04ucGFyc2UodCkgYXMgeyBnbVNpZD86IHN0cmluZzsgaW5ib3g/OiBzdHJpbmcgfTtcbiAgICAgIGlmICh0eXBlb2Ygby5nbVNpZCA9PT0gJ3N0cmluZycgJiYgdHlwZW9mIG8uaW5ib3ggPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiB7IGdtU2lkOiBvLmdtU2lkLCBpbmJveDogby5pbmJveCB9O1xuICAgICAgfVxuICAgIH0gY2F0Y2gge1xuICAgICAgLyogaWdub3JlICovXG4gICAgfVxuICB9XG4gIHJldHVybiB7IGdtU2lkOiAnJywgaW5ib3g6IHBhY2tlZCB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiBmZXRjaEVtYWlscyhcbiAgaW5ib3hUb2tlbjogc3RyaW5nLFxuICBlbWFpbDogc3RyaW5nLFxuICBnbVNpZDogc3RyaW5nLFxuKTogUHJvbWlzZTxFbWFpbFtdPiB7XG4gIGlmICghaW5ib3hUb2tlbikge1xuICAgIHRocm93IG5ldyBFcnJvcignaW50ZXJuYWwgZXJyb3I6IHRva2VuIG1pc3NpbmcgZm9yIGNoYXRncHQtb3JnLXVrJyk7XG4gIH1cbiAgaWYgKCFnbVNpZCkge1xuICAgIHRocm93IG5ldyBFcnJvcignaW50ZXJuYWwgZXJyb3I6IGdtX3NpZCBtaXNzaW5nIGZvciBjaGF0Z3B0LW9yZy11aycpO1xuICB9XG4gIGNvbnN0IGVuY29kZWRFbWFpbCA9IGVuY29kZVVSSUNvbXBvbmVudChlbWFpbCk7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2hXaXRoVGltZW91dChgJHtCQVNFX1VSTH0vZW1haWxzP2VtYWlsPSR7ZW5jb2RlZEVtYWlsfWAsIHtcbiAgICBtZXRob2Q6ICdHRVQnLFxuICAgIGhlYWRlcnM6IHtcbiAgICAgIC4uLkRFRkFVTFRfSEVBREVSUyxcbiAgICAgIENvb2tpZTogYGdtX3NpZD0ke2dtU2lkfWAsXG4gICAgICAneC1pbmJveC10b2tlbic6IGluYm94VG9rZW4sXG4gICAgfSxcbiAgfSk7XG5cbiAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGdldCBlbWFpbHM6ICR7cmVzcG9uc2Uuc3RhdHVzfWApO1xuICB9XG5cbiAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcblxuICBpZiAoIWRhdGEuc3VjY2Vzcykge1xuICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIGdldCBlbWFpbHMnKTtcbiAgfVxuXG4gIGNvbnN0IHJhd0VtYWlscyA9IGRhdGEuZGF0YT8uZW1haWxzIHx8IFtdO1xuICByZXR1cm4gcmF3RW1haWxzLm1hcCgocmF3OiBhbnkpID0+IG5vcm1hbGl6ZUVtYWlsKHJhdywgZW1haWwpKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlRW1haWwoKTogUHJvbWlzZTxJbnRlcm5hbEVtYWlsSW5mbz4ge1xuICAvKlxuICAgKiBnZW5lcmF0ZS1lbWFpbCDluLjov5Tlm54gNDI577yb5q+P5qyh6YeN6K+V5YmN6YeN5paw5ouJ6aaW6aG15Lul5o2i5pawIGdtX3NpZCAvIF9fQlJPV1NFUl9BVVRI77yM5bm25YGa5oyH5pWw6YCA6YG/44CCXG4gICAqL1xuICBjb25zdCBtYXhBdHRlbXB0cyA9IDY7XG4gIGxldCBsYXN0U3RhdHVzID0gMDtcblxuICBmb3IgKGxldCBhdHRlbXB0ID0gMDsgYXR0ZW1wdCA8IG1heEF0dGVtcHRzOyBhdHRlbXB0KyspIHtcbiAgICBjb25zdCB7IGdtU2lkLCBicm93c2VyVG9rZW4gfSA9IGF3YWl0IGZldGNoSG9tZVNlc3Npb25XaXRoUmV0cnkoKTtcblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2hXaXRoVGltZW91dChgJHtCQVNFX1VSTH0vZ2VuZXJhdGUtZW1haWxgLCB7XG4gICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICAuLi5ERUZBVUxUX0hFQURFUlMsXG4gICAgICAgIENvb2tpZTogYGdtX3NpZD0ke2dtU2lkfWAsXG4gICAgICAgICdYLUluYm94LVRva2VuJzogYnJvd3NlclRva2VuLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDQyOSkge1xuICAgICAgbGFzdFN0YXR1cyA9IDQyOTtcbiAgICAgIGlmIChhdHRlbXB0IDwgbWF4QXR0ZW1wdHMgLSAxKSB7XG4gICAgICAgIGNvbnN0IHdhaXQgPSBNYXRoLm1pbigzMDAwICogMiAqKiBhdHRlbXB0LCA2MF8wMDApO1xuICAgICAgICBhd2FpdCBzbGVlcE1zKHdhaXQpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIGdlbmVyYXRlIGVtYWlsOiA0MjknKTtcbiAgICB9XG5cbiAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICBsYXN0U3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gZ2VuZXJhdGUgZW1haWw6ICR7cmVzcG9uc2Uuc3RhdHVzfWApO1xuICAgIH1cblxuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG5cbiAgICBpZiAoIWRhdGEuc3VjY2Vzcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gZ2VuZXJhdGUgZW1haWwnKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbWFpbCA9IGRhdGEuZGF0YS5lbWFpbCBhcyBzdHJpbmc7XG4gICAgY29uc3QgdG9rZW5Gcm9tQXV0aCA9IGRhdGEuYXV0aD8udG9rZW4gYXMgc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IGluYm94Snd0ID0gdG9rZW5Gcm9tQXV0aCB8fCAoYXdhaXQgZmV0Y2hJbmJveFRva2VuV2l0aFJldHJ5KGVtYWlsLCBnbVNpZCkpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNoYW5uZWw6IENIQU5ORUwsXG4gICAgICBlbWFpbCxcbiAgICAgIHRva2VuOiBKU09OLnN0cmluZ2lmeSh7IGdtU2lkLCBpbmJveDogaW5ib3hKd3QgfSksXG4gICAgfTtcbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGdlbmVyYXRlIGVtYWlsOiAke2xhc3RTdGF0dXMgfHwgJ3Vua25vd24nfWApO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0RW1haWxzKHRva2VuOiBzdHJpbmcsIGVtYWlsOiBzdHJpbmcpOiBQcm9taXNlPEVtYWlsW10+IHtcbiAgaWYgKCF0b2tlbikge1xuICAgIHRocm93IG5ldyBFcnJvcignaW50ZXJuYWwgZXJyb3I6IHRva2VuIG1pc3NpbmcgZm9yIGNoYXRncHQtb3JnLXVrJyk7XG4gIH1cblxuICBsZXQgeyBnbVNpZCwgaW5ib3ggfSA9IHBhcnNlQ2hhdGdwdFBhY2tlZFRva2VuKHRva2VuKTtcbiAgaWYgKCFnbVNpZCkge1xuICAgIGdtU2lkID0gKGF3YWl0IGZldGNoSG9tZVNlc3Npb25XaXRoUmV0cnkoKSkuZ21TaWQ7XG4gIH1cblxuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBmZXRjaEVtYWlscyhpbmJveCwgZW1haWwsIGdtU2lkKTtcbiAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBTdHJpbmcoZXJyb3I/Lm1lc3NhZ2UgfHwgZXJyb3IgfHwgJycpLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKG1lc3NhZ2UuaW5jbHVkZXMoJzQwMScpKSB7XG4gICAgICBjb25zdCBzZXNzID0gYXdhaXQgZmV0Y2hIb21lU2Vzc2lvbldpdGhSZXRyeSgpO1xuICAgICAgY29uc3QgbmV3SW5ib3ggPSBhd2FpdCBmZXRjaEluYm94VG9rZW5XaXRoUmV0cnkoZW1haWwsIHNlc3MuZ21TaWQpO1xuICAgICAgcmV0dXJuIGF3YWl0IGZldGNoRW1haWxzKG5ld0luYm94LCBlbWFpbCwgc2Vzcy5nbVNpZCk7XG4gICAgfVxuICAgIHRocm93IGVycm9yO1xuICB9XG59XG4iXX0=
|
|
@@ -3,8 +3,140 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.generateEmail = generateEmail;
|
|
4
4
|
exports.getEmails = getEmails;
|
|
5
5
|
const normalize_1 = require("../normalize");
|
|
6
|
+
const retry_1 = require("../retry");
|
|
7
|
+
const config_1 = require("../config");
|
|
6
8
|
const CHANNEL = 'dropmail';
|
|
7
|
-
const
|
|
9
|
+
const TOKEN_GENERATE_URL = 'https://dropmail.me/api/token/generate';
|
|
10
|
+
const TOKEN_RENEW_URL = 'https://dropmail.me/api/token/renew';
|
|
11
|
+
/** 申请 1h 令牌,缓存略短于 1h,避免边界过期 */
|
|
12
|
+
const AUTO_TOKEN_CACHE_MS = 50 * 60 * 1000;
|
|
13
|
+
/** 距缓存过期前多久触发 renew(毫秒) */
|
|
14
|
+
const RENEW_BEFORE_EXPIRY_MS = 10 * 60 * 1000;
|
|
15
|
+
function cacheMsForLifetime(lifetime) {
|
|
16
|
+
const s = lifetime.trim().toLowerCase();
|
|
17
|
+
if (s === '1h')
|
|
18
|
+
return 50 * 60 * 1000;
|
|
19
|
+
if (s === '1d')
|
|
20
|
+
return 23 * 60 * 60 * 1000;
|
|
21
|
+
if (s === '7d' || s === '30d' || s === '90d') {
|
|
22
|
+
const days = parseInt(s, 10);
|
|
23
|
+
return Math.max(0, days - 1) * 24 * 60 * 60 * 1000;
|
|
24
|
+
}
|
|
25
|
+
return AUTO_TOKEN_CACHE_MS;
|
|
26
|
+
}
|
|
27
|
+
function dropmailRenewLifetime() {
|
|
28
|
+
const c = (0, config_1.getConfig)().dropmailRenewLifetime?.trim();
|
|
29
|
+
if (c)
|
|
30
|
+
return c;
|
|
31
|
+
const e = typeof process !== 'undefined' && process.env?.DROPMAIL_RENEW_LIFETIME?.trim();
|
|
32
|
+
return e || '1d';
|
|
33
|
+
}
|
|
34
|
+
const TOKEN_HEADERS = {
|
|
35
|
+
Accept: 'application/json',
|
|
36
|
+
'Content-Type': 'application/json',
|
|
37
|
+
Origin: 'https://dropmail.me',
|
|
38
|
+
Referer: 'https://dropmail.me/api/',
|
|
39
|
+
};
|
|
40
|
+
let cachedAfToken = null;
|
|
41
|
+
let tokenFetchInFlight = null;
|
|
42
|
+
function explicitDropmailAuthToken() {
|
|
43
|
+
const fromConfig = (0, config_1.getConfig)().dropmailAuthToken?.trim();
|
|
44
|
+
const fromEnv = typeof process !== 'undefined' && process.env
|
|
45
|
+
? process.env.DROPMAIL_AUTH_TOKEN?.trim() || process.env.DROPMAIL_API_TOKEN?.trim()
|
|
46
|
+
: undefined;
|
|
47
|
+
return fromConfig || fromEnv;
|
|
48
|
+
}
|
|
49
|
+
function dropmailAutoTokenDisabled() {
|
|
50
|
+
if ((0, config_1.getConfig)().dropmailDisableAutoToken) {
|
|
51
|
+
return true;
|
|
52
|
+
}
|
|
53
|
+
const v = typeof process !== 'undefined' && process.env?.DROPMAIL_NO_AUTO_TOKEN?.trim().toLowerCase();
|
|
54
|
+
return v === '1' || v === 'true' || v === 'yes';
|
|
55
|
+
}
|
|
56
|
+
async function fetchAfTokenFromApi() {
|
|
57
|
+
const response = await (0, retry_1.fetchWithTimeout)(TOKEN_GENERATE_URL, {
|
|
58
|
+
method: 'POST',
|
|
59
|
+
headers: TOKEN_HEADERS,
|
|
60
|
+
body: JSON.stringify({ type: 'af', lifetime: '1h' }),
|
|
61
|
+
});
|
|
62
|
+
if (!response.ok) {
|
|
63
|
+
throw new Error(`DropMail token/generate HTTP ${response.status}`);
|
|
64
|
+
}
|
|
65
|
+
const body = (await response.json());
|
|
66
|
+
const token = typeof body.token === 'string' ? body.token.trim() : '';
|
|
67
|
+
if (!token || !token.startsWith('af_')) {
|
|
68
|
+
throw new Error(body.error || 'DropMail token/generate 未返回有效 af_ 令牌');
|
|
69
|
+
}
|
|
70
|
+
return token;
|
|
71
|
+
}
|
|
72
|
+
async function renewAfTokenFromApi(currentToken, lifetime) {
|
|
73
|
+
const response = await (0, retry_1.fetchWithTimeout)(TOKEN_RENEW_URL, {
|
|
74
|
+
method: 'POST',
|
|
75
|
+
headers: TOKEN_HEADERS,
|
|
76
|
+
body: JSON.stringify({ token: currentToken, lifetime }),
|
|
77
|
+
});
|
|
78
|
+
if (!response.ok) {
|
|
79
|
+
throw new Error(`DropMail token/renew HTTP ${response.status}`);
|
|
80
|
+
}
|
|
81
|
+
const body = (await response.json());
|
|
82
|
+
const token = typeof body.token === 'string' ? body.token.trim() : '';
|
|
83
|
+
if (!token || !token.startsWith('af_')) {
|
|
84
|
+
throw new Error(body.error || 'DropMail token/renew 未返回有效 af_ 令牌');
|
|
85
|
+
}
|
|
86
|
+
return token;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* 解析 GraphQL 用的 af_ 令牌:优先配置/环境变量,否则 generate + 缓存,将过期时 renew。
|
|
90
|
+
*/
|
|
91
|
+
async function resolveDropmailAuthToken() {
|
|
92
|
+
const explicit = explicitDropmailAuthToken();
|
|
93
|
+
if (explicit) {
|
|
94
|
+
return explicit;
|
|
95
|
+
}
|
|
96
|
+
if (dropmailAutoTokenDisabled()) {
|
|
97
|
+
throw new Error('DropMail 已禁用自动令牌:请设置 DROPMAIL_AUTH_TOKEN,或 setConfig({ dropmailAuthToken: "af_..." }),见 https://dropmail.me/api/');
|
|
98
|
+
}
|
|
99
|
+
const now = Date.now();
|
|
100
|
+
if (cachedAfToken &&
|
|
101
|
+
now < cachedAfToken.expiresAt - RENEW_BEFORE_EXPIRY_MS) {
|
|
102
|
+
return cachedAfToken.value;
|
|
103
|
+
}
|
|
104
|
+
if (tokenFetchInFlight) {
|
|
105
|
+
return tokenFetchInFlight;
|
|
106
|
+
}
|
|
107
|
+
const renewLifetime = dropmailRenewLifetime();
|
|
108
|
+
tokenFetchInFlight = (async () => {
|
|
109
|
+
try {
|
|
110
|
+
if (cachedAfToken?.value) {
|
|
111
|
+
try {
|
|
112
|
+
const renewed = await renewAfTokenFromApi(cachedAfToken.value, renewLifetime);
|
|
113
|
+
cachedAfToken = {
|
|
114
|
+
value: renewed,
|
|
115
|
+
expiresAt: Date.now() + cacheMsForLifetime(renewLifetime),
|
|
116
|
+
};
|
|
117
|
+
return renewed;
|
|
118
|
+
}
|
|
119
|
+
catch {
|
|
120
|
+
/* 续期失败则重新申请 */
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
const token = await fetchAfTokenFromApi();
|
|
124
|
+
cachedAfToken = {
|
|
125
|
+
value: token,
|
|
126
|
+
expiresAt: Date.now() + AUTO_TOKEN_CACHE_MS,
|
|
127
|
+
};
|
|
128
|
+
return token;
|
|
129
|
+
}
|
|
130
|
+
finally {
|
|
131
|
+
tokenFetchInFlight = null;
|
|
132
|
+
}
|
|
133
|
+
})();
|
|
134
|
+
return tokenFetchInFlight;
|
|
135
|
+
}
|
|
136
|
+
async function dropmailGraphqlUrl() {
|
|
137
|
+
const token = await resolveDropmailAuthToken();
|
|
138
|
+
return `https://dropmail.me/api/graphql/${encodeURIComponent(token)}`;
|
|
139
|
+
}
|
|
8
140
|
const DEFAULT_HEADERS = {
|
|
9
141
|
'Content-Type': 'application/x-www-form-urlencoded',
|
|
10
142
|
};
|
|
@@ -26,7 +158,7 @@ async function graphqlRequest(query, variables) {
|
|
|
26
158
|
if (variables) {
|
|
27
159
|
params.set('variables', JSON.stringify(variables));
|
|
28
160
|
}
|
|
29
|
-
const response = await
|
|
161
|
+
const response = await (0, retry_1.fetchWithTimeout)(await dropmailGraphqlUrl(), {
|
|
30
162
|
method: 'POST',
|
|
31
163
|
headers: DEFAULT_HEADERS,
|
|
32
164
|
body: params.toString(),
|
|
@@ -83,4 +215,4 @@ async function getEmails(token, email) {
|
|
|
83
215
|
const mails = data?.session?.mails || [];
|
|
84
216
|
return mails.map((mail) => (0, normalize_1.normalizeEmail)(flattenMessage(mail, email), email));
|
|
85
217
|
}
|
|
86
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcG1haWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHJvdmlkZXJzL2Ryb3BtYWlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBdURBLHNDQWNDO0FBdUJELDhCQUtDO0FBaEdELDRDQUE4QztBQUU5QyxNQUFNLE9BQU8sR0FBWSxVQUFVLENBQUM7QUFDcEMsTUFBTSxRQUFRLEdBQUcsMENBQTBDLENBQUM7QUFFNUQsTUFBTSxlQUFlLEdBQTJCO0lBQzlDLGNBQWMsRUFBRSxtQ0FBbUM7Q0FDcEQsQ0FBQztBQUVGLE1BQU0sb0JBQW9CLEdBQUcscUVBQXFFLENBQUM7QUFFbkcsTUFBTSxlQUFlLEdBQUc7Ozs7Ozs7RUFPdEIsQ0FBQztBQUVIOztHQUVHO0FBQ0gsS0FBSyxVQUFVLGNBQWMsQ0FBQyxLQUFhLEVBQUUsU0FBK0I7SUFDMUUsTUFBTSxNQUFNLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQztJQUNyQyxNQUFNLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUMzQixJQUFJLFNBQVMsRUFBRSxDQUFDO1FBQ2QsTUFBTSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFRCxNQUFNLFFBQVEsR0FBRyxNQUFNLEtBQUssQ0FBQyxRQUFRLEVBQUU7UUFDckMsTUFBTSxFQUFFLE1BQU07UUFDZCxPQUFPLEVBQUUsZUFBZTtRQUN4QixJQUFJLEVBQUUsTUFBTSxDQUFDLFFBQVEsRUFBRTtLQUN4QixDQUFDLENBQUM7SUFFSCxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQUMsMkJBQTJCLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFRCxNQUFNLElBQUksR0FBRyxNQUFNLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUVuQyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNoQixNQUFNLElBQUksS0FBSyxDQUFDLGtCQUFrQixJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sSUFBSSxlQUFlLEVBQUUsQ0FBQyxDQUFDO0lBQ2xGLENBQUM7SUFFRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDbkIsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSSxLQUFLLFVBQVUsYUFBYTtJQUNqQyxNQUFNLElBQUksR0FBRyxNQUFNLGNBQWMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBRXhELE1BQU0sT0FBTyxHQUFHLElBQUksRUFBRSxnQkFBZ0IsQ0FBQztJQUN2QyxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNyRSxNQUFNLElBQUksS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVELE9BQU87UUFDTCxPQUFPLEVBQUUsT0FBTztRQUNoQixLQUFLLEVBQUUsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPO1FBQ25DLEtBQUssRUFBRSxPQUFPLENBQUMsRUFBRTtRQUNqQixTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVM7S0FDN0IsQ0FBQztBQUNKLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQVMsY0FBYyxDQUFDLElBQVMsRUFBRSxjQUFzQjtJQUN2RCxPQUFPO1FBQ0wsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRTtRQUNqQixJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVEsSUFBSSxFQUFFO1FBQ3pCLEVBQUUsRUFBRSxJQUFJLENBQUMsTUFBTSxJQUFJLGNBQWM7UUFDakMsT0FBTyxFQUFFLElBQUksQ0FBQyxhQUFhLElBQUksRUFBRTtRQUNqQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksSUFBSSxFQUFFO1FBQ3JCLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUU7UUFDckIsV0FBVyxFQUFFLElBQUksQ0FBQyxVQUFVLElBQUksRUFBRTtRQUNsQyxXQUFXLEVBQUUsRUFBRTtLQUNoQixDQUFDO0FBQ0osQ0FBQztBQUVEOzs7O0dBSUc7QUFDSSxLQUFLLFVBQVUsU0FBUyxDQUFDLEtBQWEsRUFBRSxLQUFhO0lBQzFELE1BQU0sSUFBSSxHQUFHLE1BQU0sY0FBYyxDQUFDLGVBQWUsRUFBRSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBRWxFLE1BQU0sS0FBSyxHQUFHLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxJQUFJLEVBQUUsQ0FBQztJQUN6QyxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUEsMEJBQWMsRUFBQyxjQUFjLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDdEYsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEludGVybmFsRW1haWxJbmZvLCBFbWFpbCwgQ2hhbm5lbCB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IG5vcm1hbGl6ZUVtYWlsIH0gZnJvbSAnLi4vbm9ybWFsaXplJztcblxuY29uc3QgQ0hBTk5FTDogQ2hhbm5lbCA9ICdkcm9wbWFpbCc7XG5jb25zdCBCQVNFX1VSTCA9ICdodHRwczovL2Ryb3BtYWlsLm1lL2FwaS9ncmFwaHFsL01ZX1RPS0VOJztcblxuY29uc3QgREVGQVVMVF9IRUFERVJTOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXG59O1xuXG5jb25zdCBDUkVBVEVfU0VTU0lPTl9RVUVSWSA9ICdtdXRhdGlvbiB7aW50cm9kdWNlU2Vzc2lvbiB7aWQsIGV4cGlyZXNBdCwgYWRkcmVzc2Vze2lkLCBhZGRyZXNzfX19JztcblxuY29uc3QgR0VUX01BSUxTX1FVRVJZID0gYHF1ZXJ5ICgkaWQ6IElEISkge1xuICBzZXNzaW9uKGlkOiRpZCkge1xuICAgIG1haWxzIHtcbiAgICAgIGlkLCByYXdTaXplLCBmcm9tQWRkciwgdG9BZGRyLCByZWNlaXZlZEF0LFxuICAgICAgdGV4dCwgaGVhZGVyRnJvbSwgaGVhZGVyU3ViamVjdCwgaHRtbFxuICAgIH1cbiAgfVxufWA7XG5cbi8qKlxuICog5omn6KGMIEdyYXBoUUwg6K+35rGCXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdyYXBocWxSZXF1ZXN0KHF1ZXJ5OiBzdHJpbmcsIHZhcmlhYmxlcz86IFJlY29yZDxzdHJpbmcsIGFueT4pOiBQcm9taXNlPGFueT4ge1xuICBjb25zdCBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG4gIHBhcmFtcy5zZXQoJ3F1ZXJ5JywgcXVlcnkpO1xuICBpZiAodmFyaWFibGVzKSB7XG4gICAgcGFyYW1zLnNldCgndmFyaWFibGVzJywgSlNPTi5zdHJpbmdpZnkodmFyaWFibGVzKSk7XG4gIH1cblxuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKEJBU0VfVVJMLCB7XG4gICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgaGVhZGVyczogREVGQVVMVF9IRUFERVJTLFxuICAgIGJvZHk6IHBhcmFtcy50b1N0cmluZygpLFxuICB9KTtcblxuICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBHcmFwaFFMIHJlcXVlc3QgZmFpbGVkOiAke3Jlc3BvbnNlLnN0YXR1c31gKTtcbiAgfVxuXG4gIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG5cbiAgaWYgKGRhdGEuZXJyb3JzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBHcmFwaFFMIGVycm9yOiAke2RhdGEuZXJyb3JzWzBdPy5tZXNzYWdlIHx8ICdVbmtub3duIGVycm9yJ31gKTtcbiAgfVxuXG4gIHJldHVybiBkYXRhLmRhdGE7XG59XG5cbi8qKlxuICog5Yib5bu65Li05pe26YKu566xXG4gKiBHcmFwaFFMIG11dGF0aW9uOiBpbnRyb2R1Y2VTZXNzaW9uXG4gKiDov5Tlm54gc2Vzc2lvbiBJRCAo5a2Y5YWlIHRva2VuKSDlkozpgq7nrrHlnLDlnYBcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlRW1haWwoKTogUHJvbWlzZTxJbnRlcm5hbEVtYWlsSW5mbz4ge1xuICBjb25zdCBkYXRhID0gYXdhaXQgZ3JhcGhxbFJlcXVlc3QoQ1JFQVRFX1NFU1NJT05fUVVFUlkpO1xuXG4gIGNvbnN0IHNlc3Npb24gPSBkYXRhPy5pbnRyb2R1Y2VTZXNzaW9uO1xuICBpZiAoIXNlc3Npb24gfHwgIXNlc3Npb24uYWRkcmVzc2VzIHx8IHNlc3Npb24uYWRkcmVzc2VzLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIGdlbmVyYXRlIGVtYWlsJyk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGNoYW5uZWw6IENIQU5ORUwsXG4gICAgZW1haWw6IHNlc3Npb24uYWRkcmVzc2VzWzBdLmFkZHJlc3MsXG4gICAgdG9rZW46IHNlc3Npb24uaWQsXG4gICAgZXhwaXJlc0F0OiBzZXNzaW9uLmV4cGlyZXNBdCxcbiAgfTtcbn1cblxuLyoqXG4gKiDlsIYgZHJvcG1haWwg55qE6YKu5Lu25qC85byP5omB5bmz5YyW5Li6IG5vcm1hbGl6ZUVtYWlsIOWPr+WkhOeQhueahOagvOW8j1xuICovXG5mdW5jdGlvbiBmbGF0dGVuTWVzc2FnZShtYWlsOiBhbnksIHJlY2lwaWVudEVtYWlsOiBzdHJpbmcpOiBhbnkge1xuICByZXR1cm4ge1xuICAgIGlkOiBtYWlsLmlkIHx8ICcnLFxuICAgIGZyb206IG1haWwuZnJvbUFkZHIgfHwgJycsXG4gICAgdG86IG1haWwudG9BZGRyIHx8IHJlY2lwaWVudEVtYWlsLFxuICAgIHN1YmplY3Q6IG1haWwuaGVhZGVyU3ViamVjdCB8fCAnJyxcbiAgICB0ZXh0OiBtYWlsLnRleHQgfHwgJycsXG4gICAgaHRtbDogbWFpbC5odG1sIHx8ICcnLFxuICAgIHJlY2VpdmVkX2F0OiBtYWlsLnJlY2VpdmVkQXQgfHwgJycsXG4gICAgYXR0YWNobWVudHM6IFtdLFxuICB9O1xufVxuXG4vKipcbiAqIOiOt+WPlumCruS7tuWIl+ihqFxuICogR3JhcGhRTCBxdWVyeTogc2Vzc2lvbihpZCkgeyBtYWlscyB7Li4ufSB9XG4gKiB0b2tlbiDkuK3lrZjlgqjnmoTmmK8gc2Vzc2lvbiBJRFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0RW1haWxzKHRva2VuOiBzdHJpbmcsIGVtYWlsOiBzdHJpbmcpOiBQcm9taXNlPEVtYWlsW10+IHtcbiAgY29uc3QgZGF0YSA9IGF3YWl0IGdyYXBocWxSZXF1ZXN0KEdFVF9NQUlMU19RVUVSWSwgeyBpZDogdG9rZW4gfSk7XG5cbiAgY29uc3QgbWFpbHMgPSBkYXRhPy5zZXNzaW9uPy5tYWlscyB8fCBbXTtcbiAgcmV0dXJuIG1haWxzLm1hcCgobWFpbDogYW55KSA9PiBub3JtYWxpemVFbWFpbChmbGF0dGVuTWVzc2FnZShtYWlsLCBlbWFpbCksIGVtYWlsKSk7XG59XG4iXX0=
|
|
218
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcG1haWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHJvdmlkZXJzL2Ryb3BtYWlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBdU5BLHNDQWNDO0FBdUJELDhCQUtDO0FBaFFELDRDQUE4QztBQUM5QyxvQ0FBNEM7QUFDNUMsc0NBQXNDO0FBRXRDLE1BQU0sT0FBTyxHQUFZLFVBQVUsQ0FBQztBQUVwQyxNQUFNLGtCQUFrQixHQUFHLHdDQUF3QyxDQUFDO0FBQ3BFLE1BQU0sZUFBZSxHQUFHLHFDQUFxQyxDQUFDO0FBQzlELCtCQUErQjtBQUMvQixNQUFNLG1CQUFtQixHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQzNDLDJCQUEyQjtBQUMzQixNQUFNLHNCQUFzQixHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBRTlDLFNBQVMsa0JBQWtCLENBQUMsUUFBZ0I7SUFDMUMsTUFBTSxDQUFDLEdBQUcsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3hDLElBQUksQ0FBQyxLQUFLLElBQUk7UUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0lBQ3RDLElBQUksQ0FBQyxLQUFLLElBQUk7UUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztJQUMzQyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLEtBQUssS0FBSyxFQUFFLENBQUM7UUFDN0MsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUM3QixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7SUFDckQsQ0FBQztJQUNE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QUNsQyxXQUFXLEVBQUUsRUFBRTtLQUNoQixDQUFDO0FBQ0osQ0FBQztBQUVEOzs7O0dBSUc7QUFDSSxLQUFLLFVBQVUsU0FBUyxDQUFDLEtBQWEsRUFBRSxLQUFhO0lBQzFELE1BQU0sSUFBSSxHQUFHLE1BQU0sY0FBYyxDQUFDLGVBQWUsRUFBRSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBRWxFLE1BQU0sS0FBSyxHQUFHLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxJQUFJLEVBQUUsQ0FBQztJQUN6QyxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUEsMEJBQWMsRUFBQyxjQUFjLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDdEYsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEludGVybmFsRW1haWxJbmZvLCBFbWFpbCwgQ2hhbm5lbCB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IG5vcm1hbGl6ZUVtYWlsIH0gZnJvbSAnLi4vbm9ybWFsaXplJztcbmltcG9ydCB7IGZldGNoV2l0aFRpbWVvdXQgfSBmcm9tICcuLi9yZXRyeSc7XG5pbXBvcnQgeyBnZXRDb25maWcgfSBmcm9tICcuLi9jb25maWcnO1xuXG5jb25zdCBDSEFOTkVMOiBDaGFubmVsID0gJ2Ryb3BtYWlsJztcblxuY29uc3QgVE9LRU5fR0VORVJBVEVfVVJMID0gJ2h0dHBzOi8vZHJvcG1haWwubWUvYXBpL3Rva2VuL2dlbmVyYXRlJztcbmNvbnN0IFRPS0VOX1JFTkVXX1VSTCA9ICdodHRwczovL2Ryb3BtYWlsLm1lL2FwaS90b2tlbi9yZW5ldyc7XG4vKiog55Sz6K+3IDFoIOS7pOeJjO+8jOe8k+WtmOeVpeefreS6jiAxaO+8jOmBv+WFjei+ueeVjOi/h+acnyAqL1xuY29uc3QgQVVUT19UT0tFTl9DQUNIRV9NUyA9IDUwICogNjAgKiAxMDAwO1xuLyoqIOi3nee8k+WtmOi/h+acn+WJjeWkmuS5heinpuWPkSByZW5ld++8iOavq+enku+8iSAqL1xuY29uc3QgUkVORVdfQkVGT1JFX0VYUElSWV9NUyA9IDEwICogNjAgKiAxMDAwO1xuXG5mdW5jdGlvbiBjYWNoZU1zRm9yTGlmZXRpbWUobGlmZXRpbWU6IHN0cmluZyk6IG51bWJlciB7XG4gIGNvbnN0IHMgPSBsaWZldGltZS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgaWYgKHMgPT09ICcxaCcpIHJldHVybiA1MCAqIDYwICogMTAwMDtcbiAgaWYgKHMgPT09ICcxZCcpIHJldHVybiAyMyAqIDYwICogNjAgKiAxMDAwO1xuICBpZiAocyA9PT0gJzdkJyB8fCBzID09PSAnMzBkJyB8fCBzID09PSAnOTBkJykge1xuICAgIGNvbnN0IGRheXMgPSBwYXJzZUludChzLCAxMCk7XG4gICAgcmV0dXJuIE1hdGgubWF4KDAsIGRheXMgLSAxKSAqIDI0ICogNjAgKiA2MCAqIDEwMDA7XG4gIH1cbiAgcmV0dXJuIEFVVE9fVE9LRU5fQ0FDSEVfTVM7XG59XG5cbmZ1bmN0aW9uIGRyb3BtYWlsUmVuZXdMaWZldGltZSgpOiBzdHJpbmcge1xuICBjb25zdCBjID0gZ2V0Q29uZmlnKCkuZHJvcG1haWxSZW5ld0xpZmV0aW1lPy50cmltKCk7XG4gIGlmIChjKSByZXR1cm4gYztcbiAgY29uc3QgZSA9XG4gICAgdHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmIHByb2Nlc3MuZW52Py5EUk9QTUFJTF9SRU5FV19MSUZFVElNRT8udHJpbSgpO1xuICByZXR1cm4gZSB8fCAnMWQnO1xufVxuXG5jb25zdCBUT0tFTl9IRUFERVJTOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICBBY2NlcHQ6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgT3JpZ2luOiAnaHR0cHM6Ly9kcm9wbWFpbC5tZScsXG4gIFJlZmVyZXI6ICdodHRwczovL2Ryb3BtYWlsLm1lL2FwaS8nLFxufTtcblxubGV0IGNhY2hlZEFmVG9rZW46IHsgdmFsdWU6IHN0cmluZzsgZXhwaXJlc0F0OiBudW1iZXIgfSB8IG51bGwgPSBudWxsO1xubGV0IHRva2VuRmV0Y2hJbkZsaWdodDogUHJvbWlzZTxzdHJpbmc+IHwgbnVsbCA9IG51bGw7XG5cbmZ1bmN0aW9uIGV4cGxpY2l0RHJvcG1haWxBdXRoVG9rZW4oKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgZnJvbUNvbmZpZyA9IGdldENvbmZpZygpLmRyb3BtYWlsQXV0aFRva2VuPy50cmltKCk7XG4gIGNvbnN0IGZyb21FbnYgPVxuICAgIHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJiBwcm9jZXNzLmVudlxuICAgICAgPyBwcm9jZXNzLmVudi5EUk9QTUFJTF9BVVRIX1RPS0VOPy50cmltKCkgfHwgcHJvY2Vzcy5lbnYuRFJPUE1BSUxfQVBJX1RPS0VOPy50cmltKClcbiAgICAgIDogdW5kZWZpbmVkO1xuICByZXR1cm4gZnJvbUNvbmZpZyB8fCBmcm9tRW52O1xufVxuXG5mdW5jdGlvbiBkcm9wbWFpbEF1dG9Ub2tlbkRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICBpZiAoZ2V0Q29uZmlnKCkuZHJvcG1haWxEaXNhYmxlQXV0b1Rva2VuKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgY29uc3QgdiA9IHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJiBwcm9jZXNzLmVudj8uRFJPUE1BSUxfTk9fQVVUT19UT0tFTj8udHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiB2ID09PSAnMScgfHwgdiA9PT0gJ3RydWUnIHx8IHYgPT09ICd5ZXMnO1xufVxuXG5hc3luYyBmdW5jdGlvbiBmZXRjaEFmVG9rZW5Gcm9tQXBpKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2hXaXRoVGltZW91dChUT0tFTl9HRU5FUkFURV9VUkwsIHtcbiAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICBoZWFkZXJzOiBUT0tFTl9IRUFERVJTLFxuICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgdHlwZTogJ2FmJywgbGlmZXRpbWU6ICcxaCcgfSksXG4gIH0pO1xuXG4gIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYERyb3BNYWlsIHRva2VuL2dlbmVyYXRlIEhUVFAgJHtyZXNwb25zZS5zdGF0dXN9YCk7XG4gIH1cblxuICBjb25zdCBib2R5ID0gKGF3YWl0IHJlc3BvbnNlLmpzb24oKSkgYXMgeyB0b2tlbj86IHN0cmluZzsgZXJyb3I/OiBzdHJpbmcgfTtcbiAgY29uc3QgdG9rZW4gPSB0eXBlb2YgYm9keS50b2tlbiA9PT0gJ3N0cmluZycgPyBib2R5LnRva2VuLnRyaW0oKSA6ICcnO1xuICBpZiAoIXRva2VuIHx8ICF0b2tlbi5zdGFydHNXaXRoKCdhZl8nKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGJvZHkuZXJyb3IgfHwgJ0Ryb3BNYWlsIHRva2VuL2dlbmVyYXRlIOacqui/lOWbnuacieaViCBhZl8g5Luk54mMJyxcbiAgICApO1xuICB9XG4gIHJldHVybiB0b2tlbjtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVuZXdBZlRva2VuRnJvbUFwaShjdXJyZW50VG9rZW46IHN0cmluZywgbGlmZXRpbWU6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2hXaXRoVGltZW91dChUT0tFTl9SRU5FV19VUkwsIHtcbiAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICBoZWFkZXJzOiBUT0tFTl9IRUFERVJTLFxuICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgdG9rZW46IGN1cnJlbnRUb2tlbiwgbGlmZXRpbWUgfSksXG4gIH0pO1xuXG4gIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYERyb3BNYWlsIHRva2VuL3JlbmV3IEhUVFAgJHtyZXNwb25zZS5zdGF0dXN9YCk7XG4gIH1cblxuICBjb25zdCBib2R5ID0gKGF3YWl0IHJlc3BvbnNlLmpzb24oKSkgYXMgeyB0b2tlbj86IHN0cmluZzsgZXJyb3I/OiBzdHJpbmcgfTtcbiAgY29uc3QgdG9rZW4gPSB0eXBlb2YgYm9keS50b2tlbiA9PT0gJ3N0cmluZycgPyBib2R5LnRva2VuLnRyaW0oKSA6ICcnO1xuICBpZiAoIXRva2VuIHx8ICF0b2tlbi5zdGFydHNXaXRoKCdhZl8nKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihib2R5LmVycm9yIHx8ICdEcm9wTWFpbCB0b2tlbi9yZW5ldyDmnKrov5Tlm57mnInmlYggYWZfIOS7pOeJjCcpO1xuICB9XG4gIHJldHVybiB0b2tlbjtcbn1cblxuLyoqXG4gKiDop6PmnpAgR3JhcGhRTCDnlKjnmoQgYWZfIOS7pOeJjO+8muS8mOWFiOmFjee9ri/njq/looPlj5jph4/vvIzlkKbliJkgZ2VuZXJhdGUgKyDnvJPlrZjvvIzlsIbov4fmnJ/ml7YgcmVuZXfjgIJcbiAqL1xuYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZURyb3BtYWlsQXV0aFRva2VuKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGV4cGxpY2l0ID0gZXhwbGljaXREcm9wbWFpbEF1dGhUb2tlbigpO1xuICBpZiAoZXhwbGljaXQpIHtcbiAgICByZXR1cm4gZXhwbGljaXQ7XG4gIH1cblxuICBpZiAoZHJvcG1haWxBdXRvVG9rZW5EaXNhYmxlZCgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ0Ryb3BNYWlsIOW3suemgeeUqOiHquWKqOS7pOeJjO+8muivt+iuvue9riBEUk9QTUFJTF9BVVRIX1RPS0VO77yM5oiWIHNldENvbmZpZyh7IGRyb3BtYWlsQXV0aFRva2VuOiBcImFmXy4uLlwiIH0p77yM6KeBIGh0dHBzOi8vZHJvcG1haWwubWUvYXBpLycsXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gIGlmIChcbiAgICBjYWNoZWRBZlRva2VuICYmXG4gICAgbm93IDwgY2FjaGVkQWZUb2tlbi5leHBpcmVzQXQgLSBSRU5FV19CRUZPUkVfRVhQSVJZX01TXG4gICkge1xuICAgIHJldHVybiBjYWNoZWRBZlRva2VuLnZhbHVlO1xuICB9XG5cbiAgaWYgKHRva2VuRmV0Y2hJbkZsaWdodCkge1xuICAgIHJldHVybiB0b2tlbkZldGNoSW5GbGlnaHQ7XG4gIH1cblxuICBjb25zdCByZW5ld0xpZmV0aW1lID0gZHJvcG1haWxSZW5ld0xpZmV0aW1lKCk7XG5cbiAgdG9rZW5GZXRjaEluRmxpZ2h0ID0gKGFzeW5jICgpID0+IHtcbiAgICB0cnkge1xuICAgICAgaWYgKGNhY2hlZEFmVG9rZW4/LnZhbHVlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcmVuZXdlZCA9IGF3YWl0IHJlbmV3QWZUb2tlbkZyb21BcGkoXG4gICAgICAgICAgICBjYWNoZWRBZlRva2VuLnZhbHVlLFxuICAgICAgICAgICAgcmVuZXdMaWZldGltZSxcbiAgICAgICAgICApO1xuICAgICAgICAgIGNhY2hlZEFmVG9rZW4gPSB7XG4gICAgICAgICAgICB2YWx1ZTogcmVuZXdlZCxcbiAgICAgICAgICAgIGV4cGlyZXNBdDogRGF0ZS5ub3coKSArIGNhY2hlTXNGb3JMaWZldGltZShyZW5ld0xpZmV0aW1lKSxcbiAgICAgICAgICB9O1xuICAgICAgICAgIHJldHVybiByZW5ld2VkO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAvKiDnu63mnJ/lpLHotKXliJnph43mlrDnlLPor7cgKi9cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCB0b2tlbiA9IGF3YWl0IGZldGNoQWZUb2tlbkZyb21BcGkoKTtcbiAgICAgIGNhY2hlZEFmVG9rZW4gPSB7XG4gICAgICAgIHZhbHVlOiB0b2tlbixcbiAgICAgICAgZXhwaXJlc0F0OiBEYXRlLm5vdygpICsgQVVUT19UT0tFTl9DQUNIRV9NUyxcbiAgICAgIH07XG4gICAgICByZXR1cm4gdG9rZW47XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRva2VuRmV0Y2hJbkZsaWdodCA9IG51bGw7XG4gICAgfVxuICB9KSgpO1xuXG4gIHJldHVybiB0b2tlbkZldGNoSW5GbGlnaHQ7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGRyb3BtYWlsR3JhcGhxbFVybCgpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCB0b2tlbiA9IGF3YWl0IHJlc29sdmVEcm9wbWFpbEF1dGhUb2tlbigpO1xuICByZXR1cm4gYGh0dHBzOi8vZHJvcG1haWwubWUvYXBpL2dyYXBocWwvJHtlbmNvZGVVUklDb21wb25lbnQodG9rZW4pfWA7XG59XG5cbmNvbnN0IERFRkFVTFRfSEVBREVSUzogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxufTtcblxuY29uc3QgQ1JFQVRFX1NFU1NJT05fUVVFUlkgPSAnbXV0YXRpb24ge2ludHJvZHVjZVNlc3Npb24ge2lkLCBleHBpcmVzQXQsIGFkZHJlc3Nlc3tpZCwgYWRkcmVzc319fSc7XG5cbmNvbnN0IEdFVF9NQUlMU19RVUVSWSA9IGBxdWVyeSAoJGlkOiBJRCEpIHtcbiAgc2Vzc2lvbihpZDokaWQpIHtcbiAgICBtYWlscyB7XG4gICAgICBpZCwgcmF3U2l6ZSwgZnJvbUFkZHIsIHRvQWRkciwgcmVjZWl2ZWRBdCxcbiAgICAgIHRleHQsIGhlYWRlckZyb20sIGhlYWRlclN1YmplY3QsIGh0bWxcbiAgICB9XG4gIH1cbn1gO1xuXG4vKipcbiAqIOaJp+ihjCBHcmFwaFFMIOivt+axglxuICovXG5hc3luYyBmdW5jdGlvbiBncmFwaHFsUmVxdWVzdChxdWVyeTogc3RyaW5nLCB2YXJpYWJsZXM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogUHJvbWlzZTxhbnk+IHtcbiAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuICBwYXJhbXMuc2V0KCdxdWVyeScsIHF1ZXJ5KTtcbiAgaWYgKHZhcmlhYmxlcykge1xuICAgIHBhcmFtcy5zZXQoJ3ZhcmlhYmxlcycsIEpTT04uc3RyaW5naWZ5KHZhcmlhYmxlcykpO1xuICB9XG5cbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaFdpdGhUaW1lb3V0KGF3YWl0IGRyb3BtYWlsR3JhcGhxbFVybCgpLCB7XG4gICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgaGVhZGVyczogREVGQVVMVF9IRUFERVJTLFxuICAgIGJvZHk6IHBhcmFtcy50b1N0cmluZygpLFxuICB9KTtcblxuICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBHcmFwaFFMIHJlcXVlc3QgZmFpbGVkOiAke3Jlc3BvbnNlLnN0YXR1c31gKTtcbiAgfVxuXG4gIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG5cbiAgaWYgKGRhdGEuZXJyb3JzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBHcmFwaFFMIGVycm9yOiAke2RhdGEuZXJyb3JzWzBdPy5tZXNzYWdlIHx8ICdVbmtub3duIGVycm9yJ31gKTtcbiAgfVxuXG4gIHJldHVybiBkYXRhLmRhdGE7XG59XG5cbi8qKlxuICog5Yib5bu65Li05pe26YKu566xXG4gKiBHcmFwaFFMIG11dGF0aW9uOiBpbnRyb2R1Y2VTZXNzaW9uXG4gKiDov5Tlm54gc2Vzc2lvbiBJRCAo5a2Y5YWlIHRva2VuKSDlkozpgq7nrrHlnLDlnYBcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlRW1haWwoKTogUHJvbWlzZTxJbnRlcm5hbEVtYWlsSW5mbz4ge1xuICBjb25zdCBkYXRhID0gYXdhaXQgZ3JhcGhxbFJlcXVlc3QoQ1JFQVRFX1NFU1NJT05fUVVFUlkpO1xuXG4gIGNvbnN0IHNlc3Npb24gPSBkYXRhPy5pbnRyb2R1Y2VTZXNzaW9uO1xuICBpZiAoIXNlc3Npb24gfHwgIXNlc3Npb24uYWRkcmVzc2VzIHx8IHNlc3Npb24uYWRkcmVzc2VzLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIGdlbmVyYXRlIGVtYWlsJyk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGNoYW5uZWw6IENIQU5ORUwsXG4gICAgZW1haWw6IHNlc3Npb24uYWRkcmVzc2VzWzBdLmFkZHJlc3MsXG4gICAgdG9rZW46IHNlc3Npb24uaWQsXG4gICAgZXhwaXJlc0F0OiBzZXNzaW9uLmV4cGlyZXNBdCxcbiAgfTtcbn1cblxuLyoqXG4gKiDlsIYgZHJvcG1haWwg55qE6YKu5Lu25qC85byP5omB5bmz5YyW5Li6IG5vcm1hbGl6ZUVtYWlsIOWPr+WkhOeQhueahOagvOW8j1xuICovXG5mdW5jdGlvbiBmbGF0dGVuTWVzc2FnZShtYWlsOiBhbnksIHJlY2lwaWVudEVtYWlsOiBzdHJpbmcpOiBhbnkge1xuICByZXR1cm4ge1xuICAgIGlkOiBtYWlsLmlkIHx8ICcnLFxuICAgIGZyb206IG1haWwuZnJvbUFkZHIgfHwgJycsXG4gICAgdG86IG1haWwudG9BZGRyIHx8IHJlY2lwaWVudEVtYWlsLFxuICAgIHN1YmplY3Q6IG1haWwuaGVhZGVyU3ViamVjdCB8fCAnJyxcbiAgICB0ZXh0OiBtYWlsLnRleHQgfHwgJycsXG4gICAgaHRtbDogbWFpbC5odG1sIHx8ICcnLFxuICAgIHJlY2VpdmVkX2F0OiBtYWlsLnJlY2VpdmVkQXQgfHwgJycsXG4gICAgYXR0YWNobWVudHM6IFtdLFxuICB9O1xufVxuXG4vKipcbiAqIOiOt+WPlumCruS7tuWIl+ihqFxuICogR3JhcGhRTCBxdWVyeTogc2Vzc2lvbihpZCkgeyBtYWlscyB7Li4ufSB9XG4gKiB0b2tlbiDkuK3lrZjlgqjnmoTmmK8gc2Vzc2lvbiBJRFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0RW1haWxzKHRva2VuOiBzdHJpbmcsIGVtYWlsOiBzdHJpbmcpOiBQcm9taXNlPEVtYWlsW10+IHtcbiAgY29uc3QgZGF0YSA9IGF3YWl0IGdyYXBocWxSZXF1ZXN0KEdFVF9NQUlMU19RVUVSWSwgeyBpZDogdG9rZW4gfSk7XG5cbiAgY29uc3QgbWFpbHMgPSBkYXRhPy5zZXNzaW9uPy5tYWlscyB8fCBbXTtcbiAgcmV0dXJuIG1haWxzLm1hcCgobWFpbDogYW55KSA9PiBub3JtYWxpemVFbWFpbChmbGF0dGVuTWVzc2FnZShtYWlsLCBlbWFpbCksIGVtYWlsKSk7XG59XG4iXX0=
|
|
@@ -12,6 +12,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
12
12
|
exports.generateEmail = generateEmail;
|
|
13
13
|
exports.getEmails = getEmails;
|
|
14
14
|
const normalize_1 = require("../normalize");
|
|
15
|
+
const retry_1 = require("../retry");
|
|
15
16
|
const CHANNEL = 'guerrillamail';
|
|
16
17
|
const BASE_URL = 'https://api.guerrillamail.com/ajax.php';
|
|
17
18
|
/**
|
|
@@ -20,7 +21,7 @@ const BASE_URL = 'https://api.guerrillamail.com/ajax.php';
|
|
|
20
21
|
* 返回 email_addr + sid_token(用于后续获取邮件)
|
|
21
22
|
*/
|
|
22
23
|
async function generateEmail() {
|
|
23
|
-
const response = await
|
|
24
|
+
const response = await (0, retry_1.fetchWithTimeout)(`${BASE_URL}?f=get_email_address&lang=en`, {
|
|
24
25
|
method: 'GET',
|
|
25
26
|
headers: {
|
|
26
27
|
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
|
|
@@ -46,7 +47,7 @@ async function generateEmail() {
|
|
|
46
47
|
* 返回 list 数组,每个元素包含 mail_id, mail_from, mail_subject, mail_body 等
|
|
47
48
|
*/
|
|
48
49
|
async function getEmails(token, email) {
|
|
49
|
-
const response = await
|
|
50
|
+
const response = await (0, retry_1.fetchWithTimeout)(`${BASE_URL}?f=check_email&seq=0&sid_token=${encodeURIComponent(token)}`, {
|
|
50
51
|
method: 'GET',
|
|
51
52
|
headers: {
|
|
52
53
|
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
|
|
@@ -68,4 +69,4 @@ async function getEmails(token, email) {
|
|
|
68
69
|
isRead: item.mail_read === 1,
|
|
69
70
|
}, email));
|
|
70
71
|
}
|
|
71
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
72
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3VlcnJpbGxhbWFpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcm92aWRlcnMvZ3VlcnJpbGxhbWFpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7O0dBUUc7O0FBY0gsc0NBd0JDO0FBT0QsOEJBeUJDO0FBbkVELDRDQUE4QztBQUM5QyxvQ0FBNEM7QUFFNUMsTUFBTSxPQUFPLEdBQVksZUFBZSxDQUFDO0FBQ3pDLE1BQU0sUUFBUSxHQUFHLHdDQUF3QyxDQUFDO0FBRTFEOzs7O0dBSUc7QUFDSSxLQUFLLFVBQVUsYUFBYTtJQUNqQyxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUEsd0JBQWdCLEVBQUMsR0FBRyxRQUFRLDhCQUE4QixFQUFFO1FBQ2pGLE1BQU0sRUFBRSxLQUFLO1FBQ2IsT0FBTyxFQUFFO1lBQ1AsWUFBWSxFQUFFLDhEQUE4RDtTQUM3RTtLQUNGLENBQUMsQ0FBQztJQUVILElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDakIsTUFBTSxJQUFJLEtBQUssQ0FBQyw2QkFBNkIsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVELE1BQU0sSUFBSSxHQUFHLE1BQU0sUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO0lBRW5DLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3hDLE1BQU0sSUFBSSxLQUFLLENBQUMsMkRBQTJELENBQUMsQ0FBQztJQUMvRSxDQUFDO0lBRUQsT0FBTztRQUNMLE9BQU8sRUFBRSxPQUFPO1FBQ2hCLEtBQUssRUFBRSxJQUFJLENBQUMsVUFBVTtRQUN0QixLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVM7UUFDckIsU0FBUyxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVM7S0FDbkYsQ0FBQztBQUNKLENBQUM7QUFFRDs7OztHQUlHO0FBQ0ksS0FBSyxVQUFVLFNBQVMsQ0FBQyxLQUFhLEVBQUUsS0FBYTtJQUMxRCxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUEsd0JBQWdCLEVBQUMsR0FBRyxRQUFRLGtDQUFrQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFO1FBQ2hILE1BQU0sRUFBRSxLQUFLO1FBQ2IsT0FBTyxFQUFFO1lBQ1AsWUFBWSxFQUFFLDhEQUE4RDtTQUM3RTtLQUNGLENBQUMsQ0FBQztJQUVILElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDakIsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVELE1BQU0sSUFBSSxHQUFHLE1BQU0sUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ25DLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFFdkQsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxJQUFBLDBCQUFjLEVBQUM7UUFDNUMsRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFPO1FBQ2hCLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUztRQUNwQixFQUFFLEVBQUUsS0FBSztRQUNULE9BQU8sRUFBRSxJQUFJLENBQUMsWUFBWTtRQUMxQixJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFJLEVBQUU7UUFDL0MsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLElBQUksRUFBRTtRQUMxQixJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsSUFBSSxFQUFFO1FBQzFCLE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUyxLQUFLLENBQUM7S0FDN0IsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ2IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR3VlcnJpbGxhIE1haWwg5rig6YGT5a6e546wXG4gKiBBUEkg5paH5qGjOiBodHRwczovL3d3dy5ndWVycmlsbGFtYWlsLmNvbS9HdWVycmlsbGFNYWlsQVBJLmh0bWxcbiAqIFxuICog54m554K5OlxuICogLSDml6DpnIDorqTor4HvvIzlhazlvIAgSlNPTiBBUElcbiAqIC0g6YCa6L+HIHNpZF90b2tlbiDnu7TmjIHkvJror51cbiAqIC0g6YKu566x5pyJ5pWI5pyfIDYwIOWIhumSn1xuICovXG5cbmltcG9ydCB7IEludGVybmFsRW1haWxJbmZvLCBFbWFpbCwgQ2hhbm5lbCB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IG5vcm1hbGl6ZUVtYWlsIH0gZnJvbSAnLi4vbm9ybWFsaXplJztcbmltcG9ydCB7IGZldGNoV2l0aFRpbWVvdXQgfSBmcm9tICcuLi9yZXRyeSc7XG5cbmNvbnN0IENIQU5ORUw6IENoYW5uZWwgPSAnZ3VlcnJpbGxhbWFpbCc7XG5jb25zdCBCQVNFX1VSTCA9ICdodHRwczovL2FwaS5ndWVycmlsbGFtYWlsLmNvbS9hamF4LnBocCc7XG5cbi8qKlxuICog5Yib5bu65Li05pe26YKu566xXG4gKiBBUEk6IEdFVCBhamF4LnBocD9mPWdldF9lbWFpbF9hZGRyZXNzXG4gKiDov5Tlm54gZW1haWxfYWRkciArIHNpZF90b2tlbu+8iOeUqOS6juWQjue7reiOt+WPlumCruS7tu+8iVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVFbWFpbCgpOiBQcm9taXNlPEludGVybmFsRW1haWxJbmZvPiB7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2hXaXRoVGltZW91dChgJHtCQVNFX1VSTH0/Zj1nZXRfZW1haWxfYWRkcmVzcyZsYW5nPWVuYCwge1xuICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgaGVhZGVyczoge1xuICAgICAgJ1VzZXItQWdlbnQnOiAnTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2JyxcbiAgICB9LFxuICB9KTtcblxuICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gZ2VuZXJhdGUgZW1haWw6ICR7cmVzcG9uc2Uuc3RhdHVzfWApO1xuICB9XG5cbiAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcblxuICBpZiAoIWRhdGEuZW1haWxfYWRkciB8fCAhZGF0YS5zaWRfdG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBnZW5lcmF0ZSBlbWFpbDogbWlzc2luZyBlbWFpbF9hZGRyIG9yIHNpZF90b2tlbicpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBjaGFubmVsOiBDSEFOTkVMLFxuICAgIGVtYWlsOiBkYXRhLmVtYWlsX2FkZHIsXG4gICAgdG9rZW46IGRhdGEuc2lkX3Rva2VuLFxuICAgIGV4cGlyZXNBdDogZGF0YS5lbWFpbF90aW1lc3RhbXAgPyAoZGF0YS5lbWFpbF90aW1lc3RhbXAgKyAzNjAwKSAqIDEwMDAgOiB1bmRlZmluZWQsXG4gIH07XG59XG5cbi8qKlxuICog6I635Y+W6YKu5Lu25YiX6KGoXG4gKiBBUEk6IEdFVCBhamF4LnBocD9mPWNoZWNrX2VtYWlsJnNlcT0wJnNpZF90b2tlbj14eHhcbiAqIOi/lOWbniBsaXN0IOaVsOe7hO+8jOavj+S4quWFg+e0oOWMheWQqyBtYWlsX2lkLCBtYWlsX2Zyb20sIG1haWxfc3ViamVjdCwgbWFpbF9ib2R5IOetiVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0RW1haWxzKHRva2VuOiBzdHJpbmcsIGVtYWlsOiBzdHJpbmcpOiBQcm9taXNlPEVtYWlsW10+IHtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaFdpdGhUaW1lb3V0KGAke0JBU0VfVVJMfT9mPWNoZWNrX2VtYWlsJnNlcT0wJnNpZF90b2tlbj0ke2VuY29kZVVSSUNvbXBvbmVudCh0b2tlbil9YCwge1xuICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgaGVhZGVyczoge1xuICAgICAgJ1VzZXItQWdlbnQnOiAnTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2JyxcbiAgICB9LFxuICB9KTtcblxuICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gZ2V0IGVtYWlsczogJHtyZXNwb25zZS5zdGF0dXN9YCk7XG4gIH1cblxuICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICBjb25zdCBsaXN0ID0gQXJyYXkuaXNBcnJheShkYXRhLmxpc3QpID8gZGF0YS5saXN0IDogW107XG5cbiAgcmV0dXJuIGxpc3QubWFwKChpdGVtOiBhbnkpID0+IG5vcm1hbGl6ZUVtYWlsKHtcbiAgICBpZDogaXRlbS5tYWlsX2lkLFxuICAgIGZyb206IGl0ZW0ubWFpbF9mcm9tLFxuICAgIHRvOiBlbWFpbCxcbiAgICBzdWJqZWN0OiBpdGVtLm1haWxfc3ViamVjdCxcbiAgICB0ZXh0OiBpdGVtLm1haWxfYm9keSB8fCBpdGVtLm1haWxfZXhjZXJwdCB8fCAnJyxcbiAgICBodG1sOiBpdGVtLm1haWxfYm9keSB8fCAnJyxcbiAgICBkYXRlOiBpdGVtLm1haWxfZGF0ZSB8fCAnJyxcbiAgICBpc1JlYWQ6IGl0ZW0ubWFpbF9yZWFkID09PSAxLFxuICB9LCBlbWFpbCkpO1xufVxuIl19
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { InternalEmailInfo, Email } from '../types';
|
|
2
2
|
export declare function generateEmail(): Promise<InternalEmailInfo>;
|
|
3
|
-
export declare function getEmails(email: string): Promise<Email[]>;
|
|
3
|
+
export declare function getEmails(email: string, apiPathKey: string): Promise<Email[]>;
|
|
@@ -3,9 +3,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.generateEmail = generateEmail;
|
|
4
4
|
exports.getEmails = getEmails;
|
|
5
5
|
const normalize_1 = require("../normalize");
|
|
6
|
+
const retry_1 = require("../retry");
|
|
7
|
+
const linshi_token_1 = require("./linshi-token");
|
|
6
8
|
const CHANNEL = 'linshi-email';
|
|
7
9
|
const BASE_URL = 'https://www.linshi-email.com/api/v1';
|
|
8
|
-
const API_KEY = '552562b8524879814776e52bc8de5c9f';
|
|
9
10
|
const DEFAULT_HEADERS = {
|
|
10
11
|
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36',
|
|
11
12
|
'Content-Type': 'application/json',
|
|
@@ -17,7 +18,8 @@ const DEFAULT_HEADERS = {
|
|
|
17
18
|
'DNT': '1',
|
|
18
19
|
};
|
|
19
20
|
async function generateEmail() {
|
|
20
|
-
const
|
|
21
|
+
const { apiPathKey } = (0, linshi_token_1.randomSyntheticLinshiKey)();
|
|
22
|
+
const response = await (0, retry_1.fetchWithTimeout)(`${BASE_URL}/email/${apiPathKey}`, {
|
|
21
23
|
method: 'POST',
|
|
22
24
|
headers: DEFAULT_HEADERS,
|
|
23
25
|
body: JSON.stringify({}),
|
|
@@ -29,16 +31,26 @@ async function generateEmail() {
|
|
|
29
31
|
if (data.status !== 'ok') {
|
|
30
32
|
throw new Error('Failed to generate email');
|
|
31
33
|
}
|
|
34
|
+
const d = data.data;
|
|
35
|
+
const raw = (typeof d?.email === 'string' && d.email) ||
|
|
36
|
+
(typeof d?.mail === 'string' && d.mail) ||
|
|
37
|
+
(typeof d?.address === 'string' && d.address) ||
|
|
38
|
+
'';
|
|
39
|
+
const email = String(raw).trim();
|
|
40
|
+
if (!email || !email.includes('@')) {
|
|
41
|
+
throw new Error('linshi-email: API 未返回有效邮箱地址(data 为空或缺 email 字段,常见于频率限制:每小时约 10 个 / 每天约 20 个)');
|
|
42
|
+
}
|
|
32
43
|
return {
|
|
33
44
|
channel: CHANNEL,
|
|
34
|
-
email
|
|
35
|
-
expiresAt:
|
|
45
|
+
email,
|
|
46
|
+
expiresAt: d?.expired,
|
|
47
|
+
token: apiPathKey,
|
|
36
48
|
};
|
|
37
49
|
}
|
|
38
|
-
async function getEmails(email) {
|
|
50
|
+
async function getEmails(email, apiPathKey) {
|
|
39
51
|
const encodedEmail = encodeURIComponent(email);
|
|
40
52
|
const timestamp = Date.now();
|
|
41
|
-
const response = await
|
|
53
|
+
const response = await (0, retry_1.fetchWithTimeout)(`${BASE_URL}/refreshmessage/${apiPathKey}/${encodedEmail}?t=${timestamp}`, {
|
|
42
54
|
method: 'GET',
|
|
43
55
|
headers: DEFAULT_HEADERS,
|
|
44
56
|
});
|
|
@@ -52,4 +64,4 @@ async function getEmails(email) {
|
|
|
52
64
|
const rawEmails = data.list || [];
|
|
53
65
|
return rawEmails.map((raw) => (0, normalize_1.normalizeEmail)(raw, email));
|
|
54
66
|
}
|
|
55
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
67
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluc2hpLWVtYWlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Byb3ZpZGVycy9saW5zaGktZW1haWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFtQkEsc0NBc0NDO0FBRUQsOEJBb0JDO0FBOUVELDRDQUE4QztBQUM5QyxvQ0FBNEM7QUFDNUMsaURBQTBEO0FBRTFELE1BQU0sT0FBTyxHQUFZLGNBQWMsQ0FBQztBQUN4QyxNQUFNLFFBQVEsR0FBRyxxQ0FBcUMsQ0FBQztBQUV2RCxNQUFNLGVBQWUsR0FBRztJQUN0QixZQUFZLEVBQUUsaUhBQWlIO0lBQy9ILGNBQWMsRUFBRSxrQkFBa0I7SUFDbEMsUUFBUSxFQUFFLDhCQUE4QjtJQUN4QyxTQUFTLEVBQUUsK0JBQStCO0lBQzFDLFdBQVcsRUFBRSxvRUFBb0U7SUFDakYsa0JBQWtCLEVBQUUsSUFBSTtJQUN4QixvQkFBb0IsRUFBRSxXQUFXO0lBQ2pDLEtBQUssRUFBRSxHQUFHO0NBQ1gsQ0FBQztBQUVLLEtBQUssVUFBVSxhQUFhO0lBQ2pDLE1BQU0sRUFBRSxVQUFVLEVBQUUsR0FBRyxJQUFBLHVDQUF3QixHQUFFLENBQUM7SUFDbEQsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFBLHdCQUFnQixFQUFDLEdBQUcsUUFBUSxVQUFVLFVBQVUsRUFBRSxFQUFFO1FBQ3pFLE1BQU0sRUFBRSxNQUFNO1FBQ2QsT0FBTyxFQUFFLGVBQWU7UUFDeEIsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO0tBQ3pCLENBQUMsQ0FBQztJQUVILElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDakIsTUFBTSxJQUFJLEtBQUssQ0FBQyw2QkFBNkIsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVELE1BQU0sSUFBSSxHQUFHLE1BQU0sUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO0lBRW5DLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLEVBQUUsQ0FBQztRQUN6QixNQUFNLElBQUksS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVELE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDcEIsTUFBTSxHQUFHLEdBQ1AsQ0FBQyxPQUFPLENBQUMsRUFBRSxLQUFLLEtBQUssUUFBUSxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDekMsQ0FBQyxPQUFPLENBQUMsRUFBRSxJQUFJLEtBQUssUUFBUSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDdkMsQ0FBQyxPQUFPLENBQUMsRUFBRSxPQUFPLEtBQUssUUFBUSxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFDN0MsRUFBRSxDQUFDO0lBQ0wsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0lBRWpDLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDbkMsTUFBTSxJQUFJLEtBQUssQ0FDYiw4RUFBOEUsQ0FDL0UsQ0FBQztJQUNKLENBQUM7SUFFRCxPQUFPO1FBQ0wsT0FBTyxFQUFFLE9BQU87UUFDaEIsS0FBSztRQUNMLFNBQVMsRUFBRSxDQUFDLEVBQUUsT0FBTztRQUNyQixLQUFLLEVBQUUsVUFBVTtLQUNsQixDQUFDO0FBQ0osQ0FBQztBQUVNLEtBQUssVUFBVSxTQUFTLENBQUMsS0FBYSxFQUFFLFVBQWtCO0lBQy9ELE1BQU0sWUFBWSxHQUFHLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9DLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUM3QixNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUEsd0JBQWdCLEVBQUMsR0FBRyxRQUFRLG1CQUFtQixVQUFVLElBQUksWUFBWSxNQUFNLFNBQVMsRUFBRSxFQUFFO1FBQ2pILE1BQU0sRUFBRSxLQUFLO1FBQ2IsT0FBTyxFQUFFLGVBQWU7S0FDekIsQ0FBQyxDQUFDO0lBRUgsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNqQixNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRUQsTUFBTSxJQUFJLEdBQUcsTUFBTSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7SUFFbkMsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLElBQUksRUFBRSxDQUFDO1FBQ3pCLE1BQU0sSUFBSSxLQUFLLENBQUMsc0JBQXNCLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7SUFDbEMsT0FBTyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FBQyxJQUFBLDBCQUFjLEVBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDakUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEludGVybmFsRW1haWxJbmZvLCBFbWFpbCwgQ2hhbm5lbCB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IG5vcm1hbGl6ZUVtYWlsIH0gZnJvbSAnLi4vbm9ybWFsaXplJztcbmltcG9ydCB7IGZldGNoV2l0aFRpbWVvdXQgfSBmcm9tICcuLi9yZXRyeSc7XG5pbXBvcnQgeyByYW5kb21TeW50aGV0aWNMaW5zaGlLZXkgfSBmcm9tICcuL2xpbnNoaS10b2tlbic7XG5cbmNvbnN0IENIQU5ORUw6IENoYW5uZWwgPSAnbGluc2hpLWVtYWlsJztcbmNvbnN0IEJBU0VfVVJMID0gJ2h0dHBzOi8vd3d3LmxpbnNoaS1lbWFpbC5jb20vYXBpL3YxJztcblxuY29uc3QgREVGQVVMVF9IRUFERVJTID0ge1xuICAnVXNlci1BZ2VudCc6ICdNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvMTQzLjAuMC4wIFNhZmFyaS81MzcuMzYnLFxuICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAnT3JpZ2luJzogJ2h0dHBzOi8vd3d3LmxpbnNoaS1lbWFpbC5jb20nLFxuICAnUmVmZXJlcic6ICdodHRwczovL3d3dy5saW5zaGktZW1haWwuY29tLycsXG4gICdzZWMtY2gtdWEnOiAnXCJNaWNyb3NvZnQgRWRnZVwiO3Y9XCIxNDNcIiwgXCJDaHJvbWl1bVwiO3Y9XCIxNDNcIiwgXCJOb3QgQShCcmFuZFwiO3Y9XCIyNFwiJyxcbiAgJ3NlYy1jaC11YS1tb2JpbGUnOiAnPzAnLFxuICAnc2VjLWNoLXVhLXBsYXRmb3JtJzogJ1wiV2luZG93c1wiJyxcbiAgJ0ROVCc6ICcxJyxcbn07XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZW5lcmF0ZUVtYWlsKCk6IFByb21pc2U8SW50ZXJuYWxFbWFpbEluZm8+IHtcbiAgY29uc3QgeyBhcGlQYXRoS2V5IH0gPSByYW5kb21TeW50aGV0aWNMaW5zaGlLZXkoKTtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaFdpdGhUaW1lb3V0KGAke0JBU0VfVVJMfS9lbWFpbC8ke2FwaVBhdGhLZXl9YCwge1xuICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgIGhlYWRlcnM6IERFRkFVTFRfSEVBREVSUyxcbiAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7fSksXG4gIH0pO1xuXG4gIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBnZW5lcmF0ZSBlbWFpbDogJHtyZXNwb25zZS5zdGF0dXN9YCk7XG4gIH1cblxuICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuXG4gIGlmIChkYXRhLnN0YXR1cyAhPT0gJ29rJykge1xuICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIGdlbmVyYXRlIGVtYWlsJyk7XG4gIH1cblxuICBjb25zdCBkID0gZGF0YS5kYXRhO1xuICBjb25zdCByYXcgPVxuICAgICh0eXBlb2YgZD8uZW1haWwgPT09ICdzdHJpbmcnICYmIGQuZW1haWwpIHx8XG4gICAgKHR5cGVvZiBkPy5tYWlsID09PSAnc3RyaW5nJyAmJiBkLm1haWwpIHx8XG4gICAgKHR5cGVvZiBkPy5hZGRyZXNzID09PSAnc3RyaW5nJyAmJiBkLmFkZHJlc3MpIHx8XG4gICAgJyc7XG4gIGNvbnN0IGVtYWlsID0gU3RyaW5nKHJhdykudHJpbSgpO1xuXG4gIGlmICghZW1haWwgfHwgIWVtYWlsLmluY2x1ZGVzKCdAJykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAnbGluc2hpLWVtYWlsOiBBUEkg5pyq6L+U5Zue5pyJ5pWI6YKu566x5Zyw5Z2A77yIZGF0YSDkuLrnqbrmiJbnvLogZW1haWwg5a2X5q6177yM5bi46KeB5LqO6aKR546H6ZmQ5Yi277ya5q+P5bCP5pe257qmIDEwIOS4qiAvIOavj+Wkqee6piAyMCDkuKrvvIknLFxuICAgICk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGNoYW5uZWw6IENIQU5ORUwsXG4gICAgZW1haWwsXG4gICAgZXhwaXJlc0F0OiBkPy5leHBpcmVkLFxuICAgIHRva2VuOiBhcGlQYXRoS2V5LFxuICB9O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0RW1haWxzKGVtYWlsOiBzdHJpbmcsIGFwaVBhdGhLZXk6IHN0cmluZyk6IFByb21pc2U8RW1haWxbXT4ge1xuICBjb25zdCBlbmNvZGVkRW1haWwgPSBlbmNvZGVVUklDb21wb25lbnQoZW1haWwpO1xuICBjb25zdCB0aW1lc3RhbXAgPSBEYXRlLm5vdygpO1xuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoV2l0aFRpbWVvdXQoYCR7QkFTRV9VUkx9L3JlZnJlc2htZXNzYWdlLyR7YXBpUGF0aEtleX0vJHtlbmNvZGVkRW1haWx9P3Q9JHt0aW1lc3RhbXB9YCwge1xuICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgaGVhZGVyczogREVGQVVMVF9IRUFERVJTLFxuICB9KTtcblxuICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gZ2V0IGVtYWlsczogJHtyZXNwb25zZS5zdGF0dXN9YCk7XG4gIH1cblxuICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICBcbiAgaWYgKGRhdGEuc3RhdHVzICE9PSAnb2snKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gZ2V0IGVtYWlscycpO1xuICB9XG5cbiAgY29uc3QgcmF3RW1haWxzID0gZGF0YS5saXN0IHx8IFtdO1xuICByZXR1cm4gcmF3RW1haWxzLm1hcCgocmF3OiBhbnkpID0+IG5vcm1hbGl6ZUVtYWlsKHJhdywgZW1haWwpKTtcbn1cbiJdfQ==
|