@studyfetch/sdk 1.42.0 → 1.45.0

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 (194) hide show
  1. package/CHANGELOG.md +57 -0
  2. package/internal/to-file.d.mts +1 -1
  3. package/internal/to-file.d.ts +1 -1
  4. package/internal/to-file.js +1 -1
  5. package/internal/to-file.mjs +1 -1
  6. package/package.json +1 -1
  7. package/resources/v1/assignment-grader/assignment-grader.d.mts +12 -0
  8. package/resources/v1/assignment-grader/assignment-grader.d.mts.map +1 -1
  9. package/resources/v1/assignment-grader/assignment-grader.d.ts +12 -0
  10. package/resources/v1/assignment-grader/assignment-grader.d.ts.map +1 -1
  11. package/resources/v1/assignment-grader/assignment-grader.js.map +1 -1
  12. package/resources/v1/assignment-grader/assignment-grader.mjs.map +1 -1
  13. package/resources/v1/assignment-grader/rubric-templates.d.mts +8 -0
  14. package/resources/v1/assignment-grader/rubric-templates.d.mts.map +1 -1
  15. package/resources/v1/assignment-grader/rubric-templates.d.ts +8 -0
  16. package/resources/v1/assignment-grader/rubric-templates.d.ts.map +1 -1
  17. package/resources/v1/chat.d.mts +53 -1
  18. package/resources/v1/chat.d.mts.map +1 -1
  19. package/resources/v1/chat.d.ts +53 -1
  20. package/resources/v1/chat.d.ts.map +1 -1
  21. package/resources/v1/chat.js +30 -0
  22. package/resources/v1/chat.js.map +1 -1
  23. package/resources/v1/chat.mjs +30 -0
  24. package/resources/v1/chat.mjs.map +1 -1
  25. package/resources/v1/components.d.mts +37 -1
  26. package/resources/v1/components.d.mts.map +1 -1
  27. package/resources/v1/components.d.ts +37 -1
  28. package/resources/v1/components.d.ts.map +1 -1
  29. package/resources/v1/embed/context.d.mts +61 -0
  30. package/resources/v1/embed/context.d.mts.map +1 -0
  31. package/resources/v1/embed/context.d.ts +61 -0
  32. package/resources/v1/embed/context.d.ts.map +1 -0
  33. package/resources/v1/embed/context.js +61 -0
  34. package/resources/v1/embed/context.js.map +1 -0
  35. package/resources/v1/embed/context.mjs +57 -0
  36. package/resources/v1/embed/context.mjs.map +1 -0
  37. package/resources/v1/embed/embed.d.mts +4 -0
  38. package/resources/v1/embed/embed.d.mts.map +1 -1
  39. package/resources/v1/embed/embed.d.ts +4 -0
  40. package/resources/v1/embed/embed.d.ts.map +1 -1
  41. package/resources/v1/embed/embed.js +4 -0
  42. package/resources/v1/embed/embed.js.map +1 -1
  43. package/resources/v1/embed/embed.mjs +4 -0
  44. package/resources/v1/embed/embed.mjs.map +1 -1
  45. package/resources/v1/embed/index.d.mts +1 -0
  46. package/resources/v1/embed/index.d.mts.map +1 -1
  47. package/resources/v1/embed/index.d.ts +1 -0
  48. package/resources/v1/embed/index.d.ts.map +1 -1
  49. package/resources/v1/embed/index.js +3 -1
  50. package/resources/v1/embed/index.js.map +1 -1
  51. package/resources/v1/embed/index.mjs +1 -0
  52. package/resources/v1/embed/index.mjs.map +1 -1
  53. package/resources/v1/folders.d.mts +25 -1
  54. package/resources/v1/folders.d.mts.map +1 -1
  55. package/resources/v1/folders.d.ts +25 -1
  56. package/resources/v1/folders.d.ts.map +1 -1
  57. package/resources/v1/folders.js +11 -0
  58. package/resources/v1/folders.js.map +1 -1
  59. package/resources/v1/folders.mjs +11 -0
  60. package/resources/v1/folders.mjs.map +1 -1
  61. package/resources/v1/index.d.mts +5 -3
  62. package/resources/v1/index.d.mts.map +1 -1
  63. package/resources/v1/index.d.ts +5 -3
  64. package/resources/v1/index.d.ts.map +1 -1
  65. package/resources/v1/index.js +5 -1
  66. package/resources/v1/index.js.map +1 -1
  67. package/resources/v1/index.mjs +2 -0
  68. package/resources/v1/index.mjs.map +1 -1
  69. package/resources/v1/materials/index.d.mts +1 -1
  70. package/resources/v1/materials/index.d.mts.map +1 -1
  71. package/resources/v1/materials/index.d.ts +1 -1
  72. package/resources/v1/materials/index.d.ts.map +1 -1
  73. package/resources/v1/materials/index.js.map +1 -1
  74. package/resources/v1/materials/index.mjs.map +1 -1
  75. package/resources/v1/materials/materials.d.mts +92 -1
  76. package/resources/v1/materials/materials.d.mts.map +1 -1
  77. package/resources/v1/materials/materials.d.ts +92 -1
  78. package/resources/v1/materials/materials.d.ts.map +1 -1
  79. package/resources/v1/materials/materials.js +25 -0
  80. package/resources/v1/materials/materials.js.map +1 -1
  81. package/resources/v1/materials/materials.mjs +25 -0
  82. package/resources/v1/materials/materials.mjs.map +1 -1
  83. package/resources/v1/materials/upload.d.mts +38 -4
  84. package/resources/v1/materials/upload.d.mts.map +1 -1
  85. package/resources/v1/materials/upload.d.ts +38 -4
  86. package/resources/v1/materials/upload.d.ts.map +1 -1
  87. package/resources/v1/materials/upload.js +20 -3
  88. package/resources/v1/materials/upload.js.map +1 -1
  89. package/resources/v1/materials/upload.mjs +19 -2
  90. package/resources/v1/materials/upload.mjs.map +1 -1
  91. package/resources/v1/pdf-generator/get.d.mts +65 -0
  92. package/resources/v1/pdf-generator/get.d.mts.map +1 -0
  93. package/resources/v1/pdf-generator/get.d.ts +65 -0
  94. package/resources/v1/pdf-generator/get.d.ts.map +1 -0
  95. package/resources/v1/pdf-generator/get.js +9 -0
  96. package/resources/v1/pdf-generator/get.js.map +1 -0
  97. package/resources/v1/pdf-generator/get.mjs +5 -0
  98. package/resources/v1/pdf-generator/get.mjs.map +1 -0
  99. package/resources/v1/pdf-generator/index.d.mts +3 -0
  100. package/resources/v1/pdf-generator/index.d.mts.map +1 -0
  101. package/resources/v1/pdf-generator/index.d.ts +3 -0
  102. package/resources/v1/pdf-generator/index.d.ts.map +1 -0
  103. package/resources/v1/pdf-generator/index.js +9 -0
  104. package/resources/v1/pdf-generator/index.js.map +1 -0
  105. package/resources/v1/pdf-generator/index.mjs +4 -0
  106. package/resources/v1/pdf-generator/index.mjs.map +1 -0
  107. package/resources/v1/pdf-generator/pdf-generator.d.mts +109 -0
  108. package/resources/v1/pdf-generator/pdf-generator.d.mts.map +1 -0
  109. package/resources/v1/pdf-generator/pdf-generator.d.ts +109 -0
  110. package/resources/v1/pdf-generator/pdf-generator.d.ts.map +1 -0
  111. package/resources/v1/pdf-generator/pdf-generator.js +70 -0
  112. package/resources/v1/pdf-generator/pdf-generator.js.map +1 -0
  113. package/resources/v1/pdf-generator/pdf-generator.mjs +65 -0
  114. package/resources/v1/pdf-generator/pdf-generator.mjs.map +1 -0
  115. package/resources/v1/pdf-generator.d.mts +2 -0
  116. package/resources/v1/pdf-generator.d.mts.map +1 -0
  117. package/resources/v1/pdf-generator.d.ts +2 -0
  118. package/resources/v1/pdf-generator.d.ts.map +1 -0
  119. package/resources/v1/pdf-generator.js +6 -0
  120. package/resources/v1/pdf-generator.js.map +1 -0
  121. package/resources/v1/pdf-generator.mjs +3 -0
  122. package/resources/v1/pdf-generator.mjs.map +1 -0
  123. package/resources/v1/performance-insights/conversations.d.mts +131 -0
  124. package/resources/v1/performance-insights/conversations.d.mts.map +1 -0
  125. package/resources/v1/performance-insights/conversations.d.ts +131 -0
  126. package/resources/v1/performance-insights/conversations.d.ts.map +1 -0
  127. package/resources/v1/performance-insights/conversations.js +131 -0
  128. package/resources/v1/performance-insights/conversations.js.map +1 -0
  129. package/resources/v1/performance-insights/conversations.mjs +127 -0
  130. package/resources/v1/performance-insights/conversations.mjs.map +1 -0
  131. package/resources/v1/performance-insights/index.d.mts +3 -0
  132. package/resources/v1/performance-insights/index.d.mts.map +1 -0
  133. package/resources/v1/performance-insights/index.d.ts +3 -0
  134. package/resources/v1/performance-insights/index.d.ts.map +1 -0
  135. package/resources/v1/performance-insights/index.js +9 -0
  136. package/resources/v1/performance-insights/index.js.map +1 -0
  137. package/resources/v1/performance-insights/index.mjs +4 -0
  138. package/resources/v1/performance-insights/index.mjs.map +1 -0
  139. package/resources/v1/performance-insights/performance-insights.d.mts +139 -0
  140. package/resources/v1/performance-insights/performance-insights.d.mts.map +1 -0
  141. package/resources/v1/performance-insights/performance-insights.d.ts +139 -0
  142. package/resources/v1/performance-insights/performance-insights.d.ts.map +1 -0
  143. package/resources/v1/performance-insights/performance-insights.js +55 -0
  144. package/resources/v1/performance-insights/performance-insights.js.map +1 -0
  145. package/resources/v1/performance-insights/performance-insights.mjs +50 -0
  146. package/resources/v1/performance-insights/performance-insights.mjs.map +1 -0
  147. package/resources/v1/performance-insights.d.mts +2 -0
  148. package/resources/v1/performance-insights.d.mts.map +1 -0
  149. package/resources/v1/performance-insights.d.ts +2 -0
  150. package/resources/v1/performance-insights.d.ts.map +1 -0
  151. package/resources/v1/performance-insights.js +6 -0
  152. package/resources/v1/performance-insights.js.map +1 -0
  153. package/resources/v1/performance-insights.mjs +3 -0
  154. package/resources/v1/performance-insights.mjs.map +1 -0
  155. package/resources/v1/usage.d.mts +8 -0
  156. package/resources/v1/usage.d.mts.map +1 -1
  157. package/resources/v1/usage.d.ts +8 -0
  158. package/resources/v1/usage.d.ts.map +1 -1
  159. package/resources/v1/v1.d.mts +14 -6
  160. package/resources/v1/v1.d.mts.map +1 -1
  161. package/resources/v1/v1.d.ts +14 -6
  162. package/resources/v1/v1.d.ts.map +1 -1
  163. package/resources/v1/v1.js +8 -0
  164. package/resources/v1/v1.js.map +1 -1
  165. package/resources/v1/v1.mjs +8 -0
  166. package/resources/v1/v1.mjs.map +1 -1
  167. package/src/internal/to-file.ts +1 -1
  168. package/src/resources/v1/assignment-grader/assignment-grader.ts +15 -0
  169. package/src/resources/v1/assignment-grader/rubric-templates.ts +10 -0
  170. package/src/resources/v1/chat.ts +81 -1
  171. package/src/resources/v1/components.ts +45 -1
  172. package/src/resources/v1/embed/context.ts +96 -0
  173. package/src/resources/v1/embed/embed.ts +11 -0
  174. package/src/resources/v1/embed/index.ts +6 -0
  175. package/src/resources/v1/folders.ts +35 -0
  176. package/src/resources/v1/index.ts +18 -1
  177. package/src/resources/v1/materials/index.ts +2 -0
  178. package/src/resources/v1/materials/materials.ts +117 -0
  179. package/src/resources/v1/materials/upload.ts +74 -7
  180. package/src/resources/v1/pdf-generator/get.ts +80 -0
  181. package/src/resources/v1/pdf-generator/index.ts +10 -0
  182. package/src/resources/v1/pdf-generator/pdf-generator.ts +147 -0
  183. package/src/resources/v1/pdf-generator.ts +3 -0
  184. package/src/resources/v1/performance-insights/conversations.ts +238 -0
  185. package/src/resources/v1/performance-insights/index.ts +17 -0
  186. package/src/resources/v1/performance-insights/performance-insights.ts +214 -0
  187. package/src/resources/v1/performance-insights.ts +3 -0
  188. package/src/resources/v1/usage.ts +10 -0
  189. package/src/resources/v1/v1.ts +49 -2
  190. package/src/version.ts +1 -1
  191. package/version.d.mts +1 -1
  192. package/version.d.ts +1 -1
  193. package/version.js +1 -1
  194. package/version.mjs +1 -1
