@brightchain/brightchain-api-lib 0.25.0 → 0.27.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.
- package/package.json +4 -3
- package/src/lib/appConstants.d.ts +1 -1
- package/src/lib/appConstants.js +1 -1
- package/src/lib/application.d.ts +3 -14
- package/src/lib/application.d.ts.map +1 -1
- package/src/lib/application.js +91 -34
- package/src/lib/application.js.map +1 -1
- package/src/lib/constants.d.ts.map +1 -1
- package/src/lib/constants.js +1 -1
- package/src/lib/constants.js.map +1 -1
- package/src/lib/databaseInit.d.ts +7 -11
- package/src/lib/databaseInit.d.ts.map +1 -1
- package/src/lib/databaseInit.js +41 -107
- package/src/lib/databaseInit.js.map +1 -1
- package/src/lib/datastore/block-document-store-factory.d.ts +3 -0
- package/src/lib/datastore/block-document-store-factory.d.ts.map +1 -1
- package/src/lib/datastore/block-document-store-factory.js +15 -18
- package/src/lib/datastore/block-document-store-factory.js.map +1 -1
- package/src/lib/datastore/block-document-store.d.ts +2 -191
- package/src/lib/datastore/block-document-store.d.ts.map +1 -1
- package/src/lib/datastore/block-document-store.js +4 -628
- package/src/lib/datastore/block-document-store.js.map +1 -1
- package/src/lib/datastore/document-store.d.ts +1 -62
- package/src/lib/datastore/document-store.d.ts.map +1 -1
- package/src/lib/datastore/memory-document-store.d.ts +1 -8
- package/src/lib/datastore/memory-document-store.d.ts.map +1 -1
- package/src/lib/datastore/memory-document-store.js +3 -214
- package/src/lib/datastore/memory-document-store.js.map +1 -1
- package/src/lib/environment.d.ts +4 -47
- package/src/lib/environment.d.ts.map +1 -1
- package/src/lib/environment.js +2 -136
- package/src/lib/environment.js.map +1 -1
- package/src/lib/interfaces/environment.d.ts +3 -25
- package/src/lib/interfaces/environment.d.ts.map +1 -1
- package/src/lib/interfaces/responses/emailGatewayResponses.d.ts +30 -0
- package/src/lib/interfaces/responses/emailGatewayResponses.d.ts.map +1 -0
- package/src/lib/interfaces/responses/emailGatewayResponses.js +3 -0
- package/src/lib/interfaces/responses/emailGatewayResponses.js.map +1 -0
- package/src/lib/interfaces/responses/index.d.ts +1 -0
- package/src/lib/interfaces/responses/index.d.ts.map +1 -1
- package/src/lib/middleware/index.d.ts +1 -1
- package/src/lib/middleware/index.d.ts.map +1 -1
- package/src/lib/middleware/index.js +3 -2
- package/src/lib/middleware/index.js.map +1 -1
- package/src/lib/middleware/validateBody.d.ts +1 -12
- package/src/lib/middleware/validateBody.d.ts.map +1 -1
- package/src/lib/middleware/validateBody.js +4 -32
- package/src/lib/middleware/validateBody.js.map +1 -1
- package/src/lib/middlewares.d.ts.map +1 -1
- package/src/lib/middlewares.js +7 -1
- package/src/lib/middlewares.js.map +1 -1
- package/src/lib/plugins/brightchain-database-plugin.d.ts +27 -79
- package/src/lib/plugins/brightchain-database-plugin.d.ts.map +1 -1
- package/src/lib/plugins/brightchain-database-plugin.js +32 -103
- package/src/lib/plugins/brightchain-database-plugin.js.map +1 -1
- package/src/lib/routers/app.d.ts.map +1 -1
- package/src/lib/routers/app.js +1 -0
- package/src/lib/routers/app.js.map +1 -1
- package/src/lib/services/emailGateway/antiSpamFilter.d.ts +229 -0
- package/src/lib/services/emailGateway/antiSpamFilter.d.ts.map +1 -0
- package/src/lib/services/emailGateway/antiSpamFilter.js +325 -0
- package/src/lib/services/emailGateway/antiSpamFilter.js.map +1 -0
- package/src/lib/services/emailGateway/bounceProcessor.d.ts +182 -0
- package/src/lib/services/emailGateway/bounceProcessor.d.ts.map +1 -0
- package/src/lib/services/emailGateway/bounceProcessor.js +391 -0
- package/src/lib/services/emailGateway/bounceProcessor.js.map +1 -0
- package/src/lib/services/emailGateway/emailAuthVerifier.d.ts +99 -0
- package/src/lib/services/emailGateway/emailAuthVerifier.d.ts.map +1 -0
- package/src/lib/services/emailGateway/emailAuthVerifier.js +202 -0
- package/src/lib/services/emailGateway/emailAuthVerifier.js.map +1 -0
- package/src/lib/services/emailGateway/emailGatewayConfig.d.ts +74 -0
- package/src/lib/services/emailGateway/emailGatewayConfig.d.ts.map +1 -0
- package/src/lib/services/emailGateway/emailGatewayConfig.js +107 -0
- package/src/lib/services/emailGateway/emailGatewayConfig.js.map +1 -0
- package/src/lib/services/emailGateway/emailGatewayService.d.ts +209 -0
- package/src/lib/services/emailGateway/emailGatewayService.d.ts.map +1 -0
- package/src/lib/services/emailGateway/emailGatewayService.js +254 -0
- package/src/lib/services/emailGateway/emailGatewayService.js.map +1 -0
- package/src/lib/services/emailGateway/gatewayObservability.d.ts +123 -0
- package/src/lib/services/emailGateway/gatewayObservability.d.ts.map +1 -0
- package/src/lib/services/emailGateway/gatewayObservability.js +186 -0
- package/src/lib/services/emailGateway/gatewayObservability.js.map +1 -0
- package/src/lib/services/emailGateway/inboundProcessor.d.ts +113 -0
- package/src/lib/services/emailGateway/inboundProcessor.d.ts.map +1 -0
- package/src/lib/services/emailGateway/inboundProcessor.js +298 -0
- package/src/lib/services/emailGateway/inboundProcessor.js.map +1 -0
- package/src/lib/services/emailGateway/index.d.ts +23 -0
- package/src/lib/services/emailGateway/index.d.ts.map +1 -0
- package/src/lib/services/emailGateway/index.js +26 -0
- package/src/lib/services/emailGateway/index.js.map +1 -0
- package/src/lib/services/emailGateway/outboundDeliveryWorker.d.ts +122 -0
- package/src/lib/services/emailGateway/outboundDeliveryWorker.d.ts.map +1 -0
- package/src/lib/services/emailGateway/outboundDeliveryWorker.js +110 -0
- package/src/lib/services/emailGateway/outboundDeliveryWorker.js.map +1 -0
- package/src/lib/services/emailGateway/outboundQueue.d.ts +135 -0
- package/src/lib/services/emailGateway/outboundQueue.d.ts.map +1 -0
- package/src/lib/services/emailGateway/outboundQueue.js +227 -0
- package/src/lib/services/emailGateway/outboundQueue.js.map +1 -0
- package/src/lib/services/emailGateway/outboundQueueStore.d.ts +110 -0
- package/src/lib/services/emailGateway/outboundQueueStore.d.ts.map +1 -0
- package/src/lib/services/emailGateway/outboundQueueStore.js +131 -0
- package/src/lib/services/emailGateway/outboundQueueStore.js.map +1 -0
- package/src/lib/services/emailGateway/recipientLookupService.d.ts +146 -0
- package/src/lib/services/emailGateway/recipientLookupService.d.ts.map +1 -0
- package/src/lib/services/emailGateway/recipientLookupService.js +307 -0
- package/src/lib/services/emailGateway/recipientLookupService.js.map +1 -0
- package/src/lib/services/emailGateway/retryBackoff.d.ts +79 -0
- package/src/lib/services/emailGateway/retryBackoff.d.ts.map +1 -0
- package/src/lib/services/emailGateway/retryBackoff.js +77 -0
- package/src/lib/services/emailGateway/retryBackoff.js.map +1 -0
- package/src/lib/services/index.d.ts +1 -0
- package/src/lib/services/index.d.ts.map +1 -1
- package/src/lib/services/index.js +1 -0
- package/src/lib/services/index.js.map +1 -1
- package/src/lib/services/quorumDatabaseAdapter.d.ts +7 -1
- package/src/lib/services/quorumDatabaseAdapter.d.ts.map +1 -1
- package/src/lib/services/quorumDatabaseAdapter.js +83 -0
- package/src/lib/services/quorumDatabaseAdapter.js.map +1 -1
- package/src/lib/services/sessionAdapter.d.ts +2 -61
- package/src/lib/services/sessionAdapter.d.ts.map +1 -1
- package/src/lib/services/sessionAdapter.js +2 -102
- package/src/lib/services/sessionAdapter.js.map +1 -1
- package/src/lib/shared-types.d.ts +7 -15
- package/src/lib/shared-types.d.ts.map +1 -1
- package/src/lib/types/backend-id.d.ts +1 -2
- package/src/lib/types/backend-id.d.ts.map +1 -1
- package/src/lib/validation/userValidation.d.ts +2 -43
- package/src/lib/validation/userValidation.d.ts.map +1 -1
- package/src/lib/validation/userValidation.js +6 -144
- package/src/lib/validation/userValidation.js.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"brightchain-database-plugin.js","sourceRoot":"","sources":["../../../../../brightchain-api-lib/src/lib/plugins/brightchain-database-plugin.ts"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"brightchain-database-plugin.js","sourceRoot":"","sources":["../../../../../brightchain-api-lib/src/lib/plugins/brightchain-database-plugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../../../../brightchain-api-lib/src/lib/routers/app.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAC7D,OAAO,EACL,YAAY,EACZ,SAAS,IAAI,iBAAiB,EAC/B,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAI1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAElC;;;;;GAKG;AACH,qBAAa,SAAS,CACpB,GAAG,SAAS,UAAU,GAAG,oBAAoB,CAC7C,SAAQ,iBAAiB,CAAC,GAAG,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC;IACjD;;;;OAIG;IACH,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAiB;gBAE1C,SAAS,EAAE,SAAS,CAAC,GAAG,CAAC;IAKrC;;;OAGG;IACI,uBAAuB,IAAI,SAAS,CAAC,GAAG,CAAC;IAIhD;;;;;;;OAOG;IACH,OAAO,CAAC,qBAAqB;IA6B7B;;;OAGG;IACH,OAAO,CAAC,eAAe;IAcvB;;;;;;;;;OASG;IACa,WAAW,CACzB,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,QAAQ,EACb,IAAI,EAAE,YAAY,GACjB,IAAI;
|
|
1
|
+
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../../../../brightchain-api-lib/src/lib/routers/app.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAC7D,OAAO,EACL,YAAY,EACZ,SAAS,IAAI,iBAAiB,EAC/B,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAI1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAElC;;;;;GAKG;AACH,qBAAa,SAAS,CACpB,GAAG,SAAS,UAAU,GAAG,oBAAoB,CAC7C,SAAQ,iBAAiB,CAAC,GAAG,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC;IACjD;;;;OAIG;IACH,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAiB;gBAE1C,SAAS,EAAE,SAAS,CAAC,GAAG,CAAC;IAKrC;;;OAGG;IACI,uBAAuB,IAAI,SAAS,CAAC,GAAG,CAAC;IAIhD;;;;;;;OAOG;IACH,OAAO,CAAC,qBAAqB;IA6B7B;;;OAGG;IACH,OAAO,CAAC,eAAe;IAcvB;;;;;;;;;OASG;IACa,WAAW,CACzB,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,QAAQ,EACb,IAAI,EAAE,YAAY,GACjB,IAAI;CA8DR"}
|
package/src/lib/routers/app.js
CHANGED
|
@@ -140,6 +140,7 @@ class AppRouter extends node_express_suite_1.AppRouter {
|
|
|
140
140
|
// Override fontAwesomeKitId after spread to ensure it's not empty
|
|
141
141
|
fontAwesomeKitId: environment.fontAwesomeKitId || baseLocals['fontAwesomeKitId'] || '',
|
|
142
142
|
siteUrl: environment.serverUrl,
|
|
143
|
+
emailDomain: environment.emailDomain,
|
|
143
144
|
};
|
|
144
145
|
this.renderTemplate(req, res, next, 'index', locals);
|
|
145
146
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.js","sourceRoot":"","sources":["../../../../../brightchain-api-lib/src/lib/routers/app.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"app.js","sourceRoot":"","sources":["../../../../../brightchain-api-lib/src/lib/routers/app.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AntiSpamFilter — milter integration adapter for SpamAssassin/Rspamd
|
|
3
|
+
* score classification of inbound email messages.
|
|
4
|
+
*
|
|
5
|
+
* The filter wraps a configurable spam engine client (SpamAssassin via
|
|
6
|
+
* spamc protocol or Rspamd via HTTP API) and classifies messages as
|
|
7
|
+
* ham, probable-spam, or definite-spam based on configurable score
|
|
8
|
+
* thresholds from `ISpamThresholds`.
|
|
9
|
+
*
|
|
10
|
+
* Integration with Postfix is via the milter protocol (RFC 6008):
|
|
11
|
+
* - Definite-spam → signal rejection (SMFIS_REJECT, 550)
|
|
12
|
+
* - Probable-spam → accept and tag metadata with spam flag and score
|
|
13
|
+
* - Ham → accept without modification
|
|
14
|
+
*
|
|
15
|
+
* @see Requirements 7.1, 7.2, 7.3, 7.4, 7.5
|
|
16
|
+
* @module antiSpamFilter
|
|
17
|
+
*/
|
|
18
|
+
import { type ISpamThresholds, SpamClassification } from '@brightchain/brightchain-lib';
|
|
19
|
+
/**
|
|
20
|
+
* Result returned by a spam engine after scanning a message.
|
|
21
|
+
*/
|
|
22
|
+
export interface ISpamScanResult {
|
|
23
|
+
/** Numeric spam score assigned by the engine */
|
|
24
|
+
score: number;
|
|
25
|
+
/** Whether the engine considers the message spam (engine's own threshold) */
|
|
26
|
+
isSpam: boolean;
|
|
27
|
+
/** Optional human-readable details or rule matches */
|
|
28
|
+
details?: string;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Interface for spam engine clients that communicate with external
|
|
32
|
+
* spam detection services.
|
|
33
|
+
*
|
|
34
|
+
* Implementations handle the protocol-specific communication with
|
|
35
|
+
* SpamAssassin (spamc TCP protocol) or Rspamd (HTTP API).
|
|
36
|
+
*/
|
|
37
|
+
export interface ISpamEngineClient {
|
|
38
|
+
/**
|
|
39
|
+
* Scan a raw email message for spam.
|
|
40
|
+
*
|
|
41
|
+
* @param rawMessage - The raw RFC 5322 message bytes
|
|
42
|
+
* @returns Scan result with score and spam determination
|
|
43
|
+
*/
|
|
44
|
+
scan(rawMessage: Buffer): Promise<ISpamScanResult>;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* SpamAssassin engine client — communicates with spamd via the spamc
|
|
48
|
+
* TCP protocol (default port 783).
|
|
49
|
+
*
|
|
50
|
+
* Protocol overview:
|
|
51
|
+
* 1. Connect to spamd TCP socket
|
|
52
|
+
* 2. Send `SYMBOLS SPAMC/1.5\r\nContent-length: <len>\r\n\r\n<message>`
|
|
53
|
+
* 3. Parse response for `Spam: True/False ; <score> / <threshold>` header
|
|
54
|
+
*
|
|
55
|
+
* @see Requirement 7.1
|
|
56
|
+
*/
|
|
57
|
+
export declare class SpamAssassinClient implements ISpamEngineClient {
|
|
58
|
+
private readonly host;
|
|
59
|
+
private readonly port;
|
|
60
|
+
private readonly timeoutMs;
|
|
61
|
+
constructor(host?: string, port?: number, timeoutMs?: number);
|
|
62
|
+
scan(rawMessage: Buffer): Promise<ISpamScanResult>;
|
|
63
|
+
/**
|
|
64
|
+
* Parse the spamd response to extract score and spam determination.
|
|
65
|
+
*
|
|
66
|
+
* Expected header line format:
|
|
67
|
+
* `Spam: True ; 15.3 / 5.0`
|
|
68
|
+
* `Spam: False ; 1.2 / 5.0`
|
|
69
|
+
*/
|
|
70
|
+
static parseResponse(response: string): ISpamScanResult;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Rspamd engine client — communicates with rspamd via its HTTP API
|
|
74
|
+
* (default port 11333).
|
|
75
|
+
*
|
|
76
|
+
* Protocol overview:
|
|
77
|
+
* 1. POST raw message to `http://<host>:<port>/checkv2`
|
|
78
|
+
* 2. Parse JSON response for `score`, `is_spam`/`action`, and `symbols`
|
|
79
|
+
*
|
|
80
|
+
* @see Requirement 7.1
|
|
81
|
+
*/
|
|
82
|
+
export declare class RspamdClient implements ISpamEngineClient {
|
|
83
|
+
private readonly host;
|
|
84
|
+
private readonly port;
|
|
85
|
+
private readonly timeoutMs;
|
|
86
|
+
constructor(host?: string, port?: number, timeoutMs?: number);
|
|
87
|
+
scan(rawMessage: Buffer): Promise<ISpamScanResult>;
|
|
88
|
+
/**
|
|
89
|
+
* Parse the Rspamd JSON response.
|
|
90
|
+
*
|
|
91
|
+
* Expected JSON structure:
|
|
92
|
+
* ```json
|
|
93
|
+
* {
|
|
94
|
+
* "score": 15.3,
|
|
95
|
+
* "required_score": 15.0,
|
|
96
|
+
* "action": "reject" | "add header" | "no action" | ...,
|
|
97
|
+
* "symbols": { ... }
|
|
98
|
+
* }
|
|
99
|
+
* ```
|
|
100
|
+
*/
|
|
101
|
+
static parseResponse(body: string): ISpamScanResult;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Result of scanning a message through the anti-spam filter.
|
|
105
|
+
*
|
|
106
|
+
* @see Requirements 7.2, 7.3, 7.4
|
|
107
|
+
*/
|
|
108
|
+
export interface IAntiSpamScanResult {
|
|
109
|
+
/** Numeric spam score from the engine */
|
|
110
|
+
score: number;
|
|
111
|
+
/** Classification based on configurable thresholds */
|
|
112
|
+
classification: SpamClassification;
|
|
113
|
+
/** Optional details from the spam engine (rule matches, etc.) */
|
|
114
|
+
details?: string;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Milter protocol actions that the filter can signal to Postfix.
|
|
118
|
+
*
|
|
119
|
+
* Maps to Sendmail milter protocol responses (RFC 6008):
|
|
120
|
+
* - `accept`: SMFIS_ACCEPT — accept the message
|
|
121
|
+
* - `reject`: SMFIS_REJECT — reject with 550
|
|
122
|
+
* - `continue`: SMFIS_CONTINUE — continue processing (accept with modifications)
|
|
123
|
+
*
|
|
124
|
+
* @see Requirement 7.5
|
|
125
|
+
*/
|
|
126
|
+
export type MilterAction = 'accept' | 'reject' | 'continue';
|
|
127
|
+
/**
|
|
128
|
+
* Full milter response including the action and any metadata tags
|
|
129
|
+
* to add to the message.
|
|
130
|
+
*
|
|
131
|
+
* @see Requirements 7.3, 7.4, 7.5
|
|
132
|
+
*/
|
|
133
|
+
export interface IMilterResponse {
|
|
134
|
+
/** Milter action to signal to Postfix */
|
|
135
|
+
action: MilterAction;
|
|
136
|
+
/** SMTP reply code (e.g. 550 for rejection) */
|
|
137
|
+
replyCode?: number;
|
|
138
|
+
/** SMTP reply text */
|
|
139
|
+
replyText?: string;
|
|
140
|
+
/** Headers to add to the message (for probable-spam tagging) */
|
|
141
|
+
addHeaders?: Record<string, string>;
|
|
142
|
+
/** The scan result that produced this response */
|
|
143
|
+
scanResult: IAntiSpamScanResult;
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Interface for the anti-spam filter adapter.
|
|
147
|
+
*
|
|
148
|
+
* @see Requirements 7.1, 7.2, 7.3, 7.4, 7.5
|
|
149
|
+
*/
|
|
150
|
+
export interface IAntiSpamFilter {
|
|
151
|
+
/**
|
|
152
|
+
* Scan a raw email message and return the spam classification result.
|
|
153
|
+
*
|
|
154
|
+
* @param rawMessage - The raw RFC 5322 message bytes
|
|
155
|
+
* @returns Scan result with score, classification, and optional details
|
|
156
|
+
*/
|
|
157
|
+
scan(rawMessage: Buffer): Promise<IAntiSpamScanResult>;
|
|
158
|
+
/**
|
|
159
|
+
* Scan a message and return the milter protocol response that should
|
|
160
|
+
* be sent back to Postfix.
|
|
161
|
+
*
|
|
162
|
+
* This is the primary integration point for the Postfix milter protocol.
|
|
163
|
+
*
|
|
164
|
+
* @param rawMessage - The raw RFC 5322 message bytes
|
|
165
|
+
* @returns Milter response with action, optional reply code, and headers
|
|
166
|
+
*/
|
|
167
|
+
milterCheck(rawMessage: Buffer): Promise<IMilterResponse>;
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Milter integration adapter for SpamAssassin/Rspamd score classification.
|
|
171
|
+
*
|
|
172
|
+
* Wraps a configurable spam engine client and classifies messages based
|
|
173
|
+
* on `ISpamThresholds`:
|
|
174
|
+
* - score < probableSpamScore → Ham (accept)
|
|
175
|
+
* - probableSpamScore ≤ score < definiteSpamScore → ProbableSpam (tag metadata)
|
|
176
|
+
* - score ≥ definiteSpamScore → DefiniteSpam (reject 550)
|
|
177
|
+
*
|
|
178
|
+
* @see Requirements 7.1, 7.2, 7.3, 7.4, 7.5
|
|
179
|
+
*/
|
|
180
|
+
export declare class AntiSpamFilter implements IAntiSpamFilter {
|
|
181
|
+
private readonly engineClient;
|
|
182
|
+
private readonly thresholds;
|
|
183
|
+
/**
|
|
184
|
+
* Create an AntiSpamFilter with the specified engine and thresholds.
|
|
185
|
+
*
|
|
186
|
+
* @param engine - Which spam engine to use: `'spamassassin'` or `'rspamd'`
|
|
187
|
+
* @param thresholds - Score thresholds for classification
|
|
188
|
+
* @param engineClient - Optional pre-configured engine client (for testing / DI)
|
|
189
|
+
* @param engineHost - Host for the spam engine (default: localhost)
|
|
190
|
+
* @param enginePort - Port for the spam engine (default: engine-specific)
|
|
191
|
+
*/
|
|
192
|
+
constructor(engine: 'spamassassin' | 'rspamd', thresholds: ISpamThresholds, engineClient?: ISpamEngineClient, engineHost?: string, enginePort?: number);
|
|
193
|
+
/**
|
|
194
|
+
* Classify a spam score against the configured thresholds.
|
|
195
|
+
*
|
|
196
|
+
* @param score - Numeric spam score from the engine
|
|
197
|
+
* @returns The spam classification
|
|
198
|
+
*
|
|
199
|
+
* @see Requirement 7.2
|
|
200
|
+
*/
|
|
201
|
+
classify(score: number): SpamClassification;
|
|
202
|
+
/**
|
|
203
|
+
* Scan a raw email message and return the spam classification result.
|
|
204
|
+
*
|
|
205
|
+
* Delegates to the configured spam engine client, then classifies
|
|
206
|
+
* the returned score against the configured thresholds.
|
|
207
|
+
*
|
|
208
|
+
* @param rawMessage - The raw RFC 5322 message bytes
|
|
209
|
+
* @returns Scan result with score, classification, and optional details
|
|
210
|
+
*
|
|
211
|
+
* @see Requirements 7.1, 7.2
|
|
212
|
+
*/
|
|
213
|
+
scan(rawMessage: Buffer): Promise<IAntiSpamScanResult>;
|
|
214
|
+
/**
|
|
215
|
+
* Scan a message and return the milter protocol response for Postfix.
|
|
216
|
+
*
|
|
217
|
+
* Maps classification to milter actions:
|
|
218
|
+
* - DefiniteSpam → reject (SMFIS_REJECT, 550)
|
|
219
|
+
* - ProbableSpam → continue with X-Spam-Flag / X-Spam-Score headers
|
|
220
|
+
* - Ham → accept
|
|
221
|
+
*
|
|
222
|
+
* @param rawMessage - The raw RFC 5322 message bytes
|
|
223
|
+
* @returns Milter response with action, optional reply code, and headers
|
|
224
|
+
*
|
|
225
|
+
* @see Requirements 7.3, 7.4, 7.5
|
|
226
|
+
*/
|
|
227
|
+
milterCheck(rawMessage: Buffer): Promise<IMilterResponse>;
|
|
228
|
+
}
|
|
229
|
+
//# sourceMappingURL=antiSpamFilter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"antiSpamFilter.d.ts","sourceRoot":"","sources":["../../../../../../brightchain-api-lib/src/lib/services/emailGateway/antiSpamFilter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,325 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* AntiSpamFilter — milter integration adapter for SpamAssassin/Rspamd
|
|
4
|
+
* score classification of inbound email messages.
|
|
5
|
+
*
|
|
6
|
+
* The filter wraps a configurable spam engine client (SpamAssassin via
|
|
7
|
+
* spamc protocol or Rspamd via HTTP API) and classifies messages as
|
|
8
|
+
* ham, probable-spam, or definite-spam based on configurable score
|
|
9
|
+
* thresholds from `ISpamThresholds`.
|
|
10
|
+
*
|
|
11
|
+
* Integration with Postfix is via the milter protocol (RFC 6008):
|
|
12
|
+
* - Definite-spam → signal rejection (SMFIS_REJECT, 550)
|
|
13
|
+
* - Probable-spam → accept and tag metadata with spam flag and score
|
|
14
|
+
* - Ham → accept without modification
|
|
15
|
+
*
|
|
16
|
+
* @see Requirements 7.1, 7.2, 7.3, 7.4, 7.5
|
|
17
|
+
* @module antiSpamFilter
|
|
18
|
+
*/
|
|
19
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
+
exports.AntiSpamFilter = exports.RspamdClient = exports.SpamAssassinClient = void 0;
|
|
21
|
+
const tslib_1 = require("tslib");
|
|
22
|
+
const http = tslib_1.__importStar(require("http"));
|
|
23
|
+
const net = tslib_1.__importStar(require("net"));
|
|
24
|
+
const brightchain_lib_1 = require("@brightchain/brightchain-lib");
|
|
25
|
+
// ─── SpamAssassin Client ────────────────────────────────────────────────────
|
|
26
|
+
/**
|
|
27
|
+
* SpamAssassin engine client — communicates with spamd via the spamc
|
|
28
|
+
* TCP protocol (default port 783).
|
|
29
|
+
*
|
|
30
|
+
* Protocol overview:
|
|
31
|
+
* 1. Connect to spamd TCP socket
|
|
32
|
+
* 2. Send `SYMBOLS SPAMC/1.5\r\nContent-length: <len>\r\n\r\n<message>`
|
|
33
|
+
* 3. Parse response for `Spam: True/False ; <score> / <threshold>` header
|
|
34
|
+
*
|
|
35
|
+
* @see Requirement 7.1
|
|
36
|
+
*/
|
|
37
|
+
class SpamAssassinClient {
|
|
38
|
+
host;
|
|
39
|
+
port;
|
|
40
|
+
timeoutMs;
|
|
41
|
+
constructor(host = 'localhost', port = 783, timeoutMs = 30_000) {
|
|
42
|
+
this.host = host;
|
|
43
|
+
this.port = port;
|
|
44
|
+
this.timeoutMs = timeoutMs;
|
|
45
|
+
}
|
|
46
|
+
async scan(rawMessage) {
|
|
47
|
+
return new Promise((resolve, reject) => {
|
|
48
|
+
const socket = net.createConnection({ host: this.host, port: this.port }, () => {
|
|
49
|
+
const request = `SYMBOLS SPAMC/1.5\r\n` +
|
|
50
|
+
`Content-length: ${rawMessage.length}\r\n` +
|
|
51
|
+
`\r\n`;
|
|
52
|
+
socket.write(request);
|
|
53
|
+
socket.write(rawMessage);
|
|
54
|
+
});
|
|
55
|
+
socket.setTimeout(this.timeoutMs);
|
|
56
|
+
const chunks = [];
|
|
57
|
+
socket.on('data', (chunk) => {
|
|
58
|
+
chunks.push(chunk);
|
|
59
|
+
});
|
|
60
|
+
socket.on('end', () => {
|
|
61
|
+
const response = Buffer.concat(chunks).toString('utf-8');
|
|
62
|
+
resolve(SpamAssassinClient.parseResponse(response));
|
|
63
|
+
});
|
|
64
|
+
socket.on('timeout', () => {
|
|
65
|
+
socket.destroy();
|
|
66
|
+
reject(new Error('SpamAssassin spamd connection timed out'));
|
|
67
|
+
});
|
|
68
|
+
socket.on('error', (err) => {
|
|
69
|
+
reject(new Error(`SpamAssassin spamd connection error: ${err.message}`));
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Parse the spamd response to extract score and spam determination.
|
|
75
|
+
*
|
|
76
|
+
* Expected header line format:
|
|
77
|
+
* `Spam: True ; 15.3 / 5.0`
|
|
78
|
+
* `Spam: False ; 1.2 / 5.0`
|
|
79
|
+
*/
|
|
80
|
+
static parseResponse(response) {
|
|
81
|
+
const spamMatch = response.match(/Spam:\s*(True|False|Yes|No)\s*;\s*([\d.]+)\s*\/\s*([\d.]+)/i);
|
|
82
|
+
if (!spamMatch) {
|
|
83
|
+
return {
|
|
84
|
+
score: 0,
|
|
85
|
+
isSpam: false,
|
|
86
|
+
details: 'Unable to parse spamd response',
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
const isSpam = spamMatch[1].toLowerCase() === 'true' ||
|
|
90
|
+
spamMatch[1].toLowerCase() === 'yes';
|
|
91
|
+
const score = parseFloat(spamMatch[2]);
|
|
92
|
+
// Extract rule matches from the body (lines after headers)
|
|
93
|
+
const bodyStart = response.indexOf('\r\n\r\n');
|
|
94
|
+
const details = bodyStart >= 0 ? response.substring(bodyStart + 4).trim() : undefined;
|
|
95
|
+
return { score, isSpam, details: details || undefined };
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
exports.SpamAssassinClient = SpamAssassinClient;
|
|
99
|
+
// ─── Rspamd Client ──────────────────────────────────────────────────────────
|
|
100
|
+
/**
|
|
101
|
+
* Rspamd engine client — communicates with rspamd via its HTTP API
|
|
102
|
+
* (default port 11333).
|
|
103
|
+
*
|
|
104
|
+
* Protocol overview:
|
|
105
|
+
* 1. POST raw message to `http://<host>:<port>/checkv2`
|
|
106
|
+
* 2. Parse JSON response for `score`, `is_spam`/`action`, and `symbols`
|
|
107
|
+
*
|
|
108
|
+
* @see Requirement 7.1
|
|
109
|
+
*/
|
|
110
|
+
class RspamdClient {
|
|
111
|
+
host;
|
|
112
|
+
port;
|
|
113
|
+
timeoutMs;
|
|
114
|
+
constructor(host = 'localhost', port = 11333, timeoutMs = 30_000) {
|
|
115
|
+
this.host = host;
|
|
116
|
+
this.port = port;
|
|
117
|
+
this.timeoutMs = timeoutMs;
|
|
118
|
+
}
|
|
119
|
+
async scan(rawMessage) {
|
|
120
|
+
return new Promise((resolve, reject) => {
|
|
121
|
+
const options = {
|
|
122
|
+
hostname: this.host,
|
|
123
|
+
port: this.port,
|
|
124
|
+
path: '/checkv2',
|
|
125
|
+
method: 'POST',
|
|
126
|
+
headers: {
|
|
127
|
+
'Content-Length': rawMessage.length,
|
|
128
|
+
},
|
|
129
|
+
timeout: this.timeoutMs,
|
|
130
|
+
};
|
|
131
|
+
const req = http.request(options, (res) => {
|
|
132
|
+
const chunks = [];
|
|
133
|
+
res.on('data', (chunk) => {
|
|
134
|
+
chunks.push(chunk);
|
|
135
|
+
});
|
|
136
|
+
res.on('end', () => {
|
|
137
|
+
const body = Buffer.concat(chunks).toString('utf-8');
|
|
138
|
+
try {
|
|
139
|
+
resolve(RspamdClient.parseResponse(body));
|
|
140
|
+
}
|
|
141
|
+
catch (err) {
|
|
142
|
+
reject(new Error(`Rspamd response parse error: ${err instanceof Error ? err.message : String(err)}`));
|
|
143
|
+
}
|
|
144
|
+
});
|
|
145
|
+
});
|
|
146
|
+
req.on('timeout', () => {
|
|
147
|
+
req.destroy();
|
|
148
|
+
reject(new Error('Rspamd HTTP connection timed out'));
|
|
149
|
+
});
|
|
150
|
+
req.on('error', (err) => {
|
|
151
|
+
reject(new Error(`Rspamd HTTP connection error: ${err.message}`));
|
|
152
|
+
});
|
|
153
|
+
req.write(rawMessage);
|
|
154
|
+
req.end();
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Parse the Rspamd JSON response.
|
|
159
|
+
*
|
|
160
|
+
* Expected JSON structure:
|
|
161
|
+
* ```json
|
|
162
|
+
* {
|
|
163
|
+
* "score": 15.3,
|
|
164
|
+
* "required_score": 15.0,
|
|
165
|
+
* "action": "reject" | "add header" | "no action" | ...,
|
|
166
|
+
* "symbols": { ... }
|
|
167
|
+
* }
|
|
168
|
+
* ```
|
|
169
|
+
*/
|
|
170
|
+
static parseResponse(body) {
|
|
171
|
+
let parsed;
|
|
172
|
+
try {
|
|
173
|
+
parsed = JSON.parse(body);
|
|
174
|
+
}
|
|
175
|
+
catch {
|
|
176
|
+
return {
|
|
177
|
+
score: 0,
|
|
178
|
+
isSpam: false,
|
|
179
|
+
details: 'Unable to parse Rspamd JSON response',
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
const score = typeof parsed['score'] === 'number' ? parsed['score'] : 0;
|
|
183
|
+
const action = typeof parsed['action'] === 'string' ? parsed['action'] : '';
|
|
184
|
+
// Rspamd actions: "reject", "rewrite subject", "add header",
|
|
185
|
+
// "greylist", "no action", "soft reject"
|
|
186
|
+
const isSpam = action === 'reject' || action === 'add header';
|
|
187
|
+
// Summarize matched symbols if available
|
|
188
|
+
let details;
|
|
189
|
+
if (parsed['symbols'] &&
|
|
190
|
+
typeof parsed['symbols'] === 'object' &&
|
|
191
|
+
parsed['symbols'] !== null) {
|
|
192
|
+
const symbolNames = Object.keys(parsed['symbols']);
|
|
193
|
+
if (symbolNames.length > 0) {
|
|
194
|
+
details = symbolNames.join(', ');
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
return { score, isSpam, details };
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
exports.RspamdClient = RspamdClient;
|
|
201
|
+
// ─── Anti-Spam Filter Implementation ────────────────────────────────────────
|
|
202
|
+
/**
|
|
203
|
+
* Milter integration adapter for SpamAssassin/Rspamd score classification.
|
|
204
|
+
*
|
|
205
|
+
* Wraps a configurable spam engine client and classifies messages based
|
|
206
|
+
* on `ISpamThresholds`:
|
|
207
|
+
* - score < probableSpamScore → Ham (accept)
|
|
208
|
+
* - probableSpamScore ≤ score < definiteSpamScore → ProbableSpam (tag metadata)
|
|
209
|
+
* - score ≥ definiteSpamScore → DefiniteSpam (reject 550)
|
|
210
|
+
*
|
|
211
|
+
* @see Requirements 7.1, 7.2, 7.3, 7.4, 7.5
|
|
212
|
+
*/
|
|
213
|
+
class AntiSpamFilter {
|
|
214
|
+
engineClient;
|
|
215
|
+
thresholds;
|
|
216
|
+
/**
|
|
217
|
+
* Create an AntiSpamFilter with the specified engine and thresholds.
|
|
218
|
+
*
|
|
219
|
+
* @param engine - Which spam engine to use: `'spamassassin'` or `'rspamd'`
|
|
220
|
+
* @param thresholds - Score thresholds for classification
|
|
221
|
+
* @param engineClient - Optional pre-configured engine client (for testing / DI)
|
|
222
|
+
* @param engineHost - Host for the spam engine (default: localhost)
|
|
223
|
+
* @param enginePort - Port for the spam engine (default: engine-specific)
|
|
224
|
+
*/
|
|
225
|
+
constructor(engine, thresholds, engineClient, engineHost, enginePort) {
|
|
226
|
+
this.thresholds = thresholds;
|
|
227
|
+
if (engineClient) {
|
|
228
|
+
this.engineClient = engineClient;
|
|
229
|
+
}
|
|
230
|
+
else if (engine === 'rspamd') {
|
|
231
|
+
this.engineClient = new RspamdClient(engineHost ?? 'localhost', enginePort ?? 11333);
|
|
232
|
+
}
|
|
233
|
+
else {
|
|
234
|
+
this.engineClient = new SpamAssassinClient(engineHost ?? 'localhost', enginePort ?? 783);
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* Classify a spam score against the configured thresholds.
|
|
239
|
+
*
|
|
240
|
+
* @param score - Numeric spam score from the engine
|
|
241
|
+
* @returns The spam classification
|
|
242
|
+
*
|
|
243
|
+
* @see Requirement 7.2
|
|
244
|
+
*/
|
|
245
|
+
classify(score) {
|
|
246
|
+
if (score >= this.thresholds.definiteSpamScore) {
|
|
247
|
+
return brightchain_lib_1.SpamClassification.DefiniteSpam;
|
|
248
|
+
}
|
|
249
|
+
if (score >= this.thresholds.probableSpamScore) {
|
|
250
|
+
return brightchain_lib_1.SpamClassification.ProbableSpam;
|
|
251
|
+
}
|
|
252
|
+
return brightchain_lib_1.SpamClassification.Ham;
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Scan a raw email message and return the spam classification result.
|
|
256
|
+
*
|
|
257
|
+
* Delegates to the configured spam engine client, then classifies
|
|
258
|
+
* the returned score against the configured thresholds.
|
|
259
|
+
*
|
|
260
|
+
* @param rawMessage - The raw RFC 5322 message bytes
|
|
261
|
+
* @returns Scan result with score, classification, and optional details
|
|
262
|
+
*
|
|
263
|
+
* @see Requirements 7.1, 7.2
|
|
264
|
+
*/
|
|
265
|
+
async scan(rawMessage) {
|
|
266
|
+
const engineResult = await this.engineClient.scan(rawMessage);
|
|
267
|
+
const classification = this.classify(engineResult.score);
|
|
268
|
+
return {
|
|
269
|
+
score: engineResult.score,
|
|
270
|
+
classification,
|
|
271
|
+
details: engineResult.details,
|
|
272
|
+
};
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* Scan a message and return the milter protocol response for Postfix.
|
|
276
|
+
*
|
|
277
|
+
* Maps classification to milter actions:
|
|
278
|
+
* - DefiniteSpam → reject (SMFIS_REJECT, 550)
|
|
279
|
+
* - ProbableSpam → continue with X-Spam-Flag / X-Spam-Score headers
|
|
280
|
+
* - Ham → accept
|
|
281
|
+
*
|
|
282
|
+
* @param rawMessage - The raw RFC 5322 message bytes
|
|
283
|
+
* @returns Milter response with action, optional reply code, and headers
|
|
284
|
+
*
|
|
285
|
+
* @see Requirements 7.3, 7.4, 7.5
|
|
286
|
+
*/
|
|
287
|
+
async milterCheck(rawMessage) {
|
|
288
|
+
const scanResult = await this.scan(rawMessage);
|
|
289
|
+
switch (scanResult.classification) {
|
|
290
|
+
case brightchain_lib_1.SpamClassification.DefiniteSpam:
|
|
291
|
+
// Req 7.3: reject at SMTP time with 550
|
|
292
|
+
return {
|
|
293
|
+
action: 'reject',
|
|
294
|
+
replyCode: 550,
|
|
295
|
+
replyText: '5.7.1 Message rejected as spam',
|
|
296
|
+
scanResult,
|
|
297
|
+
};
|
|
298
|
+
case brightchain_lib_1.SpamClassification.ProbableSpam:
|
|
299
|
+
// Req 7.4: accept and tag metadata with spam flag and score
|
|
300
|
+
return {
|
|
301
|
+
action: 'continue',
|
|
302
|
+
addHeaders: {
|
|
303
|
+
'X-Spam-Flag': 'YES',
|
|
304
|
+
'X-Spam-Score': scanResult.score.toFixed(2),
|
|
305
|
+
'X-Spam-Status': `Yes, score=${scanResult.score.toFixed(2)}${scanResult.details ? ` tests=${scanResult.details}` : ''}`,
|
|
306
|
+
},
|
|
307
|
+
scanResult,
|
|
308
|
+
};
|
|
309
|
+
case brightchain_lib_1.SpamClassification.Ham:
|
|
310
|
+
default:
|
|
311
|
+
// Ham: accept without modification
|
|
312
|
+
return {
|
|
313
|
+
action: 'accept',
|
|
314
|
+
addHeaders: {
|
|
315
|
+
'X-Spam-Flag': 'NO',
|
|
316
|
+
'X-Spam-Score': scanResult.score.toFixed(2),
|
|
317
|
+
'X-Spam-Status': `No, score=${scanResult.score.toFixed(2)}${scanResult.details ? ` tests=${scanResult.details}` : ''}`,
|
|
318
|
+
},
|
|
319
|
+
scanResult,
|
|
320
|
+
};
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
exports.AntiSpamFilter = AntiSpamFilter;
|
|
325
|
+
//# sourceMappingURL=antiSpamFilter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"antiSpamFilter.js","sourceRoot":"","sources":["../../../../../../brightchain-api-lib/src/lib/services/emailGateway/antiSpamFilter.ts"],"names":[],"mappings":"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"}
|