@framers/agentos-ext-channel-email 0.1.0 → 0.1.1
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/LICENSE +96 -21
- package/dist/EmailChannelAdapter.d.ts +49 -0
- package/dist/EmailChannelAdapter.d.ts.map +1 -0
- package/dist/EmailChannelAdapter.js +88 -0
- package/dist/EmailChannelAdapter.js.map +1 -0
- package/dist/EmailService.d.ts +81 -0
- package/dist/EmailService.d.ts.map +1 -0
- package/dist/EmailService.js +392 -0
- package/dist/EmailService.js.map +1 -0
- package/dist/index.d.ts +47 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +128 -0
- package/dist/index.js.map +1 -0
- package/dist/tools/extractCodes.d.ts +35 -0
- package/dist/tools/extractCodes.d.ts.map +1 -0
- package/dist/tools/extractCodes.js +34 -0
- package/dist/tools/extractCodes.js.map +1 -0
- package/dist/tools/read.d.ts +34 -0
- package/dist/tools/read.d.ts.map +1 -0
- package/dist/tools/read.js +33 -0
- package/dist/tools/read.js.map +1 -0
- package/dist/tools/reply.d.ts +40 -0
- package/dist/tools/reply.d.ts.map +1 -0
- package/dist/tools/reply.js +35 -0
- package/dist/tools/reply.js.map +1 -0
- package/dist/tools/search.d.ts +40 -0
- package/dist/tools/search.d.ts.map +1 -0
- package/dist/tools/search.js +39 -0
- package/dist/tools/search.js.map +1 -0
- package/dist/tools/send.d.ts +66 -0
- package/dist/tools/send.d.ts.map +1 -0
- package/dist/tools/send.js +53 -0
- package/dist/tools/send.js.map +1 -0
- package/manifest.json +1 -1
- package/package.json +11 -7
|
@@ -0,0 +1,392 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// @ts-nocheck
|
|
3
|
+
/**
|
|
4
|
+
* @fileoverview Email service layer.
|
|
5
|
+
*
|
|
6
|
+
* Wraps nodemailer (SMTP) and imapflow (IMAP) for sending,
|
|
7
|
+
* reading, searching, and replying to emails.
|
|
8
|
+
*/
|
|
9
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
12
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
13
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
14
|
+
}
|
|
15
|
+
Object.defineProperty(o, k2, desc);
|
|
16
|
+
}) : (function(o, m, k, k2) {
|
|
17
|
+
if (k2 === undefined) k2 = k;
|
|
18
|
+
o[k2] = m[k];
|
|
19
|
+
}));
|
|
20
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
21
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
22
|
+
}) : function(o, v) {
|
|
23
|
+
o["default"] = v;
|
|
24
|
+
});
|
|
25
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
26
|
+
var ownKeys = function(o) {
|
|
27
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
28
|
+
var ar = [];
|
|
29
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
30
|
+
return ar;
|
|
31
|
+
};
|
|
32
|
+
return ownKeys(o);
|
|
33
|
+
};
|
|
34
|
+
return function (mod) {
|
|
35
|
+
if (mod && mod.__esModule) return mod;
|
|
36
|
+
var result = {};
|
|
37
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
38
|
+
__setModuleDefault(result, mod);
|
|
39
|
+
return result;
|
|
40
|
+
};
|
|
41
|
+
})();
|
|
42
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
43
|
+
exports.EmailService = void 0;
|
|
44
|
+
const nodemailer = __importStar(require("nodemailer"));
|
|
45
|
+
const imapflow_1 = require("imapflow");
|
|
46
|
+
// ---------------------------------------------------------------------------
|
|
47
|
+
// Service
|
|
48
|
+
// ---------------------------------------------------------------------------
|
|
49
|
+
class EmailService {
|
|
50
|
+
constructor(config) {
|
|
51
|
+
this.transporter = null;
|
|
52
|
+
this.running = false;
|
|
53
|
+
this.config = config;
|
|
54
|
+
}
|
|
55
|
+
async initialize() {
|
|
56
|
+
// Set up SMTP transporter
|
|
57
|
+
this.transporter = nodemailer.createTransport({
|
|
58
|
+
host: this.config.smtp.host,
|
|
59
|
+
port: this.config.smtp.port ?? (this.config.smtp.secure !== false ? 465 : 587),
|
|
60
|
+
secure: this.config.smtp.secure !== false,
|
|
61
|
+
auth: {
|
|
62
|
+
user: this.config.smtp.user,
|
|
63
|
+
pass: this.config.smtp.password,
|
|
64
|
+
},
|
|
65
|
+
});
|
|
66
|
+
// Verify SMTP connection
|
|
67
|
+
try {
|
|
68
|
+
await this.transporter.verify();
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
// Connection verification is best-effort; transporter may still work
|
|
72
|
+
}
|
|
73
|
+
this.running = true;
|
|
74
|
+
}
|
|
75
|
+
async shutdown() {
|
|
76
|
+
if (this.transporter) {
|
|
77
|
+
this.transporter.close();
|
|
78
|
+
this.transporter = null;
|
|
79
|
+
}
|
|
80
|
+
this.running = false;
|
|
81
|
+
}
|
|
82
|
+
get isRunning() {
|
|
83
|
+
return this.running;
|
|
84
|
+
}
|
|
85
|
+
// ── Send Email ──
|
|
86
|
+
async sendEmail(options) {
|
|
87
|
+
this.requireRunning();
|
|
88
|
+
if (!this.transporter)
|
|
89
|
+
throw new Error('SMTP transporter not initialized');
|
|
90
|
+
const info = await this.transporter.sendMail({
|
|
91
|
+
from: this.config.smtp.user,
|
|
92
|
+
to: options.to,
|
|
93
|
+
subject: options.subject,
|
|
94
|
+
text: options.body,
|
|
95
|
+
html: options.html,
|
|
96
|
+
replyTo: options.replyTo,
|
|
97
|
+
cc: options.cc,
|
|
98
|
+
bcc: options.bcc,
|
|
99
|
+
attachments: options.attachments?.map((a) => ({
|
|
100
|
+
filename: a.filename,
|
|
101
|
+
content: a.content,
|
|
102
|
+
path: a.path,
|
|
103
|
+
contentType: a.contentType,
|
|
104
|
+
})),
|
|
105
|
+
});
|
|
106
|
+
return { messageId: info.messageId };
|
|
107
|
+
}
|
|
108
|
+
// ── Read Inbox ──
|
|
109
|
+
async readInbox(folder = 'INBOX', limit = 20) {
|
|
110
|
+
this.requireRunning();
|
|
111
|
+
const client = await this.getImapClient();
|
|
112
|
+
try {
|
|
113
|
+
const lock = await client.getMailboxLock(folder);
|
|
114
|
+
const messages = [];
|
|
115
|
+
try {
|
|
116
|
+
// Fetch the most recent messages
|
|
117
|
+
const totalMessages = client.mailbox ? client.mailbox.exists : 0;
|
|
118
|
+
if (totalMessages === 0)
|
|
119
|
+
return [];
|
|
120
|
+
const startSeq = Math.max(1, totalMessages - limit + 1);
|
|
121
|
+
for await (const msg of client.fetch(`${startSeq}:*`, {
|
|
122
|
+
envelope: true,
|
|
123
|
+
source: true,
|
|
124
|
+
flags: true,
|
|
125
|
+
uid: true,
|
|
126
|
+
})) {
|
|
127
|
+
const envelope = msg.envelope;
|
|
128
|
+
const source = msg.source?.toString() ?? '';
|
|
129
|
+
const bodyText = this.extractPlainText(source);
|
|
130
|
+
messages.push({
|
|
131
|
+
messageId: envelope?.messageId ?? '',
|
|
132
|
+
from: envelope?.from?.[0]?.address ?? '',
|
|
133
|
+
to: envelope?.to?.[0]?.address ?? '',
|
|
134
|
+
subject: envelope?.subject ?? '',
|
|
135
|
+
date: envelope?.date?.toISOString() ?? '',
|
|
136
|
+
body: bodyText,
|
|
137
|
+
flags: Array.from(msg.flags ?? []),
|
|
138
|
+
uid: msg.uid,
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
finally {
|
|
143
|
+
lock.release();
|
|
144
|
+
}
|
|
145
|
+
return messages.reverse(); // Most recent first
|
|
146
|
+
}
|
|
147
|
+
finally {
|
|
148
|
+
await client.logout();
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
// ── Search Emails ──
|
|
152
|
+
async searchEmails(options) {
|
|
153
|
+
this.requireRunning();
|
|
154
|
+
const client = await this.getImapClient();
|
|
155
|
+
const folder = options.folder ?? 'INBOX';
|
|
156
|
+
try {
|
|
157
|
+
const lock = await client.getMailboxLock(folder);
|
|
158
|
+
const messages = [];
|
|
159
|
+
try {
|
|
160
|
+
const searchCriteria = {};
|
|
161
|
+
// Build IMAP search criteria
|
|
162
|
+
if (options.query) {
|
|
163
|
+
searchCriteria.or = [
|
|
164
|
+
{ subject: options.query },
|
|
165
|
+
{ body: options.query },
|
|
166
|
+
{ from: options.query },
|
|
167
|
+
];
|
|
168
|
+
}
|
|
169
|
+
if (options.since) {
|
|
170
|
+
searchCriteria.since = new Date(options.since);
|
|
171
|
+
}
|
|
172
|
+
const uids = await client.search(searchCriteria, { uid: true });
|
|
173
|
+
const uidList = Array.isArray(uids) ? uids : [];
|
|
174
|
+
const limitedUids = uidList.slice(-(options.limit ?? 20));
|
|
175
|
+
if (limitedUids.length > 0) {
|
|
176
|
+
for await (const msg of client.fetch(limitedUids, {
|
|
177
|
+
envelope: true,
|
|
178
|
+
source: true,
|
|
179
|
+
flags: true,
|
|
180
|
+
uid: true,
|
|
181
|
+
})) {
|
|
182
|
+
const envelope = msg.envelope;
|
|
183
|
+
const source = msg.source?.toString() ?? '';
|
|
184
|
+
const bodyText = this.extractPlainText(source);
|
|
185
|
+
messages.push({
|
|
186
|
+
messageId: envelope?.messageId ?? '',
|
|
187
|
+
from: envelope?.from?.[0]?.address ?? '',
|
|
188
|
+
to: envelope?.to?.[0]?.address ?? '',
|
|
189
|
+
subject: envelope?.subject ?? '',
|
|
190
|
+
date: envelope?.date?.toISOString() ?? '',
|
|
191
|
+
body: bodyText,
|
|
192
|
+
flags: Array.from(msg.flags ?? []),
|
|
193
|
+
uid: msg.uid,
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
finally {
|
|
199
|
+
lock.release();
|
|
200
|
+
}
|
|
201
|
+
return messages.reverse();
|
|
202
|
+
}
|
|
203
|
+
finally {
|
|
204
|
+
await client.logout();
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
// ── Extract Verification Codes ──
|
|
208
|
+
async extractCodes(messageId, pattern) {
|
|
209
|
+
this.requireRunning();
|
|
210
|
+
const client = await this.getImapClient();
|
|
211
|
+
try {
|
|
212
|
+
const lock = await client.getMailboxLock('INBOX');
|
|
213
|
+
try {
|
|
214
|
+
// Search for the specific message
|
|
215
|
+
const uids = await client.search({ header: { 'message-id': messageId } }, { uid: true });
|
|
216
|
+
const uidList = Array.isArray(uids) ? uids : [];
|
|
217
|
+
if (uidList.length === 0) {
|
|
218
|
+
return { codes: [], messageId };
|
|
219
|
+
}
|
|
220
|
+
for await (const msg of client.fetch(uidList, { source: true })) {
|
|
221
|
+
const source = msg.source?.toString() ?? '';
|
|
222
|
+
const bodyText = this.extractPlainText(source);
|
|
223
|
+
const htmlBody = this.extractHtmlBody(source);
|
|
224
|
+
const fullText = bodyText + ' ' + htmlBody;
|
|
225
|
+
// Apply custom or default code extraction patterns
|
|
226
|
+
const regex = pattern
|
|
227
|
+
? new RegExp(pattern, 'g')
|
|
228
|
+
: /\b(\d{4,8})\b/g;
|
|
229
|
+
const codes = [];
|
|
230
|
+
let match;
|
|
231
|
+
while ((match = regex.exec(fullText)) !== null) {
|
|
232
|
+
codes.push(match[1] ?? match[0]);
|
|
233
|
+
}
|
|
234
|
+
// Also look for common verification code patterns
|
|
235
|
+
const verifyPatterns = [
|
|
236
|
+
/(?:code|verification|OTP|pin)\s*(?:is|:)\s*(\w{4,8})/gi,
|
|
237
|
+
/(\d{6})\s*(?:is your|to verify)/gi,
|
|
238
|
+
/(?:enter|use)\s+(\w{4,8})\s+(?:to|as|for)/gi,
|
|
239
|
+
];
|
|
240
|
+
for (const vp of verifyPatterns) {
|
|
241
|
+
while ((match = vp.exec(fullText)) !== null) {
|
|
242
|
+
const code = match[1];
|
|
243
|
+
if (code && !codes.includes(code)) {
|
|
244
|
+
codes.push(code);
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
return { codes: [...new Set(codes)], messageId };
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
finally {
|
|
252
|
+
lock.release();
|
|
253
|
+
}
|
|
254
|
+
return { codes: [], messageId };
|
|
255
|
+
}
|
|
256
|
+
finally {
|
|
257
|
+
await client.logout();
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
// ── Reply to Email ──
|
|
261
|
+
async replyToEmail(messageId, body, html) {
|
|
262
|
+
this.requireRunning();
|
|
263
|
+
if (!this.transporter)
|
|
264
|
+
throw new Error('SMTP transporter not initialized');
|
|
265
|
+
// Fetch the original message to get reply headers
|
|
266
|
+
const client = await this.getImapClient();
|
|
267
|
+
let originalFrom = '';
|
|
268
|
+
let originalSubject = '';
|
|
269
|
+
let references = '';
|
|
270
|
+
try {
|
|
271
|
+
const lock = await client.getMailboxLock('INBOX');
|
|
272
|
+
try {
|
|
273
|
+
const uids = await client.search({ header: { 'message-id': messageId } }, { uid: true });
|
|
274
|
+
const uidList = Array.isArray(uids) ? uids : [];
|
|
275
|
+
if (uidList.length > 0) {
|
|
276
|
+
for await (const msg of client.fetch(uidList, { envelope: true, headers: true })) {
|
|
277
|
+
originalFrom = msg.envelope?.from?.[0]?.address ?? '';
|
|
278
|
+
originalSubject = msg.envelope?.subject ?? '';
|
|
279
|
+
const headersStr = msg.headers?.toString() ?? '';
|
|
280
|
+
const refsMatch = headersStr.match(/References:\s*(.+)/i);
|
|
281
|
+
references = refsMatch ? refsMatch[1].trim() : '';
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
finally {
|
|
286
|
+
lock.release();
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
finally {
|
|
290
|
+
await client.logout();
|
|
291
|
+
}
|
|
292
|
+
const replySubject = originalSubject.startsWith('Re:') ? originalSubject : `Re: ${originalSubject}`;
|
|
293
|
+
const info = await this.transporter.sendMail({
|
|
294
|
+
from: this.config.smtp.user,
|
|
295
|
+
to: originalFrom,
|
|
296
|
+
subject: replySubject,
|
|
297
|
+
text: body,
|
|
298
|
+
html,
|
|
299
|
+
inReplyTo: messageId,
|
|
300
|
+
references: references ? `${references} ${messageId}` : messageId,
|
|
301
|
+
});
|
|
302
|
+
return { messageId: info.messageId };
|
|
303
|
+
}
|
|
304
|
+
// ── Private: IMAP Client ──
|
|
305
|
+
async getImapClient() {
|
|
306
|
+
const imapConfig = this.config.imap ?? {
|
|
307
|
+
host: this.config.smtp.host,
|
|
308
|
+
user: this.config.smtp.user,
|
|
309
|
+
password: this.config.smtp.password,
|
|
310
|
+
};
|
|
311
|
+
const client = new imapflow_1.ImapFlow({
|
|
312
|
+
host: imapConfig.host,
|
|
313
|
+
port: imapConfig.port ?? 993,
|
|
314
|
+
secure: imapConfig.secure !== false,
|
|
315
|
+
auth: {
|
|
316
|
+
user: imapConfig.user,
|
|
317
|
+
pass: imapConfig.password,
|
|
318
|
+
},
|
|
319
|
+
logger: false,
|
|
320
|
+
});
|
|
321
|
+
await client.connect();
|
|
322
|
+
return client;
|
|
323
|
+
}
|
|
324
|
+
// ── Private: Email Parsing ──
|
|
325
|
+
extractPlainText(rawSource) {
|
|
326
|
+
// Simple extraction of plain text body from raw email source
|
|
327
|
+
const boundaryMatch = rawSource.match(/boundary="?([^"\r\n;]+)/i);
|
|
328
|
+
if (boundaryMatch) {
|
|
329
|
+
// Multipart message
|
|
330
|
+
const boundary = boundaryMatch[1];
|
|
331
|
+
const parts = rawSource.split(`--${boundary}`);
|
|
332
|
+
for (const part of parts) {
|
|
333
|
+
if (part.match(/Content-Type:\s*text\/plain/i)) {
|
|
334
|
+
const bodyStart = part.indexOf('\r\n\r\n');
|
|
335
|
+
if (bodyStart >= 0) {
|
|
336
|
+
let body = part.slice(bodyStart + 4).trim();
|
|
337
|
+
// Handle quoted-printable
|
|
338
|
+
if (part.match(/Content-Transfer-Encoding:\s*quoted-printable/i)) {
|
|
339
|
+
body = this.decodeQuotedPrintable(body);
|
|
340
|
+
}
|
|
341
|
+
// Handle base64
|
|
342
|
+
if (part.match(/Content-Transfer-Encoding:\s*base64/i)) {
|
|
343
|
+
body = Buffer.from(body.replace(/\s/g, ''), 'base64').toString('utf-8');
|
|
344
|
+
}
|
|
345
|
+
return body;
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
// Non-multipart: extract body after headers
|
|
351
|
+
const bodyStart = rawSource.indexOf('\r\n\r\n');
|
|
352
|
+
if (bodyStart >= 0) {
|
|
353
|
+
return rawSource.slice(bodyStart + 4).trim();
|
|
354
|
+
}
|
|
355
|
+
return rawSource;
|
|
356
|
+
}
|
|
357
|
+
extractHtmlBody(rawSource) {
|
|
358
|
+
const boundaryMatch = rawSource.match(/boundary="?([^"\r\n;]+)/i);
|
|
359
|
+
if (boundaryMatch) {
|
|
360
|
+
const boundary = boundaryMatch[1];
|
|
361
|
+
const parts = rawSource.split(`--${boundary}`);
|
|
362
|
+
for (const part of parts) {
|
|
363
|
+
if (part.match(/Content-Type:\s*text\/html/i)) {
|
|
364
|
+
const bodyStart = part.indexOf('\r\n\r\n');
|
|
365
|
+
if (bodyStart >= 0) {
|
|
366
|
+
let body = part.slice(bodyStart + 4).trim();
|
|
367
|
+
if (part.match(/Content-Transfer-Encoding:\s*quoted-printable/i)) {
|
|
368
|
+
body = this.decodeQuotedPrintable(body);
|
|
369
|
+
}
|
|
370
|
+
if (part.match(/Content-Transfer-Encoding:\s*base64/i)) {
|
|
371
|
+
body = Buffer.from(body.replace(/\s/g, ''), 'base64').toString('utf-8');
|
|
372
|
+
}
|
|
373
|
+
// Strip HTML tags for text extraction
|
|
374
|
+
return body.replace(/<[^>]+>/g, ' ').replace(/\s+/g, ' ').trim();
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
return '';
|
|
380
|
+
}
|
|
381
|
+
decodeQuotedPrintable(input) {
|
|
382
|
+
return input
|
|
383
|
+
.replace(/=\r?\n/g, '') // Soft line breaks
|
|
384
|
+
.replace(/=([0-9A-Fa-f]{2})/g, (_, hex) => String.fromCharCode(parseInt(hex, 16)));
|
|
385
|
+
}
|
|
386
|
+
requireRunning() {
|
|
387
|
+
if (!this.running)
|
|
388
|
+
throw new Error('EmailService not initialized');
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
exports.EmailService = EmailService;
|
|
392
|
+
//# sourceMappingURL=EmailService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EmailService.js","sourceRoot":"","sources":["../src/EmailService.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Email Channel Extension for AgentOS.
|
|
3
|
+
*
|
|
4
|
+
* Provides an IChannelAdapter + 5 tools for sending, reading, searching,
|
|
5
|
+
* extracting codes from, and replying to emails via SMTP/IMAP.
|
|
6
|
+
*
|
|
7
|
+
* @module @framers/agentos-ext-channel-email
|
|
8
|
+
*/
|
|
9
|
+
export interface EmailChannelOptions {
|
|
10
|
+
smtpHost?: string;
|
|
11
|
+
smtpUser?: string;
|
|
12
|
+
smtpPassword?: string;
|
|
13
|
+
smtpPort?: number;
|
|
14
|
+
smtpSecure?: boolean;
|
|
15
|
+
imapHost?: string;
|
|
16
|
+
imapUser?: string;
|
|
17
|
+
imapPassword?: string;
|
|
18
|
+
imapPort?: number;
|
|
19
|
+
imapSecure?: boolean;
|
|
20
|
+
secrets?: Record<string, string>;
|
|
21
|
+
}
|
|
22
|
+
export interface ExtensionContext {
|
|
23
|
+
options?: Record<string, unknown>;
|
|
24
|
+
secrets?: Record<string, string>;
|
|
25
|
+
}
|
|
26
|
+
export interface ExtensionPack {
|
|
27
|
+
name: string;
|
|
28
|
+
version: string;
|
|
29
|
+
descriptors: Array<{
|
|
30
|
+
id: string;
|
|
31
|
+
kind: string;
|
|
32
|
+
priority?: number;
|
|
33
|
+
payload: unknown;
|
|
34
|
+
}>;
|
|
35
|
+
onActivate?: () => Promise<void>;
|
|
36
|
+
onDeactivate?: () => Promise<void>;
|
|
37
|
+
}
|
|
38
|
+
export declare function createExtensionPack(context: ExtensionContext): ExtensionPack;
|
|
39
|
+
export { EmailService } from './EmailService.js';
|
|
40
|
+
export type { EmailConfig, SendEmailOptions, EmailMessage, SearchEmailOptions } from './EmailService.js';
|
|
41
|
+
export { EmailChannelAdapter } from './EmailChannelAdapter.js';
|
|
42
|
+
export { EmailSendTool } from './tools/send.js';
|
|
43
|
+
export { EmailReadTool } from './tools/read.js';
|
|
44
|
+
export { EmailSearchTool } from './tools/search.js';
|
|
45
|
+
export { EmailExtractCodesTool } from './tools/extractCodes.js';
|
|
46
|
+
export { EmailReplyTool } from './tools/reply.js';
|
|
47
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA;;;;;;;GAOG;AAeH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AA2ED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IACtF,UAAU,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC,YAAY,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACpC;AAMD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,gBAAgB,GAAG,aAAa,CAgC5E;AAMD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,YAAY,EAAE,WAAW,EAAE,gBAAgB,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACzG,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// @ts-nocheck
|
|
3
|
+
/**
|
|
4
|
+
* @fileoverview Email Channel Extension for AgentOS.
|
|
5
|
+
*
|
|
6
|
+
* Provides an IChannelAdapter + 5 tools for sending, reading, searching,
|
|
7
|
+
* extracting codes from, and replying to emails via SMTP/IMAP.
|
|
8
|
+
*
|
|
9
|
+
* @module @framers/agentos-ext-channel-email
|
|
10
|
+
*/
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.EmailReplyTool = exports.EmailExtractCodesTool = exports.EmailSearchTool = exports.EmailReadTool = exports.EmailSendTool = exports.EmailChannelAdapter = exports.EmailService = void 0;
|
|
13
|
+
exports.createExtensionPack = createExtensionPack;
|
|
14
|
+
const EmailService_js_1 = require("./EmailService.js");
|
|
15
|
+
const EmailChannelAdapter_js_1 = require("./EmailChannelAdapter.js");
|
|
16
|
+
const send_js_1 = require("./tools/send.js");
|
|
17
|
+
const read_js_1 = require("./tools/read.js");
|
|
18
|
+
const search_js_1 = require("./tools/search.js");
|
|
19
|
+
const extractCodes_js_1 = require("./tools/extractCodes.js");
|
|
20
|
+
const reply_js_1 = require("./tools/reply.js");
|
|
21
|
+
// ---------------------------------------------------------------------------
|
|
22
|
+
// Secret Resolution
|
|
23
|
+
// ---------------------------------------------------------------------------
|
|
24
|
+
function resolveConfig(opts, secrets) {
|
|
25
|
+
const smtpHost = opts.smtpHost ??
|
|
26
|
+
secrets['email.smtpHost'] ??
|
|
27
|
+
secrets['email.smtp.host'] ??
|
|
28
|
+
process.env.SMTP_HOST ??
|
|
29
|
+
process.env.EMAIL_SMTP_HOST ??
|
|
30
|
+
'';
|
|
31
|
+
const smtpUser = opts.smtpUser ??
|
|
32
|
+
secrets['email.smtpUser'] ??
|
|
33
|
+
secrets['email.smtp.user'] ??
|
|
34
|
+
process.env.SMTP_USER ??
|
|
35
|
+
process.env.EMAIL_SMTP_USER ??
|
|
36
|
+
'';
|
|
37
|
+
const smtpPassword = opts.smtpPassword ??
|
|
38
|
+
secrets['email.smtpPassword'] ??
|
|
39
|
+
secrets['email.smtp.password'] ??
|
|
40
|
+
process.env.SMTP_PASSWORD ??
|
|
41
|
+
process.env.EMAIL_SMTP_PASSWORD ??
|
|
42
|
+
'';
|
|
43
|
+
const imapHost = opts.imapHost ??
|
|
44
|
+
secrets['email.imapHost'] ??
|
|
45
|
+
secrets['email.imap.host'] ??
|
|
46
|
+
process.env.IMAP_HOST ??
|
|
47
|
+
process.env.EMAIL_IMAP_HOST;
|
|
48
|
+
const imapUser = opts.imapUser ??
|
|
49
|
+
secrets['email.imapUser'] ??
|
|
50
|
+
secrets['email.imap.user'] ??
|
|
51
|
+
process.env.IMAP_USER ??
|
|
52
|
+
process.env.EMAIL_IMAP_USER;
|
|
53
|
+
const imapPassword = opts.imapPassword ??
|
|
54
|
+
secrets['email.imapPassword'] ??
|
|
55
|
+
secrets['email.imap.password'] ??
|
|
56
|
+
process.env.IMAP_PASSWORD ??
|
|
57
|
+
process.env.EMAIL_IMAP_PASSWORD;
|
|
58
|
+
const config = {
|
|
59
|
+
smtp: {
|
|
60
|
+
host: smtpHost,
|
|
61
|
+
user: smtpUser,
|
|
62
|
+
password: smtpPassword,
|
|
63
|
+
port: opts.smtpPort,
|
|
64
|
+
secure: opts.smtpSecure,
|
|
65
|
+
},
|
|
66
|
+
};
|
|
67
|
+
if (imapHost && imapUser && imapPassword) {
|
|
68
|
+
config.imap = {
|
|
69
|
+
host: imapHost,
|
|
70
|
+
user: imapUser,
|
|
71
|
+
password: imapPassword,
|
|
72
|
+
port: opts.imapPort,
|
|
73
|
+
secure: opts.imapSecure,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
return config;
|
|
77
|
+
}
|
|
78
|
+
// ---------------------------------------------------------------------------
|
|
79
|
+
// Factory
|
|
80
|
+
// ---------------------------------------------------------------------------
|
|
81
|
+
function createExtensionPack(context) {
|
|
82
|
+
const opts = (context.options ?? {});
|
|
83
|
+
const secrets = opts.secrets ?? context.secrets ?? {};
|
|
84
|
+
const config = resolveConfig(opts, secrets);
|
|
85
|
+
const service = new EmailService_js_1.EmailService(config);
|
|
86
|
+
const adapter = new EmailChannelAdapter_js_1.EmailChannelAdapter(service);
|
|
87
|
+
const sendTool = new send_js_1.EmailSendTool(service);
|
|
88
|
+
const readTool = new read_js_1.EmailReadTool(service);
|
|
89
|
+
const searchTool = new search_js_1.EmailSearchTool(service);
|
|
90
|
+
const extractCodesTool = new extractCodes_js_1.EmailExtractCodesTool(service);
|
|
91
|
+
const replyTool = new reply_js_1.EmailReplyTool(service);
|
|
92
|
+
return {
|
|
93
|
+
name: '@framers/agentos-ext-channel-email',
|
|
94
|
+
version: '0.1.0',
|
|
95
|
+
descriptors: [
|
|
96
|
+
{ id: 'emailSend', kind: 'tool', priority: 50, payload: sendTool },
|
|
97
|
+
{ id: 'emailRead', kind: 'tool', priority: 50, payload: readTool },
|
|
98
|
+
{ id: 'emailSearch', kind: 'tool', priority: 50, payload: searchTool },
|
|
99
|
+
{ id: 'emailExtractCodes', kind: 'tool', priority: 50, payload: extractCodesTool },
|
|
100
|
+
{ id: 'emailReply', kind: 'tool', priority: 50, payload: replyTool },
|
|
101
|
+
{ id: 'emailChannel', kind: 'messaging-channel', priority: 50, payload: adapter },
|
|
102
|
+
],
|
|
103
|
+
onActivate: async () => {
|
|
104
|
+
await adapter.initialize({ platform: 'email', credential: config.smtp.user });
|
|
105
|
+
},
|
|
106
|
+
onDeactivate: async () => {
|
|
107
|
+
await adapter.shutdown();
|
|
108
|
+
},
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
// ---------------------------------------------------------------------------
|
|
112
|
+
// Public exports
|
|
113
|
+
// ---------------------------------------------------------------------------
|
|
114
|
+
var EmailService_js_2 = require("./EmailService.js");
|
|
115
|
+
Object.defineProperty(exports, "EmailService", { enumerable: true, get: function () { return EmailService_js_2.EmailService; } });
|
|
116
|
+
var EmailChannelAdapter_js_2 = require("./EmailChannelAdapter.js");
|
|
117
|
+
Object.defineProperty(exports, "EmailChannelAdapter", { enumerable: true, get: function () { return EmailChannelAdapter_js_2.EmailChannelAdapter; } });
|
|
118
|
+
var send_js_2 = require("./tools/send.js");
|
|
119
|
+
Object.defineProperty(exports, "EmailSendTool", { enumerable: true, get: function () { return send_js_2.EmailSendTool; } });
|
|
120
|
+
var read_js_2 = require("./tools/read.js");
|
|
121
|
+
Object.defineProperty(exports, "EmailReadTool", { enumerable: true, get: function () { return read_js_2.EmailReadTool; } });
|
|
122
|
+
var search_js_2 = require("./tools/search.js");
|
|
123
|
+
Object.defineProperty(exports, "EmailSearchTool", { enumerable: true, get: function () { return search_js_2.EmailSearchTool; } });
|
|
124
|
+
var extractCodes_js_2 = require("./tools/extractCodes.js");
|
|
125
|
+
Object.defineProperty(exports, "EmailExtractCodesTool", { enumerable: true, get: function () { return extractCodes_js_2.EmailExtractCodesTool; } });
|
|
126
|
+
var reply_js_2 = require("./tools/reply.js");
|
|
127
|
+
Object.defineProperty(exports, "EmailReplyTool", { enumerable: true, get: function () { return reply_js_2.EmailReplyTool; } });
|
|
128
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { EmailService } from '../EmailService.js';
|
|
2
|
+
export declare class EmailExtractCodesTool {
|
|
3
|
+
private service;
|
|
4
|
+
readonly id = "emailExtractCodes";
|
|
5
|
+
readonly name = "emailExtractCodes";
|
|
6
|
+
readonly displayName = "Extract Verification Codes";
|
|
7
|
+
readonly description = "Extract verification codes, OTPs, and PIN numbers from an email message body.";
|
|
8
|
+
readonly category = "communication";
|
|
9
|
+
readonly version = "0.1.0";
|
|
10
|
+
readonly hasSideEffects = false;
|
|
11
|
+
readonly inputSchema: {
|
|
12
|
+
type: "object";
|
|
13
|
+
properties: {
|
|
14
|
+
messageId: {
|
|
15
|
+
type: string;
|
|
16
|
+
description: string;
|
|
17
|
+
};
|
|
18
|
+
pattern: {
|
|
19
|
+
type: string;
|
|
20
|
+
description: string;
|
|
21
|
+
};
|
|
22
|
+
};
|
|
23
|
+
required: string[];
|
|
24
|
+
};
|
|
25
|
+
constructor(service: EmailService);
|
|
26
|
+
execute(args: {
|
|
27
|
+
messageId: string;
|
|
28
|
+
pattern?: string;
|
|
29
|
+
}): Promise<{
|
|
30
|
+
success: boolean;
|
|
31
|
+
data?: any;
|
|
32
|
+
error?: string;
|
|
33
|
+
}>;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=extractCodes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extractCodes.d.ts","sourceRoot":"","sources":["../../src/tools/extractCodes.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD,qBAAa,qBAAqB;IAkBpB,OAAO,CAAC,OAAO;IAjB3B,QAAQ,CAAC,EAAE,uBAAuB;IAClC,QAAQ,CAAC,IAAI,uBAAuB;IACpC,QAAQ,CAAC,WAAW,gCAAgC;IACpD,QAAQ,CAAC,WAAW,mFAAmF;IACvG,QAAQ,CAAC,QAAQ,mBAAmB;IACpC,QAAQ,CAAC,OAAO,WAAW;IAC3B,QAAQ,CAAC,cAAc,SAAS;IAEhC,QAAQ,CAAC,WAAW;;;;;;;;;;;;;MAOlB;gBAEkB,OAAO,EAAE,YAAY;IAEnC,OAAO,CAAC,IAAI,EAAE;QAClB,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE,GAAG,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAQ9D"}
|