tempmail-sdk 1.0.0
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 +153 -0
- package/demo/poll-emails.ts +187 -0
- package/dist/index.d.ts +31 -0
- package/dist/index.js +150 -0
- package/dist/providers/chatgpt-org-uk.d.ts +3 -0
- package/dist/providers/chatgpt-org-uk.js +49 -0
- package/dist/providers/linshi-email.d.ts +3 -0
- package/dist/providers/linshi-email.js +53 -0
- package/dist/providers/tempmail-lol.d.ts +3 -0
- package/dist/providers/tempmail-lol.js +46 -0
- package/dist/providers/tempmail.d.ts +3 -0
- package/dist/providers/tempmail.js +51 -0
- package/dist/types.d.ts +53 -0
- package/dist/types.js +3 -0
- package/package.json +37 -0
- package/src/global.d.ts +5 -0
- package/src/index.ts +133 -0
- package/src/providers/chatgpt-org-uk.ts +57 -0
- package/src/providers/linshi-email.ts +61 -0
- package/src/providers/tempmail-lol.ts +53 -0
- package/src/providers/tempmail.ts +59 -0
- package/src/types.ts +58 -0
- package/test/example.ts +48 -0
- package/tsconfig.json +27 -0
package/README.md
ADDED
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
# temp-email-sdk
|
|
2
|
+
|
|
3
|
+
临时邮箱 SDK,支持多个邮箱服务提供商。
|
|
4
|
+
|
|
5
|
+
## 许可证
|
|
6
|
+
|
|
7
|
+
GPL-3.0
|
|
8
|
+
|
|
9
|
+
## 安装
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
npm install tempmail-sdk
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## 支持的渠道
|
|
16
|
+
|
|
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 |
|
|
23
|
+
|
|
24
|
+
## 使用方法
|
|
25
|
+
|
|
26
|
+
### 列出所有提供商
|
|
27
|
+
|
|
28
|
+
```typescript
|
|
29
|
+
import { listChannels, getChannelInfo } from 'temp-email-sdk';
|
|
30
|
+
|
|
31
|
+
// 获取所有支持的渠道
|
|
32
|
+
const channels = listChannels();
|
|
33
|
+
console.log(channels);
|
|
34
|
+
// [
|
|
35
|
+
// { channel: 'tempmail', name: 'TempMail', website: 'tempmail.ing' },
|
|
36
|
+
// { channel: 'linshi-email', name: '临时邮箱', website: 'linshi-email.com' },
|
|
37
|
+
// { channel: 'tempmail-lol', name: 'TempMail LOL', website: 'tempmail.lol' },
|
|
38
|
+
// { channel: 'chatgpt-org-uk', name: 'ChatGPT Mail', website: 'mail.chatgpt.org.uk' }
|
|
39
|
+
// ]
|
|
40
|
+
|
|
41
|
+
// 获取指定渠道信息
|
|
42
|
+
const info = getChannelInfo('tempmail');
|
|
43
|
+
console.log(info);
|
|
44
|
+
// { channel: 'tempmail', name: 'TempMail', website: 'tempmail.ing' }
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### 获取邮箱
|
|
48
|
+
|
|
49
|
+
```typescript
|
|
50
|
+
import { generateEmail } from 'temp-email-sdk';
|
|
51
|
+
|
|
52
|
+
// 从随机渠道获取邮箱
|
|
53
|
+
const emailInfo = await generateEmail();
|
|
54
|
+
console.log(emailInfo);
|
|
55
|
+
// { channel: 'tempmail', email: 'xxx@ibymail.com', expiresAt: '...' }
|
|
56
|
+
|
|
57
|
+
// 从指定渠道获取邮箱
|
|
58
|
+
const emailInfo2 = await generateEmail({ channel: 'linshi-email' });
|
|
59
|
+
console.log(emailInfo2);
|
|
60
|
+
// { channel: 'linshi-email', email: 'xxx@iwatermail.com', expiresAt: 1768283576295 }
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### 获取邮件
|
|
64
|
+
|
|
65
|
+
```typescript
|
|
66
|
+
import { getEmails } from 'temp-email-sdk';
|
|
67
|
+
|
|
68
|
+
// 查询邮件(需要传递渠道和邮箱)
|
|
69
|
+
const result = await getEmails({
|
|
70
|
+
channel: 'tempmail',
|
|
71
|
+
email: 'xxx@ibymail.com'
|
|
72
|
+
});
|
|
73
|
+
console.log(result);
|
|
74
|
+
// { channel: 'tempmail', email: 'xxx@ibymail.com', emails: [...], success: true }
|
|
75
|
+
|
|
76
|
+
// tempmail-lol 渠道需要传递 token
|
|
77
|
+
const result2 = await getEmails({
|
|
78
|
+
channel: 'tempmail-lol',
|
|
79
|
+
email: 'xxx@chessgameland.com',
|
|
80
|
+
token: 'your-token-here'
|
|
81
|
+
});
|
|
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
|
+
|
|
96
|
+
// 获取邮件
|
|
97
|
+
const result = await client.getEmails();
|
|
98
|
+
console.log(`收到 ${result.emails.length} 封邮件`);
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
## API
|
|
102
|
+
|
|
103
|
+
### listChannels()
|
|
104
|
+
|
|
105
|
+
获取所有支持的渠道列表。
|
|
106
|
+
|
|
107
|
+
**返回值:** `ChannelInfo[]`
|
|
108
|
+
- `channel` - 渠道标识
|
|
109
|
+
- `name` - 渠道名称
|
|
110
|
+
- `website` - 服务商网站
|
|
111
|
+
|
|
112
|
+
### getChannelInfo(channel)
|
|
113
|
+
|
|
114
|
+
获取指定渠道信息。
|
|
115
|
+
|
|
116
|
+
**参数:**
|
|
117
|
+
- `channel` - 渠道标识
|
|
118
|
+
|
|
119
|
+
**返回值:** `ChannelInfo | undefined`
|
|
120
|
+
|
|
121
|
+
### generateEmail(options?)
|
|
122
|
+
|
|
123
|
+
生成临时邮箱地址。
|
|
124
|
+
|
|
125
|
+
**参数:**
|
|
126
|
+
- `channel` - 指定渠道(可选,不指定则随机选择)
|
|
127
|
+
- `duration` - 邮箱有效期,单位分钟(仅 `tempmail` 渠道支持)
|
|
128
|
+
- `domain` - 指定域名(仅 `tempmail-lol` 渠道支持)
|
|
129
|
+
|
|
130
|
+
**返回值:** `EmailInfo`
|
|
131
|
+
- `channel` - 渠道名称
|
|
132
|
+
- `email` - 邮箱地址
|
|
133
|
+
- `token` - 访问收件箱的令牌(仅 `tempmail-lol` 渠道返回)
|
|
134
|
+
- `expiresAt` - 过期时间
|
|
135
|
+
|
|
136
|
+
### getEmails(options)
|
|
137
|
+
|
|
138
|
+
获取指定邮箱的邮件列表。
|
|
139
|
+
|
|
140
|
+
**参数(必填):**
|
|
141
|
+
- `channel` - 渠道名称
|
|
142
|
+
- `email` - 邮箱地址
|
|
143
|
+
- `token` - 令牌(`tempmail-lol` 渠道必填)
|
|
144
|
+
|
|
145
|
+
**返回值:** `GetEmailsResult`
|
|
146
|
+
- `channel` - 渠道名称
|
|
147
|
+
- `email` - 邮箱地址
|
|
148
|
+
- `emails` - 邮件数组
|
|
149
|
+
- `success` - 是否成功
|
|
150
|
+
|
|
151
|
+
## 环境要求
|
|
152
|
+
|
|
153
|
+
- Node.js 18+(需要原生 fetch 支持)
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Demo: 获取指定渠道邮箱,轮询获取邮件
|
|
3
|
+
*
|
|
4
|
+
* 使用方法:
|
|
5
|
+
* npx ts-node demo/poll-emails.ts
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import * as readline from 'readline';
|
|
9
|
+
import { generateEmail, getEmails, listChannels, getChannelInfo, Channel, EmailInfo, ChannelInfo } from '../src';
|
|
10
|
+
|
|
11
|
+
// 配置
|
|
12
|
+
const POLL_INTERVAL = 5000; // 轮询间隔(毫秒)
|
|
13
|
+
const MAX_POLL_COUNT = 60; // 最大轮询次数
|
|
14
|
+
|
|
15
|
+
function printJson(label: string, data: any): void {
|
|
16
|
+
console.log(`\n${label}:`);
|
|
17
|
+
console.log(JSON.stringify(data, null, 2));
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
function sleep(ms: number): Promise<void> {
|
|
21
|
+
return new Promise(resolve => setTimeout(resolve, ms));
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
function question(prompt: string): Promise<string> {
|
|
25
|
+
const rl = readline.createInterface({
|
|
26
|
+
input: process.stdin,
|
|
27
|
+
output: process.stdout,
|
|
28
|
+
});
|
|
29
|
+
return new Promise((resolve) => {
|
|
30
|
+
rl.question(prompt, (answer: string) => {
|
|
31
|
+
rl.close();
|
|
32
|
+
resolve(answer.trim());
|
|
33
|
+
});
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
async function selectChannel(channels: ChannelInfo[]): Promise<Channel> {
|
|
38
|
+
console.log('\n请选择渠道:');
|
|
39
|
+
channels.forEach((ch, index) => {
|
|
40
|
+
console.log(` [${index + 1}] ${ch.channel} - ${ch.name} (${ch.website})`);
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
while (true) {
|
|
44
|
+
const input = await question('\n请输入渠道编号 (1-' + channels.length + '): ');
|
|
45
|
+
const num = parseInt(input, 10);
|
|
46
|
+
|
|
47
|
+
if (num >= 1 && num <= channels.length) {
|
|
48
|
+
return channels[num - 1].channel;
|
|
49
|
+
}
|
|
50
|
+
console.log('❌ 无效的编号,请重新输入');
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
async function pollEmails(emailInfo: EmailInfo): Promise<void> {
|
|
55
|
+
console.log(`\n开始轮询邮件...(每 ${POLL_INTERVAL / 1000} 秒检查一次)`);
|
|
56
|
+
console.log('按 Ctrl+C 停止轮询\n');
|
|
57
|
+
|
|
58
|
+
let pollCount = 0;
|
|
59
|
+
|
|
60
|
+
while (pollCount < MAX_POLL_COUNT) {
|
|
61
|
+
pollCount++;
|
|
62
|
+
|
|
63
|
+
try {
|
|
64
|
+
const result = await getEmails({
|
|
65
|
+
channel: emailInfo.channel,
|
|
66
|
+
email: emailInfo.email,
|
|
67
|
+
token: emailInfo.token,
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
const timestamp = new Date().toLocaleTimeString();
|
|
71
|
+
|
|
72
|
+
if (result.emails.length > 0) {
|
|
73
|
+
console.log(`\n[${timestamp}] 🎉 收到 ${result.emails.length} 封邮件!\n`);
|
|
74
|
+
|
|
75
|
+
// 打印原始返回数据
|
|
76
|
+
printJson('返回数据 (GetEmailsResult)', result);
|
|
77
|
+
|
|
78
|
+
for (let i = 0; i < result.emails.length; i++) {
|
|
79
|
+
const email = result.emails[i];
|
|
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));
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
// 收到邮件后可以选择继续轮询或退出
|
|
121
|
+
// break;
|
|
122
|
+
} else {
|
|
123
|
+
process.stdout.write(`\r[${timestamp}] 第 ${pollCount}/${MAX_POLL_COUNT} 次检查,暂无新邮件...`);
|
|
124
|
+
}
|
|
125
|
+
} catch (error) {
|
|
126
|
+
console.error(`\n轮询出错: ${error}`);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
await sleep(POLL_INTERVAL);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
console.log('\n\n已达到最大轮询次数,停止轮询');
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
async function main(): Promise<void> {
|
|
136
|
+
console.log('═'.repeat(50));
|
|
137
|
+
console.log(' 临时邮箱 Demo - 获取邮箱并轮询邮件');
|
|
138
|
+
console.log('═'.repeat(50));
|
|
139
|
+
|
|
140
|
+
// 1. 列出所有支持的渠道
|
|
141
|
+
console.log('\n[1] 列出所有支持的渠道...');
|
|
142
|
+
const channels = listChannels();
|
|
143
|
+
printJson('支持的渠道列表', channels);
|
|
144
|
+
|
|
145
|
+
// 2. 让用户选择渠道
|
|
146
|
+
console.log('\n[2] 选择渠道...');
|
|
147
|
+
const selectedChannel = await selectChannel(channels);
|
|
148
|
+
|
|
149
|
+
// 3. 获取指定渠道信息
|
|
150
|
+
console.log(`\n[3] 获取渠道 "${selectedChannel}" 信息...`);
|
|
151
|
+
const channelInfo = getChannelInfo(selectedChannel);
|
|
152
|
+
printJson('渠道信息', channelInfo);
|
|
153
|
+
|
|
154
|
+
// 4. 从指定渠道获取邮箱
|
|
155
|
+
console.log(`\n[4] 从 ${selectedChannel} 渠道获取临时邮箱...`);
|
|
156
|
+
|
|
157
|
+
try {
|
|
158
|
+
const emailInfo = await generateEmail({ channel: selectedChannel });
|
|
159
|
+
|
|
160
|
+
console.log('\n✅ 获取邮箱成功!');
|
|
161
|
+
printJson('返回数据 (EmailInfo)', emailInfo);
|
|
162
|
+
|
|
163
|
+
console.log('\n📋 邮箱信息:');
|
|
164
|
+
console.log(` 渠道: ${emailInfo.channel}`);
|
|
165
|
+
console.log(` 邮箱: ${emailInfo.email}`);
|
|
166
|
+
if (emailInfo.token) {
|
|
167
|
+
console.log(` Token: ${emailInfo.token}`);
|
|
168
|
+
}
|
|
169
|
+
if (emailInfo.expiresAt) {
|
|
170
|
+
console.log(` 过期时间: ${emailInfo.expiresAt}`);
|
|
171
|
+
}
|
|
172
|
+
if (emailInfo.createdAt) {
|
|
173
|
+
console.log(` 创建时间: ${emailInfo.createdAt}`);
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
console.log('\n📧 请发送邮件到以上邮箱地址进行测试');
|
|
177
|
+
|
|
178
|
+
// 5. 轮询获取邮件
|
|
179
|
+
await pollEmails(emailInfo);
|
|
180
|
+
|
|
181
|
+
} catch (error) {
|
|
182
|
+
console.error(`\n❌ 获取邮箱失败: ${error}`);
|
|
183
|
+
process.exit(1);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
main().catch(console.error);
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { Channel, EmailInfo, GetEmailsResult, GenerateEmailOptions, GetEmailsOptions } from './types';
|
|
2
|
+
export { Channel, EmailInfo, Email, GetEmailsResult, GenerateEmailOptions, GetEmailsOptions } from './types';
|
|
3
|
+
export interface ChannelInfo {
|
|
4
|
+
channel: Channel;
|
|
5
|
+
name: string;
|
|
6
|
+
website: string;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* 获取所有支持的渠道列表
|
|
10
|
+
*/
|
|
11
|
+
export declare function listChannels(): ChannelInfo[];
|
|
12
|
+
/**
|
|
13
|
+
* 获取指定渠道信息
|
|
14
|
+
*/
|
|
15
|
+
export declare function getChannelInfo(channel: Channel): ChannelInfo | undefined;
|
|
16
|
+
export declare function generateEmail(options?: GenerateEmailOptions): Promise<EmailInfo>;
|
|
17
|
+
export declare function getEmails(options: GetEmailsOptions): Promise<GetEmailsResult>;
|
|
18
|
+
export declare class TempEmailClient {
|
|
19
|
+
private emailInfo;
|
|
20
|
+
generate(options?: GenerateEmailOptions): Promise<EmailInfo>;
|
|
21
|
+
getEmails(): Promise<GetEmailsResult>;
|
|
22
|
+
getEmailInfo(): EmailInfo | null;
|
|
23
|
+
}
|
|
24
|
+
declare const _default: {
|
|
25
|
+
listChannels: typeof listChannels;
|
|
26
|
+
getChannelInfo: typeof getChannelInfo;
|
|
27
|
+
generateEmail: typeof generateEmail;
|
|
28
|
+
getEmails: typeof getEmails;
|
|
29
|
+
TempEmailClient: typeof TempEmailClient;
|
|
30
|
+
};
|
|
31
|
+
export default _default;
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.TempEmailClient = void 0;
|
|
37
|
+
exports.listChannels = listChannels;
|
|
38
|
+
exports.getChannelInfo = getChannelInfo;
|
|
39
|
+
exports.generateEmail = generateEmail;
|
|
40
|
+
exports.getEmails = getEmails;
|
|
41
|
+
const tempmail = __importStar(require("./providers/tempmail"));
|
|
42
|
+
const linshiEmail = __importStar(require("./providers/linshi-email"));
|
|
43
|
+
const tempmailLol = __importStar(require("./providers/tempmail-lol"));
|
|
44
|
+
const chatgptOrgUk = __importStar(require("./providers/chatgpt-org-uk"));
|
|
45
|
+
const providers = {
|
|
46
|
+
'tempmail': tempmail,
|
|
47
|
+
'linshi-email': linshiEmail,
|
|
48
|
+
'tempmail-lol': tempmailLol,
|
|
49
|
+
'chatgpt-org-uk': chatgptOrgUk,
|
|
50
|
+
};
|
|
51
|
+
const allChannels = ['tempmail', 'linshi-email', 'tempmail-lol', 'chatgpt-org-uk'];
|
|
52
|
+
const channelInfoMap = {
|
|
53
|
+
'tempmail': { channel: 'tempmail', name: 'TempMail', website: 'tempmail.ing' },
|
|
54
|
+
'linshi-email': { channel: 'linshi-email', name: '临时邮箱', website: 'linshi-email.com' },
|
|
55
|
+
'tempmail-lol': { channel: 'tempmail-lol', name: 'TempMail LOL', website: 'tempmail.lol' },
|
|
56
|
+
'chatgpt-org-uk': { channel: 'chatgpt-org-uk', name: 'ChatGPT Mail', website: 'mail.chatgpt.org.uk' },
|
|
57
|
+
};
|
|
58
|
+
/**
|
|
59
|
+
* 获取所有支持的渠道列表
|
|
60
|
+
*/
|
|
61
|
+
function listChannels() {
|
|
62
|
+
return allChannels.map(ch => channelInfoMap[ch]);
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* 获取指定渠道信息
|
|
66
|
+
*/
|
|
67
|
+
function getChannelInfo(channel) {
|
|
68
|
+
return channelInfoMap[channel];
|
|
69
|
+
}
|
|
70
|
+
async function generateEmail(options = {}) {
|
|
71
|
+
const channel = options.channel || allChannels[Math.floor(Math.random() * allChannels.length)];
|
|
72
|
+
switch (channel) {
|
|
73
|
+
case 'tempmail':
|
|
74
|
+
return tempmail.generateEmail(options.duration || 30);
|
|
75
|
+
case 'linshi-email':
|
|
76
|
+
return linshiEmail.generateEmail();
|
|
77
|
+
case 'tempmail-lol':
|
|
78
|
+
return tempmailLol.generateEmail(options.domain || null);
|
|
79
|
+
case 'chatgpt-org-uk':
|
|
80
|
+
return chatgptOrgUk.generateEmail();
|
|
81
|
+
default:
|
|
82
|
+
throw new Error(`Unknown channel: ${channel}`);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
async function getEmails(options) {
|
|
86
|
+
const { channel, email, token } = options;
|
|
87
|
+
if (!channel) {
|
|
88
|
+
throw new Error('Channel is required');
|
|
89
|
+
}
|
|
90
|
+
if (!email && channel !== 'tempmail-lol') {
|
|
91
|
+
throw new Error('Email is required');
|
|
92
|
+
}
|
|
93
|
+
let emails = [];
|
|
94
|
+
switch (channel) {
|
|
95
|
+
case 'tempmail':
|
|
96
|
+
emails = await tempmail.getEmails(email);
|
|
97
|
+
break;
|
|
98
|
+
case 'linshi-email':
|
|
99
|
+
emails = await linshiEmail.getEmails(email);
|
|
100
|
+
break;
|
|
101
|
+
case 'tempmail-lol':
|
|
102
|
+
if (!token) {
|
|
103
|
+
throw new Error('Token is required for tempmail-lol channel');
|
|
104
|
+
}
|
|
105
|
+
emails = await tempmailLol.getEmails(token);
|
|
106
|
+
break;
|
|
107
|
+
case 'chatgpt-org-uk':
|
|
108
|
+
emails = await chatgptOrgUk.getEmails(email);
|
|
109
|
+
break;
|
|
110
|
+
default:
|
|
111
|
+
throw new Error(`Unknown channel: ${channel}`);
|
|
112
|
+
}
|
|
113
|
+
return {
|
|
114
|
+
channel,
|
|
115
|
+
email,
|
|
116
|
+
emails,
|
|
117
|
+
success: true,
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
class TempEmailClient {
|
|
121
|
+
constructor() {
|
|
122
|
+
this.emailInfo = null;
|
|
123
|
+
}
|
|
124
|
+
async generate(options = {}) {
|
|
125
|
+
this.emailInfo = await generateEmail(options);
|
|
126
|
+
return this.emailInfo;
|
|
127
|
+
}
|
|
128
|
+
async getEmails() {
|
|
129
|
+
if (!this.emailInfo) {
|
|
130
|
+
throw new Error('No email generated. Call generate() first.');
|
|
131
|
+
}
|
|
132
|
+
return getEmails({
|
|
133
|
+
channel: this.emailInfo.channel,
|
|
134
|
+
email: this.emailInfo.email,
|
|
135
|
+
token: this.emailInfo.token,
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
getEmailInfo() {
|
|
139
|
+
return this.emailInfo;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
exports.TempEmailClient = TempEmailClient;
|
|
143
|
+
exports.default = {
|
|
144
|
+
listChannels,
|
|
145
|
+
getChannelInfo,
|
|
146
|
+
generateEmail,
|
|
147
|
+
getEmails,
|
|
148
|
+
TempEmailClient,
|
|
149
|
+
};
|
|
150
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBaUNBLG9DQUVDO0FBS0Qsd0NBRUM7QUFFRCxzQ0FlQztBQUVELDhCQXNDQztBQW5HRCwrREFBaUQ7QUFDakQsc0VBQXdEO0FBQ3hELHNFQUF3RDtBQUN4RCx5RUFBMkQ7QUFLM0QsTUFBTSxTQUFTLEdBQUc7SUFDaEIsVUFBVSxFQUFFLFFBQVE7SUFDcEIsY0FBYyxFQUFFLFdBQVc7SUFDM0IsY0FBYyxFQUFFLFdBQVc7SUFDM0IsZ0JBQWdCLEVBQUUsWUFBWTtDQUMvQixDQUFDO0FBRUYsTUFBTSxXQUFXLEdBQWMsQ0FBQyxVQUFVLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0FBUTlGLE1BQU0sY0FBYyxHQUFpQztJQUNuRCxVQUFVLEVBQUUsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRTtJQUM5RSxjQUFjLEVBQUUsRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLGtCQUFrQixFQUFFO0lBQ3RGLGNBQWMsRUFBRSxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFO0lBQzFGLGdCQUFnQixFQUFFLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsT0FBTyxFQUFFLHFCQUFxQixFQUFFO0NBQ3RHLENBQUM7QUFFRjs7R0FFRztBQUNILFNBQWdCLFlBQVk7SUFDMUIsT0FBTyxXQUFXLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFD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SyxDQUFDLDRDQUE0QyxDQUFDLENBQUM7UUFDaEUsQ0FBQztRQUVELE9BQU8sU0FBUyxDQUFDO1lBQ2YsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTztZQUMvQixLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLO1lBQzNCLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUs7U0FDNUIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFlBQVk7UUFDVixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztDQUNGO0FBdkJELDBDQXVCQztBQUVELGtCQUFlO0lBQ2IsWUFBWTtJQUNaLGNBQWM7SUFDZCxhQUFhO0lBQ2IsU0FBUztJQUNULGVBQWU7Q0FDaEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHRlbXBtYWlsIGZyb20gJy4vcHJvdmlkZXJzL3RlbXBtYWlsJztcclxuaW1wb3J0ICogYXMgbGluc2hpRW1haWwgZnJvbSAnLi9wcm92aWRlcnMvbGluc2hpLWVtYWlsJztcclxuaW1wb3J0ICogYXMgdGVtcG1haWxMb2wgZnJvbSAnLi9wcm92aWRlcnMvdGVtcG1haWwtbG9sJztcclxuaW1wb3J0ICogYXMgY2hhdGdwdE9yZ1VrIGZyb20gJy4vcHJvdmlkZXJzL2NoYXRncHQtb3JnLXVrJztcclxuaW1wb3J0IHsgQ2hhbm5lbCwgRW1haWxJbmZvLCBFbWFpbCwgR2V0RW1haWxzUmVzdWx0LCBHZW5lcmF0ZUVtYWlsT3B0aW9ucywgR2V0RW1haWxzT3B0aW9ucyB9IGZyb20gJy4vdHlwZXMnO1xyXG5cclxuZXhwb3J0IHsgQ2hhbm5lbCwgRW1haWxJbmZvLCBFbWFpbCwgR2V0RW1haWxzUmVzdWx0LCBHZW5lcmF0ZUVtYWlsT3B0aW9ucywgR2V0RW1haWxzT3B0aW9ucyB9IGZyb20gJy4vdHlwZXMnO1xyXG5cclxuY29uc3QgcHJvdmlkZXJzID0ge1xyXG4gICd0ZW1wbWFpbCc6IHRlbXBtYWlsLFxyXG4gICdsaW5zaGktZW1haWwnOiBsaW5zaGlFbWFpbCxcclxuICAndGVtcG1haWwtbG9sJzogdGVtcG1haWxMb2wsXHJcbiAgJ2NoYXRncHQtb3JnLXVrJzogY2hhdGdwdE9yZ1VrLFxyXG59O1xyXG5cclxuY29uc3QgYWxsQ2hhbm5lbHM6IENoYW5uZWxbXSA9IFsndGVtcG1haWwnLCAnbGluc2hpLWVtYWlsJywgJ3RlbXBtYWlsLWxvbCcsICdjaGF0Z3B0LW9yZy11ayddO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDaGFubmVsSW5mbyB7XHJcbiAgY2hhbm5lbDogQ2hhbm5lbDtcclxuICBuYW1lOiBzdHJpbmc7XHJcbiAgd2Vic2l0ZTogc3RyaW5nO1xyXG59XHJcblxyXG5jb25zdCBjaGFubmVsSW5mb01hcDogUmVjb3JkPENoYW5uZWwsIENoYW5uZWxJbmZvPiA9IHtcclxuICAndGVtcG1haWwnOiB7IGNoYW5uZWw6ICd0ZW1wbWFpbCcsIG5hbWU6ICdUZW1wTWFpbCcsIHdlYnNpdGU6ICd0ZW1wbWFpbC5pbmcnIH0sXHJcbiAgJ2xpbnNoaS1lbWFpbCc6IHsgY2hhbm5lbDogJ2xpbnNoaS1lbWFpbCcsIG5hbWU6ICfkuLTml7bpgq7nrrEnLCB3ZWJzaXRlOiAnbGluc2hpLWVtYWlsLmNvbScgfSxcclxuICAndGVtcG1haWwtbG9sJzogeyBjaGFubmVsOiAndGVtcG1haWwtbG9sJywgbmFtZTogJ1RlbXBNYWlsIExPTCcsIHdlYnNpdGU6ICd0ZW1wbWFpbC5sb2wnIH0sXHJcbiAgJ2NoYXRncHQtb3JnLXVrJzogeyBjaGFubmVsOiAnY2hhdGdwdC1vcmctdWsnLCBuYW1lOiAnQ2hhdEdQVCBNYWlsJywgd2Vic2l0ZTogJ21haWwuY2hhdGdwdC5vcmcudWsnIH0sXHJcbn07XHJcblxyXG4vKipcclxuICog6I635Y+W5omA5pyJ5pSv5oyB55qE5rig6YGT5YiX6KGoXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gbGlzdENoYW5uZWxzKCk6IENoYW5uZWxJbmZvW10ge1xyXG4gIHJldHVybiBhbGxDaGFubmVscy5tYXAoY2ggPT4gY2hhbm5lbEluZm9NYXBbY2hdKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIOiOt+WPluaMh+Wumua4oOmBk+S/oeaBr1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGdldENoYW5uZWxJbmZvKGNoYW5uZWw6IENoYW5uZWwpOiBDaGFubmVsSW5mbyB8IHVuZGVmaW5lZCB7XHJcbiAgcmV0dXJuIGNoYW5uZWxJbmZvTWFwW2NoYW5uZWxdO1xyXG59XHJcblxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVFbWFpbChvcHRpb25zOiBHZW5lcmF0ZUVtYWlsT3B0aW9ucyA9IHt9KTogUHJvbWlzZTxFbWFpbEluZm8+IHtcclxuICBjb25zdCBjaGFubmVsID0gb3B0aW9ucy5jaGFubmVsIHx8IGFsbENoYW5uZWxzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGFsbENoYW5uZWxzLmxlbmd0aCldO1xyXG4gIFxyXG4gIHN3aXRjaCAoY2hhbm5lbCkge1xyXG4gICAgY2FzZSAndGVtcG1haWwnOlxyXG4gICAgICByZXR1cm4gdGVtcG1haWwuZ2VuZXJhdGVFbWFpbChvcHRpb25zLmR1cmF0aW9uIHx8IDMwKTtcclxuICAgIGNhc2UgJ2xpbnNoaS1lbWFpbCc6XHJcbiAgICAgIHJldHVybiBsaW5zaGlFbWFpbC5nZW5lcmF0ZUVtYWlsKCk7XHJcbiAgICBjYXNlICd0ZW1wbWFpbC1sb2wnOlxyXG4gICAgICByZXR1cm4gdGVtcG1haWxMb2wuZ2VuZXJhdGVFbWFpbChvcHRpb25zLmRvbWFpbiB8fCBudWxsKTtcclxuICAgIGNhc2UgJ2NoYXRncHQtb3JnLXVrJzpcclxuICAgICAgcmV0dXJuIGNoYXRncHRPcmdVay5nZW5lcmF0ZUVtYWlsKCk7XHJcbiAgICBkZWZhdWx0OlxyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gY2hhbm5lbDogJHtjaGFubmVsfWApO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEVtYWlscyhvcHRpb25zOiBHZXRFbWFpbHNPcHRpb25zKTogUHJvbWlzZTxHZXRFbWFpbHNSZXN1bHQ+IHtcclxuICBjb25zdCB7IGNoYW5uZWwsIGVtYWlsLCB0b2tlbiB9ID0gb3B0aW9ucztcclxuICBcclxuICBpZiAoIWNoYW5uZWwpIHtcclxuICAgIHRocm93IG5ldyBFcnJvcignQ2hhbm5lbCBpcyByZXF1aXJlZCcpO1xyXG4gIH1cclxuICBpZiAoIWVtYWlsICYmIGNoYW5uZWwgIT09ICd0ZW1wbWFpbC1sb2wnKSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0VtYWlsIGlzIHJlcXVpcmVkJyk7XHJcbiAgfVxyXG5cclxuICBsZXQgZW1haWxzOiBFbWFpbFtdID0gW107XHJcblxyXG4gIHN3aXRjaCAoY2hhbm5lbCkge1xyXG4gICAgY2FzZSAndGVtcG1haWwnOlxyXG4gICAgICBlbWFpbHMgPSBhd2FpdCB0ZW1wbWFpbC5nZXRFbWFpbHMoZW1haWwpO1xyXG4gICAgICBicmVhaztcclxuICAgIGNhc2UgJ2xpbnNoaS1lbWFpbCc6XHJcbiAgICAgIGVtYWlscyA9IGF3YWl0IGxpbnNoaUVtYWlsLmdldEVtYWlscyhlbWFpbCk7XHJcbiAgICAgIGJyZWFrO1xyXG4gICAgY2FzZSAndGVtcG1haWwtbG9sJzpcclxuICAgICAgaWYgKCF0b2tlbikge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVG9rZW4gaXMgcmVxdWlyZWQgZm9yIHRlbXBtYWlsLWxvbCBjaGFubmVsJyk7XHJcbiAgICAgIH1cclxuICAgICAgZW1haWxzID0gYXdhaXQgdGVtcG1haWxMb2wuZ2V0RW1haWxzKHRva2VuKTtcclxuICAgICAgYnJlYWs7XHJcbiAgICBjYXNlICdjaGF0Z3B0LW9yZy11ayc6XHJcbiAgICAgIGVtYWlscyA9IGF3YWl0IGNoYXRncHRPcmdVay5nZXRFbWFpbHMoZW1haWwpO1xyXG4gICAgICBicmVhaztcclxuICAgIGRlZmF1bHQ6XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBjaGFubmVsOiAke2NoYW5uZWx9YCk7XHJcbiAgfVxyXG5cclxuICByZXR1cm4ge1xyXG4gICAgY2hhbm5lbCxcclxuICAgIGVtYWlsLFxyXG4gICAgZW1haWxzLFxyXG4gICAgc3VjY2VzczogdHJ1ZSxcclxuICB9O1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgVGVtcEVtYWlsQ2xpZW50IHtcclxuICBwcml2YXRlIGVtYWlsSW5mbzogRW1haWxJbmZvIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIGFzeW5jIGdlbmVyYXRlKG9wdGlvbnM6IEdlbmVyYXRlRW1haWxPcHRpb25zID0ge30pOiBQcm9taXNlPEVtYWlsSW5mbz4ge1xyXG4gICAgdGhpcy5lbWFpbEluZm8gPSBhd2FpdCBnZW5lcmF0ZUVtYWlsKG9wdGlvbnMpO1xyXG4gICAgcmV0dXJuIHRoaXMuZW1haWxJbmZvO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgZ2V0RW1haWxzKCk6IFByb21pc2U8R2V0RW1haWxzUmVzdWx0PiB7XHJcbiAgICBpZiAoIXRoaXMuZW1haWxJbmZvKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm8gZW1haWwgZ2VuZXJhdGVkLiBDYWxsIGdlbmVyYXRlKCkgZmlyc3QuJyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGdldEVtYWlscyh7XHJcbiAgICAgIGNoYW5uZWw6IHRoaXMuZW1haWxJbmZvLmNoYW5uZWwsXHJcbiAgICAgIGVtYWlsOiB0aGlzLmVtYWlsSW5mby5lbWFpbCxcclxuICAgICAgdG9rZW46IHRoaXMuZW1haWxJbmZvLnRva2VuLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRFbWFpbEluZm8oKTogRW1haWxJbmZvIHwgbnVsbCB7XHJcbiAgICByZXR1cm4gdGhpcy5lbWFpbEluZm87XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgbGlzdENoYW5uZWxzLFxyXG4gIGdldENoYW5uZWxJbmZvLFxyXG4gIGdlbmVyYXRlRW1haWwsXHJcbiAgZ2V0RW1haWxzLFxyXG4gIFRlbXBFbWFpbENsaWVudCxcclxufTtcclxuIl19
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.generateEmail = generateEmail;
|
|
4
|
+
exports.getEmails = getEmails;
|
|
5
|
+
const CHANNEL = 'chatgpt-org-uk';
|
|
6
|
+
const BASE_URL = 'https://mail.chatgpt.org.uk/api';
|
|
7
|
+
const DEFAULT_HEADERS = {
|
|
8
|
+
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36',
|
|
9
|
+
'Content-Type': 'application/json',
|
|
10
|
+
'Accept': '*/*',
|
|
11
|
+
'Referer': 'https://mail.chatgpt.org.uk/',
|
|
12
|
+
'sec-ch-ua': '"Microsoft Edge";v="143", "Chromium";v="143", "Not A(Brand";v="24"',
|
|
13
|
+
'sec-ch-ua-mobile': '?0',
|
|
14
|
+
'sec-ch-ua-platform': '"Windows"',
|
|
15
|
+
'DNT': '1',
|
|
16
|
+
};
|
|
17
|
+
async function generateEmail() {
|
|
18
|
+
const response = await fetch(`${BASE_URL}/generate-email`, {
|
|
19
|
+
method: 'GET',
|
|
20
|
+
headers: DEFAULT_HEADERS,
|
|
21
|
+
});
|
|
22
|
+
if (!response.ok) {
|
|
23
|
+
throw new Error(`Failed to generate email: ${response.status}`);
|
|
24
|
+
}
|
|
25
|
+
const data = await response.json();
|
|
26
|
+
if (!data.success) {
|
|
27
|
+
throw new Error('Failed to generate email');
|
|
28
|
+
}
|
|
29
|
+
return {
|
|
30
|
+
channel: CHANNEL,
|
|
31
|
+
email: data.data.email,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
async function getEmails(email) {
|
|
35
|
+
const encodedEmail = encodeURIComponent(email);
|
|
36
|
+
const response = await fetch(`${BASE_URL}/emails?email=${encodedEmail}`, {
|
|
37
|
+
method: 'GET',
|
|
38
|
+
headers: DEFAULT_HEADERS,
|
|
39
|
+
});
|
|
40
|
+
if (!response.ok) {
|
|
41
|
+
throw new Error(`Failed to get emails: ${response.status}`);
|
|
42
|
+
}
|
|
43
|
+
const data = await response.json();
|
|
44
|
+
if (!data.success) {
|
|
45
|
+
throw new Error('Failed to get emails');
|
|
46
|
+
}
|
|
47
|
+
return data.data?.emails || [];
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdGdwdC1vcmctdWsuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHJvdmlkZXJzL2NoYXRncHQtb3JnLXVrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBZ0JBLHNDQW9CQztBQUVELDhCQWtCQztBQXRERCxNQUFNLE9BQU8sR0FBWSxnQkFBZ0IsQ0FBQztBQUMxQyxNQUFNLFFBQVEsR0FBRyxpQ0FBaUMsQ0FBQztBQUVuRCxNQUFNLGVBQWUsR0FBRztJQUN0QixZQUFZLEVBQUUsaUhBQWlIO0lBQy9ILGNBQWMsRUFBRSxrQkFBa0I7SUFDbEMsUUFBUSxFQUFFLEtBQUs7SUFDZixTQUFTLEVBQUUsOEJBQThCO0lBQ3pDLFdBQVcsRUFBRSxvRUFBb0U7SUFDakYsa0JBQWtCLEVBQUUsSUFBSTtJQUN4QixvQkFBb0IsRUFBRSxXQUFXO0lBQ2pDLEtBQUssRUFBRSxHQUFHO0NBQ1gsQ0FBQztBQUVLLEtBQUssVUFBVSxhQUFhO0lBQ2pDLE1BQU0sUUFBUSxHQUFHLE1BQU0sS0FBSyxDQUFDLEdBQUcsUUFBUSxpQkFBaUIsRUFBRTtRQUN6RCxNQUFNLEVBQUUsS0FBSztRQUNiLE9BQU8sRUFBRSxlQUFlO0tBQ3pCLENBQUMsQ0FBQztJQUVILElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDakIsTUFBTSxJQUFJLEtBQUssQ0FBQyw2QkFBNkIsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVELE1BQU0sSUFBSSxHQUFHLE1BQU0sUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO0lBRW5DLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDbEIsTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRCxPQUFPO1FBQ0wsT0FBTyxFQUFFLE9BQU87UUFDaEIsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSztLQUN2QixDQUFDO0FBQ0osQ0FBQztBQUVNLEtBQUssVUFBVSxTQUFTLENBQUMsS0FBYTtJQUMzQyxNQUFNLFlBQVksR0FBRyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMvQyxNQUFNLFFBQVEsR0FBRyxNQUFNLEtBQUssQ0FBQyxHQUFHLFFBQVEsaUJBQWlCLFlBQVksRUFBRSxFQUFFO1FBQ3ZFLE1BQU0sRUFBRSxLQUFLO1FBQ2IsT0FBTyxFQUFFLGVBQWU7S0FDekIsQ0FBQyxDQUFDO0lBRUgsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNqQixNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRUQsTUFBTSxJQUFJLEdBQUcsTUFBTSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7SUFFbkMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNsQixNQUFNLElBQUksS0FBSyxDQUFDLHNCQUFzQixDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVELE9BQU8sSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLElBQUksRUFBRSxDQUFDO0FBQ2pDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbWFpbEluZm8sIEVtYWlsLCBDaGFubmVsIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuY29uc3QgQ0hBTk5FTDogQ2hhbm5lbCA9ICdjaGF0Z3B0LW9yZy11ayc7XHJcbmNvbnN0IEJBU0VfVVJMID0gJ2h0dHBzOi8vbWFpbC5jaGF0Z3B0Lm9yZy51ay9hcGknO1xyXG5cclxuY29uc3QgREVGQVVMVF9IRUFERVJTID0ge1xyXG4gICdVc2VyLUFnZW50JzogJ01vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjA7IFdpbjY0OyB4NjQpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8xNDMuMC4wLjAgU2FmYXJpLzUzNy4zNicsXHJcbiAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcclxuICAnQWNjZXB0JzogJyovKicsXHJcbiAgJ1JlZmVyZXInOiAnaHR0cHM6Ly9tYWlsLmNoYXRncHQub3JnLnVrLycsXHJcbiAgJ3NlYy1jaC11YSc6ICdcIk1pY3Jvc29mdCBFZGdlXCI7dj1cIjE0M1wiLCBcIkNocm9taXVtXCI7dj1cIjE0M1wiLCBcIk5vdCBBKEJyYW5kXCI7dj1cIjI0XCInLFxyXG4gICdzZWMtY2gtdWEtbW9iaWxlJzogJz8wJyxcclxuICAnc2VjLWNoLXVhLXBsYXRmb3JtJzogJ1wiV2luZG93c1wiJyxcclxuICAnRE5UJzogJzEnLFxyXG59O1xyXG5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlRW1haWwoKTogUHJvbWlzZTxFbWFpbEluZm8+IHtcclxuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGAke0JBU0VfVVJMfS9nZW5lcmF0ZS1lbWFpbGAsIHtcclxuICAgIG1ldGhvZDogJ0dFVCcsXHJcbiAgICBoZWFkZXJzOiBERUZBVUxUX0hFQURFUlMsXHJcbiAgfSk7XHJcblxyXG4gIGlmICghcmVzcG9uc2Uub2spIHtcclxuICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGdlbmVyYXRlIGVtYWlsOiAke3Jlc3BvbnNlLnN0YXR1c31gKTtcclxuICB9XHJcblxyXG4gIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XHJcbiAgXHJcbiAgaWYgKCFkYXRhLnN1Y2Nlc3MpIHtcclxuICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIGdlbmVyYXRlIGVtYWlsJyk7XHJcbiAgfVxyXG5cclxuICByZXR1cm4ge1xyXG4gICAgY2hhbm5lbDogQ0hBTk5FTCxcclxuICAgIGVtYWlsOiBkYXRhLmRhdGEuZW1haWwsXHJcbiAgfTtcclxufVxyXG5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEVtYWlscyhlbWFpbDogc3RyaW5nKTogUHJvbWlzZTxFbWFpbFtdPiB7XHJcbiAgY29uc3QgZW5jb2RlZEVtYWlsID0gZW5jb2RlVVJJQ29tcG9uZW50KGVtYWlsKTtcclxuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGAke0JBU0VfVVJMfS9lbWFpbHM/ZW1haWw9JHtlbmNvZGVkRW1haWx9YCwge1xyXG4gICAgbWV0aG9kOiAnR0VUJyxcclxuICAgIGhlYWRlcnM6IERFRkFVTFRfSEVBREVSUyxcclxuICB9KTtcclxuXHJcbiAgaWYgKCFyZXNwb25zZS5vaykge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gZ2V0IGVtYWlsczogJHtyZXNwb25zZS5zdGF0dXN9YCk7XHJcbiAgfVxyXG5cclxuICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xyXG4gIFxyXG4gIGlmICghZGF0YS5zdWNjZXNzKSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBnZXQgZW1haWxzJyk7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gZGF0YS5kYXRhPy5lbWFpbHMgfHwgW107XHJcbn1cclxuIl19
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.generateEmail = generateEmail;
|
|
4
|
+
exports.getEmails = getEmails;
|
|
5
|
+
const CHANNEL = 'linshi-email';
|
|
6
|
+
const BASE_URL = 'https://www.linshi-email.com/api/v1';
|
|
7
|
+
const API_KEY = '552562b8524879814776e52bc8de5c9f';
|
|
8
|
+
const DEFAULT_HEADERS = {
|
|
9
|
+
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36',
|
|
10
|
+
'Content-Type': 'application/json',
|
|
11
|
+
'Origin': 'https://www.linshi-email.com',
|
|
12
|
+
'Referer': 'https://www.linshi-email.com/',
|
|
13
|
+
'sec-ch-ua': '"Microsoft Edge";v="143", "Chromium";v="143", "Not A(Brand";v="24"',
|
|
14
|
+
'sec-ch-ua-mobile': '?0',
|
|
15
|
+
'sec-ch-ua-platform': '"Windows"',
|
|
16
|
+
'DNT': '1',
|
|
17
|
+
};
|
|
18
|
+
async function generateEmail() {
|
|
19
|
+
const response = await fetch(`${BASE_URL}/email/${API_KEY}`, {
|
|
20
|
+
method: 'POST',
|
|
21
|
+
headers: DEFAULT_HEADERS,
|
|
22
|
+
body: JSON.stringify({}),
|
|
23
|
+
});
|
|
24
|
+
if (!response.ok) {
|
|
25
|
+
throw new Error(`Failed to generate email: ${response.status}`);
|
|
26
|
+
}
|
|
27
|
+
const data = await response.json();
|
|
28
|
+
if (data.status !== 'ok') {
|
|
29
|
+
throw new Error('Failed to generate email');
|
|
30
|
+
}
|
|
31
|
+
return {
|
|
32
|
+
channel: CHANNEL,
|
|
33
|
+
email: data.data.email,
|
|
34
|
+
expiresAt: data.data.expired,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
async function getEmails(email) {
|
|
38
|
+
const encodedEmail = encodeURIComponent(email);
|
|
39
|
+
const timestamp = Date.now();
|
|
40
|
+
const response = await fetch(`${BASE_URL}/refreshmessage/${API_KEY}/${encodedEmail}?t=${timestamp}`, {
|
|
41
|
+
method: 'GET',
|
|
42
|
+
headers: DEFAULT_HEADERS,
|
|
43
|
+
});
|
|
44
|
+
if (!response.ok) {
|
|
45
|
+
throw new Error(`Failed to get emails: ${response.status}`);
|
|
46
|
+
}
|
|
47
|
+
const data = await response.json();
|
|
48
|
+
if (data.status !== 'ok') {
|
|
49
|
+
throw new Error('Failed to get emails');
|
|
50
|
+
}
|
|
51
|
+
return data.list || [];
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluc2hpLWVtYWlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Byb3ZpZGVycy9saW5zaGktZW1haWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFpQkEsc0NBc0JDO0FBRUQsOEJBbUJDO0FBMURELE1BQU0sT0FBTyxHQUFZLGNBQWMsQ0FBQztBQUN4QyxNQUFNLFFBQVEsR0FBRyxxQ0FBcUMsQ0FBQztBQUN2RCxNQUFNLE9BQU8sR0FBRyxrQ0FBa0MsQ0FBQztBQUVuRCxNQUFNLGVBQWUsR0FBRztJQUN0QixZQUFZLEVBQUUsaUhBQWlIO0lBQy9ILGNBQWMsRUFBRSxrQkFBa0I7SUFDbEMsUUFBUSxFQUFFLDhCQUE4QjtJQUN4QyxTQUFTLEVBQUUsK0JBQStCO0lBQzFDLFdBQVcsRUFBRSxvRUFBb0U7SUFDakYsa0JBQWtCLEVBQUUsSUFBSTtJQUN4QixvQkFBb0IsRUFBRSxXQUFXO0lBQ2pDLEtBQUssRUFBRSxHQUFHO0NBQ1gsQ0FBQztBQUVLLEtBQUssVUFBVSxhQUFhO0lBQ2pDLE1BQU0sUUFBUSxHQUFHLE1BQU0sS0FBSyxDQUFDLEdBQUcsUUFBUSxVQUFVLE9BQU8sRUFBRSxFQUFFO1FBQzNELE1BQU0sRUFBRSxNQUFNO1FBQ2QsT0FBTyxFQUFFLGVBQWU7UUFDeEIsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO0tBQ3pCLENBQUMsQ0FBQztJQUVILElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDakIsTUFBTSxJQUFJLEtBQUssQ0FBQyw2QkFBNkIsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVELE1BQU0sSUFBSSxHQUFHLE1BQU0sUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO0lBRW5DLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLEVBQUUsQ0FBQztRQUN6QixNQUFNLElBQUksS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVELE9BQU87UUFDTCxPQUFPLEVBQUUsT0FBTztRQUNoQixLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLO1FBQ3RCLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU87S0FDN0IsQ0FBQztBQUNKLENBQUM7QUFFTSxLQUFLLFVBQVUsU0FBUyxDQUFDLEtBQWE7SUFDM0MsTUFBTSxZQUFZLEdBQUcsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0MsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQzdCLE1BQU0sUUFBUSxHQUFHLE1BQU0sS0FBSyxDQUFDLEdBQUcsUUFBUSxtQkFBbUIsT0FBTyxJQUFJLFlBQVksTUFBTSxTQUFTLEVBQUUsRUFBRTtRQUNuRyxNQUFNLEVBQUUsS0FBSztRQUNiLE9BQU8sRUFBRSxlQUFlO0tBQ3pCLENBQUMsQ0FBQztJQUVILElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDakIsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVELE1BQU0sSUFBSSxHQUFHLE1BQU0sUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO0lBRW5DLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLEVBQUUsQ0FBQztRQUN6QixNQUFNLElBQUksS0FBSyxDQUFDLHNCQUFzQixDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVELE9BQU8sSUFBSSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7QUFDekIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVtYWlsSW5mbywgRW1haWwsIENoYW5uZWwgfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5jb25zdCBDSEFOTkVMOiBDaGFubmVsID0gJ2xpbnNoaS1lbWFpbCc7XHJcbmNvbnN0IEJBU0VfVVJMID0gJ2h0dHBzOi8vd3d3LmxpbnNoaS1lbWFpbC5jb20vYXBpL3YxJztcclxuY29uc3QgQVBJX0tFWSA9ICc1NTI1NjJiODUyNDg3OTgxNDc3NmU1MmJjOGRlNWM5Zic7XHJcblxyXG5jb25zdCBERUZBVUxUX0hFQURFUlMgPSB7XHJcbiAgJ1VzZXItQWdlbnQnOiAnTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzE0My4wLjAuMCBTYWZhcmkvNTM3LjM2JyxcclxuICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxyXG4gICdPcmlnaW4nOiAnaHR0cHM6Ly93d3cubGluc2hpLWVtYWlsLmNvbScsXHJcbiAgJ1JlZmVyZXInOiAnaHR0cHM6Ly93d3cubGluc2hpLWVtYWlsLmNvbS8nLFxyXG4gICdzZWMtY2gtdWEnOiAnXCJNaWNyb3NvZnQgRWRnZVwiO3Y9XCIxNDNcIiwgXCJDaHJvbWl1bVwiO3Y9XCIxNDNcIiwgXCJOb3QgQShCcmFuZFwiO3Y9XCIyNFwiJyxcclxuICAnc2VjLWNoLXVhLW1vYmlsZSc6ICc/MCcsXHJcbiAgJ3NlYy1jaC11YS1wbGF0Zm9ybSc6ICdcIldpbmRvd3NcIicsXHJcbiAgJ0ROVCc6ICcxJyxcclxufTtcclxuXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZW5lcmF0ZUVtYWlsKCk6IFByb21pc2U8RW1haWxJbmZvPiB7XHJcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgJHtCQVNFX1VSTH0vZW1haWwvJHtBUElfS0VZfWAsIHtcclxuICAgIG1ldGhvZDogJ1BPU1QnLFxyXG4gICAgaGVhZGVyczogREVGQVVMVF9IRUFERVJTLFxyXG4gICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe30pLFxyXG4gIH0pO1xyXG5cclxuICBpZiAoIXJlc3BvbnNlLm9rKSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBnZW5lcmF0ZSBlbWFpbDogJHtyZXNwb25zZS5zdGF0dXN9YCk7XHJcbiAgfVxyXG5cclxuICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xyXG4gIFxyXG4gIGlmIChkYXRhLnN0YXR1cyAhPT0gJ29rJykge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gZ2VuZXJhdGUgZW1haWwnKTtcclxuICB9XHJcblxyXG4gIHJldHVybiB7XHJcbiAgICBjaGFubmVsOiBDSEFOTkVMLFxyXG4gICAgZW1haWw6IGRhdGEuZGF0YS5lbWFpbCxcclxuICAgIGV4cGlyZXNBdDogZGF0YS5kYXRhLmV4cGlyZWQsXHJcbiAgfTtcclxufVxyXG5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEVtYWlscyhlbWFpbDogc3RyaW5nKTogUHJvbWlzZTxFbWFpbFtdPiB7XHJcbiAgY29uc3QgZW5jb2RlZEVtYWlsID0gZW5jb2RlVVJJQ29tcG9uZW50KGVtYWlsKTtcclxuICBjb25zdCB0aW1lc3RhbXAgPSBEYXRlLm5vdygpO1xyXG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goYCR7QkFTRV9VUkx9L3JlZnJlc2htZXNzYWdlLyR7QVBJX0tFWX0vJHtlbmNvZGVkRW1haWx9P3Q9JHt0aW1lc3RhbXB9YCwge1xyXG4gICAgbWV0aG9kOiAnR0VUJyxcclxuICAgIGhlYWRlcnM6IERFRkFVTFRfSEVBREVSUyxcclxuICB9KTtcclxuXHJcbiAgaWYgKCFyZXNwb25zZS5vaykge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gZ2V0IGVtYWlsczogJHtyZXNwb25zZS5zdGF0dXN9YCk7XHJcbiAgfVxyXG5cclxuICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xyXG4gIFxyXG4gIGlmIChkYXRhLnN0YXR1cyAhPT0gJ29rJykge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gZ2V0IGVtYWlscycpO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGRhdGEubGlzdCB8fCBbXTtcclxufVxyXG4iXX0=
|