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 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);
@@ -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,3 @@
1
+ import { EmailInfo, Email } from '../types';
2
+ export declare function generateEmail(): Promise<EmailInfo>;
3
+ export declare function getEmails(email: string): Promise<Email[]>;
@@ -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,3 @@
1
+ import { EmailInfo, Email } from '../types';
2
+ export declare function generateEmail(): Promise<EmailInfo>;
3
+ export declare function getEmails(email: string): Promise<Email[]>;
@@ -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=
@@ -0,0 +1,3 @@
1
+ import { EmailInfo, Email } from '../types';
2
+ export declare function generateEmail(domain?: string | null): Promise<EmailInfo>;
3
+ export declare function getEmails(token: string): Promise<Email[]>;