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
package/dist/retry.js
CHANGED
|
@@ -17,8 +17,13 @@ const DEFAULT_RETRY_OPTIONS = {
|
|
|
17
17
|
};
|
|
18
18
|
/**
|
|
19
19
|
* 默认重试判断
|
|
20
|
-
*
|
|
21
|
-
*
|
|
20
|
+
* 以下错误类型会触发重试:
|
|
21
|
+
* - 网络连接错误(fetch failed, ECONNREFUSED, ECONNRESET 等)
|
|
22
|
+
* - 超时错误(timeout, abort)
|
|
23
|
+
* - DNS 解析失败
|
|
24
|
+
* - HTTP 429 限流
|
|
25
|
+
* - HTTP 4xx/5xx 服务端错误(含状态码的错误消息)
|
|
26
|
+
* 仅 SDK 内部的参数校验类错误不重试
|
|
22
27
|
*/
|
|
23
28
|
function defaultShouldRetry(error) {
|
|
24
29
|
if (!error)
|
|
@@ -40,7 +45,7 @@ function defaultShouldRetry(error) {
|
|
|
40
45
|
if (message.includes('429') || message.includes('too many requests') || message.includes('rate limit')) {
|
|
41
46
|
return true;
|
|
42
47
|
}
|
|
43
|
-
/* HTTP 4xx/5xx
|
|
48
|
+
/* HTTP 4xx/5xx 错误(含状态码的错误消息)→ 重试 */
|
|
44
49
|
const statusMatch = message.match(/:\s*(\d{3})/);
|
|
45
50
|
if (statusMatch) {
|
|
46
51
|
const status = parseInt(statusMatch[1], 10);
|
|
@@ -56,9 +61,9 @@ function sleep(ms) {
|
|
|
56
61
|
}
|
|
57
62
|
/**
|
|
58
63
|
* 带重试的异步操作执行器
|
|
59
|
-
* - 自动重试可恢复的错误(网络错误、超时、5xx)
|
|
64
|
+
* - 自动重试可恢复的错误(网络错误、超时、HTTP 4xx/5xx)
|
|
60
65
|
* - 指数退避避免过度请求
|
|
61
|
-
* - 不可恢复的错误(
|
|
66
|
+
* - 不可恢复的错误(SDK 内部参数校验错误等)直接抛出不重试
|
|
62
67
|
*
|
|
63
68
|
* @param fn 要执行的异步操作
|
|
64
69
|
* @param options 重试配置
|
|
@@ -103,13 +108,39 @@ async function withRetry(fn, options) {
|
|
|
103
108
|
* @param init fetch 选项
|
|
104
109
|
* @param timeoutMs 超时时间(毫秒)
|
|
105
110
|
*/
|
|
106
|
-
|
|
111
|
+
/**
|
|
112
|
+
* 缓存的全局配置快照,避免每次请求都读取
|
|
113
|
+
* 仅在 setConfig 被调用时失效(通过 configVersion 比对)
|
|
114
|
+
*/
|
|
115
|
+
let _cachedFetchConfig = null;
|
|
116
|
+
/**
|
|
117
|
+
* 获取缓存的 fetch 配置
|
|
118
|
+
*/
|
|
119
|
+
function getFetchConfig() {
|
|
107
120
|
const config = (0, config_1.getConfig)();
|
|
108
|
-
|
|
121
|
+
/* 简单的引用比对即可,getConfig 在未变更时返回同一对象 */
|
|
122
|
+
if (!_cachedFetchConfig || _cachedFetchConfig.fetchFn !== (config.customFetch || fetch) || _cachedFetchConfig.timeout !== (config.timeout ?? DEFAULT_RETRY_OPTIONS.timeout)) {
|
|
123
|
+
_cachedFetchConfig = {
|
|
124
|
+
fetchFn: config.customFetch || fetch,
|
|
125
|
+
timeout: config.timeout ?? DEFAULT_RETRY_OPTIONS.timeout,
|
|
126
|
+
version: 0,
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
return _cachedFetchConfig;
|
|
130
|
+
}
|
|
131
|
+
async function fetchWithTimeout(url, init, timeoutMs) {
|
|
132
|
+
const { fetchFn, timeout: defaultTimeout } = getFetchConfig();
|
|
133
|
+
const effectiveTimeout = timeoutMs ?? defaultTimeout;
|
|
109
134
|
const controller = new AbortController();
|
|
110
135
|
const timeoutId = setTimeout(() => controller.abort(), effectiveTimeout);
|
|
111
|
-
/*
|
|
112
|
-
|
|
136
|
+
/*
|
|
137
|
+
* 如果调用方已提供 signal,需要同时监听两个信号(调用方 + 超时)
|
|
138
|
+
* 任一触发则中断请求
|
|
139
|
+
*/
|
|
140
|
+
const externalSignal = init?.signal;
|
|
141
|
+
if (externalSignal) {
|
|
142
|
+
externalSignal.addEventListener('abort', () => controller.abort(), { once: true });
|
|
143
|
+
}
|
|
113
144
|
try {
|
|
114
145
|
const response = await fetchFn(url, {
|
|
115
146
|
...init,
|
|
@@ -127,4 +158,4 @@ async function fetchWithTimeout(url, init, timeoutMs) {
|
|
|
127
158
|
clearTimeout(timeoutId);
|
|
128
159
|
}
|
|
129
160
|
}
|
|
130
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmV0cnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcmV0cnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7R0FHRzs7QUFtRkgsOEJBaUNDO0FBVUQsNENBMkJDO0FBdkpELHFDQUFrQztBQUNsQyxxQ0FBcUM7QUFrQnJDLE1BQU0scUJBQXFCLEdBQTJCO0lBQ3BELFVBQVUsRUFBRSxDQUFDO0lBQ2IsWUFBWSxFQUFFLElBQUk7SUFDbEIsUUFBUSxFQUFFLElBQUk7SUFDZCxPQUFPLEVBQUUsS0FBSztJQUNkLFdBQVcsRUFBRSxrQkFBa0I7Q0FDaEMsQ0FBQztBQUVGOzs7O0dBSUc7QUFDSCxTQUFTLGtCQUFrQixDQUFDLEtBQVU7SUFDcEMsSUFBSSxDQUFDLEtBQUs7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUV6QixNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sSUFBSSxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7SUFFbkUsaUJBQWlCO0lBQ2pCLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUM7UUFDaEMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUM7UUFDM0IsT0FBTyxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUM7UUFDaEMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUM7UUFDOUIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUM7UUFDN0IsT0FBTyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUM7UUFDM0IsT0FBTyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQztRQUNsQyxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztRQUN2QixPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDOUIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsc0JBQXNCO0lBQ3RCLElBQUksT0FBTyxDQUFDLFFBQVEs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Q3BDLEdBQVcsRUFDWCxJQUFrQixFQUNsQixTQUFrQjtJQUVsQixNQUFNLE1BQU0sR0FBRyxJQUFBLGtCQUFTLEdBQUUsQ0FBQztJQUMzQixNQUFNLGdCQUFnQixHQUFHLFNBQVMsSUFBSSxNQUFNLENBQUMsT0FBTyxJQUFJLHFCQUFxQixDQUFDLE9BQU8sQ0FBQztJQUN0RixNQUFNLFVBQVUsR0FBRyxJQUFJLGVBQWUsRUFBRSxDQUFDO0lBQ3pDLE1BQU0sU0FBUyxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztJQUV6RSwyQkFBMkI7SUFDM0IsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLFdBQVcsSUFBSSxLQUFLLENBQUM7SUFFNUMsSUFBSSxDQUFDO1FBQ0gsTUFBTSxRQUFRLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxFQUFFO1lBQ2xDLEdBQUcsSUFBSTtZQUNQLE1BQU0sRUFBRSxVQUFVLENBQUMsTUFBTTtTQUMxQixDQUFDLENBQUM7UUFDSCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBQUMsT0FBTyxLQUFVLEVBQUUsQ0FBQztRQUNwQixJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssWUFBWSxFQUFFLENBQUM7WUFDaEMsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsZ0JBQWdCLE9BQU8sR0FBRyxFQUFFLENBQUMsQ0FBQztRQUN6RSxDQUFDO1FBQ0QsTUFBTSxLQUFLLENBQUM7SUFDZCxDQUFDO1lBQVMsQ0FBQztRQUNULFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMxQixDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICog6YCa55So6YeN6K+V5bel5YW3XG4gKiDmj5Dkvpvor7fmsYLph43or5XjgIHotoXml7bmjqfliLbjgIHmjIfmlbDpgIDpgb/nrYnplJnor6/mgaLlpI3mnLrliLZcbiAqL1xuXG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgeyBnZXRDb25maWcgfSBmcm9tICcuL2NvbmZpZyc7XG5cbi8qKlxuICog6YeN6K+V6YWN572u6YCJ6aG5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmV0cnlPcHRpb25zIHtcbiAgLyoqIOacgOWkp+mHjeivleasoeaVsO+8iOS4jeWQq+mmluasoeivt+axgu+8ie+8jOm7mOiupCAyICovXG4gIG1heFJldHJpZXM/OiBudW1iZXI7XG4gIC8qKiDliJ3lp4vph43or5Xlu7bov5/vvIjmr6vnp5LvvInvvIzpu5jorqQgMTAwMCAqL1xuICBpbml0aWFsRGVsYXk/OiBudW1iZXI7XG4gIC8qKiDmnIDlpKfph43or5Xlu7bov5/vvIjmr6vnp5LvvInvvIzpu5jorqQgNTAwMCAqL1xuICBtYXhEZWxheT86IG51bWJlcjtcbiAgLyoqIOivt+axgui2heaXtuaXtumXtO+8iOavq+enku+8ie+8jOm7mOiupCAxNTAwMCAqL1xuICB0aW1lb3V0PzogbnVtYmVyO1xuICAvKiog5piv5ZCm5a+56K+l6ZSZ6K+v6L+b6KGM6YeN6K+V55qE5Yik5pat5Ye95pWwICovXG4gIHNob3VsZFJldHJ5PzogKGVycm9yOiBhbnkpID0+IGJvb2xlYW47XG59XG5cbmNvbnN0IERFRkFVTFRfUkVUUllfT1BUSU9OUzogUmVxdWlyZWQ8UmV0cnlPcHRpb25zPiA9IHtcbiAgbWF4UmV0cmllczogMixcbiAgaW5pdGlhbERlbGF5OiAxMDAwLFxuICBtYXhEZWxheTogNTAwMCxcbiAgdGltZW91dDogMTUwMDAsXG4gIHNob3VsZFJldHJ5OiBkZWZhdWx0U2hvdWxkUmV0cnksXG59O1xuXG4vKipcbiAqIOm7mOiupOmHjeivleWIpOaWrVxuICog572R57uc6ZSZ6K+v44CB6LaF5pe244CBSFRUUCA0eHgvNXh4IOmUmeivr+Wdh+WPr+mHjeivlVxuICog5LuF5Y+C5pWw5qCh6aqM57G76ZSZ6K+v77yI55SxIFNESyDlhoXpg6jmipvlh7rvvInkuI3ph43or5VcbiAqL1xuZnVuY3Rpb24gZGVmYXVsdFNob3VsZFJldHJ5KGVycm9yOiBhbnkpOiBib29sZWFuIHtcbiAgaWYgKCFlcnJvcikgcmV0dXJuIGZhbHNlO1xuXG4gIGNvbnN0IG1lc3NhZ2UgPSBTdHJpbmcoZXJyb3IubWVzc2FnZSB8fCBlcnJvciB8fCAnJykudG9Mb3dlckNhc2UoKTtcblxuICAvKiDnvZHnu5znuqfliKvplJnor68g4oaSIOmHjeivlSAqL1xuICBpZiAobWVzc2FnZS5pbmNsdWRlcygnZmV0Y2ggZmFpbGVkJykgfHxcbiAgICAgIG1lc3NhZ2UuaW5jbHVkZXMoJ25ldHdvcmsnKSB8fFxuICAgICAgbWVzc2FnZS5pbmNsdWRlcygnZWNvbm5yZWZ1c2VkJykgfHxcbiAgICAgIG1lc3NhZ2UuaW5jbHVkZXMoJ2Vjb25ucmVzZXQnKSB8fFxuICAgICAgbWVzc2FnZS5pbmNsdWRlcygnZXRpbWVkb3V0JykgfHxcbiAgICAgIG1lc3NhZ2UuaW5jbHVkZXMoJ3RpbWVvdXQnKSB8fFxuICAgICAgbWVzc2FnZS5pbmNsdWRlcygnc29ja2V0IGhhbmcgdXAnKSB8fFxuICAgICAgbWVzc2FnZS5pbmNsdWRlcygnZG5zJykgfHxcbiAgICAgIG1lc3NhZ2UuaW5jbHVkZXMoJ2Fib3J0JykpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qIEhUVFAgNDI5IOmZkOa1gSDihpIg6YeN6K+VICovXG4gIGlmIChtZXNzYWdlLmluY2x1ZGVzKCc0MjknKSB8fCBtZXNzYWdlLmluY2x1ZGVzKCd0b28gbWFueSByZXF1ZXN0cycpIHx8IG1lc3NhZ2UuaW5jbHVkZXMoJ3JhdGUgbGltaXQnKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyogSFRUUCA0eHgvNXh4IOmUmeivryDihpIg6YeN6K+VICovXG4gIGNvbnN0IHN0YXR1c01hdGNoID0gbWVzc2FnZS5tYXRjaCgvOlxccyooXFxkezN9KS8pO1xuICBpZiAoc3RhdHVzTWF0Y2gpIHtcbiAgICBjb25zdCBzdGF0dXMgPSBwYXJzZUludChzdGF0dXNNYXRjaFsxXSwgMTApO1xuICAgIHJldHVybiBzdGF0dXMgPj0gNDAwO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIOS8keecoOaMh+Wumuavq+enklxuICovXG5mdW5jdGlvbiBzbGVlcChtczogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpKTtcbn1cblxuLyoqXG4gKiDluKbph43or5XnmoTlvILmraXmk43kvZzmiafooYzlmahcbiAqIC0g6Ieq5Yqo6YeN6K+V5Y+v5oGi5aSN55qE6ZSZ6K+v77yI572R57uc6ZSZ6K+v44CB6LaF5pe244CBNXh477yJXG4gKiAtIOaMh+aVsOmAgOmBv+mBv+WFjei/h+W6puivt+axglxuICogLSDkuI3lj6/mgaLlpI3nmoTplJnor6/vvIg0eHgg5Y+C5pWw6ZSZ6K+v562J77yJ55u05o6l5oqb5Ye65LiN6YeN6K+VXG4gKlxuICogQHBhcmFtIGZuIOimgeaJp+ihjOeahOW8guatpeaTjeS9nFxuICogQHBhcmFtIG9wdGlvbnMg6YeN6K+V6YWN572uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3aXRoUmV0cnk8VD4oZm46ICgpID0+IFByb21pc2U8VD4sIG9wdGlvbnM/OiBSZXRyeU9wdGlvbnMpOiBQcm9taXNlPFQ+IHtcbiAgY29uc3Qgb3B0cyA9IHsgLi4uREVGQVVMVF9SRVRSWV9PUFRJT05TLCAuLi5vcHRpb25zIH07XG4gIGxldCBsYXN0RXJyb3I6IGFueTtcblxuICBmb3IgKGxldCBhdHRlbXB0ID0gMDsgYXR0ZW1wdCA8PSBvcHRzLm1heFJldHJpZXM7IGF0dGVtcHQrKykge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBmbigpO1xuICAgICAgaWYgKGF0dGVtcHQgPiAwKSB7XG4gICAgICAgIGxvZ2dlci5pbmZvKGDnrKwgJHthdHRlbXB0ICsgMX0g5qyh5bCd6K+V5oiQ5YqfYCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGxhc3RFcnJvciA9IGVycm9yO1xuICAgICAgY29uc3QgZXJyb3JNc2cgPSBlcnJvci5tZXNzYWdlIHx8IFN0cmluZyhlcnJvcik7XG5cbiAgICAgIC8qIOacgOWQjuS4gOasoeWwneivleWksei0peaIluS4jeWPr+mHjeivleeahOmUmeivryDihpIg55u05o6l5oqb5Ye6ICovXG4gICAgICBpZiAoYXR0ZW1wdCA+PSBvcHRzLm1heFJldHJpZXMgfHwgIW9wdHMuc2hvdWxkUmV0cnkoZXJyb3IpKSB7XG4gICAgICAgIGlmIChhdHRlbXB0ID49IG9wdHMubWF4UmV0cmllcyAmJiBvcHRzLm1heFJldHJpZXMgPiAwKSB7XG4gICAgICAgICAgbG9nZ2VyLmVycm9yKGDph43or5UgJHtvcHRzLm1heFJldHJpZXN9IOasoeWQjuS7jeWksei0pTogJHtlcnJvck1zZ31gKTtcbiAgICAgICAgfSBlbHNlIGlmICghb3B0cy5zaG91bGRSZXRyeShlcnJvcikpIHtcbiAgICAgICAgICBsb2dnZXIuZGVidWcoYOS4jeWPr+mHjeivleeahOmUmeivrzogJHtlcnJvck1zZ31gKTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cblxuICAgICAgLyog5oyH5pWw6YCA6YG/562J5b6FICovXG4gICAgICBjb25zdCBkZWxheSA9IE1hdGgubWluKG9wdHMuaW5pdGlhbERlbGF5ICogTWF0aC5wb3coMiwgYXR0ZW1wdCksIG9wdHMubWF4RGVsYXkpO1xuICAgICAgbG9nZ2VyLndhcm4oYOivt+axguWksei0pSAoJHtlcnJvck1zZ30p77yMJHtkZWxheX1tcyDlkI7nrKwgJHthdHRlbXB0ICsgMn0g5qyh6YeN6K+VLi4uYCk7XG4gICAgICBhd2FpdCBzbGVlcChkZWxheSk7XG4gICAgfVxuICB9XG5cbiAgdGhyb3cgbGFzdEVycm9yO1xufVxuXG4vKipcbiAqIOW4pui2heaXtuaOp+WItueahCBmZXRjaCDljIXoo4VcbiAqIOWcqOWOn+eUnyBmZXRjaCDln7rnoYDkuIrmt7vliqDotoXml7bkuK3mlq3og73liptcbiAqXG4gKiBAcGFyYW0gdXJsIOivt+axgiBVUkxcbiAqIEBwYXJhbSBpbml0IGZldGNoIOmAiemhuVxuICogQHBhcmFtIHRpbWVvdXRNcyDotoXml7bml7bpl7TvvIjmr6vnp5LvvIlcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZldGNoV2l0aFRpbWVvdXQoXG4gIHVybDogc3RyaW5nLFxuICBpbml0PzogUmVxdWVzdEluaXQsXG4gIHRpbWVvdXRNcz86IG51bWJlcixcbik6IFByb21pc2U8UmVzcG9uc2U+IHtcbiAgY29uc3QgY29uZmlnID0gZ2V0Q29uZmlnKCk7XG4gIGNvbnN0IGVmZmVjdGl2ZVRpbWVvdXQgPSB0aW1lb3V0TXMgPz8gY29uZmlnLnRpbWVvdXQgPz8gREVGQVVMVF9SRVRSWV9PUFRJT05TLnRpbWVvdXQ7XG4gIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gIGNvbnN0IHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4gY29udHJvbGxlci5hYm9ydCgpLCBlZmZlY3RpdmVUaW1lb3V0KTtcblxuICAvKiDkvb/nlKjoh6rlrprkuYkgZmV0Y2gg5oiW5Y6f55SfIGZldGNoICovXG4gIGNvbnN0IGZldGNoRm4gPSBjb25maWcuY3VzdG9tRmV0Y2ggfHwgZmV0Y2g7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoRm4odXJsLCB7XG4gICAgICAuLi5pbml0LFxuICAgICAgc2lnbmFsOiBjb250cm9sbGVyLnNpZ25hbCxcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzcG9uc2U7XG4gIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICBpZiAoZXJyb3IubmFtZSA9PT0gJ0Fib3J0RXJyb3InKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFJlcXVlc3QgdGltZW91dCBhZnRlciAke2VmZmVjdGl2ZVRpbWVvdXR9bXM6ICR7dXJsfWApO1xuICAgIH1cbiAgICB0aHJvdyBlcnJvcjtcbiAgfSBmaW5hbGx5IHtcbiAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgfVxufVxuIl19
|
|
161
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmV0cnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcmV0cnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7R0FHRzs7QUF3RkgsOEJBaUNDO0FBZ0NELDRDQWlDQztBQXhMRCxxQ0FBa0M7QUFDbEMscUNBQXFDO0FBa0JyQyxNQUFNLHFCQUFxQixHQUEyQjtJQUNwRCxVQUFVLEVBQUUsQ0FBQztJQUNiLFlBQVksRUFBRSxJQUFJO0lBQ2xCLFFBQVEsRUFBRSxJQUFJO0lBQ2QsT0FBTyxFQUFFLEtBQUs7SUFDZCxXQUFXLEVBQUUsa0JBQWtCO0NBQ2hDLENBQUM7QUFFRjs7Ozs7Ozs7O0dBU0c7QUFDSCxTQUFTLGtCQUFrQixDQUFDLEtBQVU7SUFDcEMsSUFBSSxDQUFDLEtBQUs7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUV6QixNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sSUFBSSxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7SUFFbkUsaUJBQWlCO0lBQ2pCLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUM7UUFDaEMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUM7UUFDM0IsT0FBTyxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUM7UUFDaEMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUM7UUFDOUIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUM7UUFDN0IsT0FBTyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUM7UUFDM0IsT0FBTyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQztRQUNsQyxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztRQUN2QixPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDOUIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsc0JBQXNCO0lBQ3RCLElBQUksT0FBTyxDQUFD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S0FBSyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNyRixDQUFDO0lBRUQsSUFBSSxDQUFDO1FBQ0gsTUFBTSxRQUFRLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxFQUFFO1lBQ2xDLEdBQUcsSUFBSTtZQUNQLE1BQU0sRUFBRSxVQUFVLENBQUMsTUFBTTtTQUMxQixDQUFDLENBQUM7UUFDSCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBQUMsT0FBTyxLQUFVLEVBQUUsQ0FBQztRQUNwQixJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssWUFBWSxFQUFFLENBQUM7WUFDaEMsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsZ0JBQWdCLE9BQU8sR0FBRyxFQUFFLENBQUMsQ0FBQztRQUN6RSxDQUFDO1FBQ0QsTUFBTSxLQUFLLENBQUM7SUFDZCxDQUFDO1lBQVMsQ0FBQztRQUNULFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMxQixDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICog6YCa55So6YeN6K+V5bel5YW3XG4gKiDmj5Dkvpvor7fmsYLph43or5XjgIHotoXml7bmjqfliLbjgIHmjIfmlbDpgIDpgb/nrYnplJnor6/mgaLlpI3mnLrliLZcbiAqL1xuXG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgeyBnZXRDb25maWcgfSBmcm9tICcuL2NvbmZpZyc7XG5cbi8qKlxuICog6YeN6K+V6YWN572u6YCJ6aG5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmV0cnlPcHRpb25zIHtcbiAgLyoqIOacgOWkp+mHjeivleasoeaVsO+8iOS4jeWQq+mmluasoeivt+axgu+8ie+8jOm7mOiupCAyICovXG4gIG1heFJldHJpZXM/OiBudW1iZXI7XG4gIC8qKiDliJ3lp4vph43or5Xlu7bov5/vvIjmr6vnp5LvvInvvIzpu5jorqQgMTAwMCAqL1xuICBpbml0aWFsRGVsYXk/OiBudW1iZXI7XG4gIC8qKiDmnIDlpKfph43or5Xlu7bov5/vvIjmr6vnp5LvvInvvIzpu5jorqQgNTAwMCAqL1xuICBtYXhEZWxheT86IG51bWJlcjtcbiAgLyoqIOivt+axgui2heaXtuaXtumXtO+8iOavq+enku+8ie+8jOm7mOiupCAxNTAwMCAqL1xuICB0aW1lb3V0PzogbnVtYmVyO1xuICAvKiog5piv5ZCm5a+56K+l6ZSZ6K+v6L+b6KGM6YeN6K+V55qE5Yik5pat5Ye95pWwICovXG4gIHNob3VsZFJldHJ5PzogKGVycm9yOiBhbnkpID0+IGJvb2xlYW47XG59XG5cbmNvbnN0IERFRkFVTFRfUkVUUllfT1BUSU9OUzogUmVxdWlyZWQ8UmV0cnlPcHRpb25zPiA9IHtcbiAgbWF4UmV0cmllczogMixcbiAgaW5pdGlhbERlbGF5OiAxMDAwLFxuICBtYXhEZWxheTogNTAwMCxcbiAgdGltZW91dDogMTUwMDAsXG4gIHNob3VsZFJldHJ5OiBkZWZhdWx0U2hvdWxkUmV0cnksXG59O1xuXG4vKipcbiAqIOm7mOiupOmHjeivleWIpOaWrVxuICog5Lul5LiL6ZSZ6K+v57G75Z6L5Lya6Kem5Y+R6YeN6K+V77yaXG4gKiAtIOe9kee7nOi/nuaOpemUmeivr++8iGZldGNoIGZhaWxlZCwgRUNPTk5SRUZVU0VELCBFQ09OTlJFU0VUIOetie+8iVxuICogLSDotoXml7bplJnor6/vvIh0aW1lb3V0LCBhYm9ydO+8iVxuICogLSBETlMg6Kej5p6Q5aSx6LSlXG4gKiAtIEhUVFAgNDI5IOmZkOa1gVxuICogLSBIVFRQIDR4eC81eHgg5pyN5Yqh56uv6ZSZ6K+v77yI5ZCr54q25oCB56CB55qE6ZSZ6K+v5raI5oGv77yJXG4gKiDku4UgU0RLIOWGhemDqOeahOWPguaVsOagoemqjOexu+mUmeivr+S4jemHjeivlVxuICovXG5mdW5jdGlvbiBkZWZhdWx0U2hvdWxkUmV0cnkoZXJyb3I6IGFueSk6IGJvb2xlYW4ge1xuICBpZiAoIWVycm9yKSByZXR1cm4gZmFsc2U7XG5cbiAgY29uc3QgbWVzc2FnZSA9IFN0cmluZyhlcnJvci5tZXNzYWdlIHx8IGVycm9yIHx8ICcnKS50b0xvd2VyQ2FzZSgpO1xuXG4gIC8qIOe9kee7nOe6p+WIq+mUmeivryDihpIg6YeN6K+VICovXG4gIGlmIChtZXNzYWdlLmluY2x1ZGVzKCdmZXRjaCBmYWlsZWQnKSB8fFxuICAgICAgbWVzc2FnZS5pbmNsdWRlcygnbmV0d29yaycpIHx8XG4gICAgICBtZXNzYWdlLmluY2x1ZGVzKCdlY29ubnJlZnVzZWQnKSB8fFxuICAgICAgbWVzc2FnZS5pbmNsdWRlcygnZWNvbm5yZXNldCcpIHx8XG4gICAgICBtZXNzYWdlLmluY2x1ZGVzKCdldGltZWRvdXQnKSB8fFxuICAgICAgbWVzc2FnZS5pbmNsdWRlcygndGltZW91dCcpIHx8XG4gICAgICBtZXNzYWdlLmluY2x1ZGVzKCdzb2NrZXQgaGFuZyB1cCcpIHx8XG4gICAgICBtZXNzYWdlLmluY2x1ZGVzKCdkbnMnKSB8fFxuICAgICAgbWVzc2FnZS5pbmNsdWRlcygnYWJvcnQnKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyogSFRUUCA0Mjkg6ZmQ5rWBIOKGkiDph43or5UgKi9cbiAgaWYgKG1lc3NhZ2UuaW5jbHVkZXMoJzQyOScpIHx8IG1lc3NhZ2UuaW5jbHVkZXMoJ3RvbyBtYW55IHJlcXVlc3RzJykgfHwgbWVzc2FnZS5pbmNsdWRlcygncmF0ZSBsaW1pdCcpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKiBIVFRQIDR4eC81eHgg6ZSZ6K+v77yI5ZCr54q25oCB56CB55qE6ZSZ6K+v5raI5oGv77yJ4oaSIOmHjeivlSAqL1xuICBjb25zdCBzdGF0dXNNYXRjaCA9IG1lc3NhZ2UubWF0Y2goLzpcXHMqKFxcZHszfSkvKTtcbiAgaWYgKHN0YXR1c01hdGNoKSB7XG4gICAgY29uc3Qgc3RhdHVzID0gcGFyc2VJbnQoc3RhdHVzTWF0Y2hbMV0sIDEwKTtcbiAgICByZXR1cm4gc3RhdHVzID49IDQwMDtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiDkvJHnnKDmjIflrprmr6vnp5JcbiAqL1xuZnVuY3Rpb24gc2xlZXAobXM6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKSk7XG59XG5cbi8qKlxuICog5bim6YeN6K+V55qE5byC5q2l5pON5L2c5omn6KGM5ZmoXG4gKiAtIOiHquWKqOmHjeivleWPr+aBouWkjeeahOmUmeivr++8iOe9kee7nOmUmeivr+OAgei2heaXtuOAgUhUVFAgNHh4LzV4eO+8iVxuICogLSDmjIfmlbDpgIDpgb/pgb/lhY3ov4fluqbor7fmsYJcbiAqIC0g5LiN5Y+v5oGi5aSN55qE6ZSZ6K+v77yIU0RLIOWGhemDqOWPguaVsOagoemqjOmUmeivr+etie+8ieebtOaOpeaKm+WHuuS4jemHjeivlVxuICpcbiAqIEBwYXJhbSBmbiDopoHmiafooYznmoTlvILmraXmk43kvZxcbiAqIEBwYXJhbSBvcHRpb25zIOmHjeivlemFjee9rlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd2l0aFJldHJ5PFQ+KGZuOiAoKSA9PiBQcm9taXNlPFQ+LCBvcHRpb25zPzogUmV0cnlPcHRpb25zKTogUHJvbWlzZTxUPiB7XG4gIGNvbnN0IG9wdHMgPSB7IC4uLkRFRkFVTFRfUkVUUllfT1BUSU9OUywgLi4ub3B0aW9ucyB9O1xuICBsZXQgbGFzdEVycm9yOiBhbnk7XG5cbiAgZm9yIChsZXQgYXR0ZW1wdCA9IDA7IGF0dGVtcHQgPD0gb3B0cy5tYXhSZXRyaWVzOyBhdHRlbXB0KyspIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZm4oKTtcbiAgICAgIGlmIChhdHRlbXB0ID4gMCkge1xuICAgICAgICBsb2dnZXIuaW5mbyhg56ysICR7YXR0ZW1wdCArIDF9IOasoeWwneivleaIkOWKn2ApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBsYXN0RXJyb3IgPSBlcnJvcjtcbiAgICAgIGNvbnN0IGVycm9yTXNnID0gZXJyb3IubWVzc2FnZSB8fCBTdHJpbmcoZXJyb3IpO1xuXG4gICAgICAvKiDmnIDlkI7kuIDmrKHlsJ3or5XlpLHotKXmiJbkuI3lj6/ph43or5XnmoTplJnor68g4oaSIOebtOaOpeaKm+WHuiAqL1xuICAgICAgaWYgKGF0dGVtcHQgPj0gb3B0cy5tYXhSZXRyaWVzIHx8ICFvcHRzLnNob3VsZFJldHJ5KGVycm9yKSkge1xuICAgICAgICBpZiAoYXR0ZW1wdCA+PSBvcHRzLm1heFJldHJpZXMgJiYgb3B0cy5tYXhSZXRyaWVzID4gMCkge1xuICAgICAgICAgIGxvZ2dlci5lcnJvcihg6YeN6K+VICR7b3B0cy5tYXhSZXRyaWVzfSDmrKHlkI7ku43lpLHotKU6ICR7ZXJyb3JNc2d9YCk7XG4gICAgICAgIH0gZWxzZSBpZiAoIW9wdHMuc2hvdWxkUmV0cnkoZXJyb3IpKSB7XG4gICAgICAgICAgbG9nZ2VyLmRlYnVnKGDkuI3lj6/ph43or5XnmoTplJnor686ICR7ZXJyb3JNc2d9YCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG5cbiAgICAgIC8qIOaMh+aVsOmAgOmBv+etieW+hSAqL1xuICAgICAgY29uc3QgZGVsYXkgPSBNYXRoLm1pbihvcHRzLmluaXRpYWxEZWxheSAqIE1hdGgucG93KDIsIGF0dGVtcHQpLCBvcHRzLm1heERlbGF5KTtcbiAgICAgIGxvZ2dlci53YXJuKGDor7fmsYLlpLHotKUgKCR7ZXJyb3JNc2d9Ke+8jCR7ZGVsYXl9bXMg5ZCO56ysICR7YXR0ZW1wdCArIDJ9IOasoemHjeivlS4uLmApO1xuICAgICAgYXdhaXQgc2xlZXAoZGVsYXkpO1xuICAgIH1cbiAgfVxuXG4gIHRocm93IGxhc3RFcnJvcjtcbn1cblxuLyoqXG4gKiDluKbotoXml7bmjqfliLbnmoQgZmV0Y2gg5YyF6KOFXG4gKiDlnKjljp/nlJ8gZmV0Y2gg5Z+656GA5LiK5re75Yqg6LaF5pe25Lit5pat6IO95YqbXG4gKlxuICogQHBhcmFtIHVybCDor7fmsYIgVVJMXG4gKiBAcGFyYW0gaW5pdCBmZXRjaCDpgInpoblcbiAqIEBwYXJhbSB0aW1lb3V0TXMg6LaF5pe25pe26Ze077yI5q+r56eS77yJXG4gKi9cbi8qKlxuICog57yT5a2Y55qE5YWo5bGA6YWN572u5b+r54Wn77yM6YG/5YWN5q+P5qyh6K+35rGC6YO96K+75Y+WXG4gKiDku4XlnKggc2V0Q29uZmlnIOiiq+iwg+eUqOaXtuWkseaViO+8iOmAmui/hyBjb25maWdWZXJzaW9uIOavlOWvue+8iVxuICovXG5sZXQgX2NhY2hlZEZldGNoQ29uZmlnOiB7IGZldGNoRm46IHR5cGVvZiBmZXRjaDsgdGltZW91dDogbnVtYmVyOyB2ZXJzaW9uOiBudW1iZXIgfSB8IG51bGwgPSBudWxsO1xuXG4vKipcbiAqIOiOt+WPlue8k+WtmOeahCBmZXRjaCDphY3nva5cbiAqL1xuZnVuY3Rpb24gZ2V0RmV0Y2hDb25maWcoKTogeyBmZXRjaEZuOiB0eXBlb2YgZmV0Y2g7IHRpbWVvdXQ6IG51bWJlciB9IHtcbiAgY29uc3QgY29uZmlnID0gZ2V0Q29uZmlnKCk7XG4gIC8qIOeugOWNleeahOW8leeUqOavlOWvueWNs+WPr++8jGdldENvbmZpZyDlnKjmnKrlj5jmm7Tml7bov5Tlm57lkIzkuIDlr7nosaEgKi9cbiAgaWYgKCFfY2FjaGVkRmV0Y2hDb25maWcgfHwgX2NhY2hlZEZldGNoQ29uZmlnLmZldGNoRm4gIT09IChjb25maWcuY3VzdG9tRmV0Y2ggfHwgZmV0Y2gpIHx8IF9jYWNoZWRGZXRjaENvbmZpZy50aW1lb3V0ICE9PSAoY29uZmlnLnRpbWVvdXQgPz8gREVGQVVMVF9SRVRSWV9PUFRJT05TLnRpbWVvdXQpKSB7XG4gICAgX2NhY2hlZEZldGNoQ29uZmlnID0ge1xuICAgICAgZmV0Y2hGbjogY29uZmlnLmN1c3RvbUZldGNoIHx8IGZldGNoLFxuICAgICAgdGltZW91dDogY29uZmlnLnRpbWVvdXQgPz8gREVGQVVMVF9SRVRSWV9PUFRJT05TLnRpbWVvdXQsXG4gICAgICB2ZXJzaW9uOiAwLFxuICAgIH07XG4gIH1cbiAgcmV0dXJuIF9jYWNoZWRGZXRjaENvbmZpZztcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZldGNoV2l0aFRpbWVvdXQoXG4gIHVybDogc3RyaW5nLFxuICBpbml0PzogUmVxdWVzdEluaXQsXG4gIHRpbWVvdXRNcz86IG51bWJlcixcbik6IFByb21pc2U8UmVzcG9uc2U+IHtcbiAgY29uc3QgeyBmZXRjaEZuLCB0aW1lb3V0OiBkZWZhdWx0VGltZW91dCB9ID0gZ2V0RmV0Y2hDb25maWcoKTtcbiAgY29uc3QgZWZmZWN0aXZlVGltZW91dCA9IHRpbWVvdXRNcyA/PyBkZWZhdWx0VGltZW91dDtcbiAgY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgY29uc3QgdGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiBjb250cm9sbGVyLmFib3J0KCksIGVmZmVjdGl2ZVRpbWVvdXQpO1xuXG4gIC8qXG4gICAqIOWmguaenOiwg+eUqOaWueW3suaPkOS+myBzaWduYWzvvIzpnIDopoHlkIzml7bnm5HlkKzkuKTkuKrkv6Hlj7fvvIjosIPnlKjmlrkgKyDotoXml7bvvIlcbiAgICog5Lu75LiA6Kem5Y+R5YiZ5Lit5pat6K+35rGCXG4gICAqL1xuICBjb25zdCBleHRlcm5hbFNpZ25hbCA9IGluaXQ/LnNpZ25hbDtcbiAgaWYgKGV4dGVybmFsU2lnbmFsKSB7XG4gICAgZXh0ZXJuYWxTaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCAoKSA9PiBjb250cm9sbGVyLmFib3J0KCksIHsgb25jZTogdHJ1ZSB9KTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaEZuKHVybCwge1xuICAgICAgLi4uaW5pdCxcbiAgICAgIHNpZ25hbDogY29udHJvbGxlci5zaWduYWwsXG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgaWYgKGVycm9yLm5hbWUgPT09ICdBYm9ydEVycm9yJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBSZXF1ZXN0IHRpbWVvdXQgYWZ0ZXIgJHtlZmZlY3RpdmVUaW1lb3V0fW1zOiAke3VybH1gKTtcbiAgICB9XG4gICAgdGhyb3cgZXJyb3I7XG4gIH0gZmluYWxseSB7XG4gICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gIH1cbn1cbiJdfQ==
|
package/dist/types.d.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* 支持的临时邮箱渠道标识
|
|
3
3
|
* 每个渠道对应一个第三方临时邮箱服务商
|
|
4
4
|
*/
|
|
5
|
-
export type Channel = 'tempmail' | 'linshi-email' | 'tempmail-lol' | 'chatgpt-org-uk' | '
|
|
5
|
+
export type Channel = 'tempmail' | 'linshi-email' | 'tempmail-lol' | 'chatgpt-org-uk' | 'temp-mail-io' | 'awamail' | 'mail-tm' | 'dropmail' | 'guerrillamail' | 'maildrop' | 'smail-pw';
|
|
6
6
|
/**
|
|
7
7
|
* 创建临时邮箱后返回的邮箱信息
|
|
8
8
|
* Token 等认证信息由 SDK 内部维护,不对外暴露
|
|
@@ -116,6 +116,11 @@ export interface RetryConfig {
|
|
|
116
116
|
export interface GenerateEmailOptions {
|
|
117
117
|
/** 指定渠道,不传则随机选择 */
|
|
118
118
|
channel?: Channel;
|
|
119
|
+
/**
|
|
120
|
+
* 为 false 时仅尝试 `channel` 指定的渠道,失败即返回 null,不 Fallback 到其他渠道。
|
|
121
|
+
* 用于按渠道探测可用性。默认 true(保持原有「优先指定渠道、失败后试其他」行为)。
|
|
122
|
+
*/
|
|
123
|
+
channelFallback?: boolean;
|
|
119
124
|
/** 邮箱有效时长 */
|
|
120
125
|
duration?: number;
|
|
121
126
|
/** 指定邮箱域名 */
|
package/dist/types.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICog5pSv5oyB55qE5Li05pe26YKu566x5rig6YGT5qCH6K+GXG4gKiDmr4/
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICog5pSv5oyB55qE5Li05pe26YKu566x5rig6YGT5qCH6K+GXG4gKiDmr4/kuKrmuKDpgZPlr7nlupTkuIDkuKrnrKzkuInmlrnkuLTml7bpgq7nrrHmnI3liqHllYZcbiAqL1xuZXhwb3J0IHR5cGUgQ2hhbm5lbCA9ICd0ZW1wbWFpbCcgfCAnbGluc2hpLWVtYWlsJyB8ICd0ZW1wbWFpbC1sb2wnIHwgJ2NoYXRncHQtb3JnLXVrJyB8ICd0ZW1wLW1haWwtaW8nIHwgJ2F3YW1haWwnIHwgJ21haWwtdG0nIHwgJ2Ryb3BtYWlsJyB8ICdndWVycmlsbGFtYWlsJyB8ICdtYWlsZHJvcCcgfCAnc21haWwtcHcnO1xuXG4vKipcbiAqIOWIm+W7uuS4tOaXtumCrueuseWQjui/lOWbnueahOmCrueuseS/oeaBr1xuICogVG9rZW4g562J6K6k6K+B5L+h5oGv55SxIFNESyDlhoXpg6jnu7TmiqTvvIzkuI3lr7nlpJbmmrTpnLJcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbWFpbEluZm8ge1xuICAvKiog5Yib5bu66K+l6YKu566x5omA5L2/55So55qE5rig6YGTICovXG4gIGNoYW5uZWw6IENoYW5uZWw7XG4gIC8qKiDkuLTml7bpgq7nrrHlnLDlnYAgKi9cbiAgZW1haWw6IHN0cmluZztcbiAgLyoqIOmCrueusei/h+acn+aXtumXtO+8iElTTyA4NjAxIOWtl+espuS4suaIliBVbml4IOaXtumXtOaIs++8iSAqL1xuICBleHBpcmVzQXQ/OiBzdHJpbmcgfCBudW1iZXI7XG4gIC8qKiDpgq7nrrHliJvlu7rml7bpl7TvvIhJU08gODYwMSDlrZfnrKbkuLLvvIkgKi9cbiAgY3JlYXRlZEF0Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFNESyDlhoXpg6jkvb/nlKjnmoTpgq7nrrHkv6Hmga/vvIzljIXlkKsgdG9rZW4g562J6K6k6K+B5pWw5o2uXG4gKiDkuI3lr7nlpJblr7zlh7rvvIznlKjmiLfml6Dms5Xorr/pl65cbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEludGVybmFsRW1haWxJbmZvIGV4dGVuZHMgRW1haWxJbmZvIHtcbiAgLyoqIOiupOivgeS7pOeJjO+8jOeUsSBTREsg5YaF6YOo57u05oqkICovXG4gIHRva2VuPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIOagh+WHhuWMlumCruS7tumZhOS7tlxuICog5LiN5ZCM5rig6YGT55qE6ZmE5Lu25a2X5q615ZCN5LiN5ZCM77yMU0RLIOe7n+S4gOW9kuS4gOWMluS4uuatpOe7k+aehFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVtYWlsQXR0YWNobWVudCB7XG4gIC8qKiDpmYTku7bmlofku7blkI0gKi9cbiAgZmlsZW5hbWU6IHN0cmluZztcbiAgLyoqIOmZhOS7tuWkp+Wwj++8iOWtl+iKgu+8iSAqL1xuICBzaXplPzogbnVtYmVyO1xuICAvKiogTUlNRSDnsbvlnovvvIzlpoIgYXBwbGljYXRpb24vcGRmICovXG4gIGNvbnRlbnRUeXBlPzogc3RyaW5nO1xuICAvKiog6ZmE5Lu25LiL6L295Zyw5Z2AICovXG4gIHVybD86IHN0cmluZztcbn1cblxuLyoqXG4gKiDmoIflh4bljJbpgq7ku7bmoLzlvI8gLSDmiYDmnInmj5DkvpvllYbov5Tlm57nu5/kuIDnu5PmnoRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbWFpbCB7XG4gIC8qKiDpgq7ku7bllK/kuIDmoIfor4YgKi9cbiAgaWQ6IHN0cmluZztcbiAgLyoqIOWPkeS7tuS6uumCrueuseWcsOWdgCAqL1xuICBmcm9tOiBzdHJpbmc7XG4gIC8qKiDmlLbku7bkurrpgq7nrrHlnLDlnYAgKi9cbiAgdG86IHN0cmluZztcbiAgLyoqIOmCruS7tuS4u+mimCAqL1xuICBzdWJqZWN0OiBzdHJpbmc7XG4gIC8qKiDnuq/mlofmnKzlhoXlrrkgKi9cbiAgdGV4dDogc3RyaW5nO1xuICAvKiogSFRNTCDlhoXlrrkgKi9cbiAgaHRtbDogc3RyaW5nO1xuICAvKiogSVNPIDg2MDEg5qC85byP55qE5pel5pyf5a2X56ym5LiyICovXG4gIGRhdGU6IHN0cmluZztcbiAgLyoqIOaYr+WQpuW3suivuyAqL1xuICBpc1JlYWQ6IGJvb2xlYW47XG4gIC8qKiDpmYTku7bliJfooaggKi9cbiAgYXR0YWNobWVudHM6IEVtYWlsQXR0YWNobWVudFtdO1xufVxuXG4vKipcbiAqIOiOt+WPlumCruS7tuWIl+ihqOeahOi/lOWbnue7k+aenFxuICogc3VjY2VzcyDkuLogZmFsc2Ug5pe26KGo56S66K+35rGC5aSx6LSl77yI6YeN6K+V6ICX5bC977yJ77yMZW1haWxzIOS4uuepuuaVsOe7hFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdldEVtYWlsc1Jlc3VsdCB7XG4gIC8qKiDmiYDkvb/nlKjnmoTmuKDpgZMgKi9cbiAgY2hhbm5lbDogQ2hhbm5lbDtcbiAgLyoqIOafpeivoueahOmCrueuseWcsOWdgCAqL1xuICBlbWFpbDogc3RyaW5nO1xuICAvKiog6YKu5Lu25YiX6KGo77yM5aSx6LSl5pe25Li656m65pWw57uEICovXG4gIGVtYWlsczogRW1haWxbXTtcbiAgLyoqIOivt+axguaYr+WQpuaIkOWKn++8jGZhbHNlIOihqOekuumHjeivleiAl+WwveWQjuS7jeWksei0pSAqL1xuICBzdWNjZXNzOiBib29sZWFuO1xufVxuXG4vKipcbiAqIOmHjeivlemFjee9rlxuICogU0RLIOWGhemDqOWvuee9kee7nOmUmeivr+OAgei2heaXtuOAgTV4eCDmnI3liqHnq6/plJnor6/oh6rliqjph43or5VcbiAqIDR4eCDlrqLmiLfnq6/plJnor6/vvIjlpoLlj4LmlbDplJnor6/vvInkuI3kvJrph43or5VcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIC8vIOiHquWumuS5iemHjeivleetlueVpe+8muacgOWkmumHjeivlSAzIOasoe+8jOmmluasoeW7tui/nyAyIOenklxuICogY29uc3QgZW1haWwgPSBhd2FpdCBnZW5lcmF0ZUVtYWlsKHtcbiAqICAgY2hhbm5lbDogJ21haWwtdG0nLFxuICogICByZXRyeTogeyBtYXhSZXRyaWVzOiAzLCBpbml0aWFsRGVsYXk6IDIwMDAgfSxcbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmV0cnlDb25maWcge1xuICAvKiog5pyA5aSn6YeN6K+V5qyh5pWw77yI5LiN5ZCr6aaW5qyh6K+35rGC77yJ77yM6buY6K6kIDIgKi9cbiAgbWF4UmV0cmllcz86IG51bWJlcjtcbiAgLyoqIOWIneWni+mHjeivleW7tui/n++8iOavq+enku+8ie+8jOmHh+eUqOaMh+aVsOmAgOmBv+etlueVpe+8jOm7mOiupCAxMDAwICovXG4gIGluaXRpYWxEZWxheT86IG51bWJlcjtcbiAgLyoqIOacgOWkp+mHjeivleW7tui/n+S4iumZkO+8iOavq+enku+8ie+8jOm7mOiupCA1MDAwICovXG4gIG1heERlbGF5PzogbnVtYmVyO1xuICAvKiog5Y2V5qyh6K+35rGC6LaF5pe25pe26Ze077yI5q+r56eS77yJ77yM6buY6K6kIDE1MDAwICovXG4gIHRpbWVvdXQ/OiBudW1iZXI7XG59XG5cbi8qKlxuICog5Yib5bu65Li05pe26YKu566x55qE6YCJ6aG5XG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiAvLyDkvb/nlKjmjIflrprmuKDpgZPliJvlu7rpgq7nrrFcbiAqIGNvbnN0IGVtYWlsID0gYXdhaXQgZ2VuZXJhdGVFbWFpbCh7IGNoYW5uZWw6ICdtYWlsLXRtJyB9KTtcbiAqXG4gKiAvLyDpmo/mnLrpgInmi6nmuKDpgZNcbiAqIGNvbnN0IGVtYWlsID0gYXdhaXQgZ2VuZXJhdGVFbWFpbCgpO1xuICogYGBgXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2VuZXJhdGVFbWFpbE9wdGlvbnMge1xuICAvKiog5oyH5a6a5rig6YGT77yM5LiN5Lyg5YiZ6ZqP5py66YCJ5oupICovXG4gIGNoYW5uZWw/OiBDaGFubmVsO1xuICAvKipcbiAgICog5Li6IGZhbHNlIOaXtuS7heWwneivlSBgY2hhbm5lbGAg5oyH5a6a55qE5rig6YGT77yM5aSx6LSl5Y2z6L+U5ZueIG51bGzvvIzkuI0gRmFsbGJhY2sg5Yiw5YW25LuW5rig6YGT44CCXG4gICAqIOeUqOS6juaMiea4oOmBk+aOoua1i+WPr+eUqOaAp+OAgum7mOiupCB0cnVl77yI5L+d5oyB5Y6f5pyJ44CM5LyY5YWI5oyH5a6a5rig6YGT44CB5aSx6LSl5ZCO6K+V5YW25LuW44CN6KGM5Li677yJ44CCXG4gICAqL1xuICBjaGFubmVsRmFsbGJhY2s/OiBib29sZWFuO1xuICAvKiog6YKu566x5pyJ5pWI5pe26ZW/ICovXG4gIGR1cmF0aW9uPzogbnVtYmVyO1xuICAvKiog5oyH5a6a6YKu566x5Z+f5ZCNICovXG4gIGRvbWFpbj86IHN0cmluZyB8IG51bGw7XG4gIC8qKiDph43or5XphY3nva7vvIzkuI3kvKDliJnkvb/nlKjpu5jorqTlgLzvvIjmnIDlpJrph43or5UgMiDmrKHvvIkgKi9cbiAgcmV0cnk/OiBSZXRyeUNvbmZpZztcbn1cblxuLyoqXG4gKiDojrflj5bpgq7ku7bliJfooajnmoTpgInpoblcbiAqIENoYW5uZWwvRW1haWwvVG9rZW4g562J55SxIFNESyDku44gRW1haWxJbmZvIOS4reiHquWKqOiOt+WPlu+8jOeUqOaIt+aXoOmcgOaJi+WKqOS8oOmAklxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3QgaW5mbyA9IGF3YWl0IGdlbmVyYXRlRW1haWwoeyBjaGFubmVsOiAnbWFpbC10bScgfSk7XG4gKiBjb25zdCByZXN1bHQgPSBhd2FpdCBnZXRFbWFpbHMoaW5mbyk7XG4gKiBpZiAocmVzdWx0LnN1Y2Nlc3MgJiYgcmVzdWx0LmVtYWlscy5sZW5ndGggPiAwKSB7XG4gKiAgIGNvbnNvbGUubG9nKCfmlLbliLDpgq7ku7Y6JywgcmVzdWx0LmVtYWlscyk7XG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHZXRFbWFpbHNPcHRpb25zIHtcbiAgLyoqIOmHjeivlemFjee9ru+8jOS4jeS8oOWImeS9v+eUqOm7mOiupOWAvO+8iOacgOWkmumHjeivlSAyIOasoe+8iSAqL1xuICByZXRyeT86IFJldHJ5Q29uZmlnO1xufVxuIl19
|
package/package.json
CHANGED
package/src/config.ts
CHANGED
|
@@ -6,6 +6,9 @@
|
|
|
6
6
|
* TEMPMAIL_PROXY - 代理 URL
|
|
7
7
|
* TEMPMAIL_TIMEOUT - 超时毫秒数
|
|
8
8
|
* TEMPMAIL_INSECURE - 设为 "1" 或 "true" 跳过 SSL 验证
|
|
9
|
+
* DROPMAIL_AUTH_TOKEN / DROPMAIL_API_TOKEN - DropMail GraphQL 的 af_ 令牌(可选;未设置时 SDK 会 /api/token/generate 获取并在将过期时用 /api/token/renew 续期)
|
|
10
|
+
* DROPMAIL_NO_AUTO_TOKEN - 设为 "1" 或 "true" 则禁止自动拉取/续期令牌
|
|
11
|
+
* DROPMAIL_RENEW_LIFETIME - 自动续期请求的 lifetime,默认 1d(与官网 renew 接口一致)
|
|
9
12
|
*
|
|
10
13
|
* Node.js 环境下设置 insecure 会自动设置 NODE_TLS_REJECT_UNAUTHORIZED=0
|
|
11
14
|
*/
|
|
@@ -20,6 +23,19 @@ export interface SDKConfig {
|
|
|
20
23
|
timeout?: number;
|
|
21
24
|
/** 跳过 SSL 证书验证(调试用) */
|
|
22
25
|
insecure?: boolean;
|
|
26
|
+
/**
|
|
27
|
+
* DropMail 渠道专用:GraphQL 端点 `https://dropmail.me/api/graphql/${token}` 中的 token(须为官网生成的 `af_` 前缀令牌)。
|
|
28
|
+
* 也可通过环境变量 DROPMAIL_AUTH_TOKEN 或 DROPMAIL_API_TOKEN 提供。
|
|
29
|
+
* 未配置且未设置 DROPMAIL_NO_AUTO_TOKEN 时,会向 https://dropmail.me/api/token/generate 申请 1h 令牌并内存缓存。
|
|
30
|
+
*/
|
|
31
|
+
dropmailAuthToken?: string;
|
|
32
|
+
/** 为 true 时不自动请求 token(须配置 dropmailAuthToken 或环境变量) */
|
|
33
|
+
dropmailDisableAutoToken?: boolean;
|
|
34
|
+
/**
|
|
35
|
+
* 自动管理令牌即将过期时,调用 /api/token/renew 使用的 lifetime(如 1h、1d)。
|
|
36
|
+
* 也可通过环境变量 DROPMAIL_RENEW_LIFETIME 设置。
|
|
37
|
+
*/
|
|
38
|
+
dropmailRenewLifetime?: string;
|
|
23
39
|
/**
|
|
24
40
|
* 自定义 fetch 函数,用于完全控制 HTTP 请求行为
|
|
25
41
|
* 当设置了 proxy 但环境不支持 undici 时,可通过此选项传入支持代理的 fetch 实现
|
package/src/index.ts
CHANGED
|
@@ -2,13 +2,13 @@ import * as tempmail from './providers/tempmail';
|
|
|
2
2
|
import * as linshiEmail from './providers/linshi-email';
|
|
3
3
|
import * as tempmailLol from './providers/tempmail-lol';
|
|
4
4
|
import * as chatgptOrgUk from './providers/chatgpt-org-uk';
|
|
5
|
-
import * as tempmailLa from './providers/tempmail-la';
|
|
6
5
|
import * as tempMailIO from './providers/temp-mail-io';
|
|
7
6
|
import * as awamail from './providers/awamail';
|
|
8
7
|
import * as mailTm from './providers/mail-tm';
|
|
9
8
|
import * as dropmail from './providers/dropmail';
|
|
10
9
|
import * as guerrillamail from './providers/guerrillamail';
|
|
11
10
|
import * as maildropProvider from './providers/maildrop';
|
|
11
|
+
import * as smailPw from './providers/smail-pw';
|
|
12
12
|
import { Channel, EmailInfo, InternalEmailInfo, Email, EmailAttachment, GetEmailsResult, GenerateEmailOptions, GetEmailsOptions } from './types';
|
|
13
13
|
import { withRetry, RetryOptions } from './retry';
|
|
14
14
|
import { logger } from './logger';
|
|
@@ -27,6 +27,13 @@ export { normalizeEmail } from './normalize';
|
|
|
27
27
|
export { withRetry, fetchWithTimeout, RetryOptions } from './retry';
|
|
28
28
|
export { LogLevel, LogHandler, setLogLevel, getLogLevel, setLogger, logger } from './logger';
|
|
29
29
|
export { SDKConfig, setConfig, getConfig } from './config';
|
|
30
|
+
export type { SyntheticBrowserProfile } from './providers/linshi-token';
|
|
31
|
+
export {
|
|
32
|
+
deriveLinshiApiPathKey,
|
|
33
|
+
randomSyntheticLinshiKey,
|
|
34
|
+
randomBrowserLikeProfile,
|
|
35
|
+
syntheticVisitorIdFromProfile,
|
|
36
|
+
} from './providers/linshi-token';
|
|
30
37
|
|
|
31
38
|
/** 渠道名称到 provider 实现的映射表 */
|
|
32
39
|
const providers = {
|
|
@@ -34,17 +41,17 @@ const providers = {
|
|
|
34
41
|
'linshi-email': linshiEmail,
|
|
35
42
|
'tempmail-lol': tempmailLol,
|
|
36
43
|
'chatgpt-org-uk': chatgptOrgUk,
|
|
37
|
-
'tempmail-la': tempmailLa,
|
|
38
44
|
'temp-mail-io': tempMailIO,
|
|
39
45
|
'awamail': awamail,
|
|
40
46
|
'mail-tm': mailTm,
|
|
41
47
|
'dropmail': dropmail,
|
|
42
48
|
'guerrillamail': guerrillamail,
|
|
43
49
|
'maildrop': maildropProvider,
|
|
50
|
+
'smail-pw': smailPw,
|
|
44
51
|
};
|
|
45
52
|
|
|
46
53
|
/** 所有支持的渠道列表,用于随机选择和遍历 */
|
|
47
|
-
const allChannels: Channel[] = ['tempmail', 'linshi-email', 'tempmail-lol', 'chatgpt-org-uk', '
|
|
54
|
+
const allChannels: Channel[] = ['tempmail', 'linshi-email', 'tempmail-lol', 'chatgpt-org-uk', 'temp-mail-io', 'awamail', 'mail-tm', 'dropmail', 'guerrillamail', 'maildrop', 'smail-pw'];
|
|
48
55
|
|
|
49
56
|
/**
|
|
50
57
|
* 渠道信息,包含渠道标识、显示名称和对应网站
|
|
@@ -64,13 +71,13 @@ const channelInfoMap: Record<Channel, ChannelInfo> = {
|
|
|
64
71
|
'linshi-email': { channel: 'linshi-email', name: '临时邮箱', website: 'linshi-email.com' },
|
|
65
72
|
'tempmail-lol': { channel: 'tempmail-lol', name: 'TempMail LOL', website: 'tempmail.lol' },
|
|
66
73
|
'chatgpt-org-uk': { channel: 'chatgpt-org-uk', name: 'ChatGPT Mail', website: 'mail.chatgpt.org.uk' },
|
|
67
|
-
'tempmail-la': { channel: 'tempmail-la', name: 'TempMail LA', website: 'tempmail.la' },
|
|
68
74
|
'temp-mail-io': { channel: 'temp-mail-io', name: 'Temp Mail IO', website: 'temp-mail.io' },
|
|
69
75
|
'awamail': { channel: 'awamail', name: 'AwaMail', website: 'awamail.com' },
|
|
70
76
|
'mail-tm': { channel: 'mail-tm', name: 'Mail.tm', website: 'mail.tm' },
|
|
71
77
|
'dropmail': { channel: 'dropmail', name: 'DropMail', website: 'dropmail.me' },
|
|
72
78
|
'guerrillamail': { channel: 'guerrillamail', name: 'Guerrilla Mail', website: 'guerrillamail.com' },
|
|
73
79
|
'maildrop': { channel: 'maildrop', name: 'Maildrop', website: 'maildrop.cc' },
|
|
80
|
+
'smail-pw': { channel: 'smail-pw', name: 'Smail.pw', website: 'smail.pw' },
|
|
74
81
|
};
|
|
75
82
|
|
|
76
83
|
/**
|
|
@@ -102,7 +109,8 @@ export function getChannelInfo(channel: Channel): ChannelInfo | undefined {
|
|
|
102
109
|
* 创建临时邮箱
|
|
103
110
|
*
|
|
104
111
|
* 错误处理策略:
|
|
105
|
-
* -
|
|
112
|
+
* - 指定渠道失败时,默认自动尝试其他可用渠道(打乱顺序逐个尝试)
|
|
113
|
+
* - `channelFallback: false` 且指定了 `channel` 时,仅尝试该渠道,失败即返回 null
|
|
106
114
|
* - 未指定渠道时,打乱全部渠道逐个尝试,直到成功
|
|
107
115
|
* - 所有渠道均不可用时返回 null(不抛出异常)
|
|
108
116
|
*
|
|
@@ -121,7 +129,8 @@ export async function generateEmail(options: GenerateEmailOptions = {}): Promise
|
|
|
121
129
|
* - 指定渠道 → 优先尝试该渠道,失败后随机尝试其他渠道
|
|
122
130
|
* - 未指定 → 打乱全部渠道逐个尝试
|
|
123
131
|
*/
|
|
124
|
-
const
|
|
132
|
+
const allowFallback = options.channelFallback !== false;
|
|
133
|
+
const tryOrder = buildChannelOrder(options.channel, allowFallback);
|
|
125
134
|
|
|
126
135
|
for (const ch of tryOrder) {
|
|
127
136
|
logger.info(`创建临时邮箱, 渠道: ${ch}`);
|
|
@@ -154,9 +163,14 @@ export async function generateEmail(options: GenerateEmailOptions = {}): Promise
|
|
|
154
163
|
* 指定渠道时优先尝试该渠道,其余渠道打乱追加
|
|
155
164
|
* 未指定时打乱全部渠道
|
|
156
165
|
*/
|
|
157
|
-
function buildChannelOrder(preferred?: Channel): Channel[] {
|
|
166
|
+
function buildChannelOrder(preferred?: Channel, allowFallback = true): Channel[] {
|
|
158
167
|
const shuffled = [...allChannels].sort(() => Math.random() - 0.5);
|
|
159
|
-
if (!preferred)
|
|
168
|
+
if (!preferred) {
|
|
169
|
+
return shuffled;
|
|
170
|
+
}
|
|
171
|
+
if (!allowFallback) {
|
|
172
|
+
return [preferred];
|
|
173
|
+
}
|
|
160
174
|
const rest = shuffled.filter(ch => ch !== preferred);
|
|
161
175
|
return [preferred, ...rest];
|
|
162
176
|
}
|
|
@@ -175,8 +189,6 @@ async function generateEmailOnce(channel: Channel, options: GenerateEmailOptions
|
|
|
175
189
|
return tempmailLol.generateEmail(options.domain || null);
|
|
176
190
|
case 'chatgpt-org-uk':
|
|
177
191
|
return chatgptOrgUk.generateEmail();
|
|
178
|
-
case 'tempmail-la':
|
|
179
|
-
return tempmailLa.generateEmail();
|
|
180
192
|
case 'temp-mail-io':
|
|
181
193
|
return tempMailIO.generateEmail();
|
|
182
194
|
case 'awamail':
|
|
@@ -189,6 +201,8 @@ async function generateEmailOnce(channel: Channel, options: GenerateEmailOptions
|
|
|
189
201
|
return guerrillamail.generateEmail();
|
|
190
202
|
case 'maildrop':
|
|
191
203
|
return maildropProvider.generateEmail();
|
|
204
|
+
case 'smail-pw':
|
|
205
|
+
return smailPw.generateEmail();
|
|
192
206
|
default:
|
|
193
207
|
throw new Error(`Unknown channel: ${channel}`);
|
|
194
208
|
}
|
|
@@ -259,14 +273,14 @@ async function getEmailsOnce(channel: Channel, email: string, token?: string): P
|
|
|
259
273
|
case 'tempmail':
|
|
260
274
|
return tempmail.getEmails(email);
|
|
261
275
|
case 'linshi-email':
|
|
262
|
-
|
|
276
|
+
if (!token) throw new Error('internal error: token missing for linshi-email');
|
|
277
|
+
return linshiEmail.getEmails(email, token);
|
|
263
278
|
case 'tempmail-lol':
|
|
264
279
|
if (!token) throw new Error('internal error: token missing for tempmail-lol');
|
|
265
280
|
return tempmailLol.getEmails(token, email);
|
|
266
281
|
case 'chatgpt-org-uk':
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
return tempmailLa.getEmails(email);
|
|
282
|
+
if (!token) throw new Error('internal error: token missing for chatgpt-org-uk');
|
|
283
|
+
return chatgptOrgUk.getEmails(token, email);
|
|
270
284
|
case 'temp-mail-io':
|
|
271
285
|
return tempMailIO.getEmails(email);
|
|
272
286
|
case 'awamail':
|
|
@@ -284,6 +298,9 @@ async function getEmailsOnce(channel: Channel, email: string, token?: string): P
|
|
|
284
298
|
case 'maildrop':
|
|
285
299
|
if (!token) throw new Error('internal error: token missing for maildrop');
|
|
286
300
|
return maildropProvider.getEmails(token, email);
|
|
301
|
+
case 'smail-pw':
|
|
302
|
+
if (!token) throw new Error('internal error: token missing for smail-pw');
|
|
303
|
+
return smailPw.getEmails(token, email);
|
|
287
304
|
default:
|
|
288
305
|
throw new Error(`Unknown channel: ${channel}`);
|
|
289
306
|
}
|
package/src/providers/awamail.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { InternalEmailInfo, Email, Channel } from '../types';
|
|
2
2
|
import { normalizeEmail } from '../normalize';
|
|
3
|
+
import { fetchWithTimeout } from '../retry';
|
|
3
4
|
|
|
4
5
|
const CHANNEL: Channel = 'awamail';
|
|
5
6
|
const BASE_URL = 'https://awamail.com/welcome';
|
|
@@ -37,7 +38,7 @@ function extractSessionCookie(response: Response): string {
|
|
|
37
38
|
* 需要保存响应中的 Set-Cookie (awamail_session) 用于后续获取邮件
|
|
38
39
|
*/
|
|
39
40
|
export async function generateEmail(): Promise<InternalEmailInfo> {
|
|
40
|
-
const response = await
|
|
41
|
+
const response = await fetchWithTimeout(`${BASE_URL}/change_mailbox`, {
|
|
41
42
|
method: 'POST',
|
|
42
43
|
headers: {
|
|
43
44
|
...DEFAULT_HEADERS,
|
|
@@ -77,7 +78,7 @@ export async function generateEmail(): Promise<InternalEmailInfo> {
|
|
|
77
78
|
* 返回: { success, data: { emails: [...], latest: {...} } }
|
|
78
79
|
*/
|
|
79
80
|
export async function getEmails(token: string, email: string): Promise<Email[]> {
|
|
80
|
-
const response = await
|
|
81
|
+
const response = await fetchWithTimeout(`${BASE_URL}/get_emails`, {
|
|
81
82
|
method: 'GET',
|
|
82
83
|
headers: {
|
|
83
84
|
...DEFAULT_HEADERS,
|