@agentuity/runtime 0.0.60 → 0.0.61
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/dist/_context.d.ts +11 -7
- package/dist/_context.d.ts.map +1 -1
- package/dist/_context.js +9 -2
- package/dist/_context.js.map +1 -1
- package/dist/_server.d.ts +4 -2
- package/dist/_server.d.ts.map +1 -1
- package/dist/_server.js +71 -31
- package/dist/_server.js.map +1 -1
- package/dist/_services.d.ts +1 -1
- package/dist/_services.d.ts.map +1 -1
- package/dist/_services.js +4 -2
- package/dist/_services.js.map +1 -1
- package/dist/_waituntil.d.ts.map +1 -1
- package/dist/_waituntil.js +5 -2
- package/dist/_waituntil.js.map +1 -1
- package/dist/agent.d.ts +647 -19
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +55 -6
- package/dist/agent.js.map +1 -1
- package/dist/app.d.ts +205 -28
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +181 -13
- package/dist/app.js.map +1 -1
- package/dist/index.d.ts +41 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/io/email.d.ts.map +1 -1
- package/dist/io/email.js +11 -3
- package/dist/io/email.js.map +1 -1
- package/dist/router.d.ts +282 -32
- package/dist/router.d.ts.map +1 -1
- package/dist/router.js +110 -35
- package/dist/router.js.map +1 -1
- package/dist/services/evalrun/http.d.ts.map +1 -1
- package/dist/services/evalrun/http.js +7 -5
- package/dist/services/evalrun/http.js.map +1 -1
- package/dist/services/local/_util.d.ts.map +1 -1
- package/dist/services/local/_util.js +3 -1
- package/dist/services/local/_util.js.map +1 -1
- package/dist/services/session/http.d.ts.map +1 -1
- package/dist/services/session/http.js +4 -3
- package/dist/services/session/http.js.map +1 -1
- package/dist/session.d.ts +284 -4
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +2 -2
- package/dist/session.js.map +1 -1
- package/package.json +5 -4
- package/src/_context.ts +37 -9
- package/src/_server.ts +88 -36
- package/src/_services.ts +9 -2
- package/src/_waituntil.ts +13 -2
- package/src/agent.ts +856 -68
- package/src/app.ts +238 -38
- package/src/index.ts +42 -2
- package/src/io/email.ts +23 -5
- package/src/router.ts +359 -83
- package/src/services/evalrun/http.ts +15 -4
- package/src/services/local/_util.ts +7 -1
- package/src/services/session/http.ts +5 -2
- package/src/session.ts +297 -4
package/dist/app.js
CHANGED
|
@@ -2,26 +2,86 @@
|
|
|
2
2
|
/** biome-ignore-all lint/suspicious/noExplicitAny: any are ok */
|
|
3
3
|
import { Hono } from 'hono';
|
|
4
4
|
import { createServer, getLogger } from './_server';
|
|
5
|
+
/**
|
|
6
|
+
* Main application instance created by createApp().
|
|
7
|
+
* Provides access to the router, server, logger, and app state.
|
|
8
|
+
*
|
|
9
|
+
* @template TAppState - The type of application state returned from setup function
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```typescript
|
|
13
|
+
* const app = await createApp({
|
|
14
|
+
* setup: async () => ({ db: await connectDB() })
|
|
15
|
+
* });
|
|
16
|
+
*
|
|
17
|
+
* // Access state
|
|
18
|
+
* console.log(app.state.db);
|
|
19
|
+
*
|
|
20
|
+
* // Add routes
|
|
21
|
+
* app.router.get('/health', (c) => c.text('OK'));
|
|
22
|
+
*
|
|
23
|
+
* // Listen to events
|
|
24
|
+
* app.addEventListener('agent.started', (eventName, agent, ctx) => {
|
|
25
|
+
* console.log(`Agent ${agent.metadata.name} started`);
|
|
26
|
+
* });
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
5
29
|
export class App {
|
|
6
30
|
/**
|
|
7
|
-
*
|
|
31
|
+
* The Hono router instance for defining routes.
|
|
8
32
|
*/
|
|
9
33
|
router;
|
|
10
34
|
/**
|
|
11
|
-
*
|
|
35
|
+
* The Bun server instance.
|
|
12
36
|
*/
|
|
13
37
|
server;
|
|
14
38
|
/**
|
|
15
|
-
*
|
|
39
|
+
* The application logger instance.
|
|
16
40
|
*/
|
|
17
41
|
logger;
|
|
42
|
+
/**
|
|
43
|
+
* The application state returned from the setup function.
|
|
44
|
+
* Available in all agents via ctx.app.
|
|
45
|
+
*/
|
|
46
|
+
state;
|
|
18
47
|
eventListeners = new Map();
|
|
19
|
-
constructor(
|
|
20
|
-
this.
|
|
21
|
-
this.
|
|
48
|
+
constructor(state, router, server) {
|
|
49
|
+
this.state = state;
|
|
50
|
+
this.router = router;
|
|
51
|
+
this.server = server;
|
|
22
52
|
this.logger = getLogger();
|
|
23
53
|
setGlobalApp(this);
|
|
24
54
|
}
|
|
55
|
+
/**
|
|
56
|
+
* Register an event listener for application lifecycle events.
|
|
57
|
+
*
|
|
58
|
+
* Available events:
|
|
59
|
+
* - `agent.started` - Fired when an agent begins execution
|
|
60
|
+
* - `agent.completed` - Fired when an agent completes successfully
|
|
61
|
+
* - `agent.errored` - Fired when an agent throws an error
|
|
62
|
+
* - `session.started` - Fired when a new session starts
|
|
63
|
+
* - `session.completed` - Fired when a session completes
|
|
64
|
+
* - `thread.created` - Fired when a thread is created
|
|
65
|
+
* - `thread.destroyed` - Fired when a thread is destroyed
|
|
66
|
+
*
|
|
67
|
+
* @param eventName - The event name to listen for
|
|
68
|
+
* @param callback - The callback function to execute when the event fires
|
|
69
|
+
*
|
|
70
|
+
* @example
|
|
71
|
+
* ```typescript
|
|
72
|
+
* app.addEventListener('agent.started', (eventName, agent, ctx) => {
|
|
73
|
+
* console.log(`${agent.metadata.name} started for session ${ctx.sessionId}`);
|
|
74
|
+
* });
|
|
75
|
+
*
|
|
76
|
+
* app.addEventListener('agent.errored', (eventName, agent, ctx, error) => {
|
|
77
|
+
* console.error(`${agent.metadata.name} failed:`, error.message);
|
|
78
|
+
* });
|
|
79
|
+
*
|
|
80
|
+
* app.addEventListener('session.started', (eventName, session) => {
|
|
81
|
+
* console.log(`New session: ${session.id}`);
|
|
82
|
+
* });
|
|
83
|
+
* ```
|
|
84
|
+
*/
|
|
25
85
|
addEventListener(eventName, callback) {
|
|
26
86
|
let callbacks = this.eventListeners.get(eventName);
|
|
27
87
|
if (!callbacks) {
|
|
@@ -30,12 +90,42 @@ export class App {
|
|
|
30
90
|
}
|
|
31
91
|
callbacks.add(callback);
|
|
32
92
|
}
|
|
93
|
+
/**
|
|
94
|
+
* Remove a previously registered event listener.
|
|
95
|
+
*
|
|
96
|
+
* @param eventName - The event name to stop listening for
|
|
97
|
+
* @param callback - The callback function to remove
|
|
98
|
+
*
|
|
99
|
+
* @example
|
|
100
|
+
* ```typescript
|
|
101
|
+
* const handler = (eventName, agent, ctx) => {
|
|
102
|
+
* console.log('Agent started:', agent.metadata.name);
|
|
103
|
+
* };
|
|
104
|
+
*
|
|
105
|
+
* app.addEventListener('agent.started', handler);
|
|
106
|
+
* // Later...
|
|
107
|
+
* app.removeEventListener('agent.started', handler);
|
|
108
|
+
* ```
|
|
109
|
+
*/
|
|
33
110
|
removeEventListener(eventName, callback) {
|
|
34
111
|
const callbacks = this.eventListeners.get(eventName);
|
|
35
112
|
if (!callbacks)
|
|
36
113
|
return;
|
|
37
114
|
callbacks.delete(callback);
|
|
38
115
|
}
|
|
116
|
+
/**
|
|
117
|
+
* Manually fire an application event.
|
|
118
|
+
* Typically used internally by the runtime, but can be used for custom events.
|
|
119
|
+
*
|
|
120
|
+
* @param eventName - The event name to fire
|
|
121
|
+
* @param args - The arguments to pass to event listeners
|
|
122
|
+
*
|
|
123
|
+
* @example
|
|
124
|
+
* ```typescript
|
|
125
|
+
* // Fire a session completed event
|
|
126
|
+
* await app.fireEvent('session.completed', session);
|
|
127
|
+
* ```
|
|
128
|
+
*/
|
|
39
129
|
async fireEvent(eventName, ...args) {
|
|
40
130
|
const callbacks = this.eventListeners.get(eventName);
|
|
41
131
|
if (!callbacks || callbacks.size === 0)
|
|
@@ -49,22 +139,100 @@ let globalApp = null;
|
|
|
49
139
|
function setGlobalApp(app) {
|
|
50
140
|
globalApp = app;
|
|
51
141
|
}
|
|
142
|
+
/**
|
|
143
|
+
* Get the global app instance.
|
|
144
|
+
* Returns null if createApp() has not been called yet.
|
|
145
|
+
*
|
|
146
|
+
* @returns The global App instance or null
|
|
147
|
+
*
|
|
148
|
+
* @example
|
|
149
|
+
* ```typescript
|
|
150
|
+
* const app = getApp();
|
|
151
|
+
* if (app) {
|
|
152
|
+
* console.log('Server running on port:', app.server.port);
|
|
153
|
+
* }
|
|
154
|
+
* ```
|
|
155
|
+
*/
|
|
52
156
|
export function getApp() {
|
|
53
157
|
return globalApp;
|
|
54
158
|
}
|
|
55
159
|
/**
|
|
56
|
-
*
|
|
160
|
+
* Creates a new Agentuity application with optional lifecycle hooks and service configuration.
|
|
161
|
+
*
|
|
162
|
+
* This is the main entry point for creating an Agentuity app. The app will:
|
|
163
|
+
* 1. Run the setup function (if provided) to initialize app state
|
|
164
|
+
* 2. Start the Bun server
|
|
165
|
+
* 3. Make the app state available in all agents via ctx.app
|
|
166
|
+
*
|
|
167
|
+
* @template TAppState - The type of application state returned from setup function
|
|
168
|
+
*
|
|
169
|
+
* @param config - Optional application configuration
|
|
170
|
+
* @param config.setup - Function to initialize app state, runs before server starts
|
|
171
|
+
* @param config.shutdown - Function to clean up resources when server stops
|
|
172
|
+
* @param config.cors - CORS configuration for HTTP routes
|
|
173
|
+
* @param config.services - Override default storage and service providers
|
|
57
174
|
*
|
|
58
|
-
* @returns App instance
|
|
175
|
+
* @returns Promise resolving to App instance with running server
|
|
176
|
+
*
|
|
177
|
+
* @example
|
|
178
|
+
* ```typescript
|
|
179
|
+
* // Simple app with no state
|
|
180
|
+
* const app = await createApp();
|
|
181
|
+
*
|
|
182
|
+
* // App with database connection
|
|
183
|
+
* const app = await createApp({
|
|
184
|
+
* setup: async () => {
|
|
185
|
+
* const db = await connectDatabase();
|
|
186
|
+
* return { db };
|
|
187
|
+
* },
|
|
188
|
+
* shutdown: async (state) => {
|
|
189
|
+
* await state.db.close();
|
|
190
|
+
* }
|
|
191
|
+
* });
|
|
192
|
+
*
|
|
193
|
+
* // Access state in agents
|
|
194
|
+
* const agent = createAgent({
|
|
195
|
+
* handler: async (ctx, input) => {
|
|
196
|
+
* const db = ctx.app.db; // Strongly typed!
|
|
197
|
+
* return db.query('SELECT * FROM users');
|
|
198
|
+
* }
|
|
199
|
+
* });
|
|
200
|
+
*
|
|
201
|
+
* // App with custom services
|
|
202
|
+
* const app = await createApp({
|
|
203
|
+
* services: {
|
|
204
|
+
* useLocal: true, // Use local in-memory storage for development
|
|
205
|
+
* }
|
|
206
|
+
* });
|
|
207
|
+
* ```
|
|
59
208
|
*/
|
|
60
|
-
export function createApp(config) {
|
|
61
|
-
|
|
209
|
+
export async function createApp(config) {
|
|
210
|
+
const initializer = async () => {
|
|
211
|
+
// Run setup if provided
|
|
212
|
+
if (config?.setup) {
|
|
213
|
+
return config.setup();
|
|
214
|
+
}
|
|
215
|
+
else {
|
|
216
|
+
return {};
|
|
217
|
+
}
|
|
218
|
+
};
|
|
219
|
+
const router = new Hono();
|
|
220
|
+
const [server, state] = await createServer(router, initializer, config);
|
|
221
|
+
return new App(state, router, server);
|
|
62
222
|
}
|
|
63
223
|
/**
|
|
64
|
-
*
|
|
224
|
+
* Fire a global application event.
|
|
225
|
+
* Convenience function that calls fireEvent on the global app instance.
|
|
226
|
+
*
|
|
227
|
+
* @param eventName - The event name to fire
|
|
228
|
+
* @param args - The arguments to pass to event listeners
|
|
65
229
|
*
|
|
66
|
-
* @
|
|
67
|
-
*
|
|
230
|
+
* @example
|
|
231
|
+
* ```typescript
|
|
232
|
+
* // Fire from anywhere in your app
|
|
233
|
+
* await fireEvent('session.started', session);
|
|
234
|
+
* await fireEvent('agent.completed', agent, ctx);
|
|
235
|
+
* ```
|
|
68
236
|
*/
|
|
69
237
|
export async function fireEvent(eventName, ...args) {
|
|
70
238
|
await globalApp?.fireEvent(eventName, ...args);
|
package/dist/app.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,iEAAiE;AACjE,OAAO,EAAuB,IAAI,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -6,8 +6,47 @@ export * from './eval';
|
|
|
6
6
|
export * from './session';
|
|
7
7
|
export * from './workbench';
|
|
8
8
|
export type { Logger } from './logger';
|
|
9
|
-
export { getRouter } from './_server';
|
|
9
|
+
export { getRouter, getAppState } from './_server';
|
|
10
10
|
export { Email, parseEmail } from './io/email';
|
|
11
11
|
export * from './services/evalrun';
|
|
12
|
-
export { getEvalRunEventProvider } from './_services';
|
|
12
|
+
export { getEvalRunEventProvider, getThreadProvider, getSessionProvider } from './_services';
|
|
13
|
+
/**
|
|
14
|
+
* Application state interface that gets automatically augmented based on your createApp setup function.
|
|
15
|
+
*
|
|
16
|
+
* This interface is empty by default but gets populated with strongly-typed properties
|
|
17
|
+
* when you define a setup function in createApp(). The Agentuity build tool automatically
|
|
18
|
+
* generates type augmentations in `.agentuity/.agentuity_runtime.ts`.
|
|
19
|
+
*
|
|
20
|
+
* **How it works:**
|
|
21
|
+
* 1. You define setup() in createApp() that returns an object
|
|
22
|
+
* 2. The build tool generates module augmentation for this interface
|
|
23
|
+
* 3. All agents get strongly-typed access to app state via `ctx.app`
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* ```typescript
|
|
27
|
+
* // In your app.ts:
|
|
28
|
+
* const app = await createApp({
|
|
29
|
+
* setup: async () => {
|
|
30
|
+
* const db = await connectDatabase();
|
|
31
|
+
* const redis = await connectRedis();
|
|
32
|
+
* return { db, redis };
|
|
33
|
+
* }
|
|
34
|
+
* });
|
|
35
|
+
*
|
|
36
|
+
* // In your agent:
|
|
37
|
+
* const agent = createAgent({
|
|
38
|
+
* handler: async (ctx, input) => {
|
|
39
|
+
* // ctx.app is strongly typed with { db, redis }!
|
|
40
|
+
* const user = await ctx.app.db.query('SELECT * FROM users');
|
|
41
|
+
* await ctx.app.redis.set('key', 'value');
|
|
42
|
+
* return user;
|
|
43
|
+
* }
|
|
44
|
+
* });
|
|
45
|
+
* ```
|
|
46
|
+
*
|
|
47
|
+
* **Note:** If you're not seeing type hints for `ctx.app`, make sure you've run `bun run build`
|
|
48
|
+
* to generate the type augmentations.
|
|
49
|
+
*/
|
|
50
|
+
export interface AppState {
|
|
51
|
+
}
|
|
13
52
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,OAAO,CAAC;AACtB,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,YAAY,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,OAAO,CAAC;AACtB,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,YAAY,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC/C,cAAc,oBAAoB,CAAC;AACnC,OAAO,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAE7F;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAEH,MAAM,WAAW,QAAQ;CAAG"}
|
package/dist/index.js
CHANGED
|
@@ -5,8 +5,8 @@ export * from './router';
|
|
|
5
5
|
export * from './eval';
|
|
6
6
|
export * from './session';
|
|
7
7
|
export * from './workbench';
|
|
8
|
-
export { getRouter } from './_server';
|
|
8
|
+
export { getRouter, getAppState } from './_server';
|
|
9
9
|
export { Email, parseEmail } from './io/email';
|
|
10
10
|
export * from './services/evalrun';
|
|
11
|
-
export { getEvalRunEventProvider } from './_services';
|
|
11
|
+
export { getEvalRunEventProvider, getThreadProvider, getSessionProvider } from './_services';
|
|
12
12
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,OAAO,CAAC;AACtB,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAE5B,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,OAAO,CAAC;AACtB,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAE5B,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC/C,cAAc,oBAAoB,CAAC;AACnC,OAAO,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/io/email.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"email.d.ts","sourceRoot":"","sources":["../../src/io/email.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"email.d.ts","sourceRoot":"","sources":["../../src/io/email.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,OAAO,EAAoC,MAAM,YAAY,CAAC;AAE7F;;;;;GAKG;AACH,qBAAa,KAAK;IACjB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAa;gBAE1B,IAAI,EAAE,UAAU;IAI5B,QAAQ,IAAI,MAAM;IAIlB;;OAEG;IACH,IAAI,IAAI,IAAI,GAAG,IAAI;IAInB;;OAEG;IACH,SAAS,IAAI,MAAM,GAAG,IAAI;IAI1B;;OAEG;IACH,OAAO,IAAI,OAAO;IAIlB;;;;OAIG;IACH,EAAE,IAAI,MAAM,GAAG,IAAI;IAgBnB;;OAEG;IACH,SAAS,IAAI,MAAM,GAAG,IAAI;IAI1B;;OAEG;IACH,QAAQ,IAAI,MAAM,GAAG,IAAI;IAIzB;;OAEG;IACH,OAAO,IAAI,MAAM,GAAG,IAAI;IAaxB;;OAEG;IACH,MAAM,IAAI,MAAM,GAAG,IAAI;IAavB;;OAEG;IACH,OAAO,IAAI,MAAM,GAAG,IAAI;IAIxB;;OAEG;IACH,IAAI,IAAI,MAAM,GAAG,IAAI;IAIrB;;OAEG;IACH,IAAI,IAAI,MAAM,GAAG,IAAI;IAIrB;;;;;OAKG;IACH,WAAW,IAAI,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;CAS/D;AAiBD;;;;;;GAMG;AACH,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAsB7D"}
|
package/dist/io/email.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { StructuredError } from '@agentuity/core';
|
|
1
2
|
import { simpleParser } from 'mailparser';
|
|
2
3
|
/**
|
|
3
4
|
* A class representing an email with common information for processing.
|
|
@@ -127,6 +128,9 @@ export class Email {
|
|
|
127
128
|
}));
|
|
128
129
|
}
|
|
129
130
|
}
|
|
131
|
+
const InvalidEmailEmptyError = StructuredError('InvalidEmailEmptyError', 'Failed to parse email: empty buffer');
|
|
132
|
+
const InvalidEmailHeadersError = StructuredError('InvalidEmailHeadersError', 'Failed to parse email: missing headers');
|
|
133
|
+
const InvalidEmailParseError = StructuredError('InvalidEmailParseError', 'Failed to parse email: body was invalid')();
|
|
130
134
|
/**
|
|
131
135
|
* Parse an email from a buffer and return an Email object.
|
|
132
136
|
*
|
|
@@ -136,19 +140,23 @@ export class Email {
|
|
|
136
140
|
*/
|
|
137
141
|
export async function parseEmail(data) {
|
|
138
142
|
if (data.length === 0) {
|
|
139
|
-
throw new
|
|
143
|
+
throw new InvalidEmailEmptyError();
|
|
140
144
|
}
|
|
141
145
|
const first16KB = data.slice(0, 16384).toString('utf-8', 0, Math.min(data.length, 16384));
|
|
142
146
|
const hasHeaders = /(^|\r?\n)[!-9;-~]+:\s/.test(first16KB);
|
|
143
147
|
if (!hasHeaders) {
|
|
144
|
-
throw new
|
|
148
|
+
throw new InvalidEmailHeadersError();
|
|
145
149
|
}
|
|
146
150
|
try {
|
|
147
151
|
const message = await simpleParser(data);
|
|
148
152
|
return new Email(message);
|
|
149
153
|
}
|
|
150
154
|
catch (error) {
|
|
151
|
-
throw new
|
|
155
|
+
throw new InvalidEmailParseError({
|
|
156
|
+
bufferSize: data.length,
|
|
157
|
+
preview: data.subarray(0, 50).toString('hex'),
|
|
158
|
+
cause: error,
|
|
159
|
+
});
|
|
152
160
|
}
|
|
153
161
|
}
|
|
154
162
|
//# sourceMappingURL=email.js.map
|
package/dist/io/email.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"email.js","sourceRoot":"","sources":["../../src/io/email.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"email.js","sourceRoot":"","sources":["../../src/io/email.ts"],"names":[],"mappings":"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"}
|