@proofhound/core 0.1.14 → 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.
Files changed (51) hide show
  1. package/dist/server/channels/mcp/dataset-import.tools.d.ts.map +1 -1
  2. package/dist/server/channels/mcp/dataset-import.tools.js +22 -6
  3. package/dist/server/channels/mcp/dataset-import.tools.js.map +1 -1
  4. package/dist/server/common/contracts/quota-policy.hook.d.ts +1 -1
  5. package/dist/server/common/contracts/quota-policy.hook.d.ts.map +1 -1
  6. package/dist/server/common/contracts/quota-policy.hook.js.map +1 -1
  7. package/dist/server/infrastructure/orchestration/bullmq.module.js +1 -1
  8. package/dist/server/infrastructure/orchestration/bullmq.module.js.map +1 -1
  9. package/dist/server/infrastructure/orchestration/bullmq.service.d.ts +4 -2
  10. package/dist/server/infrastructure/orchestration/bullmq.service.d.ts.map +1 -1
  11. package/dist/server/infrastructure/orchestration/bullmq.service.js +9 -2
  12. package/dist/server/infrastructure/orchestration/bullmq.service.js.map +1 -1
  13. package/dist/server/modules/dataset/dataset-import-raw-parser.d.ts +3 -1
  14. package/dist/server/modules/dataset/dataset-import-raw-parser.d.ts.map +1 -1
  15. package/dist/server/modules/dataset/dataset-import-raw-parser.js +241 -1
  16. package/dist/server/modules/dataset/dataset-import-raw-parser.js.map +1 -1
  17. package/dist/server/modules/dataset/dataset-import.controller.d.ts +111 -39
  18. package/dist/server/modules/dataset/dataset-import.controller.d.ts.map +1 -1
  19. package/dist/server/modules/dataset/dataset-import.controller.js +12 -0
  20. package/dist/server/modules/dataset/dataset-import.controller.js.map +1 -1
  21. package/dist/server/modules/dataset/dataset-import.repository.d.ts +16 -0
  22. package/dist/server/modules/dataset/dataset-import.repository.d.ts.map +1 -1
  23. package/dist/server/modules/dataset/dataset-import.repository.js +73 -3
  24. package/dist/server/modules/dataset/dataset-import.repository.js.map +1 -1
  25. package/dist/server/modules/dataset/dataset-import.service.d.ts +10 -8
  26. package/dist/server/modules/dataset/dataset-import.service.d.ts.map +1 -1
  27. package/dist/server/modules/dataset/dataset-import.service.js +163 -123
  28. package/dist/server/modules/dataset/dataset-import.service.js.map +1 -1
  29. package/dist/server/modules/dataset/dataset.module.d.ts.map +1 -1
  30. package/dist/server/modules/dataset/dataset.module.js +2 -1
  31. package/dist/server/modules/dataset/dataset.module.js.map +1 -1
  32. package/dist/server/modules/dataset/dataset.repository.d.ts +7 -3
  33. package/dist/server/modules/dataset/dataset.repository.d.ts.map +1 -1
  34. package/dist/server/modules/dataset/dataset.repository.js +127 -8
  35. package/dist/server/modules/dataset/dataset.repository.js.map +1 -1
  36. package/dist/server/modules/dataset/dataset.service.d.ts +1 -0
  37. package/dist/server/modules/dataset/dataset.service.d.ts.map +1 -1
  38. package/dist/server/modules/dataset/dataset.service.js +19 -7
  39. package/dist/server/modules/dataset/dataset.service.js.map +1 -1
  40. package/dist/worker/consumers/dataset-raw-import.consumer.d.ts +18 -0
  41. package/dist/worker/consumers/dataset-raw-import.consumer.d.ts.map +1 -0
  42. package/dist/worker/consumers/dataset-raw-import.consumer.js +52 -0
  43. package/dist/worker/consumers/dataset-raw-import.consumer.js.map +1 -0
  44. package/dist/worker/proofhound-worker.module.d.ts.map +1 -1
  45. package/dist/worker/proofhound-worker.module.js +10 -2
  46. package/dist/worker/proofhound-worker.module.js.map +1 -1
  47. package/dist/worker/runners/dataset-raw-import-runner.d.ts +25 -0
  48. package/dist/worker/runners/dataset-raw-import-runner.d.ts.map +1 -0
  49. package/dist/worker/runners/dataset-raw-import-runner.js +238 -0
  50. package/dist/worker/runners/dataset-raw-import-runner.js.map +1 -0
  51. package/package.json +12 -12
