tempmail-sdk 1.0.1 → 1.0.2
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 +162 -72
- package/demo/poll-emails.ts +25 -40
- package/dist/index.d.ts +2 -1
- package/dist/index.js +55 -4
- package/dist/normalize.d.ts +5 -0
- package/dist/normalize.js +87 -0
- package/dist/providers/awamail.d.ts +15 -0
- package/dist/providers/awamail.js +91 -0
- package/dist/providers/chatgpt-org-uk.js +4 -2
- package/dist/providers/dropmail.d.ts +13 -0
- package/dist/providers/dropmail.js +86 -0
- package/dist/providers/linshi-email.js +4 -2
- package/dist/providers/mail-tm.d.ts +11 -0
- package/dist/providers/mail-tm.js +167 -0
- package/dist/providers/temp-mail-io.d.ts +13 -0
- package/dist/providers/temp-mail-io.js +69 -0
- package/dist/providers/tempmail-la.d.ts +15 -0
- package/dist/providers/tempmail-la.js +89 -0
- package/dist/providers/tempmail-lol.d.ts +1 -1
- package/dist/providers/tempmail-lol.js +5 -3
- package/dist/providers/tempmail.js +4 -2
- package/dist/types.d.ts +31 -28
- package/dist/types.js +1 -1
- package/package.json +1 -1
- package/src/index.ts +54 -4
- package/src/normalize.ts +80 -0
- package/src/providers/awamail.ts +101 -0
- package/src/providers/chatgpt-org-uk.ts +3 -1
- package/src/providers/dropmail.ts +98 -0
- package/src/providers/linshi-email.ts +3 -1
- package/src/providers/mail-tm.ts +188 -0
- package/src/providers/temp-mail-io.ts +76 -0
- package/src/providers/tempmail-la.ts +99 -0
- package/src/providers/tempmail-lol.ts +4 -2
- package/src/providers/tempmail.ts +3 -1
- package/src/types.ts +32 -28
- package/test/example.ts +16 -1
package/README.md
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
#
|
|
1
|
+
# tempmail-sdk
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
[](https://www.npmjs.com/package/tempmail-sdk)
|
|
4
|
+
[](https://www.gnu.org/licenses/gpl-3.0)
|
|
4
5
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
GPL-3.0
|
|
6
|
+
临时邮箱 SDK(TypeScript/Node.js),支持 9 个邮箱服务提供商,所有渠道返回**统一标准化格式**。
|
|
8
7
|
|
|
9
8
|
## 安装
|
|
10
9
|
|
|
@@ -14,40 +13,78 @@ npm install tempmail-sdk
|
|
|
14
13
|
|
|
15
14
|
## 支持的渠道
|
|
16
15
|
|
|
17
|
-
| 渠道 | 服务商 |
|
|
18
|
-
|
|
19
|
-
| `tempmail` | tempmail.ing |
|
|
20
|
-
| `linshi-email` | linshi-email.com |
|
|
21
|
-
| `tempmail-lol` | tempmail.lol |
|
|
22
|
-
| `chatgpt-org-uk` | mail.chatgpt.org.uk |
|
|
16
|
+
| 渠道 | 服务商 | 需要 Token | 说明 |
|
|
17
|
+
|------|--------|:----------:|------|
|
|
18
|
+
| `tempmail` | tempmail.ing | - | 支持自定义有效期 |
|
|
19
|
+
| `linshi-email` | linshi-email.com | - | |
|
|
20
|
+
| `tempmail-lol` | tempmail.lol | ✅ | 支持指定域名 |
|
|
21
|
+
| `chatgpt-org-uk` | mail.chatgpt.org.uk | - | |
|
|
22
|
+
| `tempmail-la` | tempmail.la | - | 支持分页 |
|
|
23
|
+
| `temp-mail-io` | temp-mail.io | - | |
|
|
24
|
+
| `awamail` | awamail.com | ✅ | Session Cookie 自动管理 |
|
|
25
|
+
| `mail-tm` | mail.tm | ✅ | 自动注册账号获取 Bearer Token |
|
|
26
|
+
| `dropmail` | dropmail.me | ✅ | GraphQL API |
|
|
27
|
+
|
|
28
|
+
> **提示:** 使用 `TempEmailClient` 类时无需手动处理 Token,SDK 自动管理。
|
|
29
|
+
|
|
30
|
+
## 快速开始
|
|
31
|
+
|
|
32
|
+
### 使用 TempEmailClient(推荐)
|
|
33
|
+
|
|
34
|
+
```typescript
|
|
35
|
+
import { TempEmailClient } from 'tempmail-sdk';
|
|
36
|
+
|
|
37
|
+
const client = new TempEmailClient();
|
|
38
|
+
|
|
39
|
+
// 获取临时邮箱(可指定渠道,不指定则随机)
|
|
40
|
+
const emailInfo = await client.generate({ channel: 'tempmail' });
|
|
41
|
+
console.log(`渠道: ${emailInfo.channel}`);
|
|
42
|
+
console.log(`邮箱: ${emailInfo.email}`);
|
|
43
|
+
if (emailInfo.expiresAt) console.log(`过期时间: ${emailInfo.expiresAt}`);
|
|
44
|
+
|
|
45
|
+
// 获取邮件(Token 自动传递,无需手动处理)
|
|
46
|
+
const result = await client.getEmails();
|
|
47
|
+
console.log(`收到 ${result.emails.length} 封邮件`);
|
|
23
48
|
|
|
24
|
-
|
|
49
|
+
for (const email of result.emails) {
|
|
50
|
+
console.log(`发件人: ${email.from}`);
|
|
51
|
+
console.log(`主题: ${email.subject}`);
|
|
52
|
+
console.log(`内容: ${email.text}`);
|
|
53
|
+
console.log(`时间: ${email.date}`);
|
|
54
|
+
console.log(`已读: ${email.isRead}`);
|
|
55
|
+
console.log(`附件: ${email.attachments.length} 个`);
|
|
56
|
+
}
|
|
57
|
+
```
|
|
25
58
|
|
|
26
|
-
###
|
|
59
|
+
### 使用函数式 API
|
|
60
|
+
|
|
61
|
+
#### 列出所有渠道
|
|
27
62
|
|
|
28
63
|
```typescript
|
|
29
|
-
import { listChannels, getChannelInfo } from '
|
|
64
|
+
import { listChannels, getChannelInfo } from 'tempmail-sdk';
|
|
30
65
|
|
|
31
|
-
// 获取所有支持的渠道
|
|
32
66
|
const channels = listChannels();
|
|
33
67
|
console.log(channels);
|
|
34
68
|
// [
|
|
35
69
|
// { channel: 'tempmail', name: 'TempMail', website: 'tempmail.ing' },
|
|
36
70
|
// { channel: 'linshi-email', name: '临时邮箱', website: 'linshi-email.com' },
|
|
37
71
|
// { channel: 'tempmail-lol', name: 'TempMail LOL', website: 'tempmail.lol' },
|
|
38
|
-
// { channel: 'chatgpt-org-uk', name: 'ChatGPT Mail', website: 'mail.chatgpt.org.uk' }
|
|
72
|
+
// { channel: 'chatgpt-org-uk', name: 'ChatGPT Mail', website: 'mail.chatgpt.org.uk' },
|
|
73
|
+
// { channel: 'tempmail-la', name: 'TempMail LA', website: 'tempmail.la' },
|
|
74
|
+
// { channel: 'temp-mail-io', name: 'Temp Mail IO', website: 'temp-mail.io' },
|
|
75
|
+
// { channel: 'awamail', name: 'AwaMail', website: 'awamail.com' },
|
|
76
|
+
// { channel: 'mail-tm', name: 'Mail.tm', website: 'mail.tm' },
|
|
77
|
+
// { channel: 'dropmail', name: 'DropMail', website: 'dropmail.me' }
|
|
39
78
|
// ]
|
|
40
79
|
|
|
41
|
-
// 获取指定渠道信息
|
|
42
80
|
const info = getChannelInfo('tempmail');
|
|
43
|
-
console.log(info);
|
|
44
81
|
// { channel: 'tempmail', name: 'TempMail', website: 'tempmail.ing' }
|
|
45
82
|
```
|
|
46
83
|
|
|
47
|
-
|
|
84
|
+
#### 获取邮箱
|
|
48
85
|
|
|
49
86
|
```typescript
|
|
50
|
-
import { generateEmail } from '
|
|
87
|
+
import { generateEmail } from 'tempmail-sdk';
|
|
51
88
|
|
|
52
89
|
// 从随机渠道获取邮箱
|
|
53
90
|
const emailInfo = await generateEmail();
|
|
@@ -56,66 +93,65 @@ console.log(emailInfo);
|
|
|
56
93
|
|
|
57
94
|
// 从指定渠道获取邮箱
|
|
58
95
|
const emailInfo2 = await generateEmail({ channel: 'linshi-email' });
|
|
59
|
-
|
|
60
|
-
//
|
|
96
|
+
|
|
97
|
+
// tempmail 渠道支持自定义有效期(分钟)
|
|
98
|
+
const emailInfo3 = await generateEmail({ channel: 'tempmail', duration: 60 });
|
|
99
|
+
|
|
100
|
+
// tempmail-lol 渠道支持指定域名
|
|
101
|
+
const emailInfo4 = await generateEmail({ channel: 'tempmail-lol', domain: 'example.com' });
|
|
61
102
|
```
|
|
62
103
|
|
|
63
|
-
|
|
104
|
+
#### 获取邮件
|
|
64
105
|
|
|
65
106
|
```typescript
|
|
66
|
-
import { getEmails } from '
|
|
107
|
+
import { getEmails } from 'tempmail-sdk';
|
|
67
108
|
|
|
68
|
-
//
|
|
109
|
+
// 不需要 Token 的渠道
|
|
69
110
|
const result = await getEmails({
|
|
70
111
|
channel: 'tempmail',
|
|
71
|
-
email: 'xxx@ibymail.com'
|
|
112
|
+
email: 'xxx@ibymail.com',
|
|
72
113
|
});
|
|
73
|
-
console.log(result);
|
|
74
|
-
// { channel: 'tempmail', email: 'xxx@ibymail.com', emails: [...], success: true }
|
|
114
|
+
console.log(result.emails); // 标准化邮件数组
|
|
75
115
|
|
|
76
|
-
//
|
|
116
|
+
// 需要 Token 的渠道(token 由 generateEmail 返回)
|
|
77
117
|
const result2 = await getEmails({
|
|
78
|
-
channel: '
|
|
79
|
-
email:
|
|
80
|
-
token:
|
|
118
|
+
channel: 'mail-tm',
|
|
119
|
+
email: emailInfo.email,
|
|
120
|
+
token: emailInfo.token, // Bearer Token
|
|
81
121
|
});
|
|
82
|
-
```
|
|
83
|
-
|
|
84
|
-
### 使用 TempEmailClient 类
|
|
85
|
-
|
|
86
|
-
```typescript
|
|
87
|
-
import { TempEmailClient } from 'temp-email-sdk';
|
|
88
|
-
|
|
89
|
-
const client = new TempEmailClient();
|
|
90
|
-
|
|
91
|
-
// 获取邮箱
|
|
92
|
-
const emailInfo = await client.generate({ channel: 'tempmail' });
|
|
93
|
-
console.log(`渠道: ${emailInfo.channel}`);
|
|
94
|
-
console.log(`邮箱: ${emailInfo.email}`);
|
|
95
122
|
|
|
96
|
-
//
|
|
97
|
-
const
|
|
98
|
-
console.log(
|
|
123
|
+
// 所有邮件使用统一格式,无需关心渠道差异
|
|
124
|
+
for (const email of result2.emails) {
|
|
125
|
+
console.log(email.id); // 邮件 ID
|
|
126
|
+
console.log(email.from); // 发件人
|
|
127
|
+
console.log(email.to); // 收件人
|
|
128
|
+
console.log(email.subject); // 主题
|
|
129
|
+
console.log(email.text); // 纯文本
|
|
130
|
+
console.log(email.html); // HTML
|
|
131
|
+
console.log(email.date); // ISO 日期
|
|
132
|
+
console.log(email.isRead); // 是否已读
|
|
133
|
+
console.log(email.attachments); // 附件列表
|
|
134
|
+
}
|
|
99
135
|
```
|
|
100
136
|
|
|
101
|
-
## API
|
|
137
|
+
## API 参考
|
|
102
138
|
|
|
103
139
|
### listChannels()
|
|
104
140
|
|
|
105
141
|
获取所有支持的渠道列表。
|
|
106
142
|
|
|
107
143
|
**返回值:** `ChannelInfo[]`
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
144
|
+
|
|
145
|
+
| 字段 | 类型 | 说明 |
|
|
146
|
+
|------|------|------|
|
|
147
|
+
| `channel` | `Channel` | 渠道标识 |
|
|
148
|
+
| `name` | `string` | 渠道显示名称 |
|
|
149
|
+
| `website` | `string` | 服务商网站 |
|
|
111
150
|
|
|
112
151
|
### getChannelInfo(channel)
|
|
113
152
|
|
|
114
153
|
获取指定渠道信息。
|
|
115
154
|
|
|
116
|
-
**参数:**
|
|
117
|
-
- `channel` - 渠道标识
|
|
118
|
-
|
|
119
155
|
**返回值:** `ChannelInfo | undefined`
|
|
120
156
|
|
|
121
157
|
### generateEmail(options?)
|
|
@@ -123,31 +159,85 @@ console.log(`收到 ${result.emails.length} 封邮件`);
|
|
|
123
159
|
生成临时邮箱地址。
|
|
124
160
|
|
|
125
161
|
**参数:**
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
162
|
+
|
|
163
|
+
| 字段 | 类型 | 说明 |
|
|
164
|
+
|------|------|------|
|
|
165
|
+
| `channel` | `Channel` | 指定渠道(可选,不指定则随机) |
|
|
166
|
+
| `duration` | `number` | 有效期分钟数(仅 `tempmail` 渠道) |
|
|
167
|
+
| `domain` | `string` | 指定域名(仅 `tempmail-lol` 渠道) |
|
|
129
168
|
|
|
130
169
|
**返回值:** `EmailInfo`
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
170
|
+
|
|
171
|
+
| 字段 | 类型 | 说明 |
|
|
172
|
+
|------|------|------|
|
|
173
|
+
| `channel` | `Channel` | 渠道标识 |
|
|
174
|
+
| `email` | `string` | 邮箱地址 |
|
|
175
|
+
| `token` | `string?` | 访问令牌(部分渠道返回) |
|
|
176
|
+
| `expiresAt` | `string \| number?` | 过期时间 |
|
|
177
|
+
| `createdAt` | `string?` | 创建时间 |
|
|
135
178
|
|
|
136
179
|
### getEmails(options)
|
|
137
180
|
|
|
138
|
-
|
|
181
|
+
获取邮件列表。
|
|
139
182
|
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
183
|
+
**参数:**
|
|
184
|
+
|
|
185
|
+
| 字段 | 类型 | 必填 | 说明 |
|
|
186
|
+
|------|------|:----:|------|
|
|
187
|
+
| `channel` | `Channel` | ✅ | 渠道标识 |
|
|
188
|
+
| `email` | `string` | ✅ | 邮箱地址 |
|
|
189
|
+
| `token` | `string` | 部分 | 访问令牌(`tempmail-lol`、`awamail`、`mail-tm`、`dropmail` 必填) |
|
|
144
190
|
|
|
145
191
|
**返回值:** `GetEmailsResult`
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
192
|
+
|
|
193
|
+
| 字段 | 类型 | 说明 |
|
|
194
|
+
|------|------|------|
|
|
195
|
+
| `channel` | `Channel` | 渠道标识 |
|
|
196
|
+
| `email` | `string` | 邮箱地址 |
|
|
197
|
+
| `emails` | `Email[]` | 标准化邮件数组 |
|
|
198
|
+
| `success` | `boolean` | 是否成功 |
|
|
199
|
+
|
|
200
|
+
### 标准化邮件格式
|
|
201
|
+
|
|
202
|
+
所有渠道返回的邮件均使用统一的 `Email` 格式:
|
|
203
|
+
|
|
204
|
+
```typescript
|
|
205
|
+
interface Email {
|
|
206
|
+
id: string; // 邮件唯一标识
|
|
207
|
+
from: string; // 发件人邮箱地址
|
|
208
|
+
to: string; // 收件人邮箱地址
|
|
209
|
+
subject: string; // 邮件主题
|
|
210
|
+
text: string; // 纯文本内容
|
|
211
|
+
html: string; // HTML 内容
|
|
212
|
+
date: string; // ISO 8601 格式日期
|
|
213
|
+
isRead: boolean; // 是否已读
|
|
214
|
+
attachments: EmailAttachment[]; // 附件列表
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
interface EmailAttachment {
|
|
218
|
+
filename: string; // 文件名
|
|
219
|
+
size?: number; // 文件大小(字节)
|
|
220
|
+
contentType?: string; // MIME 类型
|
|
221
|
+
url?: string; // 下载地址
|
|
222
|
+
}
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
### TempEmailClient 类
|
|
226
|
+
|
|
227
|
+
封装了 Token 自动管理的便捷客户端:
|
|
228
|
+
|
|
229
|
+
```typescript
|
|
230
|
+
const client = new TempEmailClient();
|
|
231
|
+
await client.generate(options?); // 生成邮箱
|
|
232
|
+
await client.getEmails(); // 获取邮件(自动传递 token)
|
|
233
|
+
client.getEmailInfo(); // 获取当前邮箱信息
|
|
234
|
+
```
|
|
150
235
|
|
|
151
236
|
## 环境要求
|
|
152
237
|
|
|
153
|
-
- Node.js 18+(需要原生 fetch 支持)
|
|
238
|
+
- Node.js 18+(需要原生 `fetch` 支持)
|
|
239
|
+
- TypeScript 5.0+(类型定义)
|
|
240
|
+
|
|
241
|
+
## 许可证
|
|
242
|
+
|
|
243
|
+
GPL-3.0
|
package/demo/poll-emails.ts
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
8
|
import * as readline from 'readline';
|
|
9
|
-
import { generateEmail, getEmails, listChannels, getChannelInfo, Channel, EmailInfo, ChannelInfo } from '../src';
|
|
9
|
+
import { generateEmail, getEmails, listChannels, getChannelInfo, Channel, EmailInfo, ChannelInfo, Email } from '../src';
|
|
10
10
|
|
|
11
11
|
// 配置
|
|
12
12
|
const POLL_INTERVAL = 5000; // 轮询间隔(毫秒)
|
|
@@ -51,6 +51,29 @@ async function selectChannel(channels: ChannelInfo[]): Promise<Channel> {
|
|
|
51
51
|
}
|
|
52
52
|
}
|
|
53
53
|
|
|
54
|
+
function printEmail(email: Email, index: number): void {
|
|
55
|
+
console.log(`\n邮件 #${index + 1}`);
|
|
56
|
+
console.log('━'.repeat(50));
|
|
57
|
+
console.log(`ID: ${email.id || '无'}`);
|
|
58
|
+
console.log(`发件人: ${email.from || '未知'}`);
|
|
59
|
+
console.log(`收件人: ${email.to || '未知'}`);
|
|
60
|
+
console.log(`主题: ${email.subject || '无主题'}`);
|
|
61
|
+
console.log(`时间: ${email.date || '未知'}`);
|
|
62
|
+
console.log(`已读: ${email.isRead ? '是' : '否'}`);
|
|
63
|
+
if (email.text) {
|
|
64
|
+
const preview = email.text.substring(0, 200);
|
|
65
|
+
console.log(`内容: ${preview}`);
|
|
66
|
+
}
|
|
67
|
+
if (email.html) {
|
|
68
|
+
const htmlPreview = email.html.replace(/<[^>]*>/g, '').substring(0, 100);
|
|
69
|
+
console.log(`HTML: ${htmlPreview}...`);
|
|
70
|
+
}
|
|
71
|
+
if (email.attachments.length > 0) {
|
|
72
|
+
console.log(`附件: ${email.attachments.map(a => a.filename).join(', ')}`);
|
|
73
|
+
}
|
|
74
|
+
console.log('━'.repeat(50));
|
|
75
|
+
}
|
|
76
|
+
|
|
54
77
|
async function pollEmails(emailInfo: EmailInfo): Promise<void> {
|
|
55
78
|
console.log(`\n开始轮询邮件...(每 ${POLL_INTERVAL / 1000} 秒检查一次)`);
|
|
56
79
|
console.log('按 Ctrl+C 停止轮询\n');
|
|
@@ -76,45 +99,7 @@ async function pollEmails(emailInfo: EmailInfo): Promise<void> {
|
|
|
76
99
|
printJson('返回数据 (GetEmailsResult)', result);
|
|
77
100
|
|
|
78
101
|
for (let i = 0; i < result.emails.length; i++) {
|
|
79
|
-
|
|
80
|
-
console.log(`\n邮件 #${i + 1}`);
|
|
81
|
-
console.log('━'.repeat(50));
|
|
82
|
-
console.log(`ID: ${email.id || email.eid || email._id || '无'}`);
|
|
83
|
-
const fromAddr = email.from_address || email.address_from || email.from || '未知';
|
|
84
|
-
const fromName = email.from_name || email.name_from || '';
|
|
85
|
-
const fromDisplay = fromName ? `${fromName} <${fromAddr}>` : fromAddr;
|
|
86
|
-
console.log(`发件人: ${fromDisplay}`);
|
|
87
|
-
console.log(`收件人: ${email.to || email.name_to || email.email_address || result.email}`);
|
|
88
|
-
console.log(`主题: ${email.subject || email.e_subject || '无主题'}`);
|
|
89
|
-
let emailDate: string = '未知';
|
|
90
|
-
if (email.received_at) {
|
|
91
|
-
emailDate = email.received_at;
|
|
92
|
-
} else if (email.created_at) {
|
|
93
|
-
emailDate = email.created_at;
|
|
94
|
-
} else if (email.createdAt) {
|
|
95
|
-
emailDate = email.createdAt;
|
|
96
|
-
} else if (email.timestamp) {
|
|
97
|
-
emailDate = new Date(email.timestamp * 1000).toISOString();
|
|
98
|
-
} else if (email.e_date) {
|
|
99
|
-
emailDate = new Date(email.e_date).toISOString();
|
|
100
|
-
} else if (typeof email.date === 'number') {
|
|
101
|
-
emailDate = new Date(email.date).toISOString();
|
|
102
|
-
} else if (email.date) {
|
|
103
|
-
emailDate = email.date;
|
|
104
|
-
}
|
|
105
|
-
console.log(`时间: ${emailDate}`);
|
|
106
|
-
console.log(`已读: ${email.is_read ? '是' : '否'}`);
|
|
107
|
-
const body = email.text || email.body || email.content || '';
|
|
108
|
-
if (body) {
|
|
109
|
-
const preview = body.replace(/<[^>]*>/g, '').substring(0, 200);
|
|
110
|
-
console.log(`内容: ${preview}`);
|
|
111
|
-
}
|
|
112
|
-
const htmlContent = email.html_content || email.html || '';
|
|
113
|
-
if (htmlContent) {
|
|
114
|
-
const htmlPreview = htmlContent.replace(/<[^>]*>/g, '').substring(0, 100);
|
|
115
|
-
console.log(`HTML: ${htmlPreview}...`);
|
|
116
|
-
}
|
|
117
|
-
console.log('━'.repeat(50));
|
|
102
|
+
printEmail(result.emails[i], i);
|
|
118
103
|
}
|
|
119
104
|
|
|
120
105
|
// 收到邮件后可以选择继续轮询或退出
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Channel, EmailInfo, GetEmailsResult, GenerateEmailOptions, GetEmailsOptions } from './types';
|
|
2
|
-
export { Channel, EmailInfo, Email, GetEmailsResult, GenerateEmailOptions, GetEmailsOptions } from './types';
|
|
2
|
+
export { Channel, EmailInfo, Email, EmailAttachment, GetEmailsResult, GenerateEmailOptions, GetEmailsOptions } from './types';
|
|
3
|
+
export { normalizeEmail } from './normalize';
|
|
3
4
|
export interface ChannelInfo {
|
|
4
5
|
channel: Channel;
|
|
5
6
|
name: string;
|
package/dist/index.js
CHANGED
|
@@ -33,7 +33,7 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
33
33
|
};
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.TempEmailClient = void 0;
|
|
36
|
+
exports.TempEmailClient = exports.normalizeEmail = void 0;
|
|
37
37
|
exports.listChannels = listChannels;
|
|
38
38
|
exports.getChannelInfo = getChannelInfo;
|
|
39
39
|
exports.generateEmail = generateEmail;
|
|
@@ -42,18 +42,35 @@ const tempmail = __importStar(require("./providers/tempmail"));
|
|
|
42
42
|
const linshiEmail = __importStar(require("./providers/linshi-email"));
|
|
43
43
|
const tempmailLol = __importStar(require("./providers/tempmail-lol"));
|
|
44
44
|
const chatgptOrgUk = __importStar(require("./providers/chatgpt-org-uk"));
|
|
45
|
+
const tempmailLa = __importStar(require("./providers/tempmail-la"));
|
|
46
|
+
const tempMailIO = __importStar(require("./providers/temp-mail-io"));
|
|
47
|
+
const awamail = __importStar(require("./providers/awamail"));
|
|
48
|
+
const mailTm = __importStar(require("./providers/mail-tm"));
|
|
49
|
+
const dropmail = __importStar(require("./providers/dropmail"));
|
|
50
|
+
var normalize_1 = require("./normalize");
|
|
51
|
+
Object.defineProperty(exports, "normalizeEmail", { enumerable: true, get: function () { return normalize_1.normalizeEmail; } });
|
|
45
52
|
const providers = {
|
|
46
53
|
'tempmail': tempmail,
|
|
47
54
|
'linshi-email': linshiEmail,
|
|
48
55
|
'tempmail-lol': tempmailLol,
|
|
49
56
|
'chatgpt-org-uk': chatgptOrgUk,
|
|
57
|
+
'tempmail-la': tempmailLa,
|
|
58
|
+
'temp-mail-io': tempMailIO,
|
|
59
|
+
'awamail': awamail,
|
|
60
|
+
'mail-tm': mailTm,
|
|
61
|
+
'dropmail': dropmail,
|
|
50
62
|
};
|
|
51
|
-
const allChannels = ['tempmail', 'linshi-email', 'tempmail-lol', 'chatgpt-org-uk'];
|
|
63
|
+
const allChannels = ['tempmail', 'linshi-email', 'tempmail-lol', 'chatgpt-org-uk', 'tempmail-la', 'temp-mail-io', 'awamail', 'mail-tm', 'dropmail'];
|
|
52
64
|
const channelInfoMap = {
|
|
53
65
|
'tempmail': { channel: 'tempmail', name: 'TempMail', website: 'tempmail.ing' },
|
|
54
66
|
'linshi-email': { channel: 'linshi-email', name: '临时邮箱', website: 'linshi-email.com' },
|
|
55
67
|
'tempmail-lol': { channel: 'tempmail-lol', name: 'TempMail LOL', website: 'tempmail.lol' },
|
|
56
68
|
'chatgpt-org-uk': { channel: 'chatgpt-org-uk', name: 'ChatGPT Mail', website: 'mail.chatgpt.org.uk' },
|
|
69
|
+
'tempmail-la': { channel: 'tempmail-la', name: 'TempMail LA', website: 'tempmail.la' },
|
|
70
|
+
'temp-mail-io': { channel: 'temp-mail-io', name: 'Temp Mail IO', website: 'temp-mail.io' },
|
|
71
|
+
'awamail': { channel: 'awamail', name: 'AwaMail', website: 'awamail.com' },
|
|
72
|
+
'mail-tm': { channel: 'mail-tm', name: 'Mail.tm', website: 'mail.tm' },
|
|
73
|
+
'dropmail': { channel: 'dropmail', name: 'DropMail', website: 'dropmail.me' },
|
|
57
74
|
};
|
|
58
75
|
/**
|
|
59
76
|
* 获取所有支持的渠道列表
|
|
@@ -78,6 +95,16 @@ async function generateEmail(options = {}) {
|
|
|
78
95
|
return tempmailLol.generateEmail(options.domain || null);
|
|
79
96
|
case 'chatgpt-org-uk':
|
|
80
97
|
return chatgptOrgUk.generateEmail();
|
|
98
|
+
case 'tempmail-la':
|
|
99
|
+
return tempmailLa.generateEmail();
|
|
100
|
+
case 'temp-mail-io':
|
|
101
|
+
return tempMailIO.generateEmail();
|
|
102
|
+
case 'awamail':
|
|
103
|
+
return awamail.generateEmail();
|
|
104
|
+
case 'mail-tm':
|
|
105
|
+
return mailTm.generateEmail();
|
|
106
|
+
case 'dropmail':
|
|
107
|
+
return dropmail.generateEmail();
|
|
81
108
|
default:
|
|
82
109
|
throw new Error(`Unknown channel: ${channel}`);
|
|
83
110
|
}
|
|
@@ -102,11 +129,35 @@ async function getEmails(options) {
|
|
|
102
129
|
if (!token) {
|
|
103
130
|
throw new Error('Token is required for tempmail-lol channel');
|
|
104
131
|
}
|
|
105
|
-
emails = await tempmailLol.getEmails(token);
|
|
132
|
+
emails = await tempmailLol.getEmails(token, email);
|
|
106
133
|
break;
|
|
107
134
|
case 'chatgpt-org-uk':
|
|
108
135
|
emails = await chatgptOrgUk.getEmails(email);
|
|
109
136
|
break;
|
|
137
|
+
case 'tempmail-la':
|
|
138
|
+
emails = await tempmailLa.getEmails(email);
|
|
139
|
+
break;
|
|
140
|
+
case 'temp-mail-io':
|
|
141
|
+
emails = await tempMailIO.getEmails(email);
|
|
142
|
+
break;
|
|
143
|
+
case 'awamail':
|
|
144
|
+
if (!token) {
|
|
145
|
+
throw new Error('Token is required for awamail channel');
|
|
146
|
+
}
|
|
147
|
+
emails = await awamail.getEmails(token, email);
|
|
148
|
+
break;
|
|
149
|
+
case 'mail-tm':
|
|
150
|
+
if (!token) {
|
|
151
|
+
throw new Error('Token is required for mail-tm channel');
|
|
152
|
+
}
|
|
153
|
+
emails = await mailTm.getEmails(token, email);
|
|
154
|
+
break;
|
|
155
|
+
case 'dropmail':
|
|
156
|
+
if (!token) {
|
|
157
|
+
throw new Error('Token is required for dropmail channel');
|
|
158
|
+
}
|
|
159
|
+
emails = await dropmail.getEmails(token, email);
|
|
160
|
+
break;
|
|
110
161
|
default:
|
|
111
162
|
throw new Error(`Unknown channel: ${channel}`);
|
|
112
163
|
}
|
|
@@ -147,4 +198,4 @@ exports.default = {
|
|
|
147
198
|
getEmails,
|
|
148
199
|
TempEmailClient,
|
|
149
200
|
};
|
|
150
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBaUNBLG9DQUVDO0FBS0Qsd0NBRUM7QUFFRCxzQ0FlQztBQUVELDhCQXNDQztBQW5HRCwrREFBaUQ7QUFDakQsc0VBQXdEO0FBQ3hELHNFQUF3RDtBQUN4RCx5RUFBMkQ7QUFLM0QsTUFBTSxTQUFTLEdBQUc7SUFDaEIsVUFBVSxFQUFFLFFBQVE7SUFDcEIsY0FBYyxFQUFFLFdBQVc7SUFDM0IsY0FBYyxFQUFFLFdBQVc7SUFDM0IsZ0JBQWdCLEVBQUUsWUFBWTtDQUMvQixDQUFDO0FBRUYsTUFBTSxXQUFXLEdBQWMsQ0FBQyxVQUFVLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0FBUTlGLE1BQU0sY0FBYyxHQUFpQztJQUNuRCxVQUFVLEVBQUUsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRTtJQUM5RSxjQUFjLEVBQUUsRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLGtCQUFrQixFQUFFO0lBQ3RGLGNBQWMsRUFBRSxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFO0lBQzFGLGdCQUFnQixFQUFFLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsT0FBTyxFQUFFLHFCQUFxQixFQUFFO0NBQ3RHLENBQUM7QUFFRjs7R0FFRztBQUNILFNBQWdCLFlBQVk7SUFDMUIsT0FBTyxXQUFXLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFD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SyxDQUFDLDRDQUE0QyxDQUFDLENBQUM7UUFDaEUsQ0FBQztRQUVELE9BQU8sU0FBUyxDQUFDO1lBQ2YsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTztZQUMvQixLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLO1lBQzNCLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUs7U0FDNUIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFlBQVk7UUFDVixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztDQUNGO0FBdkJELDBDQXVCQztBQUVELGtCQUFlO0lBQ2IsWUFBWTtJQUNaLGNBQWM7SUFDZCxhQUFhO0lBQ2IsU0FBUztJQUNULGVBQWU7Q0FDaEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHRlbXBtYWlsIGZyb20gJy4vcHJvdmlkZXJzL3RlbXBtYWlsJztcbmltcG9ydCAqIGFzIGxpbnNoaUVtYWlsIGZyb20gJy4vcHJvdmlkZXJzL2xpbnNoaS1lbWFpbCc7XG5pbXBvcnQgKiBhcyB0ZW1wbWFpbExvbCBmcm9tICcuL3Byb3ZpZGVycy90ZW1wbWFpbC1sb2wnO1xuaW1wb3J0ICogYXMgY2hhdGdwdE9yZ1VrIGZyb20gJy4vcHJvdmlkZXJzL2NoYXRncHQtb3JnLXVrJztcbmltcG9ydCB7IENoYW5uZWwsIEVtYWlsSW5mbywgRW1haWwsIEdldEVtYWlsc1Jlc3VsdCwgR2VuZXJhdGVFbWFpbE9wdGlvbnMsIEdldEVtYWlsc09wdGlvbnMgfSBmcm9tICcuL3R5cGVzJztcblxuZXhwb3J0IHsgQ2hhbm5lbCwgRW1haWxJbmZvLCBFbWFpbCwgR2V0RW1haWxzUmVzdWx0LCBHZW5lcmF0ZUVtYWlsT3B0aW9ucywgR2V0RW1haWxzT3B0aW9ucyB9IGZyb20gJy4vdHlwZXMnO1xuXG5jb25zdCBwcm92aWRlcnMgPSB7XG4gICd0ZW1wbWFpbCc6IHRlbXBtYWlsLFxuICAnbGluc2hpLWVtYWlsJzogbGluc2hpRW1haWwsXG4gICd0ZW1wbWFpbC1sb2wnOiB0ZW1wbWFpbExvbCxcbiAgJ2NoYXRncHQtb3JnLXVrJzogY2hhdGdwdE9yZ1VrLFxufTtcblxuY29uc3QgYWxsQ2hhbm5lbHM6IENoYW5uZWxbXSA9IFsndGVtcG1haWwnLCAnbGluc2hpLWVtYWlsJywgJ3RlbXBtYWlsLWxvbCcsICdjaGF0Z3B0LW9yZy11ayddO1xuXG5leHBvcnQgaW50ZXJmYWNlIENoYW5uZWxJbmZvIHtcbiAgY2hhbm5lbDogQ2hhbm5lbDtcbiAgbmFtZTogc3RyaW5nO1xuICB3ZWJzaXRlOiBzdHJpbmc7XG59XG5cbmNvbnN0IGNoYW5uZWxJbmZvTWFwOiBSZWNvcmQ8Q2hhbm5lbCwgQ2hhbm5lbEluZm8+ID0ge1xuICAndGVtcG1haWwnOiB7IGNoYW5uZWw6ICd0ZW1wbWFpbCcsIG5hbWU6ICdUZW1wTWFpbCcsIHdlYnNpdGU6ICd0ZW1wbWFpbC5pbmcnIH0sXG4gICdsaW5zaGktZW1haWwnOiB7IGNoYW5uZWw6ICdsaW5zaGktZW1haWwnLCBuYW1lOiAn5Li05pe26YKu566xJywgd2Vic2l0ZTogJ2xpbnNoaS1lbWFpbC5jb20nIH0sXG4gICd0ZW1wbWFpbC1sb2wnOiB7IGNoYW5uZWw6ICd0ZW1wbWFpbC1sb2wnLCBuYW1lOiAnVGVtcE1haWwgTE9MJywgd2Vic2l0ZTogJ3RlbXBtYWlsLmxvbCcgfSxcbiAgJ2NoYXRncHQtb3JnLXVrJzogeyBjaGFubmVsOiAnY2hhdGdwdC1vcmctdWsnLCBuYW1lOiAnQ2hhdEdQVCBNYWlsJywgd2Vic2l0ZTogJ21haWwuY2hhdGdwdC5vcmcudWsnIH0sXG59O1xuXG4vKipcbiAqIOiOt+WPluaJgOacieaUr+aMgeeahOa4oOmBk+WIl+ihqFxuICovXG5leHBvcnQgZnVuY3Rpb24gbGlzdENoYW5uZWxzKCk6IENoYW5uZWxJbmZvW10ge1xuICByZXR1cm4gYWxsQ2hhbm5lbHMubWFwKGNoID0+IGNoYW5uZWxJbmZvTWFwW2NoXSk7XG59XG5cbi8qKlxuICog6I635Y+W5oyH5a6a5rig6YGT5L+h5oGvXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDaGFubmVsSW5mbyhjaGFubmVsOiBDaGFubmVsKTogQ2hhbm5lbEluZm8gfCB1bmRlZmluZWQge1xuICByZXR1cm4gY2hhbm5lbEluZm9NYXBbY2hhbm5lbF07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZW5lcmF0ZUVtYWlsKG9wdGlvbnM6IEdlbmVyYXRlRW1haWxPcHRpb25zID0ge30pOiBQcm9taXNlPEVtYWlsSW5mbz4ge1xuICBjb25zdCBjaGFubmVsID0gb3B0aW9ucy5jaGFubmVsIHx8IGFsbENoYW5uZWxzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGFsbENoYW5uZWxzLmxlbmd0aCldO1xuICBcbiAgc3dpdGNoIChjaGFubmVsKSB7XG4gICAgY2FzZSAndGVtcG1haWwnOlxuICAgICAgcmV0dXJuIHRlbXBtYWlsLmdlbmVyYXRlRW1haWwob3B0aW9ucy5kdXJhdGlvbiB8fCAzMCk7XG4gICAgY2FzZSAnbGluc2hpLWVtYWlsJzpcbiAgICAgIHJldHVybiBsaW5zaGlFbWFpbC5nZW5lcmF0ZUVtYWlsKCk7XG4gICAgY2FzZSAndGVtcG1haWwtbG9sJzpcbiAgICAgIHJldHVybiB0ZW1wbWFpbExvbC5nZW5lcmF0ZUVtYWlsKG9wdGlvbnMuZG9tYWluIHx8IG51bGwpO1xuICAgIGNhc2UgJ2NoYXRncHQtb3JnLXVrJzpcbiAgICAgIHJldHVybiBjaGF0Z3B0T3JnVWsuZ2VuZXJhdGVFbWFpbCgpO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gY2hhbm5lbDogJHtjaGFubmVsfWApO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRFbWFpbHMob3B0aW9uczogR2V0RW1haWxzT3B0aW9ucyk6IFByb21pc2U8R2V0RW1haWxzUmVzdWx0PiB7XG4gIGNvbnN0IHsgY2hhbm5lbCwgZW1haWwsIHRva2VuIH0gPSBvcHRpb25zO1xuICBcbiAgaWYgKCFjaGFubmVsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDaGFubmVsIGlzIHJlcXVpcmVkJyk7XG4gIH1cbiAgaWYgKCFlbWFpbCAmJiBjaGFubmVsICE9PSAndGVtcG1haWwtbG9sJykge1xuICAgIHRocm93IG5ldyBFcnJvcignRW1haWwgaXMgcmVxdWlyZWQnKTtcbiAgfVxuXG4gIGxldCBlbWFpbHM6IEVtYWlsW10gPSBbXTtcblxuICBzd2l0Y2ggKGNoYW5uZWwpIHtcbiAgICBjYXNlICd0ZW1wbWFpbCc6XG4gICAgICBlbWFpbHMgPSBhd2FpdCB0ZW1wbWFpbC5nZXRFbWFpbHMoZW1haWwpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnbGluc2hpLWVtYWlsJzpcbiAgICAgIGVtYWlscyA9IGF3YWl0IGxpbnNoaUVtYWlsLmdldEVtYWlscyhlbWFpbCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICd0ZW1wbWFpbC1sb2wnOlxuICAgICAgaWYgKCF0b2tlbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Rva2VuIGlzIHJlcXVpcmVkIGZvciB0ZW1wbWFpbC1sb2wgY2hhbm5lbCcpO1xuICAgICAgfVxuICAgICAgZW1haWxzID0gYXdhaXQgdGVtcG1haWxMb2wuZ2V0RW1haWxzKHRva2VuKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2NoYXRncHQtb3JnLXVrJzpcbiAgICAgIGVtYWlscyA9IGF3YWl0IGNoYXRncHRPcmdVay5nZXRFbWFpbHMoZW1haWwpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBjaGFubmVsOiAke2NoYW5uZWx9YCk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGNoYW5uZWwsXG4gICAgZW1haWwsXG4gICAgZW1haWxzLFxuICAgIHN1Y2Nlc3M6IHRydWUsXG4gIH07XG59XG5cbmV4cG9ydCBjbGFzcyBUZW1wRW1haWxDbGllbnQge1xuICBwcml2YXRlIGVtYWlsSW5mbzogRW1haWxJbmZvIHwgbnVsbCA9IG51bGw7XG5cbiAgYXN5bmMgZ2VuZXJhdGUob3B0aW9uczogR2VuZXJhdGVFbWFpbE9wdGlvbnMgPSB7fSk6IFByb21pc2U8RW1haWxJbmZvPiB7XG4gICAgdGhpcy5lbWFpbEluZm8gPSBhd2FpdCBnZW5lcmF0ZUVtYWlsKG9wdGlvbnMpO1xuICAgIHJldHVybiB0aGlzLmVtYWlsSW5mbztcbiAgfVxuXG4gIGFzeW5jIGdldEVtYWlscygpOiBQcm9taXNlPEdldEVtYWlsc1Jlc3VsdD4ge1xuICAgIGlmICghdGhpcy5lbWFpbEluZm8pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm8gZW1haWwgZ2VuZXJhdGVkLiBDYWxsIGdlbmVyYXRlKCkgZmlyc3QuJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGdldEVtYWlscyh7XG4gICAgICBjaGFubmVsOiB0aGlzLmVtYWlsSW5mby5jaGFubmVsLFxuICAgICAgZW1haWw6IHRoaXMuZW1haWxJbmZvLmVtYWlsLFxuICAgICAgdG9rZW46IHRoaXMuZW1haWxJbmZvLnRva2VuLFxuICAgIH0pO1xuICB9XG5cbiAgZ2V0RW1haWxJbmZvKCk6IEVtYWlsSW5mbyB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLmVtYWlsSW5mbztcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGxpc3RDaGFubmVscyxcbiAgZ2V0Q2hhbm5lbEluZm8sXG4gIGdlbmVyYXRlRW1haWwsXG4gIGdldEVtYWlscyxcbiAgVGVtcEVtYWlsQ2xpZW50LFxufTtcbiJdfQ==
|
|
201
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBaURBLG9DQUVDO0FBS0Qsd0NBRUM7QUFFRCxzQ0F5QkM7QUFFRCw4QkE4REM7QUFySkQsK0RBQWlEO0FBQ2pELHNFQUF3RDtBQUN4RCxzRUFBd0Q7QUFDeEQseUVBQTJEO0FBQzNELG9FQUFzRDtBQUN0RCxxRUFBdUQ7QUFDdkQsNkRBQStDO0FBQy9DLDREQUE4QztBQUM5QywrREFBaUQ7QUFJakQseUNBQTZDO0FBQXBDLDJHQUFBLGNBQWMsT0FBQTtBQUV2QixNQUFNLFNBQVMsR0FBRztJQUNoQixVQUFVLEVBQUUsUUFBUTtJQUNwQixjQUFjLEVBQUUsV0FBVztJQUMzQixjQUFjLEVBQUUsV0FBVztJQUMzQixnQkFBZ0IsRUFBRSxZQUFZO0lBQzlCLGFBQWEsRUFBRSxVQUFVO0lBQ3pCLGNBQWMsRUFBRSxVQUFVO0lBQzFCLFNBQVMsRUFBRSxPQUFPO0lBQ2xCLFNBQVMsRUFBRSxNQUFNO0lBQ2pCLFVBQVUsRUFBRSxRQUFRO0NBQ3JCLENBQUM7QUFFRixNQUFNLFdBQVcsR0FBYyxDQUFDLFVBQVUsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQztBQVEvSixNQUFNLGNBQWMsR0FBaUM7SUFDbkQsVUFBVSxFQUFFLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUU7SUFDOUUsY0FBYyxFQUFFLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRTtJQUN0RixjQUFjLEVBQUUsRUFBRSxPQUFPLEVBQUUsY0FB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Q0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFlBQVk7UUFDVixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztDQUNGO0FBdkJELDBDQXVCQztBQUVELGtCQUFlO0lBQ2IsWUFBWTtJQUNaLGNBQWM7SUFDZCxhQUFhO0lBQ2IsU0FBUztJQUNULGVBQWU7Q0FDaEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHRlbXBtYWlsIGZyb20gJy4vcHJvdmlkZXJzL3RlbXBtYWlsJztcbmltcG9ydCAqIGFzIGxpbnNoaUVtYWlsIGZyb20gJy4vcHJvdmlkZXJzL2xpbnNoaS1lbWFpbCc7XG5pbXBvcnQgKiBhcyB0ZW1wbWFpbExvbCBmcm9tICcuL3Byb3ZpZGVycy90ZW1wbWFpbC1sb2wnO1xuaW1wb3J0ICogYXMgY2hhdGdwdE9yZ1VrIGZyb20gJy4vcHJvdmlkZXJzL2NoYXRncHQtb3JnLXVrJztcbmltcG9ydCAqIGFzIHRlbXBtYWlsTGEgZnJvbSAnLi9wcm92aWRlcnMvdGVtcG1haWwtbGEnO1xuaW1wb3J0ICogYXMgdGVtcE1haWxJTyBmcm9tICcuL3Byb3ZpZGVycy90ZW1wLW1haWwtaW8nO1xuaW1wb3J0ICogYXMgYXdhbWFpbCBmcm9tICcuL3Byb3ZpZGVycy9hd2FtYWlsJztcbmltcG9ydCAqIGFzIG1haWxUbSBmcm9tICcuL3Byb3ZpZGVycy9tYWlsLXRtJztcbmltcG9ydCAqIGFzIGRyb3BtYWlsIGZyb20gJy4vcHJvdmlkZXJzL2Ryb3BtYWlsJztcbmltcG9ydCB7IENoYW5uZWwsIEVtYWlsSW5mbywgRW1haWwsIEVtYWlsQXR0YWNobWVudCwgR2V0RW1haWxzUmVzdWx0LCBHZW5lcmF0ZUVtYWlsT3B0aW9ucywgR2V0RW1haWxzT3B0aW9ucyB9IGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgeyBDaGFubmVsLCBFbWFpbEluZm8sIEVtYWlsLCBFbWFpbEF0dGFjaG1lbnQsIEdldEVtYWlsc1Jlc3VsdCwgR2VuZXJhdGVFbWFpbE9wdGlvbnMsIEdldEVtYWlsc09wdGlvbnMgfSBmcm9tICcuL3R5cGVzJztcbmV4cG9ydCB7IG5vcm1hbGl6ZUVtYWlsIH0gZnJvbSAnLi9ub3JtYWxpemUnO1xuXG5jb25zdCBwcm92aWRlcnMgPSB7XG4gICd0ZW1wbWFpbCc6IHRlbXBtYWlsLFxuICAnbGluc2hpLWVtYWlsJzogbGluc2hpRW1haWwsXG4gICd0ZW1wbWFpbC1sb2wnOiB0ZW1wbWFpbExvbCxcbiAgJ2NoYXRncHQtb3JnLXVrJzogY2hhdGdwdE9yZ1VrLFxuICAndGVtcG1haWwtbGEnOiB0ZW1wbWFpbExhLFxuICAndGVtcC1tYWlsLWlvJzogdGVtcE1haWxJTyxcbiAgJ2F3YW1haWwnOiBhd2FtYWlsLFxuICAnbWFpbC10bSc6IG1haWxUbSxcbiAgJ2Ryb3BtYWlsJzogZHJvcG1haWwsXG59O1xuXG5jb25zdCBhbGxDaGFubmVsczogQ2hhbm5lbFtdID0gWyd0ZW1wbWFpbCcsICdsaW5zaGktZW1haWwnLCAndGVtcG1haWwtbG9sJywgJ2NoYXRncHQtb3JnLXVrJywgJ3RlbXBtYWlsLWxhJywgJ3RlbXAtbWFpbC1pbycsICdhd2FtYWlsJywgJ21haWwtdG0nLCAnZHJvcG1haWwnXTtcblxuZXhwb3J0IGludGVyZmFjZSBDaGFubmVsSW5mbyB7XG4gIGNoYW5uZWw6IENoYW5uZWw7XG4gIG5hbWU6IHN0cmluZztcbiAgd2Vic2l0ZTogc3RyaW5nO1xufVxuXG5jb25zdCBjaGFubmVsSW5mb01hcDogUmVjb3JkPENoYW5uZWwsIENoYW5uZWxJbmZvPiA9IHtcbiAgJ3RlbXBtYWlsJzogeyBjaGFubmVsOiAndGVtcG1haWwnLCBuYW1lOiAnVGVtcE1haWwnLCB3ZWJzaXRlOiAndGVtcG1haWwuaW5nJyB9LFxuICAnbGluc2hpLWVtYWlsJzogeyBjaGFubmVsOiAnbGluc2hpLWVtYWlsJywgbmFtZTogJ+S4tOaXtumCrueusScsIHdlYnNpdGU6ICdsaW5zaGktZW1haWwuY29tJyB9LFxuICAndGVtcG1haWwtbG9sJzogeyBjaGFubmVsOiAndGVtcG1haWwtbG9sJywgbmFtZTogJ1RlbXBNYWlsIExPTCcsIHdlYnNpdGU6ICd0ZW1wbWFpbC5sb2wnIH0sXG4gICdjaGF0Z3B0LW9yZy11ayc6IHsgY2hhbm5lbDogJ2NoYXRncHQtb3JnLXVrJywgbmFtZTogJ0NoYXRHUFQgTWFpbCcsIHdlYnNpdGU6ICdtYWlsLmNoYXRncHQub3JnLnVrJyB9LFxuICAndGVtcG1haWwtbGEnOiB7IGNoYW5uZWw6ICd0ZW1wbWFpbC1sYScsIG5hbWU6ICdUZW1wTWFpbCBMQScsIHdlYnNpdGU6ICd0ZW1wbWFpbC5sYScgfSxcbiAgJ3RlbXAtbWFpbC1pbyc6IHsgY2hhbm5lbDogJ3RlbXAtbWFpbC1pbycsIG5hbWU6ICdUZW1wIE1haWwgSU8nLCB3ZWJzaXRlOiAndGVtcC1tYWlsLmlvJyB9LFxuICAnYXdhbWFpbCc6IHsgY2hhbm5lbDogJ2F3YW1haWwnLCBuYW1lOiAnQXdhTWFpbCcsIHdlYnNpdGU6ICdhd2FtYWlsLmNvbScgfSxcbiAgJ21haWwtdG0nOiB7IGNoYW5uZWw6ICdtYWlsLXRtJywgbmFtZTogJ01haWwudG0nLCB3ZWJzaXRlOiAnbWFpbC50bScgfSxcbiAgJ2Ryb3BtYWlsJzogeyBjaGFubmVsOiAnZHJvcG1haWwnLCBuYW1lOiAnRHJvcE1haWwnLCB3ZWJzaXRlOiAnZHJvcG1haWwubWUnIH0sXG59O1xuXG4vKipcbiAqIOiOt+WPluaJgOacieaUr+aMgeeahOa4oOmBk+WIl+ihqFxuICovXG5leHBvcnQgZnVuY3Rpb24gbGlzdENoYW5uZWxzKCk6IENoYW5uZWxJbmZvW10ge1xuICByZXR1cm4gYWxsQ2hhbm5lbHMubWFwKGNoID0+IGNoYW5uZWxJbmZvTWFwW2NoXSk7XG59XG5cbi8qKlxuICog6I635Y+W5oyH5a6a5rig6YGT5L+h5oGvXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDaGFubmVsSW5mbyhjaGFubmVsOiBDaGFubmVsKTogQ2hhbm5lbEluZm8gfCB1bmRlZmluZWQge1xuICByZXR1cm4gY2hhbm5lbEluZm9NYXBbY2hhbm5lbF07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZW5lcmF0ZUVtYWlsKG9wdGlvbnM6IEdlbmVyYXRlRW1haWxPcHRpb25zID0ge30pOiBQcm9taXNlPEVtYWlsSW5mbz4ge1xuICBjb25zdCBjaGFubmVsID0gb3B0aW9ucy5jaGFubmVsIHx8IGFsbENoYW5uZWxzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGFsbENoYW5uZWxzLmxlbmd0aCldO1xuICBcbiAgc3dpdGNoIChjaGFubmVsKSB7XG4gICAgY2FzZSAndGVtcG1haWwnOlxuICAgICAgcmV0dXJuIHRlbXBtYWlsLmdlbmVyYXRlRW1haWwob3B0aW9ucy5kdXJhdGlvbiB8fCAzMCk7XG4gICAgY2FzZSAnbGluc2hpLWVtYWlsJzpcbiAgICAgIHJldHVybiBsaW5zaGlFbWFpbC5nZW5lcmF0ZUVtYWlsKCk7XG4gICAgY2FzZSAndGVtcG1haWwtbG9sJzpcbiAgICAgIHJldHVybiB0ZW1wbWFpbExvbC5nZW5lcmF0ZUVtYWlsKG9wdGlvbnMuZG9tYWluIHx8IG51bGwpO1xuICAgIGNhc2UgJ2NoYXRncHQtb3JnLXVrJzpcbiAgICAgIHJldHVybiBjaGF0Z3B0T3JnVWsuZ2VuZXJhdGVFbWFpbCgpO1xuICAgIGNhc2UgJ3RlbXBtYWlsLWxhJzpcbiAgICAgIHJldHVybiB0ZW1wbWFpbExhLmdlbmVyYXRlRW1haWwoKTtcbiAgICBjYXNlICd0ZW1wLW1haWwtaW8nOlxuICAgICAgcmV0dXJuIHRlbXBNYWlsSU8uZ2VuZXJhdGVFbWFpbCgpO1xuICAgIGNhc2UgJ2F3YW1haWwnOlxuICAgICAgcmV0dXJuIGF3YW1haWwuZ2VuZXJhdGVFbWFpbCgpO1xuICAgIGNhc2UgJ21haWwtdG0nOlxuICAgICAgcmV0dXJuIG1haWxUbS5nZW5lcmF0ZUVtYWlsKCk7XG4gICAgY2FzZSAnZHJvcG1haWwnOlxuICAgICAgcmV0dXJuIGRyb3BtYWlsLmdlbmVyYXRlRW1haWwoKTtcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGNoYW5uZWw6ICR7Y2hhbm5lbH1gKTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0RW1haWxzKG9wdGlvbnM6IEdldEVtYWlsc09wdGlvbnMpOiBQcm9taXNlPEdldEVtYWlsc1Jlc3VsdD4ge1xuICBjb25zdCB7IGNoYW5uZWwsIGVtYWlsLCB0b2tlbiB9ID0gb3B0aW9ucztcbiAgXG4gIGlmICghY2hhbm5lbCkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ2hhbm5lbCBpcyByZXF1aXJlZCcpO1xuICB9XG4gIGlmICghZW1haWwgJiYgY2hhbm5lbCAhPT0gJ3RlbXBtYWlsLWxvbCcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0VtYWlsIGlzIHJlcXVpcmVkJyk7XG4gIH1cblxuICBsZXQgZW1haWxzOiBFbWFpbFtdID0gW107XG5cbiAgc3dpdGNoIChjaGFubmVsKSB7XG4gICAgY2FzZSAndGVtcG1haWwnOlxuICAgICAgZW1haWxzID0gYXdhaXQgdGVtcG1haWwuZ2V0RW1haWxzKGVtYWlsKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2xpbnNoaS1lbWFpbCc6XG4gICAgICBlbWFpbHMgPSBhd2FpdCBsaW5zaGlFbWFpbC5nZXRFbWFpbHMoZW1haWwpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAndGVtcG1haWwtbG9sJzpcbiAgICAgIGlmICghdG9rZW4pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUb2tlbiBpcyByZXF1aXJlZCBmb3IgdGVtcG1haWwtbG9sIGNoYW5uZWwnKTtcbiAgICAgIH1cbiAgICAgIGVtYWlscyA9IGF3YWl0IHRlbXBtYWlsTG9sLmdldEVtYWlscyh0b2tlbiwgZW1haWwpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnY2hhdGdwdC1vcmctdWsnOlxuICAgICAgZW1haWxzID0gYXdhaXQgY2hhdGdwdE9yZ1VrLmdldEVtYWlscyhlbWFpbCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICd0ZW1wbWFpbC1sYSc6XG4gICAgICBlbWFpbHMgPSBhd2FpdCB0ZW1wbWFpbExhLmdldEVtYWlscyhlbWFpbCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICd0ZW1wLW1haWwtaW8nOlxuICAgICAgZW1haWxzID0gYXdhaXQgdGVtcE1haWxJTy5nZXRFbWFpbHMoZW1haWwpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnYXdhbWFpbCc6XG4gICAgICBpZiAoIXRva2VuKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVG9rZW4gaXMgcmVxdWlyZWQgZm9yIGF3YW1haWwgY2hhbm5lbCcpO1xuICAgICAgfVxuICAgICAgZW1haWxzID0gYXdhaXQgYXdhbWFpbC5nZXRFbWFpbHModG9rZW4sIGVtYWlsKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ21haWwtdG0nOlxuICAgICAgaWYgKCF0b2tlbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Rva2VuIGlzIHJlcXVpcmVkIGZvciBtYWlsLXRtIGNoYW5uZWwnKTtcbiAgICAgIH1cbiAgICAgIGVtYWlscyA9IGF3YWl0IG1haWxUbS5nZXRFbWFpbHModG9rZW4sIGVtYWlsKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2Ryb3BtYWlsJzpcbiAgICAgIGlmICghdG9rZW4pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUb2tlbiBpcyByZXF1aXJlZCBmb3IgZHJvcG1haWwgY2hhbm5lbCcpO1xuICAgICAgfVxuICAgICAgZW1haWxzID0gYXdhaXQgZHJvcG1haWwuZ2V0RW1haWxzKHRva2VuLCBlbWFpbCk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGNoYW5uZWw6ICR7Y2hhbm5lbH1gKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgY2hhbm5lbCxcbiAgICBlbWFpbCxcbiAgICBlbWFpbHMsXG4gICAgc3VjY2VzczogdHJ1ZSxcbiAgfTtcbn1cblxuZXhwb3J0IGNsYXNzIFRlbXBFbWFpbENsaWVudCB7XG4gIHByaXZhdGUgZW1haWxJbmZvOiBFbWFpbEluZm8gfCBudWxsID0gbnVsbDtcblxuICBhc3luYyBnZW5lcmF0ZShvcHRpb25zOiBHZW5lcmF0ZUVtYWlsT3B0aW9ucyA9IHt9KTogUHJvbWlzZTxFbWFpbEluZm8+IHtcbiAgICB0aGlzLmVtYWlsSW5mbyA9IGF3YWl0IGdlbmVyYXRlRW1haWwob3B0aW9ucyk7XG4gICAgcmV0dXJuIHRoaXMuZW1haWxJbmZvO1xuICB9XG5cbiAgYXN5bmMgZ2V0RW1haWxzKCk6IFByb21pc2U8R2V0RW1haWxzUmVzdWx0PiB7XG4gICAgaWYgKCF0aGlzLmVtYWlsSW5mbykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBlbWFpbCBnZW5lcmF0ZWQuIENhbGwgZ2VuZXJhdGUoKSBmaXJzdC4nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZ2V0RW1haWxzKHtcbiAgICAgIGNoYW5uZWw6IHRoaXMuZW1haWxJbmZvLmNoYW5uZWwsXG4gICAgICBlbWFpbDogdGhpcy5lbWFpbEluZm8uZW1haWwsXG4gICAgICB0b2tlbjogdGhpcy5lbWFpbEluZm8udG9rZW4sXG4gICAgfSk7XG4gIH1cblxuICBnZXRFbWFpbEluZm8oKTogRW1haWxJbmZvIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuZW1haWxJbmZvO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbGlzdENoYW5uZWxzLFxuICBnZXRDaGFubmVsSW5mbyxcbiAgZ2VuZXJhdGVFbWFpbCxcbiAgZ2V0RW1haWxzLFxuICBUZW1wRW1haWxDbGllbnQsXG59O1xuIl19
|