@@ -9,7 +9,7 @@ export {
9
9
  type AssignmentGraderGetAllResponse,
10
10
  type AssignmentGraderCreateParams,
11
11
  } from './assignment-grader/index';
12
- export { Chat, type ChatStreamParams } from './chat';
12
+ export { Chat, type ChatRetrieveFeedbackParams, type ChatStreamParams } from './chat';
13
13
  export {
14
14
  ChatAnalytics,
15
15
  type ChatAnalyticsResponse,
@@ -33,6 +33,7 @@ export {
33
33
  Folders,
34
34
  type FolderMetadata,
35
35
  type FolderCreateResponse,
36
+ type FolderGetByNameResponse,
36
37
  type FolderRetrieveResponse,
37
38
  type FolderUpdateResponse,
38
39
  type FolderListResponse,
@@ -40,6 +41,7 @@ export {
40
41
  type FolderListMaterialsResponse,
41
42
  type FolderMoveResponse,
42
43
  type FolderCreateParams,
44
+ type FolderGetByNameParams,
43
45
  type FolderUpdateParams,
44
46
  type FolderListParams,
45
47
  type FolderListMaterialsParams,
@@ -52,9 +54,11 @@ export {
52
54
  type MaterialResponse,
53
55
  type Reference,
54
56
  type MaterialListResponse,
57
+ type MaterialCancelJobResponse,
55
58
  type MaterialCreateBatchUploadURLsResponse,
56
59
  type MaterialGetDebugInfoResponse,
57
60
  type MaterialGetDownloadURLResponse,
61
+ type MaterialGetJobStatusResponse,
58
62
  type MaterialSearchResponse,
59
63
  type MaterialCreateParams,
60
64
  type MaterialUpdateParams,
@@ -68,6 +72,19 @@ export {
68
72
  type MaterialRenameParams,
69
73
  type MaterialSearchParams,
70
74
  } from './materials/index';
75
+ export {
76
+ PdfGenerator,
77
+ type PdfGeneratorCreateResponse,
78
+ type PdfGeneratorDeleteResponse,
79
+ type PdfGeneratorGetAllResponse,
80
+ type PdfGeneratorCreateParams,
81
+ } from './pdf-generator/index';
82
+ export {
83
+ PerformanceInsights,
84
+ type PerformanceInsightsGenerateEmbedResponse,
85
+ type PerformanceInsightsGenerateEmbedParams,
86
+ type PerformanceInsightsStreamParams,
87
+ } from './performance-insights/index';
71
88
  export {
72
89
  Usage,
73
90
  type UsageGetStatsParams,
@@ -8,9 +8,11 @@ export {
8
8
  type MaterialResponse,
9
9
  type Reference,
10
10
  type MaterialListResponse,
11
+ type MaterialCancelJobResponse,
11
12
  type MaterialCreateBatchUploadURLsResponse,
12
13
  type MaterialGetDebugInfoResponse,
13
14
  type MaterialGetDownloadURLResponse,
15
+ type MaterialGetJobStatusResponse,
14
16
  type MaterialSearchResponse,
15
17
  type MaterialCreateParams,
16
18
  type MaterialUpdateParams,
@@ -96,6 +96,18 @@ export class Materials extends APIResource {
96
96
  });
97
97
  }
98
98
 
99
+ /**
100
+ * Attempts to cancel a currently running PDF processing job
101
+ *
102
+ * @example
103
+ * ```ts
104
+ * const response = await client.v1.materials.cancelJob('id');
105
+ * ```
106
+ */
107
+ cancelJob(id: string, options?: RequestOptions): APIPromise<MaterialCancelJobResponse> {
108
+ return this._client.post(path`/api/v1/materials/${id}/cancel-job`, options);
109
+ }
110
+
99
111
  /**
100
112
  * Creates a material and waits for processing to finish before returning. Useful
101
113
  * for synchronous API usage.
@@ -211,6 +223,21 @@ export class Materials extends APIResource {
211
223
  return this._client.get(path`/api/v1/materials/${id}/download-url`, { query, ...options });
212
224
  }
213
225
 
226
+ /**
227
+ * Returns the current status of a PDF processing job including progress
228
+ * information
229
+ *
230
+ * @example
231
+ * ```ts
232
+ * const response = await client.v1.materials.getJobStatus(
233
+ * 'id',
234
+ * );
235
+ * ```
236
+ */
237
+ getJobStatus(id: string, options?: RequestOptions): APIPromise<MaterialGetJobStatusResponse> {
238
+ return this._client.get(path`/api/v1/materials/${id}/job-status`, options);
239
+ }
240
+
214
241
  /**
215
242
  * Move material to a different folder
216
243
  *
@@ -484,6 +511,12 @@ export interface MaterialListResponse {
484
511
  totalPages?: number;
485
512
  }
486
513
 
514
+ export interface MaterialCancelJobResponse {
515
+ message?: string;
516
+
517
+ success?: boolean;
518
+ }
519
+
487
520
  export type MaterialCreateBatchUploadURLsResponse =
488
521
  Array<MaterialCreateBatchUploadURLsResponse.MaterialCreateBatchUploadURLsResponseItem>;
489
522
 
@@ -574,6 +607,88 @@ export interface MaterialGetDownloadURLResponse {
574
607
  downloadUrl: string;
575
608
  }
576
609
 
610
+ export interface MaterialGetJobStatusResponse {
611
+ /**
612
+ * Job completion time
613
+ */
614
+ completedAt?: string;
615
+
616
+ /**
617
+ * Error message if job failed
618
+ */
619
+ error?: string;
620
+
621
+ /**
622
+ * Unique job identifier
623
+ */
624
+ jobId?: string;
625
+
626
+ progress?: MaterialGetJobStatusResponse.Progress;
627
+
628
+ resultSummary?: MaterialGetJobStatusResponse.ResultSummary;
629
+
630
+ /**
631
+ * Job start time
632
+ */
633
+ startedAt?: string;
634
+
635
+ /**
636
+ * Current job status
637
+ */
638
+ status?: 'pending' | 'running' | 'completed' | 'failed' | 'cancelled';
639
+ }
640
+
641
+ export namespace MaterialGetJobStatusResponse {
642
+ export interface Progress {
643
+ /**
644
+ * Current batch being processed
645
+ */
646
+ currentBatch?: number;
647
+
648
+ /**
649
+ * Completion percentage (0-100)
650
+ */
651
+ percentage?: number;
652
+
653
+ /**
654
+ * Images processed so far
655
+ */
656
+ processedImages?: number;
657
+
658
+ /**
659
+ * Total number of batches
660
+ */
661
+ totalBatches?: number;
662
+
663
+ /**
664
+ * Total images to process
665
+ */
666
+ totalImages?: number;
667
+ }
668
+
669
+ export interface ResultSummary {
670
+ /**
671
+ * Number of images processed
672
+ */
673
+ imagesProcessed?: number;
674
+
675
+ /**
676
+ * Total processing time in milliseconds
677
+ */
678
+ processingTimeMs?: number;
679
+
680
+ /**
681
+ * Whether text was extracted
682
+ */
683
+ textExtracted?: boolean;
684
+
685
+ /**
686
+ * Length of extracted text
687
+ */
688
+ textLength?: number;
689
+ }
690
+ }
691
+
577
692
  export interface MaterialSearchResponse {
578
693
  /**
579
694
  * Whether results were filtered by scope
@@ -922,9 +1037,11 @@ export declare namespace Materials {
922
1037
  type MaterialResponse as MaterialResponse,
923
1038
  type Reference as Reference,
924
1039
  type MaterialListResponse as MaterialListResponse,
1040
+ type MaterialCancelJobResponse as MaterialCancelJobResponse,
925
1041
  type MaterialCreateBatchUploadURLsResponse as MaterialCreateBatchUploadURLsResponse,
926
1042
  type MaterialGetDebugInfoResponse as MaterialGetDebugInfoResponse,
927
1043
  type MaterialGetDownloadURLResponse as MaterialGetDownloadURLResponse,
1044
+ type MaterialGetJobStatusResponse as MaterialGetJobStatusResponse,
928
1045
  type MaterialSearchResponse as MaterialSearchResponse,
929
1046
  type MaterialCreateParams as MaterialCreateParams,
930
1047
  type MaterialUpdateParams as MaterialUpdateParams,
@@ -3,7 +3,7 @@
3
3
  import { APIResource } from '../../../core/resource';
4
4
  import * as MaterialsAPI from './materials';
5
5
  import { APIPromise } from '../../../core/api-promise';
6
- import { type Uploadable } from '../../../core/uploads';
6
+ import { toFile, type Uploadable } from '../../../core/uploads';
7
7
  import { RequestOptions } from '../../../internal/request-options';
8
8
  import { multipartFormRequestOptions } from '../../../internal/uploads';
9
9
 
@@ -65,7 +65,7 @@ export class Upload extends APIResource {
65
65
  ): APIPromise<MaterialsAPI.MaterialResponse> {
66
66
  return this._client.post(
67
67
  '/api/v1/materials/upload',
68
- multipartFormRequestOptions({ body, ...options }, this._client),
68
+ multipartUploadRequestOptions(body, options, this._client),
69
69
  );
70
70
  }
71
71
 
@@ -88,7 +88,7 @@ export class Upload extends APIResource {
88
88
  ): APIPromise<MaterialsAPI.MaterialResponse> {
89
89
  return this._client.post(
90
90
  '/api/v1/materials/upload/file-and-process',
91
- multipartFormRequestOptions({ body, ...options }, this._client),
91
+ multipartUploadRequestOptions(body, options, this._client),
92
92
  );
93
93
  }
94
94
 
@@ -201,16 +201,29 @@ export interface UploadUploadFileParams {
201
201
  */
202
202
  name: string;
203
203
 
204
+ /**
205
+ * Content-Type/MIME type of the file (e.g., video/mp4, application/pdf).
206
+ * If not provided, the uploadable's existing type is used.
207
+ */
208
+ contentType?: string;
209
+
204
210
  /**
205
211
  * Whether to extract images from files (true/false, default: true)
206
212
  */
207
213
  extractImages?: string;
208
214
 
209
215
  /**
210
- * Folder ID (optional)
216
+ * Folder ID (optional). If folderPath is provided, folderId will be ignored.
211
217
  */
212
218
  folderId?: string;
213
219
 
220
+ /**
221
+ * Relative folder path (e.g., "folder1/folder2"). Folders will be created if
222
+ * they don't exist. The filename can be included and will be extracted
223
+ * automatically.
224
+ */
225
+ folderPath?: string;
226
+
214
227
  /**
215
228
  * JSON string of references array (optional)
216
229
  */
@@ -225,16 +238,29 @@ export interface UploadUploadFileAndProcessParams {
225
238
  */
226
239
  name: string;
227
240
 
241
+ /**
242
+ * Content-Type/MIME type of the file (e.g., video/mp4, application/pdf).
243
+ * If not provided, the uploadable's existing type is used.
244
+ */
245
+ contentType?: string;
246
+
228
247
  /**
229
248
  * Whether to extract images from files (true/false, default: true)
230
249
  */
231
250
  extractImages?: string;
232
251
 
233
252
  /**
234
- * Folder ID (optional)
253
+ * Folder ID (optional). If folderPath is provided, folderId will be ignored.
235
254
  */
236
255
  folderId?: string;
237
256
 
257
+ /**
258
+ * Relative folder path (e.g., "folder1/folder2"). Folders will be created if
259
+ * they don't exist. The filename can be included and will be extracted
260
+ * automatically.
261
+ */
262
+ folderPath?: string;
263
+
238
264
  /**
239
265
  * Polling interval in milliseconds (default: 2000)
240
266
  */
@@ -258,9 +284,16 @@ export interface UploadUploadFromURLParams {
258
284
  url: string;
259
285
 
260
286
  /**
261
- * Folder ID (optional)
287
+ * Folder ID (optional). If folderPath is provided, folderId will be ignored.
262
288
  */
263
289
  folderId?: string;
290
+
291
+ /**
292
+ * Relative folder path (e.g., "folder1/folder2"). Folders will be created if
293
+ * they don't exist. The filename can be included and will be extracted
294
+ * automatically.
295
+ */
296
+ folderPath?: string;
264
297
  }
265
298
 
266
299
  export interface UploadUploadFromURLAndProcessParams {
@@ -275,10 +308,17 @@ export interface UploadUploadFromURLAndProcessParams {
275
308
  url: string;
276
309
 
277
310
  /**
278
- * Folder ID (optional)
311
+ * Folder ID (optional). If folderPath is provided, folderId will be ignored.
279
312
  */
280
313
  folderId?: string;
281
314
 
315
+ /**
316
+ * Relative folder path (e.g., "folder1/folder2"). Folders will be created if
317
+ * they don't exist. The filename can be included and will be extracted
318
+ * automatically.
319
+ */
320
+ folderPath?: string;
321
+
282
322
  /**
283
323
  * Polling interval in milliseconds (default: 2 seconds)
284
324
  */
@@ -306,3 +346,30 @@ export declare namespace Upload {
306
346
  type UploadUploadFromURLAndProcessParams as UploadUploadFromURLAndProcessParams,
307
347
  };
308
348
  }
349
+
350
+ type MultipartClient = Parameters<typeof multipartFormRequestOptions>[1];
351
+ type MultipartUploadBody = UploadUploadFileParams | UploadUploadFileAndProcessParams;
352
+
353
+ async function multipartUploadRequestOptions(
354
+ body: MultipartUploadBody,
355
+ options: RequestOptions | undefined,
356
+ client: MultipartClient,
357
+ ): Promise<RequestOptions> {
358
+ const { contentType, ...bodyWithoutContentType } = body;
359
+ const multipartBody =
360
+ contentType ?
361
+ { ...bodyWithoutContentType, file: await toUploadableWithContentType(body.file, contentType) }
362
+ : bodyWithoutContentType;
363
+
364
+ return multipartFormRequestOptions({ body: multipartBody, ...options }, client);
365
+ }
366
+
367
+ async function toUploadableWithContentType(file: Uploadable, contentType: string): Promise<Uploadable> {
368
+ const typedFile = await toFile(file, undefined, { type: contentType });
369
+ if (typedFile.type === contentType) return typedFile;
370
+
371
+ return new File([typedFile], typedFile.name, {
372
+ type: contentType,
373
+ lastModified: typedFile.lastModified,
374
+ });
375
+ }
@@ -0,0 +1,80 @@
1
+ // File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ import { APIResource } from '../../../core/resource';
4
+
5
+ export class Get extends APIResource {}
6
+
7
+ export interface PdfResponse {
8
+ /**
9
+ * PDF presentation ID
10
+ */
11
+ _id: string;
12
+
13
+ /**
14
+ * Creation timestamp
15
+ */
16
+ createdAt: string;
17
+
18
+ /**
19
+ * Locale of the presentation
20
+ */
21
+ locale: string;
22
+
23
+ /**
24
+ * Number of slides
25
+ */
26
+ numberOfSlides: number;
27
+
28
+ /**
29
+ * Organization ID
30
+ */
31
+ organizationId: string;
32
+
33
+ /**
34
+ * Topic of the presentation
35
+ */
36
+ topic: string;
37
+
38
+ /**
39
+ * Transcript of each slide
40
+ */
41
+ transcript: Array<PdfResponse.Transcript>;
42
+
43
+ /**
44
+ * Update timestamp
45
+ */
46
+ updatedAt: string;
47
+
48
+ /**
49
+ * URL to the generated PDF on S3
50
+ */
51
+ url: string;
52
+
53
+ /**
54
+ * URL to the generated PowerPoint (PPTX) on S3
55
+ */
56
+ pptxUrl?: string;
57
+
58
+ /**
59
+ * User ID
60
+ */
61
+ userId?: string;
62
+ }
63
+
64
+ export namespace PdfResponse {
65
+ export interface Transcript {
66
+ /**
67
+ * Description of the slide content and OCR text
68
+ */
69
+ descriptionOfPage: string;
70
+
71
+ /**
72
+ * Page number of the slide
73
+ */
74
+ pageNum: number;
75
+ }
76
+ }
77
+
78
+ export declare namespace Get {
79
+ export { type PdfResponse as PdfResponse };
80
+ }
@@ -0,0 +1,10 @@
1
+ // File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ export { Get, type PdfResponse } from './get';
4
+ export {
5
+ PdfGenerator,
6
+ type PdfGeneratorCreateResponse,
7
+ type PdfGeneratorDeleteResponse,
8
+ type PdfGeneratorGetAllResponse,
9
+ type PdfGeneratorCreateParams,
10
+ } from './pdf-generator';
@@ -0,0 +1,147 @@
1
+ // File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ import { APIResource } from '../../../core/resource';
4
+ import * as GetAPI from './get';
5
+ import { Get, PdfResponse } from './get';
6
+ import { APIPromise } from '../../../core/api-promise';
7
+ import { RequestOptions } from '../../../internal/request-options';
8
+ import { path } from '../../../internal/utils/path';
9
+
10
+ export class PdfGenerator extends APIResource {
11
+ get: GetAPI.Get = new GetAPI.Get(this._client);
12
+
13
+ /**
14
+ * Generate a new PDF presentation
15
+ *
16
+ * @example
17
+ * ```ts
18
+ * const pdfGenerator = await client.v1.pdfGenerator.create({
19
+ * locale: 'locale',
20
+ * numberOfSlides: 1,
21
+ * topic: 'topic',
22
+ * });
23
+ * ```
24
+ */
25
+ create(body: PdfGeneratorCreateParams, options?: RequestOptions): APIPromise<PdfGeneratorCreateResponse> {
26
+ return this._client.post('/api/v1/pdf-generator/create', { body, ...options });
27
+ }
28
+
29
+ /**
30
+ * Delete a PDF presentation by ID
31
+ *
32
+ * @example
33
+ * ```ts
34
+ * const pdfGenerator = await client.v1.pdfGenerator.delete(
35
+ * 'id',
36
+ * );
37
+ * ```
38
+ */
39
+ delete(id: string, options?: RequestOptions): APIPromise<PdfGeneratorDeleteResponse> {
40
+ return this._client.delete(path`/api/v1/pdf-generator/delete/${id}`, options);
41
+ }
42
+
43
+ /**
44
+ * Get all PDF presentations
45
+ *
46
+ * @example
47
+ * ```ts
48
+ * const pdfResponses = await client.v1.pdfGenerator.getAll();
49
+ * ```
50
+ */
51
+ getAll(options?: RequestOptions): APIPromise<PdfGeneratorGetAllResponse> {
52
+ return this._client.get('/api/v1/pdf-generator/get', options);
53
+ }
54
+
55
+ /**
56
+ * Get a PDF presentation by ID
57
+ *
58
+ * @example
59
+ * ```ts
60
+ * const pdfResponse = await client.v1.pdfGenerator.getByID(
61
+ * 'id',
62
+ * );
63
+ * ```
64
+ */
65
+ getByID(id: string, options?: RequestOptions): APIPromise<GetAPI.PdfResponse> {
66
+ return this._client.get(path`/api/v1/pdf-generator/get/${id}`, options);
67
+ }
68
+ }
69
+
70
+ export interface PdfGeneratorCreateResponse {
71
+ presentation?: GetAPI.PdfResponse;
72
+
73
+ success?: boolean;
74
+ }
75
+
76
+ export interface PdfGeneratorDeleteResponse {
77
+ message?: string;
78
+
79
+ success?: boolean;
80
+ }
81
+
82
+ export type PdfGeneratorGetAllResponse = Array<GetAPI.PdfResponse>;
83
+
84
+ export interface PdfGeneratorCreateParams {
85
+ /**
86
+ * Locale/language for the presentation (e.g., en-US, es-ES, fr-FR)
87
+ */
88
+ locale: string;
89
+
90
+ /**
91
+ * Number of slides to generate
92
+ */
93
+ numberOfSlides: number;
94
+
95
+ /**
96
+ * The topic for the PDF presentation
97
+ */
98
+ topic: string;
99
+
100
+ /**
101
+ * Custom images to use (required when imageMode is "provide-own")
102
+ */
103
+ customImages?: Array<PdfGeneratorCreateParams.CustomImage>;
104
+
105
+ /**
106
+ * Image handling mode: search (auto-search), provide-own (use custom images), none
107
+ * (no images, use icons)
108
+ */
109
+ imageMode?: 'search' | 'provide-own' | 'none';
110
+
111
+ /**
112
+ * Custom logo URL to use (optional, falls back to default StudyFetch logo)
113
+ */
114
+ logoUrl?: string;
115
+ }
116
+
117
+ export namespace PdfGeneratorCreateParams {
118
+ export interface CustomImage {
119
+ /**
120
+ * Description of what this image shows
121
+ */
122
+ description: string;
123
+
124
+ /**
125
+ * Base64-encoded image data (provide either url or base64)
126
+ */
127
+ base64?: string;
128
+
129
+ /**
130
+ * Image URL to download and use (provide either url or base64)
131
+ */
132
+ url?: string;
133
+ }
134
+ }
135
+
136
+ PdfGenerator.Get = Get;
137
+
138
+ export declare namespace PdfGenerator {
139
+ export {
140
+ type PdfGeneratorCreateResponse as PdfGeneratorCreateResponse,
141
+ type PdfGeneratorDeleteResponse as PdfGeneratorDeleteResponse,
142
+ type PdfGeneratorGetAllResponse as PdfGeneratorGetAllResponse,
143
+ type PdfGeneratorCreateParams as PdfGeneratorCreateParams,
144
+ };
145
+
146
+ export { Get as Get, type PdfResponse as PdfResponse };
147
+ }
@@ -0,0 +1,3 @@
1
+ // File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ export * from './pdf-generator/index';