tempmail-sdk 1.0.3 → 1.1.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 CHANGED
@@ -3,7 +3,7 @@
3
3
  [![npm version](https://badge.fury.io/js/tempmail-sdk.svg)](https://www.npmjs.com/package/tempmail-sdk)
4
4
  [![License: GPL v3](https://img.shields.io/badge/License-GPLv3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0)
5
5
 
6
- 临时邮箱 SDK(TypeScript/Node.js),支持 9 个邮箱服务提供商,所有渠道返回**统一标准化格式**。
6
+ 临时邮箱 SDK(TypeScript/Node.js),支持 11 个邮箱服务提供商,所有渠道返回**统一标准化格式**。
7
7
 
8
8
  ## 安装
9
9
 
@@ -24,6 +24,8 @@ npm install tempmail-sdk
24
24
  | `awamail` | awamail.com | ✅ | Session Cookie 自动管理 |
25
25
  | `mail-tm` | mail.tm | ✅ | 自动注册账号获取 Bearer Token |
26
26
  | `dropmail` | dropmail.me | ✅ | GraphQL API |
27
+ | `guerrillamail` | guerrillamail.com | ✅ | 公开 JSON API |
28
+ | `maildrop` | maildrop.cc | ✅ | GraphQL API,自带反垃圾 |
27
29
 
28
30
  > **提示:** 使用 `TempEmailClient` 类时无需手动处理 Token,SDK 自动管理。
29
31
 
@@ -74,7 +76,9 @@ console.log(channels);
74
76
  // { channel: 'temp-mail-io', name: 'Temp Mail IO', website: 'temp-mail.io' },
75
77
  // { channel: 'awamail', name: 'AwaMail', website: 'awamail.com' },
76
78
  // { channel: 'mail-tm', name: 'Mail.tm', website: 'mail.tm' },
77
- // { channel: 'dropmail', name: 'DropMail', website: 'dropmail.me' }
79
+ // { channel: 'dropmail', name: 'DropMail', website: 'dropmail.me' },
80
+ // { channel: 'guerrillamail', name: 'Guerrilla Mail', website: 'guerrillamail.com' },
81
+ // { channel: 'maildrop', name: 'Maildrop', website: 'maildrop.cc' }
78
82
  // ]
79
83
 
80
84
  const info = getChannelInfo('tempmail');
@@ -186,7 +190,7 @@ for (const email of result2.emails) {
186
190
  |------|------|:----:|------|
187
191
  | `channel` | `Channel` | ✅ | 渠道标识 |
188
192
  | `email` | `string` | ✅ | 邮箱地址 |
189
- | `token` | `string` | 部分 | 访问令牌(`tempmail-lol`、`awamail`、`mail-tm`、`dropmail` 必填) |
193
+ | `token` | `string` | 部分 | 访问令牌(`tempmail-lol`、`awamail`、`mail-tm`、`dropmail`、`guerrillamail`、`maildrop` 必填) |
190
194
 
191
195
  **返回值:** `GetEmailsResult`
192
196
 
package/dist/index.js CHANGED
@@ -47,6 +47,8 @@ const tempMailIO = __importStar(require("./providers/temp-mail-io"));
47
47
  const awamail = __importStar(require("./providers/awamail"));
48
48
  const mailTm = __importStar(require("./providers/mail-tm"));
49
49
  const dropmail = __importStar(require("./providers/dropmail"));
50
+ const guerrillamail = __importStar(require("./providers/guerrillamail"));
51
+ const maildropProvider = __importStar(require("./providers/maildrop"));
50
52
  const retry_1 = require("./retry");
51
53
  const logger_1 = require("./logger");
52
54
  var normalize_1 = require("./normalize");
@@ -71,9 +73,11 @@ const providers = {
71
73
  'awamail': awamail,
72
74
  'mail-tm': mailTm,
73
75
  'dropmail': dropmail,
76
+ 'guerrillamail': guerrillamail,
77
+ 'maildrop': maildropProvider,
74
78
  };
75
79
  /** 所有支持的渠道列表,用于随机选择和遍历 */
76
- const allChannels = ['tempmail', 'linshi-email', 'tempmail-lol', 'chatgpt-org-uk', 'tempmail-la', 'temp-mail-io', 'awamail', 'mail-tm', 'dropmail'];
80
+ const allChannels = ['tempmail', 'linshi-email', 'tempmail-lol', 'chatgpt-org-uk', 'tempmail-la', 'temp-mail-io', 'awamail', 'mail-tm', 'dropmail', 'guerrillamail', 'maildrop'];
77
81
  /** 渠道信息映射表 */
78
82
  const channelInfoMap = {
79
83
  'tempmail': { channel: 'tempmail', name: 'TempMail', website: 'tempmail.ing' },
@@ -85,6 +89,8 @@ const channelInfoMap = {
85
89
  'awamail': { channel: 'awamail', name: 'AwaMail', website: 'awamail.com' },
86
90
  'mail-tm': { channel: 'mail-tm', name: 'Mail.tm', website: 'mail.tm' },
87
91
  'dropmail': { channel: 'dropmail', name: 'DropMail', website: 'dropmail.me' },
92
+ 'guerrillamail': { channel: 'guerrillamail', name: 'Guerrilla Mail', website: 'guerrillamail.com' },
93
+ 'maildrop': { channel: 'maildrop', name: 'Maildrop', website: 'maildrop.cc' },
88
94
  };
89
95
  /**
90
96
  * 获取所有支持的渠道列表
@@ -157,6 +163,10 @@ async function generateEmailOnce(channel, options) {
157
163
  return mailTm.generateEmail();
158
164
  case 'dropmail':
159
165
  return dropmail.generateEmail();
166
+ case 'guerrillamail':
167
+ return guerrillamail.generateEmail();
168
+ case 'maildrop':
169
+ return maildropProvider.generateEmail();
160
170
  default:
161
171
  throw new Error(`Unknown channel: ${channel}`);
162
172
  }
@@ -247,6 +257,14 @@ async function getEmailsOnce(channel, email, token) {
247
257
  if (!token)
248
258
  throw new Error('Token is required for dropmail channel');
249
259
  return dropmail.getEmails(token, email);
260
+ case 'guerrillamail':
261
+ if (!token)
262
+ throw new Error('Token is required for guerrillamail channel');
263
+ return guerrillamail.getEmails(token, email);
264
+ case 'maildrop':
265
+ if (!token)
266
+ throw new Error('Token is required for maildrop channel');
267
+ return maildropProvider.getEmails(token, email);
250
268
  default:
251
269
  throw new Error(`Unknown channel: ${channel}`);
252
270
  }
@@ -312,4 +330,4 @@ exports.default = {
312
330
  getEmails,
313
331
  TempEmailClient,
314
332
  };
315
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBc0VBLG9DQUVDO0FBUUQsd0NBRUM7QUFtQkQsc0NBT0M7QUF5REQsOEJBMkJDO0FBaE1ELCtEQUFpRDtBQUNqRCxzRUFBd0Q7QUFDeEQsc0VBQXdEO0FBQ3hELHlFQUEyRDtBQUMzRCxvRUFBc0Q7QUFDdEQscUVBQXVEO0FBQ3ZELDZEQUErQztBQUMvQyw0REFBOEM7QUFDOUMsK0RBQWlEO0FBRWpELG1DQUFrRDtBQUNsRCxxQ0FBa0M7QUFHbEMseUNBQTZDO0FBQXBDLDJHQUFBLGNBQWMsT0FBQTtBQUN2QixpQ0FBb0U7QUFBM0Qsa0dBQUEsU0FBUyxPQUFBO0FBQUUseUdBQUEsZ0JBQWdCLE9BQUE7QUFDcEMsbUNBQTZGO0FBQXBGLGtHQUFBLFFBQVEsT0FBQTtBQUFjLHFHQUFBLFdBQVcsT0FBQTtBQUFFLHFHQUFBLFdBQVcsT0FBQTtBQUFFLG1HQUFBLFNBQVMsT0FBQTtBQUFFLGdHQUFBLE1BQU0sT0FBQTtBQUUxRSw0QkFBNEI7QUFDNUIsTUFBTSxTQUFTLEdBQUc7SUFDaEIsVUFBVSxFQUFFLFFBQVE7SUFDcEIsY0FBYyxFQUFFLFdBQVc7SUFDM0IsY0FBYyxFQUFFLFdBQVc7SUFDM0IsZ0JBQWdCLEVBQUUsWUFBWTtJQUM5QixhQUFhLEVBQUUsVUFBVTtJQUN6QixjQUFjLEVBQUUsVUFBVTtJQUMxQixTQUFTLEVBQUUsT0FBTztJQUNsQixTQUFTLEVBQUUsTUFBTTtJQUNqQixVQUFVLEVBQUUsUUFBUTtDQUNyQixDQUFDO0FBRUYsMEJBQTBCO0FBQzFCLE1BQU0sV0FBVyxHQUFjLENBQUMsVUFBVSxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsZ0JBQWdCLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFVBQVUs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SSxLQUFLLENBQUMsNENBQTRDLENBQUMsQ0FBQztRQUNoRSxDQUFDO1FBRUQsT0FBTyxTQUFTLENBQUM7WUFDZixPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPO1lBQy9CLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUs7WUFDM0IsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSztTQUM1QixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsWUFBWTtRQUNWLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN4QixDQUFDO0NBQ0Y7QUFyQ0QsMENBcUNDO0FBRUQsa0JBQWU7SUFDYixZQUFZO0lBQ1osY0FBYztJQUNkLGFBQWE7SUFDYixTQUFTO0lBQ1QsZUFBZTtDQUNoQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgdGVtcG1haWwgZnJvbSAnLi9wcm92aWRlcnMvdGVtcG1haWwnO1xuaW1wb3J0ICogYXMgbGluc2hpRW1haWwgZnJvbSAnLi9wcm92aWRlcnMvbGluc2hpLWVtYWlsJztcbmltcG9ydCAqIGFzIHRlbXBtYWlsTG9sIGZyb20gJy4vcHJvdmlkZXJzL3RlbXBtYWlsLWxvbCc7XG5pbXBvcnQgKiBhcyBjaGF0Z3B0T3JnVWsgZnJvbSAnLi9wcm92aWRlcnMvY2hhdGdwdC1vcmctdWsnO1xuaW1wb3J0ICogYXMgdGVtcG1haWxMYSBmcm9tICcuL3Byb3ZpZGVycy90ZW1wbWFpbC1sYSc7XG5pbXBvcnQgKiBhcyB0ZW1wTWFpbElPIGZyb20gJy4vcHJvdmlkZXJzL3RlbXAtbWFpbC1pbyc7XG5pbXBvcnQgKiBhcyBhd2FtYWlsIGZyb20gJy4vcHJvdmlkZXJzL2F3YW1haWwnO1xuaW1wb3J0ICogYXMgbWFpbFRtIGZyb20gJy4vcHJvdmlkZXJzL21haWwtdG0nO1xuaW1wb3J0ICogYXMgZHJvcG1haWwgZnJvbSAnLi9wcm92aWRlcnMvZHJvcG1haWwnO1xuaW1wb3J0IHsgQ2hhbm5lbCwgRW1haWxJbmZvLCBFbWFpbCwgRW1haWxBdHRhY2htZW50LCBHZXRFbWFpbHNSZXN1bHQsIEdlbmVyYXRlRW1haWxPcHRpb25zLCBHZXRFbWFpbHNPcHRpb25zIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyB3aXRoUmV0cnksIFJldHJ5T3B0aW9ucyB9IGZyb20gJy4vcmV0cnknO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi9sb2dnZXInO1xuXG5leHBvcnQgeyBDaGFubmVsLCBFbWFpbEluZm8sIEVtYWlsLCBFbWFpbEF0dGFjaG1lbnQsIEdldEVtYWlsc1Jlc3VsdCwgR2VuZXJhdGVFbWFpbE9wdGlvbnMsIEdldEVtYWlsc09wdGlvbnMgfSBmcm9tICcuL3R5cGVzJztcbmV4cG9ydCB7IG5vcm1hbGl6ZUVtYWlsIH0gZnJvbSAnLi9ub3JtYWxpemUnO1xuZXhwb3J0IHsgd2l0aFJldHJ5LCBmZXRjaFdpdGhUaW1lb3V0LCBSZXRyeU9wdGlvbnMgfSBmcm9tICcuL3JldHJ5JztcbmV4cG9ydCB7IExvZ0xldmVsLCBMb2dIYW5kbGVyLCBzZXRMb2dMZXZlbCwgZ2V0TG9nTGV2ZWwsIHNldExvZ2dlciwgbG9nZ2VyIH0gZnJvbSAnLi9sb2dnZXInO1xuXG4vKiog5rig6YGT5ZCN56ew5YiwIHByb3ZpZGVyIOWunueOsOeahOaYoOWwhOihqCAqL1xuY29uc3QgcHJvdmlkZXJzID0ge1xuICAndGVtcG1haWwnOiB0ZW1wbWFpbCxcbiAgJ2xpbnNoaS1lbWFpbCc6IGxpbnNoaUVtYWlsLFxuICAndGVtcG1haWwtbG9sJzogdGVtcG1haWxMb2wsXG4gICdjaGF0Z3B0LW9yZy11ayc6IGNoYXRncHRPcmdVayxcbiAgJ3RlbXBtYWlsLWxhJzogdGVtcG1haWxMYSxcbiAgJ3RlbXAtbWFpbC1pbyc6IHRlbXBNYWlsSU8sXG4gICdhd2FtYWlsJzogYXdhbWFpbCxcbiAgJ21haWwtdG0nOiBtYWlsVG0sXG4gICdkcm9wbWFpbCc6IGRyb3BtYWlsLFxufTtcblxuLyoqIOaJgOacieaUr+aMgeeahOa4oOmBk+WIl+ihqO+8jOeUqOS6jumaj+acuumAieaLqeWSjOmBjeWOhiAqL1xuY29uc3QgYWxsQ2hhbm5lbHM6IENoYW5uZWxbXSA9IFsndGVtcG1haWwnLCAnbGluc2hpLWVtYWlsJywgJ3RlbXBtYWlsLWxvbCcsICdjaGF0Z3B0LW9yZy11aycsICd0ZW1wbWFpbC1sYScsICd0ZW1wLW1haWwtaW8nLCAnYXdhbWFpbCcsICdtYWlsLXRtJywgJ2Ryb3BtYWlsJ107XG5cbi8qKlxuICog5rig6YGT5L+h5oGv77yM5YyF5ZCr5rig6YGT5qCH6K+G44CB5pi+56S65ZCN56ew5ZKM5a+55bqU572R56uZXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2hhbm5lbEluZm8ge1xuICAvKiog5rig6YGT5qCH6K+GICovXG4gIGNoYW5uZWw6IENoYW5uZWw7XG4gIC8qKiDmuKDpgZPmmL7npLrlkI3np7AgKi9cbiAgbmFtZTogc3RyaW5nO1xuICAvKiog5a+55bqU55qE5Li05pe26YKu566x5pyN5Yqh572R56uZICovXG4gIHdlYnNpdGU6IHN0cmluZztcbn1cblxuLyoqIOa4oOmBk+S/oeaBr+aYoOWwhOihqCAqL1xuY29uc3QgY2hhbm5lbEluZm9NYXA6IFJlY29yZDxDaGFubmVsLCBDaGFubmVsSW5mbz4gPSB7XG4gICd0ZW1wbWFpbCc6IHsgY2hhbm5lbDogJ3RlbXBtYWlsJywgbmFtZTogJ1RlbXBNYWlsJywgd2Vic2l0ZTogJ3RlbXBtYWlsLmluZycgfSxcbiAgJ2xpbnNoaS1lbWFpbCc6IHsgY2hhbm5lbDogJ2xpbnNoaS1lbWFpbCcsIG5hbWU6ICfkuLTml7bpgq7nrrEnLCB3ZWJzaXRlOiAnbGluc2hpLWVtYWlsLmNvbScgfSxcbiAgJ3RlbXBtYWlsLWxvbCc6IHsgY2hhbm5lbDogJ3RlbXBtYWlsLWxvbCcsIG5hbWU6ICdUZW1wTWFpbCBMT0wnLCB3ZWJzaXRlOiAndGVtcG1haWwubG9sJyB9LFxuICAnY2hhdGdwdC1vcmctdWsnOiB7IGNoYW5uZWw6ICdjaGF0Z3B0LW9yZy11aycsIG5hbWU6ICdDaGF0R1BUIE1haWwnLCB3ZWJzaXRlOiAnbWFpbC5jaGF0Z3B0Lm9yZy51aycgfSxcbiAgJ3RlbXBtYWlsLWxhJzogeyBjaGFubmVsOiAndGVtcG1haWwtbGEnLCBuYW1lOiAnVGVtcE1haWwgTEEnLCB3ZWJzaXRlOiAndGVtcG1haWwubGEnIH0sXG4gICd0ZW1wLW1haWwtaW8nOiB7IGNoYW5uZWw6ICd0ZW1wLW1haWwtaW8nLCBuYW1lOiAnVGVtcCBNYWlsIElPJywgd2Vic2l0ZTogJ3RlbXAtbWFpbC5pbycgfSxcbiAgJ2F3YW1haWwnOiB7IGNoYW5uZWw6ICdhd2FtYWlsJywgbmFtZTogJ0F3YU1haWwnLCB3ZWJzaXRlOiAnYXdhbWFpbC5jb20nIH0sXG4gICdtYWlsLXRtJzogeyBjaGFubmVsOiAnbWFpbC10bScsIG5hbWU6ICdNYWlsLnRtJywgd2Vic2l0ZTogJ21haWwudG0nIH0sXG4gICdkcm9wbWFpbCc6IHsgY2hhbm5lbDogJ2Ryb3BtYWlsJywgbmFtZTogJ0Ryb3BNYWlsJywgd2Vic2l0ZTogJ2Ryb3BtYWlsLm1lJyB9LFxufTtcblxuLyoqXG4gKiDojrflj5bmiYDmnInmlK/mjIHnmoTmuKDpgZPliJfooahcbiAqXG4gKiBAcmV0dXJucyDmiYDmnInmuKDpgZPnmoTkv6Hmga/mlbDnu4RcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGNvbnN0IGNoYW5uZWxzID0gbGlzdENoYW5uZWxzKCk7XG4gKiBjaGFubmVscy5mb3JFYWNoKGNoID0+IGNvbnNvbGUubG9nKGAke2NoLm5hbWV9ICgke2NoLndlYnNpdGV9KWApKTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gbGlzdENoYW5uZWxzKCk6IENoYW5uZWxJbmZvW10ge1xuICByZXR1cm4gYWxsQ2hhbm5lbHMubWFwKGNoID0+IGNoYW5uZWxJbmZvTWFwW2NoXSk7XG59XG5cbi8qKlxuICog6I635Y+W5oyH5a6a5rig6YGT55qE6K+m57uG5L+h5oGvXG4gKlxuICogQHBhcmFtIGNoYW5uZWwgLSDmuKDpgZPmoIfor4ZcbiAqIEByZXR1cm5zIOa4oOmBk+S/oeaBr++8jOS4jeWtmOWcqOaXtui/lOWbniB1bmRlZmluZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENoYW5uZWxJbmZvKGNoYW5uZWw6IENoYW5uZWwpOiBDaGFubmVsSW5mbyB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBjaGFubmVsSW5mb01hcFtjaGFubmVsXTtcbn1cblxuLyoqXG4gKiDliJvlu7rkuLTml7bpgq7nrrFcbiAqXG4gKiDplJnor6/lpITnkIbnrZbnlaXvvJpcbiAqIC0g572R57uc6ZSZ6K+v44CB6LaF5pe244CB5pyN5Yqh56uvIDV4eCDplJnor68g4oaSIOiHquWKqOmHjeivle+8iOm7mOiupCAyIOasoe+8jOaMh+aVsOmAgOmBv++8iVxuICogLSA0eHgg5a6i5oi356uv6ZSZ6K+v44CB5Y+C5pWw6ZSZ6K+vIOKGkiDnm7TmjqXmipvlh7rlvILluLhcbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIOWIm+W7uumAiemhue+8jOWPr+aMh+Wumua4oOmBk+OAgeacieaViOaXtumVv+OAgeWfn+WQjeetiVxuICogQHJldHVybnMg6YKu566x5L+h5oGv77yM5YyF5ZCr5Zyw5Z2A44CB5Luk54mM562JXG4gKiBAdGhyb3dzIOmHjeivleiAl+WwveWQjuS7jeWksei0peaXtuaKm+WHuuW8guW4uFxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3QgZW1haWxJbmZvID0gYXdhaXQgZ2VuZXJhdGVFbWFpbCh7IGNoYW5uZWw6ICd0ZW1wLW1haWwtaW8nIH0pO1xuICogY29uc29sZS5sb2coZW1haWxJbmZvLmVtYWlsKTsgLy8g5Li05pe26YKu566x5Zyw5Z2AXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlRW1haWwob3B0aW9uczogR2VuZXJhdGVFbWFpbE9wdGlvbnMgPSB7fSk6IFByb21pc2U8RW1haWxJbmZvPiB7XG4gIGNvbnN0IGNoYW5uZWwgPSBvcHRpb25zLmNoYW5uZWwgfHwgYWxsQ2hhbm5lbHNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogYWxsQ2hhbm5lbHMubGVuZ3RoKV07XG5cbiAgbG9nZ2VyLmluZm8oYOWIm+W7uuS4tOaXtumCrueusSwg5rig6YGTOiAke2NoYW5uZWx9YCk7XG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHdpdGhSZXRyeSgoKSA9PiBnZW5lcmF0ZUVtYWlsT25jZShjaGFubmVsLCBvcHRpb25zKSwgb3B0aW9ucy5yZXRyeSk7XG4gIGxvZ2dlci5pbmZvKGDpgq7nrrHliJvlu7rmiJDlip86ICR7cmVzdWx0LmVtYWlsfWApO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIOWNleasoeWIm+W7uumCrueuse+8iOS4jeWQq+mHjeivlemAu+i+ke+8iVxuICog5qC55o2u5rig6YGT57G75Z6L5YiG5Y+R5Yiw5a+55bqU55qEIHByb3ZpZGVyIOWunueOsFxuICovXG5hc3luYyBmdW5jdGlvbiBnZW5lcmF0ZUVtYWlsT25jZShjaGFubmVsOiBDaGFubmVsLCBvcHRpb25zOiBHZW5lcmF0ZUVtYWlsT3B0aW9ucyk6IFByb21pc2U8RW1haWxJbmZvPiB7XG4gIHN3aXRjaCAoY2hhbm5lbCkge1xuICAgIGNhc2UgJ3RlbXBtYWlsJzpcbiAgICAgIHJldHVybiB0ZW1wbWFpbC5nZW5lcmF0ZUVtYWlsKG9wdGlvbnMuZHVyYXRpb24gfHwgMzApO1xuICAgIGNhc2UgJ2xpbnNoaS1lbWFpbCc6XG4gICAgICByZXR1cm4gbGluc2hpRW1haWwuZ2VuZXJhdGVFbWFpbCgpO1xuICAgIGNhc2UgJ3RlbXBtYWlsLWxvbCc6XG4gICAgICByZXR1cm4gdGVtcG1haWxMb2wuZ2VuZXJhdGVFbWFpbChvcHRpb25zLmRvbWFpbiB8fCBudWxsKTtcbiAgICBjYXNlICdjaGF0Z3B0LW9yZy11ayc6XG4gICAgICByZXR1cm4gY2hhdGdwdE9yZ1VrLmdlbmVyYXRlRW1haWwoKTtcbiAgICBjYXNlICd0ZW1wbWFpbC1sYSc6XG4gICAgICByZXR1cm4gdGVtcG1haWxMYS5nZW5lcmF0ZUVtYWlsKCk7XG4gICAgY2FzZSAndGVtcC1tYWlsLWlvJzpcbiAgICAgIHJldHVybiB0ZW1wTWFpbElPLmdlbmVyYXRlRW1haWwoKTtcbiAgICBjYXNlICdhd2FtYWlsJzpcbiAgICAgIHJldHVybiBhd2FtYWlsLmdlbmVyYXRlRW1haWwoKTtcbiAgICBjYXNlICdtYWlsLXRtJzpcbiAgICAgIHJldHVybiBtYWlsVG0uZ2VuZXJhdGVFbWFpbCgpO1xuICAgIGNhc2UgJ2Ryb3BtYWlsJzpcbiAgICAgIHJldHVybiBkcm9wbWFpbC5nZW5lcmF0ZUVtYWlsKCk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBjaGFubmVsOiAke2NoYW5uZWx9YCk7XG4gIH1cbn1cblxuLyoqXG4gKiDojrflj5bpgq7ku7bliJfooahcbiAqXG4gKiDplJnor6/lpITnkIbnrZbnlaXvvJpcbiAqIC0g572R57uc6ZSZ6K+v44CB6LaF5pe244CB5pyN5Yqh56uvIDV4eCDplJnor68g4oaSIOiHquWKqOmHjeivle+8iOm7mOiupCAyIOasoe+8iVxuICogLSDph43or5XogJflsL3lkI7ov5Tlm54geyBzdWNjZXNzOiBmYWxzZSwgZW1haWxzOiBbXSB977yM5LiN5oqb5byC5bi4XG4gKiAtIOWPguaVsOagoemqjOmUmeivr++8iOe8uuWwkSBjaGFubmVsIC8gdG9rZW7vvInnm7TmjqXmipvlh7pcbiAqXG4gKiDov5nnp43orr7orqHorqnosIPnlKjmlrnlnKjova7or6LlnLrmma/kuIvkuI3kvJrlm6DnvZHnu5zms6LliqjogIzkuK3mlq3mlbTkuKrmtYHnqIvvvIxcbiAqIOWPqumcgOajgOafpSBzdWNjZXNzIOWtl+auteWNs+WPr+WIpOaWreacrOasoeivt+axguaYr+WQpuaIkOWKn+OAglxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0g6I635Y+W6YCJ6aG577yM5YyF5ZCr5rig6YGT44CB6YKu566x5Zyw5Z2A44CB5Luk54mMXG4gKiBAcmV0dXJucyDpgq7ku7bnu5PmnpzvvIzljIXlkKsgc3VjY2VzcyDmoIforrDlkozpgq7ku7bliJfooahcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGdldEVtYWlscyh7XG4gKiAgIGNoYW5uZWw6IGVtYWlsSW5mby5jaGFubmVsLFxuICogICBlbWFpbDogZW1haWxJbmZvLmVtYWlsLFxuICogICB0b2tlbjogZW1haWxJbmZvLnRva2VuLFxuICogfSk7XG4gKiBpZiAocmVzdWx0LnN1Y2Nlc3MgJiYgcmVzdWx0LmVtYWlscy5sZW5ndGggPiAwKSB7XG4gKiAgIGNvbnNvbGUubG9nKCfmlLbliLDpgq7ku7Y6JywgcmVzdWx0LmVtYWlsc1swXS5zdWJqZWN0KTtcbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0RW1haWxzKG9wdGlvbnM6IEdldEVtYWlsc09wdGlvbnMpOiBQcm9taXNlPEdldEVtYWlsc1Jlc3VsdD4ge1xuICBjb25zdCB7IGNoYW5uZWwsIGVtYWlsLCB0b2tlbiB9ID0gb3B0aW9ucztcblxuICBpZiAoIWNoYW5uZWwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NoYW5uZWwgaXMgcmVxdWlyZWQnKTtcbiAgfVxuICBpZiAoIWVtYWlsICYmIGNoYW5uZWwgIT09ICd0ZW1wbWFpbC1sb2wnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdFbWFpbCBpcyByZXF1aXJlZCcpO1xuICB9XG5cbiAgbG9nZ2VyLmRlYnVnKGDojrflj5bpgq7ku7YsIOa4oOmBkzogJHtjaGFubmVsfSwg6YKu566xOiAke2VtYWlsfWApO1xuICB0cnkge1xuICAgIGNvbnN0IGVtYWlscyA9IGF3YWl0IHdpdGhSZXRyeSgoKSA9PiBnZXRFbWFpbHNPbmNlKGNoYW5uZWwsIGVtYWlsLCB0b2tlbiksIG9wdGlvbnMucmV0cnkpO1xuICAgIGlmIChlbWFpbHMubGVuZ3RoID4gMCkge1xuICAgICAgbG9nZ2VyLmluZm8oYOiOt+WPluWIsCAke2VtYWlscy5sZW5ndGh9IOWwgemCruS7tiwg5rig6YGTOiAke2NoYW5uZWx9YCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZ2dlci5kZWJ1Zyhg5pqC5peg6YKu5Lu2LCDmuKDpgZM6ICR7Y2hhbm5lbH1gKTtcbiAgICB9XG4gICAgcmV0dXJuIHsgY2hhbm5lbCwgZW1haWwsIGVtYWlscywgc3VjY2VzczogdHJ1ZSB9O1xuICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgIC8qXG4gICAgICog6YeN6K+V6ICX5bC95ZCO5LuN54S25aSx6LSlIOKGkiDov5Tlm57nqbrnu5PmnpzogIzpnZ7mipvlvILluLhcbiAgICAgKiDov5nmoLfosIPnlKjmlrnlnKjova7or6LlnLrmma/kuIvkuI3kvJrlm6DkuLrkuIDmrKHnvZHnu5zms6LliqjogIzkuK3mlq3mlbTkuKrmtYHnqItcbiAgICAgKi9cbiAgICBsb2dnZXIuZXJyb3IoYOiOt+WPlumCruS7tuWksei0pSwg5rig6YGTOiAke2NoYW5uZWx9LCDplJnor686ICR7ZXJyLm1lc3NhZ2UgfHwgZXJyfWApO1xuICAgIHJldHVybiB7IGNoYW5uZWwsIGVtYWlsLCBlbWFpbHM6IFtdLCBzdWNjZXNzOiBmYWxzZSB9O1xuICB9XG59XG5cbi8qKlxuICog5Y2V5qyh6I635Y+W6YKu5Lu277yI5LiN5ZCr6YeN6K+V6YC76L6R77yJXG4gKiDmoLnmja7muKDpgZPnsbvlnovliIblj5HliLDlr7nlupTnmoQgcHJvdmlkZXIg5a6e546w77yM5bm25qCh6aqM5b+F6ZyA55qEIHRva2VuIOWPguaVsFxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRFbWFpbHNPbmNlKGNoYW5uZWw6IENoYW5uZWwsIGVtYWlsOiBzdHJpbmcsIHRva2VuPzogc3RyaW5nKTogUHJvbWlzZTxFbWFpbFtdPiB7XG4gIHN3aXRjaCAoY2hhbm5lbCkge1xuICAgIGNhc2UgJ3RlbXBtYWlsJzpcbiAgICAgIHJldHVybiB0ZW1wbWFpbC5nZXRFbWFpbHMoZW1haWwpO1xuICAgIGNhc2UgJ2xpbnNoaS1lbWFpbCc6XG4gICAgICByZXR1cm4gbGluc2hpRW1haWwuZ2V0RW1haWxzKGVtYWlsKTtcbiAgICBjYXNlICd0ZW1wbWFpbC1sb2wnOlxuICAgICAgaWYgKCF0b2tlbikgdGhyb3cgbmV3IEVycm9yKCdUb2tlbiBpcyByZXF1aXJlZCBmb3IgdGVtcG1haWwtbG9sIGNoYW5uZWwnKTtcbiAgICAgIHJldHVybiB0ZW1wbWFpbExvbC5nZXRFbWFpbHModG9rZW4sIGVtYWlsKTtcbiAgICBjYXNlICdjaGF0Z3B0LW9yZy11ayc6XG4gICAgICByZXR1cm4gY2hhdGdwdE9yZ1VrLmdldEVtYWlscyhlbWFpbCk7XG4gICAgY2FzZSAndGVtcG1haWwtbGEnOlxuICAgICAgcmV0dXJuIHRlbXBtYWlsTGEuZ2V0RW1haWxzKGVtYWlsKTtcbiAgICBjYXNlICd0ZW1wLW1haWwtaW8nOlxuICAgICAgcmV0dXJuIHRlbXBNYWlsSU8uZ2V0RW1haWxzKGVtYWlsKTtcbiAgICBjYXNlICdhd2FtYWlsJzpcbiAgICAgIGlmICghdG9rZW4pIHRocm93IG5ldyBFcnJvcignVG9rZW4gaXMgcmVxdWlyZWQgZm9yIGF3YW1haWwgY2hhbm5lbCcpO1xuICAgICAgcmV0dXJuIGF3YW1haWwuZ2V0RW1haWxzKHRva2VuLCBlbWFpbCk7XG4gICAgY2FzZSAnbWFpbC10bSc6XG4gICAgICBpZiAoIXRva2VuKSB0aHJvdyBuZXcgRXJyb3IoJ1Rva2VuIGlzIHJlcXVpcmVkIGZvciBtYWlsLXRtIGNoYW5uZWwnKTtcbiAgICAgIHJldHVybiBtYWlsVG0uZ2V0RW1haWxzKHRva2VuLCBlbWFpbCk7XG4gICAgY2FzZSAnZHJvcG1haWwnOlxuICAgICAgaWYgKCF0b2tlbikgdGhyb3cgbmV3IEVycm9yKCdUb2tlbiBpcyByZXF1aXJlZCBmb3IgZHJvcG1haWwgY2hhbm5lbCcpO1xuICAgICAgcmV0dXJuIGRyb3BtYWlsLmdldEVtYWlscyh0b2tlbiwgZW1haWwpO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gY2hhbm5lbDogJHtjaGFubmVsfWApO1xuICB9XG59XG5cbi8qKlxuICog5Li05pe26YKu566x5a6i5oi356uvXG4gKiDlsIHoo4Xkuobpgq7nrrHliJvlu7rlkozpgq7ku7bojrflj5bnmoTlrozmlbTmtYHnqIvvvIzoh6rliqjnrqHnkIbpgq7nrrHkv6Hmga/lkozorqTor4Hku6TniYxcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGNvbnN0IGNsaWVudCA9IG5ldyBUZW1wRW1haWxDbGllbnQoKTtcbiAqIGNvbnN0IGVtYWlsSW5mbyA9IGF3YWl0IGNsaWVudC5nZW5lcmF0ZSh7IGNoYW5uZWw6ICdtYWlsLXRtJyB9KTtcbiAqIGNvbnNvbGUubG9nKCfpgq7nrrE6JywgZW1haWxJbmZvLmVtYWlsKTtcbiAqXG4gKiAvLyDova7or6Lojrflj5bpgq7ku7ZcbiAqIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNsaWVudC5nZXRFbWFpbHMoKTtcbiAqIGlmIChyZXN1bHQuc3VjY2Vzcykge1xuICogICBjb25zb2xlLmxvZygn6YKu5Lu25pWwOicsIHJlc3VsdC5lbWFpbHMubGVuZ3RoKTtcbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgVGVtcEVtYWlsQ2xpZW50IHtcbiAgcHJpdmF0ZSBlbWFpbEluZm86IEVtYWlsSW5mbyB8IG51bGwgPSBudWxsO1xuXG4gIC8qKlxuICAgKiDliJvlu7rkuLTml7bpgq7nrrHlubbnvJPlrZjpgq7nrrHkv6Hmga9cbiAgICog5ZCO57ut6LCD55SoIGdldEVtYWlscygpIOaXtuiHquWKqOS9v+eUqOatpOmCrueuseeahOa4oOmBk+OAgeWcsOWdgOWSjOS7pOeJjFxuICAgKi9cbiAgYXN5bmMgZ2VuZXJhdGUob3B0aW9uczogR2VuZXJhdGVFbWFpbE9wdGlvbnMgPSB7fSk6IFByb21pc2U8RW1haWxJbmZvPiB7XG4gICAgdGhpcy5lbWFpbEluZm8gPSBhd2FpdCBnZW5lcmF0ZUVtYWlsKG9wdGlvbnMpO1xuICAgIHJldHVybiB0aGlzLmVtYWlsSW5mbztcbiAgfVxuXG4gIC8qKlxuICAgKiDojrflj5blvZPliY3pgq7nrrHnmoTpgq7ku7bliJfooahcbiAgICog5b+F6aG75YWI6LCD55SoIGdlbmVyYXRlKCkg5Yib5bu66YKu566xXG4gICAqXG4gICAqIEB0aHJvd3Mg5pyq6LCD55SoIGdlbmVyYXRlKCkg5pe25oqb5Ye65byC5bi4XG4gICAqL1xuICBhc3luYyBnZXRFbWFpbHMoKTogUHJvbWlzZTxHZXRFbWFpbHNSZXN1bHQ+IHtcbiAgICBpZiAoIXRoaXMuZW1haWxJbmZvKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIGVtYWlsIGdlbmVyYXRlZC4gQ2FsbCBnZW5lcmF0ZSgpIGZpcnN0LicpO1xuICAgIH1cblxuICAgIHJldHVybiBnZXRFbWFpbHMoe1xuICAgICAgY2hhbm5lbDogdGhpcy5lbWFpbEluZm8uY2hhbm5lbCxcbiAgICAgIGVtYWlsOiB0aGlzLmVtYWlsSW5mby5lbWFpbCxcbiAgICAgIHRva2VuOiB0aGlzLmVtYWlsSW5mby50b2tlbixcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiDojrflj5blvZPliY3nvJPlrZjnmoTpgq7nrrHkv6Hmga9cbiAgICog5pyq6LCD55SoIGdlbmVyYXRlKCkg5pe26L+U5ZueIG51bGxcbiAgICovXG4gIGdldEVtYWlsSW5mbygpOiBFbWFpbEluZm8gfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5lbWFpbEluZm87XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBsaXN0Q2hhbm5lbHMsXG4gIGdldENoYW5uZWxJbmZvLFxuICBnZW5lcmF0ZUVtYWlsLFxuICBnZXRFbWFpbHMsXG4gIFRlbXBFbWFpbENsaWVudCxcbn07XG4iXX0=
333
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBNEVBLG9DQUVDO0FBUUQsd0NBRUM7QUFtQkQsc0NBT0M7QUE2REQsOEJBMkJDO0FBMU1ELCtEQUFpRDtBQUNqRCxzRUFBd0Q7QUFDeEQsc0VBQXdEO0FBQ3hELHlFQUEyRDtBQUMzRCxvRUFBc0Q7QUFDdEQscUVBQXVEO0FBQ3ZELDZEQUErQztBQUMvQyw0REFBOEM7QUFDOUMsK0RBQWlEO0FBQ2pELHlFQUEyRDtBQUMzRCx1RUFBeUQ7QUFFekQsbUNBQWtEO0FBQ2xELHFDQUFrQztBQUdsQyx5Q0FBNkM7QUFBcEMsMkdBQUEsY0FBYyxPQUFBO0FBQ3ZCLGlDQUFvRTtBQUEzRCxrR0FBQSxTQUFTLE9BQUE7QUFBRSx5R0FBQSxnQkFBZ0IsT0FBQTtBQUNwQyxtQ0FBNkY7QUFBcEYsa0dBQUEsUUFBUSxPQUFBO0FBQWMscUdBQUEsV0FBVyxPQUFBO0FBQUUscUdBQUEsV0FBVyxPQUFBO0FBQUUsbUdBQUEsU0FBUyxPQUFBO0FBQUUsZ0dBQUEsTUFBTSxPQUFBO0FBRTFFLDRCQUE0QjtBQUM1QixNQUFNLFNBQVMsR0FBRztJQUNoQixVQUFVLEVBQUUsUUFBUTtJQUNwQixjQUFjLEVBQUUsV0FBVztJQUMzQixjQUFjLEVBQUUsV0FBVztJQUMzQixnQkFBZ0IsRUFBRSxZQUFZO0lBQzlCLGFBQWEsRUFBRSxVQUFVO0lBQ3pCLGNBQWMsRUFBRSxVQUFVO0lBQzFCLFNBQVMsRUFBRSxPQUFPO0lBQ2xCLFNBQVMsRUFBRSxNQUFNO0lBQ2pCLFVBQVUsRUFBRSxRQUFRO0lBQ3BCLGVBQWUsRUFBRSxhQUFhO0lBQzlCLFVBQVUsRUFBRSxnQkFBZ0I7Q0FDN0IsQ0FBQztBQUVGLDBCQUEwQjtBQUMxQixNQUFNLFdBQVcsR0FBYyxDQUFDLFVBQVUsRUFBRSxjQUFjLEVB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Q0FBQztDQUNGO0FBckNELDBDQXFDQztBQUVELGtCQUFlO0lBQ2IsWUFBWTtJQUNaLGNBQWM7SUFDZCxhQUFhO0lBQ2IsU0FBUztJQUNULGVBQWU7Q0FDaEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHRlbXBtYWlsIGZyb20gJy4vcHJvdmlkZXJzL3RlbXBtYWlsJztcbmltcG9ydCAqIGFzIGxpbnNoaUVtYWlsIGZyb20gJy4vcHJvdmlkZXJzL2xpbnNoaS1lbWFpbCc7XG5pbXBvcnQgKiBhcyB0ZW1wbWFpbExvbCBmcm9tICcuL3Byb3ZpZGVycy90ZW1wbWFpbC1sb2wnO1xuaW1wb3J0ICogYXMgY2hhdGdwdE9yZ1VrIGZyb20gJy4vcHJvdmlkZXJzL2NoYXRncHQtb3JnLXVrJztcbmltcG9ydCAqIGFzIHRlbXBtYWlsTGEgZnJvbSAnLi9wcm92aWRlcnMvdGVtcG1haWwtbGEnO1xuaW1wb3J0ICogYXMgdGVtcE1haWxJTyBmcm9tICcuL3Byb3ZpZGVycy90ZW1wLW1haWwtaW8nO1xuaW1wb3J0ICogYXMgYXdhbWFpbCBmcm9tICcuL3Byb3ZpZGVycy9hd2FtYWlsJztcbmltcG9ydCAqIGFzIG1haWxUbSBmcm9tICcuL3Byb3ZpZGVycy9tYWlsLXRtJztcbmltcG9ydCAqIGFzIGRyb3BtYWlsIGZyb20gJy4vcHJvdmlkZXJzL2Ryb3BtYWlsJztcbmltcG9ydCAqIGFzIGd1ZXJyaWxsYW1haWwgZnJvbSAnLi9wcm92aWRlcnMvZ3VlcnJpbGxhbWFpbCc7XG5pbXBvcnQgKiBhcyBtYWlsZHJvcFByb3ZpZGVyIGZyb20gJy4vcHJvdmlkZXJzL21haWxkcm9wJztcbmltcG9ydCB7IENoYW5uZWwsIEVtYWlsSW5mbywgRW1haWwsIEVtYWlsQXR0YWNobWVudCwgR2V0RW1haWxzUmVzdWx0LCBHZW5lcmF0ZUVtYWlsT3B0aW9ucywgR2V0RW1haWxzT3B0aW9ucyB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgd2l0aFJldHJ5LCBSZXRyeU9wdGlvbnMgfSBmcm9tICcuL3JldHJ5JztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4vbG9nZ2VyJztcblxuZXhwb3J0IHsgQ2hhbm5lbCwgRW1haWxJbmZvLCBFbWFpbCwgRW1haWxBdHRhY2htZW50LCBHZXRFbWFpbHNSZXN1bHQsIEdlbmVyYXRlRW1haWxPcHRpb25zLCBHZXRFbWFpbHNPcHRpb25zIH0gZnJvbSAnLi90eXBlcyc7XG5leHBvcnQgeyBub3JtYWxpemVFbWFpbCB9IGZyb20gJy4vbm9ybWFsaXplJztcbmV4cG9ydCB7IHdpdGhSZXRyeSwgZmV0Y2hXaXRoVGltZW91dCwgUmV0cnlPcHRpb25zIH0gZnJvbSAnLi9yZXRyeSc7XG5leHBvcnQgeyBMb2dMZXZlbCwgTG9nSGFuZGxlciwgc2V0TG9nTGV2ZWwsIGdldExvZ0xldmVsLCBzZXRMb2dnZXIsIGxvZ2dlciB9IGZyb20gJy4vbG9nZ2VyJztcblxuLyoqIOa4oOmBk+WQjeensOWIsCBwcm92aWRlciDlrp7njrDnmoTmmKDlsITooaggKi9cbmNvbnN0IHByb3ZpZGVycyA9IHtcbiAgJ3RlbXBtYWlsJzogdGVtcG1haWwsXG4gICdsaW5zaGktZW1haWwnOiBsaW5zaGlFbWFpbCxcbiAgJ3RlbXBtYWlsLWxvbCc6IHRlbXBtYWlsTG9sLFxuICAnY2hhdGdwdC1vcmctdWsnOiBjaGF0Z3B0T3JnVWssXG4gICd0ZW1wbWFpbC1sYSc6IHRlbXBtYWlsTGEsXG4gICd0ZW1wLW1haWwtaW8nOiB0ZW1wTWFpbElPLFxuICAnYXdhbWFpbCc6IGF3YW1haWwsXG4gICdtYWlsLXRtJzogbWFpbFRtLFxuICAnZHJvcG1haWwnOiBkcm9wbWFpbCxcbiAgJ2d1ZXJyaWxsYW1haWwnOiBndWVycmlsbGFtYWlsLFxuICAnbWFpbGRyb3AnOiBtYWlsZHJvcFByb3ZpZGVyLFxufTtcblxuLyoqIOaJgOacieaUr+aMgeeahOa4oOmBk+WIl+ihqO+8jOeUqOS6jumaj+acuumAieaLqeWSjOmBjeWOhiAqL1xuY29uc3QgYWxsQ2hhbm5lbHM6IENoYW5uZWxbXSA9IFsndGVtcG1haWwnLCAnbGluc2hpLWVtYWlsJywgJ3RlbXBtYWlsLWxvbCcsICdjaGF0Z3B0LW9yZy11aycsICd0ZW1wbWFpbC1sYScsICd0ZW1wLW1haWwtaW8nLCAnYXdhbWFpbCcsICdtYWlsLXRtJywgJ2Ryb3BtYWlsJywgJ2d1ZXJyaWxsYW1haWwnLCAnbWFpbGRyb3AnXTtcblxuLyoqXG4gKiDmuKDpgZPkv6Hmga/vvIzljIXlkKvmuKDpgZPmoIfor4bjgIHmmL7npLrlkI3np7Dlkozlr7nlupTnvZHnq5lcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDaGFubmVsSW5mbyB7XG4gIC8qKiDmuKDpgZPmoIfor4YgKi9cbiAgY2hhbm5lbDogQ2hhbm5lbDtcbiAgLyoqIOa4oOmBk+aYvuekuuWQjeensCAqL1xuICBuYW1lOiBzdHJpbmc7XG4gIC8qKiDlr7nlupTnmoTkuLTml7bpgq7nrrHmnI3liqHnvZHnq5kgKi9cbiAgd2Vic2l0ZTogc3RyaW5nO1xufVxuXG4vKiog5rig6YGT5L+h5oGv5pig5bCE6KGoICovXG5jb25zdCBjaGFubmVsSW5mb01hcDogUmVjb3JkPENoYW5uZWwsIENoYW5uZWxJbmZvPiA9IHtcbiAgJ3RlbXBtYWlsJzogeyBjaGFubmVsOiAndGVtcG1haWwnLCBuYW1lOiAnVGVtcE1haWwnLCB3ZWJzaXRlOiAndGVtcG1haWwuaW5nJyB9LFxuICAnbGluc2hpLWVtYWlsJzogeyBjaGFubmVsOiAnbGluc2hpLWVtYWlsJywgbmFtZTogJ+S4tOaXtumCrueusScsIHdlYnNpdGU6ICdsaW5zaGktZW1haWwuY29tJyB9LFxuICAndGVtcG1haWwtbG9sJzogeyBjaGFubmVsOiAndGVtcG1haWwtbG9sJywgbmFtZTogJ1RlbXBNYWlsIExPTCcsIHdlYnNpdGU6ICd0ZW1wbWFpbC5sb2wnIH0sXG4gICdjaGF0Z3B0LW9yZy11ayc6IHsgY2hhbm5lbDogJ2NoYXRncHQtb3JnLXVrJywgbmFtZTogJ0NoYXRHUFQgTWFpbCcsIHdlYnNpdGU6ICdtYWlsLmNoYXRncHQub3JnLnVrJyB9LFxuICAndGVtcG1haWwtbGEnOiB7IGNoYW5uZWw6ICd0ZW1wbWFpbC1sYScsIG5hbWU6ICdUZW1wTWFpbCBMQScsIHdlYnNpdGU6ICd0ZW1wbWFpbC5sYScgfSxcbiAgJ3RlbXAtbWFpbC1pbyc6IHsgY2hhbm5lbDogJ3RlbXAtbWFpbC1pbycsIG5hbWU6ICdUZW1wIE1haWwgSU8nLCB3ZWJzaXRlOiAndGVtcC1tYWlsLmlvJyB9LFxuICAnYXdhbWFpbCc6IHsgY2hhbm5lbDogJ2F3YW1haWwnLCBuYW1lOiAnQXdhTWFpbCcsIHdlYnNpdGU6ICdhd2FtYWlsLmNvbScgfSxcbiAgJ21haWwtdG0nOiB7IGNoYW5uZWw6ICdtYWlsLXRtJywgbmFtZTogJ01haWwudG0nLCB3ZWJzaXRlOiAnbWFpbC50bScgfSxcbiAgJ2Ryb3BtYWlsJzogeyBjaGFubmVsOiAnZHJvcG1haWwnLCBuYW1lOiAnRHJvcE1haWwnLCB3ZWJzaXRlOiAnZHJvcG1haWwubWUnIH0sXG4gICdndWVycmlsbGFtYWlsJzogeyBjaGFubmVsOiAnZ3VlcnJpbGxhbWFpbCcsIG5hbWU6ICdHdWVycmlsbGEgTWFpbCcsIHdlYnNpdGU6ICdndWVycmlsbGFtYWlsLmNvbScgfSxcbiAgJ21haWxkcm9wJzogeyBjaGFubmVsOiAnbWFpbGRyb3AnLCBuYW1lOiAnTWFpbGRyb3AnLCB3ZWJzaXRlOiAnbWFpbGRyb3AuY2MnIH0sXG59O1xuXG4vKipcbiAqIOiOt+WPluaJgOacieaUr+aMgeeahOa4oOmBk+WIl+ihqFxuICpcbiAqIEByZXR1cm5zIOaJgOaciea4oOmBk+eahOS/oeaBr+aVsOe7hFxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3QgY2hhbm5lbHMgPSBsaXN0Q2hhbm5lbHMoKTtcbiAqIGNoYW5uZWxzLmZvckVhY2goY2ggPT4gY29uc29sZS5sb2coYCR7Y2gubmFtZX0gKCR7Y2gud2Vic2l0ZX0pYCkpO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsaXN0Q2hhbm5lbHMoKTogQ2hhbm5lbEluZm9bXSB7XG4gIHJldHVybiBhbGxDaGFubmVscy5tYXAoY2ggPT4gY2hhbm5lbEluZm9NYXBbY2hdKTtcbn1cblxuLyoqXG4gKiDojrflj5bmjIflrprmuKDpgZPnmoTor6bnu4bkv6Hmga9cbiAqXG4gKiBAcGFyYW0gY2hhbm5lbCAtIOa4oOmBk+agh+ivhlxuICogQHJldHVybnMg5rig6YGT5L+h5oGv77yM5LiN5a2Y5Zyo5pe26L+U5ZueIHVuZGVmaW5lZFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2hhbm5lbEluZm8oY2hhbm5lbDogQ2hhbm5lbCk6IENoYW5uZWxJbmZvIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIGNoYW5uZWxJbmZvTWFwW2NoYW5uZWxdO1xufVxuXG4vKipcbiAqIOWIm+W7uuS4tOaXtumCrueusVxuICpcbiAqIOmUmeivr+WkhOeQhuetlueVpe+8mlxuICogLSDnvZHnu5zplJnor6/jgIHotoXml7bjgIHmnI3liqHnq68gNXh4IOmUmeivryDihpIg6Ieq5Yqo6YeN6K+V77yI6buY6K6kIDIg5qyh77yM5oyH5pWw6YCA6YG/77yJXG4gKiAtIDR4eCDlrqLmiLfnq6/plJnor6/jgIHlj4LmlbDplJnor68g4oaSIOebtOaOpeaKm+WHuuW8guW4uFxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0g5Yib5bu66YCJ6aG577yM5Y+v5oyH5a6a5rig6YGT44CB5pyJ5pWI5pe26ZW/44CB5Z+f5ZCN562JXG4gKiBAcmV0dXJucyDpgq7nrrHkv6Hmga/vvIzljIXlkKvlnLDlnYDjgIHku6TniYznrYlcbiAqIEB0aHJvd3Mg6YeN6K+V6ICX5bC95ZCO5LuN5aSx6LSl5pe25oqb5Ye65byC5bi4XG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBjb25zdCBlbWFpbEluZm8gPSBhd2FpdCBnZW5lcmF0ZUVtYWlsKHsgY2hhbm5lbDogJ3RlbXAtbWFpbC1pbycgfSk7XG4gKiBjb25zb2xlLmxvZyhlbWFpbEluZm8uZW1haWwpOyAvLyDkuLTml7bpgq7nrrHlnLDlnYBcbiAqIGBgYFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVFbWFpbChvcHRpb25zOiBHZW5lcmF0ZUVtYWlsT3B0aW9ucyA9IHt9KTogUHJvbWlzZTxFbWFpbEluZm8+IHtcbiAgY29uc3QgY2hhbm5lbCA9IG9wdGlvbnMuY2hhbm5lbCB8fCBhbGxDaGFubmVsc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBhbGxDaGFubmVscy5sZW5ndGgpXTtcblxuICBsb2dnZXIuaW5mbyhg5Yib5bu65Li05pe26YKu566xLCDmuKDpgZM6ICR7Y2hhbm5lbH1gKTtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgd2l0aFJldHJ5KCgpID0+IGdlbmVyYXRlRW1haWxPbmNlKGNoYW5uZWwsIG9wdGlvbnMpLCBvcHRpb25zLnJldHJ5KTtcbiAgbG9nZ2VyLmluZm8oYOmCrueuseWIm+W7uuaIkOWKnzogJHtyZXN1bHQuZW1haWx9YCk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICog5Y2V5qyh5Yib5bu66YKu566x77yI5LiN5ZCr6YeN6K+V6YC76L6R77yJXG4gKiDmoLnmja7muKDpgZPnsbvlnovliIblj5HliLDlr7nlupTnmoQgcHJvdmlkZXIg5a6e546wXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlRW1haWxPbmNlKGNoYW5uZWw6IENoYW5uZWwsIG9wdGlvbnM6IEdlbmVyYXRlRW1haWxPcHRpb25zKTogUHJvbWlzZTxFbWFpbEluZm8+IHtcbiAgc3dpdGNoIChjaGFubmVsKSB7XG4gICAgY2FzZSAndGVtcG1haWwnOlxuICAgICAgcmV0dXJuIHRlbXBtYWlsLmdlbmVyYXRlRW1haWwob3B0aW9ucy5kdXJhdGlvbiB8fCAzMCk7XG4gICAgY2FzZSAnbGluc2hpLWVtYWlsJzpcbiAgICAgIHJldHVybiBsaW5zaGlFbWFpbC5nZW5lcmF0ZUVtYWlsKCk7XG4gICAgY2FzZSAndGVtcG1haWwtbG9sJzpcbiAgICAgIHJldHVybiB0ZW1wbWFpbExvbC5nZW5lcmF0ZUVtYWlsKG9wdGlvbnMuZG9tYWluIHx8IG51bGwpO1xuICAgIGNhc2UgJ2NoYXRncHQtb3JnLXVrJzpcbiAgICAgIHJldHVybiBjaGF0Z3B0T3JnVWsuZ2VuZXJhdGVFbWFpbCgpO1xuICAgIGNhc2UgJ3RlbXBtYWlsLWxhJzpcbiAgICAgIHJldHVybiB0ZW1wbWFpbExhLmdlbmVyYXRlRW1haWwoKTtcbiAgICBjYXNlICd0ZW1wLW1haWwtaW8nOlxuICAgICAgcmV0dXJuIHRlbXBNYWlsSU8uZ2VuZXJhdGVFbWFpbCgpO1xuICAgIGNhc2UgJ2F3YW1haWwnOlxuICAgICAgcmV0dXJuIGF3YW1haWwuZ2VuZXJhdGVFbWFpbCgpO1xuICAgIGNhc2UgJ21haWwtdG0nOlxuICAgICAgcmV0dXJuIG1haWxUbS5nZW5lcmF0ZUVtYWlsKCk7XG4gICAgY2FzZSAnZHJvcG1haWwnOlxuICAgICAgcmV0dXJuIGRyb3BtYWlsLmdlbmVyYXRlRW1haWwoKTtcbiAgICBjYXNlICdndWVycmlsbGFtYWlsJzpcbiAgICAgIHJldHVybiBndWVycmlsbGFtYWlsLmdlbmVyYXRlRW1haWwoKTtcbiAgICBjYXNlICdtYWlsZHJvcCc6XG4gICAgICByZXR1cm4gbWFpbGRyb3BQcm92aWRlci5nZW5lcmF0ZUVtYWlsKCk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBjaGFubmVsOiAke2NoYW5uZWx9YCk7XG4gIH1cbn1cblxuLyoqXG4gKiDojrflj5bpgq7ku7bliJfooahcbiAqXG4gKiDplJnor6/lpITnkIbnrZbnlaXvvJpcbiAqIC0g572R57uc6ZSZ6K+v44CB6LaF5pe244CB5pyN5Yqh56uvIDV4eCDplJnor68g4oaSIOiHquWKqOmHjeivle+8iOm7mOiupCAyIOasoe+8iVxuICogLSDph43or5XogJflsL3lkI7ov5Tlm54geyBzdWNjZXNzOiBmYWxzZSwgZW1haWxzOiBbXSB977yM5LiN5oqb5byC5bi4XG4gKiAtIOWPguaVsOagoemqjOmUmeivr++8iOe8uuWwkSBjaGFubmVsIC8gdG9rZW7vvInnm7TmjqXmipvlh7pcbiAqXG4gKiDov5nnp43orr7orqHorqnosIPnlKjmlrnlnKjova7or6LlnLrmma/kuIvkuI3kvJrlm6DnvZHnu5zms6LliqjogIzkuK3mlq3mlbTkuKrmtYHnqIvvvIxcbiAqIOWPqumcgOajgOafpSBzdWNjZXNzIOWtl+auteWNs+WPr+WIpOaWreacrOasoeivt+axguaYr+WQpuaIkOWKn+OAglxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0g6I635Y+W6YCJ6aG577yM5YyF5ZCr5rig6YGT44CB6YKu566x5Zyw5Z2A44CB5Luk54mMXG4gKiBAcmV0dXJucyDpgq7ku7bnu5PmnpzvvIzljIXlkKsgc3VjY2VzcyDmoIforrDlkozpgq7ku7bliJfooahcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGdldEVtYWlscyh7XG4gKiAgIGNoYW5uZWw6IGVtYWlsSW5mby5jaGFubmVsLFxuICogICBlbWFpbDogZW1haWxJbmZvLmVtYWlsLFxuICogICB0b2tlbjogZW1haWxJbmZvLnRva2VuLFxuICogfSk7XG4gKiBpZiAocmVzdWx0LnN1Y2Nlc3MgJiYgcmVzdWx0LmVtYWlscy5sZW5ndGggPiAwKSB7XG4gKiAgIGNvbnNvbGUubG9nKCfmlLbliLDpgq7ku7Y6JywgcmVzdWx0LmVtYWlsc1swXS5zdWJqZWN0KTtcbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0RW1haWxzKG9wdGlvbnM6IEdldEVtYWlsc09wdGlvbnMpOiBQcm9taXNlPEdldEVtYWlsc1Jlc3VsdD4ge1xuICBjb25zdCB7IGNoYW5uZWwsIGVtYWlsLCB0b2tlbiB9ID0gb3B0aW9ucztcblxuICBpZiAoIWNoYW5uZWwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NoYW5uZWwgaXMgcmVxdWlyZWQnKTtcbiAgfVxuICBpZiAoIWVtYWlsICYmIGNoYW5uZWwgIT09ICd0ZW1wbWFpbC1sb2wnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdFbWFpbCBpcyByZXF1aXJlZCcpO1xuICB9XG5cbiAgbG9nZ2VyLmRlYnVnKGDojrflj5bpgq7ku7YsIOa4oOmBkzogJHtjaGFubmVsfSwg6YKu566xOiAke2VtYWlsfWApO1xuICB0cnkge1xuICAgIGNvbnN0IGVtYWlscyA9IGF3YWl0IHdpdGhSZXRyeSgoKSA9PiBnZXRFbWFpbHNPbmNlKGNoYW5uZWwsIGVtYWlsLCB0b2tlbiksIG9wdGlvbnMucmV0cnkpO1xuICAgIGlmIChlbWFpbHMubGVuZ3RoID4gMCkge1xuICAgICAgbG9nZ2VyLmluZm8oYOiOt+WPluWIsCAke2VtYWlscy5sZW5ndGh9IOWwgemCruS7tiwg5rig6YGTOiAke2NoYW5uZWx9YCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZ2dlci5kZWJ1Zyhg5pqC5peg6YKu5Lu2LCDmuKDpgZM6ICR7Y2hhbm5lbH1gKTtcbiAgICB9XG4gICAgcmV0dXJuIHsgY2hhbm5lbCwgZW1haWwsIGVtYWlscywgc3VjY2VzczogdHJ1ZSB9O1xuICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgIC8qXG4gICAgICog6YeN6K+V6ICX5bC95ZCO5LuN54S25aSx6LSlIOKGkiDov5Tlm57nqbrnu5PmnpzogIzpnZ7mipvlvILluLhcbiAgICAgKiDov5nmoLfosIPnlKjmlrnlnKjova7or6LlnLrmma/kuIvkuI3kvJrlm6DkuLrkuIDmrKHnvZHnu5zms6LliqjogIzkuK3mlq3mlbTkuKrmtYHnqItcbiAgICAgKi9cbiAgICBsb2dnZXIuZXJyb3IoYOiOt+WPlumCruS7tuWksei0pSwg5rig6YGTOiAke2NoYW5uZWx9LCDplJnor686ICR7ZXJyLm1lc3NhZ2UgfHwgZXJyfWApO1xuICAgIHJldHVybiB7IGNoYW5uZWwsIGVtYWlsLCBlbWFpbHM6IFtdLCBzdWNjZXNzOiBmYWxzZSB9O1xuICB9XG59XG5cbi8qKlxuICog5Y2V5qyh6I635Y+W6YKu5Lu277yI5LiN5ZCr6YeN6K+V6YC76L6R77yJXG4gKiDmoLnmja7muKDpgZPnsbvlnovliIblj5HliLDlr7nlupTnmoQgcHJvdmlkZXIg5a6e546w77yM5bm25qCh6aqM5b+F6ZyA55qEIHRva2VuIOWPguaVsFxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRFbWFpbHNPbmNlKGNoYW5uZWw6IENoYW5uZWwsIGVtYWlsOiBzdHJpbmcsIHRva2VuPzogc3RyaW5nKTogUHJvbWlzZTxFbWFpbFtdPiB7XG4gIHN3aXRjaCAoY2hhbm5lbCkge1xuICAgIGNhc2UgJ3RlbXBtYWlsJzpcbiAgICAgIHJldHVybiB0ZW1wbWFpbC5nZXRFbWFpbHMoZW1haWwpO1xuICAgIGNhc2UgJ2xpbnNoaS1lbWFpbCc6XG4gICAgICByZXR1cm4gbGluc2hpRW1haWwuZ2V0RW1haWxzKGVtYWlsKTtcbiAgICBjYXNlICd0ZW1wbWFpbC1sb2wnOlxuICAgICAgaWYgKCF0b2tlbikgdGhyb3cgbmV3IEVycm9yKCdUb2tlbiBpcyByZXF1aXJlZCBmb3IgdGVtcG1haWwtbG9sIGNoYW5uZWwnKTtcbiAgICAgIHJldHVybiB0ZW1wbWFpbExvbC5nZXRFbWFpbHModG9rZW4sIGVtYWlsKTtcbiAgICBjYXNlICdjaGF0Z3B0LW9yZy11ayc6XG4gICAgICByZXR1cm4gY2hhdGdwdE9yZ1VrLmdldEVtYWlscyhlbWFpbCk7XG4gICAgY2FzZSAndGVtcG1haWwtbGEnOlxuICAgICAgcmV0dXJuIHRlbXBtYWlsTGEuZ2V0RW1haWxzKGVtYWlsKTtcbiAgICBjYXNlICd0ZW1wLW1haWwtaW8nOlxuICAgICAgcmV0dXJuIHRlbXBNYWlsSU8uZ2V0RW1haWxzKGVtYWlsKTtcbiAgICBjYXNlICdhd2FtYWlsJzpcbiAgICAgIGlmICghdG9rZW4pIHRocm93IG5ldyBFcnJvcignVG9rZW4gaXMgcmVxdWlyZWQgZm9yIGF3YW1haWwgY2hhbm5lbCcpO1xuICAgICAgcmV0dXJuIGF3YW1haWwuZ2V0RW1haWxzKHRva2VuLCBlbWFpbCk7XG4gICAgY2FzZSAnbWFpbC10bSc6XG4gICAgICBpZiAoIXRva2VuKSB0aHJvdyBuZXcgRXJyb3IoJ1Rva2VuIGlzIHJlcXVpcmVkIGZvciBtYWlsLXRtIGNoYW5uZWwnKTtcbiAgICAgIHJldHVybiBtYWlsVG0uZ2V0RW1haWxzKHRva2VuLCBlbWFpbCk7XG4gICAgY2FzZSAnZHJvcG1haWwnOlxuICAgICAgaWYgKCF0b2tlbikgdGhyb3cgbmV3IEVycm9yKCdUb2tlbiBpcyByZXF1aXJlZCBmb3IgZHJvcG1haWwgY2hhbm5lbCcpO1xuICAgICAgcmV0dXJuIGRyb3BtYWlsLmdldEVtYWlscyh0b2tlbiwgZW1haWwpO1xuICAgIGNhc2UgJ2d1ZXJyaWxsYW1haWwnOlxuICAgICAgaWYgKCF0b2tlbikgdGhyb3cgbmV3IEVycm9yKCdUb2tlbiBpcyByZXF1aXJlZCBmb3IgZ3VlcnJpbGxhbWFpbCBjaGFubmVsJyk7XG4gICAgICByZXR1cm4gZ3VlcnJpbGxhbWFpbC5nZXRFbWFpbHModG9rZW4sIGVtYWlsKTtcbiAgICBjYXNlICdtYWlsZHJvcCc6XG4gICAgICBpZiAoIXRva2VuKSB0aHJvdyBuZXcgRXJyb3IoJ1Rva2VuIGlzIHJlcXVpcmVkIGZvciBtYWlsZHJvcCBjaGFubmVsJyk7XG4gICAgICByZXR1cm4gbWFpbGRyb3BQcm92aWRlci5nZXRFbWFpbHModG9rZW4sIGVtYWlsKTtcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGNoYW5uZWw6ICR7Y2hhbm5lbH1gKTtcbiAgfVxufVxuXG4vKipcbiAqIOS4tOaXtumCrueuseWuouaIt+err1xuICog5bCB6KOF5LqG6YKu566x5Yib5bu65ZKM6YKu5Lu26I635Y+W55qE5a6M5pW05rWB56iL77yM6Ieq5Yqo566h55CG6YKu566x5L+h5oGv5ZKM6K6k6K+B5Luk54mMXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBjb25zdCBjbGllbnQgPSBuZXcgVGVtcEVtYWlsQ2xpZW50KCk7XG4gKiBjb25zdCBlbWFpbEluZm8gPSBhd2FpdCBjbGllbnQuZ2VuZXJhdGUoeyBjaGFubmVsOiAnbWFpbC10bScgfSk7XG4gKiBjb25zb2xlLmxvZygn6YKu566xOicsIGVtYWlsSW5mby5lbWFpbCk7XG4gKlxuICogLy8g6L2u6K+i6I635Y+W6YKu5Lu2XG4gKiBjb25zdCByZXN1bHQgPSBhd2FpdCBjbGllbnQuZ2V0RW1haWxzKCk7XG4gKiBpZiAocmVzdWx0LnN1Y2Nlc3MpIHtcbiAqICAgY29uc29sZS5sb2coJ+mCruS7tuaVsDonLCByZXN1bHQuZW1haWxzLmxlbmd0aCk7XG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIFRlbXBFbWFpbENsaWVudCB7XG4gIHByaXZhdGUgZW1haWxJbmZvOiBFbWFpbEluZm8gfCBudWxsID0gbnVsbDtcblxuICAvKipcbiAgICog5Yib5bu65Li05pe26YKu566x5bm257yT5a2Y6YKu566x5L+h5oGvXG4gICAqIOWQjue7reiwg+eUqCBnZXRFbWFpbHMoKSDml7boh6rliqjkvb/nlKjmraTpgq7nrrHnmoTmuKDpgZPjgIHlnLDlnYDlkozku6TniYxcbiAgICovXG4gIGFzeW5jIGdlbmVyYXRlKG9wdGlvbnM6IEdlbmVyYXRlRW1haWxPcHRpb25zID0ge30pOiBQcm9taXNlPEVtYWlsSW5mbz4ge1xuICAgIHRoaXMuZW1haWxJbmZvID0gYXdhaXQgZ2VuZXJhdGVFbWFpbChvcHRpb25zKTtcbiAgICByZXR1cm4gdGhpcy5lbWFpbEluZm87XG4gIH1cblxuICAvKipcbiAgICog6I635Y+W5b2T5YmN6YKu566x55qE6YKu5Lu25YiX6KGoXG4gICAqIOW/hemhu+WFiOiwg+eUqCBnZW5lcmF0ZSgpIOWIm+W7uumCrueusVxuICAgKlxuICAgKiBAdGhyb3dzIOacquiwg+eUqCBnZW5lcmF0ZSgpIOaXtuaKm+WHuuW8guW4uFxuICAgKi9cbiAgYXN5bmMgZ2V0RW1haWxzKCk6IFByb21pc2U8R2V0RW1haWxzUmVzdWx0PiB7XG4gICAgaWYgKCF0aGlzLmVtYWlsSW5mbykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBlbWFpbCBnZW5lcmF0ZWQuIENhbGwgZ2VuZXJhdGUoKSBmaXJzdC4nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZ2V0RW1haWxzKHtcbiAgICAgIGNoYW5uZWw6IHRoaXMuZW1haWxJbmZvLmNoYW5uZWwsXG4gICAgICBlbWFpbDogdGhpcy5lbWFpbEluZm8uZW1haWwsXG4gICAgICB0b2tlbjogdGhpcy5lbWFpbEluZm8udG9rZW4sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICog6I635Y+W5b2T5YmN57yT5a2Y55qE6YKu566x5L+h5oGvXG4gICAqIOacquiwg+eUqCBnZW5lcmF0ZSgpIOaXtui/lOWbniBudWxsXG4gICAqL1xuICBnZXRFbWFpbEluZm8oKTogRW1haWxJbmZvIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuZW1haWxJbmZvO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbGlzdENoYW5uZWxzLFxuICBnZXRDaGFubmVsSW5mbyxcbiAgZ2VuZXJhdGVFbWFpbCxcbiAgZ2V0RW1haWxzLFxuICBUZW1wRW1haWxDbGllbnQsXG59O1xuIl19
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Guerrilla Mail 渠道实现
3
+ * API 文档: https://www.guerrillamail.com/GuerrillaMailAPI.html
4
+ *
5
+ * 特点:
6
+ * - 无需认证,公开 JSON API
7
+ * - 通过 sid_token 维持会话
8
+ * - 邮箱有效期 60 分钟
9
+ */
10
+ import { EmailInfo, Email } from '../types';
11
+ /**
12
+ * 创建临时邮箱
13
+ * API: GET ajax.php?f=get_email_address
14
+ * 返回 email_addr + sid_token(用于后续获取邮件)
15
+ */
16
+ export declare function generateEmail(): Promise<EmailInfo>;
17
+ /**
18
+ * 获取邮件列表
19
+ * API: GET ajax.php?f=check_email&seq=0&sid_token=xxx
20
+ * 返回 list 数组,每个元素包含 mail_id, mail_from, mail_subject, mail_body 等
21
+ */
22
+ export declare function getEmails(token: string, email: string): Promise<Email[]>;
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+ /**
3
+ * Guerrilla Mail 渠道实现
4
+ * API 文档: https://www.guerrillamail.com/GuerrillaMailAPI.html
5
+ *
6
+ * 特点:
7
+ * - 无需认证,公开 JSON API
8
+ * - 通过 sid_token 维持会话
9
+ * - 邮箱有效期 60 分钟
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.generateEmail = generateEmail;
13
+ exports.getEmails = getEmails;
14
+ const normalize_1 = require("../normalize");
15
+ const CHANNEL = 'guerrillamail';
16
+ const BASE_URL = 'https://api.guerrillamail.com/ajax.php';
17
+ /**
18
+ * 创建临时邮箱
19
+ * API: GET ajax.php?f=get_email_address
20
+ * 返回 email_addr + sid_token(用于后续获取邮件)
21
+ */
22
+ async function generateEmail() {
23
+ const response = await fetch(`${BASE_URL}?f=get_email_address&lang=en`, {
24
+ method: 'GET',
25
+ headers: {
26
+ 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
27
+ },
28
+ });
29
+ if (!response.ok) {
30
+ throw new Error(`Failed to generate email: ${response.status}`);
31
+ }
32
+ const data = await response.json();
33
+ if (!data.email_addr || !data.sid_token) {
34
+ throw new Error('Failed to generate email: missing email_addr or sid_token');
35
+ }
36
+ return {
37
+ channel: CHANNEL,
38
+ email: data.email_addr,
39
+ token: data.sid_token,
40
+ expiresAt: data.email_timestamp ? (data.email_timestamp + 3600) * 1000 : undefined,
41
+ };
42
+ }
43
+ /**
44
+ * 获取邮件列表
45
+ * API: GET ajax.php?f=check_email&seq=0&sid_token=xxx
46
+ * 返回 list 数组,每个元素包含 mail_id, mail_from, mail_subject, mail_body 等
47
+ */
48
+ async function getEmails(token, email) {
49
+ const response = await fetch(`${BASE_URL}?f=check_email&seq=0&sid_token=${encodeURIComponent(token)}`, {
50
+ method: 'GET',
51
+ headers: {
52
+ 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
53
+ },
54
+ });
55
+ if (!response.ok) {
56
+ throw new Error(`Failed to get emails: ${response.status}`);
57
+ }
58
+ const data = await response.json();
59
+ const list = Array.isArray(data.list) ? data.list : [];
60
+ return list.map((item) => (0, normalize_1.normalizeEmail)({
61
+ id: item.mail_id,
62
+ from: item.mail_from,
63
+ to: email,
64
+ subject: item.mail_subject,
65
+ text: item.mail_body || item.mail_excerpt || '',
66
+ html: item.mail_body || '',
67
+ date: item.mail_date || '',
68
+ isRead: item.mail_read === 1,
69
+ }, email));
70
+ }
71
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3VlcnJpbGxhbWFpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcm92aWRlcnMvZ3VlcnJpbGxhbWFpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7O0dBUUc7O0FBYUgsc0NBd0JDO0FBT0QsOEJBeUJDO0FBbEVELDRDQUE4QztBQUU5QyxNQUFNLE9BQU8sR0FBWSxlQUFlLENBQUM7QUFDekMsTUFBTSxRQUFRLEdBQUcsd0NBQXdDLENBQUM7QUFFMUQ7Ozs7R0FJRztBQUNJLEtBQUssVUFBVSxhQUFhO0lBQ2pDLE1BQU0sUUFBUSxHQUFHLE1BQU0sS0FBSyxDQUFDLEdBQUcsUUFBUSw4QkFBOEIsRUFBRTtRQUN0RSxNQUFNLEVBQUUsS0FBSztRQUNiLE9BQU8sRUFBRTtZQUNQLFlBQVksRUFBRSw4REFBOEQ7U0FDN0U7S0FDRixDQUFDLENBQUM7SUFFSCxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQUMsNkJBQTZCLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFRCxNQUFNLElBQUksR0FBRyxNQUFNLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUVuQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUN4QyxNQUFNLElBQUksS0FBSyxDQUFDLDJEQUEyRCxDQUFDLENBQUM7SUFDL0UsQ0FBQztJQUVELE9BQU87UUFDTCxPQUFPLEVBQUUsT0FBTztRQUNoQixLQUFLLEVBQUUsSUFBSSxDQUFDLFVBQVU7UUFDdEIsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTO1FBQ3JCLFNBQVMsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTO0tBQ25GLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNJLEtBQUssVUFBVSxTQUFTLENBQUMsS0FBYSxFQUFFLEtBQWE7SUFDMUQsTUFBTSxRQUFRLEdBQUcsTUFBTSxLQUFLLENBQUMsR0FBRyxRQUFRLGtDQUFrQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFO1FBQ3JHLE1BQU0sRUFBRSxLQUFLO1FBQ2IsT0FBTyxFQUFFO1lBQ1AsWUFBWSxFQUFFLDhEQUE4RDtTQUM3RTtLQUNGLENBQUMsQ0FBQztJQUVILElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDakIsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVELE1BQU0sSUFBSSxHQUFHLE1BQU0sUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ25DLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFFdkQsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxJQUFBLDBCQUFjLEVBQUM7UUFDNUMsRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFPO1FBQ2hCLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUztRQUNwQixFQUFFLEVBQUUsS0FBSztRQUNULE9BQU8sRUFBRSxJQUFJLENBQUMsWUFBWTtRQUMxQixJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFJLEVBQUU7UUFDL0MsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLElBQUksRUFBRTtRQUMxQixJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsSUFBSSxFQUFFO1FBQzFCLE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUyxLQUFLLENBQUM7S0FDN0IsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ2IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR3VlcnJpbGxhIE1haWwg5rig6YGT5a6e546wXG4gKiBBUEkg5paH5qGjOiBodHRwczovL3d3dy5ndWVycmlsbGFtYWlsLmNvbS9HdWVycmlsbGFNYWlsQVBJLmh0bWxcbiAqIFxuICog54m554K5OlxuICogLSDml6DpnIDorqTor4HvvIzlhazlvIAgSlNPTiBBUElcbiAqIC0g6YCa6L+HIHNpZF90b2tlbiDnu7TmjIHkvJror51cbiAqIC0g6YKu566x5pyJ5pWI5pyfIDYwIOWIhumSn1xuICovXG5cbmltcG9ydCB7IEVtYWlsSW5mbywgRW1haWwsIENoYW5uZWwgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBub3JtYWxpemVFbWFpbCB9IGZyb20gJy4uL25vcm1hbGl6ZSc7XG5cbmNvbnN0IENIQU5ORUw6IENoYW5uZWwgPSAnZ3VlcnJpbGxhbWFpbCc7XG5jb25zdCBCQVNFX1VSTCA9ICdodHRwczovL2FwaS5ndWVycmlsbGFtYWlsLmNvbS9hamF4LnBocCc7XG5cbi8qKlxuICog5Yib5bu65Li05pe26YKu566xXG4gKiBBUEk6IEdFVCBhamF4LnBocD9mPWdldF9lbWFpbF9hZGRyZXNzXG4gKiDov5Tlm54gZW1haWxfYWRkciArIHNpZF90b2tlbu+8iOeUqOS6juWQjue7reiOt+WPlumCruS7tu+8iVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVFbWFpbCgpOiBQcm9taXNlPEVtYWlsSW5mbz4ge1xuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGAke0JBU0VfVVJMfT9mPWdldF9lbWFpbF9hZGRyZXNzJmxhbmc9ZW5gLCB7XG4gICAgbWV0aG9kOiAnR0VUJyxcbiAgICBoZWFkZXJzOiB7XG4gICAgICAnVXNlci1BZ2VudCc6ICdNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYnLFxuICAgIH0sXG4gIH0pO1xuXG4gIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBnZW5lcmF0ZSBlbWFpbDogJHtyZXNwb25zZS5zdGF0dXN9YCk7XG4gIH1cblxuICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuXG4gIGlmICghZGF0YS5lbWFpbF9hZGRyIHx8ICFkYXRhLnNpZF90b2tlbikge1xuICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIGdlbmVyYXRlIGVtYWlsOiBtaXNzaW5nIGVtYWlsX2FkZHIgb3Igc2lkX3Rva2VuJyk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGNoYW5uZWw6IENIQU5ORUwsXG4gICAgZW1haWw6IGRhdGEuZW1haWxfYWRkcixcbiAgICB0b2tlbjogZGF0YS5zaWRfdG9rZW4sXG4gICAgZXhwaXJlc0F0OiBkYXRhLmVtYWlsX3RpbWVzdGFtcCA/IChkYXRhLmVtYWlsX3RpbWVzdGFtcCArIDM2MDApICogMTAwMCA6IHVuZGVmaW5lZCxcbiAgfTtcbn1cblxuLyoqXG4gKiDojrflj5bpgq7ku7bliJfooahcbiAqIEFQSTogR0VUIGFqYXgucGhwP2Y9Y2hlY2tfZW1haWwmc2VxPTAmc2lkX3Rva2VuPXh4eFxuICog6L+U5ZueIGxpc3Qg5pWw57uE77yM5q+P5Liq5YWD57Sg5YyF5ZCrIG1haWxfaWQsIG1haWxfZnJvbSwgbWFpbF9zdWJqZWN0LCBtYWlsX2JvZHkg562JXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRFbWFpbHModG9rZW46IHN0cmluZywgZW1haWw6IHN0cmluZyk6IFByb21pc2U8RW1haWxbXT4ge1xuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGAke0JBU0VfVVJMfT9mPWNoZWNrX2VtYWlsJnNlcT0wJnNpZF90b2tlbj0ke2VuY29kZVVSSUNvbXBvbmVudCh0b2tlbil9YCwge1xuICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgaGVhZGVyczoge1xuICAgICAgJ1VzZXItQWdlbnQnOiAnTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2JyxcbiAgICB9LFxuICB9KTtcblxuICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gZ2V0IGVtYWlsczogJHtyZXNwb25zZS5zdGF0dXN9YCk7XG4gIH1cblxuICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICBjb25zdCBsaXN0ID0gQXJyYXkuaXNBcnJheShkYXRhLmxpc3QpID8gZGF0YS5saXN0IDogW107XG5cbiAgcmV0dXJuIGxpc3QubWFwKChpdGVtOiBhbnkpID0+IG5vcm1hbGl6ZUVtYWlsKHtcbiAgICBpZDogaXRlbS5tYWlsX2lkLFxuICAgIGZyb206IGl0ZW0ubWFpbF9mcm9tLFxuICAgIHRvOiBlbWFpbCxcbiAgICBzdWJqZWN0OiBpdGVtLm1haWxfc3ViamVjdCxcbiAgICB0ZXh0OiBpdGVtLm1haWxfYm9keSB8fCBpdGVtLm1haWxfZXhjZXJwdCB8fCAnJyxcbiAgICBodG1sOiBpdGVtLm1haWxfYm9keSB8fCAnJyxcbiAgICBkYXRlOiBpdGVtLm1haWxfZGF0ZSB8fCAnJyxcbiAgICBpc1JlYWQ6IGl0ZW0ubWFpbF9yZWFkID09PSAxLFxuICB9LCBlbWFpbCkpO1xufVxuIl19
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Maildrop 渠道实现
3
+ * API: GraphQL endpoint https://api.maildrop.cc/graphql
4
+ *
5
+ * 特点:
6
+ * - 无需认证,公开 GraphQL API
7
+ * - 自带反垃圾过滤
8
+ * - 邮箱名即用户名(任意字符串@maildrop.cc)
9
+ * - 无过期时间限制
10
+ */
11
+ import { EmailInfo, Email } from '../types';
12
+ /**
13
+ * 创建临时邮箱
14
+ * Maildrop 无需注册,任意用户名即可接收邮件
15
+ */
16
+ export declare function generateEmail(): Promise<EmailInfo>;
17
+ /**
18
+ * 获取邮件列表
19
+ * 先查 inbox 获取邮件 ID 列表,再逐封获取完整内容
20
+ */
21
+ export declare function getEmails(token: string, email: string): Promise<Email[]>;
@@ -0,0 +1,180 @@
1
+ "use strict";
2
+ /**
3
+ * Maildrop 渠道实现
4
+ * API: GraphQL endpoint https://api.maildrop.cc/graphql
5
+ *
6
+ * 特点:
7
+ * - 无需认证,公开 GraphQL API
8
+ * - 自带反垃圾过滤
9
+ * - 邮箱名即用户名(任意字符串@maildrop.cc)
10
+ * - 无过期时间限制
11
+ */
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.generateEmail = generateEmail;
14
+ exports.getEmails = getEmails;
15
+ const CHANNEL = 'maildrop';
16
+ const GRAPHQL_URL = 'https://api.maildrop.cc/graphql';
17
+ const DOMAIN = 'maildrop.cc';
18
+ /**
19
+ * 解码 RFC 2047 编码的邮件头(如发件人、主题)
20
+ * 支持 Base64 (B) 和 Quoted-Printable (Q) 编码
21
+ */
22
+ function decodeRfc2047(str) {
23
+ if (!str)
24
+ return '';
25
+ return str.replace(/=\?([^?]+)\?(B|Q)\?([^?]*)\?=/gi, (_, charset, encoding, encoded) => {
26
+ try {
27
+ if (encoding.toUpperCase() === 'B') {
28
+ return Buffer.from(encoded, 'base64').toString('utf-8');
29
+ }
30
+ /* Quoted-Printable: _=空格,=XX=十六进制字节 */
31
+ const decoded = encoded
32
+ .replace(/_/g, ' ')
33
+ .replace(/=([0-9A-Fa-f]{2})/g, (_m, hex) => String.fromCharCode(parseInt(hex, 16)));
34
+ return decoded;
35
+ }
36
+ catch {
37
+ return encoded;
38
+ }
39
+ });
40
+ }
41
+ /**
42
+ * 从原始 MIME 邮件源码中提取纯文本正文
43
+ * maildrop 的 data 字段返回完整 MIME 源码,需要解析出 text/plain 部分
44
+ */
45
+ function extractTextFromMime(raw) {
46
+ if (!raw)
47
+ return '';
48
+ /* 分离邮件头和正文(双换行分隔) */
49
+ const headerBodySplit = raw.indexOf('\r\n\r\n');
50
+ if (headerBodySplit === -1)
51
+ return raw;
52
+ const headers = raw.substring(0, headerBodySplit);
53
+ const body = raw.substring(headerBodySplit + 4);
54
+ /* 检查是否为 multipart 邮件 */
55
+ const boundaryMatch = headers.match(/boundary="?([^";\r\n]+)"?/i);
56
+ if (boundaryMatch) {
57
+ const boundary = boundaryMatch[1];
58
+ const parts = body.split('--' + boundary);
59
+ for (const part of parts) {
60
+ /* 查找 text/plain 部分 */
61
+ if (part.match(/Content-Type:\s*text\/plain/i)) {
62
+ const partHeaderEnd = part.indexOf('\r\n\r\n');
63
+ if (partHeaderEnd === -1)
64
+ continue;
65
+ const partHeaders = part.substring(0, partHeaderEnd);
66
+ let content = part.substring(partHeaderEnd + 4).replace(/\r\n$/, '').replace(/--$/, '').trim();
67
+ /* 处理 Content-Transfer-Encoding */
68
+ if (partHeaders.match(/Content-Transfer-Encoding:\s*base64/i)) {
69
+ try {
70
+ content = Buffer.from(content.replace(/\s/g, ''), 'base64').toString('utf-8');
71
+ }
72
+ catch { /* 解码失败则保留原文 */ }
73
+ }
74
+ else if (partHeaders.match(/Content-Transfer-Encoding:\s*quoted-printable/i)) {
75
+ content = content
76
+ .replace(/=\r?\n/g, '')
77
+ .replace(/=([0-9A-Fa-f]{2})/g, (_, hex) => String.fromCharCode(parseInt(hex, 16)));
78
+ }
79
+ return content.trim();
80
+ }
81
+ }
82
+ }
83
+ /* 非 multipart:检查整体编码 */
84
+ if (headers.match(/Content-Transfer-Encoding:\s*base64/i)) {
85
+ try {
86
+ return Buffer.from(body.replace(/\s/g, ''), 'base64').toString('utf-8').trim();
87
+ }
88
+ catch { /* 解码失败 */ }
89
+ }
90
+ return body.trim();
91
+ }
92
+ /**
93
+ * 生成随机用户名
94
+ */
95
+ function randomUsername(length = 10) {
96
+ const chars = 'abcdefghijklmnopqrstuvwxyz0123456789';
97
+ let result = '';
98
+ for (let i = 0; i < length; i++) {
99
+ result += chars.charAt(Math.floor(Math.random() * chars.length));
100
+ }
101
+ return result;
102
+ }
103
+ /**
104
+ * 发送 GraphQL 请求
105
+ * 使用 operationName + variables 的标准 GraphQL 格式
106
+ */
107
+ async function graphqlRequest(operationName, query, variables = {}) {
108
+ const response = await fetch(GRAPHQL_URL, {
109
+ method: 'POST',
110
+ headers: {
111
+ 'Content-Type': 'application/json',
112
+ 'Origin': 'https://maildrop.cc',
113
+ 'Referer': 'https://maildrop.cc/',
114
+ 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
115
+ },
116
+ body: JSON.stringify({ operationName, variables, query }),
117
+ });
118
+ if (!response.ok) {
119
+ throw new Error(`Maildrop GraphQL request failed: ${response.status}`);
120
+ }
121
+ const data = await response.json();
122
+ if (data.errors && data.errors.length > 0) {
123
+ throw new Error(`Maildrop GraphQL error: ${data.errors[0].message}`);
124
+ }
125
+ return data.data;
126
+ }
127
+ /**
128
+ * 创建临时邮箱
129
+ * Maildrop 无需注册,任意用户名即可接收邮件
130
+ */
131
+ async function generateEmail() {
132
+ const username = randomUsername();
133
+ const email = `${username}@${DOMAIN}`;
134
+ /* 验证邮箱可用:查询一次 inbox 确认 API 正常 */
135
+ await graphqlRequest('GetInbox', 'query GetInbox($mailbox: String!) { inbox(mailbox: $mailbox) { id } }', { mailbox: username });
136
+ return {
137
+ channel: CHANNEL,
138
+ email,
139
+ token: username,
140
+ };
141
+ }
142
+ /**
143
+ * 获取邮件列表
144
+ * 先查 inbox 获取邮件 ID 列表,再逐封获取完整内容
145
+ */
146
+ async function getEmails(token, email) {
147
+ const mailbox = token || email.split('@')[0];
148
+ /* 查询收件箱列表 */
149
+ const inboxData = await graphqlRequest('GetInbox', 'query GetInbox($mailbox: String!) { inbox(mailbox: $mailbox) { id headerfrom subject date } }', { mailbox });
150
+ const inbox = inboxData?.inbox;
151
+ if (!Array.isArray(inbox) || inbox.length === 0) {
152
+ return [];
153
+ }
154
+ /* 逐封获取完整邮件内容 */
155
+ const emails = [];
156
+ for (const item of inbox) {
157
+ try {
158
+ const msgData = await graphqlRequest('GetMessage', 'query GetMessage($mailbox: String!, $id: String!) { message(mailbox: $mailbox, id: $id) { id headerfrom subject date data html } }', { mailbox, id: item.id });
159
+ const msg = msgData?.message;
160
+ if (msg) {
161
+ emails.push({
162
+ id: msg.id || item.id,
163
+ from: decodeRfc2047(msg.headerfrom || item.headerfrom || ''),
164
+ to: email,
165
+ subject: decodeRfc2047(msg.subject || item.subject || ''),
166
+ text: extractTextFromMime(msg.data || ''),
167
+ html: msg.html || '',
168
+ date: msg.date || item.date || '',
169
+ isRead: false,
170
+ attachments: [],
171
+ });
172
+ }
173
+ }
174
+ catch {
175
+ /* 单封邮件获取失败不影响整体 */
176
+ }
177
+ }
178
+ return emails;
179
+ }
180
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbGRyb3AuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHJvdmlkZXJzL21haWxkcm9wLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7O0dBU0c7O0FBcUlILHNDQWdCQztBQU1ELDhCQTZDQztBQXBNRCxNQUFNLE9BQU8sR0FBWSxVQUFVLENBQUM7QUFDcEMsTUFBTSxXQUFXLEdBQUcsaUNBQWlDLENBQUM7QUFDdEQsTUFBTSxNQUFNLEdBQUcsYUFBYSxDQUFDO0FBRTdCOzs7R0FHRztBQUNILFNBQVMsYUFBYSxDQUFDLEdBQVc7SUFDaEMsSUFBSSxDQUFDLEdBQUc7UUFBRSxPQUFPLEVBQUUsQ0FBQztJQUNwQixPQUFPLEdBQUcsQ0FBQyxPQUFPLENBQUMsaUNBQWlDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsRUFBRTtRQUN0RixJQUFJLENBQUM7WUFDSCxJQUFJLFFBQVEsQ0FBQyxXQUFXLEVBQUUsS0FBSyxHQUFHLEVBQUUsQ0FBQztnQkFDbkMsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDMUQsQ0FBQztZQUNELHVDQUF1QztZQUN2QyxNQUFNLE9BQU8sR0FBRyxPQUFPO2lCQUNwQixPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQztpQkFDbEIsT0FBTyxDQUFDLG9CQUFvQixFQUFFLENBQUMsRUFBVSxFQUFFLEdBQVcsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN0RyxPQUFPLE9BQU8sQ0FBQztRQUNqQixDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1AsT0FBTyxPQUFPLENBQUM7UUFDakIsQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FB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gZPlrp7njrBcbiAqIEFQSTogR3JhcGhRTCBlbmRwb2ludCBodHRwczovL2FwaS5tYWlsZHJvcC5jYy9ncmFwaHFsXG4gKiBcbiAqIOeJueeCuTpcbiAqIC0g5peg6ZyA6K6k6K+B77yM5YWs5byAIEdyYXBoUUwgQVBJXG4gKiAtIOiHquW4puWPjeWeg+Wcvui/h+a7pFxuICogLSDpgq7nrrHlkI3ljbPnlKjmiLflkI3vvIjku7vmhI/lrZfnrKbkuLJAbWFpbGRyb3AuY2PvvIlcbiAqIC0g5peg6L+H5pyf5pe26Ze06ZmQ5Yi2XG4gKi9cblxuaW1wb3J0IHsgRW1haWxJbmZvLCBFbWFpbCwgQ2hhbm5lbCB9IGZyb20gJy4uL3R5cGVzJztcblxuY29uc3QgQ0hBTk5FTDogQ2hhbm5lbCA9ICdtYWlsZHJvcCc7XG5jb25zdCBHUkFQSFFMX1VSTCA9ICdodHRwczovL2FwaS5tYWlsZHJvcC5jYy9ncmFwaHFsJztcbmNvbnN0IERPTUFJTiA9ICdtYWlsZHJvcC5jYyc7XG5cbi8qKlxuICog6Kej56CBIFJGQyAyMDQ3IOe8lueggeeahOmCruS7tuWktO+8iOWmguWPkeS7tuS6uuOAgeS4u+mimO+8iVxuICog5pSv5oyBIEJhc2U2NCAoQikg5ZKMIFF1b3RlZC1QcmludGFibGUgKFEpIOe8lueggVxuICovXG5mdW5jdGlvbiBkZWNvZGVSZmMyMDQ3KHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKCFzdHIpIHJldHVybiAnJztcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKC89XFw/KFteP10rKVxcPyhCfFEpXFw/KFteP10qKVxcPz0vZ2ksIChfLCBjaGFyc2V0LCBlbmNvZGluZywgZW5jb2RlZCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBpZiAoZW5jb2RpbmcudG9VcHBlckNhc2UoKSA9PT0gJ0InKSB7XG4gICAgICAgIHJldHVybiBCdWZmZXIuZnJvbShlbmNvZGVkLCAnYmFzZTY0JykudG9TdHJpbmcoJ3V0Zi04Jyk7XG4gICAgICB9XG4gICAgICAvKiBRdW90ZWQtUHJpbnRhYmxlOiBfPeepuuagvO+8jD1YWD3ljYHlha3ov5vliLblrZfoioIgKi9cbiAgICAgIGNvbnN0IGRlY29kZWQgPSBlbmNvZGVkXG4gICAgICAgIC5yZXBsYWNlKC9fL2csICcgJylcbiAgICAgICAgLnJlcGxhY2UoLz0oWzAtOUEtRmEtZl17Mn0pL2csIChfbTogc3RyaW5nLCBoZXg6IHN0cmluZykgPT4gU3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChoZXgsIDE2KSkpO1xuICAgICAgcmV0dXJuIGRlY29kZWQ7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gZW5jb2RlZDtcbiAgICB9XG4gIH0pO1xufVxuXG4vKipcbiAqIOS7juWOn+WniyBNSU1FIOmCruS7tua6kOeggeS4reaPkOWPlue6r+aWh+acrOato+aWh1xuICogbWFpbGRyb3Ag55qEIGRhdGEg5a2X5q616L+U5Zue5a6M5pW0IE1JTUUg5rqQ56CB77yM6ZyA6KaB6Kej5p6Q5Ye6IHRleHQvcGxhaW4g6YOo5YiGXG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RUZXh0RnJvbU1pbWUocmF3OiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAoIXJhdykgcmV0dXJuICcnO1xuXG4gIC8qIOWIhuemu+mCruS7tuWktOWSjOato+aWh++8iOWPjOaNouihjOWIhumalO+8iSAqL1xuICBjb25zdCBoZWFkZXJCb2R5U3BsaXQgPSByYXcuaW5kZXhPZignXFxyXFxuXFxyXFxuJyk7XG4gIGlmIChoZWFkZXJCb2R5U3BsaXQgPT09IC0xKSByZXR1cm4gcmF3O1xuXG4gIGNvbnN0IGhlYWRlcnMgPSByYXcuc3Vic3RyaW5nKDAsIGhlYWRlckJvZHlTcGxpdCk7XG4gIGNvbnN0IGJvZHkgPSByYXcuc3Vic3RyaW5nKGhlYWRlckJvZHlTcGxpdCArIDQpO1xuXG4gIC8qIOajgOafpeaYr+WQpuS4uiBtdWx0aXBhcnQg6YKu5Lu2ICovXG4gIGNvbnN0IGJvdW5kYXJ5TWF0Y2ggPSBoZWFkZXJzLm1hdGNoKC9ib3VuZGFyeT1cIj8oW15cIjtcXHJcXG5dKylcIj8vaSk7XG4gIGlmIChib3VuZGFyeU1hdGNoKSB7XG4gICAgY29uc3QgYm91bmRhcnkgPSBib3VuZGFyeU1hdGNoWzFdO1xuICAgIGNvbnN0IHBhcnRzID0gYm9keS5zcGxpdCgnLS0nICsgYm91bmRhcnkpO1xuXG4gICAgZm9yIChjb25zdCBwYXJ0IG9mIHBhcnRzKSB7XG4gICAgICAvKiDmn6Xmib4gdGV4dC9wbGFpbiDpg6jliIYgKi9cbiAgICAgIGlmIChwYXJ0Lm1hdGNoKC9Db250ZW50LVR5cGU6XFxzKnRleHRcXC9wbGFpbi9pKSkge1xuICAgICAgICBjb25zdCBwYXJ0SGVhZGVyRW5kID0gcGFydC5pbmRleE9mKCdcXHJcXG5cXHJcXG4nKTtcbiAgICAgICAgaWYgKHBhcnRIZWFkZXJFbmQgPT09IC0xKSBjb250aW51ZTtcblxuICAgICAgICBjb25zdCBwYXJ0SGVhZGVycyA9IHBhcnQuc3Vic3RyaW5nKDAsIHBhcnRIZWFkZXJFbmQpO1xuICAgICAgICBsZXQgY29udGVudCA9IHBhcnQuc3Vic3RyaW5nKHBhcnRIZWFkZXJFbmQgKyA0KS5yZXBsYWNlKC9cXHJcXG4kLywgJycpLnJlcGxhY2UoLy0tJC8sICcnKS50cmltKCk7XG5cbiAgICAgICAgLyog5aSE55CGIENvbnRlbnQtVHJhbnNmZXItRW5jb2RpbmcgKi9cbiAgICAgICAgaWYgKHBhcnRIZWFkZXJzLm1hdGNoKC9Db250ZW50LVRyYW5zZmVyLUVuY29kaW5nOlxccypiYXNlNjQvaSkpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29udGVudCA9IEJ1ZmZlci5mcm9tKGNvbnRlbnQucmVwbGFjZSgvXFxzL2csICcnKSwgJ2Jhc2U2NCcpLnRvU3RyaW5nKCd1dGYtOCcpO1xuICAgICAgICAgIH0gY2F0Y2ggeyAvKiDop6PnoIHlpLHotKXliJnkv53nlZnljp/mlocgKi8gfVxuICAgICAgICB9IGVsc2UgaWYgKHBhcnRIZWFkZXJzLm1hdGNoKC9Db250ZW50LVRyYW5zZmVyLUVuY29kaW5nOlxccypxdW90ZWQtcHJpbnRhYmxlL2kpKSB7XG4gICAgICAgICAgY29udGVudCA9IGNvbnRlbnRcbiAgICAgICAgICAgIC5yZXBsYWNlKC89XFxyP1xcbi9nLCAnJylcbiAgICAgICAgICAgIC5yZXBsYWNlKC89KFswLTlBLUZhLWZdezJ9KS9nLCAoXywgaGV4OiBzdHJpbmcpID0+IFN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQoaGV4LCAxNikpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb250ZW50LnRyaW0oKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKiDpnZ4gbXVsdGlwYXJ077ya5qOA5p+l5pW05L2T57yW56CBICovXG4gIGlmIChoZWFkZXJzLm1hdGNoKC9Db250ZW50LVRyYW5zZmVyLUVuY29kaW5nOlxccypiYXNlNjQvaSkpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKGJvZHkucmVwbGFjZSgvXFxzL2csICcnKSwgJ2Jhc2U2NCcpLnRvU3RyaW5nKCd1dGYtOCcpLnRyaW0oKTtcbiAgICB9IGNhdGNoIHsgLyog6Kej56CB5aSx6LSlICovIH1cbiAgfVxuXG4gIHJldHVybiBib2R5LnRyaW0oKTtcbn1cblxuLyoqXG4gKiDnlJ/miJDpmo/mnLrnlKjmiLflkI1cbiAqL1xuZnVuY3Rpb24gcmFuZG9tVXNlcm5hbWUobGVuZ3RoOiBudW1iZXIgPSAxMCk6IHN0cmluZyB7XG4gIGNvbnN0IGNoYXJzID0gJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSc7XG4gIGxldCByZXN1bHQgPSAnJztcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgIHJlc3VsdCArPSBjaGFycy5jaGFyQXQoTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogY2hhcnMubGVuZ3RoKSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiDlj5HpgIEgR3JhcGhRTCDor7fmsYJcbiAqIOS9v+eUqCBvcGVyYXRpb25OYW1lICsgdmFyaWFibGVzIOeahOagh+WHhiBHcmFwaFFMIOagvOW8j1xuICovXG5hc3luYyBmdW5jdGlvbiBncmFwaHFsUmVxdWVzdChcbiAgb3BlcmF0aW9uTmFtZTogc3RyaW5nLFxuICBxdWVyeTogc3RyaW5nLFxuICB2YXJpYWJsZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fSxcbik6IFByb21pc2U8YW55PiB7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goR1JBUEhRTF9VUkwsIHtcbiAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICBoZWFkZXJzOiB7XG4gICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgJ09yaWdpbic6ICdodHRwczovL21haWxkcm9wLmNjJyxcbiAgICAgICdSZWZlcmVyJzogJ2h0dHBzOi8vbWFpbGRyb3AuY2MvJyxcbiAgICAgICdVc2VyLUFnZW50JzogJ01vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjA7IFdpbjY0OyB4NjQpIEFwcGxlV2ViS2l0LzUzNy4zNicsXG4gICAgfSxcbiAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IG9wZXJhdGlvbk5hbWUsIHZhcmlhYmxlcywgcXVlcnkgfSksXG4gIH0pO1xuXG4gIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE1haWxkcm9wIEdyYXBoUUwgcmVxdWVzdCBmYWlsZWQ6ICR7cmVzcG9uc2Uuc3RhdHVzfWApO1xuICB9XG5cbiAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcbiAgaWYgKGRhdGEuZXJyb3JzICYmIGRhdGEuZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE1haWxkcm9wIEdyYXBoUUwgZXJyb3I6ICR7ZGF0YS5lcnJvcnNbMF0ubWVzc2FnZX1gKTtcbiAgfVxuXG4gIHJldHVybiBkYXRhLmRhdGE7XG59XG5cbi8qKlxuICog5Yib5bu65Li05pe26YKu566xXG4gKiBNYWlsZHJvcCDml6DpnIDms6jlhozvvIzku7vmhI/nlKjmiLflkI3ljbPlj6/mjqXmlLbpgq7ku7ZcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlRW1haWwoKTogUHJvbWlzZTxFbWFpbEluZm8+IHtcbiAgY29uc3QgdXNlcm5hbWUgPSByYW5kb21Vc2VybmFtZSgpO1xuICBjb25zdCBlbWFpbCA9IGAke3VzZXJuYW1lfUAke0RPTUFJTn1gO1xuXG4gIC8qIOmqjOivgemCrueuseWPr+eUqO+8muafpeivouS4gOasoSBpbmJveCDnoa7orqQgQVBJIOato+W4uCAqL1xuICBhd2FpdCBncmFwaHFsUmVxdWVzdChcbiAgICAnR2V0SW5ib3gnLFxuICAgICdxdWVyeSBHZXRJbmJveCgkbWFpbGJveDogU3RyaW5nISkgeyBpbmJveChtYWlsYm94OiAkbWFpbGJveCkgeyBpZCB9IH0nLFxuICAgIHsgbWFpbGJveDogdXNlcm5hbWUgfSxcbiAgKTtcblxuICByZXR1cm4ge1xuICAgIGNoYW5uZWw6IENIQU5ORUwsXG4gICAgZW1haWwsXG4gICAgdG9rZW46IHVzZXJuYW1lLFxuICB9O1xufVxuXG4vKipcbiAqIOiOt+WPlumCruS7tuWIl+ihqFxuICog5YWI5p+lIGluYm94IOiOt+WPlumCruS7tiBJRCDliJfooajvvIzlho3pgJDlsIHojrflj5blrozmlbTlhoXlrrlcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEVtYWlscyh0b2tlbjogc3RyaW5nLCBlbWFpbDogc3RyaW5nKTogUHJvbWlzZTxFbWFpbFtdPiB7XG4gIGNvbnN0IG1haWxib3ggPSB0b2tlbiB8fCBlbWFpbC5zcGxpdCgnQCcpWzBdO1xuXG4gIC8qIOafpeivouaUtuS7tueuseWIl+ihqCAqL1xuICBjb25zdCBpbmJveERhdGEgPSBhd2FpdCBncmFwaHFsUmVxdWVzdChcbiAgICAnR2V0SW5ib3gnLFxuICAgICdxdWVyeSBHZXRJbmJveCgkbWFpbGJveDogU3RyaW5nISkgeyBpbmJveChtYWlsYm94OiAkbWFpbGJveCkgeyBpZCBoZWFkZXJmcm9tIHN1YmplY3QgZGF0ZSB9IH0nLFxuICAgIHsgbWFpbGJveCB9LFxuICApO1xuXG4gIGNvbnN0IGluYm94ID0gaW5ib3hEYXRhPy5pbmJveDtcbiAgaWYgKCFBcnJheS5pc0FycmF5KGluYm94KSB8fCBpbmJveC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICAvKiDpgJDlsIHojrflj5blrozmlbTpgq7ku7blhoXlrrkgKi9cbiAgY29uc3QgZW1haWxzOiBFbWFpbFtdID0gW107XG4gIGZvciAoY29uc3QgaXRlbSBvZiBpbmJveCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBtc2dEYXRhID0gYXdhaXQgZ3JhcGhxbFJlcXVlc3QoXG4gICAgICAgICdHZXRNZXNzYWdlJyxcbiAgICAgICAgJ3F1ZXJ5IEdldE1lc3NhZ2UoJG1haWxib3g6IFN0cmluZyEsICRpZDogU3RyaW5nISkgeyBtZXNzYWdlKG1haWxib3g6ICRtYWlsYm94LCBpZDogJGlkKSB7IGlkIGhlYWRlcmZyb20gc3ViamVjdCBkYXRlIGRhdGEgaHRtbCB9IH0nLFxuICAgICAgICB7IG1haWxib3gsIGlkOiBpdGVtLmlkIH0sXG4gICAgICApO1xuXG4gICAgICBjb25zdCBtc2cgPSBtc2dEYXRhPy5tZXNzYWdlO1xuICAgICAgaWYgKG1zZykge1xuICAgICAgICBlbWFpbHMucHVzaCh7XG4gICAgICAgICAgaWQ6IG1zZy5pZCB8fCBpdGVtLmlkLFxuICAgICAgICAgIGZyb206IGRlY29kZVJmYzIwNDcobXNnLmhlYWRlcmZyb20gfHwgaXRlbS5oZWFkZXJmcm9tIHx8ICcnKSxcbiAgICAgICAgICB0bzogZW1haWwsXG4gICAgICAgICAgc3ViamVjdDogZGVjb2RlUmZjMjA0Nyhtc2cuc3ViamVjdCB8fCBpdGVtLnN1YmplY3QgfHwgJycpLFxuICAgICAgICAgIHRleHQ6IGV4dHJhY3RUZXh0RnJvbU1pbWUobXNnLmRhdGEgfHwgJycpLFxuICAgICAgICAgIGh0bWw6IG1zZy5odG1sIHx8ICcnLFxuICAgICAgICAgIGRhdGU6IG1zZy5kYXRlIHx8IGl0ZW0uZGF0ZSB8fCAnJyxcbiAgICAgICAgICBpc1JlYWQ6IGZhbHNlLFxuICAgICAgICAgIGF0dGFjaG1lbnRzOiBbXSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICAvKiDljZXlsIHpgq7ku7bojrflj5blpLHotKXkuI3lvbHlk43mlbTkvZMgKi9cbiAgICB9XG4gIH1cblxuICByZXR1cm4gZW1haWxzO1xufVxuIl19
package/dist/types.d.ts CHANGED
@@ -2,7 +2,7 @@
2
2
  * 支持的临时邮箱渠道标识
3
3
  * 每个渠道对应一个第三方临时邮箱服务商
4
4
  */
5
- export type Channel = 'tempmail' | 'linshi-email' | 'tempmail-lol' | 'chatgpt-org-uk' | 'tempmail-la' | 'temp-mail-io' | 'awamail' | 'mail-tm' | 'dropmail';
5
+ export type Channel = 'tempmail' | 'linshi-email' | 'tempmail-lol' | 'chatgpt-org-uk' | 'tempmail-la' | 'temp-mail-io' | 'awamail' | 'mail-tm' | 'dropmail' | 'guerrillamail' | 'maildrop';
6
6
  /**
7
7
  * 创建临时邮箱后返回的邮箱信息
8
8
  * 包含邮箱地址、认证令牌和生命周期信息
package/dist/types.js CHANGED
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICog5pSv5oyB55qE5Li05pe26YKu566x5rig6YGT5qCH6K+GXG4gKiDmr4/kuKrmuKDpgZPlr7nlupTkuIDkuKrnrKzkuInmlrnkuLTml7bpgq7nrrHmnI3liqHllYZcbiAqL1xuZXhwb3J0IHR5cGUgQ2hhbm5lbCA9ICd0ZW1wbWFpbCcgfCAnbGluc2hpLWVtYWlsJyB8ICd0ZW1wbWFpbC1sb2wnIHwgJ2NoYXRncHQtb3JnLXVrJyB8ICd0ZW1wbWFpbC1sYScgfCAndGVtcC1tYWlsLWlvJyB8ICdhd2FtYWlsJyB8ICdtYWlsLXRtJyB8ICdkcm9wbWFpbCc7XG5cbi8qKlxuICog5Yib5bu65Li05pe26YKu566x5ZCO6L+U5Zue55qE6YKu566x5L+h5oGvXG4gKiDljIXlkKvpgq7nrrHlnLDlnYDjgIHorqTor4Hku6TniYzlkoznlJ/lkb3lkajmnJ/kv6Hmga9cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbWFpbEluZm8ge1xuICAvKiog5Yib5bu66K+l6YKu566x5omA5L2/55So55qE5rig6YGTICovXG4gIGNoYW5uZWw6IENoYW5uZWw7XG4gIC8qKiDkuLTml7bpgq7nrrHlnLDlnYAgKi9cbiAgZW1haWw6IHN0cmluZztcbiAgLyoqIOiupOivgeS7pOeJjO+8jOmDqOWIhua4oOmBk+WcqOiOt+WPlumCruS7tuaXtumcgOimgeatpOS7pOeJjCAqL1xuICB0b2tlbj86IHN0cmluZztcbiAgLyoqIOmCrueusei/h+acn+aXtumXtO+8iElTTyA4NjAxIOWtl+espuS4suaIliBVbml4IOaXtumXtOaIs++8iSAqL1xuICBleHBpcmVzQXQ/OiBzdHJpbmcgfCBudW1iZXI7XG4gIC8qKiDpgq7nrrHliJvlu7rml7bpl7TvvIhJU08gODYwMSDlrZfnrKbkuLLvvIkgKi9cbiAgY3JlYXRlZEF0Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIOagh+WHhuWMlumCruS7tumZhOS7tlxuICog5LiN5ZCM5rig6YGT55qE6ZmE5Lu25a2X5q615ZCN5LiN5ZCM77yMU0RLIOe7n+S4gOW9kuS4gOWMluS4uuatpOe7k+aehFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVtYWlsQXR0YWNobWVudCB7XG4gIC8qKiDpmYTku7bmlofku7blkI0gKi9cbiAgZmlsZW5hbWU6IHN0cmluZztcbiAgLyoqIOmZhOS7tuWkp+Wwj++8iOWtl+iKgu+8iSAqL1xuICBzaXplPzogbnVtYmVyO1xuICAvKiogTUlNRSDnsbvlnovvvIzlpoIgYXBwbGljYXRpb24vcGRmICovXG4gIGNvbnRlbnRUeXBlPzogc3RyaW5nO1xuICAvKiog6ZmE5Lu25LiL6L295Zyw5Z2AICovXG4gIHVybD86IHN0cmluZztcbn1cblxuLyoqXG4gKiDmoIflh4bljJbpgq7ku7bmoLzlvI8gLSDmiYDmnInmj5DkvpvllYbov5Tlm57nu5/kuIDnu5PmnoRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbWFpbCB7XG4gIC8qKiDpgq7ku7bllK/kuIDmoIfor4YgKi9cbiAgaWQ6IHN0cmluZztcbiAgLyoqIOWPkeS7tuS6uumCrueuseWcsOWdgCAqL1xuICBmcm9tOiBzdHJpbmc7XG4gIC8qKiDmlLbku7bkurrpgq7nrrHlnLDlnYAgKi9cbiAgdG86IHN0cmluZztcbiAgLyoqIOmCruS7tuS4u+mimCAqL1xuICBzdWJqZWN0OiBzdHJpbmc7XG4gIC8qKiDnuq/mlofmnKzlhoXlrrkgKi9cbiAgdGV4dDogc3RyaW5nO1xuICAvKiogSFRNTCDlhoXlrrkgKi9cbiAgaHRtbDogc3RyaW5nO1xuICAvKiogSVNPIDg2MDEg5qC85byP55qE5pel5pyf5a2X56ym5LiyICovXG4gIGRhdGU6IHN0cmluZztcbiAgLyoqIOaYr+WQpuW3suivuyAqL1xuICBpc1JlYWQ6IGJvb2xlYW47XG4gIC8qKiDpmYTku7bliJfooaggKi9cbiAgYXR0YWNobWVudHM6IEVtYWlsQXR0YWNobWVudFtdO1xufVxuXG4vKipcbiAqIOiOt+WPlumCruS7tuWIl+ihqOeahOi/lOWbnue7k+aenFxuICogc3VjY2VzcyDkuLogZmFsc2Ug5pe26KGo56S66K+35rGC5aSx6LSl77yI6YeN6K+V6ICX5bC977yJ77yMZW1haWxzIOS4uuepuuaVsOe7hFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdldEVtYWlsc1Jlc3VsdCB7XG4gIC8qKiDmiYDkvb/nlKjnmoTmuKDpgZMgKi9cbiAgY2hhbm5lbDogQ2hhbm5lbDtcbiAgLyoqIOafpeivoueahOmCrueuseWcsOWdgCAqL1xuICBlbWFpbDogc3RyaW5nO1xuICAvKiog6YKu5Lu25YiX6KGo77yM5aSx6LSl5pe25Li656m65pWw57uEICovXG4gIGVtYWlsczogRW1haWxbXTtcbiAgLyoqIOivt+axguaYr+WQpuaIkOWKn++8jGZhbHNlIOihqOekuumHjeivleiAl+WwveWQjuS7jeWksei0pSAqL1xuICBzdWNjZXNzOiBib29sZWFuO1xufVxuXG4vKipcbiAqIOmHjeivlemFjee9rlxuICogU0RLIOWGhemDqOWvuee9kee7nOmUmeivr+OAgei2heaXtuOAgTV4eCDmnI3liqHnq6/plJnor6/oh6rliqjph43or5VcbiAqIDR4eCDlrqLmiLfnq6/plJnor6/vvIjlpoLlj4LmlbDplJnor6/vvInkuI3kvJrph43or5VcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIC8vIOiHquWumuS5iemHjeivleetlueVpe+8muacgOWkmumHjeivlSAzIOasoe+8jOmmluasoeW7tui/nyAyIOenklxuICogY29uc3QgZW1haWwgPSBhd2FpdCBnZW5lcmF0ZUVtYWlsKHtcbiAqICAgY2hhbm5lbDogJ21haWwtdG0nLFxuICogICByZXRyeTogeyBtYXhSZXRyaWVzOiAzLCBpbml0aWFsRGVsYXk6IDIwMDAgfSxcbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmV0cnlDb25maWcge1xuICAvKiog5pyA5aSn6YeN6K+V5qyh5pWw77yI5LiN5ZCr6aaW5qyh6K+35rGC77yJ77yM6buY6K6kIDIgKi9cbiAgbWF4UmV0cmllcz86IG51bWJlcjtcbiAgLyoqIOWIneWni+mHjeivleW7tui/n++8iOavq+enku+8ie+8jOmHh+eUqOaMh+aVsOmAgOmBv+etlueVpe+8jOm7mOiupCAxMDAwICovXG4gIGluaXRpYWxEZWxheT86IG51bWJlcjtcbiAgLyoqIOacgOWkp+mHjeivleW7tui/n+S4iumZkO+8iOavq+enku+8ie+8jOm7mOiupCA1MDAwICovXG4gIG1heERlbGF5PzogbnVtYmVyO1xuICAvKiog5Y2V5qyh6K+35rGC6LaF5pe25pe26Ze077yI5q+r56eS77yJ77yM6buY6K6kIDE1MDAwICovXG4gIHRpbWVvdXQ/OiBudW1iZXI7XG59XG5cbi8qKlxuICog5Yib5bu65Li05pe26YKu566x55qE6YCJ6aG5XG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiAvLyDkvb/nlKjmjIflrprmuKDpgZPliJvlu7rpgq7nrrFcbiAqIGNvbnN0IGVtYWlsID0gYXdhaXQgZ2VuZXJhdGVFbWFpbCh7IGNoYW5uZWw6ICdtYWlsLXRtJyB9KTtcbiAqXG4gKiAvLyDpmo/mnLrpgInmi6nmuKDpgZNcbiAqIGNvbnN0IGVtYWlsID0gYXdhaXQgZ2VuZXJhdGVFbWFpbCgpO1xuICogYGBgXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2VuZXJhdGVFbWFpbE9wdGlvbnMge1xuICAvKiog5oyH5a6a5rig6YGT77yM5LiN5Lyg5YiZ6ZqP5py66YCJ5oupICovXG4gIGNoYW5uZWw/OiBDaGFubmVsO1xuICAvKiog6YKu566x5pyJ5pWI5pe26ZW/ICovXG4gIGR1cmF0aW9uPzogbnVtYmVyO1xuICAvKiog5oyH5a6a6YKu566x5Z+f5ZCNICovXG4gIGRvbWFpbj86IHN0cmluZyB8IG51bGw7XG4gIC8qKiDph43or5XphY3nva7vvIzkuI3kvKDliJnkvb/nlKjpu5jorqTlgLzvvIjmnIDlpJrph43or5UgMiDmrKHvvIkgKi9cbiAgcmV0cnk/OiBSZXRyeUNvbmZpZztcbn1cblxuLyoqXG4gKiDojrflj5bpgq7ku7bliJfooajnmoTpgInpoblcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGdldEVtYWlscyh7XG4gKiAgIGNoYW5uZWw6IGVtYWlsSW5mby5jaGFubmVsLFxuICogICBlbWFpbDogZW1haWxJbmZvLmVtYWlsLFxuICogICB0b2tlbjogZW1haWxJbmZvLnRva2VuLFxuICogfSk7XG4gKiBpZiAocmVzdWx0LnN1Y2Nlc3MgJiYgcmVzdWx0LmVtYWlscy5sZW5ndGggPiAwKSB7XG4gKiAgIGNvbnNvbGUubG9nKCfmlLbliLDpgq7ku7Y6JywgcmVzdWx0LmVtYWlscyk7XG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHZXRFbWFpbHNPcHRpb25zIHtcbiAgLyoqIOa4oOmBk+agh+ivhu+8jOW/heWhqyAqL1xuICBjaGFubmVsOiBDaGFubmVsO1xuICAvKiog6YKu566x5Zyw5Z2A77yM5b+F5aGrICovXG4gIGVtYWlsOiBzdHJpbmc7XG4gIC8qKiDorqTor4Hku6TniYwgKi9cbiAgdG9rZW4/OiBzdHJpbmc7XG4gIC8qKiDph43or5XphY3nva7vvIzkuI3kvKDliJnkvb/nlKjpu5jorqTlgLzvvIjmnIDlpJrph43or5UgMiDmrKHvvIkgKi9cbiAgcmV0cnk/OiBSZXRyeUNvbmZpZztcbn1cbiJdfQ==
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICog5pSv5oyB55qE5Li05pe26YKu566x5rig6YGT5qCH6K+GXG4gKiDmr4/kuKrmuKDpgZPlr7nlupTkuIDkuKrnrKzkuInmlrnkuLTml7bpgq7nrrHmnI3liqHllYZcbiAqL1xuZXhwb3J0IHR5cGUgQ2hhbm5lbCA9ICd0ZW1wbWFpbCcgfCAnbGluc2hpLWVtYWlsJyB8ICd0ZW1wbWFpbC1sb2wnIHwgJ2NoYXRncHQtb3JnLXVrJyB8ICd0ZW1wbWFpbC1sYScgfCAndGVtcC1tYWlsLWlvJyB8ICdhd2FtYWlsJyB8ICdtYWlsLXRtJyB8ICdkcm9wbWFpbCcgfCAnZ3VlcnJpbGxhbWFpbCcgfCAnbWFpbGRyb3AnO1xuXG4vKipcbiAqIOWIm+W7uuS4tOaXtumCrueuseWQjui/lOWbnueahOmCrueuseS/oeaBr1xuICog5YyF5ZCr6YKu566x5Zyw5Z2A44CB6K6k6K+B5Luk54mM5ZKM55Sf5ZG95ZGo5pyf5L+h5oGvXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW1haWxJbmZvIHtcbiAgLyoqIOWIm+W7uuivpemCrueuseaJgOS9v+eUqOeahOa4oOmBkyAqL1xuICBjaGFubmVsOiBDaGFubmVsO1xuICAvKiog5Li05pe26YKu566x5Zyw5Z2AICovXG4gIGVtYWlsOiBzdHJpbmc7XG4gIC8qKiDorqTor4Hku6TniYzvvIzpg6jliIbmuKDpgZPlnKjojrflj5bpgq7ku7bml7bpnIDopoHmraTku6TniYwgKi9cbiAgdG9rZW4/OiBzdHJpbmc7XG4gIC8qKiDpgq7nrrHov4fmnJ/ml7bpl7TvvIhJU08gODYwMSDlrZfnrKbkuLLmiJYgVW5peCDml7bpl7TmiLPvvIkgKi9cbiAgZXhwaXJlc0F0Pzogc3RyaW5nIHwgbnVtYmVyO1xuICAvKiog6YKu566x5Yib5bu65pe26Ze077yISVNPIDg2MDEg5a2X56ym5Liy77yJICovXG4gIGNyZWF0ZWRBdD86IHN0cmluZztcbn1cblxuLyoqXG4gKiDmoIflh4bljJbpgq7ku7bpmYTku7ZcbiAqIOS4jeWQjOa4oOmBk+eahOmZhOS7tuWtl+auteWQjeS4jeWQjO+8jFNESyDnu5/kuIDlvZLkuIDljJbkuLrmraTnu5PmnoRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbWFpbEF0dGFjaG1lbnQge1xuICAvKiog6ZmE5Lu25paH5Lu25ZCNICovXG4gIGZpbGVuYW1lOiBzdHJpbmc7XG4gIC8qKiDpmYTku7blpKflsI/vvIjlrZfoioLvvIkgKi9cbiAgc2l6ZT86IG51bWJlcjtcbiAgLyoqIE1JTUUg57G75Z6L77yM5aaCIGFwcGxpY2F0aW9uL3BkZiAqL1xuICBjb250ZW50VHlwZT86IHN0cmluZztcbiAgLyoqIOmZhOS7tuS4i+i9veWcsOWdgCAqL1xuICB1cmw/OiBzdHJpbmc7XG59XG5cbi8qKlxuICog5qCH5YeG5YyW6YKu5Lu25qC85byPIC0g5omA5pyJ5o+Q5L6b5ZWG6L+U5Zue57uf5LiA57uT5p6EXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW1haWwge1xuICAvKiog6YKu5Lu25ZSv5LiA5qCH6K+GICovXG4gIGlkOiBzdHJpbmc7XG4gIC8qKiDlj5Hku7bkurrpgq7nrrHlnLDlnYAgKi9cbiAgZnJvbTogc3RyaW5nO1xuICAvKiog5pS25Lu25Lq66YKu566x5Zyw5Z2AICovXG4gIHRvOiBzdHJpbmc7XG4gIC8qKiDpgq7ku7bkuLvpopggKi9cbiAgc3ViamVjdDogc3RyaW5nO1xuICAvKiog57qv5paH5pys5YaF5a65ICovXG4gIHRleHQ6IHN0cmluZztcbiAgLyoqIEhUTUwg5YaF5a65ICovXG4gIGh0bWw6IHN0cmluZztcbiAgLyoqIElTTyA4NjAxIOagvOW8j+eahOaXpeacn+Wtl+espuS4siAqL1xuICBkYXRlOiBzdHJpbmc7XG4gIC8qKiDmmK/lkKblt7Lor7sgKi9cbiAgaXNSZWFkOiBib29sZWFuO1xuICAvKiog6ZmE5Lu25YiX6KGoICovXG4gIGF0dGFjaG1lbnRzOiBFbWFpbEF0dGFjaG1lbnRbXTtcbn1cblxuLyoqXG4gKiDojrflj5bpgq7ku7bliJfooajnmoTov5Tlm57nu5PmnpxcbiAqIHN1Y2Nlc3Mg5Li6IGZhbHNlIOaXtuihqOekuuivt+axguWksei0pe+8iOmHjeivleiAl+Wwve+8ie+8jGVtYWlscyDkuLrnqbrmlbDnu4RcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHZXRFbWFpbHNSZXN1bHQge1xuICAvKiog5omA5L2/55So55qE5rig6YGTICovXG4gIGNoYW5uZWw6IENoYW5uZWw7XG4gIC8qKiDmn6Xor6LnmoTpgq7nrrHlnLDlnYAgKi9cbiAgZW1haWw6IHN0cmluZztcbiAgLyoqIOmCruS7tuWIl+ihqO+8jOWksei0peaXtuS4uuepuuaVsOe7hCAqL1xuICBlbWFpbHM6IEVtYWlsW107XG4gIC8qKiDor7fmsYLmmK/lkKbmiJDlip/vvIxmYWxzZSDooajnpLrph43or5XogJflsL3lkI7ku43lpLHotKUgKi9cbiAgc3VjY2VzczogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiDph43or5XphY3nva5cbiAqIFNESyDlhoXpg6jlr7nnvZHnu5zplJnor6/jgIHotoXml7bjgIE1eHgg5pyN5Yqh56uv6ZSZ6K+v6Ieq5Yqo6YeN6K+VXG4gKiA0eHgg5a6i5oi356uv6ZSZ6K+v77yI5aaC5Y+C5pWw6ZSZ6K+v77yJ5LiN5Lya6YeN6K+VXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiAvLyDoh6rlrprkuYnph43or5XnrZbnlaXvvJrmnIDlpJrph43or5UgMyDmrKHvvIzpppbmrKHlu7bov58gMiDnp5JcbiAqIGNvbnN0IGVtYWlsID0gYXdhaXQgZ2VuZXJhdGVFbWFpbCh7XG4gKiAgIGNoYW5uZWw6ICdtYWlsLXRtJyxcbiAqICAgcmV0cnk6IHsgbWF4UmV0cmllczogMywgaW5pdGlhbERlbGF5OiAyMDAwIH0sXG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJldHJ5Q29uZmlnIHtcbiAgLyoqIOacgOWkp+mHjeivleasoeaVsO+8iOS4jeWQq+mmluasoeivt+axgu+8ie+8jOm7mOiupCAyICovXG4gIG1heFJldHJpZXM/OiBudW1iZXI7XG4gIC8qKiDliJ3lp4vph43or5Xlu7bov5/vvIjmr6vnp5LvvInvvIzph4fnlKjmjIfmlbDpgIDpgb/nrZbnlaXvvIzpu5jorqQgMTAwMCAqL1xuICBpbml0aWFsRGVsYXk/OiBudW1iZXI7XG4gIC8qKiDmnIDlpKfph43or5Xlu7bov5/kuIrpmZDvvIjmr6vnp5LvvInvvIzpu5jorqQgNTAwMCAqL1xuICBtYXhEZWxheT86IG51bWJlcjtcbiAgLyoqIOWNleasoeivt+axgui2heaXtuaXtumXtO+8iOavq+enku+8ie+8jOm7mOiupCAxNTAwMCAqL1xuICB0aW1lb3V0PzogbnVtYmVyO1xufVxuXG4vKipcbiAqIOWIm+W7uuS4tOaXtumCrueuseeahOmAiemhuVxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogLy8g5L2/55So5oyH5a6a5rig6YGT5Yib5bu66YKu566xXG4gKiBjb25zdCBlbWFpbCA9IGF3YWl0IGdlbmVyYXRlRW1haWwoeyBjaGFubmVsOiAnbWFpbC10bScgfSk7XG4gKlxuICogLy8g6ZqP5py66YCJ5oup5rig6YGTXG4gKiBjb25zdCBlbWFpbCA9IGF3YWl0IGdlbmVyYXRlRW1haWwoKTtcbiAqIGBgYFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdlbmVyYXRlRW1haWxPcHRpb25zIHtcbiAgLyoqIOaMh+Wumua4oOmBk++8jOS4jeS8oOWImemaj+acuumAieaLqSAqL1xuICBjaGFubmVsPzogQ2hhbm5lbDtcbiAgLyoqIOmCrueuseacieaViOaXtumVvyAqL1xuICBkdXJhdGlvbj86IG51bWJlcjtcbiAgLyoqIOaMh+WumumCrueuseWfn+WQjSAqL1xuICBkb21haW4/OiBzdHJpbmcgfCBudWxsO1xuICAvKiog6YeN6K+V6YWN572u77yM5LiN5Lyg5YiZ5L2/55So6buY6K6k5YC877yI5pyA5aSa6YeN6K+VIDIg5qyh77yJICovXG4gIHJldHJ5PzogUmV0cnlDb25maWc7XG59XG5cbi8qKlxuICog6I635Y+W6YKu5Lu25YiX6KGo55qE6YCJ6aG5XG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBjb25zdCByZXN1bHQgPSBhd2FpdCBnZXRFbWFpbHMoe1xuICogICBjaGFubmVsOiBlbWFpbEluZm8uY2hhbm5lbCxcbiAqICAgZW1haWw6IGVtYWlsSW5mby5lbWFpbCxcbiAqICAgdG9rZW46IGVtYWlsSW5mby50b2tlbixcbiAqIH0pO1xuICogaWYgKHJlc3VsdC5zdWNjZXNzICYmIHJlc3VsdC5lbWFpbHMubGVuZ3RoID4gMCkge1xuICogICBjb25zb2xlLmxvZygn5pS25Yiw6YKu5Lu2OicsIHJlc3VsdC5lbWFpbHMpO1xuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2V0RW1haWxzT3B0aW9ucyB7XG4gIC8qKiDmuKDpgZPmoIfor4bvvIzlv4XloasgKi9cbiAgY2hhbm5lbDogQ2hhbm5lbDtcbiAgLyoqIOmCrueuseWcsOWdgO+8jOW/heWhqyAqL1xuICBlbWFpbDogc3RyaW5nO1xuICAvKiog6K6k6K+B5Luk54mMICovXG4gIHRva2VuPzogc3RyaW5nO1xuICAvKiog6YeN6K+V6YWN572u77yM5LiN5Lyg5YiZ5L2/55So6buY6K6k5YC877yI5pyA5aSa6YeN6K+VIDIg5qyh77yJICovXG4gIHJldHJ5PzogUmV0cnlDb25maWc7XG59XG4iXX0=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tempmail-sdk",
3
- "version": "1.0.3",
3
+ "version": "1.1.0",
4
4
  "description": "临时邮箱 SDK - 支持多个临时邮箱服务商",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
package/src/index.ts CHANGED
@@ -7,6 +7,8 @@ import * as tempMailIO from './providers/temp-mail-io';
7
7
  import * as awamail from './providers/awamail';
8
8
  import * as mailTm from './providers/mail-tm';
9
9
  import * as dropmail from './providers/dropmail';
10
+ import * as guerrillamail from './providers/guerrillamail';
11
+ import * as maildropProvider from './providers/maildrop';
10
12
  import { Channel, EmailInfo, Email, EmailAttachment, GetEmailsResult, GenerateEmailOptions, GetEmailsOptions } from './types';
11
13
  import { withRetry, RetryOptions } from './retry';
12
14
  import { logger } from './logger';
@@ -27,10 +29,12 @@ const providers = {
27
29
  'awamail': awamail,
28
30
  'mail-tm': mailTm,
29
31
  'dropmail': dropmail,
32
+ 'guerrillamail': guerrillamail,
33
+ 'maildrop': maildropProvider,
30
34
  };
31
35
 
32
36
  /** 所有支持的渠道列表,用于随机选择和遍历 */
33
- const allChannels: Channel[] = ['tempmail', 'linshi-email', 'tempmail-lol', 'chatgpt-org-uk', 'tempmail-la', 'temp-mail-io', 'awamail', 'mail-tm', 'dropmail'];
37
+ const allChannels: Channel[] = ['tempmail', 'linshi-email', 'tempmail-lol', 'chatgpt-org-uk', 'tempmail-la', 'temp-mail-io', 'awamail', 'mail-tm', 'dropmail', 'guerrillamail', 'maildrop'];
34
38
 
35
39
  /**
36
40
  * 渠道信息,包含渠道标识、显示名称和对应网站
@@ -55,6 +59,8 @@ const channelInfoMap: Record<Channel, ChannelInfo> = {
55
59
  'awamail': { channel: 'awamail', name: 'AwaMail', website: 'awamail.com' },
56
60
  'mail-tm': { channel: 'mail-tm', name: 'Mail.tm', website: 'mail.tm' },
57
61
  'dropmail': { channel: 'dropmail', name: 'DropMail', website: 'dropmail.me' },
62
+ 'guerrillamail': { channel: 'guerrillamail', name: 'Guerrilla Mail', website: 'guerrillamail.com' },
63
+ 'maildrop': { channel: 'maildrop', name: 'Maildrop', website: 'maildrop.cc' },
58
64
  };
59
65
 
60
66
  /**
@@ -132,6 +138,10 @@ async function generateEmailOnce(channel: Channel, options: GenerateEmailOptions
132
138
  return mailTm.generateEmail();
133
139
  case 'dropmail':
134
140
  return dropmail.generateEmail();
141
+ case 'guerrillamail':
142
+ return guerrillamail.generateEmail();
143
+ case 'maildrop':
144
+ return maildropProvider.generateEmail();
135
145
  default:
136
146
  throw new Error(`Unknown channel: ${channel}`);
137
147
  }
@@ -220,6 +230,12 @@ async function getEmailsOnce(channel: Channel, email: string, token?: string): P
220
230
  case 'dropmail':
221
231
  if (!token) throw new Error('Token is required for dropmail channel');
222
232
  return dropmail.getEmails(token, email);
233
+ case 'guerrillamail':
234
+ if (!token) throw new Error('Token is required for guerrillamail channel');
235
+ return guerrillamail.getEmails(token, email);
236
+ case 'maildrop':
237
+ if (!token) throw new Error('Token is required for maildrop channel');
238
+ return maildropProvider.getEmails(token, email);
223
239
  default:
224
240
  throw new Error(`Unknown channel: ${channel}`);
225
241
  }
@@ -0,0 +1,78 @@
1
+ /**
2
+ * Guerrilla Mail 渠道实现
3
+ * API 文档: https://www.guerrillamail.com/GuerrillaMailAPI.html
4
+ *
5
+ * 特点:
6
+ * - 无需认证,公开 JSON API
7
+ * - 通过 sid_token 维持会话
8
+ * - 邮箱有效期 60 分钟
9
+ */
10
+
11
+ import { EmailInfo, Email, Channel } from '../types';
12
+ import { normalizeEmail } from '../normalize';
13
+
14
+ const CHANNEL: Channel = 'guerrillamail';
15
+ const BASE_URL = 'https://api.guerrillamail.com/ajax.php';
16
+
17
+ /**
18
+ * 创建临时邮箱
19
+ * API: GET ajax.php?f=get_email_address
20
+ * 返回 email_addr + sid_token(用于后续获取邮件)
21
+ */
22
+ export async function generateEmail(): Promise<EmailInfo> {
23
+ const response = await fetch(`${BASE_URL}?f=get_email_address&lang=en`, {
24
+ method: 'GET',
25
+ headers: {
26
+ 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
27
+ },
28
+ });
29
+
30
+ if (!response.ok) {
31
+ throw new Error(`Failed to generate email: ${response.status}`);
32
+ }
33
+
34
+ const data = await response.json();
35
+
36
+ if (!data.email_addr || !data.sid_token) {
37
+ throw new Error('Failed to generate email: missing email_addr or sid_token');
38
+ }
39
+
40
+ return {
41
+ channel: CHANNEL,
42
+ email: data.email_addr,
43
+ token: data.sid_token,
44
+ expiresAt: data.email_timestamp ? (data.email_timestamp + 3600) * 1000 : undefined,
45
+ };
46
+ }
47
+
48
+ /**
49
+ * 获取邮件列表
50
+ * API: GET ajax.php?f=check_email&seq=0&sid_token=xxx
51
+ * 返回 list 数组,每个元素包含 mail_id, mail_from, mail_subject, mail_body 等
52
+ */
53
+ export async function getEmails(token: string, email: string): Promise<Email[]> {
54
+ const response = await fetch(`${BASE_URL}?f=check_email&seq=0&sid_token=${encodeURIComponent(token)}`, {
55
+ method: 'GET',
56
+ headers: {
57
+ 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
58
+ },
59
+ });
60
+
61
+ if (!response.ok) {
62
+ throw new Error(`Failed to get emails: ${response.status}`);
63
+ }
64
+
65
+ const data = await response.json();
66
+ const list = Array.isArray(data.list) ? data.list : [];
67
+
68
+ return list.map((item: any) => normalizeEmail({
69
+ id: item.mail_id,
70
+ from: item.mail_from,
71
+ to: email,
72
+ subject: item.mail_subject,
73
+ text: item.mail_body || item.mail_excerpt || '',
74
+ html: item.mail_body || '',
75
+ date: item.mail_date || '',
76
+ isRead: item.mail_read === 1,
77
+ }, email));
78
+ }
@@ -0,0 +1,210 @@
1
+ /**
2
+ * Maildrop 渠道实现
3
+ * API: GraphQL endpoint https://api.maildrop.cc/graphql
4
+ *
5
+ * 特点:
6
+ * - 无需认证,公开 GraphQL API
7
+ * - 自带反垃圾过滤
8
+ * - 邮箱名即用户名(任意字符串@maildrop.cc)
9
+ * - 无过期时间限制
10
+ */
11
+
12
+ import { EmailInfo, Email, Channel } from '../types';
13
+
14
+ const CHANNEL: Channel = 'maildrop';
15
+ const GRAPHQL_URL = 'https://api.maildrop.cc/graphql';
16
+ const DOMAIN = 'maildrop.cc';
17
+
18
+ /**
19
+ * 解码 RFC 2047 编码的邮件头(如发件人、主题)
20
+ * 支持 Base64 (B) 和 Quoted-Printable (Q) 编码
21
+ */
22
+ function decodeRfc2047(str: string): string {
23
+ if (!str) return '';
24
+ return str.replace(/=\?([^?]+)\?(B|Q)\?([^?]*)\?=/gi, (_, charset, encoding, encoded) => {
25
+ try {
26
+ if (encoding.toUpperCase() === 'B') {
27
+ return Buffer.from(encoded, 'base64').toString('utf-8');
28
+ }
29
+ /* Quoted-Printable: _=空格,=XX=十六进制字节 */
30
+ const decoded = encoded
31
+ .replace(/_/g, ' ')
32
+ .replace(/=([0-9A-Fa-f]{2})/g, (_m: string, hex: string) => String.fromCharCode(parseInt(hex, 16)));
33
+ return decoded;
34
+ } catch {
35
+ return encoded;
36
+ }
37
+ });
38
+ }
39
+
40
+ /**
41
+ * 从原始 MIME 邮件源码中提取纯文本正文
42
+ * maildrop 的 data 字段返回完整 MIME 源码,需要解析出 text/plain 部分
43
+ */
44
+ function extractTextFromMime(raw: string): string {
45
+ if (!raw) return '';
46
+
47
+ /* 分离邮件头和正文(双换行分隔) */
48
+ const headerBodySplit = raw.indexOf('\r\n\r\n');
49
+ if (headerBodySplit === -1) return raw;
50
+
51
+ const headers = raw.substring(0, headerBodySplit);
52
+ const body = raw.substring(headerBodySplit + 4);
53
+
54
+ /* 检查是否为 multipart 邮件 */
55
+ const boundaryMatch = headers.match(/boundary="?([^";\r\n]+)"?/i);
56
+ if (boundaryMatch) {
57
+ const boundary = boundaryMatch[1];
58
+ const parts = body.split('--' + boundary);
59
+
60
+ for (const part of parts) {
61
+ /* 查找 text/plain 部分 */
62
+ if (part.match(/Content-Type:\s*text\/plain/i)) {
63
+ const partHeaderEnd = part.indexOf('\r\n\r\n');
64
+ if (partHeaderEnd === -1) continue;
65
+
66
+ const partHeaders = part.substring(0, partHeaderEnd);
67
+ let content = part.substring(partHeaderEnd + 4).replace(/\r\n$/, '').replace(/--$/, '').trim();
68
+
69
+ /* 处理 Content-Transfer-Encoding */
70
+ if (partHeaders.match(/Content-Transfer-Encoding:\s*base64/i)) {
71
+ try {
72
+ content = Buffer.from(content.replace(/\s/g, ''), 'base64').toString('utf-8');
73
+ } catch { /* 解码失败则保留原文 */ }
74
+ } else if (partHeaders.match(/Content-Transfer-Encoding:\s*quoted-printable/i)) {
75
+ content = content
76
+ .replace(/=\r?\n/g, '')
77
+ .replace(/=([0-9A-Fa-f]{2})/g, (_, hex: string) => String.fromCharCode(parseInt(hex, 16)));
78
+ }
79
+
80
+ return content.trim();
81
+ }
82
+ }
83
+ }
84
+
85
+ /* 非 multipart:检查整体编码 */
86
+ if (headers.match(/Content-Transfer-Encoding:\s*base64/i)) {
87
+ try {
88
+ return Buffer.from(body.replace(/\s/g, ''), 'base64').toString('utf-8').trim();
89
+ } catch { /* 解码失败 */ }
90
+ }
91
+
92
+ return body.trim();
93
+ }
94
+
95
+ /**
96
+ * 生成随机用户名
97
+ */
98
+ function randomUsername(length: number = 10): string {
99
+ const chars = 'abcdefghijklmnopqrstuvwxyz0123456789';
100
+ let result = '';
101
+ for (let i = 0; i < length; i++) {
102
+ result += chars.charAt(Math.floor(Math.random() * chars.length));
103
+ }
104
+ return result;
105
+ }
106
+
107
+ /**
108
+ * 发送 GraphQL 请求
109
+ * 使用 operationName + variables 的标准 GraphQL 格式
110
+ */
111
+ async function graphqlRequest(
112
+ operationName: string,
113
+ query: string,
114
+ variables: Record<string, string> = {},
115
+ ): Promise<any> {
116
+ const response = await fetch(GRAPHQL_URL, {
117
+ method: 'POST',
118
+ headers: {
119
+ 'Content-Type': 'application/json',
120
+ 'Origin': 'https://maildrop.cc',
121
+ 'Referer': 'https://maildrop.cc/',
122
+ 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
123
+ },
124
+ body: JSON.stringify({ operationName, variables, query }),
125
+ });
126
+
127
+ if (!response.ok) {
128
+ throw new Error(`Maildrop GraphQL request failed: ${response.status}`);
129
+ }
130
+
131
+ const data = await response.json();
132
+ if (data.errors && data.errors.length > 0) {
133
+ throw new Error(`Maildrop GraphQL error: ${data.errors[0].message}`);
134
+ }
135
+
136
+ return data.data;
137
+ }
138
+
139
+ /**
140
+ * 创建临时邮箱
141
+ * Maildrop 无需注册,任意用户名即可接收邮件
142
+ */
143
+ export async function generateEmail(): Promise<EmailInfo> {
144
+ const username = randomUsername();
145
+ const email = `${username}@${DOMAIN}`;
146
+
147
+ /* 验证邮箱可用:查询一次 inbox 确认 API 正常 */
148
+ await graphqlRequest(
149
+ 'GetInbox',
150
+ 'query GetInbox($mailbox: String!) { inbox(mailbox: $mailbox) { id } }',
151
+ { mailbox: username },
152
+ );
153
+
154
+ return {
155
+ channel: CHANNEL,
156
+ email,
157
+ token: username,
158
+ };
159
+ }
160
+
161
+ /**
162
+ * 获取邮件列表
163
+ * 先查 inbox 获取邮件 ID 列表,再逐封获取完整内容
164
+ */
165
+ export async function getEmails(token: string, email: string): Promise<Email[]> {
166
+ const mailbox = token || email.split('@')[0];
167
+
168
+ /* 查询收件箱列表 */
169
+ const inboxData = await graphqlRequest(
170
+ 'GetInbox',
171
+ 'query GetInbox($mailbox: String!) { inbox(mailbox: $mailbox) { id headerfrom subject date } }',
172
+ { mailbox },
173
+ );
174
+
175
+ const inbox = inboxData?.inbox;
176
+ if (!Array.isArray(inbox) || inbox.length === 0) {
177
+ return [];
178
+ }
179
+
180
+ /* 逐封获取完整邮件内容 */
181
+ const emails: Email[] = [];
182
+ for (const item of inbox) {
183
+ try {
184
+ const msgData = await graphqlRequest(
185
+ 'GetMessage',
186
+ 'query GetMessage($mailbox: String!, $id: String!) { message(mailbox: $mailbox, id: $id) { id headerfrom subject date data html } }',
187
+ { mailbox, id: item.id },
188
+ );
189
+
190
+ const msg = msgData?.message;
191
+ if (msg) {
192
+ emails.push({
193
+ id: msg.id || item.id,
194
+ from: decodeRfc2047(msg.headerfrom || item.headerfrom || ''),
195
+ to: email,
196
+ subject: decodeRfc2047(msg.subject || item.subject || ''),
197
+ text: extractTextFromMime(msg.data || ''),
198
+ html: msg.html || '',
199
+ date: msg.date || item.date || '',
200
+ isRead: false,
201
+ attachments: [],
202
+ });
203
+ }
204
+ } catch {
205
+ /* 单封邮件获取失败不影响整体 */
206
+ }
207
+ }
208
+
209
+ return emails;
210
+ }
package/src/types.ts CHANGED
@@ -2,7 +2,7 @@
2
2
  * 支持的临时邮箱渠道标识
3
3
  * 每个渠道对应一个第三方临时邮箱服务商
4
4
  */
5
- export type Channel = 'tempmail' | 'linshi-email' | 'tempmail-lol' | 'chatgpt-org-uk' | 'tempmail-la' | 'temp-mail-io' | 'awamail' | 'mail-tm' | 'dropmail';
5
+ export type Channel = 'tempmail' | 'linshi-email' | 'tempmail-lol' | 'chatgpt-org-uk' | 'tempmail-la' | 'temp-mail-io' | 'awamail' | 'mail-tm' | 'dropmail' | 'guerrillamail' | 'maildrop';
6
6
 
7
7
  /**
8
8
  * 创建临时邮箱后返回的邮箱信息