@@ -0,0 +1,238 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createDatasetRawImportRunner = createDatasetRawImportRunner;
4
+ const node_buffer_1 = require("node:buffer");
5
+ const node_crypto_1 = require("node:crypto");
6
+ const dataset_field_schema_util_1 = require("../../server/modules/dataset/dataset-field-schema.util");
7
+ const dataset_import_raw_parser_1 = require("../../server/modules/dataset/dataset-import-raw-parser");
8
+ const dataset_import_repository_1 = require("../../server/modules/dataset/dataset-import.repository");
9
+ const usage_metering_hook_1 = require("../../server/common/contracts/usage-metering.hook");
10
+ const TYPE_INFERENCE_SAMPLE_LIMIT = 500;
11
+ const IMAGE_ROLES = new Set(['image', 'image_url', 'image_base64']);
12
+ const RAW_IMPORT_BATCH_MAX_ROWS = 1000;
13
+ const RAW_IMPORT_BATCH_MAX_BYTES = 8 * 1024 * 1024;
14
+ const RAW_IMPORT_MAX_SAMPLE_BYTES = 8 * 1024 * 1024;
15
+ const RAW_IMPORT_MAX_BUFFERED_BYTES = 64 * 1024 * 1024;
16
+ class DatasetImportAbortedError extends Error {
17
+ constructor() {
18
+ super('dataset_import_aborted');
19
+ this.name = 'DatasetImportAbortedError';
20
+ }
21
+ }
22
+ function createDatasetRawImportRunner(deps) {
23
+ return async function runDatasetRawImportJob(input, jobContext) {
24
+ const session = await deps.repo.findImportById(input.projectId, input.importId);
25
+ if (!session)
26
+ return { importId: input.importId, datasetId: null, sampleCount: 0, status: 'missing' };
27
+ if (session.status === 'completed' || session.status === 'failed' || session.status === 'aborted') {
28
+ return {
29
+ importId: session.id,
30
+ datasetId: session.datasetId,
31
+ sampleCount: session.receivedRows,
32
+ status: session.status,
33
+ };
34
+ }
35
+ if (session.importMode !== 'raw_object') {
36
+ await deps.repo.markFailed(input.projectId, input.importId, 'dataset_import_mode_invalid', 'raw import job requires raw_object mode');
37
+ return { importId: input.importId, datasetId: null, sampleCount: 0, status: 'failed' };
38
+ }
39
+ if (!session.rawObjectRef) {
40
+ await deps.repo.markFailed(input.projectId, input.importId, 'dataset_raw_object_missing', 'uploaded raw object is missing');
41
+ return { importId: input.importId, datasetId: null, sampleCount: 0, status: 'failed' };
42
+ }
43
+ try {
44
+ const parsing = (await deps.repo.markParsing(input.projectId, input.importId)) ?? session;
45
+ await ingestRawObjectIntoStaging(deps, input, parsing, session.rawObjectRef);
46
+ const result = await promoteStagedImport(deps, input, parsing);
47
+ await cleanupRawObjectRef(deps, session.rawObjectRef, input.importId);
48
+ await recordJobEvent(deps, input, jobContext, 'job.completed', {
49
+ status: 'completed',
50
+ datasetId: result.datasetId,
51
+ sampleCount: result.sampleCount,
52
+ });
53
+ deps.logger.info({ importId: input.importId, datasetId: result.datasetId, sampleCount: result.sampleCount }, 'dataset_raw_import_completed');
54
+ return {
55
+ importId: input.importId,
56
+ datasetId: result.datasetId,
57
+ sampleCount: result.sampleCount,
58
+ status: 'completed',
59
+ };
60
+ }
61
+ catch (error) {
62
+ const latest = await deps.repo.findImportById(input.projectId, input.importId);
63
+ if (latest?.status === 'aborted' || error instanceof DatasetImportAbortedError) {
64
+ await cleanupRawObjectRef(deps, session.rawObjectRef, input.importId);
65
+ return { importId: input.importId, datasetId: null, sampleCount: latest?.receivedRows ?? 0, status: 'aborted' };
66
+ }
67
+ const errorCode = errorToCode(error);
68
+ await deps.repo.markFailed(input.projectId, input.importId, errorCode, error instanceof Error ? error.message : String(error));
69
+ await cleanupRawObjectRef(deps, session.rawObjectRef, input.importId);
70
+ await recordJobEvent(deps, input, jobContext, 'job.failed', {
71
+ status: 'failed',
72
+ errorKind: errorCode,
73
+ });
74
+ deps.logger.warn({ importId: input.importId, error: error instanceof Error ? error.message : String(error) }, 'dataset_raw_import_failed');
75
+ return { importId: input.importId, datasetId: null, sampleCount: 0, status: 'failed' };
76
+ }
77
+ };
78
+ }
79
+ async function ingestRawObjectIntoStaging(deps, input, session, rawObjectRef) {
80
+ const stream = await deps.storage.getObjectStream(rawObjectRef);
81
+ const fieldMappings = toFieldMappings(session);
82
+ const externalIdField = externalIdFieldName(fieldMappings);
83
+ const project = { projectId: input.projectId, source: 'local' };
84
+ const actor = toJobActor(input);
85
+ let batch = [];
86
+ let batchBytes = jsonArrayBytesForEmptyBatch();
87
+ let rowIndex = 0;
88
+ const flush = async () => {
89
+ if (batch.length === 0)
90
+ return;
91
+ await deps.quotaPolicy.assertCanStore({
92
+ actor,
93
+ bytes: batchBytes,
94
+ project,
95
+ source: 'dataset_raw_import_batch',
96
+ });
97
+ await deps.repo.appendBatch(session.id, batch, rowIndex);
98
+ await assertNotAborted(deps.repo, input.projectId, input.importId);
99
+ batch = [];
100
+ batchBytes = jsonArrayBytesForEmptyBatch();
101
+ };
102
+ for await (const rawRow of (0, dataset_import_raw_parser_1.parseRawDatasetRows)(stream, session.sourceFormat, {
103
+ maxBufferedBytes: RAW_IMPORT_MAX_BUFFERED_BYTES,
104
+ })) {
105
+ if (batch.length >= RAW_IMPORT_BATCH_MAX_ROWS)
106
+ await flush();
107
+ const data = projectSample(rawRow, fieldMappings);
108
+ const sampleBytes = utf8JsonBytes(data);
109
+ if (sampleBytes > RAW_IMPORT_MAX_SAMPLE_BYTES)
110
+ throw new Error('dataset_import_sample_too_large');
111
+ let candidateBytes = jsonArrayBytesAfterAppend(batchBytes, batch.length, sampleBytes);
112
+ if (candidateBytes > RAW_IMPORT_BATCH_MAX_BYTES) {
113
+ if (batch.length === 0)
114
+ throw new Error('dataset_import_sample_too_large');
115
+ await flush();
116
+ candidateBytes = jsonArrayBytesAfterAppend(batchBytes, batch.length, sampleBytes);
117
+ if (candidateBytes > RAW_IMPORT_BATCH_MAX_BYTES)
118
+ throw new Error('dataset_import_sample_too_large');
119
+ }
120
+ batch.push({ rowIndex, data, externalId: getExternalId(data, externalIdField) });
121
+ batchBytes = candidateBytes;
122
+ rowIndex += 1;
123
+ }
124
+ await flush();
125
+ }
126
+ async function promoteStagedImport(deps, input, session) {
127
+ const sampleRows = await deps.repo.getSampleDataForInference(session.id, TYPE_INFERENCE_SAMPLE_LIMIT);
128
+ const fieldSchema = (0, dataset_field_schema_util_1.buildDatasetFieldSchema)(toFieldMappings(session), sampleRows);
129
+ const hasImages = fieldSchema.some((field) => IMAGE_ROLES.has(field.role));
130
+ const datasetId = (0, node_crypto_1.randomUUID)();
131
+ const { sampleCount } = await deps.repo.promote({
132
+ importId: session.id,
133
+ projectId: input.projectId,
134
+ actorUserId: input.actorId ?? session.createdBy,
135
+ datasetId,
136
+ name: session.name,
137
+ description: session.description,
138
+ fieldSchema,
139
+ hasImages,
140
+ });
141
+ await recordDatasetImportCompleted(deps, input.projectId, input.actorId ?? session.createdBy, session.id, datasetId, sampleCount);
142
+ return { datasetId, sampleCount };
143
+ }
144
+ async function assertNotAborted(repo, projectId, importId) {
145
+ const latest = await repo.findImportById(projectId, importId);
146
+ if (latest?.status === 'aborted')
147
+ throw new DatasetImportAbortedError();
148
+ }
149
+ function toFieldMappings(session) {
150
+ return Array.isArray(session.fieldMappings) ? session.fieldMappings : [];
151
+ }
152
+ function externalIdFieldName(fieldMappings) {
153
+ return fieldMappings.find((field) => field.role === 'id')?.name ?? null;
154
+ }
155
+ function getExternalId(sample, fieldName) {
156
+ if (!fieldName)
157
+ return null;
158
+ const value = sample[fieldName];
159
+ if (value === undefined || value === null)
160
+ return null;
161
+ return String(value);
162
+ }
163
+ function projectSample(sample, fieldMappings) {
164
+ return Object.fromEntries(fieldMappings.map((field) => [
165
+ field.name,
166
+ Object.prototype.hasOwnProperty.call(sample, field.name) ? sample[field.name] : null,
167
+ ]));
168
+ }
169
+ async function cleanupRawObjectRef(deps, ref, importId) {
170
+ await deps.storage.deleteObjects([ref]).catch((error) => {
171
+ deps.logger.warn({ importId, key: ref.key, error: error.message }, 'dataset_raw_object_delete_failed');
172
+ });
173
+ }
174
+ async function recordDatasetImportCompleted(deps, projectId, actorId, importId, datasetId, sampleCount) {
175
+ const occurredAt = new Date();
176
+ for (const eventType of ['dataset_import.completed', 'storage.dirty']) {
177
+ await (0, usage_metering_hook_1.safeRecordUsageEvent)(deps.usageMetering, {
178
+ idempotencyKey: `storage:${eventType}:${datasetId}:${importId}`,
179
+ dimension: 'storage',
180
+ eventType,
181
+ projectId,
182
+ actorId,
183
+ occurredAt,
184
+ source: 'worker',
185
+ payload: {
186
+ importId,
187
+ datasetId,
188
+ sampleCount,
189
+ reason: eventType === 'storage.dirty' ? 'dataset_import.completed' : undefined,
190
+ },
191
+ }, deps.logger);
192
+ }
193
+ }
194
+ async function recordJobEvent(deps, input, jobContext, eventType, payload) {
195
+ await (0, usage_metering_hook_1.safeRecordUsageEvent)(deps.usageMetering, {
196
+ idempotencyKey: `job:${jobContext.bullmqQueue}:${jobContext.bullmqJobId}:${jobContext.attempt}:${eventType}`,
197
+ dimension: 'job',
198
+ eventType,
199
+ projectId: input.projectId,
200
+ actorId: input.actorId ?? null,
201
+ occurredAt: new Date(),
202
+ source: 'worker',
203
+ payload: {
204
+ queue: jobContext.bullmqQueue,
205
+ jobId: jobContext.bullmqJobId,
206
+ attempt: jobContext.attempt,
207
+ importId: input.importId,
208
+ source: 'dataset_import',
209
+ ...payload,
210
+ },
211
+ }, deps.logger);
212
+ }
213
+ function toJobActor(input) {
214
+ return {
215
+ actorKind: 'local_user',
216
+ actorId: input.actorId ?? 'dataset_import_worker',
217
+ projectId: input.projectId,
218
+ };
219
+ }
220
+ function errorToCode(error) {
221
+ if (error instanceof dataset_import_repository_1.DatasetImportEmptyError)
222
+ return 'dataset_import_empty';
223
+ if (error instanceof dataset_import_repository_1.DatasetNameTakenError)
224
+ return 'dataset_name_taken';
225
+ if (error instanceof Error && error.message)
226
+ return error.message.slice(0, 120).replace(/[^a-z0-9_.:-]+/giu, '_');
227
+ return 'dataset_import_failed';
228
+ }
229
+ function utf8JsonBytes(value) {
230
+ return node_buffer_1.Buffer.byteLength(JSON.stringify(value ?? null), 'utf8');
231
+ }
232
+ function jsonArrayBytesForEmptyBatch() {
233
+ return 2; // []
234
+ }
235
+ function jsonArrayBytesAfterAppend(currentArrayBytes, currentLength, nextItemBytes) {
236
+ return currentLength === 0 ? jsonArrayBytesForEmptyBatch() + nextItemBytes : currentArrayBytes + 1 + nextItemBytes;
237
+ }
238
+ //# sourceMappingURL=dataset-raw-import-runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dataset-raw-import-runner.js","sourceRoot":"","sources":["../../../src/worker/runners/dataset-raw-import-runner.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@proofhound/core",
3
- "version": "0.1.14",
3
+ "version": "0.1.15",
4
4
  "description": "ProofHound reusable backend runtime: server / webhook / worker NestJS modules, contracts, local defaults, Services, Repositories",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -37,17 +37,17 @@
