@zhin.js/plugin-content-moderation 1.0.13 → 1.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/engine.d.ts +0 -8
- package/lib/engine.d.ts.map +1 -1
- package/lib/engine.js +0 -23
- package/lib/engine.js.map +1 -1
- package/lib/index.d.ts +2 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +2 -1
- package/lib/index.js.map +1 -1
- package/lib/runtime.d.ts +3 -0
- package/lib/runtime.d.ts.map +1 -0
- package/lib/runtime.js +3 -0
- package/lib/runtime.js.map +1 -0
- package/middlewares/{inbound.js → inbound/index.js} +3 -2
- package/middlewares/{inbound.ts → inbound/index.ts} +3 -3
- package/middlewares/{outbound.js → outbound/index.js} +3 -2
- package/middlewares/{outbound.ts → outbound/index.ts} +3 -3
- package/package.json +6 -6
- package/plugin.js +3 -2
- package/src/engine.ts +0 -33
- package/src/index.ts +1 -2
- package/src/runtime.ts +7 -0
package/lib/engine.d.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { type Logger } from '@zhin.js/logger';
|
|
2
|
-
import { type Dispose, type GenerationStoreContext } from 'zhin.js';
|
|
3
2
|
import { type ExtractedContent } from './extract.js';
|
|
4
3
|
import type { ModerationProvider } from './providers/types.js';
|
|
5
4
|
import { type Action, type Direction, type MergedResult, type ModerationConfig, type ProviderResult, type ScanInput, type Severity } from './types.js';
|
|
@@ -36,11 +35,4 @@ export declare class ModerationEngine {
|
|
|
36
35
|
}): Promise<ApplyResult>;
|
|
37
36
|
}
|
|
38
37
|
export declare function mergeResults(results: readonly ProviderResult[]): MergedResult;
|
|
39
|
-
/**
|
|
40
|
-
* Generation-owned engine binding:plugin setup 提供已配置的引擎,
|
|
41
|
-
* generation lifecycle dispose 时自动摘除(不留跨代际悬挂引用)。
|
|
42
|
-
*/
|
|
43
|
-
export declare function provideModerationEngine(context: GenerationStoreContext, engine: ModerationEngine): Dispose;
|
|
44
|
-
export declare function getModerationEngine(): ModerationEngine;
|
|
45
|
-
export declare function resetModerationEngine(): void;
|
|
46
38
|
//# sourceMappingURL=engine.d.ts.map
|
package/lib/engine.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,KAAK,MAAM,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,KAAK,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAExE,OAAO,EAAgB,KAAK,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAGnE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAEL,KAAK,MAAM,EACX,KAAK,SAAS,EACd,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,SAAS,EACd,KAAK,QAAQ,EACd,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IACzC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACrD,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,OAAO,CAAC;CACrC;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;CACpC;AAED,qBAAa,gBAAgB;;gBAOf,OAAO,GAAE;QACnB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;KAC1B;IAMN,IAAI,MAAM,IAAI,gBAAgB,CAE7B;IAED,SAAS,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI;IAQ7B,0EAA0E;IAC1E,mBAAmB,CAAC,SAAS,EAAE,SAAS,kBAAkB,EAAE,GAAG,IAAI;IAI7D,IAAI,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC;IA4B7C,KAAK,CAAC,OAAO,EAAE;QACnB,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;QAC9B,QAAQ,CAAC,SAAS,EAAE,gBAAgB,CAAC;QACrC,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;QAC9B,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;KAC5B,GAAG,OAAO,CAAC,WAAW,CAAC;CA+EzB;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,SAAS,cAAc,EAAE,GAAG,YAAY,CAmB7E"}
|
package/lib/engine.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { formatCompact, getLogger } from '@zhin.js/logger';
|
|
2
|
-
import { createGenerationStore, } from 'zhin.js';
|
|
3
2
|
import { resolveModerationConfig } from './config.js';
|
|
4
3
|
import { mergeMatches } from './extract.js';
|
|
5
4
|
import { redactOutboundPayload } from './redact.js';
|
|
@@ -159,26 +158,4 @@ function shouldStop(direction, actions) {
|
|
|
159
158
|
}
|
|
160
159
|
return false;
|
|
161
160
|
}
|
|
162
|
-
const moderationEngineStore = createGenerationStore('content-moderation/engine');
|
|
163
|
-
let fallbackEngine = null;
|
|
164
|
-
/**
|
|
165
|
-
* Generation-owned engine binding:plugin setup 提供已配置的引擎,
|
|
166
|
-
* generation lifecycle dispose 时自动摘除(不留跨代际悬挂引用)。
|
|
167
|
-
*/
|
|
168
|
-
export function provideModerationEngine(context, engine) {
|
|
169
|
-
return moderationEngineStore.provide(context, engine);
|
|
170
|
-
}
|
|
171
|
-
export function getModerationEngine() {
|
|
172
|
-
const provided = moderationEngineStore.tryUse();
|
|
173
|
-
if (provided)
|
|
174
|
-
return provided;
|
|
175
|
-
// 脱离 Plugin Runtime 的调用(单测 / 独立脚本)走兜底实例。
|
|
176
|
-
if (!fallbackEngine)
|
|
177
|
-
fallbackEngine = new ModerationEngine();
|
|
178
|
-
return fallbackEngine;
|
|
179
|
-
}
|
|
180
|
-
export function resetModerationEngine() {
|
|
181
|
-
moderationEngineStore.clear();
|
|
182
|
-
fallbackEngine = null;
|
|
183
|
-
}
|
|
184
161
|
//# sourceMappingURL=engine.js.map
|
package/lib/engine.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,SAAS,EAAe,MAAM,iBAAiB,CAAC;AACxE,OAAO,
|
|
1
|
+
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"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"}
|
package/lib/index.d.ts
CHANGED
|
@@ -2,7 +2,8 @@ export { DEFAULT_ACTIONS, DEFAULT_MODERATION_CONFIG, resolveModerationConfig, }
|
|
|
2
2
|
export { shouldBypassInbound, shouldBypassOutbound, } from './bypass.js';
|
|
3
3
|
export { extractFromOutboundPayload, extractFromTextAndSegments, buildScanContext, } from './extract.js';
|
|
4
4
|
export { redactText, redactOutboundPayload, } from './redact.js';
|
|
5
|
-
export { ModerationEngine,
|
|
5
|
+
export { ModerationEngine, mergeResults, } from './engine.js';
|
|
6
|
+
export { moderationEngineToken } from './runtime.js';
|
|
6
7
|
export type { Severity, Action, OnErrorPolicy, Direction, ModerationConfig, ProviderResult, MergedResult, ScanInput, SourceConfig, } from './types.js';
|
|
7
8
|
export { maxSeverity, SEVERITY_RANK } from './types.js';
|
|
8
9
|
export { LocalLexiconProvider, findMatches, findGradedMatches, loadWords, loadLexiconEntries, parseWordFile, parseWordLine, } from './providers/local-lexicon.js';
|
package/lib/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,yBAAyB,EACzB,uBAAuB,GACxB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,0BAA0B,EAC1B,0BAA0B,EAC1B,gBAAgB,GACjB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,UAAU,EACV,qBAAqB,GACtB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,gBAAgB,EAChB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,yBAAyB,EACzB,uBAAuB,GACxB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,0BAA0B,EAC1B,0BAA0B,EAC1B,gBAAgB,GACjB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,UAAU,EACV,qBAAqB,GACtB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,gBAAgB,EAChB,YAAY,GACb,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACrD,YAAY,EACV,QAAQ,EACR,MAAM,EACN,aAAa,EACb,SAAS,EACT,gBAAgB,EAChB,cAAc,EACd,YAAY,EACZ,SAAS,EACT,YAAY,GACb,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,EACL,oBAAoB,EACpB,WAAW,EACX,iBAAiB,EACjB,SAAS,EACT,kBAAkB,EAClB,aAAa,EACb,aAAa,GACd,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACtF,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACpF,OAAO,EAAE,sBAAsB,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC/F,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC"}
|
package/lib/index.js
CHANGED
|
@@ -2,7 +2,8 @@ export { DEFAULT_ACTIONS, DEFAULT_MODERATION_CONFIG, resolveModerationConfig, }
|
|
|
2
2
|
export { shouldBypassInbound, shouldBypassOutbound, } from './bypass.js';
|
|
3
3
|
export { extractFromOutboundPayload, extractFromTextAndSegments, buildScanContext, } from './extract.js';
|
|
4
4
|
export { redactText, redactOutboundPayload, } from './redact.js';
|
|
5
|
-
export { ModerationEngine,
|
|
5
|
+
export { ModerationEngine, mergeResults, } from './engine.js';
|
|
6
|
+
export { moderationEngineToken } from './runtime.js';
|
|
6
7
|
export { maxSeverity, SEVERITY_RANK } from './types.js';
|
|
7
8
|
export { LocalLexiconProvider, findMatches, findGradedMatches, loadWords, loadLexiconEntries, parseWordFile, parseWordLine, } from './providers/local-lexicon.js';
|
|
8
9
|
export { BUILTIN_LEXICON, mergeLexiconEntries } from './providers/builtin-lexicon.js';
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,yBAAyB,EACzB,uBAAuB,GACxB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,0BAA0B,EAC1B,0BAA0B,EAC1B,gBAAgB,GACjB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,UAAU,EACV,qBAAqB,GACtB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,gBAAgB,EAChB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,yBAAyB,EACzB,uBAAuB,GACxB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,0BAA0B,EAC1B,0BAA0B,EAC1B,gBAAgB,GACjB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,UAAU,EACV,qBAAqB,GACtB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,gBAAgB,EAChB,YAAY,GACb,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAYrD,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,EACL,oBAAoB,EACpB,WAAW,EACX,iBAAiB,EACjB,SAAS,EACT,kBAAkB,EAClB,aAAa,EACb,aAAa,GACd,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAEtF,OAAO,EAAE,sBAAsB,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC/F,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC"}
|
package/lib/runtime.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD,eAAO,MAAM,qBAAqB,2CAGjC,CAAC"}
|
package/lib/runtime.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAGtC,MAAM,CAAC,MAAM,qBAAqB,GAAG,WAAW,CAC9C,gCAAgC,EAChC,wCAAwC,CACzC,CAAC"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
// Generated by build-plugin-runtime-entries.mjs. Do not edit.
|
|
2
2
|
import { defineMiddleware } from 'zhin.js/middleware';
|
|
3
3
|
import { outboundHostToken } from 'zhin.js';
|
|
4
|
-
import { buildScanContext, extractFromTextAndSegments,
|
|
4
|
+
import { buildScanContext, extractFromTextAndSegments, resolveModerationConfig, shouldBypassInbound, } from "../../lib/index.js";
|
|
5
|
+
import { moderationEngineToken } from "../../lib/runtime.js";
|
|
5
6
|
/**
|
|
6
7
|
* Inbound content moderation.
|
|
7
8
|
* - order -100: run early before commands / other middleware
|
|
@@ -31,7 +32,7 @@ export default defineMiddleware({
|
|
|
31
32
|
}
|
|
32
33
|
// 引擎由 plugin setup 按 generation 配置一次(configure 含 provider 重建与
|
|
33
34
|
// 词库 readFileSync,不能留在每条消息的热路径);这里只做判定。
|
|
34
|
-
const engine =
|
|
35
|
+
const engine = context.use(moderationEngineToken);
|
|
35
36
|
const extracted = extractFromTextAndSegments(message.content, message.segments);
|
|
36
37
|
if (!extracted.text && extracted.images.length === 0) {
|
|
37
38
|
await next();
|
|
@@ -4,11 +4,11 @@ import { outboundHostToken } from 'zhin.js';
|
|
|
4
4
|
import {
|
|
5
5
|
buildScanContext,
|
|
6
6
|
extractFromTextAndSegments,
|
|
7
|
-
getModerationEngine,
|
|
8
7
|
resolveModerationConfig,
|
|
9
8
|
shouldBypassInbound,
|
|
10
9
|
type ModerationConfig,
|
|
11
|
-
} from '
|
|
10
|
+
} from '../../src/index.js';
|
|
11
|
+
import { moderationEngineToken } from '../../src/runtime.js';
|
|
12
12
|
|
|
13
13
|
/**
|
|
14
14
|
* Inbound content moderation.
|
|
@@ -42,7 +42,7 @@ export default defineMiddleware<Message, ModerationConfig>({
|
|
|
42
42
|
|
|
43
43
|
// 引擎由 plugin setup 按 generation 配置一次(configure 含 provider 重建与
|
|
44
44
|
// 词库 readFileSync,不能留在每条消息的热路径);这里只做判定。
|
|
45
|
-
const engine =
|
|
45
|
+
const engine = context.use(moderationEngineToken);
|
|
46
46
|
|
|
47
47
|
const extracted = extractFromTextAndSegments(message.content, message.segments);
|
|
48
48
|
if (!extracted.text && extracted.images.length === 0) {
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
// Generated by build-plugin-runtime-entries.mjs. Do not edit.
|
|
2
2
|
import { defineMiddleware } from 'zhin.js/middleware';
|
|
3
|
-
import { buildScanContext, extractFromOutboundPayload,
|
|
3
|
+
import { buildScanContext, extractFromOutboundPayload, resolveModerationConfig, shouldBypassOutbound, } from "../../lib/index.js";
|
|
4
|
+
import { moderationEngineToken } from "../../lib/runtime.js";
|
|
4
5
|
/**
|
|
5
6
|
* Outbound content moderation.
|
|
6
7
|
* - redact uses envelope.replace()
|
|
@@ -18,7 +19,7 @@ export default defineMiddleware({
|
|
|
18
19
|
}
|
|
19
20
|
const envelope = context.input;
|
|
20
21
|
// 引擎由 plugin setup 按 generation 配置一次;这里只做判定。
|
|
21
|
-
const engine =
|
|
22
|
+
const engine = context.use(moderationEngineToken);
|
|
22
23
|
const extracted = extractFromOutboundPayload(envelope.payload);
|
|
23
24
|
if (!extracted.text && extracted.images.length === 0) {
|
|
24
25
|
await next();
|
|
@@ -3,11 +3,11 @@ import type { OutboundEnvelope } from '@zhin.js/core/runtime';
|
|
|
3
3
|
import {
|
|
4
4
|
buildScanContext,
|
|
5
5
|
extractFromOutboundPayload,
|
|
6
|
-
getModerationEngine,
|
|
7
6
|
resolveModerationConfig,
|
|
8
7
|
shouldBypassOutbound,
|
|
9
8
|
type ModerationConfig,
|
|
10
|
-
} from '
|
|
9
|
+
} from '../../src/index.js';
|
|
10
|
+
import { moderationEngineToken } from '../../src/runtime.js';
|
|
11
11
|
|
|
12
12
|
/**
|
|
13
13
|
* Outbound content moderation.
|
|
@@ -27,7 +27,7 @@ export default defineMiddleware<OutboundEnvelope, ModerationConfig>({
|
|
|
27
27
|
|
|
28
28
|
const envelope = context.input;
|
|
29
29
|
// 引擎由 plugin setup 按 generation 配置一次;这里只做判定。
|
|
30
|
-
const engine =
|
|
30
|
+
const engine = context.use(moderationEngineToken);
|
|
31
31
|
|
|
32
32
|
const extracted = extractFromOutboundPayload(envelope.payload);
|
|
33
33
|
if (!extracted.text && extracted.images.length === 0) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zhin.js/plugin-content-moderation",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.1.2",
|
|
4
4
|
"description": "Content moderation plugin for Zhin.js — inbound/outbound multi-source scanning (Plugin Runtime)",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./lib/index.js",
|
|
@@ -38,13 +38,13 @@
|
|
|
38
38
|
},
|
|
39
39
|
"license": "MIT",
|
|
40
40
|
"dependencies": {
|
|
41
|
-
"@zhin.js/core": "1.
|
|
42
|
-
"@zhin.js/logger": "1.
|
|
41
|
+
"@zhin.js/core": "1.1.37",
|
|
42
|
+
"@zhin.js/logger": "1.1.1"
|
|
43
43
|
},
|
|
44
44
|
"devDependencies": {
|
|
45
45
|
"typescript": "^6.0.3",
|
|
46
46
|
"vitest": "^4.1.10",
|
|
47
|
-
"zhin.js": "
|
|
47
|
+
"zhin.js": "1.1.2"
|
|
48
48
|
},
|
|
49
49
|
"repository": {
|
|
50
50
|
"type": "git",
|
|
@@ -73,8 +73,8 @@
|
|
|
73
73
|
"plugins": []
|
|
74
74
|
},
|
|
75
75
|
"peerDependencies": {
|
|
76
|
-
"@zhin.js/middleware": "1.
|
|
77
|
-
"zhin.js": "
|
|
76
|
+
"@zhin.js/middleware": "^1.1.1",
|
|
77
|
+
"zhin.js": "^1.1.2"
|
|
78
78
|
},
|
|
79
79
|
"peerDependenciesMeta": {
|
|
80
80
|
"@zhin.js/middleware": {
|
package/plugin.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
// Generated by build-plugin-runtime-entries.mjs. Do not edit.
|
|
2
2
|
import { definePlugin } from 'zhin.js';
|
|
3
|
-
import { ModerationEngine
|
|
3
|
+
import { ModerationEngine } from "./lib/engine.js";
|
|
4
|
+
import { moderationEngineToken } from "./lib/runtime.js";
|
|
4
5
|
export default definePlugin({
|
|
5
6
|
name: 'content-moderation',
|
|
6
7
|
metadata: {
|
|
@@ -12,6 +13,6 @@ export default definePlugin({
|
|
|
12
13
|
// provide 自动挂 lifecycle 反注册,代际结束即摘除。
|
|
13
14
|
const engine = new ModerationEngine();
|
|
14
15
|
engine.configure(context.config.get());
|
|
15
|
-
|
|
16
|
+
context.resources.provide(moderationEngineToken, engine);
|
|
16
17
|
},
|
|
17
18
|
});
|
package/src/engine.ts
CHANGED
|
@@ -1,9 +1,4 @@
|
|
|
1
1
|
import { formatCompact, getLogger, type Logger } from '@zhin.js/logger';
|
|
2
|
-
import {
|
|
3
|
-
createGenerationStore,
|
|
4
|
-
type Dispose,
|
|
5
|
-
type GenerationStoreContext,
|
|
6
|
-
} from 'zhin.js';
|
|
7
2
|
import { resolveModerationConfig } from './config.js';
|
|
8
3
|
import { mergeMatches, type ExtractedContent } from './extract.js';
|
|
9
4
|
import { redactOutboundPayload } from './redact.js';
|
|
@@ -212,31 +207,3 @@ function shouldStop(direction: Direction, actions: ReadonlySet<Action>): boolean
|
|
|
212
207
|
}
|
|
213
208
|
return false;
|
|
214
209
|
}
|
|
215
|
-
|
|
216
|
-
const moderationEngineStore = createGenerationStore<ModerationEngine>('content-moderation/engine');
|
|
217
|
-
|
|
218
|
-
let fallbackEngine: ModerationEngine | null = null;
|
|
219
|
-
|
|
220
|
-
/**
|
|
221
|
-
* Generation-owned engine binding:plugin setup 提供已配置的引擎,
|
|
222
|
-
* generation lifecycle dispose 时自动摘除(不留跨代际悬挂引用)。
|
|
223
|
-
*/
|
|
224
|
-
export function provideModerationEngine(
|
|
225
|
-
context: GenerationStoreContext,
|
|
226
|
-
engine: ModerationEngine,
|
|
227
|
-
): Dispose {
|
|
228
|
-
return moderationEngineStore.provide(context, engine);
|
|
229
|
-
}
|
|
230
|
-
|
|
231
|
-
export function getModerationEngine(): ModerationEngine {
|
|
232
|
-
const provided = moderationEngineStore.tryUse();
|
|
233
|
-
if (provided) return provided;
|
|
234
|
-
// 脱离 Plugin Runtime 的调用(单测 / 独立脚本)走兜底实例。
|
|
235
|
-
if (!fallbackEngine) fallbackEngine = new ModerationEngine();
|
|
236
|
-
return fallbackEngine;
|
|
237
|
-
}
|
|
238
|
-
|
|
239
|
-
export function resetModerationEngine(): void {
|
|
240
|
-
moderationEngineStore.clear();
|
|
241
|
-
fallbackEngine = null;
|
|
242
|
-
}
|
package/src/index.ts
CHANGED
|
@@ -18,10 +18,9 @@ export {
|
|
|
18
18
|
} from './redact.js';
|
|
19
19
|
export {
|
|
20
20
|
ModerationEngine,
|
|
21
|
-
getModerationEngine,
|
|
22
|
-
resetModerationEngine,
|
|
23
21
|
mergeResults,
|
|
24
22
|
} from './engine.js';
|
|
23
|
+
export { moderationEngineToken } from './runtime.js';
|
|
25
24
|
export type {
|
|
26
25
|
Severity,
|
|
27
26
|
Action,
|
package/src/runtime.ts
ADDED