raffel 1.0.8 → 1.0.9
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/adapters/index.d.ts +2 -0
- package/dist/adapters/index.d.ts.map +1 -1
- package/dist/adapters/index.js +2 -0
- package/dist/adapters/index.js.map +1 -1
- package/dist/adapters/smtp.d.ts +152 -0
- package/dist/adapters/smtp.d.ts.map +1 -0
- package/dist/adapters/smtp.js +1143 -0
- package/dist/adapters/smtp.js.map +1 -0
- package/dist/adapters/websocket.d.ts.map +1 -1
- package/dist/adapters/websocket.js +34 -3
- package/dist/adapters/websocket.js.map +1 -1
- package/dist/channels/channel-manager.d.ts.map +1 -1
- package/dist/channels/channel-manager.js +277 -0
- package/dist/channels/channel-manager.js.map +1 -1
- package/dist/channels/index.d.ts +1 -1
- package/dist/channels/index.d.ts.map +1 -1
- package/dist/channels/index.js.map +1 -1
- package/dist/channels/types.d.ts +154 -0
- package/dist/channels/types.d.ts.map +1 -1
- package/dist/channels/types.js.map +1 -1
- package/dist/index.d.ts +6 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/smtp/client.d.ts +12 -0
- package/dist/smtp/client.d.ts.map +1 -0
- package/dist/smtp/client.js +424 -0
- package/dist/smtp/client.js.map +1 -0
- package/dist/smtp/index.d.ts +13 -0
- package/dist/smtp/index.d.ts.map +1 -0
- package/dist/smtp/index.js +14 -0
- package/dist/smtp/index.js.map +1 -0
- package/dist/smtp/relay.d.ts +14 -0
- package/dist/smtp/relay.d.ts.map +1 -0
- package/dist/smtp/relay.js +418 -0
- package/dist/smtp/relay.js.map +1 -0
- package/dist/smtp/types.d.ts +194 -0
- package/dist/smtp/types.d.ts.map +1 -0
- package/dist/smtp/types.js +7 -0
- package/dist/smtp/types.js.map +1 -0
- package/dist/types/context.d.ts +15 -1
- package/dist/types/context.d.ts.map +1 -1
- package/dist/types/context.js +3 -0
- package/dist/types/context.js.map +1 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/ui/types/context.d.ts +15 -1
- package/dist/ui/types/context.d.ts.map +1 -1
- package/dist/ui/types/index.d.ts +1 -1
- package/dist/ui/types/index.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/adapters/index.d.ts
CHANGED
|
@@ -22,6 +22,8 @@ export { createJsonRpcAdapter, JsonRpcErrorCode, HttpMetadataKey } from './jsonr
|
|
|
22
22
|
export type { JsonRpcAdapter, JsonRpcAdapterOptions, JsonRpcRequest, JsonRpcResponse, JsonRpcError, } from './jsonrpc.js';
|
|
23
23
|
export { createGrpcAdapter } from './grpc.js';
|
|
24
24
|
export type { GrpcAdapter, GrpcAdapterOptions, GrpcTlsOptions, GrpcMethodInfo } from './grpc.js';
|
|
25
|
+
export { createSmtpAdapter, createSmtpClient } from './smtp.js';
|
|
26
|
+
export type { SmtpAdapter, SmtpAdapterOptions, SmtpContextCapability, SmtpTlsOptions, SmtpAuthVerifier, SmtpRecipientValidator } from './smtp.js';
|
|
25
27
|
export { checkConnectionFilter, checkWebSocketConnectionFilter } from './utils/connection-filter.js';
|
|
26
28
|
export type { ConnectionFilter, WebSocketConnectionFilter } from './utils/connection-filter.js';
|
|
27
29
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAKH,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAA;AACvD,YAAY,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAA;AAG/E,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAC7C,YAAY,EAAE,WAAW,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAGhF,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAC5D,YAAY,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA;AAG7D,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAC5D,YAAY,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA;AAG7D,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AACtF,YAAY,EACV,cAAc,EACd,qBAAqB,EACrB,cAAc,EACd,eAAe,EACf,YAAY,GACb,MAAM,cAAc,CAAA;AAGrB,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAC7C,YAAY,EAAE,WAAW,EAAE,kBAAkB,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAGhG,OAAO,EAAE,qBAAqB,EAAE,8BAA8B,EAAE,MAAM,8BAA8B,CAAA;AACpG,YAAY,EAAE,gBAAgB,EAAE,yBAAyB,EAAE,MAAM,8BAA8B,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAKH,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAA;AACvD,YAAY,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAA;AAG/E,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAC7C,YAAY,EAAE,WAAW,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAGhF,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAC5D,YAAY,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA;AAG7D,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAC5D,YAAY,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA;AAG7D,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AACtF,YAAY,EACV,cAAc,EACd,qBAAqB,EACrB,cAAc,EACd,eAAe,EACf,YAAY,GACb,MAAM,cAAc,CAAA;AAGrB,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAC7C,YAAY,EAAE,WAAW,EAAE,kBAAkB,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAGhG,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAA;AAC/D,YAAY,EAAE,WAAW,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,cAAc,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAA;AAGjJ,OAAO,EAAE,qBAAqB,EAAE,8BAA8B,EAAE,MAAM,8BAA8B,CAAA;AACpG,YAAY,EAAE,gBAAgB,EAAE,yBAAyB,EAAE,MAAM,8BAA8B,CAAA"}
|
package/dist/adapters/index.js
CHANGED
|
@@ -23,6 +23,8 @@ export { createUdpAdapter, createUdpClient } from './udp.js';
|
|
|
23
23
|
export { createJsonRpcAdapter, JsonRpcErrorCode, HttpMetadataKey } from './jsonrpc.js';
|
|
24
24
|
// gRPC adapter
|
|
25
25
|
export { createGrpcAdapter } from './grpc.js';
|
|
26
|
+
// SMTP adapter
|
|
27
|
+
export { createSmtpAdapter, createSmtpClient } from './smtp.js';
|
|
26
28
|
// Connection Filter (TCP, UDP, WebSocket)
|
|
27
29
|
export { checkConnectionFilter, checkWebSocketConnectionFilter } from './utils/connection-filter.js';
|
|
28
30
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,iDAAiD;AAEjD,oBAAoB;AACpB,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAA;AAGvD,eAAe;AACf,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAG7C,cAAc;AACd,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAG5D,cAAc;AACd,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAG5D,uBAAuB;AACvB,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAStF,eAAe;AACf,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAG7C,0CAA0C;AAC1C,OAAO,EAAE,qBAAqB,EAAE,8BAA8B,EAAE,MAAM,8BAA8B,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,iDAAiD;AAEjD,oBAAoB;AACpB,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAA;AAGvD,eAAe;AACf,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAG7C,cAAc;AACd,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAG5D,cAAc;AACd,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAG5D,uBAAuB;AACvB,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAStF,eAAe;AACf,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAG7C,eAAe;AACf,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAA;AAG/D,0CAA0C;AAC1C,OAAO,EAAE,qBAAqB,EAAE,8BAA8B,EAAE,MAAM,8BAA8B,CAAA"}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SMTP Adapter
|
|
3
|
+
*
|
|
4
|
+
* Exposes Raffel services as a standards-compliant SMTP server.
|
|
5
|
+
* Translates SMTP transactions into Envelope procedure calls.
|
|
6
|
+
*
|
|
7
|
+
* Supported RFCs:
|
|
8
|
+
* - RFC 5321 (SMTP core)
|
|
9
|
+
* - RFC 3207 (STARTTLS)
|
|
10
|
+
* - RFC 4954 (AUTH PLAIN / LOGIN)
|
|
11
|
+
* - RFC 1870 (SIZE extension)
|
|
12
|
+
* - RFC 6152 (8BITMIME)
|
|
13
|
+
* - RFC 6531 (SMTPUTF8)
|
|
14
|
+
* - RFC 3030 (CHUNKING / BDAT)
|
|
15
|
+
* - RFC 2920 (PIPELINING)
|
|
16
|
+
*
|
|
17
|
+
* Protocol mapping:
|
|
18
|
+
* SMTP transaction → procedure 'mail.receive' (configurable)
|
|
19
|
+
* AUTH attempt → procedure 'mail.authenticate' (configurable)
|
|
20
|
+
* VRFY command → procedure 'mail.verify' (configurable)
|
|
21
|
+
*/
|
|
22
|
+
import { type Server, type Socket } from 'node:net';
|
|
23
|
+
import * as tls from 'node:tls';
|
|
24
|
+
import type { Router } from '../core/router.js';
|
|
25
|
+
import type { ContextSeed } from '../types/index.js';
|
|
26
|
+
import { type ConnectionFilter } from './utils/connection-filter.js';
|
|
27
|
+
export type SmtpState = 'greeting' | 'ready' | 'mail' | 'rcpt' | 'data' | 'bdat' | 'starttls' | 'auth_login_user' | 'auth_login_pass' | 'closing';
|
|
28
|
+
export interface SmtpContextCapability {
|
|
29
|
+
readonly kind: 'smtp';
|
|
30
|
+
readonly remoteAddress?: string;
|
|
31
|
+
readonly remotePort?: number;
|
|
32
|
+
readonly sender?: string;
|
|
33
|
+
readonly recipients?: readonly string[];
|
|
34
|
+
readonly authenticated?: boolean;
|
|
35
|
+
readonly authenticatedUser?: string;
|
|
36
|
+
readonly tlsActive?: boolean;
|
|
37
|
+
readonly ehloHostname?: string;
|
|
38
|
+
}
|
|
39
|
+
export interface SmtpTlsOptions {
|
|
40
|
+
/** TLS certificate (PEM) */
|
|
41
|
+
cert: string | Buffer;
|
|
42
|
+
/** TLS private key (PEM) */
|
|
43
|
+
key: string | Buffer;
|
|
44
|
+
/** CA certificates for client verification (optional) */
|
|
45
|
+
ca?: string | Buffer | Array<string | Buffer>;
|
|
46
|
+
/** Minimum TLS version (default: TLSv1.2) */
|
|
47
|
+
minVersion?: tls.SecureVersion;
|
|
48
|
+
}
|
|
49
|
+
export interface SmtpTimeouts {
|
|
50
|
+
greeting?: number;
|
|
51
|
+
command?: number;
|
|
52
|
+
data?: number;
|
|
53
|
+
quit?: number;
|
|
54
|
+
tls?: number;
|
|
55
|
+
}
|
|
56
|
+
/** Auth verifier: return true to accept, false to reject */
|
|
57
|
+
export type SmtpAuthVerifier = (username: string, password: string, info: {
|
|
58
|
+
remoteAddress: string;
|
|
59
|
+
remotePort: number;
|
|
60
|
+
tlsActive: boolean;
|
|
61
|
+
}) => boolean | Promise<boolean>;
|
|
62
|
+
/** Recipient validator: return true to accept, false → 550 */
|
|
63
|
+
export type SmtpRecipientValidator = (recipient: string, sender: string, info: {
|
|
64
|
+
remoteAddress: string;
|
|
65
|
+
authenticated: boolean;
|
|
66
|
+
authenticatedUser?: string;
|
|
67
|
+
}) => boolean | Promise<boolean>;
|
|
68
|
+
/**
|
|
69
|
+
* SMTP adapter configuration
|
|
70
|
+
*/
|
|
71
|
+
export interface SmtpAdapterOptions {
|
|
72
|
+
/** Port to listen on (25 = relay, 587 = submission, 465 = SMTPS) */
|
|
73
|
+
port: number;
|
|
74
|
+
/** Host to bind to (default: '0.0.0.0') */
|
|
75
|
+
host?: string;
|
|
76
|
+
/** Server hostname for EHLO greeting */
|
|
77
|
+
hostname?: string;
|
|
78
|
+
/** Maximum message size in bytes (default: 50MB) */
|
|
79
|
+
maxMessageSize?: number;
|
|
80
|
+
/** Maximum recipients per message (default: 100) */
|
|
81
|
+
maxRecipients?: number;
|
|
82
|
+
/** Maximum failed AUTH attempts per connection (default: 5) */
|
|
83
|
+
maxAuthAttempts?: number;
|
|
84
|
+
/** SMTP-specific timeouts */
|
|
85
|
+
timeouts?: SmtpTimeouts;
|
|
86
|
+
/** TLS config for STARTTLS (omit to disable STARTTLS) */
|
|
87
|
+
tls?: SmtpTlsOptions;
|
|
88
|
+
/** Implicit TLS (port 465 / SMTPS) — wraps socket in TLS immediately */
|
|
89
|
+
implicitTls?: boolean;
|
|
90
|
+
/** Require TLS before accepting mail (default: false) */
|
|
91
|
+
requireTls?: boolean;
|
|
92
|
+
/** Require AUTH before accepting mail (default: false) */
|
|
93
|
+
requireAuth?: boolean;
|
|
94
|
+
/** Only allow AUTH over TLS (default: true — RFC 4954 compliance) */
|
|
95
|
+
authRequiresTls?: boolean;
|
|
96
|
+
/** AUTH credential verifier */
|
|
97
|
+
authVerifier?: SmtpAuthVerifier;
|
|
98
|
+
/** Recipient validator (called on each RCPT TO) */
|
|
99
|
+
recipientValidator?: SmtpRecipientValidator;
|
|
100
|
+
/** Procedure name for mail delivery (default: 'mail.receive') */
|
|
101
|
+
deliverProcedure?: string;
|
|
102
|
+
/** Procedure name for auth (default: 'mail.authenticate') */
|
|
103
|
+
authProcedure?: string;
|
|
104
|
+
/** Procedure name for VRFY (default: 'mail.verify') */
|
|
105
|
+
verifyProcedure?: string;
|
|
106
|
+
/** SMTP banner text (after 220 hostname) */
|
|
107
|
+
banner?: string;
|
|
108
|
+
/** Context factory for creating request context */
|
|
109
|
+
contextFactory?: (socket: Socket) => ContextSeed | Promise<ContextSeed>;
|
|
110
|
+
/** Inbound connection filter */
|
|
111
|
+
filter?: ConnectionFilter;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* SMTP connection handler for established sockets
|
|
115
|
+
*/
|
|
116
|
+
export interface SmtpConnectionHandler {
|
|
117
|
+
handleConnection(socket: Socket): void;
|
|
118
|
+
closeAllConnections(): void;
|
|
119
|
+
readonly clientCount: number;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* SMTP Adapter interface
|
|
123
|
+
*/
|
|
124
|
+
export interface SmtpAdapter {
|
|
125
|
+
start(): Promise<void>;
|
|
126
|
+
stop(): Promise<void>;
|
|
127
|
+
readonly clientCount: number;
|
|
128
|
+
readonly server: Server | null;
|
|
129
|
+
}
|
|
130
|
+
export declare function createSmtpConnectionHandler(router: Router, options: Omit<SmtpAdapterOptions, 'port' | 'host' | 'filter'>): SmtpConnectionHandler;
|
|
131
|
+
export declare function createSmtpAdapter(router: Router, options: SmtpAdapterOptions): SmtpAdapter;
|
|
132
|
+
/**
|
|
133
|
+
* Helper: Create an SMTP client for testing/usage
|
|
134
|
+
*/
|
|
135
|
+
export declare function createSmtpClient(options: {
|
|
136
|
+
host: string;
|
|
137
|
+
port: number;
|
|
138
|
+
tls?: boolean;
|
|
139
|
+
tlsOptions?: tls.ConnectionOptions;
|
|
140
|
+
}): {
|
|
141
|
+
connect(): Promise<string>;
|
|
142
|
+
command(cmd: string): Promise<string>;
|
|
143
|
+
sendMail(options: {
|
|
144
|
+
from: string;
|
|
145
|
+
to: string | string[];
|
|
146
|
+
subject?: string;
|
|
147
|
+
body?: string;
|
|
148
|
+
headers?: Record<string, string>;
|
|
149
|
+
}): Promise<string>;
|
|
150
|
+
disconnect(): void;
|
|
151
|
+
};
|
|
152
|
+
//# sourceMappingURL=smtp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"smtp.d.ts","sourceRoot":"","sources":["../../src/adapters/smtp.ts"],"names":[],"mappings":"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"}
|