tempmail-sdk 1.1.8 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,110 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.reportTelemetry = reportTelemetry;
4
+ const config_1 = require("./config");
5
+ const version_1 = require("./version");
6
+ const DEFAULT_URL = 'https://sdk-1.openel.top/v1/event';
7
+ const MAX_BATCH = 32;
8
+ const FLUSH_MS = 2000;
9
+ const EMAIL_LIKE = /[^\s@]{1,64}@[^\s@]{1,255}/g;
10
+ const queue = [];
11
+ let flushTimer = null;
12
+ let periodicStarted = false;
13
+ function sanitizeError(msg) {
14
+ if (!msg)
15
+ return '';
16
+ return msg.replace(EMAIL_LIKE, '[redacted]').slice(0, 400);
17
+ }
18
+ function resolveUrl() {
19
+ const c = (0, config_1.getConfig)();
20
+ const u = (c.telemetryUrl || '').trim();
21
+ if (u)
22
+ return u;
23
+ return DEFAULT_URL;
24
+ }
25
+ function telemetryOn() {
26
+ const v = (0, config_1.getConfig)().telemetryEnabled;
27
+ if (v === false)
28
+ return false;
29
+ return true;
30
+ }
31
+ function getFetchForTelemetry() {
32
+ const c = (0, config_1.getConfig)();
33
+ return { fetchFn: c.customFetch || fetch };
34
+ }
35
+ function startPeriodicFlush() {
36
+ if (periodicStarted)
37
+ return;
38
+ periodicStarted = true;
39
+ setInterval(() => {
40
+ void flushQueue();
41
+ }, FLUSH_MS);
42
+ }
43
+ function scheduleDebouncedFlush() {
44
+ if (flushTimer)
45
+ clearTimeout(flushTimer);
46
+ flushTimer = setTimeout(() => {
47
+ flushTimer = null;
48
+ void flushQueue();
49
+ }, FLUSH_MS);
50
+ }
51
+ async function flushQueue() {
52
+ if (!telemetryOn()) {
53
+ queue.length = 0;
54
+ return;
55
+ }
56
+ if (queue.length === 0)
57
+ return;
58
+ const events = queue.splice(0, queue.length);
59
+ const url = resolveUrl();
60
+ if (!url)
61
+ return;
62
+ const sdkVersion = (0, version_1.getSdkVersion)();
63
+ const batch = {
64
+ schema_version: 2,
65
+ sdk_language: 'node',
66
+ sdk_version: sdkVersion,
67
+ os: typeof process !== 'undefined' ? process.platform : 'unknown',
68
+ arch: typeof process !== 'undefined' ? process.arch : 'unknown',
69
+ events,
70
+ };
71
+ const { fetchFn } = getFetchForTelemetry();
72
+ try {
73
+ await fetchFn(url, {
74
+ method: 'POST',
75
+ headers: {
76
+ 'Content-Type': 'application/json',
77
+ 'User-Agent': `tempmail-sdk-node/${sdkVersion}`,
78
+ },
79
+ body: JSON.stringify(batch),
80
+ });
81
+ }
82
+ catch {
83
+ /* ignore */
84
+ }
85
+ }
86
+ function reportTelemetry(operation, channel, success, attemptCount, channelsTried, error) {
87
+ if (!telemetryOn())
88
+ return;
89
+ startPeriodicFlush();
90
+ const ev = {
91
+ operation,
92
+ channel,
93
+ success,
94
+ attempt_count: attemptCount,
95
+ ts_ms: Date.now(),
96
+ };
97
+ if (channelsTried > 0)
98
+ ev.channels_tried = channelsTried;
99
+ const err = sanitizeError(error);
100
+ if (err)
101
+ ev.error = err;
102
+ queue.push(ev);
103
+ if (queue.length >= MAX_BATCH) {
104
+ void flushQueue();
105
+ }
106
+ else {
107
+ scheduleDebouncedFlush();
108
+ }
109
+ }
110
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVsZW1ldHJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3RlbGVtZXRyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQTJHQSwwQ0E4QkM7QUF6SUQscUNBQXFDO0FBQ3JDLHVDQUEwQztBQUUxQyxNQUFNLFdBQVcsR0FBRyxtQ0FBbUMsQ0FBQztBQUN4RCxNQUFNLFNBQVMsR0FBRyxFQUFFLENBQUM7QUFDckIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBRXRCLE1BQU0sVUFBVSxHQUFHLDZCQUE2QixDQUFDO0FBcUJqRCxNQUFNLEtBQUssR0FBcUIsRUFBRSxDQUFDO0FBQ25DLElBQUksVUFBVSxHQUF5QyxJQUFJLENBQUM7QUFDNUQsSUFBSSxlQUFlLEdBQUcsS0FBSyxDQUFDO0FBRTVCLFNBQVMsYUFBYSxDQUFDLEdBQVc7SUFDaEMsSUFBSSxDQUFDLEdBQUc7UUFBRSxPQUFPLEVBQUUsQ0FBQztJQUNwQixPQUFPLEdBQUcsQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLFlBQVksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDN0QsQ0FBQztBQUVELFNBQVMsVUFBVTtJQUNqQixNQUFNLENBQUMsR0FBRyxJQUFBLGtCQUFTLEdBQUUsQ0FBQztJQUN0QixNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxZQUFZLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDeEMsSUFBSSxDQUFDO1FBQUUsT0FBTyxDQUFDLENBQUM7SUFDaEIsT0FBTyxXQUFXLENBQUM7QUFDckIsQ0FBQztBQUVELFNBQVMsV0FBVztJQUNsQixNQUFNLENBQUMsR0FBRyxJQUFBLGtCQUFTLEdBQUUsQ0FBQyxnQkFBZ0IsQ0FBQztJQUN2QyxJQUFJLENBQUMsS0FBSyxLQUFLO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDOUIsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBRUQsU0FBUyxv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QyxLQUFLLEdBQUcsR0FBRyxDQUFDO0lBRXhCLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFFZixJQUFJLEtBQUssQ0FBQyxNQUFNLElBQUksU0FBUyxFQUFFLENBQUM7UUFDOUIsS0FBSyxVQUFVLEVBQUUsQ0FBQztJQUNwQixDQUFDO1NBQU0sQ0FBQztRQUNOLHNCQUFzQixFQUFFLENBQUM7SUFDM0IsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXRDb25maWcgfSBmcm9tICcuL2NvbmZpZyc7XG5pbXBvcnQgeyBnZXRTZGtWZXJzaW9uIH0gZnJvbSAnLi92ZXJzaW9uJztcblxuY29uc3QgREVGQVVMVF9VUkwgPSAnaHR0cHM6Ly9zZGstMS5vcGVuZWwudG9wL3YxL2V2ZW50JztcbmNvbnN0IE1BWF9CQVRDSCA9IDMyO1xuY29uc3QgRkxVU0hfTVMgPSAyMDAwO1xuXG5jb25zdCBFTUFJTF9MSUtFID0gL1teXFxzQF17MSw2NH1AW15cXHNAXXsxLDI1NX0vZztcblxuaW50ZXJmYWNlIFRlbGVtZXRyeUV2ZW50IHtcbiAgb3BlcmF0aW9uOiBzdHJpbmc7XG4gIGNoYW5uZWw6IHN0cmluZztcbiAgc3VjY2VzczogYm9vbGVhbjtcbiAgYXR0ZW1wdF9jb3VudDogbnVtYmVyO1xuICBjaGFubmVsc190cmllZD86IG51bWJlcjtcbiAgZXJyb3I/OiBzdHJpbmc7XG4gIHRzX21zOiBudW1iZXI7XG59XG5cbmludGVyZmFjZSBUZWxlbWV0cnlCYXRjaCB7XG4gIHNjaGVtYV92ZXJzaW9uOiBudW1iZXI7XG4gIHNka19sYW5ndWFnZTogc3RyaW5nO1xuICBzZGtfdmVyc2lvbjogc3RyaW5nO1xuICBvczogc3RyaW5nO1xuICBhcmNoOiBzdHJpbmc7XG4gIGV2ZW50czogVGVsZW1ldHJ5RXZlbnRbXTtcbn1cblxuY29uc3QgcXVldWU6IFRlbGVtZXRyeUV2ZW50W10gPSBbXTtcbmxldCBmbHVzaFRpbWVyOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IG51bGwgPSBudWxsO1xubGV0IHBlcmlvZGljU3RhcnRlZCA9IGZhbHNlO1xuXG5mdW5jdGlvbiBzYW5pdGl6ZUVycm9yKG1zZzogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKCFtc2cpIHJldHVybiAnJztcbiAgcmV0dXJuIG1zZy5yZXBsYWNlKEVNQUlMX0xJS0UsICdbcmVkYWN0ZWRdJykuc2xpY2UoMCwgNDAwKTtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZVVybCgpOiBzdHJpbmcge1xuICBjb25zdCBjID0gZ2V0Q29uZmlnKCk7XG4gIGNvbnN0IHUgPSAoYy50ZWxlbWV0cnlVcmwgfHwgJycpLnRyaW0oKTtcbiAgaWYgKHUpIHJldHVybiB1O1xuICByZXR1cm4gREVGQVVMVF9VUkw7XG59XG5cbmZ1bmN0aW9uIHRlbGVtZXRyeU9uKCk6IGJvb2xlYW4ge1xuICBjb25zdCB2ID0gZ2V0Q29uZmlnKCkudGVsZW1ldHJ5RW5hYmxlZDtcbiAgaWYgKHYgPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBnZXRGZXRjaEZvclRlbGVtZXRyeSgpOiB7IGZldGNoRm46IHR5cGVvZiBmZXRjaCB9IHtcbiAgY29uc3QgYyA9IGdldENvbmZpZygpO1xuICByZXR1cm4geyBmZXRjaEZuOiBjLmN1c3RvbUZldGNoIHx8IGZldGNoIH07XG59XG5cbmZ1bmN0aW9uIHN0YXJ0UGVyaW9kaWNGbHVzaCgpOiB2b2lkIHtcbiAgaWYgKHBlcmlvZGljU3RhcnRlZCkgcmV0dXJuO1xuICBwZXJpb2RpY1N0YXJ0ZWQgPSB0cnVlO1xuICBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgdm9pZCBmbHVzaFF1ZXVlKCk7XG4gIH0sIEZMVVNIX01TKTtcbn1cblxuZnVuY3Rpb24gc2NoZWR1bGVEZWJvdW5jZWRGbHVzaCgpOiB2b2lkIHtcbiAgaWYgKGZsdXNoVGltZXIpIGNsZWFyVGltZW91dChmbHVzaFRpbWVyKTtcbiAgZmx1c2hUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIGZsdXNoVGltZXIgPSBudWxsO1xuICAgIHZvaWQgZmx1c2hRdWV1ZSgpO1xuICB9LCBGTFVTSF9NUyk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZsdXNoUXVldWUoKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmICghdGVsZW1ldHJ5T24oKSkge1xuICAgIHF1ZXVlLmxlbmd0aCA9IDA7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChxdWV1ZS5sZW5ndGggPT09IDApIHJldHVybjtcblxuICBjb25zdCBldmVudHMgPSBxdWV1ZS5zcGxpY2UoMCwgcXVldWUubGVuZ3RoKTtcbiAgY29uc3QgdXJsID0gcmVzb2x2ZVVybCgpO1xuICBpZiAoIXVybCkgcmV0dXJuO1xuXG4gIGNvbnN0IHNka1ZlcnNpb24gPSBnZXRTZGtWZXJzaW9uKCk7XG4gIGNvbnN0IGJhdGNoOiBUZWxlbWV0cnlCYXRjaCA9IHtcbiAgICBzY2hlbWFfdmVyc2lvbjogMixcbiAgICBzZGtfbGFuZ3VhZ2U6ICdub2RlJyxcbiAgICBzZGtfdmVyc2lvbjogc2RrVmVyc2lvbixcbiAgICBvczogdHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnID8gcHJvY2Vzcy5wbGF0Zm9ybSA6ICd1bmtub3duJyxcbiAgICBhcmNoOiB0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgPyBwcm9jZXNzLmFyY2ggOiAndW5rbm93bicsXG4gICAgZXZlbnRzLFxuICB9O1xuXG4gIGNvbnN0IHsgZmV0Y2hGbiB9ID0gZ2V0RmV0Y2hGb3JUZWxlbWV0cnkoKTtcbiAgdHJ5IHtcbiAgICBhd2FpdCBmZXRjaEZuKHVybCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICdVc2VyLUFnZW50JzogYHRlbXBtYWlsLXNkay1ub2RlLyR7c2RrVmVyc2lvbn1gLFxuICAgICAgfSxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KGJhdGNoKSxcbiAgICB9KTtcbiAgfSBjYXRjaCB7XG4gICAgLyogaWdub3JlICovXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcG9ydFRlbGVtZXRyeShcbiAgb3BlcmF0aW9uOiBzdHJpbmcsXG4gIGNoYW5uZWw6IHN0cmluZyxcbiAgc3VjY2VzczogYm9vbGVhbixcbiAgYXR0ZW1wdENvdW50OiBudW1iZXIsXG4gIGNoYW5uZWxzVHJpZWQ6IG51bWJlcixcbiAgZXJyb3I6IHN0cmluZyxcbik6IHZvaWQge1xuICBpZiAoIXRlbGVtZXRyeU9uKCkpIHJldHVybjtcblxuICBzdGFydFBlcmlvZGljRmx1c2goKTtcblxuICBjb25zdCBldjogVGVsZW1ldHJ5RXZlbnQgPSB7XG4gICAgb3BlcmF0aW9uLFxuICAgIGNoYW5uZWwsXG4gICAgc3VjY2VzcyxcbiAgICBhdHRlbXB0X2NvdW50OiBhdHRlbXB0Q291bnQsXG4gICAgdHNfbXM6IERhdGUubm93KCksXG4gIH07XG4gIGlmIChjaGFubmVsc1RyaWVkID4gMCkgZXYuY2hhbm5lbHNfdHJpZWQgPSBjaGFubmVsc1RyaWVkO1xuICBjb25zdCBlcnIgPSBzYW5pdGl6ZUVycm9yKGVycm9yKTtcbiAgaWYgKGVycikgZXYuZXJyb3IgPSBlcnI7XG5cbiAgcXVldWUucHVzaChldik7XG5cbiAgaWYgKHF1ZXVlLmxlbmd0aCA+PSBNQVhfQkFUQ0gpIHtcbiAgICB2b2lkIGZsdXNoUXVldWUoKTtcbiAgfSBlbHNlIHtcbiAgICBzY2hlZHVsZURlYm91bmNlZEZsdXNoKCk7XG4gIH1cbn1cbiJdfQ==
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' | 'mail-cx' | 'dropmail' | 'guerrillamail' | 'maildrop' | 'smail-pw' | 'boomlify' | 'minmail' | 'vip-215' | 'anonbox' | 'fake-legal';
5
+ export type Channel = 'tempmail' | 'tempmail-cn' | '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 内部维护,不对外暴露
@@ -123,7 +123,7 @@ export interface GenerateEmailOptions {
123
123
  channelFallback?: boolean;
124
124
  /** 邮箱有效时长 */
125
125
  duration?: number;
126
- /** 指定邮箱域名 */
126
+ /** 指定邮箱域名或接入域名(如 `tempmail-cn` 自定义域名) */
127
127
  domain?: string | null;
128
128
  /** 重试配置,不传则使用默认值(最多重试 2 次) */
129
129
  retry?: RetryConfig;
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/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==
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICog5pSv5oyB55qE5Li05pe26YKu566x5rig6YGT5qCH6K+GXG4gKiDmr4/kuKrmuKDpgZPlr7nlupTkuIDkuKrnrKzkuInmlrnkuLTml7bpgq7nrrHmnI3liqHllYZcbiAqL1xuZXhwb3J0IHR5cGUgQ2hhbm5lbCA9ICd0ZW1wbWFpbCcgfCAndGVtcG1haWwtY24nIHwgJ2xpbnNoaS1lbWFpbCcgfCAnbGluc2hpeW91JyB8ICdtZmZhYycgfCAndGVtcG1haWwtbG9sJyB8ICdjaGF0Z3B0LW9yZy11aycgfCAndGVtcC1tYWlsLWlvJyB8ICdhd2FtYWlsJyB8ICd0ZW1wb3JhcnktZW1haWwtb3JnJyB8ICdtYWlsLXRtJyB8ICdtYWlsLWN4JyB8ICdkcm9wbWFpbCcgfCAnZ3VlcnJpbGxhbWFpbCcgfCAnbWFpbGRyb3AnIHwgJ3NtYWlsLXB3JyB8ICdib29tbGlmeScgfCAnbWlubWFpbCcgfCAndmlwLTIxNScgfCAnYW5vbmJveCcgfCAnZmFrZS1sZWdhbCc7XG5cbi8qKlxuICog5Yib5bu65Li05pe26YKu566x5ZCO6L+U5Zue55qE6YKu566x5L+h5oGvXG4gKiBUb2tlbiDnrYnorqTor4Hkv6Hmga/nlLEgU0RLIOWGhemDqOe7tOaKpO+8jOS4jeWvueWkluaatOmcslxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVtYWlsSW5mbyB7XG4gIC8qKiDliJvlu7ror6Xpgq7nrrHmiYDkvb/nlKjnmoTmuKDpgZMgKi9cbiAgY2hhbm5lbDogQ2hhbm5lbDtcbiAgLyoqIOS4tOaXtumCrueuseWcsOWdgCAqL1xuICBlbWFpbDogc3RyaW5nO1xuICAvKiog6YKu566x6L+H5pyf5pe26Ze077yISVNPIDg2MDEg5a2X56ym5Liy5oiWIFVuaXgg5pe26Ze05oiz77yJICovXG4gIGV4cGlyZXNBdD86IHN0cmluZyB8IG51bWJlcjtcbiAgLyoqIOmCrueuseWIm+W7uuaXtumXtO+8iElTTyA4NjAxIOWtl+espuS4su+8iSAqL1xuICBjcmVhdGVkQXQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogU0RLIOWGhemDqOS9v+eUqOeahOmCrueuseS/oeaBr++8jOWMheWQqyB0b2tlbiDnrYnorqTor4HmlbDmja5cbiAqIOS4jeWvueWkluWvvOWHuu+8jOeUqOaIt+aXoOazleiuv+mXrlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW50ZXJuYWxFbWFpbEluZm8gZXh0ZW5kcyBFbWFpbEluZm8ge1xuICAvKiog6K6k6K+B5Luk54mM77yM55SxIFNESyDlhoXpg6jnu7TmiqQgKi9cbiAgdG9rZW4/OiBzdHJpbmc7XG59XG5cbi8qKlxuICog5qCH5YeG5YyW6YKu5Lu26ZmE5Lu2XG4gKiDkuI3lkIzmuKDpgZPnmoTpmYTku7blrZfmrrXlkI3kuI3lkIzvvIxTREsg57uf5LiA5b2S5LiA5YyW5Li65q2k57uT5p6EXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW1haWxBdHRhY2htZW50IHtcbiAgLyoqIOmZhOS7tuaWh+S7tuWQjSAqL1xuICBmaWxlbmFtZTogc3RyaW5nO1xuICAvKiog6ZmE5Lu25aSn5bCP77yI5a2X6IqC77yJICovXG4gIHNpemU/OiBudW1iZXI7XG4gIC8qKiBNSU1FIOexu+Wei++8jOWmgiBhcHBsaWNhdGlvbi9wZGYgKi9cbiAgY29udGVudFR5cGU/OiBzdHJpbmc7XG4gIC8qKiDpmYTku7bkuIvovb3lnLDlnYAgKi9cbiAgdXJsPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIOagh+WHhuWMlumCruS7tuagvOW8jyAtIOaJgOacieaPkOS+m+WVhui/lOWbnue7n+S4gOe7k+aehFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVtYWlsIHtcbiAgLyoqIOmCruS7tuWUr+S4gOagh+ivhiAqL1xuICBpZDogc3RyaW5nO1xuICAvKiog5Y+R5Lu25Lq66YKu566x5Zyw5Z2AICovXG4gIGZyb206IHN0cmluZztcbiAgLyoqIOaUtuS7tuS6uumCrueuseWcsOWdgCAqL1xuICB0bzogc3RyaW5nO1xuICAvKiog6YKu5Lu25Li76aKYICovXG4gIHN1YmplY3Q6IHN0cmluZztcbiAgLyoqIOe6r+aWh+acrOWGheWuuSAqL1xuICB0ZXh0OiBzdHJpbmc7XG4gIC8qKiBIVE1MIOWGheWuuSAqL1xuICBodG1sOiBzdHJpbmc7XG4gIC8qKiBJU08gODYwMSDmoLzlvI/nmoTml6XmnJ/lrZfnrKbkuLIgKi9cbiAgZGF0ZTogc3RyaW5nO1xuICAvKiog5piv5ZCm5bey6K+7ICovXG4gIGlzUmVhZDogYm9vbGVhbjtcbiAgLyoqIOmZhOS7tuWIl+ihqCAqL1xuICBhdHRhY2htZW50czogRW1haWxBdHRhY2htZW50W107XG59XG5cbi8qKlxuICog6I635Y+W6YKu5Lu25YiX6KGo55qE6L+U5Zue57uT5p6cXG4gKiBzdWNjZXNzIOS4uiBmYWxzZSDml7booajnpLror7fmsYLlpLHotKXvvIjph43or5XogJflsL3vvInvvIxlbWFpbHMg5Li656m65pWw57uEXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2V0RW1haWxzUmVzdWx0IHtcbiAgLyoqIOaJgOS9v+eUqOeahOa4oOmBkyAqL1xuICBjaGFubmVsOiBDaGFubmVsO1xuICAvKiog5p+l6K+i55qE6YKu566x5Zyw5Z2AICovXG4gIGVtYWlsOiBzdHJpbmc7XG4gIC8qKiDpgq7ku7bliJfooajvvIzlpLHotKXml7bkuLrnqbrmlbDnu4QgKi9cbiAgZW1haWxzOiBFbWFpbFtdO1xuICAvKiog6K+35rGC5piv5ZCm5oiQ5Yqf77yMZmFsc2Ug6KGo56S66YeN6K+V6ICX5bC95ZCO5LuN5aSx6LSlICovXG4gIHN1Y2Nlc3M6IGJvb2xlYW47XG59XG5cbi8qKlxuICog6YeN6K+V6YWN572uXG4gKiBTREsg5YaF6YOo5a+5572R57uc6ZSZ6K+v44CB6LaF5pe244CBNXh4IOacjeWKoeerr+mUmeivr+iHquWKqOmHjeivlVxuICogNHh4IOWuouaIt+err+mUmeivr++8iOWmguWPguaVsOmUmeivr++8ieS4jeS8mumHjeivlVxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogLy8g6Ieq5a6a5LmJ6YeN6K+V562W55Wl77ya5pyA5aSa6YeN6K+VIDMg5qyh77yM6aaW5qyh5bu26L+fIDIg56eSXG4gKiBjb25zdCBlbWFpbCA9IGF3YWl0IGdlbmVyYXRlRW1haWwoe1xuICogICBjaGFubmVsOiAnbWFpbC10bScsXG4gKiAgIHJldHJ5OiB7IG1heFJldHJpZXM6IDMsIGluaXRpYWxEZWxheTogMjAwMCB9LFxuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXRyeUNvbmZpZyB7XG4gIC8qKiDmnIDlpKfph43or5XmrKHmlbDvvIjkuI3lkKvpppbmrKHor7fmsYLvvInvvIzpu5jorqQgMiAqL1xuICBtYXhSZXRyaWVzPzogbnVtYmVyO1xuICAvKiog5Yid5aeL6YeN6K+V5bu26L+f77yI5q+r56eS77yJ77yM6YeH55So5oyH5pWw6YCA6YG/562W55Wl77yM6buY6K6kIDEwMDAgKi9cbiAgaW5pdGlhbERlbGF5PzogbnVtYmVyO1xuICAvKiog5pyA5aSn6YeN6K+V5bu26L+f5LiK6ZmQ77yI5q+r56eS77yJ77yM6buY6K6kIDUwMDAgKi9cbiAgbWF4RGVsYXk/OiBudW1iZXI7XG4gIC8qKiDljZXmrKHor7fmsYLotoXml7bml7bpl7TvvIjmr6vnp5LvvInvvIzpu5jorqQgMTUwMDAgKi9cbiAgdGltZW91dD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiDliJvlu7rkuLTml7bpgq7nrrHnmoTpgInpoblcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIC8vIOS9v+eUqOaMh+Wumua4oOmBk+WIm+W7uumCrueusVxuICogY29uc3QgZW1haWwgPSBhd2FpdCBnZW5lcmF0ZUVtYWlsKHsgY2hhbm5lbDogJ21haWwtdG0nIH0pO1xuICpcbiAqIC8vIOmaj+acuumAieaLqea4oOmBk1xuICogY29uc3QgZW1haWwgPSBhd2FpdCBnZW5lcmF0ZUVtYWlsKCk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHZW5lcmF0ZUVtYWlsT3B0aW9ucyB7XG4gIC8qKiDmjIflrprmuKDpgZPvvIzkuI3kvKDliJnpmo/mnLrpgInmi6kgKi9cbiAgY2hhbm5lbD86IENoYW5uZWw7XG4gIC8qKlxuICAgKiDkuLogZmFsc2Ug5pe25LuF5bCd6K+VIGBjaGFubmVsYCDmjIflrprnmoTmuKDpgZPvvIzlpLHotKXljbPov5Tlm54gbnVsbO+8jOS4jSBGYWxsYmFjayDliLDlhbbku5bmuKDpgZPjgIJcbiAgICog55So5LqO5oyJ5rig6YGT5o6i5rWL5Y+v55So5oCn44CC6buY6K6kIHRydWXvvIjkv53mjIHljp/mnInjgIzkvJjlhYjmjIflrprmuKDpgZPjgIHlpLHotKXlkI7or5Xlhbbku5bjgI3ooYzkuLrvvInjgIJcbiAgICovXG4gIGNoYW5uZWxGYWxsYmFjaz86IGJvb2xlYW47XG4gIC8qKiDpgq7nrrHmnInmlYjml7bplb8gKi9cbiAgZHVyYXRpb24/OiBudW1iZXI7XG4gIC8qKiDmjIflrprpgq7nrrHln5/lkI3miJbmjqXlhaXln5/lkI3vvIjlpoIgYHRlbXBtYWlsLWNuYCDoh6rlrprkuYnln5/lkI3vvIkgKi9cbiAgZG9tYWluPzogc3RyaW5nIHwgbnVsbDtcbiAgLyoqIOmHjeivlemFjee9ru+8jOS4jeS8oOWImeS9v+eUqOm7mOiupOWAvO+8iOacgOWkmumHjeivlSAyIOasoe+8iSAqL1xuICByZXRyeT86IFJldHJ5Q29uZmlnO1xufVxuXG4vKipcbiAqIOiOt+WPlumCruS7tuWIl+ihqOeahOmAiemhuVxuICogQ2hhbm5lbC9FbWFpbC9Ub2tlbiDnrYnnlLEgU0RLIOS7jiBFbWFpbEluZm8g5Lit6Ieq5Yqo6I635Y+W77yM55So5oi35peg6ZyA5omL5Yqo5Lyg6YCSXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBjb25zdCBpbmZvID0gYXdhaXQgZ2VuZXJhdGVFbWFpbCh7IGNoYW5uZWw6ICdtYWlsLXRtJyB9KTtcbiAqIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGdldEVtYWlscyhpbmZvKTtcbiAqIGlmIChyZXN1bHQuc3VjY2VzcyAmJiByZXN1bHQuZW1haWxzLmxlbmd0aCA+IDApIHtcbiAqICAgY29uc29sZS5sb2coJ+aUtuWIsOmCruS7tjonLCByZXN1bHQuZW1haWxzKTtcbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdldEVtYWlsc09wdGlvbnMge1xuICAvKiog6YeN6K+V6YWN572u77yM5LiN5Lyg5YiZ5L2/55So6buY6K6k5YC877yI5pyA5aSa6YeN6K+VIDIg5qyh77yJICovXG4gIHJldHJ5PzogUmV0cnlDb25maWc7XG59XG4iXX0=
@@ -0,0 +1 @@
1
+ export declare function getSdkVersion(): string;
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getSdkVersion = getSdkVersion;
4
+ const fs_1 = require("fs");
5
+ const path_1 = require("path");
6
+ let cached = null;
7
+ function getSdkVersion() {
8
+ if (cached !== null) {
9
+ return cached;
10
+ }
11
+ try {
12
+ const pkgPath = (0, path_1.join)(__dirname, '..', 'package.json');
13
+ const raw = (0, fs_1.readFileSync)(pkgPath, 'utf8');
14
+ const j = JSON.parse(raw);
15
+ cached = j.version && String(j.version).trim() ? String(j.version).trim() : '0.0.0';
16
+ }
17
+ catch {
18
+ cached = '0.0.0';
19
+ }
20
+ return cached;
21
+ }
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy92ZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBS0Esc0NBYUM7QUFsQkQsMkJBQWtDO0FBQ2xDLCtCQUE0QjtBQUU1QixJQUFJLE1BQU0sR0FBa0IsSUFBSSxDQUFDO0FBRWpDLFNBQWdCLGFBQWE7SUFDM0IsSUFBSSxNQUFNLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDcEIsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUNELElBQUksQ0FBQztRQUNILE1BQU0sT0FBTyxHQUFHLElBQUEsV0FBSSxFQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDdEQsTUFBTSxHQUFHLEdBQUcsSUFBQSxpQkFBWSxFQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUMxQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBeUIsQ0FBQztRQUNsRCxNQUFNLEdBQUcsQ0FBQyxDQUFDLE9BQU8sSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7SUFDdEYsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE1BQU0sR0FBRyxPQUFPLENBQUM7SUFDbkIsQ0FBQztJQUNELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByZWFkRmlsZVN5bmMgfSBmcm9tICdmcyc7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSAncGF0aCc7XG5cbmxldCBjYWNoZWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2RrVmVyc2lvbigpOiBzdHJpbmcge1xuICBpZiAoY2FjaGVkICE9PSBudWxsKSB7XG4gICAgcmV0dXJuIGNhY2hlZDtcbiAgfVxuICB0cnkge1xuICAgIGNvbnN0IHBrZ1BhdGggPSBqb2luKF9fZGlybmFtZSwgJy4uJywgJ3BhY2thZ2UuanNvbicpO1xuICAgIGNvbnN0IHJhdyA9IHJlYWRGaWxlU3luYyhwa2dQYXRoLCAndXRmOCcpO1xuICAgIGNvbnN0IGogPSBKU09OLnBhcnNlKHJhdykgYXMgeyB2ZXJzaW9uPzogc3RyaW5nIH07XG4gICAgY2FjaGVkID0gai52ZXJzaW9uICYmIFN0cmluZyhqLnZlcnNpb24pLnRyaW0oKSA/IFN0cmluZyhqLnZlcnNpb24pLnRyaW0oKSA6ICcwLjAuMCc7XG4gIH0gY2F0Y2gge1xuICAgIGNhY2hlZCA9ICcwLjAuMCc7XG4gIH1cbiAgcmV0dXJuIGNhY2hlZDtcbn1cbiJdfQ==
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "tempmail-sdk",
3
- "version": "1.1.8",
4
- "description": "临时邮箱 SDK - 支持 20 个临时邮箱服务商",
3
+ "version": "1.2.0",
4
+ "description": "临时邮箱 SDK - 支持 21 个临时邮箱服务商",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
7
7
  "scripts": {
package/src/config.ts CHANGED
@@ -9,6 +9,8 @@
9
9
  * DROPMAIL_AUTH_TOKEN / DROPMAIL_API_TOKEN - DropMail GraphQL 的 af_ 令牌(可选;未设置时 SDK 会 /api/token/generate 获取并在将过期时用 /api/token/renew 续期)
10
10
  * DROPMAIL_NO_AUTO_TOKEN - 设为 "1" 或 "true" 则禁止自动拉取/续期令牌
11
11
  * DROPMAIL_RENEW_LIFETIME - 自动续期请求的 lifetime,默认 1d(与官网 renew 接口一致)
12
+ * TEMPMAIL_TELEMETRY_ENABLED - true/false,默认 true;false/0/no 关闭匿名用量上报
13
+ * TEMPMAIL_TELEMETRY_URL - 自定义上报端点 URL
12
14
  *
13
15
  * Node.js 环境下设置 insecure 会自动设置 NODE_TLS_REJECT_UNAUTHORIZED=0
14
16
  */
@@ -41,6 +43,10 @@ export interface SDKConfig {
41
43
  * 当设置了 proxy 但环境不支持 undici 时,可通过此选项传入支持代理的 fetch 实现
42
44
  */
43
45
  customFetch?: typeof fetch;
46
+ /** 为 false 时关闭匿名用量上报;未设置时默认开启 */
47
+ telemetryEnabled?: boolean;
48
+ /** 非空时覆盖默认上报 URL */
49
+ telemetryUrl?: string;
44
50
  }
45
51
 
46
52
  /** 从环境变量读取默认配置 */
@@ -57,6 +63,15 @@ function loadEnvConfig(): SDKConfig {
57
63
  if (process.env.TEMPMAIL_INSECURE === '1' || process.env.TEMPMAIL_INSECURE?.toLowerCase() === 'true') {
58
64
  config.insecure = true;
59
65
  }
66
+ const te = process.env.TEMPMAIL_TELEMETRY_ENABLED?.trim().toLowerCase();
67
+ if (te === 'false' || te === '0' || te === 'no') {
68
+ config.telemetryEnabled = false;
69
+ } else if (te === 'true' || te === '1' || te === 'yes') {
70
+ config.telemetryEnabled = true;
71
+ }
72
+ if (process.env.TEMPMAIL_TELEMETRY_URL?.trim()) {
73
+ config.telemetryUrl = process.env.TEMPMAIL_TELEMETRY_URL.trim();
74
+ }
60
75
  }
61
76
  return config;
62
77
  }
package/src/index.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import * as tempmail from './providers/tempmail';
2
+ import * as tempmailCn from './providers/tempmail-cn';
2
3
  import * as linshiEmail from './providers/linshi-email';
3
4
  import * as linshiyou from './providers/linshiyou';
4
5
  import * as mffac from './providers/mffac';
@@ -19,7 +20,8 @@ import * as vip215 from './providers/vip-215';
19
20
  import * as anonbox from './providers/anonbox';
20
21
  import * as fakeLegal from './providers/fake-legal';
21
22
  import { Channel, EmailInfo, InternalEmailInfo, Email, GetEmailsResult, GenerateEmailOptions, GetEmailsOptions } from './types';
22
- import { withRetry } from './retry';
23
+ import { withRetry, withRetryWithAttempts } from './retry';
24
+ import { reportTelemetry } from './telemetry';
23
25
  import { logger } from './logger';
24
26
  import { setConfig, getConfig } from './config';
25
27
 
@@ -33,9 +35,11 @@ export { Channel, EmailInfo, Email, EmailAttachment, GetEmailsResult, GenerateEm
33
35
  */
34
36
  const tokenStore = new WeakMap<EmailInfo, string>();
35
37
  export { normalizeEmail } from './normalize';
36
- export { withRetry, fetchWithTimeout, RetryOptions } from './retry';
38
+ export { withRetry, withRetryWithAttempts, fetchWithTimeout, RetryOptions } from './retry';
39
+ export type { RetryWithAttemptsResult } from './retry';
37
40
  export { LogLevel, LogHandler, setLogLevel, getLogLevel, setLogger, logger } from './logger';
38
41
  export { SDKConfig, setConfig, getConfig } from './config';
42
+ export { getSdkVersion } from './version';
39
43
  export type { SyntheticBrowserProfile } from './providers/linshi-token';
40
44
  export {
41
45
  deriveLinshiApiPathKey,
@@ -45,7 +49,7 @@ export {
45
49
  } from './providers/linshi-token';
46
50
 
47
51
  /** 所有支持的渠道列表,用于随机选择和遍历 */
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'];
52
+ const allChannels: Channel[] = ['tempmail', 'tempmail-cn', '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'];
49
53
 
50
54
  /**
51
55
  * 渠道信息,包含渠道标识、显示名称和对应网站
@@ -62,6 +66,7 @@ export interface ChannelInfo {
62
66
  /** 渠道信息映射表 */
63
67
  const channelInfoMap: Record<Channel, ChannelInfo> = {
64
68
  'tempmail': { channel: 'tempmail', name: 'TempMail', website: 'tempmail.ing' },
69
+ 'tempmail-cn': { channel: 'tempmail-cn', name: 'TempMail CN', website: 'tempmail.cn' },
65
70
  'linshi-email': { channel: 'linshi-email', name: '临时邮箱', website: 'linshi-email.com' },
66
71
  'linshiyou': { channel: 'linshiyou', name: '临时邮', website: 'linshiyou.com' },
67
72
  'tempmail-lol': { channel: 'tempmail-lol', name: 'TempMail LOL', website: 'tempmail.lol' },
@@ -135,11 +140,16 @@ export async function generateEmail(options: GenerateEmailOptions = {}): Promise
135
140
  const allowFallback = options.channelFallback !== false;
136
141
  const tryOrder = buildChannelOrder(options.channel, allowFallback);
137
142
 
143
+ let channelsTried = 0;
144
+ let lastErr = '';
138
145
  for (const ch of tryOrder) {
146
+ channelsTried += 1;
139
147
  logger.info(`创建临时邮箱, 渠道: ${ch}`);
140
- try {
141
- const internal: InternalEmailInfo = await withRetry(() => generateEmailOnce(ch, options), options.retry);
148
+ const r = await withRetryWithAttempts(() => generateEmailOnce(ch, options), options.retry);
149
+ if (r.ok) {
150
+ const internal = r.value;
142
151
  logger.info(`邮箱创建成功: ${internal.email} (渠道: ${ch})`);
152
+ reportTelemetry('generate_email', ch, true, r.attempts, channelsTried, '');
143
153
 
144
154
  /* 将 token 存入内部存储,不暴露给用户 */
145
155
  const publicInfo: EmailInfo = {
@@ -152,12 +162,14 @@ export async function generateEmail(options: GenerateEmailOptions = {}): Promise
152
162
  tokenStore.set(publicInfo, internal.token);
153
163
  }
154
164
  return publicInfo;
155
- } catch (err: any) {
156
- logger.warn(`渠道 ${ch} 不可用: ${err.message || err},尝试下一个渠道`);
157
165
  }
166
+ const msg = (r.error as any)?.message || String(r.error);
167
+ lastErr = msg;
168
+ logger.warn(`渠道 ${ch} 不可用: ${msg},尝试下一个渠道`);
158
169
  }
159
170
 
160
171
  logger.error('所有渠道均不可用,创建邮箱失败');
172
+ reportTelemetry('generate_email', '', false, 0, channelsTried, lastErr);
161
173
  return null;
162
174
  }
163
175
 
@@ -186,6 +198,8 @@ async function generateEmailOnce(channel: Channel, options: GenerateEmailOptions
186
198
  switch (channel) {
187
199
  case 'tempmail':
188
200
  return tempmail.generateEmail(options.duration || 30);
201
+ case 'tempmail-cn':
202
+ return tempmailCn.generateEmail(options.domain ?? null);
189
203
  case 'linshi-email':
190
204
  return linshiEmail.generateEmail();
191
205
  case 'linshiyou':
@@ -251,6 +265,7 @@ async function generateEmailOnce(channel: Channel, options: GenerateEmailOptions
251
265
  */
252
266
  export async function getEmails(info: EmailInfo, options?: GetEmailsOptions): Promise<GetEmailsResult> {
253
267
  if (!info) {
268
+ reportTelemetry('get_emails', '', false, 0, 0, 'EmailInfo is required, call generateEmail() first');
254
269
  throw new Error('EmailInfo is required, call generateEmail() first');
255
270
  }
256
271
 
@@ -258,29 +273,35 @@ export async function getEmails(info: EmailInfo, options?: GetEmailsOptions): Pr
258
273
  const token = tokenStore.get(info);
259
274
 
260
275
  if (!channel) {
276
+ reportTelemetry('get_emails', '', false, 0, 0, 'Channel is required');
261
277
  throw new Error('Channel is required');
262
278
  }
263
279
  if (!email && channel !== 'tempmail-lol') {
280
+ reportTelemetry('get_emails', channel, false, 0, 0, 'Email is required');
264
281
  throw new Error('Email is required');
265
282
  }
266
283
 
267
284
  logger.debug(`获取邮件, 渠道: ${channel}, 邮箱: ${email}`);
268
- try {
269
- const emails = await withRetry(() => getEmailsOnce(channel, email, token), options?.retry);
285
+ const gr = await withRetryWithAttempts(() => getEmailsOnce(channel, email, token), options?.retry);
286
+ if (gr.ok) {
287
+ const emails = gr.value;
270
288
  if (emails.length > 0) {
271
289
  logger.info(`获取到 ${emails.length} 封邮件, 渠道: ${channel}`);
272
290
  } else {
273
291
  logger.debug(`暂无邮件, 渠道: ${channel}`);
274
292
  }
293
+ reportTelemetry('get_emails', channel, true, gr.attempts, 0, '');
275
294
  return { channel, email, emails, success: true };
276
- } catch (err: any) {
277
- /*
278
- * 重试耗尽后仍然失败 → 返回空结果而非抛异常
279
- * 这样调用方在轮询场景下不会因为一次网络波动而中断整个流程
280
- */
281
- logger.error(`获取邮件失败, 渠道: ${channel}, 错误: ${err.message || err}`);
282
- return { channel, email, emails: [], success: false };
283
295
  }
296
+ const err = gr.error as any;
297
+ const errMsg = err?.message || String(err);
298
+ /*
299
+ * 重试耗尽后仍然失败 → 返回空结果而非抛异常
300
+ * 这样调用方在轮询场景下不会因为一次网络波动而中断整个流程
301
+ */
302
+ logger.error(`获取邮件失败, 渠道: ${channel}, 错误: ${errMsg}`);
303
+ reportTelemetry('get_emails', channel, false, gr.attempts, 0, errMsg);
304
+ return { channel, email, emails: [], success: false };
284
305
  }
285
306
 
286
307
  /**
@@ -291,6 +312,8 @@ async function getEmailsOnce(channel: Channel, email: string, token?: string): P
291
312
  switch (channel) {
292
313
  case 'tempmail':
293
314
  return tempmail.getEmails(email);
315
+ case 'tempmail-cn':
316
+ return tempmailCn.getEmails(email);
294
317
  case 'linshi-email':
295
318
  if (!token) throw new Error('internal error: token missing for linshi-email');
296
319
  return linshiEmail.getEmails(email, token);
@@ -387,6 +410,7 @@ export class TempEmailClient {
387
410
  */
388
411
  async getEmails(options?: GetEmailsOptions): Promise<GetEmailsResult> {
389
412
  if (!this.emailInfo) {
413
+ reportTelemetry('get_emails', '', false, 0, 0, 'No email generated. Call generate() first.');
390
414
  throw new Error('No email generated. Call generate() first.');
391
415
  }
392
416