@casual-simulation/aux-records 3.4.6-alpha.14601027727 → 3.5.0-alpha.15117651144
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/AIController.js +835 -890
- package/AIController.js.map +1 -1
- package/AIHumeInterface.js +43 -54
- package/AIHumeInterface.js.map +1 -1
- package/AIOpenAIRealtimeInterface.js +60 -71
- package/AIOpenAIRealtimeInterface.js.map +1 -1
- package/AnthropicAIChatInterface.js +96 -142
- package/AnthropicAIChatInterface.js.map +1 -1
- package/AuthController.d.ts +3 -2
- package/AuthController.js +1907 -1933
- package/AuthController.js.map +1 -1
- package/AuthStore.d.ts +1 -10
- package/BlockadeLabsGenerateSkyboxInterface.js +57 -72
- package/BlockadeLabsGenerateSkyboxInterface.js.map +1 -1
- package/CachingConfigStore.js +30 -45
- package/CachingConfigStore.js.map +1 -1
- package/CachingPolicyStore.d.ts +8 -2
- package/CachingPolicyStore.js +108 -135
- package/CachingPolicyStore.js.map +1 -1
- package/ComIdConfig.d.ts +18 -18
- package/ComIdConfig.js.map +1 -1
- package/ConsoleAuthMessenger.js +7 -20
- package/ConsoleAuthMessenger.js.map +1 -1
- package/DataRecordsController.d.ts +2 -2
- package/DataRecordsController.js +369 -377
- package/DataRecordsController.js.map +1 -1
- package/DataRecordsStore.d.ts +1 -1
- package/DataRecordsStore.js +1 -1
- package/DataRecordsStore.js.map +1 -1
- package/EventRecordsController.js +226 -240
- package/EventRecordsController.js.map +1 -1
- package/FileRecordsController.d.ts +13 -2
- package/FileRecordsController.js +458 -450
- package/FileRecordsController.js.map +1 -1
- package/GoogleAIChatInterface.js +133 -179
- package/GoogleAIChatInterface.js.map +1 -1
- package/LivekitController.js +43 -54
- package/LivekitController.js.map +1 -1
- package/LoomController.js +64 -75
- package/LoomController.js.map +1 -1
- package/MemoryAuthMessenger.js +10 -23
- package/MemoryAuthMessenger.js.map +1 -1
- package/MemoryCache.js +18 -35
- package/MemoryCache.js.map +1 -1
- package/MemoryFileRecordsLookup.js +105 -125
- package/MemoryFileRecordsLookup.js.map +1 -1
- package/MemoryModerationJobProvider.js +17 -30
- package/MemoryModerationJobProvider.js.map +1 -1
- package/MemoryRateLimiter.js +12 -27
- package/MemoryRateLimiter.js.map +1 -1
- package/MemoryStore.d.ts +18 -6
- package/MemoryStore.js +1879 -1997
- package/MemoryStore.js.map +1 -1
- package/MetricsStore.d.ts +2 -2
- package/ModerationController.js +186 -200
- package/ModerationController.js.map +1 -1
- package/OpenAIChatInterface.js +105 -135
- package/OpenAIChatInterface.js.map +1 -1
- package/OpenAIImageInterface.js +57 -51
- package/OpenAIImageInterface.js.map +1 -1
- package/PolicyController.d.ts +150 -10
- package/PolicyController.js +1546 -1299
- package/PolicyController.js.map +1 -1
- package/PolicyStore.d.ts +110 -2
- package/PolicyStore.js +36 -1
- package/PolicyStore.js.map +1 -1
- package/PrivoClient.js +398 -435
- package/PrivoClient.js.map +1 -1
- package/RateLimitController.js +25 -36
- package/RateLimitController.js.map +1 -1
- package/RecordsClient.js +51 -74
- package/RecordsClient.js.map +1 -1
- package/RecordsController.d.ts +2 -42
- package/RecordsController.js +1026 -1182
- package/RecordsController.js.map +1 -1
- package/RecordsServer.d.ts +196 -27
- package/RecordsServer.js +1701 -1343
- package/RecordsServer.js.map +1 -1
- package/RecordsStore.d.ts +1 -10
- package/RecordsStore.js.map +1 -1
- package/ServerConfig.d.ts +339 -195
- package/ServerConfig.js +13 -0
- package/ServerConfig.js.map +1 -1
- package/SloydInterface.js +62 -75
- package/SloydInterface.js.map +1 -1
- package/StabilityAIImageInterface.js +150 -167
- package/StabilityAIImageInterface.js.map +1 -1
- package/SubscriptionConfigBuilder.d.ts +6 -1
- package/SubscriptionConfigBuilder.js +22 -0
- package/SubscriptionConfigBuilder.js.map +1 -1
- package/SubscriptionConfiguration.d.ts +266 -169
- package/SubscriptionConfiguration.js +101 -79
- package/SubscriptionConfiguration.js.map +1 -1
- package/SubscriptionController.d.ts +2 -1
- package/SubscriptionController.js +643 -650
- package/SubscriptionController.js.map +1 -1
- package/SystemNotificationMessenger.d.ts +21 -4
- package/SystemNotificationMessenger.js +36 -30
- package/SystemNotificationMessenger.js.map +1 -1
- package/TestUtils.d.ts +9 -1
- package/TestUtils.js +105 -129
- package/TestUtils.js.map +1 -1
- package/Utils.d.ts +2 -16
- package/Utils.js +21 -22
- package/Utils.js.map +1 -1
- package/crud/CrudHelpers.js +17 -26
- package/crud/CrudHelpers.js.map +1 -1
- package/crud/CrudRecordsController.d.ts +1 -1
- package/crud/CrudRecordsController.js +259 -267
- package/crud/CrudRecordsController.js.map +1 -1
- package/crud/CrudRecordsControllerTests.js +174 -185
- package/crud/CrudRecordsControllerTests.js.map +1 -1
- package/crud/CrudRecordsStore.d.ts +7 -3
- package/crud/MemoryCrudRecordsStore.d.ts +4 -4
- package/crud/MemoryCrudRecordsStore.js +98 -118
- package/crud/MemoryCrudRecordsStore.js.map +1 -1
- package/crud/sub/MemorySubCrudRecordsStore.d.ts +24 -0
- package/crud/sub/MemorySubCrudRecordsStore.js +146 -0
- package/crud/sub/MemorySubCrudRecordsStore.js.map +1 -0
- package/crud/sub/SubCrudRecordsController.d.ts +182 -0
- package/crud/sub/SubCrudRecordsController.js +360 -0
- package/crud/sub/SubCrudRecordsController.js.map +1 -0
- package/crud/sub/SubCrudRecordsControllerTests.d.ts +39 -0
- package/crud/sub/SubCrudRecordsControllerTests.js +821 -0
- package/crud/sub/SubCrudRecordsControllerTests.js.map +1 -0
- package/crud/sub/SubCrudRecordsStore.d.ts +95 -0
- package/{forms/index.js → crud/sub/SubCrudRecordsStore.js} +2 -2
- package/crud/sub/SubCrudRecordsStore.js.map +1 -0
- package/crud/sub/index.d.ts +3 -0
- package/crud/sub/index.js +20 -0
- package/{forms → crud/sub}/index.js.map +1 -1
- package/index.d.ts +1 -1
- package/index.js +1 -1
- package/index.js.map +1 -1
- package/notifications/MemoryNotificationRecordsStore.js +189 -198
- package/notifications/MemoryNotificationRecordsStore.js.map +1 -1
- package/notifications/NotificationRecordsController.js +438 -460
- package/notifications/NotificationRecordsController.js.map +1 -1
- package/notifications/NotificationRecordsStore.d.ts +2 -1
- package/notifications/WebPushInterface.d.ts +0 -1
- package/notifications/WebPushInterface.js +0 -1
- package/notifications/WebPushInterface.js.map +1 -1
- package/package.json +6 -6
- package/packages/MemoryPackageRecordsStore.d.ts +10 -0
- package/packages/MemoryPackageRecordsStore.js +38 -0
- package/packages/MemoryPackageRecordsStore.js.map +1 -0
- package/packages/PackageRecordsController.d.ts +26 -0
- package/packages/PackageRecordsController.js +49 -0
- package/packages/PackageRecordsController.js.map +1 -0
- package/packages/PackageRecordsStore.d.ts +32 -0
- package/packages/PackageRecordsStore.js +19 -0
- package/packages/PackageRecordsStore.js.map +1 -0
- package/packages/index.d.ts +4 -0
- package/packages/index.js +21 -0
- package/packages/index.js.map +1 -0
- package/packages/version/MemoryPackageVersionRecordsStore.d.ts +21 -0
- package/packages/version/MemoryPackageVersionRecordsStore.js +177 -0
- package/packages/version/MemoryPackageVersionRecordsStore.js.map +1 -0
- package/packages/version/PackageVersionRecordsController.d.ts +144 -0
- package/packages/version/PackageVersionRecordsController.js +656 -0
- package/packages/version/PackageVersionRecordsController.js.map +1 -0
- package/packages/version/PackageVersionRecordsStore.d.ts +342 -0
- package/packages/version/PackageVersionRecordsStore.js +126 -0
- package/packages/version/PackageVersionRecordsStore.js.map +1 -0
- package/packages/version/index.d.ts +4 -0
- package/packages/version/index.js +21 -0
- package/packages/version/index.js.map +1 -0
- package/tracing/TracingDecorators.js +31 -40
- package/tracing/TracingDecorators.js.map +1 -1
- package/webhooks/MemoryWebhookRecordsStore.js +56 -72
- package/webhooks/MemoryWebhookRecordsStore.js.map +1 -1
- package/webhooks/WebhookEnvironment.d.ts +3 -3
- package/webhooks/WebhookRecordsController.d.ts +2 -1
- package/webhooks/WebhookRecordsController.js +389 -382
- package/webhooks/WebhookRecordsController.js.map +1 -1
- package/webhooks/WebhookRecordsStore.d.ts +2 -1
- package/websockets/InstRecordsStore.d.ts +50 -0
- package/websockets/InstRecordsStore.js +17 -0
- package/websockets/InstRecordsStore.js.map +1 -1
- package/websockets/MemoryTempInstRecordsStore.d.ts +5 -0
- package/websockets/MemoryTempInstRecordsStore.js +168 -179
- package/websockets/MemoryTempInstRecordsStore.js.map +1 -1
- package/websockets/MemoryWebsocketConnectionStore.js +98 -135
- package/websockets/MemoryWebsocketConnectionStore.js.map +1 -1
- package/websockets/MemoryWebsocketMessenger.js +29 -48
- package/websockets/MemoryWebsocketMessenger.js.map +1 -1
- package/websockets/SplitInstRecordsStore.d.ts +4 -1
- package/websockets/SplitInstRecordsStore.js +167 -185
- package/websockets/SplitInstRecordsStore.js.map +1 -1
- package/websockets/TemporaryInstRecordsStore.d.ts +19 -1
- package/websockets/TemporaryInstRecordsStore.js +17 -0
- package/websockets/TemporaryInstRecordsStore.js.map +1 -1
- package/websockets/WebsocketController.d.ts +147 -3
- package/websockets/WebsocketController.js +1735 -1391
- package/websockets/WebsocketController.js.map +1 -1
- package/websockets/index.d.ts +0 -1
- package/websockets/index.js +0 -1
- package/websockets/index.js.map +1 -1
- package/AAGUID.d.ts +0 -11
- package/AAGUID.js +0 -116
- package/AAGUID.js.map +0 -1
- package/AuthUtils.d.ts +0 -162
- package/AuthUtils.js +0 -327
- package/AuthUtils.js.map +0 -1
- package/forms/FormError.d.ts +0 -43
- package/forms/FormError.js +0 -56
- package/forms/FormError.js.map +0 -1
- package/forms/index.d.ts +0 -2
- package/websockets/Utils.d.ts +0 -33
- package/websockets/Utils.js +0 -82
- package/websockets/Utils.js.map +0 -1
package/ModerationController.js
CHANGED
|
@@ -4,15 +4,6 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
4
4
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
5
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
6
|
};
|
|
7
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
8
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
9
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
10
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
11
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
12
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
13
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
14
|
-
});
|
|
15
|
-
};
|
|
16
7
|
import { v4 as uuid } from 'uuid';
|
|
17
8
|
import { traced } from './tracing/TracingDecorators';
|
|
18
9
|
import { SpanStatusCode, trace } from '@opentelemetry/api';
|
|
@@ -31,231 +22,226 @@ export class ModerationController {
|
|
|
31
22
|
* Reports the given inst for a terms of service violation.
|
|
32
23
|
* @param request The request.
|
|
33
24
|
*/
|
|
34
|
-
reportInst(request) {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
if (!config) {
|
|
39
|
-
return {
|
|
40
|
-
success: false,
|
|
41
|
-
errorCode: 'not_supported',
|
|
42
|
-
errorMessage: 'This operation is not supported.',
|
|
43
|
-
};
|
|
44
|
-
}
|
|
45
|
-
if (!config.allowUnauthenticatedReports &&
|
|
46
|
-
!request.reportingUserId) {
|
|
47
|
-
return {
|
|
48
|
-
success: false,
|
|
49
|
-
errorCode: 'not_logged_in',
|
|
50
|
-
errorMessage: 'The user must be logged in to report an inst.',
|
|
51
|
-
};
|
|
52
|
-
}
|
|
53
|
-
const id = uuid();
|
|
54
|
-
const now = Date.now();
|
|
55
|
-
const userInstReport = {
|
|
56
|
-
id: id,
|
|
57
|
-
createdAtMs: now,
|
|
58
|
-
updatedAtMs: now,
|
|
59
|
-
recordName: request.recordName,
|
|
60
|
-
inst: request.inst,
|
|
61
|
-
reportingUserId: request.reportingUserId,
|
|
62
|
-
reportingIpAddress: request.reportingIpAddress,
|
|
63
|
-
automaticReport: request.automaticReport,
|
|
64
|
-
reportReasonText: request.reportReasonText,
|
|
65
|
-
reportReason: request.reportReason,
|
|
66
|
-
reportedUrl: request.reportedUrl,
|
|
67
|
-
reportedPermalink: request.reportedPermalink,
|
|
68
|
-
};
|
|
69
|
-
yield this._store.saveUserInstReport(userInstReport);
|
|
70
|
-
if (this._messenger) {
|
|
71
|
-
yield this._messenger.sendRecordNotification({
|
|
72
|
-
timeMs: now,
|
|
73
|
-
resource: 'user_inst_report',
|
|
74
|
-
action: 'created',
|
|
75
|
-
recordName: request.recordName,
|
|
76
|
-
resourceId: request.inst,
|
|
77
|
-
report: userInstReport,
|
|
78
|
-
});
|
|
79
|
-
}
|
|
25
|
+
async reportInst(request) {
|
|
26
|
+
try {
|
|
27
|
+
const config = await this._config.getModerationConfig();
|
|
28
|
+
if (!config) {
|
|
80
29
|
return {
|
|
81
|
-
success:
|
|
82
|
-
|
|
30
|
+
success: false,
|
|
31
|
+
errorCode: 'not_supported',
|
|
32
|
+
errorMessage: 'This operation is not supported.',
|
|
83
33
|
};
|
|
84
34
|
}
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
span === null || span === void 0 ? void 0 : span.recordException(err);
|
|
88
|
-
span === null || span === void 0 ? void 0 : span.setStatus({ code: SpanStatusCode.ERROR });
|
|
89
|
-
console.error('[ModerationController] Failed to report inst:', err);
|
|
35
|
+
if (!config.allowUnauthenticatedReports &&
|
|
36
|
+
!request.reportingUserId) {
|
|
90
37
|
return {
|
|
91
38
|
success: false,
|
|
92
|
-
errorCode: '
|
|
93
|
-
errorMessage: '
|
|
39
|
+
errorCode: 'not_logged_in',
|
|
40
|
+
errorMessage: 'The user must be logged in to report an inst.',
|
|
94
41
|
};
|
|
95
42
|
}
|
|
96
|
-
|
|
43
|
+
const id = uuid();
|
|
44
|
+
const now = Date.now();
|
|
45
|
+
const userInstReport = {
|
|
46
|
+
id: id,
|
|
47
|
+
createdAtMs: now,
|
|
48
|
+
updatedAtMs: now,
|
|
49
|
+
recordName: request.recordName,
|
|
50
|
+
inst: request.inst,
|
|
51
|
+
reportingUserId: request.reportingUserId,
|
|
52
|
+
reportingIpAddress: request.reportingIpAddress,
|
|
53
|
+
automaticReport: request.automaticReport,
|
|
54
|
+
reportReasonText: request.reportReasonText,
|
|
55
|
+
reportReason: request.reportReason,
|
|
56
|
+
reportedUrl: request.reportedUrl,
|
|
57
|
+
reportedPermalink: request.reportedPermalink,
|
|
58
|
+
};
|
|
59
|
+
await this._store.saveUserInstReport(userInstReport);
|
|
60
|
+
if (this._messenger) {
|
|
61
|
+
await this._messenger.sendRecordNotification({
|
|
62
|
+
timeMs: now,
|
|
63
|
+
resource: 'user_inst_report',
|
|
64
|
+
action: 'created',
|
|
65
|
+
recordName: request.recordName,
|
|
66
|
+
resourceId: request.inst,
|
|
67
|
+
report: userInstReport,
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
return {
|
|
71
|
+
success: true,
|
|
72
|
+
id: id,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
catch (err) {
|
|
76
|
+
const span = trace.getActiveSpan();
|
|
77
|
+
span === null || span === void 0 ? void 0 : span.recordException(err);
|
|
78
|
+
span === null || span === void 0 ? void 0 : span.setStatus({ code: SpanStatusCode.ERROR });
|
|
79
|
+
console.error('[ModerationController] Failed to report inst:', err);
|
|
80
|
+
return {
|
|
81
|
+
success: false,
|
|
82
|
+
errorCode: 'server_error',
|
|
83
|
+
errorMessage: 'A server error occurred.',
|
|
84
|
+
};
|
|
85
|
+
}
|
|
97
86
|
}
|
|
98
87
|
/**
|
|
99
88
|
* Schedules a job to scan for moderation issues.
|
|
100
89
|
*/
|
|
101
|
-
scheduleModerationScans() {
|
|
90
|
+
async scheduleModerationScans() {
|
|
102
91
|
var _a, _b;
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
console.warn('[ModerationController] No job provider available to schedule moderation scans.');
|
|
107
|
-
return {
|
|
108
|
-
success: false,
|
|
109
|
-
errorCode: 'not_supported',
|
|
110
|
-
errorMessage: 'This operation is not supported.',
|
|
111
|
-
};
|
|
112
|
-
}
|
|
113
|
-
const config = yield this._config.getModerationConfig();
|
|
114
|
-
if (!config) {
|
|
115
|
-
return {
|
|
116
|
-
success: false,
|
|
117
|
-
errorCode: 'not_supported',
|
|
118
|
-
errorMessage: 'This operation is not supported.',
|
|
119
|
-
};
|
|
120
|
-
}
|
|
121
|
-
const jobs = [];
|
|
122
|
-
if ((_b = (_a = config.jobs) === null || _a === void 0 ? void 0 : _a.files) === null || _b === void 0 ? void 0 : _b.enabled) {
|
|
123
|
-
console.log('[ModerationController] Starting file moderation job...');
|
|
124
|
-
let filter = {};
|
|
125
|
-
if (config.jobs.files.fileExtensions) {
|
|
126
|
-
filter.fileExtensions =
|
|
127
|
-
config.jobs.files.fileExtensions.slice();
|
|
128
|
-
}
|
|
129
|
-
const lastFileJob = yield this._store.findMostRecentJobOfType('files');
|
|
130
|
-
if (lastFileJob) {
|
|
131
|
-
filter.uploadedAfterMs = lastFileJob.createdAtMs;
|
|
132
|
-
}
|
|
133
|
-
const job = yield this._jobProvider.startFilesJob(filter);
|
|
134
|
-
yield this._store.addModerationJob(job);
|
|
135
|
-
jobs.push(job);
|
|
136
|
-
console.log('[ModerationController] File moderation job started:', job);
|
|
137
|
-
}
|
|
92
|
+
try {
|
|
93
|
+
if (!this._jobProvider) {
|
|
94
|
+
console.warn('[ModerationController] No job provider available to schedule moderation scans.');
|
|
138
95
|
return {
|
|
139
|
-
success:
|
|
140
|
-
|
|
96
|
+
success: false,
|
|
97
|
+
errorCode: 'not_supported',
|
|
98
|
+
errorMessage: 'This operation is not supported.',
|
|
141
99
|
};
|
|
142
100
|
}
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
span === null || span === void 0 ? void 0 : span.recordException(err);
|
|
146
|
-
span === null || span === void 0 ? void 0 : span.setStatus({ code: SpanStatusCode.ERROR });
|
|
147
|
-
console.error('[ModerationController] Failed to start moderation jobs:', err);
|
|
101
|
+
const config = await this._config.getModerationConfig();
|
|
102
|
+
if (!config) {
|
|
148
103
|
return {
|
|
149
104
|
success: false,
|
|
150
|
-
errorCode: '
|
|
151
|
-
errorMessage: '
|
|
105
|
+
errorCode: 'not_supported',
|
|
106
|
+
errorMessage: 'This operation is not supported.',
|
|
152
107
|
};
|
|
153
108
|
}
|
|
154
|
-
|
|
109
|
+
const jobs = [];
|
|
110
|
+
if ((_b = (_a = config.jobs) === null || _a === void 0 ? void 0 : _a.files) === null || _b === void 0 ? void 0 : _b.enabled) {
|
|
111
|
+
console.log('[ModerationController] Starting file moderation job...');
|
|
112
|
+
let filter = {};
|
|
113
|
+
if (config.jobs.files.fileExtensions) {
|
|
114
|
+
filter.fileExtensions =
|
|
115
|
+
config.jobs.files.fileExtensions.slice();
|
|
116
|
+
}
|
|
117
|
+
const lastFileJob = await this._store.findMostRecentJobOfType('files');
|
|
118
|
+
if (lastFileJob) {
|
|
119
|
+
filter.uploadedAfterMs = lastFileJob.createdAtMs;
|
|
120
|
+
}
|
|
121
|
+
const job = await this._jobProvider.startFilesJob(filter);
|
|
122
|
+
await this._store.addModerationJob(job);
|
|
123
|
+
jobs.push(job);
|
|
124
|
+
console.log('[ModerationController] File moderation job started:', job);
|
|
125
|
+
}
|
|
126
|
+
return {
|
|
127
|
+
success: true,
|
|
128
|
+
jobs,
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
catch (err) {
|
|
132
|
+
const span = trace.getActiveSpan();
|
|
133
|
+
span === null || span === void 0 ? void 0 : span.recordException(err);
|
|
134
|
+
span === null || span === void 0 ? void 0 : span.setStatus({ code: SpanStatusCode.ERROR });
|
|
135
|
+
console.error('[ModerationController] Failed to start moderation jobs:', err);
|
|
136
|
+
return {
|
|
137
|
+
success: false,
|
|
138
|
+
errorCode: 'server_error',
|
|
139
|
+
errorMessage: 'A server error occurred.',
|
|
140
|
+
};
|
|
141
|
+
}
|
|
155
142
|
}
|
|
156
143
|
/**
|
|
157
144
|
* Scans the given file for moderation labels.
|
|
158
145
|
* @param request The request.
|
|
159
146
|
*/
|
|
160
|
-
scanFile(request) {
|
|
147
|
+
async scanFile(request) {
|
|
161
148
|
var _a, _b, _c;
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
149
|
+
try {
|
|
150
|
+
if (!this._jobProvider) {
|
|
151
|
+
console.warn('[ModerationController] No job provider available to scan files.');
|
|
152
|
+
return {
|
|
153
|
+
success: false,
|
|
154
|
+
errorCode: 'not_supported',
|
|
155
|
+
errorMessage: 'This operation is not supported.',
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
const config = await this._config.getModerationConfig();
|
|
159
|
+
if (!config) {
|
|
160
|
+
return {
|
|
161
|
+
success: false,
|
|
162
|
+
errorCode: 'not_supported',
|
|
163
|
+
errorMessage: 'This operation is not supported.',
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
if (!((_b = (_a = config.jobs) === null || _a === void 0 ? void 0 : _a.files) === null || _b === void 0 ? void 0 : _b.enabled)) {
|
|
167
|
+
return {
|
|
168
|
+
success: false,
|
|
169
|
+
errorCode: 'not_supported',
|
|
170
|
+
errorMessage: 'This operation is not supported.',
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
if (config.jobs.files.fileExtensions) {
|
|
174
|
+
if (config.jobs.files.fileExtensions.every((ext) => !request.fileName.endsWith(ext))) {
|
|
181
175
|
return {
|
|
182
176
|
success: false,
|
|
183
177
|
errorCode: 'not_supported',
|
|
184
|
-
errorMessage: '
|
|
178
|
+
errorMessage: 'The file extension is not supported.',
|
|
185
179
|
};
|
|
186
180
|
}
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
181
|
+
}
|
|
182
|
+
const createdAtMs = Date.now();
|
|
183
|
+
const scan = await this._jobProvider.scanFile({
|
|
184
|
+
recordName: request.recordName,
|
|
185
|
+
fileName: request.fileName,
|
|
186
|
+
minConfidence: config.jobs.files.minConfidence,
|
|
187
|
+
});
|
|
188
|
+
const resultId = uuid();
|
|
189
|
+
let bannedLabel = null;
|
|
190
|
+
for (let label of config.jobs.files.bannedLabels) {
|
|
191
|
+
if (label.label) {
|
|
192
|
+
bannedLabel = scan.labels.find((l) => l.name.localeCompare(label.label, undefined, {
|
|
193
|
+
sensitivity: 'base',
|
|
194
|
+
}) === 0 && l.confidence >= label.threshold);
|
|
195
195
|
}
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
yield this._messenger.sendRecordNotification({
|
|
214
|
-
resource: 'file',
|
|
215
|
-
action: 'scanned',
|
|
216
|
-
recordName: request.recordName,
|
|
217
|
-
resourceId: request.fileName,
|
|
218
|
-
resultId,
|
|
219
|
-
labels: scan.labels,
|
|
220
|
-
timeMs: createdAtMs,
|
|
221
|
-
bannedLabel,
|
|
222
|
-
message: `Banned label (${bannedLabel.category
|
|
223
|
-
? bannedLabel.category + ':'
|
|
224
|
-
: ''}${(_c = bannedLabel.name) !== null && _c !== void 0 ? _c : ''}) detected in file (${request.recordName}/${request.fileName}).`,
|
|
225
|
-
});
|
|
226
|
-
}
|
|
227
|
-
break;
|
|
196
|
+
if (bannedLabel) {
|
|
197
|
+
console.log(`[ModerationController] Banned label (${bannedLabel.name}) detected in file: ${request.fileName}`);
|
|
198
|
+
if (label.actions.includes('notify') && this._messenger) {
|
|
199
|
+
await this._messenger.sendRecordNotification({
|
|
200
|
+
resource: 'moderation_scan',
|
|
201
|
+
resourceKind: 'file',
|
|
202
|
+
action: 'scanned',
|
|
203
|
+
recordName: request.recordName,
|
|
204
|
+
resourceId: request.fileName,
|
|
205
|
+
resultId,
|
|
206
|
+
labels: scan.labels,
|
|
207
|
+
timeMs: createdAtMs,
|
|
208
|
+
bannedLabel,
|
|
209
|
+
message: `Banned label (${bannedLabel.category
|
|
210
|
+
? bannedLabel.category + ':'
|
|
211
|
+
: ''}${(_c = bannedLabel.name) !== null && _c !== void 0 ? _c : ''}) detected in file (${request.recordName}/${request.fileName}).`,
|
|
212
|
+
});
|
|
228
213
|
}
|
|
214
|
+
break;
|
|
229
215
|
}
|
|
230
|
-
const result = {
|
|
231
|
-
id: resultId,
|
|
232
|
-
recordName: request.recordName,
|
|
233
|
-
fileName: request.fileName,
|
|
234
|
-
jobId: request.jobId,
|
|
235
|
-
labels: scan.labels,
|
|
236
|
-
modelVersion: scan.modelVersion,
|
|
237
|
-
createdAtMs,
|
|
238
|
-
updatedAtMs: Date.now(),
|
|
239
|
-
appearsToMatchBannedContent: !!bannedLabel,
|
|
240
|
-
};
|
|
241
|
-
this._store.addFileModerationResult(result);
|
|
242
|
-
return {
|
|
243
|
-
success: true,
|
|
244
|
-
result,
|
|
245
|
-
};
|
|
246
|
-
}
|
|
247
|
-
catch (err) {
|
|
248
|
-
const span = trace.getActiveSpan();
|
|
249
|
-
span === null || span === void 0 ? void 0 : span.recordException(err);
|
|
250
|
-
span === null || span === void 0 ? void 0 : span.setStatus({ code: SpanStatusCode.ERROR });
|
|
251
|
-
console.error('[ModerationController] Failed to scan file:', err);
|
|
252
|
-
return {
|
|
253
|
-
success: false,
|
|
254
|
-
errorCode: 'server_error',
|
|
255
|
-
errorMessage: 'A server error occurred.',
|
|
256
|
-
};
|
|
257
216
|
}
|
|
258
|
-
|
|
217
|
+
const result = {
|
|
218
|
+
id: resultId,
|
|
219
|
+
recordName: request.recordName,
|
|
220
|
+
fileName: request.fileName,
|
|
221
|
+
jobId: request.jobId,
|
|
222
|
+
labels: scan.labels,
|
|
223
|
+
modelVersion: scan.modelVersion,
|
|
224
|
+
createdAtMs,
|
|
225
|
+
updatedAtMs: Date.now(),
|
|
226
|
+
appearsToMatchBannedContent: !!bannedLabel,
|
|
227
|
+
};
|
|
228
|
+
this._store.addFileModerationResult(result);
|
|
229
|
+
return {
|
|
230
|
+
success: true,
|
|
231
|
+
result,
|
|
232
|
+
};
|
|
233
|
+
}
|
|
234
|
+
catch (err) {
|
|
235
|
+
const span = trace.getActiveSpan();
|
|
236
|
+
span === null || span === void 0 ? void 0 : span.recordException(err);
|
|
237
|
+
span === null || span === void 0 ? void 0 : span.setStatus({ code: SpanStatusCode.ERROR });
|
|
238
|
+
console.error('[ModerationController] Failed to scan file:', err);
|
|
239
|
+
return {
|
|
240
|
+
success: false,
|
|
241
|
+
errorCode: 'server_error',
|
|
242
|
+
errorMessage: 'A server error occurred.',
|
|
243
|
+
};
|
|
244
|
+
}
|
|
259
245
|
}
|
|
260
246
|
}
|
|
261
247
|
__decorate([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ModerationController.js","sourceRoot":"","sources":["ModerationController.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ModerationController.js","sourceRoot":"","sources":["ModerationController.ts"],"names":[],"mappings":"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"}
|