tempmail-sdk 1.0.3 → 1.1.1
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 +51 -3
- package/bun.lock +60 -0
- package/demo/poll-emails.ts +7 -8
- package/dist/config.d.ts +47 -0
- package/dist/config.js +68 -0
- package/dist/index.d.ts +21 -20
- package/dist/index.js +101 -37
- package/dist/normalize.js +28 -3
- package/dist/providers/awamail.d.ts +2 -2
- package/dist/providers/awamail.js +1 -1
- package/dist/providers/chatgpt-org-uk.d.ts +2 -2
- package/dist/providers/chatgpt-org-uk.js +1 -1
- package/dist/providers/dropmail.d.ts +2 -2
- package/dist/providers/dropmail.js +1 -1
- package/dist/providers/guerrillamail.d.ts +22 -0
- package/dist/providers/guerrillamail.js +71 -0
- package/dist/providers/linshi-email.d.ts +2 -2
- package/dist/providers/linshi-email.js +1 -1
- package/dist/providers/mail-tm.d.ts +2 -2
- package/dist/providers/mail-tm.js +1 -1
- package/dist/providers/maildrop.d.ts +21 -0
- package/dist/providers/maildrop.js +180 -0
- package/dist/providers/temp-mail-io.d.ts +2 -2
- package/dist/providers/temp-mail-io.js +1 -1
- package/dist/providers/tempmail-la.d.ts +2 -2
- package/dist/providers/tempmail-la.js +1 -1
- package/dist/providers/tempmail-lol.d.ts +2 -2
- package/dist/providers/tempmail-lol.js +1 -1
- package/dist/providers/tempmail.d.ts +2 -2
- package/dist/providers/tempmail.js +1 -1
- package/dist/retry.js +14 -5
- package/dist/types.d.ts +14 -15
- package/dist/types.js +1 -1
- package/package.json +1 -1
- package/src/config.ts +82 -0
- package/src/index.ts +102 -39
- package/src/normalize.ts +30 -2
- package/src/providers/awamail.ts +2 -2
- package/src/providers/chatgpt-org-uk.ts +2 -2
- package/src/providers/dropmail.ts +2 -2
- package/src/providers/guerrillamail.ts +78 -0
- package/src/providers/linshi-email.ts +2 -2
- package/src/providers/mail-tm.ts +2 -2
- package/src/providers/maildrop.ts +210 -0
- package/src/providers/temp-mail-io.ts +2 -2
- package/src/providers/tempmail-la.ts +2 -2
- package/src/providers/tempmail-lol.ts +2 -2
- package/src/providers/tempmail.ts +2 -2
- package/src/retry.ts +15 -4
- package/src/types.ts +15 -15
package/README.md
CHANGED
|
@@ -3,12 +3,16 @@
|
|
|
3
3
|
[](https://www.npmjs.com/package/tempmail-sdk)
|
|
4
4
|
[](https://www.gnu.org/licenses/gpl-3.0)
|
|
5
5
|
|
|
6
|
-
临时邮箱 SDK(TypeScript/Node.js),支持
|
|
6
|
+
临时邮箱 SDK(TypeScript/Node.js),支持 11 个邮箱服务提供商,所有渠道返回**统一标准化格式**。
|
|
7
7
|
|
|
8
8
|
## 安装
|
|
9
9
|
|
|
10
10
|
```bash
|
|
11
|
+
# 从 npmjs.org
|
|
11
12
|
npm install tempmail-sdk
|
|
13
|
+
|
|
14
|
+
# 从 GitHub Packages
|
|
15
|
+
npm install @XxxXTeam/tempmail-sdk --registry=https://npm.pkg.github.com
|
|
12
16
|
```
|
|
13
17
|
|
|
14
18
|
## 支持的渠道
|
|
@@ -24,6 +28,8 @@ npm install tempmail-sdk
|
|
|
24
28
|
| `awamail` | awamail.com | ✅ | Session Cookie 自动管理 |
|
|
25
29
|
| `mail-tm` | mail.tm | ✅ | 自动注册账号获取 Bearer Token |
|
|
26
30
|
| `dropmail` | dropmail.me | ✅ | GraphQL API |
|
|
31
|
+
| `guerrillamail` | guerrillamail.com | ✅ | 公开 JSON API |
|
|
32
|
+
| `maildrop` | maildrop.cc | ✅ | GraphQL API,自带反垃圾 |
|
|
27
33
|
|
|
28
34
|
> **提示:** 使用 `TempEmailClient` 类时无需手动处理 Token,SDK 自动管理。
|
|
29
35
|
|
|
@@ -74,7 +80,9 @@ console.log(channels);
|
|
|
74
80
|
// { channel: 'temp-mail-io', name: 'Temp Mail IO', website: 'temp-mail.io' },
|
|
75
81
|
// { channel: 'awamail', name: 'AwaMail', website: 'awamail.com' },
|
|
76
82
|
// { channel: 'mail-tm', name: 'Mail.tm', website: 'mail.tm' },
|
|
77
|
-
// { channel: 'dropmail', name: 'DropMail', website: 'dropmail.me' }
|
|
83
|
+
// { channel: 'dropmail', name: 'DropMail', website: 'dropmail.me' },
|
|
84
|
+
// { channel: 'guerrillamail', name: 'Guerrilla Mail', website: 'guerrillamail.com' },
|
|
85
|
+
// { channel: 'maildrop', name: 'Maildrop', website: 'maildrop.cc' }
|
|
78
86
|
// ]
|
|
79
87
|
|
|
80
88
|
const info = getChannelInfo('tempmail');
|
|
@@ -186,7 +194,7 @@ for (const email of result2.emails) {
|
|
|
186
194
|
|------|------|:----:|------|
|
|
187
195
|
| `channel` | `Channel` | ✅ | 渠道标识 |
|
|
188
196
|
| `email` | `string` | ✅ | 邮箱地址 |
|
|
189
|
-
| `token` | `string` | 部分 | 访问令牌(`tempmail-lol`、`awamail`、`mail-tm`、`dropmail` 必填) |
|
|
197
|
+
| `token` | `string` | 部分 | 访问令牌(`tempmail-lol`、`awamail`、`mail-tm`、`dropmail`、`guerrillamail`、`maildrop` 必填) |
|
|
190
198
|
|
|
191
199
|
**返回值:** `GetEmailsResult`
|
|
192
200
|
|
|
@@ -233,6 +241,46 @@ await client.getEmails(); // 获取邮件(自动传递 token)
|
|
|
233
241
|
client.getEmailInfo(); // 获取当前邮箱信息
|
|
234
242
|
```
|
|
235
243
|
|
|
244
|
+
## 代理与 HTTP 配置
|
|
245
|
+
|
|
246
|
+
SDK 支持全局配置代理、超时等 HTTP 客户端参数,也可通过环境变量零代码配置:
|
|
247
|
+
|
|
248
|
+
```typescript
|
|
249
|
+
import { setConfig } from 'tempmail-sdk';
|
|
250
|
+
|
|
251
|
+
// 一行跳过 SSL 验证
|
|
252
|
+
setConfig({ insecure: true });
|
|
253
|
+
|
|
254
|
+
// 设置全局超时
|
|
255
|
+
setConfig({ timeout: 30000 });
|
|
256
|
+
|
|
257
|
+
// 使用自定义 fetch(如 undici 代理)
|
|
258
|
+
import { ProxyAgent, fetch as undiciFetch } from 'undici';
|
|
259
|
+
const agent = new ProxyAgent('http://127.0.0.1:7890');
|
|
260
|
+
setConfig({
|
|
261
|
+
customFetch: (url, init) => undiciFetch(url, { ...init, dispatcher: agent }) as any,
|
|
262
|
+
});
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
**配置项:**
|
|
266
|
+
|
|
267
|
+
| 字段 | 类型 | 说明 |
|
|
268
|
+
|------|------|------|
|
|
269
|
+
| `proxy` | `string?` | 代理 URL(http/https/socks5) |
|
|
270
|
+
| `timeout` | `number?` | 全局超时毫秒数,默认 15000 |
|
|
271
|
+
| `insecure` | `boolean?` | 跳过 SSL 验证(调试用) |
|
|
272
|
+
| `customFetch` | `typeof fetch?` | 自定义 fetch 函数,用于代理等高级场景 |
|
|
273
|
+
|
|
274
|
+
**环境变量(无需修改代码):**
|
|
275
|
+
|
|
276
|
+
```bash
|
|
277
|
+
export TEMPMAIL_PROXY="http://127.0.0.1:7890"
|
|
278
|
+
export TEMPMAIL_INSECURE=1
|
|
279
|
+
export TEMPMAIL_TIMEOUT=30000
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
> **提示:** Node.js 原生 fetch 不支持代理,推荐通过 `customFetch` + `undici` 的 `ProxyAgent` 实现代理支持。
|
|
283
|
+
|
|
236
284
|
## 环境要求
|
|
237
285
|
|
|
238
286
|
- Node.js 18+(需要原生 `fetch` 支持)
|
package/bun.lock
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
{
|
|
2
|
+
"lockfileVersion": 1,
|
|
3
|
+
"configVersion": 0,
|
|
4
|
+
"workspaces": {
|
|
5
|
+
"": {
|
|
6
|
+
"name": "tempmail-sdk",
|
|
7
|
+
"dependencies": {
|
|
8
|
+
"readline": "^1.3.0",
|
|
9
|
+
},
|
|
10
|
+
"devDependencies": {
|
|
11
|
+
"@types/node": "^20.0.0",
|
|
12
|
+
"ts-node": "^10.9.0",
|
|
13
|
+
"typescript": "^5.0.0",
|
|
14
|
+
},
|
|
15
|
+
},
|
|
16
|
+
},
|
|
17
|
+
"packages": {
|
|
18
|
+
"@cspotcode/source-map-support": ["@cspotcode/source-map-support@0.8.1", "", { "dependencies": { "@jridgewell/trace-mapping": "0.3.9" } }, "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw=="],
|
|
19
|
+
|
|
20
|
+
"@jridgewell/resolve-uri": ["@jridgewell/resolve-uri@3.1.2", "", {}, "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw=="],
|
|
21
|
+
|
|
22
|
+
"@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.5", "", {}, "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og=="],
|
|
23
|
+
|
|
24
|
+
"@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.9", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" } }, "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ=="],
|
|
25
|
+
|
|
26
|
+
"@tsconfig/node10": ["@tsconfig/node10@1.0.12", "", {}, "sha512-UCYBaeFvM11aU2y3YPZ//O5Rhj+xKyzy7mvcIoAjASbigy8mHMryP5cK7dgjlz2hWxh1g5pLw084E0a/wlUSFQ=="],
|
|
27
|
+
|
|
28
|
+
"@tsconfig/node12": ["@tsconfig/node12@1.0.11", "", {}, "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag=="],
|
|
29
|
+
|
|
30
|
+
"@tsconfig/node14": ["@tsconfig/node14@1.0.3", "", {}, "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow=="],
|
|
31
|
+
|
|
32
|
+
"@tsconfig/node16": ["@tsconfig/node16@1.0.4", "", {}, "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA=="],
|
|
33
|
+
|
|
34
|
+
"@types/node": ["@types/node@20.19.30", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-WJtwWJu7UdlvzEAUm484QNg5eAoq5QR08KDNx7g45Usrs2NtOPiX8ugDqmKdXkyL03rBqU5dYNYVQetEpBHq2g=="],
|
|
35
|
+
|
|
36
|
+
"acorn": ["acorn@8.15.0", "", { "bin": "bin/acorn" }, "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg=="],
|
|
37
|
+
|
|
38
|
+
"acorn-walk": ["acorn-walk@8.3.4", "", { "dependencies": { "acorn": "^8.11.0" } }, "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g=="],
|
|
39
|
+
|
|
40
|
+
"arg": ["arg@4.1.3", "", {}, "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA=="],
|
|
41
|
+
|
|
42
|
+
"create-require": ["create-require@1.1.1", "", {}, "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ=="],
|
|
43
|
+
|
|
44
|
+
"diff": ["diff@4.0.4", "", {}, "sha512-X07nttJQkwkfKfvTPG/KSnE2OMdcUCao6+eXF3wmnIQRn2aPAHH3VxDbDOdegkd6JbPsXqShpvEOHfAT+nCNwQ=="],
|
|
45
|
+
|
|
46
|
+
"make-error": ["make-error@1.3.6", "", {}, "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw=="],
|
|
47
|
+
|
|
48
|
+
"readline": ["readline@1.3.0", "", {}, "sha512-k2d6ACCkiNYz222Fs/iNze30rRJ1iIicW7JuX/7/cozvih6YCkFZH+J6mAFDVgv0dRBaAyr4jDqC95R2y4IADg=="],
|
|
49
|
+
|
|
50
|
+
"ts-node": ["ts-node@10.9.2", "", { "dependencies": { "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", "@tsconfig/node12": "^1.0.7", "@tsconfig/node14": "^1.0.0", "@tsconfig/node16": "^1.0.2", "acorn": "^8.4.1", "acorn-walk": "^8.1.1", "arg": "^4.1.0", "create-require": "^1.1.0", "diff": "^4.0.1", "make-error": "^1.1.1", "v8-compile-cache-lib": "^3.0.1", "yn": "3.1.1" }, "peerDependencies": { "@swc/core": ">=1.2.50", "@swc/wasm": ">=1.2.50", "@types/node": "*", "typescript": ">=2.7" }, "optionalPeers": ["@swc/core", "@swc/wasm"], "bin": { "ts-node": "dist/bin.js", "ts-node-cwd": "dist/bin-cwd.js", "ts-node-esm": "dist/bin-esm.js", "ts-node-script": "dist/bin-script.js", "ts-node-transpile-only": "dist/bin-transpile.js", "ts-script": "dist/bin-script-deprecated.js" } }, "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ=="],
|
|
51
|
+
|
|
52
|
+
"typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="],
|
|
53
|
+
|
|
54
|
+
"undici-types": ["undici-types@6.21.0", "", {}, "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ=="],
|
|
55
|
+
|
|
56
|
+
"v8-compile-cache-lib": ["v8-compile-cache-lib@3.0.1", "", {}, "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg=="],
|
|
57
|
+
|
|
58
|
+
"yn": ["yn@3.1.1", "", {}, "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q=="],
|
|
59
|
+
}
|
|
60
|
+
}
|
package/demo/poll-emails.ts
CHANGED
|
@@ -84,11 +84,7 @@ async function pollEmails(emailInfo: EmailInfo): Promise<void> {
|
|
|
84
84
|
pollCount++;
|
|
85
85
|
|
|
86
86
|
try {
|
|
87
|
-
const result = await getEmails(
|
|
88
|
-
channel: emailInfo.channel,
|
|
89
|
-
email: emailInfo.email,
|
|
90
|
-
token: emailInfo.token,
|
|
91
|
-
});
|
|
87
|
+
const result = await getEmails(emailInfo);
|
|
92
88
|
|
|
93
89
|
const timestamp = new Date().toLocaleTimeString();
|
|
94
90
|
|
|
@@ -142,15 +138,18 @@ async function main(): Promise<void> {
|
|
|
142
138
|
try {
|
|
143
139
|
const emailInfo = await generateEmail({ channel: selectedChannel });
|
|
144
140
|
|
|
141
|
+
if (!emailInfo) {
|
|
142
|
+
console.error('\n❌ 所有渠道均不可用');
|
|
143
|
+
process.exit(1);
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
|
|
145
147
|
console.log('\n✅ 获取邮箱成功!');
|
|
146
148
|
printJson('返回数据 (EmailInfo)', emailInfo);
|
|
147
149
|
|
|
148
150
|
console.log('\n📋 邮箱信息:');
|
|
149
151
|
console.log(` 渠道: ${emailInfo.channel}`);
|
|
150
152
|
console.log(` 邮箱: ${emailInfo.email}`);
|
|
151
|
-
if (emailInfo.token) {
|
|
152
|
-
console.log(` Token: ${emailInfo.token}`);
|
|
153
|
-
}
|
|
154
153
|
if (emailInfo.expiresAt) {
|
|
155
154
|
console.log(` 过期时间: ${emailInfo.expiresAt}`);
|
|
156
155
|
}
|
package/dist/config.d.ts
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SDK 全局配置
|
|
3
|
+
* 包含代理、超时、SSL 等设置,作用于所有 HTTP 请求
|
|
4
|
+
*
|
|
5
|
+
* 支持环境变量自动读取(优先级低于代码设置):
|
|
6
|
+
* TEMPMAIL_PROXY - 代理 URL
|
|
7
|
+
* TEMPMAIL_TIMEOUT - 超时毫秒数
|
|
8
|
+
* TEMPMAIL_INSECURE - 设为 "1" 或 "true" 跳过 SSL 验证
|
|
9
|
+
*
|
|
10
|
+
* Node.js 环境下设置 insecure 会自动设置 NODE_TLS_REJECT_UNAUTHORIZED=0
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* SDK 全局配置接口
|
|
14
|
+
*/
|
|
15
|
+
export interface SDKConfig {
|
|
16
|
+
/** 代理 URL,支持 http/https/socks5,如 "http://127.0.0.1:7890" */
|
|
17
|
+
proxy?: string;
|
|
18
|
+
/** 全局默认超时(毫秒),默认 15000 */
|
|
19
|
+
timeout?: number;
|
|
20
|
+
/** 跳过 SSL 证书验证(调试用) */
|
|
21
|
+
insecure?: boolean;
|
|
22
|
+
/**
|
|
23
|
+
* 自定义 fetch 函数,用于完全控制 HTTP 请求行为
|
|
24
|
+
* 当设置了 proxy 但环境不支持 undici 时,可通过此选项传入支持代理的 fetch 实现
|
|
25
|
+
*/
|
|
26
|
+
customFetch?: typeof fetch;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* 设置 SDK 全局配置
|
|
30
|
+
*
|
|
31
|
+
* @example
|
|
32
|
+
* ```ts
|
|
33
|
+
* // 一行跳过 SSL 验证
|
|
34
|
+
* setConfig({ insecure: true });
|
|
35
|
+
*
|
|
36
|
+
* // 设置代理和超时
|
|
37
|
+
* setConfig({ proxy: 'http://127.0.0.1:7890', timeout: 30000 });
|
|
38
|
+
*
|
|
39
|
+
* // 使用自定义 fetch(如支持代理的 undici)
|
|
40
|
+
* import { ProxyAgent, fetch as undiciFetch } from 'undici';
|
|
41
|
+
* const agent = new ProxyAgent('http://127.0.0.1:7890');
|
|
42
|
+
* setConfig({ customFetch: (url, init) => undiciFetch(url, { ...init, dispatcher: agent }) });
|
|
43
|
+
* ```
|
|
44
|
+
*/
|
|
45
|
+
export declare function setConfig(config: SDKConfig): void;
|
|
46
|
+
/** 获取当前 SDK 全局配置 */
|
|
47
|
+
export declare function getConfig(): SDKConfig;
|
package/dist/config.js
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* SDK 全局配置
|
|
4
|
+
* 包含代理、超时、SSL 等设置,作用于所有 HTTP 请求
|
|
5
|
+
*
|
|
6
|
+
* 支持环境变量自动读取(优先级低于代码设置):
|
|
7
|
+
* TEMPMAIL_PROXY - 代理 URL
|
|
8
|
+
* TEMPMAIL_TIMEOUT - 超时毫秒数
|
|
9
|
+
* TEMPMAIL_INSECURE - 设为 "1" 或 "true" 跳过 SSL 验证
|
|
10
|
+
*
|
|
11
|
+
* Node.js 环境下设置 insecure 会自动设置 NODE_TLS_REJECT_UNAUTHORIZED=0
|
|
12
|
+
*/
|
|
13
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
exports.setConfig = setConfig;
|
|
15
|
+
exports.getConfig = getConfig;
|
|
16
|
+
/** 从环境变量读取默认配置 */
|
|
17
|
+
function loadEnvConfig() {
|
|
18
|
+
const config = {};
|
|
19
|
+
if (typeof process !== 'undefined' && process.env) {
|
|
20
|
+
if (process.env.TEMPMAIL_PROXY) {
|
|
21
|
+
config.proxy = process.env.TEMPMAIL_PROXY;
|
|
22
|
+
}
|
|
23
|
+
if (process.env.TEMPMAIL_TIMEOUT) {
|
|
24
|
+
const t = parseInt(process.env.TEMPMAIL_TIMEOUT, 10);
|
|
25
|
+
if (!isNaN(t) && t > 0)
|
|
26
|
+
config.timeout = t;
|
|
27
|
+
}
|
|
28
|
+
if (process.env.TEMPMAIL_INSECURE === '1' || process.env.TEMPMAIL_INSECURE?.toLowerCase() === 'true') {
|
|
29
|
+
config.insecure = true;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return config;
|
|
33
|
+
}
|
|
34
|
+
let globalConfig = loadEnvConfig();
|
|
35
|
+
/**
|
|
36
|
+
* 设置 SDK 全局配置
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* ```ts
|
|
40
|
+
* // 一行跳过 SSL 验证
|
|
41
|
+
* setConfig({ insecure: true });
|
|
42
|
+
*
|
|
43
|
+
* // 设置代理和超时
|
|
44
|
+
* setConfig({ proxy: 'http://127.0.0.1:7890', timeout: 30000 });
|
|
45
|
+
*
|
|
46
|
+
* // 使用自定义 fetch(如支持代理的 undici)
|
|
47
|
+
* import { ProxyAgent, fetch as undiciFetch } from 'undici';
|
|
48
|
+
* const agent = new ProxyAgent('http://127.0.0.1:7890');
|
|
49
|
+
* setConfig({ customFetch: (url, init) => undiciFetch(url, { ...init, dispatcher: agent }) });
|
|
50
|
+
* ```
|
|
51
|
+
*/
|
|
52
|
+
function setConfig(config) {
|
|
53
|
+
globalConfig = { ...config };
|
|
54
|
+
/* Node.js 环境下 insecure 自动设置环境变量 */
|
|
55
|
+
if (typeof process !== 'undefined' && process.env) {
|
|
56
|
+
if (config.insecure) {
|
|
57
|
+
process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
delete process.env.NODE_TLS_REJECT_UNAUTHORIZED;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
/** 获取当前 SDK 全局配置 */
|
|
65
|
+
function getConfig() {
|
|
66
|
+
return globalConfig;
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7R0FVRzs7QUF3REgsOEJBVUM7QUFHRCw4QkFFQztBQXBERCxrQkFBa0I7QUFDbEIsU0FBUyxhQUFhO0lBQ3BCLE1BQU0sTUFBTSxHQUFjLEVBQUUsQ0FBQztJQUM3QixJQUFJLE9BQU8sT0FBTyxLQUFLLFdBQVcsSUFBSSxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDbEQsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQy9CLE1BQU0sQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUM7UUFDNUMsQ0FBQztRQUNELElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ2pDLE1BQU0sQ0FBQyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGdCQUFnQixFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3JELElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7Z0JBQUUsTUFBTSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUM7UUFDN0MsQ0FBQztRQUNELElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsS0FBSyxHQUFHLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsRUFBRSxXQUFXLEVBQUUsS0FBSyxNQUFNLEVBQUUsQ0FBQztZQUNyRyxNQUFNLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUN6QixDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRCxJQUFJLFlBQVksR0FBYyxhQUFhLEVBQUUsQ0FBQztBQUU5Qzs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRztBQUNILFNBQWdCLFNBQVMsQ0FBQyxNQUFpQjtJQUN6QyxZQUFZLEdBQUcsRUFBRSxHQUFHLE1BQU0sRUFBRSxDQUFDO0lBQzdCLG1DQUFtQztJQUNuQyxJQUFJLE9BQU8sT0FBTyxLQUFLLFdBQVcsSUFBSSxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDbEQsSUFBSSxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDcEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyw0QkFBNEIsR0FBRyxHQUFHLENBQUM7UUFDakQsQ0FBQzthQUFNLENBQUM7WUFDTixPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsNEJBQTRCLENBQUM7UUFDbEQsQ0FBQztJQUNILENBQUM7QUFDSCxDQUFDO0FBRUQsb0JBQW9CO0FBQ3BCLFNBQWdCLFNBQVM7SUFDdkIsT0FBTyxZQUFZLENBQUM7QUFDdEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogU0RLIOWFqOWxgOmFjee9rlxuICog5YyF5ZCr5Luj55CG44CB6LaF5pe244CBU1NMIOetieiuvue9ru+8jOS9nOeUqOS6juaJgOaciSBIVFRQIOivt+axglxuICpcbiAqIOaUr+aMgeeOr+Wig+WPmOmHj+iHquWKqOivu+WPlu+8iOS8mOWFiOe6p+S9juS6juS7o+eggeiuvue9ru+8ie+8mlxuICogICBURU1QTUFJTF9QUk9YWSAgICAtIOS7o+eQhiBVUkxcbiAqICAgVEVNUE1BSUxfVElNRU9VVCAgLSDotoXml7bmr6vnp5LmlbBcbiAqICAgVEVNUE1BSUxfSU5TRUNVUkUgLSDorr7kuLogXCIxXCIg5oiWIFwidHJ1ZVwiIOi3s+i/hyBTU0wg6aqM6K+BXG4gKlxuICogTm9kZS5qcyDnjq/looPkuIvorr7nva4gaW5zZWN1cmUg5Lya6Ieq5Yqo6K6+572uIE5PREVfVExTX1JFSkVDVF9VTkFVVEhPUklaRUQ9MFxuICovXG5cbi8qKlxuICogU0RLIOWFqOWxgOmFjee9ruaOpeWPo1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFNES0NvbmZpZyB7XG4gIC8qKiDku6PnkIYgVVJM77yM5pSv5oyBIGh0dHAvaHR0cHMvc29ja3M177yM5aaCIFwiaHR0cDovLzEyNy4wLjAuMTo3ODkwXCIgKi9cbiAgcHJveHk/OiBzdHJpbmc7XG4gIC8qKiDlhajlsYDpu5jorqTotoXml7bvvIjmr6vnp5LvvInvvIzpu5jorqQgMTUwMDAgKi9cbiAgdGltZW91dD86IG51bWJlcjtcbiAgLyoqIOi3s+i/hyBTU0wg6K+B5Lmm6aqM6K+B77yI6LCD6K+V55So77yJICovXG4gIGluc2VjdXJlPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIOiHquWumuS5iSBmZXRjaCDlh73mlbDvvIznlKjkuo7lrozlhajmjqfliLYgSFRUUCDor7fmsYLooYzkuLpcbiAgICog5b2T6K6+572u5LqGIHByb3h5IOS9hueOr+Wig+S4jeaUr+aMgSB1bmRpY2kg5pe277yM5Y+v6YCa6L+H5q2k6YCJ6aG55Lyg5YWl5pSv5oyB5Luj55CG55qEIGZldGNoIOWunueOsFxuICAgKi9cbiAgY3VzdG9tRmV0Y2g/OiB0eXBlb2YgZmV0Y2g7XG59XG5cbi8qKiDku47njq/looPlj5jph4/or7vlj5bpu5jorqTphY3nva4gKi9cbmZ1bmN0aW9uIGxvYWRFbnZDb25maWcoKTogU0RLQ29uZmlnIHtcbiAgY29uc3QgY29uZmlnOiBTREtDb25maWcgPSB7fTtcbiAgaWYgKHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJiBwcm9jZXNzLmVudikge1xuICAgIGlmIChwcm9jZXNzLmVudi5URU1QTUFJTF9QUk9YWSkge1xuICAgICAgY29uZmlnLnByb3h5ID0gcHJvY2Vzcy5lbnYuVEVNUE1BSUxfUFJPWFk7XG4gICAgfVxuICAgIGlmIChwcm9jZXNzLmVudi5URU1QTUFJTF9USU1FT1VUKSB7XG4gICAgICBjb25zdCB0ID0gcGFyc2VJbnQocHJvY2Vzcy5lbnYuVEVNUE1BSUxfVElNRU9VVCwgMTApO1xuICAgICAgaWYgKCFpc05hTih0KSAmJiB0ID4gMCkgY29uZmlnLnRpbWVvdXQgPSB0O1xuICAgIH1cbiAgICBpZiAocHJvY2Vzcy5lbnYuVEVNUE1BSUxfSU5TRUNVUkUgPT09ICcxJyB8fCBwcm9jZXNzLmVudi5URU1QTUFJTF9JTlNFQ1VSRT8udG9Mb3dlckNhc2UoKSA9PT0gJ3RydWUnKSB7XG4gICAgICBjb25maWcuaW5zZWN1cmUgPSB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gY29uZmlnO1xufVxuXG5sZXQgZ2xvYmFsQ29uZmlnOiBTREtDb25maWcgPSBsb2FkRW52Q29uZmlnKCk7XG5cbi8qKlxuICog6K6+572uIFNESyDlhajlsYDphY3nva5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIC8vIOS4gOihjOi3s+i/hyBTU0wg6aqM6K+BXG4gKiBzZXRDb25maWcoeyBpbnNlY3VyZTogdHJ1ZSB9KTtcbiAqXG4gKiAvLyDorr7nva7ku6PnkIblkozotoXml7ZcbiAqIHNldENvbmZpZyh7IHByb3h5OiAnaHR0cDovLzEyNy4wLjAuMTo3ODkwJywgdGltZW91dDogMzAwMDAgfSk7XG4gKlxuICogLy8g5L2/55So6Ieq5a6a5LmJIGZldGNo77yI5aaC5pSv5oyB5Luj55CG55qEIHVuZGljae+8iVxuICogaW1wb3J0IHsgUHJveHlBZ2VudCwgZmV0Y2ggYXMgdW5kaWNpRmV0Y2ggfSBmcm9tICd1bmRpY2knO1xuICogY29uc3QgYWdlbnQgPSBuZXcgUHJveHlBZ2VudCgnaHR0cDovLzEyNy4wLjAuMTo3ODkwJyk7XG4gKiBzZXRDb25maWcoeyBjdXN0b21GZXRjaDogKHVybCwgaW5pdCkgPT4gdW5kaWNpRmV0Y2godXJsLCB7IC4uLmluaXQsIGRpc3BhdGNoZXI6IGFnZW50IH0pIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRDb25maWcoY29uZmlnOiBTREtDb25maWcpOiB2b2lkIHtcbiAgZ2xvYmFsQ29uZmlnID0geyAuLi5jb25maWcgfTtcbiAgLyogTm9kZS5qcyDnjq/looPkuIsgaW5zZWN1cmUg6Ieq5Yqo6K6+572u546v5aKD5Y+Y6YePICovXG4gIGlmICh0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiYgcHJvY2Vzcy5lbnYpIHtcbiAgICBpZiAoY29uZmlnLmluc2VjdXJlKSB7XG4gICAgICBwcm9jZXNzLmVudi5OT0RFX1RMU19SRUpFQ1RfVU5BVVRIT1JJWkVEID0gJzAnO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGUgcHJvY2Vzcy5lbnYuTk9ERV9UTFNfUkVKRUNUX1VOQVVUSE9SSVpFRDtcbiAgICB9XG4gIH1cbn1cblxuLyoqIOiOt+WPluW9k+WJjSBTREsg5YWo5bGA6YWN572uICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29uZmlnKCk6IFNES0NvbmZpZyB7XG4gIHJldHVybiBnbG9iYWxDb25maWc7XG59XG4iXX0=
|
package/dist/index.d.ts
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { Channel, EmailInfo, GetEmailsResult, GenerateEmailOptions, GetEmailsOptions } from './types';
|
|
2
|
+
import { setConfig, getConfig } from './config';
|
|
2
3
|
export { Channel, EmailInfo, Email, EmailAttachment, GetEmailsResult, GenerateEmailOptions, GetEmailsOptions } from './types';
|
|
3
4
|
export { normalizeEmail } from './normalize';
|
|
4
5
|
export { withRetry, fetchWithTimeout, RetryOptions } from './retry';
|
|
5
6
|
export { LogLevel, LogHandler, setLogLevel, getLogLevel, setLogger, logger } from './logger';
|
|
7
|
+
export { SDKConfig, setConfig, getConfig } from './config';
|
|
6
8
|
/**
|
|
7
9
|
* 渠道信息,包含渠道标识、显示名称和对应网站
|
|
8
10
|
*/
|
|
@@ -37,47 +39,43 @@ export declare function getChannelInfo(channel: Channel): ChannelInfo | undefine
|
|
|
37
39
|
* 创建临时邮箱
|
|
38
40
|
*
|
|
39
41
|
* 错误处理策略:
|
|
40
|
-
* -
|
|
41
|
-
* -
|
|
42
|
+
* - 指定渠道失败时,自动尝试其他可用渠道(打乱顺序逐个尝试)
|
|
43
|
+
* - 未指定渠道时,打乱全部渠道逐个尝试,直到成功
|
|
44
|
+
* - 所有渠道均不可用时返回 null(不抛出异常)
|
|
42
45
|
*
|
|
43
46
|
* @param options - 创建选项,可指定渠道、有效时长、域名等
|
|
44
|
-
* @returns
|
|
45
|
-
* @throws 重试耗尽后仍失败时抛出异常
|
|
47
|
+
* @returns 邮箱信息,所有渠道均不可用时返回 null
|
|
46
48
|
*
|
|
47
49
|
* @example
|
|
48
50
|
* ```ts
|
|
49
51
|
* const emailInfo = await generateEmail({ channel: 'temp-mail-io' });
|
|
50
|
-
* console.log(emailInfo.email);
|
|
52
|
+
* if (emailInfo) console.log(emailInfo.email);
|
|
51
53
|
* ```
|
|
52
54
|
*/
|
|
53
|
-
export declare function generateEmail(options?: GenerateEmailOptions): Promise<EmailInfo>;
|
|
55
|
+
export declare function generateEmail(options?: GenerateEmailOptions): Promise<EmailInfo | null>;
|
|
54
56
|
/**
|
|
55
57
|
* 获取邮件列表
|
|
58
|
+
* Channel/Email/Token 等由 SDK 从 EmailInfo 中自动获取,用户无需手动传递
|
|
56
59
|
*
|
|
57
60
|
* 错误处理策略:
|
|
58
|
-
* -
|
|
61
|
+
* - 网络错误、超时、429、服务端 5xx 错误 → 自动重试(默认 2 次)
|
|
59
62
|
* - 重试耗尽后返回 { success: false, emails: [] },不抛异常
|
|
60
|
-
* - 参数校验错误(缺少
|
|
63
|
+
* - 参数校验错误(缺少 EmailInfo)直接抛出
|
|
61
64
|
*
|
|
62
|
-
*
|
|
63
|
-
*
|
|
64
|
-
*
|
|
65
|
-
* @param options - 获取选项,包含渠道、邮箱地址、令牌
|
|
65
|
+
* @param info - GenerateEmail() 返回的邮箱信息
|
|
66
|
+
* @param options - 可选配置(重试等)
|
|
66
67
|
* @returns 邮件结果,包含 success 标记和邮件列表
|
|
67
68
|
*
|
|
68
69
|
* @example
|
|
69
70
|
* ```ts
|
|
70
|
-
* const
|
|
71
|
-
*
|
|
72
|
-
* email: emailInfo.email,
|
|
73
|
-
* token: emailInfo.token,
|
|
74
|
-
* });
|
|
71
|
+
* const info = await generateEmail({ channel: 'mail-tm' });
|
|
72
|
+
* const result = await getEmails(info);
|
|
75
73
|
* if (result.success && result.emails.length > 0) {
|
|
76
74
|
* console.log('收到邮件:', result.emails[0].subject);
|
|
77
75
|
* }
|
|
78
76
|
* ```
|
|
79
77
|
*/
|
|
80
|
-
export declare function getEmails(
|
|
78
|
+
export declare function getEmails(info: EmailInfo, options?: GetEmailsOptions): Promise<GetEmailsResult>;
|
|
81
79
|
/**
|
|
82
80
|
* 临时邮箱客户端
|
|
83
81
|
* 封装了邮箱创建和邮件获取的完整流程,自动管理邮箱信息和认证令牌
|
|
@@ -100,15 +98,16 @@ export declare class TempEmailClient {
|
|
|
100
98
|
/**
|
|
101
99
|
* 创建临时邮箱并缓存邮箱信息
|
|
102
100
|
* 后续调用 getEmails() 时自动使用此邮箱的渠道、地址和令牌
|
|
101
|
+
* 所有渠道均不可用时返回 null
|
|
103
102
|
*/
|
|
104
|
-
generate(options?: GenerateEmailOptions): Promise<EmailInfo>;
|
|
103
|
+
generate(options?: GenerateEmailOptions): Promise<EmailInfo | null>;
|
|
105
104
|
/**
|
|
106
105
|
* 获取当前邮箱的邮件列表
|
|
107
106
|
* 必须先调用 generate() 创建邮箱
|
|
108
107
|
*
|
|
109
108
|
* @throws 未调用 generate() 时抛出异常
|
|
110
109
|
*/
|
|
111
|
-
getEmails(): Promise<GetEmailsResult>;
|
|
110
|
+
getEmails(options?: GetEmailsOptions): Promise<GetEmailsResult>;
|
|
112
111
|
/**
|
|
113
112
|
* 获取当前缓存的邮箱信息
|
|
114
113
|
* 未调用 generate() 时返回 null
|
|
@@ -121,5 +120,7 @@ declare const _default: {
|
|
|
121
120
|
generateEmail: typeof generateEmail;
|
|
122
121
|
getEmails: typeof getEmails;
|
|
123
122
|
TempEmailClient: typeof TempEmailClient;
|
|
123
|
+
setConfig: typeof setConfig;
|
|
124
|
+
getConfig: typeof getConfig;
|
|
124
125
|
};
|
|
125
126
|
export default _default;
|