@proofhound/core 0.1.13 → 0.1.15
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/server/channels/mcp/dataset-import.tools.d.ts.map +1 -1
- package/dist/server/channels/mcp/dataset-import.tools.js +54 -5
- package/dist/server/channels/mcp/dataset-import.tools.js.map +1 -1
- package/dist/server/common/contracts/object-storage.provider.d.ts +2 -0
- package/dist/server/common/contracts/object-storage.provider.d.ts.map +1 -1
- package/dist/server/common/contracts/object-storage.provider.js +4 -0
- package/dist/server/common/contracts/object-storage.provider.js.map +1 -1
- package/dist/server/common/contracts/quota-policy.hook.d.ts +1 -1
- package/dist/server/common/contracts/quota-policy.hook.d.ts.map +1 -1
- package/dist/server/common/contracts/quota-policy.hook.js.map +1 -1
- package/dist/server/infrastructure/orchestration/bullmq.module.js +1 -1
- package/dist/server/infrastructure/orchestration/bullmq.module.js.map +1 -1
- package/dist/server/infrastructure/orchestration/bullmq.service.d.ts +4 -2
- package/dist/server/infrastructure/orchestration/bullmq.service.d.ts.map +1 -1
- package/dist/server/infrastructure/orchestration/bullmq.service.js +9 -2
- package/dist/server/infrastructure/orchestration/bullmq.service.js.map +1 -1
- package/dist/server/modules/dataset/dataset-import-raw-parser.d.ts +9 -0
- package/dist/server/modules/dataset/dataset-import-raw-parser.d.ts.map +1 -0
- package/dist/server/modules/dataset/dataset-import-raw-parser.js +344 -0
- package/dist/server/modules/dataset/dataset-import-raw-parser.js.map +1 -0
- package/dist/server/modules/dataset/dataset-import.controller.d.ts +140 -37
- package/dist/server/modules/dataset/dataset-import.controller.d.ts.map +1 -1
- package/dist/server/modules/dataset/dataset-import.controller.js +39 -0
- package/dist/server/modules/dataset/dataset-import.controller.js.map +1 -1
- package/dist/server/modules/dataset/dataset-import.repository.d.ts +29 -2
- package/dist/server/modules/dataset/dataset-import.repository.d.ts.map +1 -1
- package/dist/server/modules/dataset/dataset-import.repository.js +88 -6
- package/dist/server/modules/dataset/dataset-import.repository.js.map +1 -1
- package/dist/server/modules/dataset/dataset-import.service.d.ts +20 -5
- package/dist/server/modules/dataset/dataset-import.service.d.ts.map +1 -1
- package/dist/server/modules/dataset/dataset-import.service.js +268 -41
- package/dist/server/modules/dataset/dataset-import.service.js.map +1 -1
- package/dist/server/modules/dataset/dataset.module.d.ts.map +1 -1
- package/dist/server/modules/dataset/dataset.module.js +2 -1
- package/dist/server/modules/dataset/dataset.module.js.map +1 -1
- package/dist/server/modules/dataset/dataset.repository.d.ts +7 -3
- package/dist/server/modules/dataset/dataset.repository.d.ts.map +1 -1
- package/dist/server/modules/dataset/dataset.repository.js +127 -8
- package/dist/server/modules/dataset/dataset.repository.js.map +1 -1
- package/dist/server/modules/dataset/dataset.service.d.ts +3 -0
- package/dist/server/modules/dataset/dataset.service.d.ts.map +1 -1
- package/dist/server/modules/dataset/dataset.service.js +31 -7
- package/dist/server/modules/dataset/dataset.service.js.map +1 -1
- package/dist/worker/consumers/dataset-raw-import.consumer.d.ts +18 -0
- package/dist/worker/consumers/dataset-raw-import.consumer.d.ts.map +1 -0
- package/dist/worker/consumers/dataset-raw-import.consumer.js +52 -0
- package/dist/worker/consumers/dataset-raw-import.consumer.js.map +1 -0
- package/dist/worker/proofhound-worker.module.d.ts.map +1 -1
- package/dist/worker/proofhound-worker.module.js +10 -2
- package/dist/worker/proofhound-worker.module.js.map +1 -1
- package/dist/worker/runners/dataset-raw-import-runner.d.ts +25 -0
- package/dist/worker/runners/dataset-raw-import-runner.d.ts.map +1 -0
- package/dist/worker/runners/dataset-raw-import-runner.js +238 -0
- package/dist/worker/runners/dataset-raw-import-runner.js.map +1 -0
- package/package.json +14 -12
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { type OnModuleDestroy, type OnModuleInit } from '@nestjs/common';
|
|
2
|
-
import type { CompleteDatasetImportResponseDto, CreateDatasetImportDto, DatasetImportBatchDto, DatasetImportBatchResponseDto,
|
|
2
|
+
import type { CompleteDatasetImportResponseDto, CreateDatasetImportDto, CreateRawDatasetImportDto, CreateRawDatasetImportResponseDto, DatasetImportBatchDto, DatasetImportBatchResponseDto, DatasetRawImportCapabilitiesDto, DatasetImportStatusDto } from '@proofhound/shared';
|
|
3
3
|
import { AccessControlService } from '../../common/contracts/access-control.service';
|
|
4
|
+
import { ObjectStorageProvider } from '../../common/contracts/object-storage.provider';
|
|
4
5
|
import { QuotaPolicyHook } from '../../common/contracts/quota-policy.hook';
|
|
5
6
|
import type { CurrentUserPayload } from '../../common/decorators/current-user.decorator';
|
|
7
|
+
import { BullmqService } from '../../infrastructure/orchestration';
|
|
6
8
|
import { DatasetImportRepository } from './dataset-import.repository';
|
|
7
9
|
import { DatasetService } from './dataset.service';
|
|
8
10
|
export declare class DatasetImportService implements OnModuleInit, OnModuleDestroy {
|
|
@@ -10,27 +12,40 @@ export declare class DatasetImportService implements OnModuleInit, OnModuleDestr
|
|
|
10
12
|
private readonly datasetService;
|
|
11
13
|
private readonly accessControl;
|
|
12
14
|
private readonly quotaPolicy;
|
|
15
|
+
private readonly storage;
|
|
16
|
+
private readonly bullmq;
|
|
13
17
|
private readonly logger;
|
|
14
18
|
private sweepTimer;
|
|
15
19
|
private sweeping;
|
|
16
|
-
constructor(repo: DatasetImportRepository, datasetService: DatasetService, accessControl: AccessControlService, quotaPolicy: QuotaPolicyHook);
|
|
20
|
+
constructor(repo: DatasetImportRepository, datasetService: DatasetService, accessControl: AccessControlService, quotaPolicy: QuotaPolicyHook, storage: ObjectStorageProvider, bullmq: BullmqService);
|
|
17
21
|
onModuleInit(): void;
|
|
18
22
|
onModuleDestroy(): void;
|
|
19
|
-
createImport(projectId: string, dto: CreateDatasetImportDto, actor: CurrentUserPayload): Promise<
|
|
23
|
+
createImport(projectId: string, dto: CreateDatasetImportDto, actor: CurrentUserPayload): Promise<DatasetImportStatusDto>;
|
|
24
|
+
getRawImportCapabilities(projectId: string, actor: CurrentUserPayload): Promise<DatasetRawImportCapabilitiesDto>;
|
|
25
|
+
createRawImport(projectId: string, dto: CreateRawDatasetImportDto, actor: CurrentUserPayload): Promise<CreateRawDatasetImportResponseDto>;
|
|
20
26
|
appendBatch(projectId: string, importId: string, dto: DatasetImportBatchDto, actor: CurrentUserPayload): Promise<DatasetImportBatchResponseDto>;
|
|
21
27
|
complete(projectId: string, importId: string, actor: CurrentUserPayload): Promise<CompleteDatasetImportResponseDto>;
|
|
28
|
+
completeRawUpload(projectId: string, importId: string, actor: CurrentUserPayload): Promise<DatasetImportStatusDto>;
|
|
22
29
|
abort(projectId: string, importId: string, actor: CurrentUserPayload): Promise<void>;
|
|
23
|
-
getImport(projectId: string, importId: string, actor: CurrentUserPayload): Promise<
|
|
30
|
+
getImport(projectId: string, importId: string, actor: CurrentUserPayload): Promise<DatasetImportStatusDto>;
|
|
24
31
|
sweepStaleImports(): Promise<void>;
|
|
25
32
|
private getAccessibleProject;
|
|
26
33
|
private getWritableProject;
|
|
27
|
-
private
|
|
34
|
+
private requireImport;
|
|
35
|
+
private requireImportState;
|
|
28
36
|
private assertConsistentMappings;
|
|
29
37
|
private toFieldMappings;
|
|
30
38
|
private externalIdFieldName;
|
|
31
39
|
private getExternalId;
|
|
40
|
+
private completeStagedImport;
|
|
41
|
+
private assertRawObjectWithinLimit;
|
|
42
|
+
private assertUploadSizeWithinLimit;
|
|
43
|
+
private cleanupRawImportResources;
|
|
44
|
+
private cleanupRawObjectRef;
|
|
45
|
+
private getRawObjectName;
|
|
32
46
|
private toImportItem;
|
|
33
47
|
private getSweepIntervalMs;
|
|
34
48
|
private getStaleTimeoutMs;
|
|
49
|
+
private getRawUploadMaxBytes;
|
|
35
50
|
}
|
|
36
51
|
//# sourceMappingURL=dataset-import.service.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dataset-import.service.d.ts","sourceRoot":"","sources":["../../../../src/server/modules/dataset/dataset-import.service.ts"],"names":[],"mappings":"AAEA,OAAO,
|
|
1
|
+
{"version":3,"file":"dataset-import.service.d.ts","sourceRoot":"","sources":["../../../../src/server/modules/dataset/dataset-import.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,7 +16,9 @@ const common_1 = require("@nestjs/common");
|
|
|
16
16
|
const logger_1 = require("@proofhound/logger");
|
|
17
17
|
const access_control_1 = require("../../common/access-control");
|
|
18
18
|
const access_control_service_1 = require("../../common/contracts/access-control.service");
|
|
19
|
+
const object_storage_provider_1 = require("../../common/contracts/object-storage.provider");
|
|
19
20
|
const quota_policy_hook_1 = require("../../common/contracts/quota-policy.hook");
|
|
21
|
+
const orchestration_1 = require("../../infrastructure/orchestration");
|
|
20
22
|
const dataset_field_schema_util_1 = require("./dataset-field-schema.util");
|
|
21
23
|
const dataset_import_repository_1 = require("./dataset-import.repository");
|
|
22
24
|
const dataset_service_1 = require("./dataset.service");
|
|
@@ -25,12 +27,17 @@ const DEFAULT_SWEEP_INTERVAL_MS = 60_000;
|
|
|
25
27
|
const DEFAULT_STALE_TIMEOUT_MS = 120_000;
|
|
26
28
|
const MIN_TICK_MS = 1_000;
|
|
27
29
|
const IMAGE_ROLES = new Set(['image', 'image_url', 'image_base64']);
|
|
30
|
+
const DEFAULT_DATASET_RAW_UPLOAD_MAX_BYTES = 2 * 1024 * 1024 * 1024;
|
|
31
|
+
const DEFAULT_RAW_UPLOAD_EXPIRES_IN_SECONDS = 60 * 60;
|
|
32
|
+
const RAW_IMPORT_JOB_ID_PREFIX = 'dataset-raw-import';
|
|
28
33
|
let DatasetImportService = class DatasetImportService {
|
|
29
|
-
constructor(repo, datasetService, accessControl, quotaPolicy) {
|
|
34
|
+
constructor(repo, datasetService, accessControl, quotaPolicy, storage, bullmq) {
|
|
30
35
|
this.repo = repo;
|
|
31
36
|
this.datasetService = datasetService;
|
|
32
37
|
this.accessControl = accessControl;
|
|
33
38
|
this.quotaPolicy = quotaPolicy;
|
|
39
|
+
this.storage = storage;
|
|
40
|
+
this.bullmq = bullmq;
|
|
34
41
|
this.logger = (0, logger_1.createLogger)('dataset-import.service', { service: 'server' });
|
|
35
42
|
this.sweepTimer = null;
|
|
36
43
|
this.sweeping = false;
|
|
@@ -48,6 +55,7 @@ let DatasetImportService = class DatasetImportService {
|
|
|
48
55
|
async createImport(projectId, dto, actor) {
|
|
49
56
|
await this.getWritableProject(projectId, actor);
|
|
50
57
|
this.assertConsistentMappings(dto);
|
|
58
|
+
this.assertUploadSizeWithinLimit(dto.sourceFile.fileSizeBytes);
|
|
51
59
|
if (await this.repo.isDatasetNameTaken(projectId, dto.name)) {
|
|
52
60
|
throw new common_1.ConflictException('dataset_name_taken');
|
|
53
61
|
}
|
|
@@ -57,12 +65,68 @@ let DatasetImportService = class DatasetImportService {
|
|
|
57
65
|
project: { projectId, source: 'local' },
|
|
58
66
|
source: 'dataset_import',
|
|
59
67
|
});
|
|
60
|
-
const row = await this.repo.createImport({ projectId, actorUserId: actor.sub, dto });
|
|
68
|
+
const row = await this.repo.createImport({ projectId, actorUserId: actor.sub, dto, initialStatus: 'uploading' });
|
|
61
69
|
return this.toImportItem(row);
|
|
62
70
|
}
|
|
71
|
+
async getRawImportCapabilities(projectId, actor) {
|
|
72
|
+
await this.getAccessibleProject(projectId, actor);
|
|
73
|
+
return {
|
|
74
|
+
supported: this.storage.isEnabled() && this.storage.supportsClientUploadSessions(),
|
|
75
|
+
maxBytes: this.getRawUploadMaxBytes(),
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
async createRawImport(projectId, dto, actor) {
|
|
79
|
+
await this.getWritableProject(projectId, actor);
|
|
80
|
+
this.assertConsistentMappings(dto);
|
|
81
|
+
this.assertUploadSizeWithinLimit(dto.sourceFile.fileSizeBytes);
|
|
82
|
+
if (await this.repo.isDatasetNameTaken(projectId, dto.name)) {
|
|
83
|
+
throw new common_1.ConflictException('dataset_name_taken');
|
|
84
|
+
}
|
|
85
|
+
if (!this.storage.isEnabled() || !this.storage.supportsClientUploadSessions()) {
|
|
86
|
+
throw new common_1.ServiceUnavailableException('dataset_raw_upload_unavailable');
|
|
87
|
+
}
|
|
88
|
+
await this.quotaPolicy.assertCanStore({
|
|
89
|
+
actor: (0, access_control_1.toActorContext)(actor),
|
|
90
|
+
bytes: nonnegativeInteger(dto.sourceFile.fileSizeBytes),
|
|
91
|
+
project: { projectId, source: 'local' },
|
|
92
|
+
source: 'dataset_raw_import',
|
|
93
|
+
});
|
|
94
|
+
const importId = (0, node_crypto_1.randomUUID)();
|
|
95
|
+
const uploadSession = await this.storage.createUploadSession({
|
|
96
|
+
project: { projectId, source: 'local' },
|
|
97
|
+
resourceType: 'dataset_raw',
|
|
98
|
+
resourceId: importId,
|
|
99
|
+
name: this.getRawObjectName(dto),
|
|
100
|
+
}, {
|
|
101
|
+
contentType: dto.sourceFile.contentType,
|
|
102
|
+
maxBytes: Math.min(dto.sourceFile.fileSizeBytes, this.getRawUploadMaxBytes()),
|
|
103
|
+
expiresInSeconds: DEFAULT_RAW_UPLOAD_EXPIRES_IN_SECONDS,
|
|
104
|
+
});
|
|
105
|
+
if (!uploadSession) {
|
|
106
|
+
throw new common_1.ServiceUnavailableException('dataset_raw_upload_unavailable');
|
|
107
|
+
}
|
|
108
|
+
try {
|
|
109
|
+
const row = await this.repo.createImport({
|
|
110
|
+
importId,
|
|
111
|
+
projectId,
|
|
112
|
+
actorUserId: actor.sub,
|
|
113
|
+
dto,
|
|
114
|
+
importMode: 'raw_object',
|
|
115
|
+
rawUploadSession: { sessionId: uploadSession.sessionId, expiresAt: uploadSession.expiresAt },
|
|
116
|
+
});
|
|
117
|
+
return { import: this.toImportItem(row), uploadSession, maxBytes: this.getRawUploadMaxBytes() };
|
|
118
|
+
}
|
|
119
|
+
catch (error) {
|
|
120
|
+
await this.storage.abortUpload(uploadSession.sessionId).catch(() => undefined);
|
|
121
|
+
throw error;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
63
124
|
async appendBatch(projectId, importId, dto, actor) {
|
|
64
125
|
await this.getWritableProject(projectId, actor);
|
|
65
|
-
const session = await this.
|
|
126
|
+
const session = await this.requireImportState(projectId, importId, ['uploading', 'importing']);
|
|
127
|
+
if (session.importMode !== 'batch') {
|
|
128
|
+
throw new common_1.ConflictException('dataset_import_batch_not_allowed');
|
|
129
|
+
}
|
|
66
130
|
// Reject gaps so the committed staging rows always form a contiguous [0, receivedRows) prefix.
|
|
67
131
|
if (dto.batchStartIndex > session.receivedRows) {
|
|
68
132
|
throw new common_1.BadRequestException({ message: 'dataset_import_batch_gap', receivedRows: session.receivedRows });
|
|
@@ -84,45 +148,84 @@ let DatasetImportService = class DatasetImportService {
|
|
|
84
148
|
}
|
|
85
149
|
async complete(projectId, importId, actor) {
|
|
86
150
|
await this.getWritableProject(projectId, actor);
|
|
87
|
-
const session = await this.
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
151
|
+
const session = await this.requireImport(projectId, importId);
|
|
152
|
+
if (session.importMode === 'batch') {
|
|
153
|
+
return this.completeStagedImport(projectId, session, actor);
|
|
154
|
+
}
|
|
155
|
+
if (['queued', 'parsing', 'importing', 'completed', 'failed', 'aborted'].includes(session.status)) {
|
|
156
|
+
return this.toImportItem(session);
|
|
157
|
+
}
|
|
158
|
+
if (session.status !== 'uploaded') {
|
|
159
|
+
throw new common_1.ConflictException('dataset_raw_upload_not_completed');
|
|
160
|
+
}
|
|
161
|
+
await this.quotaPolicy.assertCanStore({
|
|
162
|
+
actor: (0, access_control_1.toActorContext)(actor),
|
|
163
|
+
bytes: nonnegativeInteger(session.fileSizeBytes),
|
|
164
|
+
project: { projectId, source: 'local' },
|
|
165
|
+
source: 'dataset_import_complete',
|
|
166
|
+
});
|
|
167
|
+
const jobId = `${RAW_IMPORT_JOB_ID_PREFIX}:${importId}`;
|
|
168
|
+
const queued = await this.repo.markQueued(projectId, importId, jobId);
|
|
169
|
+
if (!queued)
|
|
170
|
+
throw new common_1.ConflictException('dataset_import_not_uploaded');
|
|
92
171
|
try {
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
172
|
+
await this.bullmq.enqueueDatasetRawImportJob({ projectId, importId, actorId: actor.sub }, jobId);
|
|
173
|
+
}
|
|
174
|
+
catch (error) {
|
|
175
|
+
await this.repo.markFailed(projectId, importId, 'dataset_import_enqueue_failed', error.message);
|
|
176
|
+
throw error;
|
|
177
|
+
}
|
|
178
|
+
this.logger.info({ importId, jobId }, 'dataset_raw_import_queued');
|
|
179
|
+
return this.toImportItem(queued);
|
|
180
|
+
}
|
|
181
|
+
async completeRawUpload(projectId, importId, actor) {
|
|
182
|
+
await this.getWritableProject(projectId, actor);
|
|
183
|
+
const session = await this.requireImport(projectId, importId);
|
|
184
|
+
if (session.importMode !== 'raw_object')
|
|
185
|
+
throw new common_1.ConflictException('dataset_raw_upload_not_allowed');
|
|
186
|
+
if (['uploaded', 'queued', 'parsing', 'importing', 'completed'].includes(session.status)) {
|
|
187
|
+
return this.toImportItem(session);
|
|
188
|
+
}
|
|
189
|
+
if (session.status !== 'created' && session.status !== 'uploading') {
|
|
190
|
+
throw new common_1.ConflictException('dataset_import_not_uploading');
|
|
191
|
+
}
|
|
192
|
+
if (!session.rawUploadSessionId)
|
|
193
|
+
throw new common_1.BadRequestException('dataset_raw_upload_missing_session');
|
|
194
|
+
let finalizedRef = null;
|
|
195
|
+
try {
|
|
196
|
+
const ref = await this.storage.completeUpload({
|
|
197
|
+
sessionId: session.rawUploadSessionId,
|
|
198
|
+
actor: (0, access_control_1.toActorContext)(actor),
|
|
199
|
+
project: { projectId, source: 'local' },
|
|
102
200
|
});
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
201
|
+
finalizedRef = ref;
|
|
202
|
+
this.assertRawObjectWithinLimit(ref);
|
|
203
|
+
await this.quotaPolicy.assertCanStore({
|
|
204
|
+
actor: (0, access_control_1.toActorContext)(actor),
|
|
205
|
+
bytes: nonnegativeInteger(ref.bytes),
|
|
206
|
+
project: { projectId, source: 'local' },
|
|
207
|
+
source: 'dataset_raw_import',
|
|
110
208
|
});
|
|
111
|
-
this.
|
|
112
|
-
|
|
209
|
+
const row = await this.repo.markRawUploadCompleted(projectId, importId, ref);
|
|
210
|
+
if (!row)
|
|
211
|
+
throw new common_1.ConflictException('dataset_import_not_uploading');
|
|
212
|
+
this.logger.info({ importId, bytes: ref.bytes }, 'dataset_raw_upload_completed');
|
|
213
|
+
return this.toImportItem(row);
|
|
113
214
|
}
|
|
114
215
|
catch (error) {
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
if (error instanceof dataset_import_repository_1.DatasetNameTakenError)
|
|
118
|
-
throw new common_1.ConflictException('dataset_name_taken');
|
|
216
|
+
await this.repo.markFailed(projectId, importId, 'dataset_raw_upload_complete_failed', error.message);
|
|
217
|
+
await this.cleanupRawImportResources(finalizedRef ? { ...session, rawObjectRef: finalizedRef } : session);
|
|
119
218
|
throw error;
|
|
120
219
|
}
|
|
121
220
|
}
|
|
122
|
-
// Cancel an in-progress import
|
|
221
|
+
// Cancel an in-progress import. Staging rows are cleared and raw transfer resources are removed best-effort.
|
|
123
222
|
async abort(projectId, importId, actor) {
|
|
124
223
|
await this.getWritableProject(projectId, actor);
|
|
125
|
-
await this.repo.
|
|
224
|
+
const row = await this.repo.findImportById(projectId, importId);
|
|
225
|
+
if (!row || row.status === 'completed')
|
|
226
|
+
return;
|
|
227
|
+
const aborted = await this.repo.markAborted(projectId, importId);
|
|
228
|
+
await this.cleanupRawImportResources(aborted ?? row);
|
|
126
229
|
}
|
|
127
230
|
async getImport(projectId, importId, actor) {
|
|
128
231
|
await this.getAccessibleProject(projectId, actor);
|
|
@@ -138,11 +241,16 @@ let DatasetImportService = class DatasetImportService {
|
|
|
138
241
|
this.sweeping = true;
|
|
139
242
|
try {
|
|
140
243
|
const threshold = new Date(Date.now() - this.getStaleTimeoutMs());
|
|
141
|
-
const
|
|
142
|
-
|
|
244
|
+
const staleImports = await this.repo.findStaleImports(threshold);
|
|
245
|
+
const ids = staleImports.map((row) => row.id);
|
|
246
|
+
if (ids.length === 0) {
|
|
247
|
+
await this.storage.sweepPendingUploads(threshold.toISOString()).catch(() => undefined);
|
|
143
248
|
return;
|
|
144
|
-
|
|
145
|
-
|
|
249
|
+
}
|
|
250
|
+
await Promise.all(staleImports.map((row) => this.repo.markAborted(row.projectId, row.id)));
|
|
251
|
+
await Promise.all(staleImports.map((row) => this.cleanupRawImportResources(row)));
|
|
252
|
+
const pendingUploads = await this.storage.sweepPendingUploads(threshold.toISOString()).catch(() => 0);
|
|
253
|
+
this.logger.info({ aborted: ids.length, pendingUploads }, 'dataset_import_sweep_reaped');
|
|
146
254
|
}
|
|
147
255
|
catch (error) {
|
|
148
256
|
this.logger.error({ error: error.message }, 'dataset_import_sweep_failed');
|
|
@@ -161,12 +269,17 @@ let DatasetImportService = class DatasetImportService {
|
|
|
161
269
|
await this.accessControl.assertCan((0, access_control_1.toActorContext)(actor), { projectId, source: 'local' }, 'project_write');
|
|
162
270
|
await this.getAccessibleProject(projectId, actor);
|
|
163
271
|
}
|
|
164
|
-
async
|
|
272
|
+
async requireImport(projectId, importId) {
|
|
165
273
|
const row = await this.repo.findImportById(projectId, importId);
|
|
166
274
|
if (!row)
|
|
167
275
|
throw new common_1.NotFoundException(`Dataset import ${importId} not found`);
|
|
168
|
-
|
|
169
|
-
|
|
276
|
+
return row;
|
|
277
|
+
}
|
|
278
|
+
async requireImportState(projectId, importId, states) {
|
|
279
|
+
const row = await this.requireImport(projectId, importId);
|
|
280
|
+
if (!states.includes(row.status)) {
|
|
281
|
+
throw new common_1.ConflictException('dataset_import_invalid_state');
|
|
282
|
+
}
|
|
170
283
|
return row;
|
|
171
284
|
}
|
|
172
285
|
assertConsistentMappings(dto) {
|
|
@@ -191,11 +304,78 @@ let DatasetImportService = class DatasetImportService {
|
|
|
191
304
|
return null;
|
|
192
305
|
return String(value);
|
|
193
306
|
}
|
|
307
|
+
async completeStagedImport(projectId, session, actor) {
|
|
308
|
+
if (!['uploading', 'importing'].includes(session.status)) {
|
|
309
|
+
return this.toImportItem(session);
|
|
310
|
+
}
|
|
311
|
+
try {
|
|
312
|
+
const sampleRows = await this.repo.getSampleDataForInference(session.id, TYPE_INFERENCE_SAMPLE_LIMIT);
|
|
313
|
+
const fieldSchema = (0, dataset_field_schema_util_1.buildDatasetFieldSchema)(this.toFieldMappings(session), sampleRows);
|
|
314
|
+
const hasImages = fieldSchema.some((field) => IMAGE_ROLES.has(field.role));
|
|
315
|
+
const datasetId = (0, node_crypto_1.randomUUID)();
|
|
316
|
+
const { sampleCount } = await this.repo.promote({
|
|
317
|
+
importId: session.id,
|
|
318
|
+
projectId,
|
|
319
|
+
actorUserId: actor.sub,
|
|
320
|
+
datasetId,
|
|
321
|
+
name: session.name,
|
|
322
|
+
description: session.description,
|
|
323
|
+
fieldSchema,
|
|
324
|
+
hasImages,
|
|
325
|
+
});
|
|
326
|
+
await this.datasetService.recordDatasetImportCompleted({
|
|
327
|
+
projectId,
|
|
328
|
+
datasetId,
|
|
329
|
+
importId: session.id,
|
|
330
|
+
actorId: actor.sub,
|
|
331
|
+
sampleCount,
|
|
332
|
+
});
|
|
333
|
+
this.logger.info({ importId: session.id, datasetId, sampleCount }, 'dataset_import_completed');
|
|
334
|
+
const row = await this.repo.findImportById(projectId, session.id);
|
|
335
|
+
return this.toImportItem(row ?? { ...session, datasetId, status: 'completed', receivedRows: sampleCount });
|
|
336
|
+
}
|
|
337
|
+
catch (error) {
|
|
338
|
+
if (error instanceof dataset_import_repository_1.DatasetImportEmptyError)
|
|
339
|
+
throw new common_1.BadRequestException('dataset_import_empty');
|
|
340
|
+
if (error instanceof dataset_import_repository_1.DatasetNameTakenError)
|
|
341
|
+
throw new common_1.ConflictException('dataset_name_taken');
|
|
342
|
+
throw error;
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
assertRawObjectWithinLimit(ref) {
|
|
346
|
+
this.assertUploadSizeWithinLimit(ref.bytes);
|
|
347
|
+
}
|
|
348
|
+
assertUploadSizeWithinLimit(bytes) {
|
|
349
|
+
if (nonnegativeInteger(bytes) > this.getRawUploadMaxBytes()) {
|
|
350
|
+
throw new common_1.BadRequestException('dataset_raw_upload_too_large');
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
async cleanupRawImportResources(row) {
|
|
354
|
+
if (row.rawUploadSessionId) {
|
|
355
|
+
await this.storage.abortUpload(row.rawUploadSessionId).catch((error) => {
|
|
356
|
+
this.logger.warn({ importId: row.id, error: error.message }, 'dataset_raw_upload_abort_failed');
|
|
357
|
+
});
|
|
358
|
+
}
|
|
359
|
+
if (row.rawObjectRef) {
|
|
360
|
+
await this.cleanupRawObjectRef(row.rawObjectRef, row.id);
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
async cleanupRawObjectRef(ref, importId) {
|
|
364
|
+
await this.storage.deleteObjects([ref]).catch((error) => {
|
|
365
|
+
this.logger.warn({ importId, key: ref.key, error: error.message }, 'dataset_raw_object_delete_failed');
|
|
366
|
+
});
|
|
367
|
+
}
|
|
368
|
+
getRawObjectName(dto) {
|
|
369
|
+
return `input.${dto.sourceFormat}`;
|
|
370
|
+
}
|
|
194
371
|
toImportItem(row) {
|
|
372
|
+
const state = row.status;
|
|
373
|
+
const progress = buildImportProgress(row, state);
|
|
195
374
|
return {
|
|
196
375
|
id: row.id,
|
|
197
376
|
projectId: row.projectId,
|
|
198
377
|
datasetId: row.datasetId,
|
|
378
|
+
importMode: row.importMode === 'raw_object' ? 'raw_object' : 'batch',
|
|
199
379
|
name: row.name,
|
|
200
380
|
description: row.description,
|
|
201
381
|
fileName: row.fileName,
|
|
@@ -203,7 +383,18 @@ let DatasetImportService = class DatasetImportService {
|
|
|
203
383
|
sourceFormat: row.sourceFormat,
|
|
204
384
|
declaredTotalRows: row.declaredTotalRows,
|
|
205
385
|
receivedRows: row.receivedRows,
|
|
206
|
-
status:
|
|
386
|
+
status: state,
|
|
387
|
+
state,
|
|
388
|
+
progress,
|
|
389
|
+
errorCode: row.errorCode,
|
|
390
|
+
errorMessage: row.errorMessage,
|
|
391
|
+
jobId: row.jobId,
|
|
392
|
+
rawUploadCompletedAt: isoOrNull(row.rawUploadCompletedAt),
|
|
393
|
+
queuedAt: isoOrNull(row.queuedAt),
|
|
394
|
+
startedAt: isoOrNull(row.startedAt),
|
|
395
|
+
completedAt: isoOrNull(row.completedAt),
|
|
396
|
+
failedAt: isoOrNull(row.failedAt),
|
|
397
|
+
abortedAt: isoOrNull(row.abortedAt),
|
|
207
398
|
createdAt: row.createdAt.toISOString(),
|
|
208
399
|
updatedAt: row.updatedAt.toISOString(),
|
|
209
400
|
};
|
|
@@ -216,6 +407,10 @@ let DatasetImportService = class DatasetImportService {
|
|
|
216
407
|
const raw = Number(process.env['DATASET_IMPORT_STALE_TIMEOUT_MS']);
|
|
217
408
|
return Number.isFinite(raw) && raw >= MIN_TICK_MS ? Math.floor(raw) : DEFAULT_STALE_TIMEOUT_MS;
|
|
218
409
|
}
|
|
410
|
+
getRawUploadMaxBytes() {
|
|
411
|
+
const raw = Number(process.env['DATASET_RAW_UPLOAD_MAX_BYTES']);
|
|
412
|
+
return Number.isFinite(raw) && raw > 0 ? Math.floor(raw) : DEFAULT_DATASET_RAW_UPLOAD_MAX_BYTES;
|
|
413
|
+
}
|
|
219
414
|
};
|
|
220
415
|
exports.DatasetImportService = DatasetImportService;
|
|
221
416
|
exports.DatasetImportService = DatasetImportService = __decorate([
|
|
@@ -223,7 +418,9 @@ exports.DatasetImportService = DatasetImportService = __decorate([
|
|
|
223
418
|
__metadata("design:paramtypes", [dataset_import_repository_1.DatasetImportRepository,
|
|
224
419
|
dataset_service_1.DatasetService,
|
|
225
420
|
access_control_service_1.AccessControlService,
|
|
226
|
-
quota_policy_hook_1.QuotaPolicyHook
|
|
421
|
+
quota_policy_hook_1.QuotaPolicyHook,
|
|
422
|
+
object_storage_provider_1.ObjectStorageProvider,
|
|
423
|
+
orchestration_1.BullmqService])
|
|
227
424
|
], DatasetImportService);
|
|
228
425
|
function utf8JsonBytes(value) {
|
|
229
426
|
return node_buffer_1.Buffer.byteLength(JSON.stringify(value ?? null), 'utf8');
|
|
@@ -231,4 +428,34 @@ function utf8JsonBytes(value) {
|
|
|
231
428
|
function nonnegativeInteger(value) {
|
|
232
429
|
return Number.isFinite(value) ? Math.max(0, Math.trunc(value ?? 0)) : 0;
|
|
233
430
|
}
|
|
431
|
+
function isoOrNull(value) {
|
|
432
|
+
return value ? value.toISOString() : null;
|
|
433
|
+
}
|
|
434
|
+
function buildImportProgress(row, state) {
|
|
435
|
+
const totalBytes = nonnegativeInteger(row.fileSizeBytes);
|
|
436
|
+
const uploadedBytes = row.rawObjectRef?.bytes ??
|
|
437
|
+
(['uploaded', 'queued', 'parsing', 'importing', 'completed'].includes(state) ? totalBytes : null);
|
|
438
|
+
const totalRows = row.declaredTotalRows;
|
|
439
|
+
const parsedRows = nonnegativeInteger(row.receivedRows);
|
|
440
|
+
const importedRows = state === 'completed' ? parsedRows : 0;
|
|
441
|
+
let percentage = null;
|
|
442
|
+
if (state === 'completed') {
|
|
443
|
+
percentage = 100;
|
|
444
|
+
}
|
|
445
|
+
else if (totalRows && totalRows > 0) {
|
|
446
|
+
percentage = Math.min(99, Math.round((parsedRows / totalRows) * 100));
|
|
447
|
+
}
|
|
448
|
+
else if (uploadedBytes !== null && totalBytes > 0) {
|
|
449
|
+
percentage = Math.min(75, Math.round((uploadedBytes / totalBytes) * 75));
|
|
450
|
+
}
|
|
451
|
+
return {
|
|
452
|
+
state,
|
|
453
|
+
uploadedBytes,
|
|
454
|
+
parsedRows,
|
|
455
|
+
importedRows,
|
|
456
|
+
totalRows,
|
|
457
|
+
totalBytes,
|
|
458
|
+
percentage,
|
|
459
|
+
};
|
|
460
|
+
}
|
|
234
461
|
//# sourceMappingURL=dataset-import.service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dataset-import.service.js","sourceRoot":"","sources":["../../../../src/server/modules/dataset/dataset-import.service.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"dataset-import.service.js","sourceRoot":"","sources":["../../../../src/server/modules/dataset/dataset-import.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dataset.module.d.ts","sourceRoot":"","sources":["../../../../src/server/modules/dataset/dataset.module.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"dataset.module.d.ts","sourceRoot":"","sources":["../../../../src/server/modules/dataset/dataset.module.ts"],"names":[],"mappings":"AAYA,qBAaa,aAAa;CAAG"}
|
|
@@ -9,6 +9,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
9
9
|
exports.DatasetModule = void 0;
|
|
10
10
|
const common_1 = require("@nestjs/common");
|
|
11
11
|
const database_module_1 = require("../../../shared/database/database.module");
|
|
12
|
+
const orchestration_1 = require("../../infrastructure/orchestration");
|
|
12
13
|
const dataset_sample_payload_1 = require("./dataset-sample-payload");
|
|
13
14
|
const dataset_deletion_hook_1 = require("./dataset-deletion.hook");
|
|
14
15
|
const dataset_import_controller_1 = require("./dataset-import.controller");
|
|
@@ -22,7 +23,7 @@ let DatasetModule = class DatasetModule {
|
|
|
22
23
|
exports.DatasetModule = DatasetModule;
|
|
23
24
|
exports.DatasetModule = DatasetModule = __decorate([
|
|
24
25
|
(0, common_1.Module)({
|
|
25
|
-
imports: [database_module_1.DatabaseModule],
|
|
26
|
+
imports: [database_module_1.DatabaseModule, orchestration_1.BullmqOrchestrationModule],
|
|
26
27
|
controllers: [dataset_controller_1.DatasetController, dataset_import_controller_1.DatasetImportController],
|
|
27
28
|
providers: [
|
|
28
29
|
dataset_repository_1.DatasetRepository,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dataset.module.js","sourceRoot":"","sources":["../../../../src/server/modules/dataset/dataset.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,8EAA0E;AAC1E,qEAAsE;AACtE,mEAAwF;AACxF,2EAAsE;AACtE,2EAAsE;AACtE,qEAAgE;AAChE,6DAAyD;AACzD,6DAAyD;AACzD,uDAAmD;AAe5C,IAAM,aAAa,GAAnB,MAAM,aAAa;CAAG,CAAA;AAAhB,sCAAa;wBAAb,aAAa;IAbzB,IAAA,eAAM,EAAC;QACN,OAAO,EAAE,CAAC,gCAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"dataset.module.js","sourceRoot":"","sources":["../../../../src/server/modules/dataset/dataset.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,8EAA0E;AAC1E,sEAA+E;AAC/E,qEAAsE;AACtE,mEAAwF;AACxF,2EAAsE;AACtE,2EAAsE;AACtE,qEAAgE;AAChE,6DAAyD;AACzD,6DAAyD;AACzD,uDAAmD;AAe5C,IAAM,aAAa,GAAnB,MAAM,aAAa;CAAG,CAAA;AAAhB,sCAAa;wBAAb,aAAa;IAbzB,IAAA,eAAM,EAAC;QACN,OAAO,EAAE,CAAC,gCAAc,EAAE,yCAAyB,CAAC;QACpD,WAAW,EAAE,CAAC,sCAAiB,EAAE,mDAAuB,CAAC;QACzD,SAAS,EAAE;YACT,sCAAiB;YACjB,mDAA0B;YAC1B,EAAE,OAAO,EAAE,2CAAmB,EAAE,QAAQ,EAAE,gDAAwB,EAAE;YACpE,gCAAc;YACd,mDAAuB;YACvB,6CAAoB;SACrB;QACD,OAAO,EAAE,CAAC,gCAAc,EAAE,6CAAoB,CAAC;KAChD,CAAC;GACW,aAAa,CAAG"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { DbClient } from '@proofhound/db';
|
|
2
2
|
import type { CreateDatasetDto, DatasetFieldSchemaDto } from '@proofhound/shared';
|
|
3
|
-
import { ObjectStorageProvider } from '../../common/contracts/object-storage.provider';
|
|
3
|
+
import { ObjectStorageProvider, type StoredObjectRef } from '../../common/contracts/object-storage.provider';
|
|
4
4
|
import { DatasetSamplePayloadReader } from './dataset-sample-payload';
|
|
5
5
|
export interface DatasetProjectAccessRow {
|
|
6
6
|
id: string;
|
|
@@ -58,6 +58,10 @@ export interface DatasetDeletionImpactRows {
|
|
|
58
58
|
experiments: DatasetDeletionImpactRow[];
|
|
59
59
|
optimizations: DatasetDeletionImpactRow[];
|
|
60
60
|
}
|
|
61
|
+
export interface HardDeleteRowsResult {
|
|
62
|
+
deleted: number;
|
|
63
|
+
payloadRefs: StoredObjectRef[];
|
|
64
|
+
}
|
|
61
65
|
export declare class DatasetRepository {
|
|
62
66
|
private readonly db;
|
|
63
67
|
private readonly sampleReader;
|
|
@@ -84,14 +88,14 @@ export declare class DatasetRepository {
|
|
|
84
88
|
label: string;
|
|
85
89
|
count: number;
|
|
86
90
|
}>>;
|
|
87
|
-
hardDeleteDataset(projectId: string, datasetId: string): Promise<
|
|
91
|
+
hardDeleteDataset(projectId: string, datasetId: string): Promise<HardDeleteRowsResult>;
|
|
88
92
|
listDeletionImpact(projectId: string, datasetId: string): Promise<DatasetDeletionImpactRows>;
|
|
89
93
|
updateDatasetMetadata(projectId: string, datasetId: string, args: UpdateDatasetMetadataArgs): Promise<DatasetRow | null>;
|
|
90
94
|
countDatasetReferences(datasetIds: string[]): Promise<Map<string, {
|
|
91
95
|
experiments: number;
|
|
92
96
|
optimizations: number;
|
|
93
97
|
}>>;
|
|
94
|
-
hardDeleteSamples(datasetId: string, sampleIds: string[]): Promise<
|
|
98
|
+
hardDeleteSamples(datasetId: string, sampleIds: string[]): Promise<HardDeleteRowsResult>;
|
|
95
99
|
decrementDatasetSampleCount(datasetId: string, delta: number): Promise<void>;
|
|
96
100
|
createDatasetWithSamples(args: CreateDatasetRecordArgs): Promise<DatasetRow>;
|
|
97
101
|
private getExternalId;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dataset.repository.d.ts","sourceRoot":"","sources":["../../../../src/server/modules/dataset/dataset.repository.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE/C,OAAO,KAAK,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAElF,OAAO,EAAE,qBAAqB,EAAE,MAAM,gDAAgD,CAAC;
|
|
1
|
+
{"version":3,"file":"dataset.repository.d.ts","sourceRoot":"","sources":["../../../../src/server/modules/dataset/dataset.repository.ts"],"names":[],"mappings":"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"}
|