@turinhub/tale-js-sdk 1.3.0 → 2.1.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 (56) hide show
  1. package/README.md +90 -13
  2. package/dist/acl/index.d.ts +62 -49
  3. package/dist/acl/index.js +262 -67
  4. package/dist/acl/types.d.ts +63 -98
  5. package/dist/app/index.d.ts +10 -0
  6. package/dist/app/index.js +198 -0
  7. package/dist/app/types.d.ts +101 -0
  8. package/dist/app/types.js +1 -0
  9. package/dist/app-token/index.d.ts +7 -0
  10. package/dist/app-token/index.js +58 -0
  11. package/dist/app-token/types.d.ts +25 -0
  12. package/dist/app-token/types.js +1 -0
  13. package/dist/attachment/index.d.ts +17 -0
  14. package/dist/attachment/index.js +247 -0
  15. package/dist/attachment/types.d.ts +82 -0
  16. package/dist/attachment/types.js +1 -0
  17. package/dist/attachment-type/index.d.ts +15 -0
  18. package/dist/attachment-type/index.js +203 -0
  19. package/dist/attachment-type/types.d.ts +60 -0
  20. package/dist/attachment-type/types.js +1 -0
  21. package/dist/auth/index.d.ts +21 -21
  22. package/dist/auth/index.js +66 -66
  23. package/dist/auth/types.d.ts +51 -51
  24. package/dist/cms/file.d.ts +88 -70
  25. package/dist/cms/file.js +228 -77
  26. package/dist/cms/folder.d.ts +9 -9
  27. package/dist/cms/folder.js +18 -18
  28. package/dist/cms/types.d.ts +58 -38
  29. package/dist/common/http.d.ts +17 -0
  30. package/dist/common/http.js +141 -0
  31. package/dist/common/types.d.ts +58 -63
  32. package/dist/index.d.ts +6 -1
  33. package/dist/index.js +4 -0
  34. package/dist/rbac/index.d.ts +37 -42
  35. package/dist/rbac/index.js +96 -98
  36. package/dist/rbac/types.d.ts +38 -40
  37. package/dist/status.d.ts +11 -11
  38. package/dist/status.js +30 -3
  39. package/dist/task/index.d.ts +15 -147
  40. package/dist/task/index.js +170 -161
  41. package/dist/task/types.d.ts +57 -81
  42. package/dist/task-type/index.d.ts +7 -7
  43. package/dist/task-type/index.js +12 -12
  44. package/dist/task-type/types.d.ts +18 -34
  45. package/dist/token.d.ts +3 -3
  46. package/dist/token.js +4 -4
  47. package/dist/user/index.d.ts +28 -29
  48. package/dist/user/index.js +69 -74
  49. package/dist/user/types.d.ts +32 -33
  50. package/dist/user-attribute/index.d.ts +4 -7
  51. package/dist/user-attribute/index.js +19 -22
  52. package/dist/user-attribute/types.d.ts +29 -29
  53. package/dist/user-group/index.d.ts +4 -223
  54. package/dist/user-group/index.js +61 -479
  55. package/dist/user-group/types.d.ts +1 -1
  56. package/package.json +1 -1
