tempmail-sdk 1.1.7 → 1.1.8
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 +3 -2
- package/dist/index.js +8 -2
- package/dist/normalize.js +20 -4
- package/dist/providers/mail-cx.d.ts +6 -0
- package/dist/providers/mail-cx.js +160 -0
- package/dist/types.d.ts +1 -1
- package/dist/types.js +1 -1
- package/package.json +2 -2
- package/src/index.ts +6 -1
- package/src/normalize.ts +23 -3
- package/src/providers/mail-cx.ts +168 -0
- package/src/types.ts +1 -1
package/README.md
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
[](https://www.npmjs.com/package/tempmail-sdk)
|
|
4
4
|
[](https://www.gnu.org/licenses/gpl-3.0)
|
|
5
5
|
|
|
6
|
-
临时邮箱 SDK(TypeScript/Node.js),支持 **
|
|
6
|
+
临时邮箱 SDK(TypeScript/Node.js),支持 **20** 个邮箱服务提供商,所有渠道返回**统一标准化格式**。
|
|
7
7
|
|
|
8
8
|
## 安装
|
|
9
9
|
|
|
@@ -17,7 +17,7 @@ npm install @XxxXTeam/tempmail-sdk --registry=https://npm.pkg.github.com
|
|
|
17
17
|
|
|
18
18
|
## 支持的渠道
|
|
19
19
|
|
|
20
|
-
共 **
|
|
20
|
+
共 **20** 个,顺序与 `listChannels()` / 随机尝试顺序一致(与 `src/index.ts` 中 `allChannels` 相同)。
|
|
21
21
|
|
|
22
22
|
| 渠道 | 服务商 | 需要 Token | 说明 |
|
|
23
23
|
|------|--------|:----------:|------|
|
|
@@ -31,6 +31,7 @@ npm install @XxxXTeam/tempmail-sdk --registry=https://npm.pkg.github.com
|
|
|
31
31
|
| `awamail` | awamail.com | ✅ | Session Cookie 自动管理 |
|
|
32
32
|
| `temporary-email-org` | temporary-email.org | ✅ | `GET /zh/messages` 下发 Cookie;收信须 `X-Requested-With: XMLHttpRequest` |
|
|
33
33
|
| `mail-tm` | mail.tm / api.mail.tm | ✅ | 自动注册账号;请求与 **Internxt** 等站点前端一致(`GET /domains?page=1`、`GET /messages?page=1` 及常见浏览器头) |
|
|
34
|
+
| `mail-cx` | mail.cx / api.mail.cx | ✅ | OpenAPI:`GET /api/domains`、`POST /api/accounts`(返回 JWT)、`GET /api/messages`;可选 `domain` 指定系统域名 |
|
|
34
35
|
| `dropmail` | dropmail.me | ✅ | GraphQL API |
|
|
35
36
|
| `guerrillamail` | guerrillamail.com | ✅ | 公开 JSON API |
|
|
36
37
|
| `maildrop` | maildrop.cx | ✅ | REST:`suffixes.php`(排除 `transformer.edu.kg`)+ 随机前缀;`emails.php` 列表,`description`→`text` |
|
package/dist/index.js
CHANGED
|
@@ -48,6 +48,7 @@ const tempMailIO = __importStar(require("./providers/temp-mail-io"));
|
|
|
48
48
|
const awamail = __importStar(require("./providers/awamail"));
|
|
49
49
|
const temporaryEmailOrg = __importStar(require("./providers/temporary-email-org"));
|
|
50
50
|
const mailTm = __importStar(require("./providers/mail-tm"));
|
|
51
|
+
const mailCx = __importStar(require("./providers/mail-cx"));
|
|
51
52
|
const dropmail = __importStar(require("./providers/dropmail"));
|
|
52
53
|
const guerrillamail = __importStar(require("./providers/guerrillamail"));
|
|
53
54
|
const maildropProvider = __importStar(require("./providers/maildrop"));
|
|
@@ -87,7 +88,7 @@ Object.defineProperty(exports, "randomSyntheticLinshiKey", { enumerable: true, g
|
|
|
87
88
|
Object.defineProperty(exports, "randomBrowserLikeProfile", { enumerable: true, get: function () { return linshi_token_1.randomBrowserLikeProfile; } });
|
|
88
89
|
Object.defineProperty(exports, "syntheticVisitorIdFromProfile", { enumerable: true, get: function () { return linshi_token_1.syntheticVisitorIdFromProfile; } });
|
|
89
90
|
/** 所有支持的渠道列表,用于随机选择和遍历 */
|
|
90
|
-
const allChannels = ['tempmail', 'linshi-email', 'linshiyou', 'mffac', 'tempmail-lol', 'chatgpt-org-uk', 'temp-mail-io', 'awamail', 'temporary-email-org', 'mail-tm', 'dropmail', 'guerrillamail', 'maildrop', 'smail-pw', 'boomlify', 'minmail', 'vip-215', 'anonbox', 'fake-legal'];
|
|
91
|
+
const allChannels = ['tempmail', 'linshi-email', 'linshiyou', 'mffac', 'tempmail-lol', 'chatgpt-org-uk', 'temp-mail-io', 'awamail', 'temporary-email-org', 'mail-tm', 'mail-cx', 'dropmail', 'guerrillamail', 'maildrop', 'smail-pw', 'boomlify', 'minmail', 'vip-215', 'anonbox', 'fake-legal'];
|
|
91
92
|
/** 渠道信息映射表 */
|
|
92
93
|
const channelInfoMap = {
|
|
93
94
|
'tempmail': { channel: 'tempmail', name: 'TempMail', website: 'tempmail.ing' },
|
|
@@ -99,6 +100,7 @@ const channelInfoMap = {
|
|
|
99
100
|
'awamail': { channel: 'awamail', name: 'AwaMail', website: 'awamail.com' },
|
|
100
101
|
'temporary-email-org': { channel: 'temporary-email-org', name: 'Temporary Email', website: 'temporary-email.org' },
|
|
101
102
|
'mail-tm': { channel: 'mail-tm', name: 'Mail.tm', website: 'mail.tm' },
|
|
103
|
+
'mail-cx': { channel: 'mail-cx', name: 'Mail.cx', website: 'mail.cx' },
|
|
102
104
|
'dropmail': { channel: 'dropmail', name: 'DropMail', website: 'dropmail.me' },
|
|
103
105
|
'guerrillamail': { channel: 'guerrillamail', name: 'Guerrilla Mail', website: 'guerrillamail.com' },
|
|
104
106
|
'maildrop': { channel: 'maildrop', name: 'Maildrop', website: 'maildrop.cx' },
|
|
@@ -339,6 +341,10 @@ async function getEmailsOnce(channel, email, token) {
|
|
|
339
341
|
if (!token)
|
|
340
342
|
throw new Error('internal error: token missing for mail-tm');
|
|
341
343
|
return mailTm.getEmails(token, email);
|
|
344
|
+
case 'mail-cx':
|
|
345
|
+
if (!token)
|
|
346
|
+
throw new Error('internal error: token missing for mail-cx');
|
|
347
|
+
return mailCx.getEmails(token, email);
|
|
342
348
|
case 'dropmail':
|
|
343
349
|
if (!token)
|
|
344
350
|
throw new Error('internal error: token missing for dropmail');
|
|
@@ -437,4 +443,4 @@ exports.default = {
|
|
|
437
443
|
setConfig: config_1.setConfig,
|
|
438
444
|
getConfig: config_1.getConfig,
|
|
439
445
|
};
|
|
440
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBOEZBLG9DQUVDO0FBUUQsd0NBRUM7QUFvQkQsc0NBaUNDO0FBMEZELDhCQWdDQztBQXpSRCwrREFBaUQ7QUFDakQsc0VBQXdEO0FBQ3hELGlFQUFtRDtBQUNuRCx5REFBMkM7QUFDM0Msc0VBQXdEO0FBQ3hELHlFQUEyRDtBQUMzRCxxRUFBdUQ7QUFDdkQsNkRBQStDO0FBQy9DLG1GQUFxRTtBQUNyRSw0REFBOEM7QUFDOUMsK0RBQWlEO0FBQ2pELHlFQUEyRDtBQUMzRCx1RUFBeUQ7QUFDekQsOERBQWdEO0FBQ2hELCtEQUFpRDtBQUNqRCw2REFBK0M7QUFDL0MsNERBQThDO0FBQzlDLDZEQUErQztBQUMvQyxrRUFBb0Q7QUFFcEQsbUNBQW9DO0FBQ3BDLHFDQUFrQztBQUNsQyxxQ0FBZ0Q7QUFJaEQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsR0FBRyxJQUFJLE9BQU8sRUFBcUIsQ0FBQztBQUNwRCx5Q0FBNkM7QUFBcEMsMkdBQUEsY0FBYyxPQUFBO0FBQ3ZCLGlDQUFvRTtBQUEzRCxrR0FBQSxTQUFTLE9BQUE7QUFBRSx5R0FBQSxnQkFBZ0IsT0FBQTtBQUNwQyxtQ0FBNkY7QUFBcEYsa0dBQUEsUUFBUSxPQUFBO0FBQWMscUdBQUEsV0FBVyxPQUFBO0FBQUUscUdBQUEsV0FBVyxPQUFBO0FBQUUsbUdBQUEsU0FBUyxPQUFBO0FBQUUsZ0dBQUEsTUFBTSxPQUFBO0FBQzFFLG1DQUEyRDtBQUF2QyxtR0FBQSxTQUFTLE9BQUE7QUFBRSxtR0FBQSxTQUFTLE9BQUE7QUFFeEMseURBS2tDO0FBSmhDLHNIQUFBLHNCQUFzQixPQUFBO0FBQ3RCLHdIQUFBLHdCQUF3QixPQUFBO0FBQ3hCLHdIQUFBLHdCQUF3QixPQUFBO0FBQ3hCLDZIQUFBLDZCQUE2QixP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dmlkZXJzL3RlbXBtYWlsJztcbmltcG9ydCAqIGFzIGxpbnNoaUVtYWlsIGZyb20gJy4vcHJvdmlkZXJzL2xpbnNoaS1lbWFpbCc7XG5pbXBvcnQgKiBhcyBsaW5zaGl5b3UgZnJvbSAnLi9wcm92aWRlcnMvbGluc2hpeW91JztcbmltcG9ydCAqIGFzIG1mZmFjIGZyb20gJy4vcHJvdmlkZXJzL21mZmFjJztcbmltcG9ydCAqIGFzIHRlbXBtYWlsTG9sIGZyb20gJy4vcHJvdmlkZXJzL3RlbXBtYWlsLWxvbCc7XG5pbXBvcnQgKiBhcyBjaGF0Z3B0T3JnVWsgZnJvbSAnLi9wcm92aWRlcnMvY2hhdGdwdC1vcmctdWsnO1xuaW1wb3J0ICogYXMgdGVtcE1haWxJTyBmcm9tICcuL3Byb3ZpZGVycy90ZW1wLW1haWwtaW8nO1xuaW1wb3J0ICogYXMgYXdhbWFpbCBmcm9tICcuL3Byb3ZpZGVycy9hd2FtYWlsJztcbmltcG9ydCAqIGFzIHRlbXBvcmFyeUVtYWlsT3JnIGZyb20gJy4vcHJvdmlkZXJzL3RlbXBvcmFyeS1lbWFpbC1vcmcnO1xuaW1wb3J0ICogYXMgbWFpbFRtIGZyb20gJy4vcHJvdmlkZXJzL21haWwtdG0nO1xuaW1wb3J0ICogYXMgZHJvcG1haWwgZnJvbSAnLi9wcm92aWRlcnMvZHJvcG1haWwnO1xuaW1wb3J0ICogYXMgZ3VlcnJpbGxhbWFpbCBmcm9tICcuL3Byb3ZpZGVycy9ndWVycmlsbGFtYWlsJztcbmltcG9ydCAqIGFzIG1haWxkcm9wUHJvdmlkZXIgZnJvbSAnLi9wcm92aWRlcnMvbWFpbGRyb3AnO1xuaW1wb3J0ICogYXMgc21haWxQdyBmcm9tICcuL3Byb3ZpZGVycy9zbWFpbC1wdyc7XG5pbXBvcnQgKiBhcyBib29tbGlmeSBmcm9tICcuL3Byb3ZpZGVycy9ib29tbGlmeSc7XG5pbXBvcnQgKiBhcyBtaW5tYWlsIGZyb20gJy4vcHJvdmlkZXJzL21pbm1haWwnO1xuaW1wb3J0ICogYXMgdmlwMjE1IGZyb20gJy4vcHJvdmlkZXJzL3ZpcC0yMTUnO1xuaW1wb3J0ICogYXMgYW5vbmJveCBmcm9tICcuL3Byb3ZpZGVycy9hbm9uYm94JztcbmltcG9ydCAqIGFzIGZha2VMZWdhbCBmcm9tICcuL3Byb3ZpZGVycy9mYWtlLWxlZ2FsJztcbmltcG9ydCB7IENoYW5uZWwsIEVtYWlsSW5mbywgSW50ZXJuYWxFbWFpbEluZm8sIEVtYWlsLCBHZXRFbWFpbHNSZXN1bHQsIEdlbmVyYXRlRW1haWxPcHRpb25zLCBHZXRFbWFpbHNPcHRpb25zIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyB3aXRoUmV0cnkgfSBmcm9tICcuL3JldHJ5JztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCB7IHNldENvbmZpZywgZ2V0Q29uZmlnIH0gZnJvbSAnLi9jb25maWcnO1xuXG5leHBvcnQgeyBDaGFubmVsLCBFbWFpbEluZm8sIEVtYWlsLCBFbWFpbEF0dGFjaG1lbnQsIEdldEVtYWlsc1Jlc3VsdCwgR2VuZXJhdGVFbWFpbE9wdGlvbnMsIEdldEVtYWlsc09wdGlvbnMgfSBmcm9tICcuL3R5cGVzJztcblxuLyoqXG4gKiBTREsg5YaF6YOoIHRva2VuIOWtmOWCqFxuICog5L2/55SoIFdlYWtNYXAg5bCGIEVtYWlsSW5mbyDlr7nosaHmmKDlsITliLDlr7nlupTnmoQgdG9rZW5cbiAqIOeUqOaIt+aXoOazleebtOaOpeiuv+mXriB0b2tlbu+8jOeUsSBTREsg6Ieq5Yqo566h55CGXG4gKiBAaW50ZXJuYWxcbiAqL1xuY29uc3QgdG9rZW5TdG9yZSA9IG5ldyBXZWFrTWFwPEVtYWlsSW5mbywgc3RyaW5nPigpO1xuZXhwb3J0IHsgbm9ybWFsaXplRW1haWwgfSBmcm9tICcuL25vcm1hbGl6ZSc7XG5leHBvcnQgeyB3aXRoUmV0cnksIGZldGNoV2l0aFRpbWVvdXQsIFJldHJ5T3B0aW9ucyB9IGZyb20gJy4vcmV0cnknO1xuZXhwb3J0IHsgTG9nTGV2ZWwsIExvZ0hhbmRsZXIsIHNldExvZ0xldmVsLCBnZXRMb2dMZXZlbCwgc2V0TG9nZ2VyLCBsb2dnZXIgfSBmcm9tICcuL2xvZ2dlcic7XG5leHBvcnQgeyBTREtDb25maWcsIHNldENvbmZpZywgZ2V0Q29uZmlnIH0gZnJvbSAnLi9jb25maWcnO1xuZXhwb3J0IHR5cGUgeyBTeW50aGV0aWNCcm93c2VyUHJvZmlsZSB9IGZyb20gJy4vcHJvdmlkZXJzL2xpbnNoaS10b2tlbic7XG5leHBvcnQge1xuICBkZXJpdmVMaW5zaGlBcGlQYXRoS2V5LFxuICByYW5kb21TeW50aGV0aWNMaW5zaGlLZXksXG4gIHJhbmRvbUJyb3dzZXJMaWtlUHJvZmlsZSxcbiAgc3ludGhldGljVmlzaXRvcklkRnJvbVByb2ZpbGUsXG59IGZyb20gJy4vcHJvdmlkZXJzL2xpbnNoaS10b2tlbic7XG5cbi8qKiDmiYDmnInmlK/mjIHnmoTmuKDpgZPliJfooajvvIznlKjkuo7pmo/mnLrpgInmi6nlkozpgY3ljoYgKi9cbmNvbnN0IGFsbENoYW5uZWxzOiBDaGFubmVsW10gPSBbJ3RlbXBtYWlsJywgJ2xpbnNoaS1lbWFpbCcsICdsaW5zaGl5b3UnLCAnbWZmYWMnLCAndGVtcG1haWwtbG9sJywgJ2NoYXRncHQtb3JnLXVrJywgJ3RlbXAtbWFpbC1pbycsICdhd2FtYWlsJywgJ3RlbXBvcmFyeS1lbWFpbC1vcmcnLCAnbWFpbC10bScsICdkcm9wbWFpbCcsICdndWVycmlsbGFtYWlsJywgJ21haWxkcm9wJywgJ3NtYWlsLXB3JywgJ2Jvb21saWZ5JywgJ21pbm1haWwnLCAndmlwLTIxNScsICdhbm9uYm94JywgJ2Zha2UtbGVnYWwnXTtcblxuLyoqXG4gKiDmuKDpgZPkv6Hmga/vvIzljIXlkKvmuKDpgZPmoIfor4bjgIHmmL7npLrlkI3np7Dlkozlr7nlupTnvZHnq5lcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDaGFubmVsSW5mbyB7XG4gIC8qKiDmuKDpgZPmoIfor4YgKi9cbiAgY2hhbm5lbDogQ2hhbm5lbDtcbiAgLyoqIOa4oOmBk+aYvuekuuWQjeensCAqL1xuICBuYW1lOiBzdHJpbmc7XG4gIC8qKiDlr7nlupTnmoTkuLTml7bpgq7nrrHmnI3liqHnvZHnq5kgKi9cbiAgd2Vic2l0ZTogc3RyaW5nO1xufVxuXG4vKiog5rig6YGT5L+h5oGv5pig5bCE6KGoICovXG5jb25zdCBjaGFubmVsSW5mb01hcDogUmVjb3JkPENoYW5uZWwsIENoYW5uZWxJbmZvPiA9IHtcbiAgJ3RlbXBtYWlsJzogeyBjaGFubmVsOiAndGVtcG1haWwnLCBuYW1lOiAnVGVtcE1haWwnLCB3ZWJzaXRlOiAndGVtcG1haWwuaW5nJyB9LFxuICAnbGluc2hpLWVtYWlsJzogeyBjaGFubmVsOiAnbGluc2hpLWVtYWlsJywgbmFtZTogJ+S4tOaXtumCrueusScsIHdlYnNpdGU6ICdsaW5zaGktZW1haWwuY29tJyB9LFxuICAnbGluc2hpeW91JzogeyBjaGFubmVsOiAnbGluc2hpeW91JywgbmFtZTogJ+S4tOaXtumCricsIHdlYnNpdGU6ICdsaW5zaGl5b3UuY29tJyB9LFxuICAndGVtcG1haWwtbG9sJzogeyBjaGFubmVsOiAndGVtcG1haWwtbG9sJywgbmFtZTogJ1RlbXBNYWlsIExPTCcsIHdlYnNpdGU6ICd0ZW1wbWFpbC5sb2wnIH0sXG4gICdjaGF0Z3B0LW9yZy11ayc6IHsgY2hhbm5lbDogJ2NoYXRncHQtb3JnLXVrJywgbmFtZTogJ0NoYXRHUFQgTWFpbCcsIHdlYnNpdGU6ICdtYWlsLmNoYXRncHQub3JnLnVrJyB9LFxuICAndGVtcC1tYWlsLWlvJzogeyBjaGFubmVsOiAndGVtcC1tYWlsLWlvJywgbmFtZTogJ1RlbXAgTWFpbCBJTycsIHdlYnNpdGU6ICd0ZW1wLW1haWwuaW8nIH0sXG4gICdhd2FtYWlsJzogeyBjaGFubmVsOiAnYXdhbWFpbCcsIG5hbWU6ICdBd2FNYWlsJywgd2Vic2l0ZTogJ2F3YW1haWwuY29tJyB9LFxuICAndGVtcG9yYXJ5LWVtYWlsLW9yZyc6IHsgY2hhbm5lbDogJ3RlbXBvcmFyeS1lbWFpbC1vcmcnLCBuYW1lOiAnVGVtcG9yYXJ5IEVtYWlsJywgd2Vic2l0ZTogJ3RlbXBvcmFyeS1lbWFpbC5vcmcnIH0sXG4gICdtYWlsLXRtJzogeyBjaGFubmVsOiAnbWFpbC10bScsIG5hbWU6ICdNYWlsLnRtJywgd2Vic2l0ZTogJ21haWwudG0nIH0sXG4gICdkcm9wbWFpbCc6IHsgY2hhbm5lbDogJ2Ryb3BtYWlsJywgbmFtZTogJ0Ryb3BNYWlsJywgd2Vic2l0ZTogJ2Ryb3BtYWlsLm1lJyB9LFxuICAnZ3VlcnJpbGxhbWFpbCc6IHsgY2hhbm5lbDogJ2d1ZXJyaWxsYW1haWwnLCBuYW1lOiAnR3VlcnJpbGxhIE1haWwnLCB3ZWJzaXRlOiAnZ3VlcnJpbGxhbWFpbC5jb20nIH0sXG4gICdtYWlsZHJvcCc6IHsgY2hhbm5lbDogJ21haWxkcm9wJywgbmFtZTogJ01haWxkcm9wJywgd2Vic2l0ZTogJ21haWxkcm9wLmN4JyB9LFxuICAnc21haWwtcHcnOiB7IGNoYW5uZWw6ICdzbWFpbC1wdycsIG5hbWU6ICdTbWFpbC5wdycsIHdlYnNpdGU6ICdzbWFpbC5wdycgfSxcbiAgJ2Jvb21saWZ5JzogeyBjaGFubmVsOiAnYm9vbWxpZnknLCBuYW1lOiAnQm9vbWxpZnknLCB3ZWJzaXRlOiAnYm9vbWxpZnkuY29tJyB9LFxuICAnbWlubWFpbCc6IHsgY2hhbm5lbDogJ21pbm1haWwnLCBuYW1lOiAnTWluTWFpbCcsIHdlYnNpdGU6ICdtaW5tYWlsLmFwcCcgfSxcbiAgJ21mZmFjJzogeyBjaGFubmVsOiAnbWZmYWMnLCBuYW1lOiAnTUZGQUMnLCB3ZWJzaXRlOiAnbWZmYWMuY29tJyB9LFxuICAndmlwLTIxNSc6IHsgY2hhbm5lbDogJ3ZpcC0yMTUnLCBuYW1lOiAnVklQIDIxNScsIHdlYnNpdGU6ICd2aXAuMjE1LmltJyB9LFxuICAnYW5vbmJveCc6IHsgY2hhbm5lbDogJ2Fub25ib3gnLCBuYW1lOiAnQW5vbmJveCcsIHdlYnNpdGU6ICdhbm9uYm94Lm5ldCcgfSxcbiAgJ2Zha2UtbGVnYWwnOiB7IGNoYW5uZWw6ICdmYWtlLWxlZ2FsJywgbmFtZTogJ0Zha2UgTGVnYWwnLCB3ZWJzaXRlOiAnZmFrZS5sZWdhbCcgfSxcbn07XG5cbi8qKlxuICog6I635Y+W5omA5pyJ5pSv5oyB55qE5rig6YGT5YiX6KGoXG4gKlxuICogQHJldHVybnMg5omA5pyJ5rig6YGT55qE5L+h5oGv5pWw57uEXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBjb25zdCBjaGFubmVscyA9IGxpc3RDaGFubmVscygpO1xuICogY2hhbm5lbHMuZm9yRWFjaChjaCA9PiBjb25zb2xlLmxvZyhgJHtjaC5uYW1lfSAoJHtjaC53ZWJzaXRlfSlgKSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxpc3RDaGFubmVscygpOiBDaGFubmVsSW5mb1tdIHtcbiAgcmV0dXJuIGFsbENoYW5uZWxzLm1hcChjaCA9PiBjaGFubmVsSW5mb01hcFtjaF0pO1xufVxuXG4vKipcbiAqIOiOt+WPluaMh+Wumua4oOmBk+eahOivpue7huS/oeaBr1xuICpcbiAqIEBwYXJhbSBjaGFubmVsIC0g5rig6YGT5qCH6K+GXG4gKiBAcmV0dXJucyDmuKDpgZPkv6Hmga/vvIzkuI3lrZjlnKjml7bov5Tlm54gdW5kZWZpbmVkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDaGFubmVsSW5mbyhjaGFubmVsOiBDaGFubmVsKTogQ2hhbm5lbEluZm8gfCB1bmRlZmluZWQge1xuICByZXR1cm4gY2hhbm5lbEluZm9NYXBbY2hhbm5lbF07XG59XG5cbi8qKlxuICog5Yib5bu65Li05pe26YKu566xXG4gKlxuICog6ZSZ6K+v5aSE55CG562W55Wl77yaXG4gKiAtIOaMh+Wumua4oOmBk+Wksei0peaXtu+8jOm7mOiupOiHquWKqOWwneivleWFtuS7luWPr+eUqOa4oOmBk++8iOaJk+S5semhuuW6j+mAkOS4quWwneivle+8iVxuICogLSBgY2hhbm5lbEZhbGxiYWNrOiBmYWxzZWAg5LiU5oyH5a6a5LqGIGBjaGFubmVsYCDml7bvvIzku4XlsJ3or5Xor6XmuKDpgZPvvIzlpLHotKXljbPov5Tlm54gbnVsbFxuICogLSDmnKrmjIflrprmuKDpgZPml7bvvIzmiZPkubHlhajpg6jmuKDpgZPpgJDkuKrlsJ3or5XvvIznm7TliLDmiJDlip9cbiAqIC0g5omA5pyJ5rig6YGT5Z2H5LiN5Y+v55So5pe26L+U5ZueIG51bGzvvIjkuI3mipvlh7rlvILluLjvvIlcbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIOWIm+W7uumAiemhue+8jOWPr+aMh+Wumua4oOmBk+OAgeacieaViOaXtumVv+OAgeWfn+WQjeetiVxuICogQHJldHVybnMg6YKu566x5L+h5oGv77yM5omA5pyJ5rig6YGT5Z2H5LiN5Y+v55So5pe26L+U5ZueIG51bGxcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGNvbnN0IGVtYWlsSW5mbyA9IGF3YWl0IGdlbmVyYXRlRW1haWwoeyBjaGFubmVsOiAndGVtcC1tYWlsLWlvJyB9KTtcbiAqIGlmIChlbWFpbEluZm8pIGNvbnNvbGUubG9nKGVtYWlsSW5mby5lbWFpbCk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlRW1haWwob3B0aW9uczogR2VuZXJhdGVFbWFpbE9wdGlvbnMgPSB7fSk6IFByb21pc2U8RW1haWxJbmZvIHwgbnVsbD4ge1xuICAvKlxuICAgKiDmnoTlu7rlsJ3or5Xpobrluo/vvJpcbiAgICogLSDmjIflrprmuKDpgZMg4oaSIOS8mOWFiOWwneivleivpea4oOmBk++8jOWksei0peWQjumaj+acuuWwneivleWFtuS7lua4oOmBk1xuICAgKiAtIOacquaMh+WumiDihpIg5omT5Lmx5YWo6YOo5rig6YGT6YCQ5Liq5bCd6K+VXG4gICAqL1xuICBjb25zdCBhbGxvd0ZhbGxiYWNrID0gb3B0aW9ucy5jaGFubmVsRmFsbGJhY2sgIT09IGZhbHNlO1xuICBjb25zdCB0cnlPcmRlciA9IGJ1aWxkQ2hhbm5lbE9yZGVyKG9wdGlvbnMuY2hhbm5lbCwgYWxsb3dGYWxsYmFjayk7XG5cbiAgZm9yIChjb25zdCBjaCBvZiB0cnlPcmRlcikge1xuICAgIGxvZ2dlci5pbmZvKGDliJvlu7rkuLTml7bpgq7nrrEsIOa4oOmBkzogJHtjaH1gKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgaW50ZXJuYWw6IEludGVybmFsRW1haWxJbmZvID0gYXdhaXQgd2l0aFJldHJ5KCgpID0+IGdlbmVyYXRlRW1haWxPbmNlKGNoLCBvcHRpb25zKSwgb3B0aW9ucy5yZXRyeSk7XG4gICAgICBsb2dnZXIuaW5mbyhg6YKu566x5Yib5bu65oiQ5YqfOiAke2ludGVybmFsLmVtYWlsfSAo5rig6YGTOiAke2NofSlgKTtcblxuICAgICAgLyog5bCGIHRva2VuIOWtmOWFpeWGhemDqOWtmOWCqO+8jOS4jeaatOmcsue7meeUqOaItyAqL1xuICAgICAgY29uc3QgcHVibGljSW5mbzogRW1haWxJbmZvID0ge1xuICAgICAgICBjaGFubmVsOiBpbnRlcm5hbC5jaGFubmVsLFxuICAgICAgICBlbWFpbDogaW50ZXJuYWwuZW1haWwsXG4gICAgICAgIGV4cGlyZXNBdDogaW50ZXJuYWwuZXhwaXJlc0F0LFxuICAgICAgICBjcmVhdGVkQXQ6IGludGVybmFsLmNyZWF0ZWRBdCxcbiAgICAgIH07XG4gICAgICBpZiAoaW50ZXJuYWwudG9rZW4pIHtcbiAgICAgICAgdG9rZW5TdG9yZS5zZXQocHVibGljSW5mbywgaW50ZXJuYWwudG9rZW4pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHB1YmxpY0luZm87XG4gICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgIGxvZ2dlci53YXJuKGDmuKDpgZMgJHtjaH0g5LiN5Y+v55SoOiAke2Vyci5tZXNzYWdlIHx8IGVycn3vvIzlsJ3or5XkuIvkuIDkuKrmuKDpgZNgKTtcbiAgICB9XG4gIH1cblxuICBsb2dnZXIuZXJyb3IoJ+aJgOaciea4oOmBk+Wdh+S4jeWPr+eUqO+8jOWIm+W7uumCrueuseWksei0pScpO1xuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiDmnoTlu7rmuKDpgZPlsJ3or5Xpobrluo9cbiAqIOaMh+Wumua4oOmBk+aXtuS8mOWFiOWwneivleivpea4oOmBk++8jOWFtuS9mea4oOmBk+aJk+S5sei/veWKoFxuICog5pyq5oyH5a6a5pe25omT5Lmx5YWo6YOo5rig6YGTXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkQ2hhbm5lbE9yZGVyKHByZWZlcnJlZD86IENoYW5uZWwsIGFsbG93RmFsbGJhY2sgPSB0cnVlKTogQ2hhbm5lbFtdIHtcbiAgY29uc3Qgc2h1ZmZsZWQgPSBbLi4uYWxsQ2hhbm5lbHNdLnNvcnQoKCkgPT4gTWF0aC5yYW5kb20oKSAtIDAuNSk7XG4gIGlmICghcHJlZmVycmVkKSB7XG4gICAgcmV0dXJuIHNodWZmbGVkO1xuICB9XG4gIGlmICghYWxsb3dGYWxsYmFjaykge1xuICAgIHJldHVybiBbcHJlZmVycmVkXTtcbiAgfVxuICBjb25zdCByZXN0ID0gc2h1ZmZsZWQuZmlsdGVyKGNoID0+IGNoICE9PSBwcmVmZXJyZWQpO1xuICByZXR1cm4gW3ByZWZlcnJlZCwgLi4ucmVzdF07XG59XG5cbi8qKlxuICog5Y2V5qyh5Yib5bu66YKu566x77yI5LiN5ZCr6YeN6K+V6YC76L6R77yJXG4gKiDmoLnmja7muKDpgZPnsbvlnovliIblj5HliLDlr7nlupTnmoQgcHJvdmlkZXIg5a6e546wXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlRW1haWxPbmNlKGNoYW5uZWw6IENoYW5uZWwsIG9wdGlvbnM6IEdlbmVyYXRlRW1haWxPcHRpb25zKTogUHJvbWlzZTxJbnRlcm5hbEVtYWlsSW5mbz4ge1xuICBzd2l0Y2ggKGNoYW5uZWwpIHtcbiAgICBjYXNlICd0ZW1wbWFpbCc6XG4gICAgICByZXR1cm4gdGVtcG1haWwuZ2VuZXJhdGVFbWFpbChvcHRpb25zLmR1cmF0aW9uIHx8IDMwKTtcbiAgICBjYXNlICdsaW5zaGktZW1haWwnOlxuICAgICAgcmV0dXJuIGxpbnNoaUVtYWlsLmdlbmVyYXRlRW1haWwoKTtcbiAgICBjYXNlICdsaW5zaGl5b3UnOlxuICAgICAgcmV0dXJuIGxpbnNoaXlvdS5nZW5lcmF0ZUVtYWlsKCk7XG4gICAgY2FzZSAndGVtcG1haWwtbG9sJzpcbiAgICAgIHJldHVybiB0ZW1wbWFpbExvbC5nZW5lcmF0ZUVtYWlsKG9wdGlvbnMuZG9tYWluIHx8IG51bGwpO1xuICAgIGNhc2UgJ2NoYXRncHQtb3JnLXVrJzpcbiAgICAgIHJldHVybiBjaGF0Z3B0T3JnVWsuZ2VuZXJhdGVFbWFpbCgpO1xuICAgIGNhc2UgJ3RlbXAtbWFpbC1pbyc6XG4gICAgICByZXR1cm4gdGVtcE1haWxJTy5nZW5lcmF0ZUVtYWlsKCk7XG4gICAgY2FzZSAnYXdhbWFpbCc6XG4gICAgICByZXR1cm4gYXdhbWFpbC5nZW5lcmF0ZUVtYWlsKCk7XG4gICAgY2FzZSAndGVtcG9yYXJ5LWVtYWlsLW9yZyc6XG4gICAgICByZXR1cm4gdGVtcG9yYXJ5RW1haWxPcmcuZ2VuZXJhdGVFbWFpbCgpO1xuICAgIGNhc2UgJ21haWwtdG0nOlxuICAgICAgcmV0dXJuIG1haWxUbS5nZW5lcmF0ZUVtYWlsKCk7XG4gICAgY2FzZSAnZHJvcG1haWwnOlxuICAgICAgcmV0dXJuIGRyb3BtYWlsLmdlbmVyYXRlRW1haWwoKTtcbiAgICBjYXNlICdndWVycmlsbGFtYWlsJzpcbiAgICAgIHJldHVybiBndWVycmlsbGFtYWlsLmdlbmVyYXRlRW1haWwoKTtcbiAgICBjYXNlICdtYWlsZHJvcCc6XG4gICAgICByZXR1cm4gbWFpbGRyb3BQcm92aWRlci5nZW5lcmF0ZUVtYWlsKG9wdGlvbnMuZG9tYWluID8/IG51bGwpO1xuICAgIGNhc2UgJ3NtYWlsLXB3JzpcbiAgICAgIHJldHVybiBzbWFpbFB3LmdlbmVyYXRlRW1haWwoKTtcbiAgICBjYXNlICdib29tbGlmeSc6XG4gICAgICByZXR1cm4gYm9vbWxpZnkuZ2VuZXJhdGVFbWFpbCgpO1xuICAgIGNhc2UgJ21mZmFjJzpcbiAgICAgIHJldHVybiBtZmZhYy5nZW5lcmF0ZUVtYWlsKCk7XG4gICAgY2FzZSAnbWlubWFpbCc6XG4gICAgICByZXR1cm4gbWlubWFpbC5nZW5lcmF0ZUVtYWlsKCk7XG4gICAgY2FzZSAndmlwLTIxNSc6XG4gICAgICByZXR1cm4gdmlwMjE1LmdlbmVyYXRlRW1haWwoKTtcbiAgICBjYXNlICdhbm9uYm94JzpcbiAgICAgIHJldHVybiBhbm9uYm94LmdlbmVyYXRlRW1haWwoKTtcbiAgICBjYXNlICdmYWtlLWxlZ2FsJzpcbiAgICAgIHJldHVybiBmYWtlTGVnYWwuZ2VuZXJhdGVFbWFpbChvcHRpb25zLmRvbWFpbiA/PyBudWxsKTtcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGNoYW5uZWw6ICR7Y2hhbm5lbH1gKTtcbiAgfVxufVxuXG4vKipcbiAqIOiOt+WPlumCruS7tuWIl+ihqFxuICogQ2hhbm5lbC9FbWFpbC9Ub2tlbiDnrYnnlLEgU0RLIOS7jiBFbWFpbEluZm8g5Lit6Ieq5Yqo6I635Y+W77yM55So5oi35peg6ZyA5omL5Yqo5Lyg6YCSXG4gKlxuICog6ZSZ6K+v5aSE55CG562W55Wl77yaXG4gKiAtIOe9kee7nOmUmeivr+OAgei2heaXtuOAgTQyOeOAgeacjeWKoeerryA1eHgg6ZSZ6K+vIOKGkiDoh6rliqjph43or5XvvIjpu5jorqQgMiDmrKHvvIlcbiAqIC0g6YeN6K+V6ICX5bC95ZCO6L+U5ZueIHsgc3VjY2VzczogZmFsc2UsIGVtYWlsczogW10gfe+8jOS4jeaKm+W8guW4uFxuICogLSDlj4LmlbDmoKHpqozplJnor6/vvIjnvLrlsJEgRW1haWxJbmZv77yJ55u05o6l5oqb5Ye6XG4gKlxuICogQHBhcmFtIGluZm8gLSBHZW5lcmF0ZUVtYWlsKCkg6L+U5Zue55qE6YKu566x5L+h5oGvXG4gKiBAcGFyYW0gb3B0aW9ucyAtIOWPr+mAiemFjee9ru+8iOmHjeivleetie+8iVxuICogQHJldHVybnMg6YKu5Lu257uT5p6c77yM5YyF5ZCrIHN1Y2Nlc3Mg5qCH6K6w5ZKM6YKu5Lu25YiX6KGoXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBjb25zdCBpbmZvID0gYXdhaXQgZ2VuZXJhdGVFbWFpbCh7IGNoYW5uZWw6ICdtYWlsLXRtJyB9KTtcbiAqIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGdldEVtYWlscyhpbmZvKTtcbiAqIGlmIChyZXN1bHQuc3VjY2VzcyAmJiByZXN1bHQuZW1haWxzLmxlbmd0aCA+IDApIHtcbiAqICAgY29uc29sZS5sb2coJ+aUtuWIsOmCruS7tjonLCByZXN1bHQuZW1haWxzWzBdLnN1YmplY3QpO1xuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRFbWFpbHMoaW5mbzogRW1haWxJbmZvLCBvcHRpb25zPzogR2V0RW1haWxzT3B0aW9ucyk6IFByb21pc2U8R2V0RW1haWxzUmVzdWx0PiB7XG4gIGlmICghaW5mbykge1xuICAgIHRocm93IG5ldyBFcnJvcignRW1haWxJbmZvIGlzIHJlcXVpcmVkLCBjYWxsIGdlbmVyYXRlRW1haWwoKSBmaXJzdCcpO1xuICB9XG5cbiAgY29uc3QgeyBjaGFubmVsLCBlbWFpbCB9ID0gaW5mbztcbiAgY29uc3QgdG9rZW4gPSB0b2tlblN0b3JlLmdldChpbmZvKTtcblxuICBpZiAoIWNoYW5uZWwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NoYW5uZWwgaXMgcmVxdWlyZWQnKTtcbiAgfVxuICBpZiAoIWVtYWlsICYmIGNoYW5uZWwgIT09ICd0ZW1wbWFpbC1sb2wnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdFbWFpbCBpcyByZXF1aXJlZCcpO1xuICB9XG5cbiAgbG9nZ2VyLmRlYnVnKGDojrflj5bpgq7ku7YsIOa4oOmBkzogJHtjaGFubmVsfSwg6YKu566xOiAke2VtYWlsfWApO1xuICB0cnkge1xuICAgIGNvbnN0IGVtYWlscyA9IGF3YWl0IHdpdGhSZXRyeSgoKSA9PiBnZXRFbWFpbHNPbmNlKGNoYW5uZWwsIGVtYWlsLCB0b2tlbiksIG9wdGlvbnM/LnJldHJ5KTtcbiAgICBpZiAoZW1haWxzLmxlbmd0aCA+IDApIHtcbiAgICAgIGxvZ2dlci5pbmZvKGDojrflj5bliLAgJHtlbWFpbHMubGVuZ3RofSDlsIHpgq7ku7YsIOa4oOmBkzogJHtjaGFubmVsfWApO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2dnZXIuZGVidWcoYOaaguaXoOmCruS7tiwg5rig6YGTOiAke2NoYW5uZWx9YCk7XG4gICAgfVxuICAgIHJldHVybiB7IGNoYW5uZWwsIGVtYWlsLCBlbWFpbHMsIHN1Y2Nlc3M6IHRydWUgfTtcbiAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAvKlxuICAgICAqIOmHjeivleiAl+WwveWQjuS7jeeEtuWksei0pSDihpIg6L+U5Zue56m657uT5p6c6ICM6Z2e5oqb5byC5bi4XG4gICAgICog6L+Z5qC36LCD55So5pa55Zyo6L2u6K+i5Zy65pmv5LiL5LiN5Lya5Zug5Li65LiA5qyh572R57uc5rOi5Yqo6ICM5Lit5pat5pW05Liq5rWB56iLXG4gICAgICovXG4gICAgbG9nZ2VyLmVycm9yKGDojrflj5bpgq7ku7blpLHotKUsIOa4oOmBkzogJHtjaGFubmVsfSwg6ZSZ6K+vOiAke2Vyci5tZXNzYWdlIHx8IGVycn1gKTtcbiAgICByZXR1cm4geyBjaGFubmVsLCBlbWFpbCwgZW1haWxzOiBbXSwgc3VjY2VzczogZmFsc2UgfTtcbiAgfVxufVxuXG4vKipcbiAqIOWNleasoeiOt+WPlumCruS7tu+8iOS4jeWQq+mHjeivlemAu+i+ke+8iVxuICog5qC55o2u5rig6YGT57G75Z6L5YiG5Y+R5Yiw5a+55bqU55qEIHByb3ZpZGVyIOWunueOsO+8jOW5tuagoemqjOW/hemcgOeahCB0b2tlbiDlj4LmlbBcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0RW1haWxzT25jZShjaGFubmVsOiBDaGFubmVsLCBlbWFpbDogc3RyaW5nLCB0b2tlbj86IHN0cmluZyk6IFByb21pc2U8RW1haWxbXT4ge1xuICBzd2l0Y2ggKGNoYW5uZWwpIHtcbiAgICBjYXNlICd0ZW1wbWFpbCc6XG4gICAgICByZXR1cm4gdGVtcG1haWwuZ2V0RW1haWxzKGVtYWlsKTtcbiAgICBjYXNlICdsaW5zaGktZW1haWwnOlxuICAgICAgaWYgKCF0b2tlbikgdGhyb3cgbmV3IEVycm9yKCdpbnRlcm5hbCBlcnJvcjogdG9rZW4gbWlzc2luZyBmb3IgbGluc2hpLWVtYWlsJyk7XG4gICAgICByZXR1cm4gbGluc2hpRW1haWwuZ2V0RW1haWxzKGVtYWlsLCB0b2tlbik7XG4gICAgY2FzZSAnbGluc2hpeW91JzpcbiAgICAgIGlmICghdG9rZW4pIHRocm93IG5ldyBFcnJvcignaW50ZXJuYWwgZXJyb3I6IHRva2VuIG1pc3NpbmcgZm9yIGxpbnNoaXlvdScpO1xuICAgICAgcmV0dXJuIGxpbnNoaXlvdS5nZXRFbWFpbHModG9rZW4sIGVtYWlsKTtcbiAgICBjYXNlICd0ZW1wbWFpbC1sb2wnOlxuICAgICAgaWYgKCF0b2tlbikgdGhyb3cgbmV3IEVycm9yKCdpbnRlcm5hbCBlcnJvcjogdG9rZW4gbWlzc2luZyBmb3IgdGVtcG1haWwtbG9sJyk7XG4gICAgICByZXR1cm4gdGVtcG1haWxMb2wuZ2V0RW1haWxzKHRva2VuLCBlbWFpbCk7XG4gICAgY2FzZSAnY2hhdGdwdC1vcmctdWsnOlxuICAgICAgaWYgKCF0b2tlbikgdGhyb3cgbmV3IEVycm9yKCdpbnRlcm5hbCBlcnJvcjogdG9rZW4gbWlzc2luZyBmb3IgY2hhdGdwdC1vcmctdWsnKTtcbiAgICAgIHJldHVybiBjaGF0Z3B0T3JnVWsuZ2V0RW1haWxzKHRva2VuLCBlbWFpbCk7XG4gICAgY2FzZSAndGVtcC1tYWlsLWlvJzpcbiAgICAgIHJldHVybiB0ZW1wTWFpbElPLmdldEVtYWlscyhlbWFpbCk7XG4gICAgY2FzZSAnYXdhbWFpbCc6XG4gICAgICBpZiAoIXRva2VuKSB0aHJvdyBuZXcgRXJyb3IoJ2ludGVybmFsIGVycm9yOiB0b2tlbiBtaXNzaW5nIGZvciBhd2FtYWlsJyk7XG4gICAgICByZXR1cm4gYXdhbWFpbC5nZXRFbWFpbHModG9rZW4sIGVtYWlsKTtcbiAgICBjYXNlICd0ZW1wb3JhcnktZW1haWwtb3JnJzpcbiAgICAgIGlmICghdG9rZW4pIHRocm93IG5ldyBFcnJvcignaW50ZXJuYWwgZXJyb3I6IHRva2VuIG1pc3NpbmcgZm9yIHRlbXBvcmFyeS1lbWFpbC1vcmcnKTtcbiAgICAgIHJldHVybiB0ZW1wb3JhcnlFbWFpbE9yZy5nZXRFbWFpbHMoZW1haWwsIHRva2VuKTtcbiAgICBjYXNlICdtYWlsLXRtJzpcbiAgICAgIGlmICghdG9rZW4pIHRocm93IG5ldyBFcnJvcignaW50ZXJuYWwgZXJyb3I6IHRva2VuIG1pc3NpbmcgZm9yIG1haWwtdG0nKTtcbiAgICAgIHJldHVybiBtYWlsVG0uZ2V0RW1haWxzKHRva2VuLCBlbWFpbCk7XG4gICAgY2FzZSAnZHJvcG1haWwnOlxuICAgICAgaWYgKCF0b2tlbikgdGhyb3cgbmV3IEVycm9yKCdpbnRlcm5hbCBlcnJvcjogdG9rZW4gbWlzc2luZyBmb3IgZHJvcG1haWwnKTtcbiAgICAgIHJldHVybiBkcm9wbWFpbC5nZXRFbWFpbHModG9rZW4sIGVtYWlsKTtcbiAgICBjYXNlICdndWVycmlsbGFtYWlsJzpcbiAgICAgIGlmICghdG9rZW4pIHRocm93IG5ldyBFcnJvcignaW50ZXJuYWwgZXJyb3I6IHRva2VuIG1pc3NpbmcgZm9yIGd1ZXJyaWxsYW1haWwnKTtcbiAgICAgIHJldHVybiBndWVycmlsbGFtYWlsLmdldEVtYWlscyh0b2tlbiwgZW1haWwpO1xuICAgIGNhc2UgJ21haWxkcm9wJzpcbiAgICAgIGlmICghdG9rZW4pIHRocm93IG5ldyBFcnJvcignaW50ZXJuYWwgZXJyb3I6IHRva2VuIG1pc3NpbmcgZm9yIG1haWxkcm9wJyk7XG4gICAgICByZXR1cm4gbWFpbGRyb3BQcm92aWRlci5nZXRFbWFpbHModG9rZW4sIGVtYWlsKTtcbiAgICBjYXNlICdzbWFpbC1wdyc6XG4gICAgICBpZiAoIXRva2VuKSB0aHJvdyBuZXcgRXJyb3IoJ2ludGVybmFsIGVycm9yOiB0b2tlbiBtaXNzaW5nIGZvciBzbWFpbC1wdycpO1xuICAgICAgcmV0dXJuIHNtYWlsUHcuZ2V0RW1haWxzKHRva2VuLCBlbWFpbCk7XG4gICAgY2FzZSAnYm9vbWxpZnknOlxuICAgICAgcmV0dXJuIGJvb21saWZ5LmdldEVtYWlscyhlbWFpbCk7XG4gICAgY2FzZSAnbWZmYWMnOlxuICAgICAgcmV0dXJuIG1mZmFjLmdldEVtYWlscyhlbWFpbCwgdG9rZW4pO1xuICAgIGNhc2UgJ21pbm1haWwnOlxuICAgICAgaWYgKCF0b2tlbikgdGhyb3cgbmV3IEVycm9yKCdpbnRlcm5hbCBlcnJvcjogdG9rZW4gbWlzc2luZyBmb3IgbWlubWFpbCcpO1xuICAgICAgcmV0dXJuIG1pbm1haWwuZ2V0RW1haWxzKGVtYWlsLCB0b2tlbik7XG4gICAgY2FzZSAndmlwLTIxNSc6XG4gICAgICBpZiAoIXRva2VuKSB0aHJvdyBuZXcgRXJyb3IoJ2ludGVybmFsIGVycm9yOiB0b2tlbiBtaXNzaW5nIGZvciB2aXAtMjE1Jyk7XG4gICAgICByZXR1cm4gdmlwMjE1LmdldEVtYWlscyh0b2tlbiwgZW1haWwpO1xuICAgIGNhc2UgJ2Fub25ib3gnOlxuICAgICAgaWYgKCF0b2tlbikgdGhyb3cgbmV3IEVycm9yKCdpbnRlcm5hbCBlcnJvcjogdG9rZW4gbWlzc2luZyBmb3IgYW5vbmJveCcpO1xuICAgICAgcmV0dXJuIGFub25ib3guZ2V0RW1haWxzKHRva2VuLCBlbWFpbCk7XG4gICAgY2FzZSAnZmFrZS1sZWdhbCc6XG4gICAgICByZXR1cm4gZmFrZUxlZ2FsLmdldEVtYWlscyhlbWFpbCk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBjaGFubmVsOiAke2NoYW5uZWx9YCk7XG4gIH1cbn1cblxuLyoqXG4gKiDkuLTml7bpgq7nrrHlrqLmiLfnq69cbiAqIOWwgeijheS6humCrueuseWIm+W7uuWSjOmCruS7tuiOt+WPlueahOWujOaVtOa1geeoi++8jOiHquWKqOeuoeeQhumCrueuseS/oeaBr+WSjOiupOivgeS7pOeJjFxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3QgY2xpZW50ID0gbmV3IFRlbXBFbWFpbENsaWVudCgpO1xuICogY29uc3QgZW1haWxJbmZvID0gYXdhaXQgY2xpZW50LmdlbmVyYXRlKHsgY2hhbm5lbDogJ21haWwtdG0nIH0pO1xuICogY29uc29sZS5sb2coJ+mCrueusTonLCBlbWFpbEluZm8uZW1haWwpO1xuICpcbiAqIC8vIOi9ruivouiOt+WPlumCruS7tlxuICogY29uc3QgcmVzdWx0ID0gYXdhaXQgY2xpZW50LmdldEVtYWlscygpO1xuICogaWYgKHJlc3VsdC5zdWNjZXNzKSB7XG4gKiAgIGNvbnNvbGUubG9nKCfpgq7ku7bmlbA6JywgcmVzdWx0LmVtYWlscy5sZW5ndGgpO1xuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCBjbGFzcyBUZW1wRW1haWxDbGllbnQge1xuICBwcml2YXRlIGVtYWlsSW5mbzogRW1haWxJbmZvIHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqXG4gICAqIOWIm+W7uuS4tOaXtumCrueuseW5tue8k+WtmOmCrueuseS/oeaBr1xuICAgKiDlkI7nu63osIPnlKggZ2V0RW1haWxzKCkg5pe26Ieq5Yqo5L2/55So5q2k6YKu566x55qE5rig6YGT44CB5Zyw5Z2A5ZKM5Luk54mMXG4gICAqIOaJgOaciea4oOmBk+Wdh+S4jeWPr+eUqOaXtui/lOWbniBudWxsXG4gICAqL1xuICBhc3luYyBnZW5lcmF0ZShvcHRpb25zOiBHZW5lcmF0ZUVtYWlsT3B0aW9ucyA9IHt9KTogUHJvbWlzZTxFbWFpbEluZm8gfCBudWxsPiB7XG4gICAgdGhpcy5lbWFpbEluZm8gPSBhd2FpdCBnZW5lcmF0ZUVtYWlsKG9wdGlvbnMpO1xuICAgIHJldHVybiB0aGlzLmVtYWlsSW5mbztcbiAgfVxuXG4gIC8qKlxuICAgKiDojrflj5blvZPliY3pgq7nrrHnmoTpgq7ku7bliJfooahcbiAgICog5b+F6aG75YWI6LCD55SoIGdlbmVyYXRlKCkg5Yib5bu66YKu566xXG4gICAqXG4gICAqIEB0aHJvd3Mg5pyq6LCD55SoIGdlbmVyYXRlKCkg5pe25oqb5Ye65byC5bi4XG4gICAqL1xuICBhc3luYyBnZXRFbWFpbHMob3B0aW9ucz86IEdldEVtYWlsc09wdGlvbnMpOiBQcm9taXNlPEdldEVtYWlsc1Jlc3VsdD4ge1xuICAgIGlmICghdGhpcy5lbWFpbEluZm8pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm8gZW1haWwgZ2VuZXJhdGVkLiBDYWxsIGdlbmVyYXRlKCkgZmlyc3QuJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGdldEVtYWlscyh0aGlzLmVtYWlsSW5mbywgb3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICog6I635Y+W5b2T5YmN57yT5a2Y55qE6YKu566x5L+h5oGvXG4gICAqIOacquiwg+eUqCBnZW5lcmF0ZSgpIOaXtui/lOWbniBudWxsXG4gICAqL1xuICBnZXRFbWFpbEluZm8oKTogRW1haWxJbmZvIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuZW1haWxJbmZvO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbGlzdENoYW5uZWxzLFxuICBnZXRDaGFubmVsSW5mbyxcbiAgZ2VuZXJhdGVFbWFpbCxcbiAgZ2V0RW1haWxzLFxuICBUZW1wRW1haWxDbGllbnQsXG4gIHNldENvbmZpZyxcbiAgZ2V0Q29uZmlnLFxufTtcbiJdfQ==
|
|
446
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBZ0dBLG9DQUVDO0FBUUQsd0NBRUM7QUFvQkQsc0NBaUNDO0FBMEZELDhCQWdDQztBQTNSRCwrREFBaUQ7QUFDakQsc0VBQXdEO0FBQ3hELGlFQUFtRDtBQUNuRCx5REFBMkM7QUFDM0Msc0VBQXdEO0FBQ3hELHlFQUEyRDtBQUMzRCxxRUFBdUQ7QUFDdkQsNkRBQStDO0FBQy9DLG1GQUFxRTtBQUNyRSw0REFBOEM7QUFDOUMsNERBQThDO0FBQzlDLCtEQUFpRDtBQUNqRCx5RUFBMkQ7QUFDM0QsdUVBQXlEO0FBQ3pELDhEQUFnRDtBQUNoRCwrREFBaUQ7QUFDakQsNkRBQStDO0FBQy9DLDREQUE4QztBQUM5Qyw2REFBK0M7QUFDL0Msa0VBQW9EO0FBRXBELG1DQUFvQztBQUNwQyxxQ0FBa0M7QUFDbEMscUNBQWdEO0FBSWhEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLEdBQUcsSUFBSSxPQUFPLEVBQXFCLENBQUM7QUFDcEQseUNBQTZDO0FBQXBDLDJHQUFBLGNBQWMsT0FBQTtBQUN2QixpQ0FBb0U7QUFBM0Qsa0dBQUEsU0FBUyxPQUFBO0FBQUUseUdBQUEsZ0JBQWdCLE9BQUE7QUFDcEMsbUNBQTZGO0FBQXBGLGtHQUFBLFFBQVEsT0FBQTtBQUFjLHFHQUFBLFdBQVcsT0FBQTtBQUFFLHFHQUFBLFdBQVcsT0FBQTtBQUFFLG1HQUFBLFNBQVMsT0FBQTtBQUFFLGdHQUFBLE1BQU0sT0FBQTtBQUMxRSxtQ0FBMkQ7QUFBdkMsbUdBQUEsU0FBUyxPQUFBO0FBQUUsbUdBQUEsU0FBUyxPQUFBO0FBRXhDLHlEQUtrQztBQUpoQyxzSEFBQSxzQkFBc0IsT0FBQTtBQUN0Qix3SEFBQSx3QkFBd0IsT0FBQTtBQUN4Qix3SEFBQSx3QkFBd0IsT0FBQTtBQUN4Qiw2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T0FHRztJQUNILFlBQVk7UUFDVixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztDQUNGO0FBbENELDBDQWtDQztBQUVELGtCQUFlO0lBQ2IsWUFBWTtJQUNaLGNBQWM7SUFDZCxhQUFhO0lBQ2IsU0FBUztJQUNULGVBQWU7SUFDZixTQUFTLEVBQVQsa0JBQVM7SUFDVCxTQUFTLEVBQVQsa0JBQVM7Q0FDVixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgdGVtcG1haWwgZnJvbSAnLi9wcm92aWRlcnMvdGVtcG1haWwnO1xuaW1wb3J0ICogYXMgbGluc2hpRW1haWwgZnJvbSAnLi9wcm92aWRlcnMvbGluc2hpLWVtYWlsJztcbmltcG9ydCAqIGFzIGxpbnNoaXlvdSBmcm9tICcuL3Byb3ZpZGVycy9saW5zaGl5b3UnO1xuaW1wb3J0ICogYXMgbWZmYWMgZnJvbSAnLi9wcm92aWRlcnMvbWZmYWMnO1xuaW1wb3J0ICogYXMgdGVtcG1haWxMb2wgZnJvbSAnLi9wcm92aWRlcnMvdGVtcG1haWwtbG9sJztcbmltcG9ydCAqIGFzIGNoYXRncHRPcmdVayBmcm9tICcuL3Byb3ZpZGVycy9jaGF0Z3B0LW9yZy11ayc7XG5pbXBvcnQgKiBhcyB0ZW1wTWFpbElPIGZyb20gJy4vcHJvdmlkZXJzL3RlbXAtbWFpbC1pbyc7XG5pbXBvcnQgKiBhcyBhd2FtYWlsIGZyb20gJy4vcHJvdmlkZXJzL2F3YW1haWwnO1xuaW1wb3J0ICogYXMgdGVtcG9yYXJ5RW1haWxPcmcgZnJvbSAnLi9wcm92aWRlcnMvdGVtcG9yYXJ5LWVtYWlsLW9yZyc7XG5pbXBvcnQgKiBhcyBtYWlsVG0gZnJvbSAnLi9wcm92aWRlcnMvbWFpbC10bSc7XG5pbXBvcnQgKiBhcyBtYWlsQ3ggZnJvbSAnLi9wcm92aWRlcnMvbWFpbC1jeCc7XG5pbXBvcnQgKiBhcyBkcm9wbWFpbCBmcm9tICcuL3Byb3ZpZGVycy9kcm9wbWFpbCc7XG5pbXBvcnQgKiBhcyBndWVycmlsbGFtYWlsIGZyb20gJy4vcHJvdmlkZXJzL2d1ZXJyaWxsYW1haWwnO1xuaW1wb3J0ICogYXMgbWFpbGRyb3BQcm92aWRlciBmcm9tICcuL3Byb3ZpZGVycy9tYWlsZHJvcCc7XG5pbXBvcnQgKiBhcyBzbWFpbFB3IGZyb20gJy4vcHJvdmlkZXJzL3NtYWlsLXB3JztcbmltcG9ydCAqIGFzIGJvb21saWZ5IGZyb20gJy4vcHJvdmlkZXJzL2Jvb21saWZ5JztcbmltcG9ydCAqIGFzIG1pbm1haWwgZnJvbSAnLi9wcm92aWRlcnMvbWlubWFpbCc7XG5pbXBvcnQgKiBhcyB2aXAyMTUgZnJvbSAnLi9wcm92aWRlcnMvdmlwLTIxNSc7XG5pbXBvcnQgKiBhcyBhbm9uYm94IGZyb20gJy4vcHJvdmlkZXJzL2Fub25ib3gnO1xuaW1wb3J0ICogYXMgZmFrZUxlZ2FsIGZyb20gJy4vcHJvdmlkZXJzL2Zha2UtbGVnYWwnO1xuaW1wb3J0IHsgQ2hhbm5lbCwgRW1haWxJbmZvLCBJbnRlcm5hbEVtYWlsSW5mbywgRW1haWwsIEdldEVtYWlsc1Jlc3VsdCwgR2VuZXJhdGVFbWFpbE9wdGlvbnMsIEdldEVtYWlsc09wdGlvbnMgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IHdpdGhSZXRyeSB9IGZyb20gJy4vcmV0cnknO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IHsgc2V0Q29uZmlnLCBnZXRDb25maWcgfSBmcm9tICcuL2NvbmZpZyc7XG5cbmV4cG9ydCB7IENoYW5uZWwsIEVtYWlsSW5mbywgRW1haWwsIEVtYWlsQXR0YWNobWVudCwgR2V0RW1haWxzUmVzdWx0LCBHZW5lcmF0ZUVtYWlsT3B0aW9ucywgR2V0RW1haWxzT3B0aW9ucyB9IGZyb20gJy4vdHlwZXMnO1xuXG4vKipcbiAqIFNESyDlhoXpg6ggdG9rZW4g5a2Y5YKoXG4gKiDkvb/nlKggV2Vha01hcCDlsIYgRW1haWxJbmZvIOWvueixoeaYoOWwhOWIsOWvueW6lOeahCB0b2tlblxuICog55So5oi35peg5rOV55u05o6l6K6/6ZeuIHRva2Vu77yM55SxIFNESyDoh6rliqjnrqHnkIZcbiAqIEBpbnRlcm5hbFxuICovXG5jb25zdCB0b2tlblN0b3JlID0gbmV3IFdlYWtNYXA8RW1haWxJbmZvLCBzdHJpbmc+KCk7XG5leHBvcnQgeyBub3JtYWxpemVFbWFpbCB9IGZyb20gJy4vbm9ybWFsaXplJztcbmV4cG9ydCB7IHdpdGhSZXRyeSwgZmV0Y2hXaXRoVGltZW91dCwgUmV0cnlPcHRpb25zIH0gZnJvbSAnLi9yZXRyeSc7XG5leHBvcnQgeyBMb2dMZXZlbCwgTG9nSGFuZGxlciwgc2V0TG9nTGV2ZWwsIGdldExvZ0xldmVsLCBzZXRMb2dnZXIsIGxvZ2dlciB9IGZyb20gJy4vbG9nZ2VyJztcbmV4cG9ydCB7IFNES0NvbmZpZywgc2V0Q29uZmlnLCBnZXRDb25maWcgfSBmcm9tICcuL2NvbmZpZyc7XG5leHBvcnQgdHlwZSB7IFN5bnRoZXRpY0Jyb3dzZXJQcm9maWxlIH0gZnJvbSAnLi9wcm92aWRlcnMvbGluc2hpLXRva2VuJztcbmV4cG9ydCB7XG4gIGRlcml2ZUxpbnNoaUFwaVBhdGhLZXksXG4gIHJhbmRvbVN5bnRoZXRpY0xpbnNoaUtleSxcbiAgcmFuZG9tQnJvd3Nlckxpa2VQcm9maWxlLFxuICBzeW50aGV0aWNWaXNpdG9ySWRGcm9tUHJvZmlsZSxcbn0gZnJvbSAnLi9wcm92aWRlcnMvbGluc2hpLXRva2VuJztcblxuLyoqIOaJgOacieaUr+aMgeeahOa4oOmBk+WIl+ihqO+8jOeUqOS6jumaj+acuumAieaLqeWSjOmBjeWOhiAqL1xuY29uc3QgYWxsQ2hhbm5lbHM6IENoYW5uZWxbXSA9IFsndGVtcG1haWwnLCAnbGluc2hpLWVtYWlsJywgJ2xpbnNoaXlvdScsICdtZmZhYycsICd0ZW1wbWFpbC1sb2wnLCAnY2hhdGdwdC1vcmctdWsnLCAndGVtcC1tYWlsLWlvJywgJ2F3YW1haWwnLCAndGVtcG9yYXJ5LWVtYWlsLW9yZycsICdtYWlsLXRtJywgJ21haWwtY3gnLCAnZHJvcG1haWwnLCAnZ3VlcnJpbGxhbWFpbCcsICdtYWlsZHJvcCcsICdzbWFpbC1wdycsICdib29tbGlmeScsICdtaW5tYWlsJywgJ3ZpcC0yMTUnLCAnYW5vbmJveCcsICdmYWtlLWxlZ2FsJ107XG5cbi8qKlxuICog5rig6YGT5L+h5oGv77yM5YyF5ZCr5rig6YGT5qCH6K+G44CB5pi+56S65ZCN56ew5ZKM5a+55bqU572R56uZXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2hhbm5lbEluZm8ge1xuICAvKiog5rig6YGT5qCH6K+GICovXG4gIGNoYW5uZWw6IENoYW5uZWw7XG4gIC8qKiDmuKDpgZPmmL7npLrlkI3np7AgKi9cbiAgbmFtZTogc3RyaW5nO1xuICAvKiog5a+55bqU55qE5Li05pe26YKu566x5pyN5Yqh572R56uZICovXG4gIHdlYnNpdGU6IHN0cmluZztcbn1cblxuLyoqIOa4oOmBk+S/oeaBr+aYoOWwhOihqCAqL1xuY29uc3QgY2hhbm5lbEluZm9NYXA6IFJlY29yZDxDaGFubmVsLCBDaGFubmVsSW5mbz4gPSB7XG4gICd0ZW1wbWFpbCc6IHsgY2hhbm5lbDogJ3RlbXBtYWlsJywgbmFtZTogJ1RlbXBNYWlsJywgd2Vic2l0ZTogJ3RlbXBtYWlsLmluZycgfSxcbiAgJ2xpbnNoaS1lbWFpbCc6IHsgY2hhbm5lbDogJ2xpbnNoaS1lbWFpbCcsIG5hbWU6ICfkuLTml7bpgq7nrrEnLCB3ZWJzaXRlOiAnbGluc2hpLWVtYWlsLmNvbScgfSxcbiAgJ2xpbnNoaXlvdSc6IHsgY2hhbm5lbDogJ2xpbnNoaXlvdScsIG5hbWU6ICfkuLTml7bpgq4nLCB3ZWJzaXRlOiAnbGluc2hpeW91LmNvbScgfSxcbiAgJ3RlbXBtYWlsLWxvbCc6IHsgY2hhbm5lbDogJ3RlbXBtYWlsLWxvbCcsIG5hbWU6ICdUZW1wTWFpbCBMT0wnLCB3ZWJzaXRlOiAndGVtcG1haWwubG9sJyB9LFxuICAnY2hhdGdwdC1vcmctdWsnOiB7IGNoYW5uZWw6ICdjaGF0Z3B0LW9yZy11aycsIG5hbWU6ICdDaGF0R1BUIE1haWwnLCB3ZWJzaXRlOiAnbWFpbC5jaGF0Z3B0Lm9yZy51aycgfSxcbiAgJ3RlbXAtbWFpbC1pbyc6IHsgY2hhbm5lbDogJ3RlbXAtbWFpbC1pbycsIG5hbWU6ICdUZW1wIE1haWwgSU8nLCB3ZWJzaXRlOiAndGVtcC1tYWlsLmlvJyB9LFxuICAnYXdhbWFpbCc6IHsgY2hhbm5lbDogJ2F3YW1haWwnLCBuYW1lOiAnQXdhTWFpbCcsIHdlYnNpdGU6ICdhd2FtYWlsLmNvbScgfSxcbiAgJ3RlbXBvcmFyeS1lbWFpbC1vcmcnOiB7IGNoYW5uZWw6ICd0ZW1wb3JhcnktZW1haWwtb3JnJywgbmFtZTogJ1RlbXBvcmFyeSBFbWFpbCcsIHdlYnNpdGU6ICd0ZW1wb3JhcnktZW1haWwub3JnJyB9LFxuICAnbWFpbC10bSc6IHsgY2hhbm5lbDogJ21haWwtdG0nLCBuYW1lOiAnTWFpbC50bScsIHdlYnNpdGU6ICdtYWlsLnRtJyB9LFxuICAnbWFpbC1jeCc6IHsgY2hhbm5lbDogJ21haWwtY3gnLCBuYW1lOiAnTWFpbC5jeCcsIHdlYnNpdGU6ICdtYWlsLmN4JyB9LFxuICAnZHJvcG1haWwnOiB7IGNoYW5uZWw6ICdkcm9wbWFpbCcsIG5hbWU6ICdEcm9wTWFpbCcsIHdlYnNpdGU6ICdkcm9wbWFpbC5tZScgfSxcbiAgJ2d1ZXJyaWxsYW1haWwnOiB7IGNoYW5uZWw6ICdndWVycmlsbGFtYWlsJywgbmFtZTogJ0d1ZXJyaWxsYSBNYWlsJywgd2Vic2l0ZTogJ2d1ZXJyaWxsYW1haWwuY29tJyB9LFxuICAnbWFpbGRyb3AnOiB7IGNoYW5uZWw6ICdtYWlsZHJvcCcsIG5hbWU6ICdNYWlsZHJvcCcsIHdlYnNpdGU6ICdtYWlsZHJvcC5jeCcgfSxcbiAgJ3NtYWlsLXB3JzogeyBjaGFubmVsOiAnc21haWwtcHcnLCBuYW1lOiAnU21haWwucHcnLCB3ZWJzaXRlOiAnc21haWwucHcnIH0sXG4gICdib29tbGlmeSc6IHsgY2hhbm5lbDogJ2Jvb21saWZ5JywgbmFtZTogJ0Jvb21saWZ5Jywgd2Vic2l0ZTogJ2Jvb21saWZ5LmNvbScgfSxcbiAgJ21pbm1haWwnOiB7IGNoYW5uZWw6ICdtaW5tYWlsJywgbmFtZTogJ01pbk1haWwnLCB3ZWJzaXRlOiAnbWlubWFpbC5hcHAnIH0sXG4gICdtZmZhYyc6IHsgY2hhbm5lbDogJ21mZmFjJywgbmFtZTogJ01GRkFDJywgd2Vic2l0ZTogJ21mZmFjLmNvbScgfSxcbiAgJ3ZpcC0yMTUnOiB7IGNoYW5uZWw6ICd2aXAtMjE1JywgbmFtZTogJ1ZJUCAyMTUnLCB3ZWJzaXRlOiAndmlwLjIxNS5pbScgfSxcbiAgJ2Fub25ib3gnOiB7IGNoYW5uZWw6ICdhbm9uYm94JywgbmFtZTogJ0Fub25ib3gnLCB3ZWJzaXRlOiAnYW5vbmJveC5uZXQnIH0sXG4gICdmYWtlLWxlZ2FsJzogeyBjaGFubmVsOiAnZmFrZS1sZWdhbCcsIG5hbWU6ICdGYWtlIExlZ2FsJywgd2Vic2l0ZTogJ2Zha2UubGVnYWwnIH0sXG59O1xuXG4vKipcbiAqIOiOt+WPluaJgOacieaUr+aMgeeahOa4oOmBk+WIl+ihqFxuICpcbiAqIEByZXR1cm5zIOaJgOaciea4oOmBk+eahOS/oeaBr+aVsOe7hFxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3QgY2hhbm5lbHMgPSBsaXN0Q2hhbm5lbHMoKTtcbiAqIGNoYW5uZWxzLmZvckVhY2goY2ggPT4gY29uc29sZS5sb2coYCR7Y2gubmFtZX0gKCR7Y2gud2Vic2l0ZX0pYCkpO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsaXN0Q2hhbm5lbHMoKTogQ2hhbm5lbEluZm9bXSB7XG4gIHJldHVybiBhbGxDaGFubmVscy5tYXAoY2ggPT4gY2hhbm5lbEluZm9NYXBbY2hdKTtcbn1cblxuLyoqXG4gKiDojrflj5bmjIflrprmuKDpgZPnmoTor6bnu4bkv6Hmga9cbiAqXG4gKiBAcGFyYW0gY2hhbm5lbCAtIOa4oOmBk+agh+ivhlxuICogQHJldHVybnMg5rig6YGT5L+h5oGv77yM5LiN5a2Y5Zyo5pe26L+U5ZueIHVuZGVmaW5lZFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2hhbm5lbEluZm8oY2hhbm5lbDogQ2hhbm5lbCk6IENoYW5uZWxJbmZvIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIGNoYW5uZWxJbmZvTWFwW2NoYW5uZWxdO1xufVxuXG4vKipcbiAqIOWIm+W7uuS4tOaXtumCrueusVxuICpcbiAqIOmUmeivr+WkhOeQhuetlueVpe+8mlxuICogLSDmjIflrprmuKDpgZPlpLHotKXml7bvvIzpu5jorqToh6rliqjlsJ3or5Xlhbbku5blj6/nlKjmuKDpgZPvvIjmiZPkubHpobrluo/pgJDkuKrlsJ3or5XvvIlcbiAqIC0gYGNoYW5uZWxGYWxsYmFjazogZmFsc2VgIOS4lOaMh+WumuS6hiBgY2hhbm5lbGAg5pe277yM5LuF5bCd6K+V6K+l5rig6YGT77yM5aSx6LSl5Y2z6L+U5ZueIG51bGxcbiAqIC0g5pyq5oyH5a6a5rig6YGT5pe277yM5omT5Lmx5YWo6YOo5rig6YGT6YCQ5Liq5bCd6K+V77yM55u05Yiw5oiQ5YqfXG4gKiAtIOaJgOaciea4oOmBk+Wdh+S4jeWPr+eUqOaXtui/lOWbniBudWxs77yI5LiN5oqb5Ye65byC5bi477yJXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSDliJvlu7rpgInpobnvvIzlj6/mjIflrprmuKDpgZPjgIHmnInmlYjml7bplb/jgIHln5/lkI3nrYlcbiAqIEByZXR1cm5zIOmCrueuseS/oeaBr++8jOaJgOaciea4oOmBk+Wdh+S4jeWPr+eUqOaXtui/lOWbniBudWxsXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBjb25zdCBlbWFpbEluZm8gPSBhd2FpdCBnZW5lcmF0ZUVtYWlsKHsgY2hhbm5lbDogJ3RlbXAtbWFpbC1pbycgfSk7XG4gKiBpZiAoZW1haWxJbmZvKSBjb25zb2xlLmxvZyhlbWFpbEluZm8uZW1haWwpO1xuICogYGBgXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZW5lcmF0ZUVtYWlsKG9wdGlvbnM6IEdlbmVyYXRlRW1haWxPcHRpb25zID0ge30pOiBQcm9taXNlPEVtYWlsSW5mbyB8IG51bGw+IHtcbiAgLypcbiAgICog5p6E5bu65bCd6K+V6aG65bqP77yaXG4gICAqIC0g5oyH5a6a5rig6YGTIOKGkiDkvJjlhYjlsJ3or5Xor6XmuKDpgZPvvIzlpLHotKXlkI7pmo/mnLrlsJ3or5Xlhbbku5bmuKDpgZNcbiAgICogLSDmnKrmjIflrpog4oaSIOaJk+S5seWFqOmDqOa4oOmBk+mAkOS4quWwneivlVxuICAgKi9cbiAgY29uc3QgYWxsb3dGYWxsYmFjayA9IG9wdGlvbnMuY2hhbm5lbEZhbGxiYWNrICE9PSBmYWxzZTtcbiAgY29uc3QgdHJ5T3JkZXIgPSBidWlsZENoYW5uZWxPcmRlcihvcHRpb25zLmNoYW5uZWwsIGFsbG93RmFsbGJhY2spO1xuXG4gIGZvciAoY29uc3QgY2ggb2YgdHJ5T3JkZXIpIHtcbiAgICBsb2dnZXIuaW5mbyhg5Yib5bu65Li05pe26YKu566xLCDmuKDpgZM6ICR7Y2h9YCk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGludGVybmFsOiBJbnRlcm5hbEVtYWlsSW5mbyA9IGF3YWl0IHdpdGhSZXRyeSgoKSA9PiBnZW5lcmF0ZUVtYWlsT25jZShjaCwgb3B0aW9ucyksIG9wdGlvbnMucmV0cnkpO1xuICAgICAgbG9nZ2VyLmluZm8oYOmCrueuseWIm+W7uuaIkOWKnzogJHtpbnRlcm5hbC5lbWFpbH0gKOa4oOmBkzogJHtjaH0pYCk7XG5cbiAgICAgIC8qIOWwhiB0b2tlbiDlrZjlhaXlhoXpg6jlrZjlgqjvvIzkuI3mmrTpnLLnu5nnlKjmiLcgKi9cbiAgICAgIGNvbnN0IHB1YmxpY0luZm86IEVtYWlsSW5mbyA9IHtcbiAgICAgICAgY2hhbm5lbDogaW50ZXJuYWwuY2hhbm5lbCxcbiAgICAgICAgZW1haWw6IGludGVybmFsLmVtYWlsLFxuICAgICAgICBleHBpcmVzQXQ6IGludGVybmFsLmV4cGlyZXNBdCxcbiAgICAgICAgY3JlYXRlZEF0OiBpbnRlcm5hbC5jcmVhdGVkQXQsXG4gICAgICB9O1xuICAgICAgaWYgKGludGVybmFsLnRva2VuKSB7XG4gICAgICAgIHRva2VuU3RvcmUuc2V0KHB1YmxpY0luZm8sIGludGVybmFsLnRva2VuKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwdWJsaWNJbmZvO1xuICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICBsb2dnZXIud2Fybihg5rig6YGTICR7Y2h9IOS4jeWPr+eUqDogJHtlcnIubWVzc2FnZSB8fCBlcnJ977yM5bCd6K+V5LiL5LiA5Liq5rig6YGTYCk7XG4gICAgfVxuICB9XG5cbiAgbG9nZ2VyLmVycm9yKCfmiYDmnInmuKDpgZPlnYfkuI3lj6/nlKjvvIzliJvlu7rpgq7nrrHlpLHotKUnKTtcbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICog5p6E5bu65rig6YGT5bCd6K+V6aG65bqPXG4gKiDmjIflrprmuKDpgZPml7bkvJjlhYjlsJ3or5Xor6XmuKDpgZPvvIzlhbbkvZnmuKDpgZPmiZPkubHov73liqBcbiAqIOacquaMh+WumuaXtuaJk+S5seWFqOmDqOa4oOmBk1xuICovXG5mdW5jdGlvbiBidWlsZENoYW5uZWxPcmRlcihwcmVmZXJyZWQ/OiBDaGFubmVsLCBhbGxvd0ZhbGxiYWNrID0gdHJ1ZSk6IENoYW5uZWxbXSB7XG4gIGNvbnN0IHNodWZmbGVkID0gWy4uLmFsbENoYW5uZWxzXS5zb3J0KCgpID0+IE1hdGgucmFuZG9tKCkgLSAwLjUpO1xuICBpZiAoIXByZWZlcnJlZCkge1xuICAgIHJldHVybiBzaHVmZmxlZDtcbiAgfVxuICBpZiAoIWFsbG93RmFsbGJhY2spIHtcbiAgICByZXR1cm4gW3ByZWZlcnJlZF07XG4gIH1cbiAgY29uc3QgcmVzdCA9IHNodWZmbGVkLmZpbHRlcihjaCA9PiBjaCAhPT0gcHJlZmVycmVkKTtcbiAgcmV0dXJuIFtwcmVmZXJyZWQsIC4uLnJlc3RdO1xufVxuXG4vKipcbiAqIOWNleasoeWIm+W7uumCrueuse+8iOS4jeWQq+mHjeivlemAu+i+ke+8iVxuICog5qC55o2u5rig6YGT57G75Z6L5YiG5Y+R5Yiw5a+55bqU55qEIHByb3ZpZGVyIOWunueOsFxuICovXG5hc3luYyBmdW5jdGlvbiBnZW5lcmF0ZUVtYWlsT25jZShjaGFubmVsOiBDaGFubmVsLCBvcHRpb25zOiBHZW5lcmF0ZUVtYWlsT3B0aW9ucyk6IFByb21pc2U8SW50ZXJuYWxFbWFpbEluZm8+IHtcbiAgc3dpdGNoIChjaGFubmVsKSB7XG4gICAgY2FzZSAndGVtcG1haWwnOlxuICAgICAgcmV0dXJuIHRlbXBtYWlsLmdlbmVyYXRlRW1haWwob3B0aW9ucy5kdXJhdGlvbiB8fCAzMCk7XG4gICAgY2FzZSAnbGluc2hpLWVtYWlsJzpcbiAgICAgIHJldHVybiBsaW5zaGlFbWFpbC5nZW5lcmF0ZUVtYWlsKCk7XG4gICAgY2FzZSAnbGluc2hpeW91JzpcbiAgICAgIHJldHVybiBsaW5zaGl5b3UuZ2VuZXJhdGVFbWFpbCgpO1xuICAgIGNhc2UgJ3RlbXBtYWlsLWxvbCc6XG4gICAgICByZXR1cm4gdGVtcG1haWxMb2wuZ2VuZXJhdGVFbWFpbChvcHRpb25zLmRvbWFpbiB8fCBudWxsKTtcbiAgICBjYXNlICdjaGF0Z3B0LW9yZy11ayc6XG4gICAgICByZXR1cm4gY2hhdGdwdE9yZ1VrLmdlbmVyYXRlRW1haWwoKTtcbiAgICBjYXNlICd0ZW1wLW1haWwtaW8nOlxuICAgICAgcmV0dXJuIHRlbXBNYWlsSU8uZ2VuZXJhdGVFbWFpbCgpO1xuICAgIGNhc2UgJ2F3YW1haWwnOlxuICAgICAgcmV0dXJuIGF3YW1haWwuZ2VuZXJhdGVFbWFpbCgpO1xuICAgIGNhc2UgJ3RlbXBvcmFyeS1lbWFpbC1vcmcnOlxuICAgICAgcmV0dXJuIHRlbXBvcmFyeUVtYWlsT3JnLmdlbmVyYXRlRW1haWwoKTtcbiAgICBjYXNlICdtYWlsLXRtJzpcbiAgICAgIHJldHVybiBtYWlsVG0uZ2VuZXJhdGVFbWFpbCgpO1xuICAgIGNhc2UgJ2Ryb3BtYWlsJzpcbiAgICAgIHJldHVybiBkcm9wbWFpbC5nZW5lcmF0ZUVtYWlsKCk7XG4gICAgY2FzZSAnZ3VlcnJpbGxhbWFpbCc6XG4gICAgICByZXR1cm4gZ3VlcnJpbGxhbWFpbC5nZW5lcmF0ZUVtYWlsKCk7XG4gICAgY2FzZSAnbWFpbGRyb3AnOlxuICAgICAgcmV0dXJuIG1haWxkcm9wUHJvdmlkZXIuZ2VuZXJhdGVFbWFpbChvcHRpb25zLmRvbWFpbiA/PyBudWxsKTtcbiAgICBjYXNlICdzbWFpbC1wdyc6XG4gICAgICByZXR1cm4gc21haWxQdy5nZW5lcmF0ZUVtYWlsKCk7XG4gICAgY2FzZSAnYm9vbWxpZnknOlxuICAgICAgcmV0dXJuIGJvb21saWZ5LmdlbmVyYXRlRW1haWwoKTtcbiAgICBjYXNlICdtZmZhYyc6XG4gICAgICByZXR1cm4gbWZmYWMuZ2VuZXJhdGVFbWFpbCgpO1xuICAgIGNhc2UgJ21pbm1haWwnOlxuICAgICAgcmV0dXJuIG1pbm1haWwuZ2VuZXJhdGVFbWFpbCgpO1xuICAgIGNhc2UgJ3ZpcC0yMTUnOlxuICAgICAgcmV0dXJuIHZpcDIxNS5nZW5lcmF0ZUVtYWlsKCk7XG4gICAgY2FzZSAnYW5vbmJveCc6XG4gICAgICByZXR1cm4gYW5vbmJveC5nZW5lcmF0ZUVtYWlsKCk7XG4gICAgY2FzZSAnZmFrZS1sZWdhbCc6XG4gICAgICByZXR1cm4gZmFrZUxlZ2FsLmdlbmVyYXRlRW1haWwob3B0aW9ucy5kb21haW4gPz8gbnVsbCk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBjaGFubmVsOiAke2NoYW5uZWx9YCk7XG4gIH1cbn1cblxuLyoqXG4gKiDojrflj5bpgq7ku7bliJfooahcbiAqIENoYW5uZWwvRW1haWwvVG9rZW4g562J55SxIFNESyDku44gRW1haWxJbmZvIOS4reiHquWKqOiOt+WPlu+8jOeUqOaIt+aXoOmcgOaJi+WKqOS8oOmAklxuICpcbiAqIOmUmeivr+WkhOeQhuetlueVpe+8mlxuICogLSDnvZHnu5zplJnor6/jgIHotoXml7bjgIE0MjnjgIHmnI3liqHnq68gNXh4IOmUmeivryDihpIg6Ieq5Yqo6YeN6K+V77yI6buY6K6kIDIg5qyh77yJXG4gKiAtIOmHjeivleiAl+WwveWQjui/lOWbniB7IHN1Y2Nlc3M6IGZhbHNlLCBlbWFpbHM6IFtdIH3vvIzkuI3mipvlvILluLhcbiAqIC0g5Y+C5pWw5qCh6aqM6ZSZ6K+v77yI57y65bCRIEVtYWlsSW5mb++8ieebtOaOpeaKm+WHulxuICpcbiAqIEBwYXJhbSBpbmZvIC0gR2VuZXJhdGVFbWFpbCgpIOi/lOWbnueahOmCrueuseS/oeaBr1xuICogQHBhcmFtIG9wdGlvbnMgLSDlj6/pgInphY3nva7vvIjph43or5XnrYnvvIlcbiAqIEByZXR1cm5zIOmCruS7tue7k+aenO+8jOWMheWQqyBzdWNjZXNzIOagh+iusOWSjOmCruS7tuWIl+ihqFxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3QgaW5mbyA9IGF3YWl0IGdlbmVyYXRlRW1haWwoeyBjaGFubmVsOiAnbWFpbC10bScgfSk7XG4gKiBjb25zdCByZXN1bHQgPSBhd2FpdCBnZXRFbWFpbHMoaW5mbyk7XG4gKiBpZiAocmVzdWx0LnN1Y2Nlc3MgJiYgcmVzdWx0LmVtYWlscy5sZW5ndGggPiAwKSB7XG4gKiAgIGNvbnNvbGUubG9nKCfmlLbliLDpgq7ku7Y6JywgcmVzdWx0LmVtYWlsc1swXS5zdWJqZWN0KTtcbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0RW1haWxzKGluZm86IEVtYWlsSW5mbywgb3B0aW9ucz86IEdldEVtYWlsc09wdGlvbnMpOiBQcm9taXNlPEdldEVtYWlsc1Jlc3VsdD4ge1xuICBpZiAoIWluZm8pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0VtYWlsSW5mbyBpcyByZXF1aXJlZCwgY2FsbCBnZW5lcmF0ZUVtYWlsKCkgZmlyc3QnKTtcbiAgfVxuXG4gIGNvbnN0IHsgY2hhbm5lbCwgZW1haWwgfSA9IGluZm87XG4gIGNvbnN0IHRva2VuID0gdG9rZW5TdG9yZS5nZXQoaW5mbyk7XG5cbiAgaWYgKCFjaGFubmVsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDaGFubmVsIGlzIHJlcXVpcmVkJyk7XG4gIH1cbiAgaWYgKCFlbWFpbCAmJiBjaGFubmVsICE9PSAndGVtcG1haWwtbG9sJykge1xuICAgIHRocm93IG5ldyBFcnJvcignRW1haWwgaXMgcmVxdWlyZWQnKTtcbiAgfVxuXG4gIGxvZ2dlci5kZWJ1Zyhg6I635Y+W6YKu5Lu2LCDmuKDpgZM6ICR7Y2hhbm5lbH0sIOmCrueusTogJHtlbWFpbH1gKTtcbiAgdHJ5IHtcbiAgICBjb25zdCBlbWFpbHMgPSBhd2FpdCB3aXRoUmV0cnkoKCkgPT4gZ2V0RW1haWxzT25jZShjaGFubmVsLCBlbWFpbCwgdG9rZW4pLCBvcHRpb25zPy5yZXRyeSk7XG4gICAgaWYgKGVtYWlscy5sZW5ndGggPiAwKSB7XG4gICAgICBsb2dnZXIuaW5mbyhg6I635Y+W5YiwICR7ZW1haWxzLmxlbmd0aH0g5bCB6YKu5Lu2LCDmuKDpgZM6ICR7Y2hhbm5lbH1gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nZ2VyLmRlYnVnKGDmmoLml6Dpgq7ku7YsIOa4oOmBkzogJHtjaGFubmVsfWApO1xuICAgIH1cbiAgICByZXR1cm4geyBjaGFubmVsLCBlbWFpbCwgZW1haWxzLCBzdWNjZXNzOiB0cnVlIH07XG4gIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgLypcbiAgICAgKiDph43or5XogJflsL3lkI7ku43nhLblpLHotKUg4oaSIOi/lOWbnuepuue7k+aenOiAjOmdnuaKm+W8guW4uFxuICAgICAqIOi/meagt+iwg+eUqOaWueWcqOi9ruivouWcuuaZr+S4i+S4jeS8muWboOS4uuS4gOasoee9kee7nOazouWKqOiAjOS4reaWreaVtOS4qua1geeoi1xuICAgICAqL1xuICAgIGxvZ2dlci5lcnJvcihg6I635Y+W6YKu5Lu25aSx6LSlLCDmuKDpgZM6ICR7Y2hhbm5lbH0sIOmUmeivrzogJHtlcnIubWVzc2FnZSB8fCBlcnJ9YCk7XG4gICAgcmV0dXJuIHsgY2hhbm5lbCwgZW1haWwsIGVtYWlsczogW10sIHN1Y2Nlc3M6IGZhbHNlIH07XG4gIH1cbn1cblxuLyoqXG4gKiDljZXmrKHojrflj5bpgq7ku7bvvIjkuI3lkKvph43or5XpgLvovpHvvIlcbiAqIOagueaNrua4oOmBk+exu+Wei+WIhuWPkeWIsOWvueW6lOeahCBwcm92aWRlciDlrp7njrDvvIzlubbmoKHpqozlv4XpnIDnmoQgdG9rZW4g5Y+C5pWwXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldEVtYWlsc09uY2UoY2hhbm5lbDogQ2hhbm5lbCwgZW1haWw6IHN0cmluZywgdG9rZW4/OiBzdHJpbmcpOiBQcm9taXNlPEVtYWlsW10+IHtcbiAgc3dpdGNoIChjaGFubmVsKSB7XG4gICAgY2FzZSAndGVtcG1haWwnOlxuICAgICAgcmV0dXJuIHRlbXBtYWlsLmdldEVtYWlscyhlbWFpbCk7XG4gICAgY2FzZSAnbGluc2hpLWVtYWlsJzpcbiAgICAgIGlmICghdG9rZW4pIHRocm93IG5ldyBFcnJvcignaW50ZXJuYWwgZXJyb3I6IHRva2VuIG1pc3NpbmcgZm9yIGxpbnNoaS1lbWFpbCcpO1xuICAgICAgcmV0dXJuIGxpbnNoaUVtYWlsLmdldEVtYWlscyhlbWFpbCwgdG9rZW4pO1xuICAgIGNhc2UgJ2xpbnNoaXlvdSc6XG4gICAgICBpZiAoIXRva2VuKSB0aHJvdyBuZXcgRXJyb3IoJ2ludGVybmFsIGVycm9yOiB0b2tlbiBtaXNzaW5nIGZvciBsaW5zaGl5b3UnKTtcbiAgICAgIHJldHVybiBsaW5zaGl5b3UuZ2V0RW1haWxzKHRva2VuLCBlbWFpbCk7XG4gICAgY2FzZSAndGVtcG1haWwtbG9sJzpcbiAgICAgIGlmICghdG9rZW4pIHRocm93IG5ldyBFcnJvcignaW50ZXJuYWwgZXJyb3I6IHRva2VuIG1pc3NpbmcgZm9yIHRlbXBtYWlsLWxvbCcpO1xuICAgICAgcmV0dXJuIHRlbXBtYWlsTG9sLmdldEVtYWlscyh0b2tlbiwgZW1haWwpO1xuICAgIGNhc2UgJ2NoYXRncHQtb3JnLXVrJzpcbiAgICAgIGlmICghdG9rZW4pIHRocm93IG5ldyBFcnJvcignaW50ZXJuYWwgZXJyb3I6IHRva2VuIG1pc3NpbmcgZm9yIGNoYXRncHQtb3JnLXVrJyk7XG4gICAgICByZXR1cm4gY2hhdGdwdE9yZ1VrLmdldEVtYWlscyh0b2tlbiwgZW1haWwpO1xuICAgIGNhc2UgJ3RlbXAtbWFpbC1pbyc6XG4gICAgICByZXR1cm4gdGVtcE1haWxJTy5nZXRFbWFpbHMoZW1haWwpO1xuICAgIGNhc2UgJ2F3YW1haWwnOlxuICAgICAgaWYgKCF0b2tlbikgdGhyb3cgbmV3IEVycm9yKCdpbnRlcm5hbCBlcnJvcjogdG9rZW4gbWlzc2luZyBmb3IgYXdhbWFpbCcpO1xuICAgICAgcmV0dXJuIGF3YW1haWwuZ2V0RW1haWxzKHRva2VuLCBlbWFpbCk7XG4gICAgY2FzZSAndGVtcG9yYXJ5LWVtYWlsLW9yZyc6XG4gICAgICBpZiAoIXRva2VuKSB0aHJvdyBuZXcgRXJyb3IoJ2ludGVybmFsIGVycm9yOiB0b2tlbiBtaXNzaW5nIGZvciB0ZW1wb3JhcnktZW1haWwtb3JnJyk7XG4gICAgICByZXR1cm4gdGVtcG9yYXJ5RW1haWxPcmcuZ2V0RW1haWxzKGVtYWlsLCB0b2tlbik7XG4gICAgY2FzZSAnbWFpbC10bSc6XG4gICAgICBpZiAoIXRva2VuKSB0aHJvdyBuZXcgRXJyb3IoJ2ludGVybmFsIGVycm9yOiB0b2tlbiBtaXNzaW5nIGZvciBtYWlsLXRtJyk7XG4gICAgICByZXR1cm4gbWFpbFRtLmdldEVtYWlscyh0b2tlbiwgZW1haWwpO1xuICAgIGNhc2UgJ21haWwtY3gnOlxuICAgICAgaWYgKCF0b2tlbikgdGhyb3cgbmV3IEVycm9yKCdpbnRlcm5hbCBlcnJvcjogdG9rZW4gbWlzc2luZyBmb3IgbWFpbC1jeCcpO1xuICAgICAgcmV0dXJuIG1haWxDeC5nZXRFbWFpbHModG9rZW4sIGVtYWlsKTtcbiAgICBjYXNlICdkcm9wbWFpbCc6XG4gICAgICBpZiAoIXRva2VuKSB0aHJvdyBuZXcgRXJyb3IoJ2ludGVybmFsIGVycm9yOiB0b2tlbiBtaXNzaW5nIGZvciBkcm9wbWFpbCcpO1xuICAgICAgcmV0dXJuIGRyb3BtYWlsLmdldEVtYWlscyh0b2tlbiwgZW1haWwpO1xuICAgIGNhc2UgJ2d1ZXJyaWxsYW1haWwnOlxuICAgICAgaWYgKCF0b2tlbikgdGhyb3cgbmV3IEVycm9yKCdpbnRlcm5hbCBlcnJvcjogdG9rZW4gbWlzc2luZyBmb3IgZ3VlcnJpbGxhbWFpbCcpO1xuICAgICAgcmV0dXJuIGd1ZXJyaWxsYW1haWwuZ2V0RW1haWxzKHRva2VuLCBlbWFpbCk7XG4gICAgY2FzZSAnbWFpbGRyb3AnOlxuICAgICAgaWYgKCF0b2tlbikgdGhyb3cgbmV3IEVycm9yKCdpbnRlcm5hbCBlcnJvcjogdG9rZW4gbWlzc2luZyBmb3IgbWFpbGRyb3AnKTtcbiAgICAgIHJldHVybiBtYWlsZHJvcFByb3ZpZGVyLmdldEVtYWlscyh0b2tlbiwgZW1haWwpO1xuICAgIGNhc2UgJ3NtYWlsLXB3JzpcbiAgICAgIGlmICghdG9rZW4pIHRocm93IG5ldyBFcnJvcignaW50ZXJuYWwgZXJyb3I6IHRva2VuIG1pc3NpbmcgZm9yIHNtYWlsLXB3Jyk7XG4gICAgICByZXR1cm4gc21haWxQdy5nZXRFbWFpbHModG9rZW4sIGVtYWlsKTtcbiAgICBjYXNlICdib29tbGlmeSc6XG4gICAgICByZXR1cm4gYm9vbWxpZnkuZ2V0RW1haWxzKGVtYWlsKTtcbiAgICBjYXNlICdtZmZhYyc6XG4gICAgICByZXR1cm4gbWZmYWMuZ2V0RW1haWxzKGVtYWlsLCB0b2tlbik7XG4gICAgY2FzZSAnbWlubWFpbCc6XG4gICAgICBpZiAoIXRva2VuKSB0aHJvdyBuZXcgRXJyb3IoJ2ludGVybmFsIGVycm9yOiB0b2tlbiBtaXNzaW5nIGZvciBtaW5tYWlsJyk7XG4gICAgICByZXR1cm4gbWlubWFpbC5nZXRFbWFpbHMoZW1haWwsIHRva2VuKTtcbiAgICBjYXNlICd2aXAtMjE1JzpcbiAgICAgIGlmICghdG9rZW4pIHRocm93IG5ldyBFcnJvcignaW50ZXJuYWwgZXJyb3I6IHRva2VuIG1pc3NpbmcgZm9yIHZpcC0yMTUnKTtcbiAgICAgIHJldHVybiB2aXAyMTUuZ2V0RW1haWxzKHRva2VuLCBlbWFpbCk7XG4gICAgY2FzZSAnYW5vbmJveCc6XG4gICAgICBpZiAoIXRva2VuKSB0aHJvdyBuZXcgRXJyb3IoJ2ludGVybmFsIGVycm9yOiB0b2tlbiBtaXNzaW5nIGZvciBhbm9uYm94Jyk7XG4gICAgICByZXR1cm4gYW5vbmJveC5nZXRFbWFpbHModG9rZW4sIGVtYWlsKTtcbiAgICBjYXNlICdmYWtlLWxlZ2FsJzpcbiAgICAgIHJldHVybiBmYWtlTGVnYWwuZ2V0RW1haWxzKGVtYWlsKTtcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGNoYW5uZWw6ICR7Y2hhbm5lbH1gKTtcbiAgfVxufVxuXG4vKipcbiAqIOS4tOaXtumCrueuseWuouaIt+err1xuICog5bCB6KOF5LqG6YKu566x5Yib5bu65ZKM6YKu5Lu26I635Y+W55qE5a6M5pW05rWB56iL77yM6Ieq5Yqo566h55CG6YKu566x5L+h5oGv5ZKM6K6k6K+B5Luk54mMXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBjb25zdCBjbGllbnQgPSBuZXcgVGVtcEVtYWlsQ2xpZW50KCk7XG4gKiBjb25zdCBlbWFpbEluZm8gPSBhd2FpdCBjbGllbnQuZ2VuZXJhdGUoeyBjaGFubmVsOiAnbWFpbC10bScgfSk7XG4gKiBjb25zb2xlLmxvZygn6YKu566xOicsIGVtYWlsSW5mby5lbWFpbCk7XG4gKlxuICogLy8g6L2u6K+i6I635Y+W6YKu5Lu2XG4gKiBjb25zdCByZXN1bHQgPSBhd2FpdCBjbGllbnQuZ2V0RW1haWxzKCk7XG4gKiBpZiAocmVzdWx0LnN1Y2Nlc3MpIHtcbiAqICAgY29uc29sZS5sb2coJ+mCruS7tuaVsDonLCByZXN1bHQuZW1haWxzLmxlbmd0aCk7XG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIFRlbXBFbWFpbENsaWVudCB7XG4gIHByaXZhdGUgZW1haWxJbmZvOiBFbWFpbEluZm8gfCBudWxsID0gbnVsbDtcblxuICAvKipcbiAgICog5Yib5bu65Li05pe26YKu566x5bm257yT5a2Y6YKu566x5L+h5oGvXG4gICAqIOWQjue7reiwg+eUqCBnZXRFbWFpbHMoKSDml7boh6rliqjkvb/nlKjmraTpgq7nrrHnmoTmuKDpgZPjgIHlnLDlnYDlkozku6TniYxcbiAgICog5omA5pyJ5rig6YGT5Z2H5LiN5Y+v55So5pe26L+U5ZueIG51bGxcbiAgICovXG4gIGFzeW5jIGdlbmVyYXRlKG9wdGlvbnM6IEdlbmVyYXRlRW1haWxPcHRpb25zID0ge30pOiBQcm9taXNlPEVtYWlsSW5mbyB8IG51bGw+IHtcbiAgICB0aGlzLmVtYWlsSW5mbyA9IGF3YWl0IGdlbmVyYXRlRW1haWwob3B0aW9ucyk7XG4gICAgcmV0dXJuIHRoaXMuZW1haWxJbmZvO1xuICB9XG5cbiAgLyoqXG4gICAqIOiOt+WPluW9k+WJjemCrueuseeahOmCruS7tuWIl+ihqFxuICAgKiDlv4XpobvlhYjosIPnlKggZ2VuZXJhdGUoKSDliJvlu7rpgq7nrrFcbiAgICpcbiAgICogQHRocm93cyDmnKrosIPnlKggZ2VuZXJhdGUoKSDml7bmipvlh7rlvILluLhcbiAgICovXG4gIGFzeW5jIGdldEVtYWlscyhvcHRpb25zPzogR2V0RW1haWxzT3B0aW9ucyk6IFByb21pc2U8R2V0RW1haWxzUmVzdWx0PiB7XG4gICAgaWYgKCF0aGlzLmVtYWlsSW5mbykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBlbWFpbCBnZW5lcmF0ZWQuIENhbGwgZ2VuZXJhdGUoKSBmaXJzdC4nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZ2V0RW1haWxzKHRoaXMuZW1haWxJbmZvLCBvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDojrflj5blvZPliY3nvJPlrZjnmoTpgq7nrrHkv6Hmga9cbiAgICog5pyq6LCD55SoIGdlbmVyYXRlKCkg5pe26L+U5ZueIG51bGxcbiAgICovXG4gIGdldEVtYWlsSW5mbygpOiBFbWFpbEluZm8gfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5lbWFpbEluZm87XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBsaXN0Q2hhbm5lbHMsXG4gIGdldENoYW5uZWxJbmZvLFxuICBnZW5lcmF0ZUVtYWlsLFxuICBnZXRFbWFpbHMsXG4gIFRlbXBFbWFpbENsaWVudCxcbiAgc2V0Q29uZmlnLFxuICBnZXRDb25maWcsXG59O1xuIl19
|
package/dist/normalize.js
CHANGED
|
@@ -62,7 +62,15 @@ function normalizeId(raw) {
|
|
|
62
62
|
* 候选字段: from_address, address_from, from, messageFrom, sender
|
|
63
63
|
*/
|
|
64
64
|
function normalizeFrom(raw) {
|
|
65
|
-
return raw.from_addr ||
|
|
65
|
+
return (raw.from_addr ||
|
|
66
|
+
raw.from_address ||
|
|
67
|
+
raw.fromAddress ||
|
|
68
|
+
raw.sender ||
|
|
69
|
+
raw.address_from ||
|
|
70
|
+
raw.from_email ||
|
|
71
|
+
raw.from ||
|
|
72
|
+
raw.messageFrom ||
|
|
73
|
+
'');
|
|
66
74
|
}
|
|
67
75
|
/**
|
|
68
76
|
* 提取收件人地址,无匹配字段时回退为 recipientEmail
|
|
@@ -83,14 +91,22 @@ function normalizeSubject(raw) {
|
|
|
83
91
|
* 候选字段: text, body, content, body_text, text_content
|
|
84
92
|
*/
|
|
85
93
|
function normalizeText(raw) {
|
|
86
|
-
return raw.text ||
|
|
94
|
+
return (raw.text ||
|
|
95
|
+
raw.text_body ||
|
|
96
|
+
raw.preview_text ||
|
|
97
|
+
raw.body ||
|
|
98
|
+
raw.content ||
|
|
99
|
+
raw.body_text ||
|
|
100
|
+
raw.text_content ||
|
|
101
|
+
raw.description ||
|
|
102
|
+
'');
|
|
87
103
|
}
|
|
88
104
|
/**
|
|
89
105
|
* 提取 HTML 内容
|
|
90
106
|
* 候选字段: html, html_content, body_html
|
|
91
107
|
*/
|
|
92
108
|
function normalizeHtml(raw) {
|
|
93
|
-
return raw.html || raw.html_content || raw.body_html || '';
|
|
109
|
+
return raw.html || raw.html_body || raw.html_content || raw.body_html || '';
|
|
94
110
|
}
|
|
95
111
|
/**
|
|
96
112
|
* 提取并统一日期格式为 ISO 8601
|
|
@@ -160,4 +176,4 @@ function normalizeAttachments(attachments) {
|
|
|
160
176
|
url: a.url || a.download_url || a.downloadUrl || undefined,
|
|
161
177
|
}));
|
|
162
178
|
}
|
|
163
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9ybWFsaXplLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL25vcm1hbGl6ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQVlBLHdDQTBCQztBQXBDRDs7Ozs7Ozs7O0dBU0c7QUFDSCxTQUFnQixjQUFjLENBQUMsR0FBUSxFQUFFLGlCQUF5QixFQUFFO0lBQ2xFLElBQUksSUFBSSxHQUFHLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM5QixJQUFJLElBQUksR0FBRyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFOUI7Ozs7O09BS0c7SUFDSCxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUN6QyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ1osSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRCxPQUFPO1FBQ0wsRUFBRSxFQUFFLFdBQVcsQ0FBQyxHQUFHLENBQUM7UUFDcEIsSUFBSSxFQUFFLGFBQWEsQ0FBQyxHQUFHLENBQUM7UUFDeEIsRUFBRSxFQUFFLFdBQVcsQ0FBQyxHQUFHLEVBQUUsY0FBYyxDQUFDO1FBQ3BDLE9BQU8sRUFBRSxnQkFBZ0IsQ0FBQyxHQUFHLENBQUM7UUFDOUIsSUFBSTtRQUNKLElBQUk7UUFDSixJQUFJLEVBQUUsYUFBYSxDQUFDLEdBQUcsQ0FBQztRQUN4QixNQUFNLEVBQUUsZUFBZSxDQUFDLEdBQUcsQ0FBQztRQUM1QixXQUFXLEVBQUUsb0JBQW9CLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQztLQUNuRCxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQVMsYUFBYSxDQUFDLE9BQWU7SUFDcEMsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzdDLE9BQU8sT0FBTyxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQztRQUN6QyxPQUFPLENBQUMs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QUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbWFpbCwgRW1haWxBdHRhY2htZW50IH0gZnJvbSAnLi90eXBlcyc7XG5cbi8qKlxuICog5bCG5ZCE5o+Q5L6b5ZWG6L+U5Zue55qE5Y6f5aeL6YKu5Lu25pWw5o2u5qCH5YeG5YyW5Li657uf5LiA55qEIEVtYWlsIOagvOW8j1xuICpcbiAqIOS4jeWQjOa4oOmBk+eahCBBUEkg6L+U5Zue5a2X5q615ZCN5ZCE5LiN55u45ZCM77yM5q2k5Ye95pWw6YCa6L+H5aSa5a2X5q615YCZ6YCJ562W55WlXG4gKiDlsIblroPku6znu5/kuIDmmKDlsITkuLrmoIflh4bnmoQgRW1haWwg57uT5p6E77yM5L+d6K+BIFNESyDovpPlh7rkuIDoh7TmgKfjgIJcbiAqXG4gKiBAcGFyYW0gcmF3IC0g5Y6f5aeL6YKu5Lu25pWw5o2u77yI5p2l6Ieq5LiN5ZCM5o+Q5L6b5ZWG55qEIEFQSSDlk43lupTvvIlcbiAqIEBwYXJhbSByZWNpcGllbnRFbWFpbCAtIOaUtuS7tuS6uumCrueuseWcsOWdgO+8jOW9k+WOn+Wni+aVsOaNruS4reaXoOaUtuS7tuS6uuWtl+auteaXtueUqOS9nOWbnumAgOWAvFxuICogQHJldHVybnMg5qCH5YeG5YyW55qEIEVtYWlsIOWvueixoVxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplRW1haWwocmF3OiBhbnksIHJlY2lwaWVudEVtYWlsOiBzdHJpbmcgPSAnJyk6IEVtYWlsIHtcbiAgbGV0IHRleHQgPSBub3JtYWxpemVUZXh0KHJhdyk7XG4gIGxldCBodG1sID0gbm9ybWFsaXplSHRtbChyYXcpO1xuXG4gIC8qXG4gICAqIOS/ruatoyB0ZXh0L2h0bWwg6ZSZ6YWN77yaXG4gICAqIOmDqOWIhua4oOmBk+WwhiBIVE1MIOWGheWuueaUvuWcqCBib2R5L3RleHQg562J5a2X5q615Lit77yMXG4gICAqIOWvvOiHtCBub3JtYWxpemVUZXh0IOaPkOWPluWIsCBIVE1MIOWGheWuueiAjCBub3JtYWxpemVIdG1sIOS4uuepuuOAglxuICAgKiDmo4DmtYsgdGV4dCDkuK3mmK/lkKbljIXlkKsgSFRNTCDmoIfnrb7vvIzlpoLmnpzmmK/liJnnp7vliqjliLAgaHRtbCDlrZfmrrXjgIJcbiAgICovXG4gIGlmICh0ZXh0ICYmICFodG1sICYmIGlzSHRtbENvbnRlbnQodGV4dCkpIHtcbiAgICBodG1sID0gdGV4dDtcbiAgICB0ZXh0ID0gJyc7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGlkOiBub3JtYWxpemVJZChyYXcpLFxuICAgIGZyb206IG5vcm1hbGl6ZUZyb20ocmF3KSxcbiAgICB0bzogbm9ybWFsaXplVG8ocmF3LCByZWNpcGllbnRFbWFpbCksXG4gICAgc3ViamVjdDogbm9ybWFsaXplU3ViamVjdChyYXcpLFxuICAgIHRleHQsXG4gICAgaHRtbCxcbiAgICBkYXRlOiBub3JtYWxpemVEYXRlKHJhdyksXG4gICAgaXNSZWFkOiBub3JtYWxpemVJc1JlYWQocmF3KSxcbiAgICBhdHRhY2htZW50czogbm9ybWFsaXplQXR0YWNobWVudHMocmF3LmF0dGFjaG1lbnRzKSxcbiAgfTtcbn1cblxuLyoqXG4gKiDmo4DmtYvlhoXlrrnmmK/lkKbkuLogSFRNTFxuICog6YCa6L+H5qOA5p+l5piv5ZCm5YyF5ZCr5bi46KeB55qEIEhUTUwg5qCH562+5p2l5Yik5patXG4gKi9cbmZ1bmN0aW9uIGlzSHRtbENvbnRlbnQoY29udGVudDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGNvbnN0IHRyaW1tZWQgPSBjb250ZW50LnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICByZXR1cm4gdHJpbW1lZC5zdGFydHNXaXRoKCc8IWRvY3R5cGUgaHRtbCcpIHx8XG4gICAgdHJpbW1lZC5zdGFydHNXaXRoKCc8aHRtbCcpIHx8XG4gICAgdHJpbW1lZC5zdGFydHNXaXRoKCc8Ym9keScpIHx8XG4gICAgKHRyaW1tZWQuaW5jbHVkZXMoJzxkaXYnKSAmJiB0cmltbWVkLmluY2x1ZGVzKCc8L2Rpdj4nKSkgfHxcbiAgICAodHJpbW1lZC5pbmNsdWRlcygnPHRhYmxlJykgJiYgdHJpbW1lZC5pbmNsdWRlcygnPC90YWJsZT4nKSkgfHxcbiAgICAodHJpbW1lZC5pbmNsdWRlcygnPHAnKSAmJiB0cmltbWVkLmluY2x1ZGVzKCc8L3A+JykgJiYgdHJpbW1lZC5pbmNsdWRlcygnPCcpKTtcbn1cblxuLyoqXG4gKiDmj5Dlj5bpgq7ku7YgSURcbiAqIOWAmemAieWtl+autTogaWQsIGVpZCwgX2lkLCBtYWlsYm94SWQsIG1lc3NhZ2VJZCwgbWFpbF9pZFxuICovXG5mdW5jdGlvbiBub3JtYWxpemVJZChyYXc6IGFueSk6IHN0cmluZyB7XG4gIGNvbnN0IGlkID0gcmF3LmlkID8/IHJhdy5laWQgPz8gcmF3Ll9pZCA/PyByYXcubWFpbGJveElkID8/IHJhdy5tZXNzYWdlSWQgPz8gcmF3Lm1haWxfaWQgPz8gJyc7XG4gIHJldHVybiBTdHJpbmcoaWQpO1xufVxuXG4vKipcbiAqIOaPkOWPluWPkeS7tuS6uuWcsOWdgFxuICog5YCZ6YCJ5a2X5q61OiBmcm9tX2FkZHJlc3MsIGFkZHJlc3NfZnJvbSwgZnJvbSwgbWVzc2FnZUZyb20sIHNlbmRlclxuICovXG5mdW5jdGlvbiBub3JtYWxpemVGcm9tKHJhdzogYW55KTogc3RyaW5nIHtcbiAgcmV0dXJuIHJhdy5mcm9tX2FkZHIgfHwgcmF3LmZyb21fYWRkcmVzcyB8fCByYXcuZnJvbUFkZHJlc3MgfHwgcmF3LmFkZHJlc3NfZnJvbSB8fCByYXcuZnJvbV9lbWFpbCB8fCByYXcuZnJvbSB8fCByYXcubWVzc2FnZUZyb20gfHwgcmF3LnNlbmRlciB8fCAnJztcbn1cblxuLyoqXG4gKiDmj5Dlj5bmlLbku7bkurrlnLDlnYDvvIzml6DljLnphY3lrZfmrrXml7blm57pgIDkuLogcmVjaXBpZW50RW1haWxcbiAqIOWAmemAieWtl+autTogdG8sIHRvX2FkZHJlc3MsIG5hbWVfdG8sIGVtYWlsX2FkZHJlc3MsIGFkZHJlc3NcbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplVG8ocmF3OiBhbnksIHJlY2lwaWVudEVtYWlsOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcmF3LnRvIHx8IHJhdy50b19hZGRyZXNzIHx8IHJhdy50b0FkZHJlc3MgfHwgcmF3Lm5hbWVfdG8gfHwgcmF3LmVtYWlsX2FkZHJlc3MgfHwgcmF3LmFkZHJlc3MgfHwgcmVjaXBpZW50RW1haWwgfHwgJyc7XG59XG5cbi8qKlxuICog5o+Q5Y+W6YKu5Lu25Li76aKYXG4gKiDlgJnpgInlrZfmrrU6IHN1YmplY3QsIGVfc3ViamVjdFxuICovXG5mdW5jdGlvbiBub3JtYWxpemVTdWJqZWN0KHJhdzogYW55KTogc3RyaW5nIHtcbiAgcmV0dXJuIHJhdy5zdWJqZWN0IHx8IHJhdy5lX3N1YmplY3QgfHwgJyc7XG59XG5cbi8qKlxuICog5o+Q5Y+W57qv5paH5pys5YaF5a65XG4gKiDlgJnpgInlrZfmrrU6IHRleHQsIGJvZHksIGNvbnRlbnQsIGJvZHlfdGV4dCwgdGV4dF9jb250ZW50XG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZVRleHQocmF3OiBhbnkpOiBzdHJpbmcge1xuICByZXR1cm4gcmF3LnRleHQgfHwgcmF3LmJvZHkgfHwgcmF3LmNvbnRlbnQgfHwgcmF3LmJvZHlfdGV4dCB8fCByYXcudGV4dF9jb250ZW50IHx8IHJhdy5kZXNjcmlwdGlvbiB8fCAnJztcbn1cblxuLyoqXG4gKiDmj5Dlj5YgSFRNTCDlhoXlrrlcbiAqIOWAmemAieWtl+autTogaHRtbCwgaHRtbF9jb250ZW50LCBib2R5X2h0bWxcbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplSHRtbChyYXc6IGFueSk6IHN0cmluZyB7XG4gIHJldHVybiByYXcuaHRtbCB8fCByYXcuaHRtbF9jb250ZW50IHx8IHJhdy5ib2R5X2h0bWwgfHwgJyc7XG59XG5cbi8qKlxuICog5o+Q5Y+W5bm257uf5LiA5pel5pyf5qC85byP5Li6IElTTyA4NjAxXG4gKiDlgJnpgInlrZfmrrU6IHJlY2VpdmVkX2F0LCBjcmVhdGVkX2F0LCBjcmVhdGVkQXQsIGRhdGUsIHRpbWVzdGFtcCwgZV9kYXRlXG4gKiDlhbbkuK0gdGltZXN0YW1wIOS4uiBVbml4IOenkue6p+aXtumXtOaIs++8jOmcgOS5mOS7pSAxMDAwIOi9rOS4uuavq+enklxuICovXG5mdW5jdGlvbiBub3JtYWxpemVEYXRlKHJhdzogYW55KTogc3RyaW5nIHtcbiAgdHJ5IHtcbiAgICBpZiAocmF3LnJlY2VpdmVkX2F0KSByZXR1cm4gbmV3IERhdGUocmF3LnJlY2VpdmVkX2F0KS50b0lTT1N0cmluZygpO1xuICAgIGlmIChyYXcucmVjZWl2ZWRBdCkgcmV0dXJuIG5ldyBEYXRlKFN0cmluZyhyYXcucmVjZWl2ZWRBdCkucmVwbGFjZSgnICcsICdUJykpLnRvSVNPU3RyaW5nKCk7XG4gICAgaWYgKHJhdy5jcmVhdGVkX2F0KSByZXR1cm4gbmV3IERhdGUocmF3LmNyZWF0ZWRfYXQpLnRvSVNPU3RyaW5nKCk7XG4gICAgaWYgKHJhdy5jcmVhdGVkQXQpIHJldHVybiBuZXcgRGF0ZShyYXcuY3JlYXRlZEF0KS50b0lTT1N0cmluZygpO1xuICAgIGlmIChyYXcuZGF0ZSkge1xuICAgICAgaWYgKHR5cGVvZiByYXcuZGF0ZSA9PT0gJ251bWJlcicpIHJldHVybiBuZXcgRGF0ZShyYXcuZGF0ZSkudG9JU09TdHJpbmcoKTtcbiAgICAgIHJldHVybiBuZXcgRGF0ZShyYXcuZGF0ZSkudG9JU09TdHJpbmcoKTtcbiAgICB9XG4gICAgaWYgKHJhdy50aW1lc3RhbXApIHJldHVybiBuZXcgRGF0ZShyYXcudGltZXN0YW1wICogMTAwMCkudG9JU09TdHJpbmcoKTtcbiAgICBpZiAocmF3LmVfZGF0ZSkgcmV0dXJuIG5ldyBEYXRlKHJhdy5lX2RhdGUpLnRvSVNPU3RyaW5nKCk7XG4gIH0gY2F0Y2gge1xuICAgIC8qIOaXpeacn+ino+aekOWksei0pe+8jOi/lOWbnuepuuWtl+espuS4siAqL1xuICB9XG4gIHJldHVybiAnJztcbn1cblxuLyoqXG4gKiDmj5Dlj5blt7Lor7vnirbmgIFcbiAqIOWAmemAieWtl+autTogc2VlbiwgcmVhZCwgaXNSZWFkLCBpc19yZWFkXG4gKiDmlK/mjIEgYm9vbGVhbiAvIG51bWJlcigwfDEpIC8gc3RyaW5nKCcwJ3wnMScpIOWkmuenjeexu+Wei1xuICovXG5mdW5jdGlvbiBub3JtYWxpemVJc1JlYWQocmF3OiBhbnkpOiBib29sZWFuIHtcbiAgaWYgKHR5cGVvZiByYXcuc2VlbiA9PT0gJ2Jvb2xlYW4nKSByZXR1cm4gcmF3LnNlZW47XG4gIGlmICh0eXBlb2YgcmF3LnJlYWQgPT09ICdib29sZWFuJykgcmV0dXJuIHJhdy5yZWFkO1xuICBpZiAodHlwZW9mIHJhdy5pc1JlYWQgPT09ICdib29sZWFuJykgcmV0dXJuIHJhdy5pc1JlYWQ7XG4gIGlmICh0eXBlb2YgcmF3LmlzX3NlZW4gPT09ICdudW1iZXInKSByZXR1cm4gcmF3LmlzX3NlZW4gPT09IDE7XG4gIGlmICh0eXBlb2YgcmF3LmlzX3NlZW4gPT09ICdzdHJpbmcnKSByZXR1cm4gcmF3LmlzX3NlZW4gPT09ICcxJztcbiAgaWYgKHR5cGVvZiByYXcuaXNfcmVhZCA9PT0gJ251bWJlcicpIHJldHVybiByYXcuaXNfcmVhZCA9PT0gMTtcbiAgaWYgKHR5cGVvZiByYXcuaXNfcmVhZCA9PT0gJ3N0cmluZycpIHJldHVybiByYXcuaXNfcmVhZCA9PT0gJzEnO1xuICBpZiAodHlwZW9mIHJhdy5pc19yZWFkID09PSAnYm9vbGVhbicpIHJldHVybiByYXcuaXNfcmVhZDtcbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIOaPkOWPluW5tuagh+WHhuWMlumZhOS7tuWIl+ihqFxuICog5q+P5Liq6ZmE5Lu255qE5a2X5q615Lmf6YeH55So5aSa5YCZ6YCJ562W55Wl5pig5bCEXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZUF0dGFjaG1lbnRzKGF0dGFjaG1lbnRzOiBhbnkpOiBFbWFpbEF0dGFjaG1lbnRbXSB7XG4gIGlmICghYXR0YWNobWVudHMgfHwgIUFycmF5LmlzQXJyYXkoYXR0YWNobWVudHMpKSByZXR1cm4gW107XG4gIHJldHVybiBhdHRhY2htZW50cy5tYXAoKGE6IGFueSkgPT4gKHtcbiAgICBmaWxlbmFtZTogYS5maWxlbmFtZSB8fCBhLm5hbWUgfHwgJycsXG4gICAgc2l6ZTogYS5zaXplIHx8IGEuZmlsZXNpemUgfHwgdW5kZWZpbmVkLFxuICAgIGNvbnRlbnRUeXBlOiBhLmNvbnRlbnRUeXBlIHx8IGEuY29udGVudF90eXBlIHx8IGEubWltZVR5cGUgfHwgYS5taW1lX3R5cGUgfHwgdW5kZWZpbmVkLFxuICAgIHVybDogYS51cmwgfHwgYS5kb3dubG9hZF91cmwgfHwgYS5kb3dubG9hZFVybCB8fCB1bmRlZmluZWQsXG4gIH0pKTtcbn1cbiJdfQ==
|
|
179
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9ybWFsaXplLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL25vcm1hbGl6ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQVlBLHdDQTBCQztBQXBDRDs7Ozs7Ozs7O0dBU0c7QUFDSCxTQUFnQixjQUFjLENBQUMsR0FBUSxFQUFFLGlCQUF5QixFQUFFO0lBQ2xFLElBQUksSUFBSSxHQUFHLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM5QixJQUFJLElBQUksR0FBRyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFOUI7Ozs7O09BS0c7SUFDSCxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUN6QyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ1osSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRCxPQUFPO1FBQ0wsRUFBRSxFQUFFLFdBQVcsQ0FBQyxHQUFHLENBQUM7UUFDcEIsSUFBSSxFQUFFLGFBQWEsQ0FBQyxHQUFHLENBQUM7UUFDeEIsRUFBRSxFQUFFLFdBQVcsQ0FBQyxHQUFHLEVBQUUsY0FBYyxDQUFDO1FBQ3BDLE9BQU8sRUFBRSxnQkFBZ0IsQ0FBQyxHQUFHLENBQUM7UUFDOUIsSUFBSTtRQUNKLElBQUk7UUFDSixJQUFJLEVBQUUsYUFBYSxDQUFDLEdBQUcsQ0FBQztRQUN4QixNQUFNLEVBQUUsZUFBZSxDQUFDLEdBQUcsQ0FBQztRQUM1QixXQUFXLEVBQUUsb0JBQW9CLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQztLQUNuRCxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQVMsYUFBYSxDQUFDLE9BQWU7SUFDcEMsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzdDLE9BQU8sT0FBTyxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQztRQUN6QyxPQUFPLENBQUMs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QUFHLElBQUksQ0FBQyxDQUFDLFlBQVksSUFBSSxDQUFDLENBQUMsV0FBVyxJQUFJLFNBQVM7S0FDM0QsQ0FBQyxDQUFDLENBQUM7QUFDTixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRW1haWwsIEVtYWlsQXR0YWNobWVudCB9IGZyb20gJy4vdHlwZXMnO1xuXG4vKipcbiAqIOWwhuWQhOaPkOS+m+WVhui/lOWbnueahOWOn+Wni+mCruS7tuaVsOaNruagh+WHhuWMluS4uue7n+S4gOeahCBFbWFpbCDmoLzlvI9cbiAqXG4gKiDkuI3lkIzmuKDpgZPnmoQgQVBJIOi/lOWbnuWtl+auteWQjeWQhOS4jeebuOWQjO+8jOatpOWHveaVsOmAmui/h+WkmuWtl+auteWAmemAieetlueVpVxuICog5bCG5a6D5Lus57uf5LiA5pig5bCE5Li65qCH5YeG55qEIEVtYWlsIOe7k+aehO+8jOS/neivgSBTREsg6L6T5Ye65LiA6Ie05oCn44CCXG4gKlxuICogQHBhcmFtIHJhdyAtIOWOn+Wni+mCruS7tuaVsOaNru+8iOadpeiHquS4jeWQjOaPkOS+m+WVhueahCBBUEkg5ZON5bqU77yJXG4gKiBAcGFyYW0gcmVjaXBpZW50RW1haWwgLSDmlLbku7bkurrpgq7nrrHlnLDlnYDvvIzlvZPljp/lp4vmlbDmja7kuK3ml6DmlLbku7bkurrlrZfmrrXml7bnlKjkvZzlm57pgIDlgLxcbiAqIEByZXR1cm5zIOagh+WHhuWMlueahCBFbWFpbCDlr7nosaFcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZUVtYWlsKHJhdzogYW55LCByZWNpcGllbnRFbWFpbDogc3RyaW5nID0gJycpOiBFbWFpbCB7XG4gIGxldCB0ZXh0ID0gbm9ybWFsaXplVGV4dChyYXcpO1xuICBsZXQgaHRtbCA9IG5vcm1hbGl6ZUh0bWwocmF3KTtcblxuICAvKlxuICAgKiDkv67mraMgdGV4dC9odG1sIOmUmemFje+8mlxuICAgKiDpg6jliIbmuKDpgZPlsIYgSFRNTCDlhoXlrrnmlL7lnKggYm9keS90ZXh0IOetieWtl+auteS4re+8jFxuICAgKiDlr7zoh7Qgbm9ybWFsaXplVGV4dCDmj5Dlj5bliLAgSFRNTCDlhoXlrrnogIwgbm9ybWFsaXplSHRtbCDkuLrnqbrjgIJcbiAgICog5qOA5rWLIHRleHQg5Lit5piv5ZCm5YyF5ZCrIEhUTUwg5qCH562+77yM5aaC5p6c5piv5YiZ56e75Yqo5YiwIGh0bWwg5a2X5q6144CCXG4gICAqL1xuICBpZiAodGV4dCAmJiAhaHRtbCAmJiBpc0h0bWxDb250ZW50KHRleHQpKSB7XG4gICAgaHRtbCA9IHRleHQ7XG4gICAgdGV4dCA9ICcnO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBpZDogbm9ybWFsaXplSWQocmF3KSxcbiAgICBmcm9tOiBub3JtYWxpemVGcm9tKHJhdyksXG4gICAgdG86IG5vcm1hbGl6ZVRvKHJhdywgcmVjaXBpZW50RW1haWwpLFxuICAgIHN1YmplY3Q6IG5vcm1hbGl6ZVN1YmplY3QocmF3KSxcbiAgICB0ZXh0LFxuICAgIGh0bWwsXG4gICAgZGF0ZTogbm9ybWFsaXplRGF0ZShyYXcpLFxuICAgIGlzUmVhZDogbm9ybWFsaXplSXNSZWFkKHJhdyksXG4gICAgYXR0YWNobWVudHM6IG5vcm1hbGl6ZUF0dGFjaG1lbnRzKHJhdy5hdHRhY2htZW50cyksXG4gIH07XG59XG5cbi8qKlxuICog5qOA5rWL5YaF5a655piv5ZCm5Li6IEhUTUxcbiAqIOmAmui/h+ajgOafpeaYr+WQpuWMheWQq+W4uOingeeahCBIVE1MIOagh+etvuadpeWIpOaWrVxuICovXG5mdW5jdGlvbiBpc0h0bWxDb250ZW50KGNvbnRlbnQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBjb25zdCB0cmltbWVkID0gY29udGVudC50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgcmV0dXJuIHRyaW1tZWQuc3RhcnRzV2l0aCgnPCFkb2N0eXBlIGh0bWwnKSB8fFxuICAgIHRyaW1tZWQuc3RhcnRzV2l0aCgnPGh0bWwnKSB8fFxuICAgIHRyaW1tZWQuc3RhcnRzV2l0aCgnPGJvZHknKSB8fFxuICAgICh0cmltbWVkLmluY2x1ZGVzKCc8ZGl2JykgJiYgdHJpbW1lZC5pbmNsdWRlcygnPC9kaXY+JykpIHx8XG4gICAgKHRyaW1tZWQuaW5jbHVkZXMoJzx0YWJsZScpICYmIHRyaW1tZWQuaW5jbHVkZXMoJzwvdGFibGU+JykpIHx8XG4gICAgKHRyaW1tZWQuaW5jbHVkZXMoJzxwJykgJiYgdHJpbW1lZC5pbmNsdWRlcygnPC9wPicpICYmIHRyaW1tZWQuaW5jbHVkZXMoJzwnKSk7XG59XG5cbi8qKlxuICog5o+Q5Y+W6YKu5Lu2IElEXG4gKiDlgJnpgInlrZfmrrU6IGlkLCBlaWQsIF9pZCwgbWFpbGJveElkLCBtZXNzYWdlSWQsIG1haWxfaWRcbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplSWQocmF3OiBhbnkpOiBzdHJpbmcge1xuICBjb25zdCBpZCA9IHJhdy5pZCA/PyByYXcuZWlkID8/IHJhdy5faWQgPz8gcmF3Lm1haWxib3hJZCA/PyByYXcubWVzc2FnZUlkID8/IHJhdy5tYWlsX2lkID8/ICcnO1xuICByZXR1cm4gU3RyaW5nKGlkKTtcbn1cblxuLyoqXG4gKiDmj5Dlj5blj5Hku7bkurrlnLDlnYBcbiAqIOWAmemAieWtl+autTogZnJvbV9hZGRyZXNzLCBhZGRyZXNzX2Zyb20sIGZyb20sIG1lc3NhZ2VGcm9tLCBzZW5kZXJcbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplRnJvbShyYXc6IGFueSk6IHN0cmluZyB7XG4gIHJldHVybiAoXG4gICAgcmF3LmZyb21fYWRkciB8fFxuICAgIHJhdy5mcm9tX2FkZHJlc3MgfHxcbiAgICByYXcuZnJvbUFkZHJlc3MgfHxcbiAgICByYXcuc2VuZGVyIHx8XG4gICAgcmF3LmFkZHJlc3NfZnJvbSB8fFxuICAgIHJhdy5mcm9tX2VtYWlsIHx8XG4gICAgcmF3LmZyb20gfHxcbiAgICByYXcubWVzc2FnZUZyb20gfHxcbiAgICAnJ1xuICApO1xufVxuXG4vKipcbiAqIOaPkOWPluaUtuS7tuS6uuWcsOWdgO+8jOaXoOWMuemFjeWtl+auteaXtuWbnumAgOS4uiByZWNpcGllbnRFbWFpbFxuICog5YCZ6YCJ5a2X5q61OiB0bywgdG9fYWRkcmVzcywgbmFtZV90bywgZW1haWxfYWRkcmVzcywgYWRkcmVzc1xuICovXG5mdW5jdGlvbiBub3JtYWxpemVUbyhyYXc6IGFueSwgcmVjaXBpZW50RW1haWw6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiByYXcudG8gfHwgcmF3LnRvX2FkZHJlc3MgfHwgcmF3LnRvQWRkcmVzcyB8fCByYXcubmFtZV90byB8fCByYXcuZW1haWxfYWRkcmVzcyB8fCByYXcuYWRkcmVzcyB8fCByZWNpcGllbnRFbWFpbCB8fCAnJztcbn1cblxuLyoqXG4gKiDmj5Dlj5bpgq7ku7bkuLvpophcbiAqIOWAmemAieWtl+autTogc3ViamVjdCwgZV9zdWJqZWN0XG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZVN1YmplY3QocmF3OiBhbnkpOiBzdHJpbmcge1xuICByZXR1cm4gcmF3LnN1YmplY3QgfHwgcmF3LmVfc3ViamVjdCB8fCAnJztcbn1cblxuLyoqXG4gKiDmj5Dlj5bnuq/mlofmnKzlhoXlrrlcbiAqIOWAmemAieWtl+autTogdGV4dCwgYm9keSwgY29udGVudCwgYm9keV90ZXh0LCB0ZXh0X2NvbnRlbnRcbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplVGV4dChyYXc6IGFueSk6IHN0cmluZyB7XG4gIHJldHVybiAoXG4gICAgcmF3LnRleHQgfHxcbiAgICByYXcudGV4dF9ib2R5IHx8XG4gICAgcmF3LnByZXZpZXdfdGV4dCB8fFxuICAgIHJhdy5ib2R5IHx8XG4gICAgcmF3LmNvbnRlbnQgfHxcbiAgICByYXcuYm9keV90ZXh0IHx8XG4gICAgcmF3LnRleHRfY29udGVudCB8fFxuICAgIHJhdy5kZXNjcmlwdGlvbiB8fFxuICAgICcnXG4gICk7XG59XG5cbi8qKlxuICog5o+Q5Y+WIEhUTUwg5YaF5a65XG4gKiDlgJnpgInlrZfmrrU6IGh0bWwsIGh0bWxfY29udGVudCwgYm9keV9odG1sXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZUh0bWwocmF3OiBhbnkpOiBzdHJpbmcge1xuICByZXR1cm4gcmF3Lmh0bWwgfHwgcmF3Lmh0bWxfYm9keSB8fCByYXcuaHRtbF9jb250ZW50IHx8IHJhdy5ib2R5X2h0bWwgfHwgJyc7XG59XG5cbi8qKlxuICog5o+Q5Y+W5bm257uf5LiA5pel5pyf5qC85byP5Li6IElTTyA4NjAxXG4gKiDlgJnpgInlrZfmrrU6IHJlY2VpdmVkX2F0LCBjcmVhdGVkX2F0LCBjcmVhdGVkQXQsIGRhdGUsIHRpbWVzdGFtcCwgZV9kYXRlXG4gKiDlhbbkuK0gdGltZXN0YW1wIOS4uiBVbml4IOenkue6p+aXtumXtOaIs++8jOmcgOS5mOS7pSAxMDAwIOi9rOS4uuavq+enklxuICovXG5mdW5jdGlvbiBub3JtYWxpemVEYXRlKHJhdzogYW55KTogc3RyaW5nIHtcbiAgdHJ5IHtcbiAgICBpZiAocmF3LnJlY2VpdmVkX2F0KSByZXR1cm4gbmV3IERhdGUocmF3LnJlY2VpdmVkX2F0KS50b0lTT1N0cmluZygpO1xuICAgIGlmIChyYXcucmVjZWl2ZWRBdCkgcmV0dXJuIG5ldyBEYXRlKFN0cmluZyhyYXcucmVjZWl2ZWRBdCkucmVwbGFjZSgnICcsICdUJykpLnRvSVNPU3RyaW5nKCk7XG4gICAgaWYgKHJhdy5jcmVhdGVkX2F0KSByZXR1cm4gbmV3IERhdGUocmF3LmNyZWF0ZWRfYXQpLnRvSVNPU3RyaW5nKCk7XG4gICAgaWYgKHJhdy5jcmVhdGVkQXQpIHJldHVybiBuZXcgRGF0ZShyYXcuY3JlYXRlZEF0KS50b0lTT1N0cmluZygpO1xuICAgIGlmIChyYXcuZGF0ZSkge1xuICAgICAgaWYgKHR5cGVvZiByYXcuZGF0ZSA9PT0gJ251bWJlcicpIHJldHVybiBuZXcgRGF0ZShyYXcuZGF0ZSkudG9JU09TdHJpbmcoKTtcbiAgICAgIHJldHVybiBuZXcgRGF0ZShyYXcuZGF0ZSkudG9JU09TdHJpbmcoKTtcbiAgICB9XG4gICAgaWYgKHJhdy50aW1lc3RhbXApIHJldHVybiBuZXcgRGF0ZShyYXcudGltZXN0YW1wICogMTAwMCkudG9JU09TdHJpbmcoKTtcbiAgICBpZiAocmF3LmVfZGF0ZSkgcmV0dXJuIG5ldyBEYXRlKHJhdy5lX2RhdGUpLnRvSVNPU3RyaW5nKCk7XG4gIH0gY2F0Y2gge1xuICAgIC8qIOaXpeacn+ino+aekOWksei0pe+8jOi/lOWbnuepuuWtl+espuS4siAqL1xuICB9XG4gIHJldHVybiAnJztcbn1cblxuLyoqXG4gKiDmj5Dlj5blt7Lor7vnirbmgIFcbiAqIOWAmemAieWtl+autTogc2VlbiwgcmVhZCwgaXNSZWFkLCBpc19yZWFkXG4gKiDmlK/mjIEgYm9vbGVhbiAvIG51bWJlcigwfDEpIC8gc3RyaW5nKCcwJ3wnMScpIOWkmuenjeexu+Wei1xuICovXG5mdW5jdGlvbiBub3JtYWxpemVJc1JlYWQocmF3OiBhbnkpOiBib29sZWFuIHtcbiAgaWYgKHR5cGVvZiByYXcuc2VlbiA9PT0gJ2Jvb2xlYW4nKSByZXR1cm4gcmF3LnNlZW47XG4gIGlmICh0eXBlb2YgcmF3LnJlYWQgPT09ICdib29sZWFuJykgcmV0dXJuIHJhdy5yZWFkO1xuICBpZiAodHlwZW9mIHJhdy5pc1JlYWQgPT09ICdib29sZWFuJykgcmV0dXJuIHJhdy5pc1JlYWQ7XG4gIGlmICh0eXBlb2YgcmF3LmlzX3NlZW4gPT09ICdudW1iZXInKSByZXR1cm4gcmF3LmlzX3NlZW4gPT09IDE7XG4gIGlmICh0eXBlb2YgcmF3LmlzX3NlZW4gPT09ICdzdHJpbmcnKSByZXR1cm4gcmF3LmlzX3NlZW4gPT09ICcxJztcbiAgaWYgKHR5cGVvZiByYXcuaXNfcmVhZCA9PT0gJ251bWJlcicpIHJldHVybiByYXcuaXNfcmVhZCA9PT0gMTtcbiAgaWYgKHR5cGVvZiByYXcuaXNfcmVhZCA9PT0gJ3N0cmluZycpIHJldHVybiByYXcuaXNfcmVhZCA9PT0gJzEnO1xuICBpZiAodHlwZW9mIHJhdy5pc19yZWFkID09PSAnYm9vbGVhbicpIHJldHVybiByYXcuaXNfcmVhZDtcbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIOaPkOWPluW5tuagh+WHhuWMlumZhOS7tuWIl+ihqFxuICog5q+P5Liq6ZmE5Lu255qE5a2X5q615Lmf6YeH55So5aSa5YCZ6YCJ562W55Wl5pig5bCEXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZUF0dGFjaG1lbnRzKGF0dGFjaG1lbnRzOiBhbnkpOiBFbWFpbEF0dGFjaG1lbnRbXSB7XG4gIGlmICghYXR0YWNobWVudHMgfHwgIUFycmF5LmlzQXJyYXkoYXR0YWNobWVudHMpKSByZXR1cm4gW107XG4gIHJldHVybiBhdHRhY2htZW50cy5tYXAoKGE6IGFueSkgPT4gKHtcbiAgICBmaWxlbmFtZTogYS5maWxlbmFtZSB8fCBhLm5hbWUgfHwgJycsXG4gICAgc2l6ZTogYS5zaXplIHx8IGEuZmlsZXNpemUgfHwgdW5kZWZpbmVkLFxuICAgIGNvbnRlbnRUeXBlOiBhLmNvbnRlbnRUeXBlIHx8IGEuY29udGVudF90eXBlIHx8IGEubWltZVR5cGUgfHwgYS5taW1lX3R5cGUgfHwgdW5kZWZpbmVkLFxuICAgIHVybDogYS51cmwgfHwgYS5kb3dubG9hZF91cmwgfHwgYS5kb3dubG9hZFVybCB8fCB1bmRlZmluZWQsXG4gIH0pKTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { InternalEmailInfo, Email } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* @param preferredDomain - 若与列表中某域名匹配则仅用该域创建(不含 @ 前缀)
|
|
4
|
+
*/
|
|
5
|
+
export declare function generateEmail(preferredDomain?: string | null): Promise<InternalEmailInfo>;
|
|
6
|
+
export declare function getEmails(token: string, email: string): Promise<Email[]>;
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.generateEmail = generateEmail;
|
|
4
|
+
exports.getEmails = getEmails;
|
|
5
|
+
const normalize_1 = require("../normalize");
|
|
6
|
+
const retry_1 = require("../retry");
|
|
7
|
+
/** Mail.cx REST API,见 https://docs.mail.cx */
|
|
8
|
+
const CHANNEL = 'mail-cx';
|
|
9
|
+
const BASE = 'https://api.mail.cx';
|
|
10
|
+
const DEFAULT_HEADERS = {
|
|
11
|
+
Accept: 'application/json',
|
|
12
|
+
Origin: 'https://mail.cx',
|
|
13
|
+
Referer: 'https://mail.cx/',
|
|
14
|
+
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36',
|
|
15
|
+
};
|
|
16
|
+
function jsonHeaders() {
|
|
17
|
+
return { ...DEFAULT_HEADERS, 'Content-Type': 'application/json' };
|
|
18
|
+
}
|
|
19
|
+
function bearerHeaders(token) {
|
|
20
|
+
return { ...DEFAULT_HEADERS, Authorization: `Bearer ${token}` };
|
|
21
|
+
}
|
|
22
|
+
function randomString(length) {
|
|
23
|
+
const chars = 'abcdefghijklmnopqrstuvwxyz0123456789';
|
|
24
|
+
let result = '';
|
|
25
|
+
for (let i = 0; i < length; i++) {
|
|
26
|
+
result += chars[Math.floor(Math.random() * chars.length)];
|
|
27
|
+
}
|
|
28
|
+
return result;
|
|
29
|
+
}
|
|
30
|
+
async function getDomains() {
|
|
31
|
+
const response = await (0, retry_1.fetchWithTimeout)(`${BASE}/api/domains`, {
|
|
32
|
+
method: 'GET',
|
|
33
|
+
headers: DEFAULT_HEADERS,
|
|
34
|
+
});
|
|
35
|
+
if (!response.ok) {
|
|
36
|
+
throw new Error(`mail-cx domains: ${response.status}`);
|
|
37
|
+
}
|
|
38
|
+
const data = await response.json();
|
|
39
|
+
const list = data?.domains;
|
|
40
|
+
if (!Array.isArray(list))
|
|
41
|
+
return [];
|
|
42
|
+
return list
|
|
43
|
+
.map((d) => d?.domain)
|
|
44
|
+
.filter((d) => typeof d === 'string' && d.length > 0);
|
|
45
|
+
}
|
|
46
|
+
async function createAccount(address, password) {
|
|
47
|
+
const response = await (0, retry_1.fetchWithTimeout)(`${BASE}/api/accounts`, {
|
|
48
|
+
method: 'POST',
|
|
49
|
+
headers: jsonHeaders(),
|
|
50
|
+
body: JSON.stringify({ address, password }),
|
|
51
|
+
});
|
|
52
|
+
if (response.status !== 201) {
|
|
53
|
+
const text = await response.text();
|
|
54
|
+
throw new Error(`mail-cx create account: ${response.status} ${text}`);
|
|
55
|
+
}
|
|
56
|
+
const data = await response.json();
|
|
57
|
+
if (!data?.token || !data?.address) {
|
|
58
|
+
throw new Error('mail-cx: invalid account response');
|
|
59
|
+
}
|
|
60
|
+
return { address: data.address, token: data.token };
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* @param preferredDomain - 若与列表中某域名匹配则仅用该域创建(不含 @ 前缀)
|
|
64
|
+
*/
|
|
65
|
+
async function generateEmail(preferredDomain) {
|
|
66
|
+
let domains = await getDomains();
|
|
67
|
+
if (domains.length === 0) {
|
|
68
|
+
throw new Error('No available domains');
|
|
69
|
+
}
|
|
70
|
+
if (preferredDomain) {
|
|
71
|
+
const want = preferredDomain.toLowerCase().replace(/^@/, '');
|
|
72
|
+
if (domains.some((d) => d.toLowerCase() === want)) {
|
|
73
|
+
domains = [domains.find((d) => d.toLowerCase() === want)];
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
const maxAttempts = 8;
|
|
77
|
+
for (let attempt = 0; attempt < maxAttempts; attempt++) {
|
|
78
|
+
const domain = domains[Math.floor(Math.random() * domains.length)];
|
|
79
|
+
const username = randomString(12);
|
|
80
|
+
const address = `${username}@${domain}`;
|
|
81
|
+
const password = randomString(16);
|
|
82
|
+
try {
|
|
83
|
+
const acc = await createAccount(address, password);
|
|
84
|
+
return {
|
|
85
|
+
channel: CHANNEL,
|
|
86
|
+
email: acc.address,
|
|
87
|
+
token: acc.token,
|
|
88
|
+
createdAt: new Date().toISOString(),
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
catch (e) {
|
|
92
|
+
const msg = String(e instanceof Error ? e.message : e);
|
|
93
|
+
if (msg.includes('409') && attempt < maxAttempts - 1) {
|
|
94
|
+
continue;
|
|
95
|
+
}
|
|
96
|
+
throw e;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
throw new Error('mail-cx: could not create account');
|
|
100
|
+
}
|
|
101
|
+
function flattenMessage(msg, recipientEmail) {
|
|
102
|
+
const id = String(msg.id ?? '');
|
|
103
|
+
const attachments = Array.isArray(msg.attachments)
|
|
104
|
+
? msg.attachments.map((a) => ({
|
|
105
|
+
filename: a.filename || '',
|
|
106
|
+
size: a.size,
|
|
107
|
+
content_type: a.content_type,
|
|
108
|
+
url: `${BASE}/api/messages/${id}/attachments/${a.index}`,
|
|
109
|
+
}))
|
|
110
|
+
: [];
|
|
111
|
+
return {
|
|
112
|
+
id,
|
|
113
|
+
sender: msg.sender || '',
|
|
114
|
+
from: msg.from || '',
|
|
115
|
+
address: msg.address || recipientEmail,
|
|
116
|
+
subject: msg.subject || '',
|
|
117
|
+
preview_text: msg.preview_text,
|
|
118
|
+
text_body: msg.text_body,
|
|
119
|
+
html_body: msg.html_body,
|
|
120
|
+
created_at: msg.created_at,
|
|
121
|
+
attachments,
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
async function getEmails(token, email) {
|
|
125
|
+
const listResponse = await (0, retry_1.fetchWithTimeout)(`${BASE}/api/messages?page=1`, {
|
|
126
|
+
method: 'GET',
|
|
127
|
+
headers: bearerHeaders(token),
|
|
128
|
+
});
|
|
129
|
+
if (!listResponse.ok) {
|
|
130
|
+
throw new Error(`mail-cx list messages: ${listResponse.status}`);
|
|
131
|
+
}
|
|
132
|
+
const listData = await listResponse.json();
|
|
133
|
+
const messages = Array.isArray(listData?.messages) ? listData.messages : [];
|
|
134
|
+
if (messages.length === 0) {
|
|
135
|
+
return [];
|
|
136
|
+
}
|
|
137
|
+
const detailPromises = messages.map(async (msg) => {
|
|
138
|
+
const mid = msg.id;
|
|
139
|
+
if (mid == null) {
|
|
140
|
+
return flattenMessage(msg, email);
|
|
141
|
+
}
|
|
142
|
+
try {
|
|
143
|
+
const detailResponse = await (0, retry_1.fetchWithTimeout)(`${BASE}/api/messages/${mid}`, {
|
|
144
|
+
method: 'GET',
|
|
145
|
+
headers: bearerHeaders(token),
|
|
146
|
+
});
|
|
147
|
+
if (!detailResponse.ok) {
|
|
148
|
+
return flattenMessage(msg, email);
|
|
149
|
+
}
|
|
150
|
+
const detail = await detailResponse.json();
|
|
151
|
+
return flattenMessage(detail, email);
|
|
152
|
+
}
|
|
153
|
+
catch {
|
|
154
|
+
return flattenMessage(msg, email);
|
|
155
|
+
}
|
|
156
|
+
});
|
|
157
|
+
const flat = await Promise.all(detailPromises);
|
|
158
|
+
return flat.map((raw) => (0, normalize_1.normalizeEmail)(raw, email));
|
|
159
|
+
}
|
|
160
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbC1jeC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcm92aWRlcnMvbWFpbC1jeC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQXFFQSxzQ0FtQ0M7QUEyQkQsOEJBb0NDO0FBdEtELDRDQUE4QztBQUM5QyxvQ0FBNEM7QUFFNUMsOENBQThDO0FBQzlDLE1BQU0sT0FBTyxHQUFZLFNBQVMsQ0FBQztBQUNuQyxNQUFNLElBQUksR0FBRyxxQkFBcUIsQ0FBQztBQUVuQyxNQUFNLGVBQWUsR0FBMkI7SUFDOUMsTUFBTSxFQUFFLGtCQUFrQjtJQUMxQixNQUFNLEVBQUUsaUJBQWlCO0lBQ3pCLE9BQU8sRUFBRSxrQkFBa0I7SUFDM0IsWUFBWSxFQUNWLGlIQUFpSDtDQUNwSCxDQUFDO0FBRUYsU0FBUyxXQUFXO0lBQ2xCLE9BQU8sRUFBRSxHQUFHLGVBQWUsRUFBRSxjQUFjLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQztBQUNwRSxDQUFDO0FBRUQsU0FBUyxhQUFhLENBQUMsS0FBYTtJQUNsQyxPQUFPLEVBQUUsR0FBRyxlQUFlLEVBQUUsYUFBYSxFQUFFLFVBQVUsS0FBSyxFQUFFLEVBQUUsQ0FBQztBQUNsRSxDQUFDO0FBRUQsU0FBUyxZQUFZLENBQUMsTUFBYztJQUNsQyxNQUFNLEtBQUssR0FBRyxzQ0FBc0MsQ0FBQztJQUNyRCxJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7SUFDaEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ2hDLE1BQU0sSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUNELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRCxLQUFLLFVBQVUsVUFBVTtJQUN2QixNQUFNLFFB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QyxJQUFJLEVBQUUsQ0FBQztZQUMzQyxPQUFPLGNBQWMsQ0FBQyxNQUFpQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2xFLENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCxPQUFPLGNBQWMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDcEMsQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFDO0lBRUgsTUFBTSxJQUFJLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQy9DLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsSUFBQSwwQkFBYyxFQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ3ZELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbnRlcm5hbEVtYWlsSW5mbywgRW1haWwsIENoYW5uZWwgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBub3JtYWxpemVFbWFpbCB9IGZyb20gJy4uL25vcm1hbGl6ZSc7XG5pbXBvcnQgeyBmZXRjaFdpdGhUaW1lb3V0IH0gZnJvbSAnLi4vcmV0cnknO1xuXG4vKiogTWFpbC5jeCBSRVNUIEFQSe+8jOingSBodHRwczovL2RvY3MubWFpbC5jeCAqL1xuY29uc3QgQ0hBTk5FTDogQ2hhbm5lbCA9ICdtYWlsLWN4JztcbmNvbnN0IEJBU0UgPSAnaHR0cHM6Ly9hcGkubWFpbC5jeCc7XG5cbmNvbnN0IERFRkFVTFRfSEVBREVSUzogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgQWNjZXB0OiAnYXBwbGljYXRpb24vanNvbicsXG4gIE9yaWdpbjogJ2h0dHBzOi8vbWFpbC5jeCcsXG4gIFJlZmVyZXI6ICdodHRwczovL21haWwuY3gvJyxcbiAgJ1VzZXItQWdlbnQnOlxuICAgICdNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvMTMxLjAuMC4wIFNhZmFyaS81MzcuMzYnLFxufTtcblxuZnVuY3Rpb24ganNvbkhlYWRlcnMoKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gIHJldHVybiB7IC4uLkRFRkFVTFRfSEVBREVSUywgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9O1xufVxuXG5mdW5jdGlvbiBiZWFyZXJIZWFkZXJzKHRva2VuOiBzdHJpbmcpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgcmV0dXJuIHsgLi4uREVGQVVMVF9IRUFERVJTLCBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YCB9O1xufVxuXG5mdW5jdGlvbiByYW5kb21TdHJpbmcobGVuZ3RoOiBudW1iZXIpOiBzdHJpbmcge1xuICBjb25zdCBjaGFycyA9ICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODknO1xuICBsZXQgcmVzdWx0ID0gJyc7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICByZXN1bHQgKz0gY2hhcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogY2hhcnMubGVuZ3RoKV07XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0RG9tYWlucygpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2hXaXRoVGltZW91dChgJHtCQVNFfS9hcGkvZG9tYWluc2AsIHtcbiAgICBtZXRob2Q6ICdHRVQnLFxuICAgIGhlYWRlcnM6IERFRkFVTFRfSEVBREVSUyxcbiAgfSk7XG4gIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYG1haWwtY3ggZG9tYWluczogJHtyZXNwb25zZS5zdGF0dXN9YCk7XG4gIH1cbiAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcbiAgY29uc3QgbGlzdCA9IGRhdGE/LmRvbWFpbnM7XG4gIGlmICghQXJyYXkuaXNBcnJheShsaXN0KSkgcmV0dXJuIFtdO1xuICByZXR1cm4gbGlzdFxuICAgIC5tYXAoKGQ6IHsgZG9tYWluPzogc3RyaW5nIH0pID0+IGQ/LmRvbWFpbilcbiAgICAuZmlsdGVyKChkOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBkIGlzIHN0cmluZyA9PiB0eXBlb2YgZCA9PT0gJ3N0cmluZycgJiYgZC5sZW5ndGggPiAwKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gY3JlYXRlQWNjb3VudChhZGRyZXNzOiBzdHJpbmcsIHBhc3N3b3JkOiBzdHJpbmcpOiBQcm9taXNlPHsgYWRkcmVzczogc3RyaW5nOyB0b2tlbjogc3RyaW5nIH0+IHtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaFdpdGhUaW1lb3V0KGAke0JBU0V9L2FwaS9hY2NvdW50c2AsIHtcbiAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICBoZWFkZXJzOiBqc29uSGVhZGVycygpLFxuICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgYWRkcmVzcywgcGFzc3dvcmQgfSksXG4gIH0pO1xuICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSAyMDEpIHtcbiAgICBjb25zdCB0ZXh0ID0gYXdhaXQgcmVzcG9uc2UudGV4dCgpO1xuICAgIHRocm93IG5ldyBFcnJvcihgbWFpbC1jeCBjcmVhdGUgYWNjb3VudDogJHtyZXNwb25zZS5zdGF0dXN9ICR7dGV4dH1gKTtcbiAgfVxuICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICBpZiAoIWRhdGE/LnRva2VuIHx8ICFkYXRhPy5hZGRyZXNzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdtYWlsLWN4OiBpbnZhbGlkIGFjY291bnQgcmVzcG9uc2UnKTtcbiAgfVxuICByZXR1cm4geyBhZGRyZXNzOiBkYXRhLmFkZHJlc3MsIHRva2VuOiBkYXRhLnRva2VuIH07XG59XG5cbi8qKlxuICogQHBhcmFtIHByZWZlcnJlZERvbWFpbiAtIOiLpeS4juWIl+ihqOS4reafkOWfn+WQjeWMuemFjeWImeS7heeUqOivpeWfn+WIm+W7uu+8iOS4jeWQqyBAIOWJjee8gO+8iVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVFbWFpbChwcmVmZXJyZWREb21haW4/OiBzdHJpbmcgfCBudWxsKTogUHJvbWlzZTxJbnRlcm5hbEVtYWlsSW5mbz4ge1xuICBsZXQgZG9tYWlucyA9IGF3YWl0IGdldERvbWFpbnMoKTtcbiAgaWYgKGRvbWFpbnMubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdObyBhdmFpbGFibGUgZG9tYWlucycpO1xuICB9XG4gIGlmIChwcmVmZXJyZWREb21haW4pIHtcbiAgICBjb25zdCB3YW50ID0gcHJlZmVycmVkRG9tYWluLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXkAvLCAnJyk7XG4gICAgaWYgKGRvbWFpbnMuc29tZSgoZCkgPT4gZC50b0xvd2VyQ2FzZSgpID09PSB3YW50KSkge1xuICAgICAgZG9tYWlucyA9IFtkb21haW5zLmZpbmQoKGQpID0+IGQudG9Mb3dlckNhc2UoKSA9PT0gd2FudCkhXTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBtYXhBdHRlbXB0cyA9IDg7XG4gIGZvciAobGV0IGF0dGVtcHQgPSAwOyBhdHRlbXB0IDwgbWF4QXR0ZW1wdHM7IGF0dGVtcHQrKykge1xuICAgIGNvbnN0IGRvbWFpbiA9IGRvbWFpbnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogZG9tYWlucy5sZW5ndGgpXTtcbiAgICBjb25zdCB1c2VybmFtZSA9IHJhbmRvbVN0cmluZygxMik7XG4gICAgY29uc3QgYWRkcmVzcyA9IGAke3VzZXJuYW1lfUAke2RvbWFpbn1gO1xuICAgIGNvbnN0IHBhc3N3b3JkID0gcmFuZG9tU3RyaW5nKDE2KTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYWNjID0gYXdhaXQgY3JlYXRlQWNjb3VudChhZGRyZXNzLCBwYXNzd29yZCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjaGFubmVsOiBDSEFOTkVMLFxuICAgICAgICBlbWFpbDogYWNjLmFkZHJlc3MsXG4gICAgICAgIHRva2VuOiBhY2MudG9rZW4sXG4gICAgICAgIGNyZWF0ZWRBdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICBjb25zdCBtc2cgPSBTdHJpbmcoZSBpbnN0YW5jZW9mIEVycm9yID8gZS5tZXNzYWdlIDogZSk7XG4gICAgICBpZiAobXNnLmluY2x1ZGVzKCc0MDknKSAmJiBhdHRlbXB0IDwgbWF4QXR0ZW1wdHMgLSAxKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKCdtYWlsLWN4OiBjb3VsZCBub3QgY3JlYXRlIGFjY291bnQnKTtcbn1cblxuZnVuY3Rpb24gZmxhdHRlbk1lc3NhZ2UobXNnOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgcmVjaXBpZW50RW1haWw6IHN0cmluZyk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgY29uc3QgaWQgPSBTdHJpbmcobXNnLmlkID8/ICcnKTtcbiAgY29uc3QgYXR0YWNobWVudHMgPSBBcnJheS5pc0FycmF5KG1zZy5hdHRhY2htZW50cylcbiAgICA/IChtc2cuYXR0YWNobWVudHMgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXSkubWFwKChhKSA9PiAoe1xuICAgICAgICBmaWxlbmFtZTogYS5maWxlbmFtZSB8fCAnJyxcbiAgICAgICAgc2l6ZTogYS5zaXplLFxuICAgICAgICBjb250ZW50X3R5cGU6IGEuY29udGVudF90eXBlLFxuICAgICAgICB1cmw6IGAke0JBU0V9L2FwaS9tZXNzYWdlcy8ke2lkfS9hdHRhY2htZW50cy8ke2EuaW5kZXh9YCxcbiAgICAgIH0pKVxuICAgIDogW107XG5cbiAgcmV0dXJuIHtcbiAgICBpZCxcbiAgICBzZW5kZXI6IG1zZy5zZW5kZXIgfHwgJycsXG4gICAgZnJvbTogbXNnLmZyb20gfHwgJycsXG4gICAgYWRkcmVzczogbXNnLmFkZHJlc3MgfHwgcmVjaXBpZW50RW1haWwsXG4gICAgc3ViamVjdDogbXNnLnN1YmplY3QgfHwgJycsXG4gICAgcHJldmlld190ZXh0OiBtc2cucHJldmlld190ZXh0LFxuICAgIHRleHRfYm9keTogbXNnLnRleHRfYm9keSxcbiAgICBodG1sX2JvZHk6IG1zZy5odG1sX2JvZHksXG4gICAgY3JlYXRlZF9hdDogbXNnLmNyZWF0ZWRfYXQsXG4gICAgYXR0YWNobWVudHMsXG4gIH07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRFbWFpbHModG9rZW46IHN0cmluZywgZW1haWw6IHN0cmluZyk6IFByb21pc2U8RW1haWxbXT4ge1xuICBjb25zdCBsaXN0UmVzcG9uc2UgPSBhd2FpdCBmZXRjaFdpdGhUaW1lb3V0KGAke0JBU0V9L2FwaS9tZXNzYWdlcz9wYWdlPTFgLCB7XG4gICAgbWV0aG9kOiAnR0VUJyxcbiAgICBoZWFkZXJzOiBiZWFyZXJIZWFkZXJzKHRva2VuKSxcbiAgfSk7XG4gIGlmICghbGlzdFJlc3BvbnNlLm9rKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBtYWlsLWN4IGxpc3QgbWVzc2FnZXM6ICR7bGlzdFJlc3BvbnNlLnN0YXR1c31gKTtcbiAgfVxuICBjb25zdCBsaXN0RGF0YSA9IGF3YWl0IGxpc3RSZXNwb25zZS5qc29uKCk7XG4gIGNvbnN0IG1lc3NhZ2VzID0gQXJyYXkuaXNBcnJheShsaXN0RGF0YT8ubWVzc2FnZXMpID8gbGlzdERhdGEubWVzc2FnZXMgOiBbXTtcbiAgaWYgKG1lc3NhZ2VzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGNvbnN0IGRldGFpbFByb21pc2VzID0gbWVzc2FnZXMubWFwKGFzeW5jIChtc2c6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiB7XG4gICAgY29uc3QgbWlkID0gbXNnLmlkO1xuICAgIGlmIChtaWQgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGZsYXR0ZW5NZXNzYWdlKG1zZywgZW1haWwpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgY29uc3QgZGV0YWlsUmVzcG9uc2UgPSBhd2FpdCBmZXRjaFdpdGhUaW1lb3V0KGAke0JBU0V9L2FwaS9tZXNzYWdlcy8ke21pZH1gLCB7XG4gICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICAgIGhlYWRlcnM6IGJlYXJlckhlYWRlcnModG9rZW4pLFxuICAgICAgfSk7XG4gICAgICBpZiAoIWRldGFpbFJlc3BvbnNlLm9rKSB7XG4gICAgICAgIHJldHVybiBmbGF0dGVuTWVzc2FnZShtc2csIGVtYWlsKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRldGFpbCA9IGF3YWl0IGRldGFpbFJlc3BvbnNlLmpzb24oKTtcbiAgICAgIHJldHVybiBmbGF0dGVuTWVzc2FnZShkZXRhaWwgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIGVtYWlsKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBmbGF0dGVuTWVzc2FnZShtc2csIGVtYWlsKTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IGZsYXQgPSBhd2FpdCBQcm9taXNlLmFsbChkZXRhaWxQcm9taXNlcyk7XG4gIHJldHVybiBmbGF0Lm1hcCgocmF3KSA9PiBub3JtYWxpemVFbWFpbChyYXcsIGVtYWlsKSk7XG59XG4iXX0=
|
package/dist/types.d.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* 支持的临时邮箱渠道标识
|
|
3
3
|
* 每个渠道对应一个第三方临时邮箱服务商
|
|
4
4
|
*/
|
|
5
|
-
export type Channel = 'tempmail' | 'linshi-email' | 'linshiyou' | 'mffac' | 'tempmail-lol' | 'chatgpt-org-uk' | 'temp-mail-io' | 'awamail' | 'temporary-email-org' | 'mail-tm' | 'dropmail' | 'guerrillamail' | 'maildrop' | 'smail-pw' | 'boomlify' | 'minmail' | 'vip-215' | 'anonbox' | 'fake-legal';
|
|
5
|
+
export type Channel = 'tempmail' | 'linshi-email' | 'linshiyou' | 'mffac' | 'tempmail-lol' | 'chatgpt-org-uk' | 'temp-mail-io' | 'awamail' | 'temporary-email-org' | 'mail-tm' | 'mail-cx' | 'dropmail' | 'guerrillamail' | 'maildrop' | 'smail-pw' | 'boomlify' | 'minmail' | 'vip-215' | 'anonbox' | 'fake-legal';
|
|
6
6
|
/**
|
|
7
7
|
* 创建临时邮箱后返回的邮箱信息
|
|
8
8
|
* Token 等认证信息由 SDK 内部维护,不对外暴露
|
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/
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICog5pSv5oyB55qE5Li05pe26YKu566x5rig6YGT5qCH6K+GXG4gKiDmr4/kuKrmuKDpgZPlr7nlupTkuIDkuKrnrKzkuInmlrnkuLTml7bpgq7nrrHmnI3liqHllYZcbiAqL1xuZXhwb3J0IHR5cGUgQ2hhbm5lbCA9ICd0ZW1wbWFpbCcgfCAnbGluc2hpLWVtYWlsJyB8ICdsaW5zaGl5b3UnIHwgJ21mZmFjJyB8ICd0ZW1wbWFpbC1sb2wnIHwgJ2NoYXRncHQtb3JnLXVrJyB8ICd0ZW1wLW1haWwtaW8nIHwgJ2F3YW1haWwnIHwgJ3RlbXBvcmFyeS1lbWFpbC1vcmcnIHwgJ21haWwtdG0nIHwgJ21haWwtY3gnIHwgJ2Ryb3BtYWlsJyB8ICdndWVycmlsbGFtYWlsJyB8ICdtYWlsZHJvcCcgfCAnc21haWwtcHcnIHwgJ2Jvb21saWZ5JyB8ICdtaW5tYWlsJyB8ICd2aXAtMjE1JyB8ICdhbm9uYm94JyB8ICdmYWtlLWxlZ2FsJztcblxuLyoqXG4gKiDliJvlu7rkuLTml7bpgq7nrrHlkI7ov5Tlm57nmoTpgq7nrrHkv6Hmga9cbiAqIFRva2VuIOetieiupOivgeS/oeaBr+eUsSBTREsg5YaF6YOo57u05oqk77yM5LiN5a+55aSW5pq06ZyyXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW1haWxJbmZvIHtcbiAgLyoqIOWIm+W7uuivpemCrueuseaJgOS9v+eUqOeahOa4oOmBkyAqL1xuICBjaGFubmVsOiBDaGFubmVsO1xuICAvKiog5Li05pe26YKu566x5Zyw5Z2AICovXG4gIGVtYWlsOiBzdHJpbmc7XG4gIC8qKiDpgq7nrrHov4fmnJ/ml7bpl7TvvIhJU08gODYwMSDlrZfnrKbkuLLmiJYgVW5peCDml7bpl7TmiLPvvIkgKi9cbiAgZXhwaXJlc0F0Pzogc3RyaW5nIHwgbnVtYmVyO1xuICAvKiog6YKu566x5Yib5bu65pe26Ze077yISVNPIDg2MDEg5a2X56ym5Liy77yJICovXG4gIGNyZWF0ZWRBdD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBTREsg5YaF6YOo5L2/55So55qE6YKu566x5L+h5oGv77yM5YyF5ZCrIHRva2VuIOetieiupOivgeaVsOaNrlxuICog5LiN5a+55aSW5a+85Ye677yM55So5oi35peg5rOV6K6/6ZeuXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnRlcm5hbEVtYWlsSW5mbyBleHRlbmRzIEVtYWlsSW5mbyB7XG4gIC8qKiDorqTor4Hku6TniYzvvIznlLEgU0RLIOWGhemDqOe7tOaKpCAqL1xuICB0b2tlbj86IHN0cmluZztcbn1cblxuLyoqXG4gKiDmoIflh4bljJbpgq7ku7bpmYTku7ZcbiAqIOS4jeWQjOa4oOmBk+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+acuumAieaLqSAqL1xuICBjaGFubmVsPzogQ2hhbm5lbDtcbiAgLyoqXG4gICAqIOS4uiBmYWxzZSDml7bku4XlsJ3or5UgYGNoYW5uZWxgIOaMh+WumueahOa4oOmBk++8jOWksei0peWNs+i/lOWbniBudWxs77yM5LiNIEZhbGxiYWNrIOWIsOWFtuS7lua4oOmBk+OAglxuICAgKiDnlKjkuo7mjInmuKDpgZPmjqLmtYvlj6/nlKjmgKfjgILpu5jorqQgdHJ1Ze+8iOS/neaMgeWOn+acieOAjOS8mOWFiOaMh+Wumua4oOmBk+OAgeWksei0peWQjuivleWFtuS7luOAjeihjOS4uu+8ieOAglxuICAgKi9cbiAgY2hhbm5lbEZhbGxiYWNrPzogYm9vbGVhbjtcbiAgLyoqIOmCrueuseacieaViOaXtumVvyAqL1xuICBkdXJhdGlvbj86IG51bWJlcjtcbiAgLyoqIOaMh+WumumCrueuseWfn+WQjSAqL1xuICBkb21haW4/OiBzdHJpbmcgfCBudWxsO1xuICAvKiog6YeN6K+V6YWN572u77yM5LiN5Lyg5YiZ5L2/55So6buY6K6k5YC877yI5pyA5aSa6YeN6K+VIDIg5qyh77yJICovXG4gIHJldHJ5PzogUmV0cnlDb25maWc7XG59XG5cbi8qKlxuICog6I635Y+W6YKu5Lu25YiX6KGo55qE6YCJ6aG5XG4gKiBDaGFubmVsL0VtYWlsL1Rva2VuIOetieeUsSBTREsg5LuOIEVtYWlsSW5mbyDkuK3oh6rliqjojrflj5bvvIznlKjmiLfml6DpnIDmiYvliqjkvKDpgJJcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGNvbnN0IGluZm8gPSBhd2FpdCBnZW5lcmF0ZUVtYWlsKHsgY2hhbm5lbDogJ21haWwtdG0nIH0pO1xuICogY29uc3QgcmVzdWx0ID0gYXdhaXQgZ2V0RW1haWxzKGluZm8pO1xuICogaWYgKHJlc3VsdC5zdWNjZXNzICYmIHJlc3VsdC5lbWFpbHMubGVuZ3RoID4gMCkge1xuICogICBjb25zb2xlLmxvZygn5pS25Yiw6YKu5Lu2OicsIHJlc3VsdC5lbWFpbHMpO1xuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2V0RW1haWxzT3B0aW9ucyB7XG4gIC8qKiDph43or5XphY3nva7vvIzkuI3kvKDliJnkvb/nlKjpu5jorqTlgLzvvIjmnIDlpJrph43or5UgMiDmrKHvvIkgKi9cbiAgcmV0cnk/OiBSZXRyeUNvbmZpZztcbn1cbiJdfQ==
|
package/package.json
CHANGED
package/src/index.ts
CHANGED
|
@@ -8,6 +8,7 @@ import * as tempMailIO from './providers/temp-mail-io';
|
|
|
8
8
|
import * as awamail from './providers/awamail';
|
|
9
9
|
import * as temporaryEmailOrg from './providers/temporary-email-org';
|
|
10
10
|
import * as mailTm from './providers/mail-tm';
|
|
11
|
+
import * as mailCx from './providers/mail-cx';
|
|
11
12
|
import * as dropmail from './providers/dropmail';
|
|
12
13
|
import * as guerrillamail from './providers/guerrillamail';
|
|
13
14
|
import * as maildropProvider from './providers/maildrop';
|
|
@@ -44,7 +45,7 @@ export {
|
|
|
44
45
|
} from './providers/linshi-token';
|
|
45
46
|
|
|
46
47
|
/** 所有支持的渠道列表,用于随机选择和遍历 */
|
|
47
|
-
const allChannels: Channel[] = ['tempmail', 'linshi-email', 'linshiyou', 'mffac', 'tempmail-lol', 'chatgpt-org-uk', 'temp-mail-io', 'awamail', 'temporary-email-org', 'mail-tm', 'dropmail', 'guerrillamail', 'maildrop', 'smail-pw', 'boomlify', 'minmail', 'vip-215', 'anonbox', 'fake-legal'];
|
|
48
|
+
const allChannels: Channel[] = ['tempmail', 'linshi-email', 'linshiyou', 'mffac', 'tempmail-lol', 'chatgpt-org-uk', 'temp-mail-io', 'awamail', 'temporary-email-org', 'mail-tm', 'mail-cx', 'dropmail', 'guerrillamail', 'maildrop', 'smail-pw', 'boomlify', 'minmail', 'vip-215', 'anonbox', 'fake-legal'];
|
|
48
49
|
|
|
49
50
|
/**
|
|
50
51
|
* 渠道信息,包含渠道标识、显示名称和对应网站
|
|
@@ -69,6 +70,7 @@ const channelInfoMap: Record<Channel, ChannelInfo> = {
|
|
|
69
70
|
'awamail': { channel: 'awamail', name: 'AwaMail', website: 'awamail.com' },
|
|
70
71
|
'temporary-email-org': { channel: 'temporary-email-org', name: 'Temporary Email', website: 'temporary-email.org' },
|
|
71
72
|
'mail-tm': { channel: 'mail-tm', name: 'Mail.tm', website: 'mail.tm' },
|
|
73
|
+
'mail-cx': { channel: 'mail-cx', name: 'Mail.cx', website: 'mail.cx' },
|
|
72
74
|
'dropmail': { channel: 'dropmail', name: 'DropMail', website: 'dropmail.me' },
|
|
73
75
|
'guerrillamail': { channel: 'guerrillamail', name: 'Guerrilla Mail', website: 'guerrillamail.com' },
|
|
74
76
|
'maildrop': { channel: 'maildrop', name: 'Maildrop', website: 'maildrop.cx' },
|
|
@@ -312,6 +314,9 @@ async function getEmailsOnce(channel: Channel, email: string, token?: string): P
|
|
|
312
314
|
case 'mail-tm':
|
|
313
315
|
if (!token) throw new Error('internal error: token missing for mail-tm');
|
|
314
316
|
return mailTm.getEmails(token, email);
|
|
317
|
+
case 'mail-cx':
|
|
318
|
+
if (!token) throw new Error('internal error: token missing for mail-cx');
|
|
319
|
+
return mailCx.getEmails(token, email);
|
|
315
320
|
case 'dropmail':
|
|
316
321
|
if (!token) throw new Error('internal error: token missing for dropmail');
|
|
317
322
|
return dropmail.getEmails(token, email);
|
package/src/normalize.ts
CHANGED
|
@@ -66,7 +66,17 @@ function normalizeId(raw: any): string {
|
|
|
66
66
|
* 候选字段: from_address, address_from, from, messageFrom, sender
|
|
67
67
|
*/
|
|
68
68
|
function normalizeFrom(raw: any): string {
|
|
69
|
-
return
|
|
69
|
+
return (
|
|
70
|
+
raw.from_addr ||
|
|
71
|
+
raw.from_address ||
|
|
72
|
+
raw.fromAddress ||
|
|
73
|
+
raw.sender ||
|
|
74
|
+
raw.address_from ||
|
|
75
|
+
raw.from_email ||
|
|
76
|
+
raw.from ||
|
|
77
|
+
raw.messageFrom ||
|
|
78
|
+
''
|
|
79
|
+
);
|
|
70
80
|
}
|
|
71
81
|
|
|
72
82
|
/**
|
|
@@ -90,7 +100,17 @@ function normalizeSubject(raw: any): string {
|
|
|
90
100
|
* 候选字段: text, body, content, body_text, text_content
|
|
91
101
|
*/
|
|
92
102
|
function normalizeText(raw: any): string {
|
|
93
|
-
return
|
|
103
|
+
return (
|
|
104
|
+
raw.text ||
|
|
105
|
+
raw.text_body ||
|
|
106
|
+
raw.preview_text ||
|
|
107
|
+
raw.body ||
|
|
108
|
+
raw.content ||
|
|
109
|
+
raw.body_text ||
|
|
110
|
+
raw.text_content ||
|
|
111
|
+
raw.description ||
|
|
112
|
+
''
|
|
113
|
+
);
|
|
94
114
|
}
|
|
95
115
|
|
|
96
116
|
/**
|
|
@@ -98,7 +118,7 @@ function normalizeText(raw: any): string {
|
|
|
98
118
|
* 候选字段: html, html_content, body_html
|
|
99
119
|
*/
|
|
100
120
|
function normalizeHtml(raw: any): string {
|
|
101
|
-
return raw.html || raw.html_content || raw.body_html || '';
|
|
121
|
+
return raw.html || raw.html_body || raw.html_content || raw.body_html || '';
|
|
102
122
|
}
|
|
103
123
|
|
|
104
124
|
/**
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
import { InternalEmailInfo, Email, Channel } from '../types';
|
|
2
|
+
import { normalizeEmail } from '../normalize';
|
|
3
|
+
import { fetchWithTimeout } from '../retry';
|
|
4
|
+
|
|
5
|
+
/** Mail.cx REST API,见 https://docs.mail.cx */
|
|
6
|
+
const CHANNEL: Channel = 'mail-cx';
|
|
7
|
+
const BASE = 'https://api.mail.cx';
|
|
8
|
+
|
|
9
|
+
const DEFAULT_HEADERS: Record<string, string> = {
|
|
10
|
+
Accept: 'application/json',
|
|
11
|
+
Origin: 'https://mail.cx',
|
|
12
|
+
Referer: 'https://mail.cx/',
|
|
13
|
+
'User-Agent':
|
|
14
|
+
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36',
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
function jsonHeaders(): Record<string, string> {
|
|
18
|
+
return { ...DEFAULT_HEADERS, 'Content-Type': 'application/json' };
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
function bearerHeaders(token: string): Record<string, string> {
|
|
22
|
+
return { ...DEFAULT_HEADERS, Authorization: `Bearer ${token}` };
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
function randomString(length: number): string {
|
|
26
|
+
const chars = 'abcdefghijklmnopqrstuvwxyz0123456789';
|
|
27
|
+
let result = '';
|
|
28
|
+
for (let i = 0; i < length; i++) {
|
|
29
|
+
result += chars[Math.floor(Math.random() * chars.length)];
|
|
30
|
+
}
|
|
31
|
+
return result;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
async function getDomains(): Promise<string[]> {
|
|
35
|
+
const response = await fetchWithTimeout(`${BASE}/api/domains`, {
|
|
36
|
+
method: 'GET',
|
|
37
|
+
headers: DEFAULT_HEADERS,
|
|
38
|
+
});
|
|
39
|
+
if (!response.ok) {
|
|
40
|
+
throw new Error(`mail-cx domains: ${response.status}`);
|
|
41
|
+
}
|
|
42
|
+
const data = await response.json();
|
|
43
|
+
const list = data?.domains;
|
|
44
|
+
if (!Array.isArray(list)) return [];
|
|
45
|
+
return list
|
|
46
|
+
.map((d: { domain?: string }) => d?.domain)
|
|
47
|
+
.filter((d: string | undefined): d is string => typeof d === 'string' && d.length > 0);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
async function createAccount(address: string, password: string): Promise<{ address: string; token: string }> {
|
|
51
|
+
const response = await fetchWithTimeout(`${BASE}/api/accounts`, {
|
|
52
|
+
method: 'POST',
|
|
53
|
+
headers: jsonHeaders(),
|
|
54
|
+
body: JSON.stringify({ address, password }),
|
|
55
|
+
});
|
|
56
|
+
if (response.status !== 201) {
|
|
57
|
+
const text = await response.text();
|
|
58
|
+
throw new Error(`mail-cx create account: ${response.status} ${text}`);
|
|
59
|
+
}
|
|
60
|
+
const data = await response.json();
|
|
61
|
+
if (!data?.token || !data?.address) {
|
|
62
|
+
throw new Error('mail-cx: invalid account response');
|
|
63
|
+
}
|
|
64
|
+
return { address: data.address, token: data.token };
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* @param preferredDomain - 若与列表中某域名匹配则仅用该域创建(不含 @ 前缀)
|
|
69
|
+
*/
|
|
70
|
+
export async function generateEmail(preferredDomain?: string | null): Promise<InternalEmailInfo> {
|
|
71
|
+
let domains = await getDomains();
|
|
72
|
+
if (domains.length === 0) {
|
|
73
|
+
throw new Error('No available domains');
|
|
74
|
+
}
|
|
75
|
+
if (preferredDomain) {
|
|
76
|
+
const want = preferredDomain.toLowerCase().replace(/^@/, '');
|
|
77
|
+
if (domains.some((d) => d.toLowerCase() === want)) {
|
|
78
|
+
domains = [domains.find((d) => d.toLowerCase() === want)!];
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
const maxAttempts = 8;
|
|
83
|
+
for (let attempt = 0; attempt < maxAttempts; attempt++) {
|
|
84
|
+
const domain = domains[Math.floor(Math.random() * domains.length)];
|
|
85
|
+
const username = randomString(12);
|
|
86
|
+
const address = `${username}@${domain}`;
|
|
87
|
+
const password = randomString(16);
|
|
88
|
+
try {
|
|
89
|
+
const acc = await createAccount(address, password);
|
|
90
|
+
return {
|
|
91
|
+
channel: CHANNEL,
|
|
92
|
+
email: acc.address,
|
|
93
|
+
token: acc.token,
|
|
94
|
+
createdAt: new Date().toISOString(),
|
|
95
|
+
};
|
|
96
|
+
} catch (e: unknown) {
|
|
97
|
+
const msg = String(e instanceof Error ? e.message : e);
|
|
98
|
+
if (msg.includes('409') && attempt < maxAttempts - 1) {
|
|
99
|
+
continue;
|
|
100
|
+
}
|
|
101
|
+
throw e;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
throw new Error('mail-cx: could not create account');
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
function flattenMessage(msg: Record<string, unknown>, recipientEmail: string): Record<string, unknown> {
|
|
108
|
+
const id = String(msg.id ?? '');
|
|
109
|
+
const attachments = Array.isArray(msg.attachments)
|
|
110
|
+
? (msg.attachments as Record<string, unknown>[]).map((a) => ({
|
|
111
|
+
filename: a.filename || '',
|
|
112
|
+
size: a.size,
|
|
113
|
+
content_type: a.content_type,
|
|
114
|
+
url: `${BASE}/api/messages/${id}/attachments/${a.index}`,
|
|
115
|
+
}))
|
|
116
|
+
: [];
|
|
117
|
+
|
|
118
|
+
return {
|
|
119
|
+
id,
|
|
120
|
+
sender: msg.sender || '',
|
|
121
|
+
from: msg.from || '',
|
|
122
|
+
address: msg.address || recipientEmail,
|
|
123
|
+
subject: msg.subject || '',
|
|
124
|
+
preview_text: msg.preview_text,
|
|
125
|
+
text_body: msg.text_body,
|
|
126
|
+
html_body: msg.html_body,
|
|
127
|
+
created_at: msg.created_at,
|
|
128
|
+
attachments,
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
export async function getEmails(token: string, email: string): Promise<Email[]> {
|
|
133
|
+
const listResponse = await fetchWithTimeout(`${BASE}/api/messages?page=1`, {
|
|
134
|
+
method: 'GET',
|
|
135
|
+
headers: bearerHeaders(token),
|
|
136
|
+
});
|
|
137
|
+
if (!listResponse.ok) {
|
|
138
|
+
throw new Error(`mail-cx list messages: ${listResponse.status}`);
|
|
139
|
+
}
|
|
140
|
+
const listData = await listResponse.json();
|
|
141
|
+
const messages = Array.isArray(listData?.messages) ? listData.messages : [];
|
|
142
|
+
if (messages.length === 0) {
|
|
143
|
+
return [];
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
const detailPromises = messages.map(async (msg: Record<string, unknown>) => {
|
|
147
|
+
const mid = msg.id;
|
|
148
|
+
if (mid == null) {
|
|
149
|
+
return flattenMessage(msg, email);
|
|
150
|
+
}
|
|
151
|
+
try {
|
|
152
|
+
const detailResponse = await fetchWithTimeout(`${BASE}/api/messages/${mid}`, {
|
|
153
|
+
method: 'GET',
|
|
154
|
+
headers: bearerHeaders(token),
|
|
155
|
+
});
|
|
156
|
+
if (!detailResponse.ok) {
|
|
157
|
+
return flattenMessage(msg, email);
|
|
158
|
+
}
|
|
159
|
+
const detail = await detailResponse.json();
|
|
160
|
+
return flattenMessage(detail as Record<string, unknown>, email);
|
|
161
|
+
} catch {
|
|
162
|
+
return flattenMessage(msg, email);
|
|
163
|
+
}
|
|
164
|
+
});
|
|
165
|
+
|
|
166
|
+
const flat = await Promise.all(detailPromises);
|
|
167
|
+
return flat.map((raw) => normalizeEmail(raw, email));
|
|
168
|
+
}
|
package/src/types.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* 支持的临时邮箱渠道标识
|
|
3
3
|
* 每个渠道对应一个第三方临时邮箱服务商
|
|
4
4
|
*/
|
|
5
|
-
export type Channel = 'tempmail' | 'linshi-email' | 'linshiyou' | 'mffac' | 'tempmail-lol' | 'chatgpt-org-uk' | 'temp-mail-io' | 'awamail' | 'temporary-email-org' | 'mail-tm' | 'dropmail' | 'guerrillamail' | 'maildrop' | 'smail-pw' | 'boomlify' | 'minmail' | 'vip-215' | 'anonbox' | 'fake-legal';
|
|
5
|
+
export type Channel = 'tempmail' | 'linshi-email' | 'linshiyou' | 'mffac' | 'tempmail-lol' | 'chatgpt-org-uk' | 'temp-mail-io' | 'awamail' | 'temporary-email-org' | 'mail-tm' | 'mail-cx' | 'dropmail' | 'guerrillamail' | 'maildrop' | 'smail-pw' | 'boomlify' | 'minmail' | 'vip-215' | 'anonbox' | 'fake-legal';
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
8
|
* 创建临时邮箱后返回的邮箱信息
|