@aleph-alpha/chat-kit 2.1.0 → 2.1.1

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.
@@ -3,6 +3,6 @@ import { createDocumentUploadProvider } from './useFileUploadWrapper';
3
3
  export declare const defaultDocumentUploadConfig: DocumentUploadConfig;
4
4
  declare const useDocumentUploadWithDefaultConfig: (conversationIdRef: import("vue").MaybeRef<string>) => import("./types").DocumentUploadReturn;
5
5
  export { useDocumentUploadWithDefaultConfig, createDocumentUploadProvider };
6
- export type { DocumentUploadConfig, DocumentUploadProvider, FileEntry, FileStatus, } from './types';
6
+ export type { DocumentUploadConfig, DocumentUploadProvider, DocumentUploadReturn, HandleFilesSelectedOptions, FileEntry, FileStatus, } from './types';
7
7
  export { SdkError, defaultEndpoints } from './types';
8
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/composables/fileUpload/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AACpD,OAAO,EAAE,4BAA4B,EAAE,MAAM,wBAAwB,CAAC;AAItE,eAAO,MAAM,2BAA2B,EAAE,oBAsEzC,CAAC;AAEF,QAAA,MAA2B,kCAAkC,+FACF,CAAC;AAE5D,OAAO,EAAE,kCAAkC,EAAE,4BAA4B,EAAE,CAAC;AAE5E,YAAY,EACV,oBAAoB,EACpB,sBAAsB,EACtB,SAAS,EACT,UAAU,GACX,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/composables/fileUpload/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AACpD,OAAO,EAAE,4BAA4B,EAAE,MAAM,wBAAwB,CAAC;AAItE,eAAO,MAAM,2BAA2B,EAAE,oBAsEzC,CAAC;AAEF,QAAA,MAA2B,kCAAkC,+FACF,CAAC;AAE5D,OAAO,EAAE,kCAAkC,EAAE,4BAA4B,EAAE,CAAC;AAE5E,YAAY,EACV,oBAAoB,EACpB,sBAAsB,EACtB,oBAAoB,EACpB,0BAA0B,EAC1B,SAAS,EACT,UAAU,GACX,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC"}
@@ -245,6 +245,7 @@ export interface DocumentUploadConfig {
245
245
  workflowConfig: Record<string, unknown>;
246
246
  persist?: boolean;
247
247
  maxConcurrency?: number;
248
+ maxFilesPerUpload?: number;
248
249
  headers?: Record<string, string>;
249
250
  onEvent?: (event: UploadEvent) => void;
250
251
  }
@@ -255,13 +256,21 @@ export interface DocumentUploadReturn {
255
256
  upload: UseFileUploadReturn;
256
257
  storeId: Ref<string>;
257
258
  fileInput: Ref<HTMLInputElement | null>;
259
+ maxFilesPerUpload: number;
258
260
  uploadFiles: (files: File[]) => Promise<UploadResult | undefined>;
259
261
  unassignedFiles: ComputedRef<FileEntry[]>;
260
262
  assignFilesToMessage: (messageId: string) => void;
261
263
  getFilesForMessage: (messageId: string) => FileEntry[];
262
264
  stampResponseId: (responseId: string, localMessageId: string) => void;
263
265
  purgeCompletedFiles: () => void;
264
- handleFilesSelected: (event: Event) => void;
266
+ handleFilesSelected: (event: Event, options?: HandleFilesSelectedOptions) => void;
267
+ }
268
+ export interface HandleFilesSelectedOptions {
269
+ onFilesExceeded?: (info: {
270
+ selected: number;
271
+ allowed: number;
272
+ kept: number;
273
+ }) => void;
265
274
  }