package/dist/cms/file.js CHANGED
@@ -34,9 +34,9 @@ function parseApiResponse(json, errorMessage, statusCode) {
34
34
  * import { getFile } from '@tale/client';
35
35
  *
36
36
  * try {
37
- * const file = await getFile('file_id_here');
38
- * console.log('File name:', file.file_name);
39
- * console.log('File type:', file.file_type);
37
+ * const file = await getFile('fileId_here');
38
+ * console.log('File name:', file.fileName);
39
+ * console.log('File type:', file.fileType);
40
40
  * } catch (error) {
41
41
  * console.error('Failed to get file:', error.message);
42
42
  * }
@@ -53,7 +53,7 @@ export async function getFile(fileId, options) {
53
53
  throw new ConfigurationError("Missing required environment variable: TALE_BASE_URL");
54
54
  }
55
55
  const url = String(base).replace(/\/+$/, "") +
56
- `/cms/v1/files/${encodeURIComponent(fileId)}`;
56
+ `/cms/v2/files/${encodeURIComponent(fileId)}`;
57
57
  let response;
58
58
  try {
59
59
  response = await globalThis.fetch(url, {
@@ -85,10 +85,10 @@ export async function getFile(fileId, options) {
85
85
  *
86
86
  * try {
87
87
  * const result = await listFiles({
88
- * folder_id: 'folder_id_here',
88
+ * folderId: 'folderId_here',
89
89
  * page: 0,
90
90
  * size: 20,
91
- * sort_by: 'createdAt'
91
+ * sort: 'createdAt'
92
92
  * });
93
93
  * console.log(`Found ${result.total} files`);
94
94
  * } catch (error) {
@@ -103,23 +103,22 @@ export async function listFiles(options) {
103
103
  if (!base) {
104
104
  throw new ConfigurationError("Missing required environment variable: TALE_BASE_URL");
105
105
  }
106
- const { appToken, baseUrl, folder_id, ...requestParams } = options || {};
107
- // If folder_id is provided, use folder-based endpoint
106
+ const { appToken, baseUrl, folderId, ...requestParams } = options || {};
107
+ // If folderId is provided, use folder-based endpoint
108
108
  let url;
109
- if (folder_id) {
109
+ if (folderId) {
110
110
  url =
111
111
  String(base).replace(/\/+$/, "") +
112
- `/cms/v1/folders/${encodeURIComponent(folder_id)}/files`;
112
+ `/cms/v2/folders/${encodeURIComponent(folderId)}/files`;
113
113
  }
114
114
  else {
115
- url = String(base).replace(/\/+$/, "") + "/cms/v1/files";
115
+ throw new ApiError("folderId is required for listing files", 400, "9400");
116
116
  }
117
117
  const urlObj = new URL(url);
118
118
  const queryParams = {
119
119
  page: 0,
120
- size: 10,
121
- sort_by: "createdAt",
122
- include_attachments: false,
120
+ size: 20,
121
+ sort: "createdAt,desc",
123
122
  ...requestParams,
124
123
  };
125
124
  Object.entries(queryParams).forEach(([key, value]) => {
@@ -159,9 +158,9 @@ export async function listFiles(options) {
159
158
  *
160
159
  * try {
161
160
  * const file = await createFile({
162
- * folder_id: 'folder_id_here',
163
- * file_name: 'My Document',
164
- * file_type: 'markdown',
161
+ * folderId: 'folderId_here',
162
+ * fileName: 'My Document',
163
+ * fileType: 'markdown',
165
164
  * content: '# Hello World'
166
165
  * });
167
166
  * console.log('File created:', file.id);
@@ -171,14 +170,14 @@ export async function listFiles(options) {
171
170
  * ```
172
171
  */
173
172
  export async function createFile(request, options) {
174
- if (!request.folder_id || request.folder_id.trim() === "") {
175
- throw new ApiError("folder_id is required", 400, "9400");
173
+ if (!request.folderId || request.folderId.trim() === "") {
174
+ throw new ApiError("folderId is required", 400, "9400");
176
175
  }
177
- if (!request.file_name || request.file_name.trim() === "") {
178
- throw new ApiError("file_name is required", 400, "9400");
176
+ if (!request.fileName || request.fileName.trim() === "") {
177
+ throw new ApiError("fileName is required", 400, "9400");
179
178
  }
180
- if (!request.file_type || request.file_type.trim() === "") {
181
- throw new ApiError("file_type is required", 400, "9400");
179
+ if (!request.fileType || request.fileType.trim() === "") {
180
+ throw new ApiError("fileType is required", 400, "9400");
182
181
  }
183
182
  const token = options?.appToken ?? (await getAppToken(options));
184
183
  const env = globalThis?.process?.env ?? import.meta?.env ?? undefined;
@@ -186,7 +185,7 @@ export async function createFile(request, options) {
186
185
  if (!base) {
187
186
  throw new ConfigurationError("Missing required environment variable: TALE_BASE_URL");
188
187
  }
189
- const url = String(base).replace(/\/+$/, "") + "/cms/v1/files";
188
+ const url = String(base).replace(/\/+$/, "") + "/cms/v2/files";
190
189
  let response;
191
190
  try {
192
191
  response = await globalThis.fetch(url, {
@@ -220,11 +219,11 @@ export async function createFile(request, options) {
220
219
  * import { updateFile } from '@tale/client';
221
220
  *
222
221
  * try {
223
- * const file = await updateFile('file_id_here', {
224
- * file_name: 'Updated Name',
222
+ * const file = await updateFile('fileId_here', {
223
+ * fileName: 'Updated Name',
225
224
  * remark: 'Updated remark'
226
225
  * });
227
- * console.log('File updated:', file.file_name);
226
+ * console.log('File updated:', file.fileName);
228
227
  * } catch (error) {
229
228
  * console.error('Failed to update file:', error.message);
230
229
  * }
@@ -241,7 +240,7 @@ export async function updateFile(fileId, request, options) {
241
240
  throw new ConfigurationError("Missing required environment variable: TALE_BASE_URL");
242
241
  }
243
242
  const url = String(base).replace(/\/+$/, "") +
244
- `/cms/v1/files/${encodeURIComponent(fileId)}`;
243
+ `/cms/v2/files/${encodeURIComponent(fileId)}`;
245
244
  let response;
246
245
  try {
247
246
  response = await globalThis.fetch(url, {
@@ -275,7 +274,7 @@ export async function updateFile(fileId, request, options) {
275
274
  * import { updateFileContent } from '@tale/client';
276
275
  *
277
276
  * try {
278
- * const file = await updateFileContent('file_id_here', '# New Content');
277
+ * const file = await updateFileContent('fileId_here', '# New Content');
279
278
  * console.log('Content updated:', file.content);
280
279
  * } catch (error) {
281
280
  * console.error('Failed to update content:', error.message);
@@ -296,7 +295,7 @@ export async function updateFileContent(fileId, content, options) {
296
295
  throw new ConfigurationError("Missing required environment variable: TALE_BASE_URL");
297
296
  }
298
297
  const url = String(base).replace(/\/+$/, "") +
299
- `/cms/v1/files/${encodeURIComponent(fileId)}/content`;
298
+ `/cms/v2/files/${encodeURIComponent(fileId)}/content`;
300
299
  let response;
301
300
  try {
302
301
  response = await globalThis.fetch(url, {
@@ -329,7 +328,7 @@ export async function updateFileContent(fileId, content, options) {
329
328
  * import { deleteFile } from '@tale/client';
330
329
  *
331
330
  * try {
332
- * await deleteFile('file_id_here');
331
+ * await deleteFile('fileId_here');
333
332
  * console.log('File deleted successfully');
334
333
  * } catch (error) {
335
334
  * console.error('Failed to delete file:', error.message);
@@ -347,7 +346,7 @@ export async function deleteFile(fileId, options) {
347
346
  throw new ConfigurationError("Missing required environment variable: TALE_BASE_URL");
348
347
  }
349
348
  const url = String(base).replace(/\/+$/, "") +
350
- `/cms/v1/files/${encodeURIComponent(fileId)}`;
349
+ `/cms/v2/files/${encodeURIComponent(fileId)}`;
351
350
  let response;
352
351
  try {
353
352
  response = await globalThis.fetch(url, {
@@ -383,8 +382,8 @@ export async function deleteFile(fileId, options) {
383
382
  * import { getFilePresignedUrl } from '@tale/client';
384
383
  *
385
384
  * try {
386
- * const result = await getFilePresignedUrl('file_id_here', 3600);
387
- * console.log('Presigned URL:', result.presigned_url);
385
+ * const result = await getFilePresignedUrl('fileId_here', 3600);
386
+ * console.log('Presigned URL:', result.presignedUrl);
388
387
  * // Now you can download the file directly
389
388
  * } catch (error) {
390
389
  * console.error('Failed to get presigned URL:', error.message);
@@ -402,7 +401,7 @@ export async function getFilePresignedUrl(fileId, expireTimeInSeconds = 3600, op
402
401
  throw new ConfigurationError("Missing required environment variable: TALE_BASE_URL");
403
402
  }
404
403
  const url = String(base).replace(/\/+$/, "") +
405
- `/cms/v1/files/${encodeURIComponent(fileId)}/presigned-url`;
404
+ `/cms/v2/files/${encodeURIComponent(fileId)}/presigned-url`;
406
405
  const urlObj = new URL(url);
407
406
  if (expireTimeInSeconds !== undefined) {
408
407
  urlObj.searchParams.append("expireTimeInSeconds", String(expireTimeInSeconds));
@@ -440,14 +439,14 @@ export async function getFilePresignedUrl(fileId, expireTimeInSeconds = 3600, op
440
439
  *
441
440
  * try {
442
441
  * const results = await batchGetFilePresignedUrl(
443
- * ['file_id_1', 'file_id_2'],
442
+ * ['fileId_1', 'fileId_2'],
444
443
  * 3600
445
444
  * );
446
445
  * results.forEach(result => {
447
446
  * if (result.error) {
448
- * console.error('Error for file:', result.file_id, result.error);
447
+ * console.error('Error for file:', result.fileId, result.error);
449
448
  * } else {
450
- * console.log('URL:', result.presigned_url);
449
+ * console.log('URL:', result.presignedUrl);
451
450
  * }
452
451
  * });
453
452
  * } catch (error) {
@@ -468,7 +467,7 @@ export async function batchGetFilePresignedUrl(fileIds, expireTimeInSeconds = 36
468
467
  if (!base) {
469
468
  throw new ConfigurationError("Missing required environment variable: TALE_BASE_URL");
470
469
  }
471
- const url = String(base).replace(/\/+$/, "") + "/cms/v1/files/batch-presigned-url";
470
+ const url = String(base).replace(/\/+$/, "") + "/cms/v2/files/batch-presigned-url";
472
471
  let response;
473
472
  try {
474
473
  response = await globalThis.fetch(url, {
@@ -478,8 +477,8 @@ export async function batchGetFilePresignedUrl(fileIds, expireTimeInSeconds = 36
478
477
  "x-t-token": token,
479
478
  },
480
479
  body: JSON.stringify({
481
- file_ids: fileIds,
482
- expire_time_in_seconds: expireTimeInSeconds,
480
+ fileIds,
481
+ expireTimeInSeconds,
483
482
  }),
484
483
  });
485
484
  }
@@ -505,8 +504,8 @@ export async function batchGetFilePresignedUrl(fileIds, expireTimeInSeconds = 36
505
504
  *
506
505
  * try {
507
506
  * const metadata = await getOssMetadata('cms/appkey/folder/fileid.pdf');
508
- * console.log('File size:', metadata.content_length);
509
- * console.log('Content type:', metadata.content_type);
507
+ * console.log('File size:', metadata.contentLength);
508
+ * console.log('Content type:', metadata.contentType);
510
509
  * } catch (error) {
511
510
  * console.error('Failed to get OSS metadata:', error.message);
512
511
  * }
@@ -522,7 +521,7 @@ export async function getOssMetadata(ossKey, options) {
522
521
  if (!base) {
523
522
  throw new ConfigurationError("Missing required environment variable: TALE_BASE_URL");
524
523
  }
525
- const url = new URL(String(base).replace(/\/+$/, "") + "/cms/v1/oss/metadata");
524
+ const url = new URL(String(base).replace(/\/+$/, "") + "/cms/v2/oss/metadata");
526
525
  url.searchParams.append("key", ossKey);
527
526
  let response;
528
527
  try {
@@ -556,28 +555,28 @@ export async function getOssMetadata(ossKey, options) {
556
555
  *
557
556
  * try {
558
557
  * const auth = await getUploadAuthorization({
559
- * folder_id: 'folder_id_here',
560
- * file_name: 'document.pdf',
561
- * file_type: 'pdf'
558
+ * folderId: 'folderId_here',
559
+ * fileName: 'document.pdf',
560
+ * fileType: 'pdf'
562
561
  * });
563
- * console.log('OSS Key:', auth.oss_key);
564
- * console.log('Upload URL:', auth.presigned_url);
565
- * console.log('File ID:', auth.file_id);
566
- * // Use presigned_url to upload the file directly to OSS
562
+ * console.log('OSS Key:', auth.ossKey);
563
+ * console.log('Upload URL:', auth.presignedUrl);
564
+ * console.log('File ID:', auth.fileId);
565
+ * // Use presignedUrl to upload the file directly to OSS
567
566
  * } catch (error) {
568
567
  * console.error('Failed to get upload authorization:', error.message);
569
568
  * }
570
569
  * ```
571
570
  */
572
571
  export async function getUploadAuthorization(request, options) {
573
- if (!request.folder_id || request.folder_id.trim() === "") {
574
- throw new ApiError("folder_id is required", 400, "9400");
572
+ if (!request.folderId || request.folderId.trim() === "") {
573
+ throw new ApiError("folderId is required", 400, "9400");
575
574
  }
576
- if (!request.file_name || request.file_name.trim() === "") {
577
- throw new ApiError("file_name is required", 400, "9400");
575
+ if (!request.fileName || request.fileName.trim() === "") {
576
+ throw new ApiError("fileName is required", 400, "9400");
578
577
  }
579
- if (!request.file_type || request.file_type.trim() === "") {
580
- throw new ApiError("file_type is required", 400, "9400");
578
+ if (!request.fileType || request.fileType.trim() === "") {
579
+ throw new ApiError("fileType is required", 400, "9400");
581
580
  }
582
581
  const token = options?.appToken ?? (await getAppToken(options));
583
582
  const env = globalThis?.process?.env ?? import.meta?.env ?? undefined;
@@ -585,7 +584,7 @@ export async function getUploadAuthorization(request, options) {
585
584
  if (!base) {
586
585
  throw new ConfigurationError("Missing required environment variable: TALE_BASE_URL");
587
586
  }
588
- const url = String(base).replace(/\/+$/, "") + "/cms/v1/files/upload-authorization";
587
+ const url = String(base).replace(/\/+$/, "") + "/cms/v2/files/upload-authorization";
589
588
  let response;
590
589
  try {
591
590
  response = await globalThis.fetch(url, {
@@ -620,11 +619,11 @@ export async function getUploadAuthorization(request, options) {
620
619
  * import { getFileStsCredentials } from '@tale/client';
621
620
  *
622
621
  * try {
623
- * const credentials = await getFileStsCredentials('file_id_here', '.pdf', 1800);
624
- * console.log('Access Key ID:', credentials.access_key_id);
625
- * console.log('Secret Access Key:', credentials.secret_access_key);
626
- * console.log('Session Token:', credentials.session_token);
627
- * console.log('Upload Path:', credentials.upload_path);
622
+ * const credentials = await getFileStsCredentials('fileId_here', '.pdf', 1800);
623
+ * console.log('Access Key ID:', credentials.accessKeyId);
624
+ * console.log('Secret Access Key:', credentials.secretAccessKey);
625
+ * console.log('Session Token:', credentials.sessionToken);
626
+ * console.log('Upload Path:', credentials.uploadPath);
628
627
  * // Use these credentials to upload with OSS SDK
629
628
  * } catch (error) {
630
629
  * console.error('Failed to get STS credentials:', error.message);
@@ -645,7 +644,7 @@ export async function getFileStsCredentials(fileId, fileExtension, durationSecon
645
644
  throw new ConfigurationError("Missing required environment variable: TALE_BASE_URL");
646
645
  }
647
646
  const url = String(base).replace(/\/+$/, "") +
648
- `/cms/v1/files/${encodeURIComponent(fileId)}/sts-credentials`;
647
+ `/cms/v2/files/${encodeURIComponent(fileId)}/sts-credentials`;
649
648
  let response;
650
649
  try {
651
650
  response = await globalThis.fetch(url, {
@@ -655,8 +654,8 @@ export async function getFileStsCredentials(fileId, fileExtension, durationSecon
655
654
  "x-t-token": token,
656
655
  },
657
656
  body: JSON.stringify({
658
- file_extension: fileExtension,
659
- duration_seconds: durationSeconds,
657
+ fileExtension: fileExtension,
658
+ durationSeconds: durationSeconds,
660
659
  }),
661
660
  });
662
661
  }
@@ -682,9 +681,9 @@ export async function getFileStsCredentials(fileId, fileExtension, durationSecon
682
681
  * import { fileUploadComplete } from '@tale/client';
683
682
  *
684
683
  * try {
685
- * const result = await fileUploadComplete('file_id_here', {
686
- * oss_key: 'cms/appkey/folder/fileid.pdf',
687
- * file_size: 12345,
684
+ * const result = await fileUploadComplete('fileId_here', {
685
+ * ossKey: 'cms/appkey/folder/fileid.pdf',
686
+ * fileSize: 12345,
688
687
  * etag: 'abc123'
689
688
  * });
690
689
  * console.log('Upload complete:', result.message);
@@ -697,11 +696,11 @@ export async function fileUploadComplete(fileId, request, options) {
697
696
  if (!fileId || fileId.trim() === "") {
698
697
  throw new ApiError("fileId is required", 400, "9400");
699
698
  }
700
- if (!request.oss_key || request.oss_key.trim() === "") {
701
- throw new ApiError("oss_key is required", 400, "9400");
699
+ if (!request.ossKey || request.ossKey.trim() === "") {
700
+ throw new ApiError("ossKey is required", 400, "9400");
702
701
  }
703
- if (!request.file_size && request.file_size !== 0) {
704
- throw new ApiError("file_size is required", 400, "9400");
702
+ if (!request.fileSize && request.fileSize !== 0) {
703
+ throw new ApiError("fileSize is required", 400, "9400");
705
704
  }
706
705
  if (!request.etag || request.etag.trim() === "") {
707
706
  throw new ApiError("etag is required", 400, "9400");
@@ -713,7 +712,7 @@ export async function fileUploadComplete(fileId, request, options) {
713
712
  throw new ConfigurationError("Missing required environment variable: TALE_BASE_URL");
714
713
  }
715
714
  const url = String(base).replace(/\/+$/, "") +
716
- `/cms/v1/files/${encodeURIComponent(fileId)}/upload-complete`;
715
+ `/cms/v2/files/${encodeURIComponent(fileId)}/upload-complete`;
717
716
  let response;
718
717
  try {
719
718
  response = await globalThis.fetch(url, {
@@ -751,8 +750,8 @@ export async function fileUploadComplete(fileId, request, options) {
751
750
  * const input = document.getElementById('previewInput');
752
751
  * const file = input.files[0];
753
752
  *
754
- * const updatedFile = await setFilePreviewImage('file_id_here', file);
755
- * console.log('Preview image set:', updatedFile.preview_image_url);
753
+ * const updatedFile = await setFilePreviewImage('fileId_here', file);
754
+ * console.log('Preview image set:', updatedFile.previewImageUrl);
756
755
  * } catch (error) {
757
756
  * console.error('Failed to set preview image:', error.message);
758
757
  * }
@@ -772,7 +771,7 @@ export async function setFilePreviewImage(fileId, imageFile, options) {
772
771
  throw new ConfigurationError("Missing required environment variable: TALE_BASE_URL");
773
772
  }
774
773
  const url = String(base).replace(/\/+$/, "") +
775
- `/cms/v1/files/${encodeURIComponent(fileId)}/preview-image`;
774
+ `/cms/v2/files/${encodeURIComponent(fileId)}/preview-image`;
776
775
  // Create FormData
777
776
  const formData = new FormData();
778
777
  // Handle File type which extends Blob
@@ -798,3 +797,155 @@ export async function setFilePreviewImage(fileId, imageFile, options) {
798
797
  const json = await response.json();
799
798
  return parseApiResponse(json, "Failed to set preview image", response.status);
800
799
  }
800
+ // ==================== File Attachment Functions ====================
801
+ /** List attachments for a file */
802
+ export async function listFileAttachments(fileId, options) {
803
+ if (!fileId || fileId.trim() === "") {
804
+ throw new ApiError("fileId is required", 400, "9400");
805
+ }
806
+ const token = options?.appToken ?? (await getAppToken(options));
807
+ const env = globalThis?.process?.env ?? import.meta?.env ?? undefined;
808
+ const base = options?.baseUrl ?? env?.TALE_BASE_URL ?? undefined;
809
+ if (!base) {
810
+ throw new ConfigurationError("Missing required environment variable: TALE_BASE_URL");
811
+ }
812
+ const { appToken, baseUrl, ...requestParams } = options || {};
813
+ const url = new URL(String(base).replace(/\/+$/, "") +
814
+ `/cms/v2/files/${encodeURIComponent(fileId)}/attachments`);
815
+ const queryParams = {
816
+ page: 0,
817
+ size: 20,
818
+ ...requestParams,
819
+ };
820
+ Object.entries(queryParams).forEach(([key, value]) => {
821
+ if (value !== undefined) {
822
+ url.searchParams.append(key, String(value));
823
+ }
824
+ });
825
+ let response;
826
+ try {
827
+ response = await globalThis.fetch(url.toString(), {
828
+ method: "GET",
829
+ headers: {
830
+ "Content-Type": "application/json",
831
+ "x-t-token": token,
832
+ },
833
+ });
834
+ }
835
+ catch (error) {
836
+ throw new NetworkError(`Failed to list file attachments: ${error instanceof Error ? error.message : "Unknown error"}`);
837
+ }
838
+ const json = await response.json();
839
+ return parseApiResponse(json, "Failed to list file attachments", response.status);
840
+ }
841
+ /** Get a file attachment by ID */
842
+ export async function getFileAttachment(fileId, attachmentId, options) {
843
+ if (!fileId || fileId.trim() === "") {
844
+ throw new ApiError("fileId is required", 400, "9400");
845
+ }
846
+ if (!attachmentId || attachmentId.trim() === "") {
847
+ throw new ApiError("attachmentId is required", 400, "9400");
848
+ }
849
+ const token = options?.appToken ?? (await getAppToken(options));
850
+ const env = globalThis?.process?.env ?? import.meta?.env ?? undefined;
851
+ const base = options?.baseUrl ?? env?.TALE_BASE_URL ?? undefined;
852
+ if (!base) {
853
+ throw new ConfigurationError("Missing required environment variable: TALE_BASE_URL");
854
+ }
855
+ const url = String(base).replace(/\/+$/, "") +
856
+ `/cms/v2/files/${encodeURIComponent(fileId)}/attachments/${encodeURIComponent(attachmentId)}`;
857
+ let response;
858
+ try {
859
+ response = await globalThis.fetch(url, {
860
+ method: "GET",
861
+ headers: {
862
+ "Content-Type": "application/json",
863
+ "x-t-token": token,
864
+ },
865
+ });
866
+ }
867
+ catch (error) {
868
+ throw new NetworkError(`Failed to get file attachment: ${error instanceof Error ? error.message : "Unknown error"}`);
869
+ }
870
+ const json = await response.json();
871
+ return parseApiResponse(json, "Failed to get file attachment", response.status);
872
+ }
873
+ /** Upload an attachment to a file */
874
+ export async function uploadFileAttachment(fileId, attachmentTypeId, file, remark, options) {
875
+ if (!fileId || fileId.trim() === "") {
876
+ throw new ApiError("fileId is required", 400, "9400");
877
+ }
878
+ if (!attachmentTypeId || attachmentTypeId.trim() === "") {
879
+ throw new ApiError("attachmentTypeId is required", 400, "9400");
880
+ }
881
+ const token = options?.appToken ?? (await getAppToken(options));
882
+ const env = globalThis?.process?.env ?? import.meta?.env ?? undefined;
883
+ const base = options?.baseUrl ?? env?.TALE_BASE_URL ?? undefined;
884
+ if (!base) {
885
+ throw new ConfigurationError("Missing required environment variable: TALE_BASE_URL");
886
+ }
887
+ const url = String(base).replace(/\/+$/, "") +
888
+ `/cms/v2/files/${encodeURIComponent(fileId)}/attachments/${encodeURIComponent(attachmentTypeId)}`;
889
+ const formData = new FormData();
890
+ if (typeof File !== "undefined" && file instanceof File) {
891
+ formData.append("file", file, file.name);
892
+ }
893
+ else {
894
+ formData.append("file", file);
895
+ }
896
+ if (remark) {
897
+ formData.append("remark", remark);
898
+ }
899
+ let response;
900
+ try {
901
+ response = await globalThis.fetch(url, {
902
+ method: "POST",
903
+ headers: {
904
+ "x-t-token": token,
905
+ },
906
+ body: formData,
907
+ });
908
+ }
909
+ catch (error) {
910
+ throw new NetworkError(`Failed to upload file attachment: ${error instanceof Error ? error.message : "Unknown error"}`);
911
+ }
912
+ const json = await response.json();
913
+ return parseApiResponse(json, "Failed to upload file attachment", response.status);
914
+ }
915
+ /** Delete a file attachment */
916
+ export async function deleteFileAttachment(fileId, attachmentId, options) {
917
+ if (!fileId || fileId.trim() === "") {
918
+ throw new ApiError("fileId is required", 400, "9400");
919
+ }
920
+ if (!attachmentId || attachmentId.trim() === "") {
921
+ throw new ApiError("attachmentId is required", 400, "9400");
922
+ }
923
+ const token = options?.appToken ?? (await getAppToken(options));
924
+ const env = globalThis?.process?.env ?? import.meta?.env ?? undefined;
925
+ const base = options?.baseUrl ?? env?.TALE_BASE_URL ?? undefined;
926
+ if (!base) {
927
+ throw new ConfigurationError("Missing required environment variable: TALE_BASE_URL");
928
+ }
929
+ const url = String(base).replace(/\/+$/, "") +
930
+ `/cms/v2/files/${encodeURIComponent(fileId)}/attachments/${encodeURIComponent(attachmentId)}`;
931
+ let response;
932
+ try {
933
+ response = await globalThis.fetch(url, {
934
+ method: "DELETE",
935
+ headers: {
936
+ "Content-Type": "application/json",
937
+ "x-t-token": token,
938
+ },
939
+ });
940
+ }
941
+ catch (error) {
942
+ throw new NetworkError(`Failed to delete file attachment: ${error instanceof Error ? error.message : "Unknown error"}`);
943
+ }
944
+ const json = (await response.json());
945
+ if (json.code !== 200) {
946
+ const errorMsg = typeof json.msg === "string"
947
+ ? json.msg
948
+ : "Failed to delete file attachment";
949
+ throw new ApiError(errorMsg, response.status, json.code);
950
+ }
951
+ }
@@ -15,8 +15,8 @@ import type { Folder, CreateFolderRequest, UpdateFolderRequest, FolderOptions, L
15
15
  * import { getFolder } from '@tale/client';
16
16
  *
17
17
  * try {
18
- * const folder = await getFolder('folder_id_here');
19
- * console.log('Folder name:', folder.folder_name);
18
+ * const folder = await getFolder('folderId_here');
19
+ * console.log('Folder name:', folder.folderName);
20
20
  * } catch (error) {
21
21
  * console.error('Failed to get folder:', error.message);
22
22
  * }
@@ -40,7 +40,7 @@ export declare function getFolder(folderId: string, options?: FolderOptions): Pr
40
40
  * const result = await listFolders({
41
41
  * page: 0,
42
42
  * size: 20,
43
- * sort_by: 'createdAt'
43
+ * sort: 'createdAt'
44
44
  * });
45
45
  * console.log(`Found ${result.total} folders`);
46
46
  * } catch (error) {
@@ -65,8 +65,8 @@ export declare function listFolders(options?: ListFoldersRequest & FolderOptions
65
65
  *
66
66
  * try {
67
67
  * const folder = await createFolder({
68
- * folder_name: 'Images',
69
- * folder_type: ['IMAGE', 'VIDEO'],
68
+ * folderName: 'Images',
69
+ * folderType: ['IMAGE', 'VIDEO'],
70
70
  * remark: 'Image and video files'
71
71
  * });
72
72
  * console.log('Folder created:', folder.id);
@@ -92,11 +92,11 @@ export declare function createFolder(request: CreateFolderRequest, options?: Fol
92
92
  * import { updateFolder } from '@tale/client';
93
93
  *
94
94
  * try {
95
- * const folder = await updateFolder('folder_id_here', {
96
- * folder_name: 'Updated Name',
95
+ * const folder = await updateFolder('folderId_here', {
96
+ * folderName: 'Updated Name',
97
97
  * remark: 'Updated remark'
98
98
  * });
99
- * console.log('Folder updated:', folder.folder_name);
99
+ * console.log('Folder updated:', folder.folderName);
100
100
  * } catch (error) {
101
101
  * console.error('Failed to update folder:', error.message);
102
102
  * }
@@ -118,7 +118,7 @@ export declare function updateFolder(folderId: string, request: UpdateFolderRequ
118
118
  * import { deleteFolder } from '@tale/client';
119
119
  *
120
120
  * try {
121
- * await deleteFolder('folder_id_here');
121
+ * await deleteFolder('folderId_here');
122
122
  * console.log('Folder deleted successfully');
123
123
  * } catch (error) {
124
124
  * console.error('Failed to delete folder:', error.message);