37
37
  "rxjs": "^7.8.2",
38
38
  "sharp": "^0.34.5",
39
39
  "zod": "^4.4.3",
40
- "@proofhound/connector-client": "0.1.14",
41
- "@proofhound/crypto": "0.1.14",
42
- "@proofhound/judgment": "0.1.14",
43
- "@proofhound/logger": "0.1.14",
44
- "@proofhound/llm-client": "0.1.14",
45
- "@proofhound/db": "0.1.14",
46
- "@proofhound/metrics": "0.1.14",
47
- "@proofhound/limiter": "0.1.14",
48
- "@proofhound/optimization-strategy": "0.1.14",
49
- "@proofhound/orchestration-shared": "0.1.14",
50
- "@proofhound/shared": "0.1.14"
40
+ "@proofhound/connector-client": "0.1.15",
41
+ "@proofhound/crypto": "0.1.15",
42
+ "@proofhound/judgment": "0.1.15",
43
+ "@proofhound/limiter": "0.1.15",
44
+ "@proofhound/llm-client": "0.1.15",
45
+ "@proofhound/db": "0.1.15",
46
+ "@proofhound/logger": "0.1.15",
47
+ "@proofhound/optimization-strategy": "0.1.15",
48
+ "@proofhound/orchestration-shared": "0.1.15",
49
+ "@proofhound/metrics": "0.1.15",
50
+ "@proofhound/shared": "0.1.15"
51
51
  },
52
52
  "devDependencies": {
53
53
  "@nestjs/testing": "^11.1.21",