266
275
  export interface UseFileUploadOptions {
267
276
  client: HttpClient;
@@ -270,6 +279,7 @@ export interface UseFileUploadOptions {
270
279
  endpoints?: EndpointResolver;
271
280
  persist?: PersistOptions | boolean;
272
281
  maxConcurrency?: number;
282
+ maxFilesPerUpload?: number;
273
283
  retryPolicy?: RetryPolicy;
274
284
  validators?: ValidatorFn[];
275
285
  onEvent?: (event: UploadEvent) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/composables/fileUpload/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/composables/fileUpload/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"useFileUpload.d.ts","sourceRoot":"","sources":["../../../src/composables/fileUpload/useFileUpload.ts"],"names":[],"mappings":"AACA,OAAO,EAkBL,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EAKzB,MAAM,SAAS,CAAC;AAEjB,cAAc,SAAS,CAAC;AAybxB,wBAAgB,aAAa,CAC3B,OAAO,EAAE,oBAAoB,GAC5B,mBAAmB,CA6xBrB"}
1
+ {"version":3,"file":"useFileUpload.d.ts","sourceRoot":"","sources":["../../../src/composables/fileUpload/useFileUpload.ts"],"names":[],"mappings":"AACA,OAAO,EAkBL,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EAKzB,MAAM,SAAS,CAAC;AAEjB,cAAc,SAAS,CAAC;AAybxB,wBAAgB,aAAa,CAC3B,OAAO,EAAE,oBAAoB,GAC5B,mBAAmB,CA2yBrB"}
@@ -1 +1 @@
1
- {"version":3,"file":"useFileUploadWrapper.d.ts","sourceRoot":"","sources":["../../../src/composables/fileUpload/useFileUploadWrapper.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAOV,oBAAoB,EACpB,sBAAsB,EAGvB,MAAM,SAAS,CAAC;AAiJjB,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,oBAAoB,GAC3B,sBAAsB,CAiOxB"}
1
+ {"version":3,"file":"useFileUploadWrapper.d.ts","sourceRoot":"","sources":["../../../src/composables/fileUpload/useFileUploadWrapper.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAOV,oBAAoB,EACpB,sBAAsB,EAIvB,MAAM,SAAS,CAAC;AAiJjB,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,oBAAoB,GAC3B,sBAAsB,CAsPxB"}
@@ -1,4 +1,4 @@
1
- import { c, d, u, b, e, f } from "../index-DrtHeZpl.js";
1
+ import { c, d, u, b, e, f } from "../index-BPXg1Yf6.js";
2
2
  export {
3
3
  c as createDocumentUploadProvider,
4
4
  d as defaultDocumentUploadConfig,
@@ -588,7 +588,12 @@ function useFileUpload(options) {
588
588
  let storeId = options.storeId ?? "";
589
589
  const endpoints = options.endpoints ?? defaultEndpoints;
590
590
  const retryPolicy = options.retryPolicy ?? DEFAULT_RETRY_POLICY;
591
- const constraints = { ...DEFAULT_CONSTRAINTS };
591
+ const constraints = {
592
+ ...DEFAULT_CONSTRAINTS,
593
+ ...options.maxFilesPerUpload != null && {
594
+ maxFilesPerUpload: options.maxFilesPerUpload
595
+ }
596
+ };
592
597
  const validators = options.validators ?? [];
593
598
  const maxConcurrency = options.maxConcurrency ?? 3;
594
599
  const files = ref(/* @__PURE__ */ new Map());
@@ -757,10 +762,13 @@ function useFileUpload(options) {
757
762
  }
758
763
  async function upload(params) {
759
764
  const fileList = Array.isArray(params.files) ? params.files : [params.files];
760
- if (fileList.length > constraints.maxFilesPerUpload) {
765
+ const activeFileCount = [...files.value.values()].filter(
766
+ (e) => e.status !== "failed" && e.status !== "cancelled" && e.status !== "removed"
767
+ ).length;
768
+ if (activeFileCount + fileList.length > constraints.maxFilesPerUpload) {
761
769
  throw new SdkError(
762
770
  "MAX_FILES_EXCEEDED",
763
- `Cannot upload ${fileList.length} files — maximum is ${constraints.maxFilesPerUpload}.`
771
+ `Cannot upload ${fileList.length} file(s) — ${activeFileCount} already active, maximum is ${constraints.maxFilesPerUpload}.`
764
772
  );
765
773
  }
766
774
  const mergedMeta = {
@@ -1088,7 +1096,9 @@ function useFileUpload(options) {
1088
1096
  if (data.status === "completed") {
1089
1097
  workflowRun.value.status = "completed";
1090
1098
  workflowRun.value.completedAt = now();
1091
- completeInvolvedFiles(Array.isArray(data.documents) ? data.documents : []);
1099
+ completeInvolvedFiles(
1100
+ Array.isArray(data.documents) ? data.documents : []
1101
+ );
1092
1102
  emit({ type: "workflow:completed", runId });
1093
1103
  } else if (data.status === "failed" || data.status === "error") {
1094
1104
  workflowRun.value.status = "failed";
@@ -1319,7 +1329,8 @@ function createDocumentUploadProvider(config) {
1319
1329
  searchStoreConfig,
1320
1330
  workflowConfig,
1321
1331
  persist = true,
1322
- maxConcurrency = 3
1332
+ maxConcurrency = 3,
1333
+ maxFilesPerUpload
1323
1334
  } = config;
1324
1335
  const defaultHeaders = {
1325
1336
  "x-user-id": userId,
@@ -1384,6 +1395,7 @@ function createDocumentUploadProvider(config) {
1384
1395
  workflowId,
1385
1396
  persist,
1386
1397
  maxConcurrency,
1398
+ maxFilesPerUpload,
1387
1399
  onEvent
1388
1400
  });
1389
1401
  }
@@ -1392,6 +1404,7 @@ function createDocumentUploadProvider(config) {
1392
1404
  function useDocumentUpload(conversationIdRef) {
1393
1405
  const fileInput = ref(null);
1394
1406
  const upload = getUploadInstance();
1407
+ const resolvedMaxFiles = upload.getSupportedFileTypes().maxFilesPerUpload;
1395
1408
  const storeId = ref(resolvedStoreId ?? "");
1396
1409
  const currentScope = shallowRef(
1397
1410
  upload.scopeBy("conversationId", toValue(conversationIdRef))
@@ -1467,16 +1480,29 @@ function createDocumentUploadProvider(config) {
1467
1480
  upload.removeFile(entry.id, { removeFromRemote: false });
1468
1481
  }
1469
1482
  }
1470
- function handleFilesSelected(event) {
1483
+ function handleFilesSelected(event, options) {
1471
1484
  const input = event.target;
1472
- const fileList = Array.from(input.files ?? []);
1473
- uploadFiles(fileList);
1485
+ let fileList = Array.from(input.files ?? []);
1486
+ const availableSlots = resolvedMaxFiles - unassignedFiles.value.length;
1487
+ if (fileList.length > availableSlots) {
1488
+ const kept = Math.max(0, availableSlots);
1489
+ options?.onFilesExceeded?.({
1490
+ selected: fileList.length,
1491
+ allowed: availableSlots,
1492
+ kept
1493
+ });
1494
+ fileList = fileList.slice(0, kept);
1495
+ }
1496
+ if (fileList.length > 0) {
1497
+ uploadFiles(fileList);
1498
+ }
1474
1499
  input.value = "";
1475
1500
  }
1476
1501
  return {
1477
1502
  upload,
1478
1503
  storeId,
1479
1504
  fileInput,
1505
+ maxFilesPerUpload: resolvedMaxFiles,
1480
1506
  uploadFiles,
1481
1507
  unassignedFiles,
1482
1508
  assignFilesToMessage,
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { u } from "./useMessageHandler-CMdy-lm0.js";
2
2
  import { C, d, p, u as u2, a } from "./useChatKitLabels-ZutacPad.js";
3
- import { S, c, d as d2, a as a2, u as u3, b, e, f } from "./index-DrtHeZpl.js";
3
+ import { S, c, d as d2, a as a2, u as u3, b, e, f } from "./index-BPXg1Yf6.js";
4
4
  import { _, a as a3, b as b2, C as C2, c as c2, d as d3, e as e2, f as f2, g, h, i, j, k, l, m, n, o, p as p2, q, r, s, t } from "./CkInput.vue_vue_type_script_setup_true_lang-DPZedAQS.js";
5
5
  export {
6
6
  C as CHAT_KIT_LABELS,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aleph-alpha/chat-kit",
3
- "version": "2.1.0",
3
+ "version": "2.1.1",
4
4
  "description": "Chat kit package for building chat interfaces with Vue",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -10,6 +10,7 @@ vi.mock('./useFileUploadWrapper', () => ({
10
10
  upload: {},
11
11
  storeId: { value: '' },
12
12
  fileInput: { value: null },
13
+ maxFilesPerUpload: config.maxFilesPerUpload ?? 20,
13
14
  uploadFiles: vi.fn(),
14
15
  unassignedFiles: { value: [] },
15
16
  assignFilesToMessage: vi.fn(),
@@ -143,6 +144,10 @@ describe('fileUpload index', () => {
143
144
  additionalProperties: true,
144
145
  });
145
146
  });
147
+
148
+ it('does not set maxFilesPerUpload by default', () => {
149
+ expect(defaultDocumentUploadConfig.maxFilesPerUpload).toBeUndefined();
150
+ });
146
151
  });
147
152
 
148
153
  describe('createDocumentUploadProvider', () => {
@@ -187,6 +192,22 @@ describe('fileUpload index', () => {
187
192
  };
188
193
  expect(provider._config).toBe(customConfig);
189
194
  });
195
+
196
+ it('passes maxFilesPerUpload through config', () => {
197
+ const customConfig: DocumentUploadConfig = {
198
+ ...defaultDocumentUploadConfig,
199
+ maxFilesPerUpload: 5,
200
+ };
201
+
202
+ const provider = createDocumentUploadProvider(
203
+ customConfig,
204
+ ) as unknown as {
205
+ useDocumentUpload: (id: string) => { maxFilesPerUpload: number };
206
+ _config: DocumentUploadConfig;
207
+ };
208
+ const result = provider.useDocumentUpload('conv-1');
209
+ expect(result.maxFilesPerUpload).toBe(5);
210
+ });
190
211
  });
191
212
 
192
213
  describe('useDocumentUploadWithDefaultConfig', () => {
@@ -83,6 +83,8 @@ export { useDocumentUploadWithDefaultConfig, createDocumentUploadProvider };
83
83
  export type {
84
84
  DocumentUploadConfig,
85
85
  DocumentUploadProvider,
86
+ DocumentUploadReturn,
87
+ HandleFilesSelectedOptions,
86
88
  FileEntry,
87
89
  FileStatus,
88
90
  } from './types';
@@ -345,6 +345,7 @@ export interface DocumentUploadConfig {
345
345
  workflowConfig: Record<string, unknown>;
346
346
  persist?: boolean;
347
347
  maxConcurrency?: number;
348
+ maxFilesPerUpload?: number;
348
349
  headers?: Record<string, string>;
349
350
  onEvent?: (event: UploadEvent) => void;
350
351
  }
@@ -359,13 +360,25 @@ export interface DocumentUploadReturn {
359
360
  upload: UseFileUploadReturn;
360
361
  storeId: Ref<string>;
361
362
  fileInput: Ref<HTMLInputElement | null>;
363
+ maxFilesPerUpload: number;
362
364
  uploadFiles: (files: File[]) => Promise<UploadResult | undefined>;
363
365
  unassignedFiles: ComputedRef<FileEntry[]>;
364
366
  assignFilesToMessage: (messageId: string) => void;
365
367
  getFilesForMessage: (messageId: string) => FileEntry[];
366
368
  stampResponseId: (responseId: string, localMessageId: string) => void;
367
369
  purgeCompletedFiles: () => void;
368
- handleFilesSelected: (event: Event) => void;
370
+ handleFilesSelected: (
371
+ event: Event,
372
+ options?: HandleFilesSelectedOptions,
373
+ ) => void;
374
+ }
375
+
376
+ export interface HandleFilesSelectedOptions {
377
+ onFilesExceeded?: (info: {
378
+ selected: number;
379
+ allowed: number;
380
+ kept: number;
381
+ }) => void;
369
382
  }
370
383
 
371
384
  // ---------------------------------------------------------------------------
@@ -379,6 +392,7 @@ export interface UseFileUploadOptions {
379
392
  endpoints?: EndpointResolver;
380
393
  persist?: PersistOptions | boolean;
381
394
  maxConcurrency?: number;
395
+ maxFilesPerUpload?: number;
382
396
  retryPolicy?: RetryPolicy;
383
397
  validators?: ValidatorFn[];
384
398
  onEvent?: (event: UploadEvent) => void;
@@ -29,6 +29,10 @@ function makeEntry(id: string, remoteFileId: string): FileEntry {
29
29
  };
30
30
  }
31
31
 
32
+ function makeSuccessEntry(id: string, remoteFileId: string): FileEntry {
33
+ return { ...makeEntry(id, remoteFileId), status: 'success', progress: 100 };
34
+ }
35
+
32
36
  /**
33
37
  * Mock `HttpClient` whose `stream` captures the subscriber so the test can
34
38
  * drive SSE events synchronously. `post` resolves the workflow run id.
@@ -47,6 +51,18 @@ function createMockClient(captured: { cb?: (event: SseEvent) => void }) {
47
51
  } as unknown as HttpClient;
48
52
  }
49
53
 
54
+ function createUploadMockClient() {
55
+ return {
56
+ get: vi.fn(),
57
+ delete: vi.fn(),
58
+ post: vi.fn().mockResolvedValue([{ id: 'remote-1' }]),
59
+ stream: vi.fn(() => ({
60
+ subscribe: vi.fn(),
61
+ close: vi.fn(),
62
+ })),
63
+ } as unknown as HttpClient;
64
+ }
65
+
50
66
  function completeEvent(
51
67
  documents: Array<{ document_id?: string; file_id?: string }>,
52
68
  ): SseEvent {
@@ -60,6 +76,10 @@ function completeEvent(
60
76
  };
61
77
  }
62
78
 
79
+ function createFile(name: string, size = 100): File {
80
+ return new File(['x'.repeat(size)], name, { type: 'application/pdf' });
81
+ }
82
+
63
83
  describe('useFileUpload runWorkflow', () => {
64
84
  it('stamps documentId onto each file from the completed event, matched by file_id', async () => {
65
85
  const captured: { cb?: (event: SseEvent) => void } = {};
@@ -109,3 +129,130 @@ describe('useFileUpload runWorkflow', () => {
109
129
  expect(upload.getFileState('key-1')?.metadata.documentId).toBeUndefined();
110
130
  });
111
131
  });
132
+
133
+ describe('useFileUpload maxFilesPerUpload', () => {
134
+ it('uses default maxFilesPerUpload of 20 when not configured', () => {
135
+ const upload = useFileUpload({
136
+ client: createUploadMockClient(),
137
+ workflowId: 'wf',
138
+ storeId: 'ss-1',
139
+ });
140
+
141
+ const constraints = upload.getSupportedFileTypes();
142
+ expect(constraints.maxFilesPerUpload).toBe(20);
143
+ });
144
+
145
+ it('respects custom maxFilesPerUpload from options', () => {
146
+ const upload = useFileUpload({
147
+ client: createUploadMockClient(),
148
+ workflowId: 'wf',
149
+ storeId: 'ss-1',
150
+ maxFilesPerUpload: 5,
151
+ });
152
+
153
+ const constraints = upload.getSupportedFileTypes();
154
+ expect(constraints.maxFilesPerUpload).toBe(5);
155
+ });
156
+
157
+ it('throws MAX_FILES_EXCEEDED when batch exceeds limit', async () => {
158
+ const upload = useFileUpload({
159
+ client: createUploadMockClient(),
160
+ workflowId: 'wf',
161
+ storeId: 'ss-1',
162
+ maxFilesPerUpload: 2,
163
+ });
164
+
165
+ const files = [
166
+ createFile('a.pdf'),
167
+ createFile('b.pdf'),
168
+ createFile('c.pdf'),
169
+ ];
170
+
171
+ await expect(upload.upload({ id: 'g1', files })).rejects.toMatchObject({
172
+ code: 'MAX_FILES_EXCEEDED',
173
+ });
174
+ });
175
+
176
+ it('throws MAX_FILES_EXCEEDED when active files plus new batch exceeds limit', async () => {
177
+ const client = createUploadMockClient();
178
+ (client.post as ReturnType<typeof vi.fn>).mockResolvedValue([
179
+ { id: 'remote-1' },
180
+ ]);
181
+
182
+ const upload = useFileUpload({
183
+ client,
184
+ workflowId: 'wf',
185
+ storeId: 'ss-1',
186
+ maxFilesPerUpload: 3,
187
+ });
188
+
189
+ upload.files.value.set('existing-1', makeSuccessEntry('existing-1', 'r-1'));
190
+ upload.files.value.set('existing-2', makeSuccessEntry('existing-2', 'r-2'));
191
+
192
+ await expect(
193
+ upload.upload({
194
+ id: 'g2',
195
+ files: [createFile('a.pdf'), createFile('b.pdf')],
196
+ }),
197
+ ).rejects.toMatchObject({
198
+ code: 'MAX_FILES_EXCEEDED',
199
+ });
200
+ });
201
+
202
+ it('allows upload when active files plus new batch is within limit', async () => {
203
+ const client = createUploadMockClient();
204
+ (client.post as ReturnType<typeof vi.fn>).mockResolvedValue([
205
+ { id: 'remote-new' },
206
+ ]);
207
+
208
+ const upload = useFileUpload({
209
+ client,
210
+ workflowId: 'wf',
211
+ storeId: 'ss-1',
212
+ maxFilesPerUpload: 3,
213
+ });
214
+
215
+ upload.files.value.set('existing-1', makeSuccessEntry('existing-1', 'r-1'));
216
+
217
+ const result = await upload.upload({
218
+ id: 'g3',
219
+ files: [createFile('a.pdf'), createFile('b.pdf')],
220
+ });
221
+
222
+ expect(result.results).toHaveLength(2);
223
+ });
224
+
225
+ it('does not count failed/cancelled/removed files towards active count', async () => {
226
+ const client = createUploadMockClient();
227
+ (client.post as ReturnType<typeof vi.fn>).mockResolvedValue([
228
+ { id: 'remote-new' },
229
+ ]);
230
+
231
+ const upload = useFileUpload({
232
+ client,
233
+ workflowId: 'wf',
234
+ storeId: 'ss-1',
235
+ maxFilesPerUpload: 2,
236
+ });
237
+
238
+ const failedEntry: FileEntry = {
239
+ ...makeEntry('failed-1', 'r-f1'),
240
+ status: 'failed',
241
+ error: { code: 'UPLOAD_FAILED', message: 'err', occurredAt: 'now' },
242
+ };
243
+ const cancelledEntry: FileEntry = {
244
+ ...makeEntry('cancelled-1', 'r-c1'),
245
+ status: 'cancelled',
246
+ };
247
+
248
+ upload.files.value.set('failed-1', failedEntry);
249
+ upload.files.value.set('cancelled-1', cancelledEntry);
250
+
251
+ const result = await upload.upload({
252
+ id: 'g4',
253
+ files: [createFile('a.pdf'), createFile('b.pdf')],
254
+ });
255
+
256
+ expect(result.results).toHaveLength(2);
257
+ });
258
+ });
@@ -473,7 +473,12 @@ export function useFileUpload(
473
473
  let storeId = options.storeId ?? '';
474
474
  const endpoints: EndpointResolver = options.endpoints ?? defaultEndpoints;
475
475
  const retryPolicy: RetryPolicy = options.retryPolicy ?? DEFAULT_RETRY_POLICY;
476
- const constraints: FileConstraints = { ...DEFAULT_CONSTRAINTS };
476
+ const constraints: FileConstraints = {
477
+ ...DEFAULT_CONSTRAINTS,
478
+ ...(options.maxFilesPerUpload != null && {
479
+ maxFilesPerUpload: options.maxFilesPerUpload,
480
+ }),
481
+ };
477
482
  const validators: ValidatorFn[] = options.validators ?? [];
478
483
  const maxConcurrency = options.maxConcurrency ?? 3;
479
484
 
@@ -701,10 +706,17 @@ export function useFileUpload(
701
706
  ? params.files
702
707
  : [params.files];
703
708
 
704
- if (fileList.length > constraints.maxFilesPerUpload) {
709
+ const activeFileCount = [...files.value.values()].filter(
710
+ (e) =>
711
+ e.status !== 'failed' &&
712
+ e.status !== 'cancelled' &&
713
+ e.status !== 'removed',
714
+ ).length;
715
+
716
+ if (activeFileCount + fileList.length > constraints.maxFilesPerUpload) {
705
717
  throw new SdkError(
706
718
  'MAX_FILES_EXCEEDED',
707
- `Cannot upload ${fileList.length} files — maximum is ${constraints.maxFilesPerUpload}.`,
719
+ `Cannot upload ${fileList.length} file(s) — ${activeFileCount} already active, maximum is ${constraints.maxFilesPerUpload}.`,
708
720
  );
709
721
  }
710
722
 
@@ -1133,7 +1145,9 @@ export function useFileUpload(
1133
1145
  if (data.status === 'completed') {
1134
1146
  workflowRun.value.status = 'completed';
1135
1147
  workflowRun.value.completedAt = now();
1136
- completeInvolvedFiles(Array.isArray(data.documents) ? data.documents : []);
1148
+ completeInvolvedFiles(
1149
+ Array.isArray(data.documents) ? data.documents : [],
1150
+ );
1137
1151
  emit({ type: 'workflow:completed', runId });
1138
1152
  } else if (data.status === 'failed' || data.status === 'error') {
1139
1153
  workflowRun.value.status = 'failed';
@@ -0,0 +1,202 @@
1
+ import { createDocumentUploadProvider } from './useFileUploadWrapper';
2
+ import type { DocumentUploadConfig } from './types';
3
+
4
+ function createFile(name: string, size = 100): File {
5
+ return new File(['x'.repeat(size)], name, { type: 'application/pdf' });
6
+ }
7
+
8
+ function createMockFetchResponse(body: unknown, status = 200) {
9
+ return Promise.resolve({
10
+ ok: status >= 200 && status < 300,
11
+ status,
12
+ headers: new Headers({ 'content-length': '1' }),
13
+ json: () => Promise.resolve(body),
14
+ body: null,
15
+ });
16
+ }
17
+
18
+ function makeInputEvent(files: File[]): Event {
19
+ const input = document.createElement('input');
20
+ input.type = 'file';
21
+ Object.defineProperty(input, 'files', {
22
+ value: files,
23
+ writable: true,
24
+ });
25
+ return { target: input } as unknown as Event;
26
+ }
27
+
28
+ function buildConfig(
29
+ overrides?: Partial<DocumentUploadConfig>,
30
+ ): DocumentUploadConfig {
31
+ return {
32
+ baseUrl: 'https://test.example.com',
33
+ userId: 'user-1',
34
+ workflowId: 'wf-1',
35
+ searchStoreConfig: {
36
+ models: [
37
+ {
38
+ type: 'dense',
39
+ dimension: 1024,
40
+ distance: 'cosine',
41
+ modality: 'text',
42
+ embedding_model: 'test-model',
43
+ },
44
+ ],
45
+ fusion_strategy: { type: 'rrf' },
46
+ },
47
+ workflowConfig: { name: 'wf-1' },
48
+ ...overrides,
49
+ };
50
+ }
51
+
52
+ describe('useFileUploadWrapper handleFilesSelected', () => {
53
+ let fetchMock: ReturnType<typeof vi.fn>;
54
+
55
+ beforeEach(() => {
56
+ fetchMock = vi.fn();
57
+ vi.stubGlobal('fetch', fetchMock);
58
+
59
+ fetchMock.mockImplementation((url: string, init?: RequestInit) => {
60
+ const method = init?.method ?? 'GET';
61
+
62
+ if (method === 'GET' && url.includes('search-stores')) {
63
+ return createMockFetchResponse([{ id: 'store-1' }]);
64
+ }
65
+ if (method === 'POST' && url.includes('/files')) {
66
+ return createMockFetchResponse([{ id: 'remote-1' }]);
67
+ }
68
+ if (method === 'POST' && url.includes('/workflows')) {
69
+ return createMockFetchResponse({ id: 'run-1' });
70
+ }
71
+ if (url.includes('/event-stream')) {
72
+ return createMockFetchResponse(null, 200).then((res) => ({
73
+ ...res,
74
+ body: new ReadableStream({
75
+ start(controller) {
76
+ controller.close();
77
+ },
78
+ }),
79
+ }));
80
+ }
81
+ return createMockFetchResponse({});
82
+ });
83
+ });
84
+
85
+ afterEach(() => {
86
+ vi.unstubAllGlobals();
87
+ });
88
+
89
+ it('exposes maxFilesPerUpload from config', () => {
90
+ const provider = createDocumentUploadProvider(
91
+ buildConfig({ maxFilesPerUpload: 7 }),
92
+ );
93
+ const result = provider.useDocumentUpload('conv-1');
94
+ expect(result.maxFilesPerUpload).toBe(7);
95
+ });
96
+
97
+ it('defaults maxFilesPerUpload to 20 when not configured', () => {
98
+ const provider = createDocumentUploadProvider(buildConfig());
99
+ const result = provider.useDocumentUpload('conv-1');
100
+ expect(result.maxFilesPerUpload).toBe(20);
101
+ });
102
+
103
+ it('uploads all files when within the limit', async () => {
104
+ const provider = createDocumentUploadProvider(
105
+ buildConfig({ maxFilesPerUpload: 5 }),
106
+ );
107
+ const { handleFilesSelected } = provider.useDocumentUpload('conv-1');
108
+
109
+ const onFilesExceeded = vi.fn();
110
+ const event = makeInputEvent([createFile('a.pdf'), createFile('b.pdf')]);
111
+
112
+ handleFilesSelected(event, { onFilesExceeded });
113
+
114
+ expect(onFilesExceeded).not.toHaveBeenCalled();
115
+ });
116
+
117
+ it('truncates files to available slots and calls onFilesExceeded', () => {
118
+ const provider = createDocumentUploadProvider(
119
+ buildConfig({ maxFilesPerUpload: 2 }),
120
+ );
121
+ const { handleFilesSelected } = provider.useDocumentUpload('conv-1');
122
+
123
+ const onFilesExceeded = vi.fn();
124
+ const event = makeInputEvent([
125
+ createFile('a.pdf'),
126
+ createFile('b.pdf'),
127
+ createFile('c.pdf'),
128
+ createFile('d.pdf'),
129
+ ]);
130
+
131
+ handleFilesSelected(event, { onFilesExceeded });
132
+
133
+ expect(onFilesExceeded).toHaveBeenCalledWith({
134
+ selected: 4,
135
+ allowed: 2,
136
+ kept: 2,
137
+ });
138
+ });
139
+
140
+ it('resets input value after handling', () => {
141
+ const provider = createDocumentUploadProvider(
142
+ buildConfig({ maxFilesPerUpload: 5 }),
143
+ );
144
+ const { handleFilesSelected } = provider.useDocumentUpload('conv-1');
145
+
146
+ const event = makeInputEvent([createFile('a.pdf')]);
147
+ const input = (event as any).target as HTMLInputElement;
148
+
149
+ const valueSetter = vi.spyOn(input, 'value', 'set');
150
+
151
+ handleFilesSelected(event);
152
+
153
+ expect(valueSetter).toHaveBeenCalledWith('');
154
+ });
155
+
156
+ it('does not upload when no slots are available', async () => {
157
+ const provider = createDocumentUploadProvider(
158
+ buildConfig({ maxFilesPerUpload: 0 }),
159
+ );
160
+ const { handleFilesSelected } = provider.useDocumentUpload('conv-1');
161
+
162
+ const onFilesExceeded = vi.fn();
163
+ const event = makeInputEvent([createFile('a.pdf')]);
164
+
165
+ handleFilesSelected(event, { onFilesExceeded });
166
+
167
+ expect(onFilesExceeded).toHaveBeenCalledWith({
168
+ selected: 1,
169
+ allowed: 0,
170
+ kept: 0,
171
+ });
172
+ });
173
+
174
+ it('does not call onFilesExceeded when exactly at the limit', () => {
175
+ const provider = createDocumentUploadProvider(
176
+ buildConfig({ maxFilesPerUpload: 3 }),
177
+ );
178
+ const { handleFilesSelected } = provider.useDocumentUpload('conv-1');
179
+
180
+ const onFilesExceeded = vi.fn();
181
+ const event = makeInputEvent([
182
+ createFile('a.pdf'),
183
+ createFile('b.pdf'),
184
+ createFile('c.pdf'),
185
+ ]);
186
+
187
+ handleFilesSelected(event, { onFilesExceeded });
188
+
189
+ expect(onFilesExceeded).not.toHaveBeenCalled();
190
+ });
191
+
192
+ it('works without onFilesExceeded callback (no crash)', () => {
193
+ const provider = createDocumentUploadProvider(
194
+ buildConfig({ maxFilesPerUpload: 1 }),
195
+ );
196
+ const { handleFilesSelected } = provider.useDocumentUpload('conv-1');
197
+
198
+ const event = makeInputEvent([createFile('a.pdf'), createFile('b.pdf')]);
199
+
200
+ expect(() => handleFilesSelected(event)).not.toThrow();
201
+ });
202
+ });
@@ -9,6 +9,7 @@ import type {
9
9
  DocumentUploadConfig,
10
10
  DocumentUploadProvider,
11
11
  DocumentUploadReturn,
12
+ HandleFilesSelectedOptions,
12
13
  UploadEvent,
13
14
  } from './types';
14
15
  import { useFileUpload } from './useFileUpload';
@@ -166,6 +167,7 @@ export function createDocumentUploadProvider(
166
167
  workflowConfig,
167
168
  persist = true,
168
169
  maxConcurrency = 3,
170
+ maxFilesPerUpload,
169
171
  } = config;
170
172
 
171
173
  const defaultHeaders: Record<string, string> = {
@@ -249,6 +251,7 @@ export function createDocumentUploadProvider(
249
251
  workflowId,
250
252
  persist,
251
253
  maxConcurrency,
254
+ maxFilesPerUpload,
252
255
  onEvent,
253
256
  });
254
257
  }
@@ -262,6 +265,7 @@ export function createDocumentUploadProvider(
262
265
  ): DocumentUploadReturn {
263
266
  const fileInput = ref<HTMLInputElement | null>(null);
264
267
  const upload = getUploadInstance();
268
+ const resolvedMaxFiles = upload.getSupportedFileTypes().maxFilesPerUpload;
265
269
  const storeId = ref<string>(resolvedStoreId ?? '');
266
270
 
267
271
  const currentScope = shallowRef<ScopedFileView | null>(
@@ -360,10 +364,27 @@ export function createDocumentUploadProvider(
360
364
  }
361
365
  }
362
366
 
363
- function handleFilesSelected(event: Event) {
367
+ function handleFilesSelected(
368
+ event: Event,
369
+ options?: HandleFilesSelectedOptions,
370
+ ) {
364
371
  const input = event.target as HTMLInputElement;
365
- const fileList = Array.from(input.files ?? []);
366
- uploadFiles(fileList);
372
+ let fileList = Array.from(input.files ?? []);
373
+ const availableSlots = resolvedMaxFiles - unassignedFiles.value.length;
374
+
375
+ if (fileList.length > availableSlots) {
376
+ const kept = Math.max(0, availableSlots);
377
+ options?.onFilesExceeded?.({
378
+ selected: fileList.length,
379
+ allowed: availableSlots,
380
+ kept,
381
+ });
382
+ fileList = fileList.slice(0, kept);
383
+ }
384
+
385
+ if (fileList.length > 0) {
386
+ uploadFiles(fileList);
387
+ }
367
388
  input.value = '';
368
389
  }
369
390
 
@@ -371,6 +392,7 @@ export function createDocumentUploadProvider(
371
392
  upload,
372
393
  storeId,
373
394
  fileInput,
395
+ maxFilesPerUpload: resolvedMaxFiles,
374
396
  uploadFiles,
375
397
  unassignedFiles,
376
398
  assignFilesToMessage,