react-native-email-imap-smtp 0.3.28 → 0.3.29
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/lib/module/index.js +35 -3
- package/lib/module/index.js.map +1 -1
- package/lib/module/log.js +74 -0
- package/lib/module/log.js.map +1 -0
- package/lib/typescript/server/src/imapHandler.d.ts.map +1 -1
- package/lib/typescript/src/index.d.ts +48 -0
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/log.d.ts +22 -0
- package/lib/typescript/src/log.d.ts.map +1 -0
- package/lib/typescript/src/types.d.ts +7 -0
- package/lib/typescript/src/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/server/lib/imapHandler.d.ts.map +1 -1
- package/server/lib/imapHandler.js +33 -13
- package/server/lib/imapHandler.js.map +1 -1
- package/server/src/imapHandler.ts +34 -18
- package/src/index.tsx +39 -3
- package/src/log.ts +83 -0
- package/src/types.ts +7 -0
- package/src/web.ts +544 -544
package/src/index.tsx
CHANGED
|
@@ -8,6 +8,14 @@
|
|
|
8
8
|
// ============================================================
|
|
9
9
|
|
|
10
10
|
const { Platform } = require('react-native');
|
|
11
|
+
const {
|
|
12
|
+
logAttachmentWarnings,
|
|
13
|
+
logWarning,
|
|
14
|
+
logInfo,
|
|
15
|
+
logError,
|
|
16
|
+
setLogHandler,
|
|
17
|
+
getLogHandler,
|
|
18
|
+
} = require('./log');
|
|
11
19
|
|
|
12
20
|
// ─── Platform-aware module resolution ──────────────────────
|
|
13
21
|
|
|
@@ -94,13 +102,26 @@ module.exports = {
|
|
|
94
102
|
uids: number[]
|
|
95
103
|
) => Promise<import('./types').BatchResult>,
|
|
96
104
|
imapExpunge: impl.imapExpunge as () => Promise<void>,
|
|
97
|
-
imapFetchAttachments:
|
|
105
|
+
imapFetchAttachments: (async (
|
|
106
|
+
uid: number,
|
|
107
|
+
partId: string
|
|
108
|
+
): Promise<import('./types').Attachment | null> => {
|
|
109
|
+
const att = await impl.imapFetchAttachments(uid, partId);
|
|
110
|
+
if (att?.integrityWarning) {
|
|
111
|
+
logWarning(`附件完整性告警: ${att.filename} — ${att.integrityWarning}`);
|
|
112
|
+
}
|
|
113
|
+
return att;
|
|
114
|
+
}) as (
|
|
98
115
|
uid: number,
|
|
99
116
|
partId: string
|
|
100
117
|
) => Promise<import('./types').Attachment | null>,
|
|
101
|
-
imapFetchAllAttachments:
|
|
118
|
+
imapFetchAllAttachments: (async (
|
|
102
119
|
uid: number
|
|
103
|
-
)
|
|
120
|
+
): Promise<import('./types').Attachment[]> => {
|
|
121
|
+
const atts = await impl.imapFetchAllAttachments(uid);
|
|
122
|
+
logAttachmentWarnings(atts);
|
|
123
|
+
return atts;
|
|
124
|
+
}) as (uid: number) => Promise<import('./types').Attachment[]>,
|
|
104
125
|
imapIdle: impl.imapIdle as (
|
|
105
126
|
callback: (notification: import('./types').IMAPNotification) => void
|
|
106
127
|
) => Promise<void>,
|
|
@@ -143,4 +164,19 @@ module.exports = {
|
|
|
143
164
|
*/
|
|
144
165
|
SmtpNotConnectedError: impl.SmtpNotConnectedError as
|
|
145
166
|
(new () => Error) | undefined,
|
|
167
|
+
|
|
168
|
+
// ─── 公共日志工具(所有平台可用) ─────────────────────────
|
|
169
|
+
|
|
170
|
+
/** 打印普通提示 */
|
|
171
|
+
logInfo,
|
|
172
|
+
/** 打印告警(Web 端=控制台 warn,原生端=调试输出) */
|
|
173
|
+
logWarning,
|
|
174
|
+
/** 打印错误 */
|
|
175
|
+
logError,
|
|
176
|
+
/** 批量打印一批附件的完整性告警 */
|
|
177
|
+
logAttachmentWarnings,
|
|
178
|
+
/** 自定义日志处理器(传 null 恢复默认 console 输出) */
|
|
179
|
+
setLogHandler,
|
|
180
|
+
/** 获取当前日志处理器 */
|
|
181
|
+
getLogHandler,
|
|
146
182
|
};
|
package/src/log.ts
ADDED
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
// ============================================================
|
|
2
|
+
// 公共日志工具
|
|
3
|
+
// ============================================================
|
|
4
|
+
//
|
|
5
|
+
// 统一所有需要向「使用方应用」输出提示/告警/错误的打印入口。
|
|
6
|
+
// 默认使用 console.*(RN 的 console 会自动桥接到原生调试输出:
|
|
7
|
+
// Android Logcat / iOS Xcode console / Windows Debug 输出)。
|
|
8
|
+
//
|
|
9
|
+
// 使用方可通过 setLogHandler() 自定义打印目标(例如接入自己的
|
|
10
|
+
// 日志系统、把 warn 转发到业务 UI 等)。
|
|
11
|
+
//
|
|
12
|
+
// 用法:
|
|
13
|
+
// import { logWarning } from 'react-native-email-imap-smtp';
|
|
14
|
+
// logWarning('附件大小异常', detail);
|
|
15
|
+
// ============================================================
|
|
16
|
+
|
|
17
|
+
export type LogLevel = 'info' | 'warn' | 'error';
|
|
18
|
+
|
|
19
|
+
/** 自定义日志处理函数签名 */
|
|
20
|
+
export type LogHandler = (
|
|
21
|
+
level: LogLevel,
|
|
22
|
+
message: string,
|
|
23
|
+
data?: unknown
|
|
24
|
+
) => void;
|
|
25
|
+
|
|
26
|
+
/** 默认处理器:走 console,RN 会自动桥接到原生调试输出 */
|
|
27
|
+
const defaultHandler: LogHandler = (level, message, data) => {
|
|
28
|
+
const prefix = '[email-imap-smtp]';
|
|
29
|
+
switch (level) {
|
|
30
|
+
case 'warn':
|
|
31
|
+
console.warn(prefix, message, data !== undefined ? data : '');
|
|
32
|
+
break;
|
|
33
|
+
case 'error':
|
|
34
|
+
console.error(prefix, message, data !== undefined ? data : '');
|
|
35
|
+
break;
|
|
36
|
+
default:
|
|
37
|
+
console.log(prefix, message, data !== undefined ? data : '');
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
let handler: LogHandler = defaultHandler;
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* 自定义日志处理器。
|
|
45
|
+
* 传 `null` 或省略可恢复默认的 console 输出。
|
|
46
|
+
*/
|
|
47
|
+
export function setLogHandler(next?: LogHandler | null): void {
|
|
48
|
+
handler = next || defaultHandler;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/** 获取当前日志处理器(默认是 console 版) */
|
|
52
|
+
export function getLogHandler(): LogHandler {
|
|
53
|
+
return handler;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/** 打印普通提示 */
|
|
57
|
+
export function logInfo(message: string, data?: unknown): void {
|
|
58
|
+
handler('info', message, data);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/** 打印告警(Web 端=控制台 warn,原生端=调试输出) */
|
|
62
|
+
export function logWarning(message: string, data?: unknown): void {
|
|
63
|
+
handler('warn', message, data);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/** 打印错误 */
|
|
67
|
+
export function logError(message: string, data?: unknown): void {
|
|
68
|
+
handler('error', message, data);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/** 便捷方法:批量打印一批附件的完整性告警 */
|
|
72
|
+
export function logAttachmentWarnings(
|
|
73
|
+
attachments: Array<{ filename?: string; integrityWarning?: string }>
|
|
74
|
+
): void {
|
|
75
|
+
if (!attachments || !attachments.length) return;
|
|
76
|
+
for (const att of attachments) {
|
|
77
|
+
if (att.integrityWarning) {
|
|
78
|
+
logWarning(
|
|
79
|
+
`附件完整性告警: ${att.filename ?? ''} — ${att.integrityWarning}`
|
|
80
|
+
);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
package/src/types.ts
CHANGED
|
@@ -264,6 +264,13 @@ export interface Attachment {
|
|
|
264
264
|
contentDisposition: string;
|
|
265
265
|
/** 附件在本地缓存的文件路径(大附件避免全部加载到内存) */
|
|
266
266
|
localPath?: string;
|
|
267
|
+
/**
|
|
268
|
+
* 完整性校验告警(可选)。
|
|
269
|
+
* 仅当服务器声明的附件大小与实际下载字节数不一致时存在,
|
|
270
|
+
* 例如 `'附件大小与服务器声明不符: xxx'` 或 `'附件疑似截断: xxx'`。
|
|
271
|
+
* 正常下载的附件不包含此字段。
|
|
272
|
+
*/
|
|
273
|
+
integrityWarning?: string;
|
|
267
274
|
}
|
|
268
275
|
|
|
269
276
|
/**
|