@unisource/sdk 0.8.0 → 1.1.0-beta.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.
@@ -1,108 +0,0 @@
1
- import { z } from 'zod';
2
- import {
3
- nonEmptyString,
4
- nonNegativeInt,
5
- positiveInt,
6
- uploadDestinationSchema,
7
- FILES_DEFAULT_LIMIT,
8
- FILES_MAX_LIMIT,
9
- } from './primitives';
10
-
11
- // ─── User-facing file record ──────────────────────────────────────────────────
12
-
13
- /**
14
- * A confirmed file record owned by a user.
15
- * Internal fields (storage_key, bucket) are intentionally excluded from the public API.
16
- */
17
- export const fileRecordSchema = z.object({
18
- id: nonEmptyString,
19
- service_id: nonEmptyString,
20
- user_id: nonEmptyString,
21
- folder_id: nonEmptyString.nullable(),
22
- upload_id: nonEmptyString.nullable(),
23
- filename: nonEmptyString,
24
- /** SDK6: zero-byte uploads are valid (e.g. placeholders). */
25
- size: nonNegativeInt,
26
- mime_type: nonEmptyString,
27
- storage_destination: uploadDestinationSchema,
28
- is_trashed: z.boolean(),
29
- trashed_at: positiveInt.nullable(),
30
- created_at: positiveInt,
31
- updated_at: positiveInt,
32
- });
33
- export type FileRecord = z.infer<typeof fileRecordSchema>;
34
-
35
- // ─── List ─────────────────────────────────────────────────────────────────────
36
-
37
- export { FILES_DEFAULT_LIMIT, FILES_MAX_LIMIT };
38
-
39
-
40
- export const fileRecordsListQuerySchema = z.object({
41
- folder_id: nonEmptyString.nullable().optional(),
42
- is_trashed: z.boolean().optional(),
43
- cursor: nonEmptyString.optional(),
44
- limit: z.number().int().min(1).max(FILES_MAX_LIMIT).optional(),
45
- });
46
- export type FileRecordsListQuery = z.infer<typeof fileRecordsListQuerySchema>;
47
-
48
- export const fileRecordsListResponseSchema = z.object({
49
- items: z.array(fileRecordSchema),
50
- next_cursor: z.string().nullable(),
51
- limit: positiveInt,
52
- });
53
- export type FileRecordsListResponse = z.infer<typeof fileRecordsListResponseSchema>;
54
-
55
- // ─── Single file detail ───────────────────────────────────────────────────────
56
-
57
- export const fileRecordDetailResponseSchema = z.object({
58
- file: fileRecordSchema,
59
- });
60
- export type FileRecordDetailResponse = z.infer<typeof fileRecordDetailResponseSchema>;
61
-
62
- // ─── Move ────────────────────────────────────────────────────────────────────
63
-
64
- export const fileMoveRequestSchema = z.object({
65
- /** null = move to root, undefined = keep unchanged */
66
- folder_id: nonEmptyString.nullable().optional(),
67
- });
68
- export type FileMoveRequest = z.infer<typeof fileMoveRequestSchema>;
69
-
70
- // ─── Download URL ─────────────────────────────────────────────────────────────
71
-
72
- export const fileDownloadUrlResponseSchema = z.object({
73
- upload_id: nonEmptyString,
74
- destination: uploadDestinationSchema,
75
- download_url: z.string().url(),
76
- expires_at: positiveInt,
77
- });
78
- export type FileDownloadUrlResponse = z.infer<typeof fileDownloadUrlResponseSchema>;
79
-
80
- // ─── Delete ───────────────────────────────────────────────────────────────────
81
-
82
- export const fileDeleteResponseSchema = z.object({
83
- success: z.literal(true),
84
- id: nonEmptyString,
85
- permanent: z.boolean(),
86
- });
87
- export type FileDeleteResponse = z.infer<typeof fileDeleteResponseSchema>;
88
-
89
- // ─── Restore ──────────────────────────────────────────────────────────────────
90
-
91
- export const fileRestoreResponseSchema = z.object({
92
- success: z.literal(true),
93
- id: nonEmptyString,
94
- });
95
- export type FileRestoreResponse = z.infer<typeof fileRestoreResponseSchema>;
96
-
97
- // ─── Update (rename) ──────────────────────────────────────────────────────────
98
-
99
- /** SDK4: filename hard-capped to 255 to match backend Zod validation. */
100
- export const fileUpdateRequestSchema = z.object({
101
- filename: z.string().trim().min(1).max(255),
102
- });
103
- export type FileUpdateRequest = z.infer<typeof fileUpdateRequestSchema>;
104
-
105
- export const fileUpdateResponseSchema = z.object({
106
- file: fileRecordSchema,
107
- });
108
- export type FileUpdateResponse = z.infer<typeof fileUpdateResponseSchema>;
package/src/folders.ts DELETED
@@ -1,97 +0,0 @@
1
- import { z } from 'zod';
2
- import { nonEmptyString, positiveInt, FILES_MAX_LIMIT } from './primitives';
3
-
4
- // ─── Folder record ────────────────────────────────────────────────────────────
5
-
6
- export const folderSchema = z.object({
7
- id: nonEmptyString,
8
- service_id: nonEmptyString,
9
- user_id: nonEmptyString,
10
- parent_id: nonEmptyString.nullable(),
11
- name: nonEmptyString,
12
- color_tag: z.string().nullable(),
13
- is_trashed: z.boolean(),
14
- trashed_at: positiveInt.nullable(),
15
- created_at: positiveInt,
16
- updated_at: positiveInt,
17
- });
18
- export type Folder = z.infer<typeof folderSchema>;
19
-
20
- // ─── List ─────────────────────────────────────────────────────────────────────
21
-
22
- export const folderListQuerySchema = z
23
- .object({
24
- parent_id: nonEmptyString.nullable().optional(),
25
- trashed: z.boolean().optional(),
26
- is_trashed: z.boolean().optional(),
27
- cursor: nonEmptyString.optional(),
28
- limit: z.number().int().min(1).max(FILES_MAX_LIMIT).optional(),
29
- })
30
- .refine(
31
- (v) => !(v.trashed !== undefined && v.is_trashed !== undefined),
32
- { message: 'Use either trashed or is_trashed, not both' }
33
- );
34
- export type FolderListQuery = z.infer<typeof folderListQuerySchema>;
35
-
36
- export const folderListResponseSchema = z.object({
37
- items: z.array(folderSchema),
38
- next_cursor: z.string().nullable(),
39
- limit: positiveInt,
40
- });
41
- export type FolderListResponse = z.infer<typeof folderListResponseSchema>;
42
-
43
- // ─── Create ───────────────────────────────────────────────────────────────────
44
-
45
- export const folderCreateRequestSchema = z.object({
46
- name: nonEmptyString,
47
- parent_id: nonEmptyString.optional(),
48
- color_tag: z.string().optional(),
49
- });
50
- export type FolderCreateRequest = z.infer<typeof folderCreateRequestSchema>;
51
-
52
- export const folderCreateResponseSchema = z.object({
53
- folder: folderSchema,
54
- });
55
- export type FolderCreateResponse = z.infer<typeof folderCreateResponseSchema>;
56
-
57
- // ─── Update ───────────────────────────────────────────────────────────────────
58
-
59
- export const folderUpdateRequestSchema = z
60
- .object({
61
- name: nonEmptyString.optional(),
62
- color_tag: z.string().nullable().optional(),
63
- })
64
- .refine((v) => v.name !== undefined || v.color_tag !== undefined, {
65
- message: 'At least one of name or color_tag must be provided',
66
- });
67
- export type FolderUpdateRequest = z.infer<typeof folderUpdateRequestSchema>;
68
-
69
- export const folderUpdateResponseSchema = z.object({
70
- folder: folderSchema,
71
- });
72
- export type FolderUpdateResponse = z.infer<typeof folderUpdateResponseSchema>;
73
-
74
- // ─── Delete ───────────────────────────────────────────────────────────────────
75
-
76
- export const folderDeleteResponseSchema = z.object({
77
- success: z.literal(true),
78
- id: nonEmptyString,
79
- permanent: z.boolean(),
80
- folders_deleted: z.number().int().nonnegative().optional(),
81
- });
82
- export type FolderDeleteResponse = z.infer<typeof folderDeleteResponseSchema>;
83
-
84
- // ─── Single folder detail ─────────────────────────────────────────────────────
85
-
86
- export const folderDetailResponseSchema = z.object({
87
- folder: folderSchema,
88
- });
89
- export type FolderDetailResponse = z.infer<typeof folderDetailResponseSchema>;
90
-
91
- // ─── Restore ──────────────────────────────────────────────────────────────────
92
-
93
- export const folderRestoreResponseSchema = z.object({
94
- success: z.literal(true),
95
- id: nonEmptyString,
96
- });
97
- export type FolderRestoreResponse = z.infer<typeof folderRestoreResponseSchema>;
package/src/index.ts DELETED
@@ -1,289 +0,0 @@
1
- // ─── Primitives ───────────────────────────────────────────────────────────────
2
- export {
3
- nonEmptyString,
4
- positiveInt,
5
- nonNegativeInt,
6
- unixTimestamp,
7
- uploadDestinationSchema,
8
- recommendedUploadDestinationSchema,
9
- uploadStatusSchema,
10
- apiErrorSchema,
11
- FILES_DEFAULT_LIMIT,
12
- FILES_MAX_LIMIT,
13
- } from './primitives';
14
- export type {
15
- UploadDestination,
16
- RecommendedUploadDestination,
17
- UploadStatus,
18
- ApiError,
19
- } from './primitives';
20
-
21
-
22
- // ─── Upload ───────────────────────────────────────────────────────────────────
23
- export {
24
- uploadR2InitRequestSchema,
25
- uploadR2InitResponseSchema,
26
- uploadAppwriteInitRequestSchema,
27
- uploadAppwriteInitResponseSchema,
28
- uploadLifecycleRequestSchema,
29
- uploadCompleteResponseSchema,
30
- uploadFailResponseSchema,
31
- uploadRecordSchema,
32
- uploadsListResponseSchema,
33
- uploadRecordDetailResponseSchema,
34
- uploadTypeSchema,
35
- multipartCreateRequestSchema,
36
- multipartCreateResponseSchema,
37
- multipartSignPartQuerySchema,
38
- multipartSignPartResponseSchema,
39
- multipartListPartsQuerySchema,
40
- multipartListPartsResponseSchema,
41
- multipartPartSchema,
42
- multipartCompleteRequestSchema,
43
- multipartCompleteResponseSchema,
44
- multipartAbortRequestSchema,
45
- multipartAbortResponseSchema,
46
- } from './uploads';
47
- export type {
48
- UploadR2InitRequest,
49
- UploadR2InitResponse,
50
- UploadAppwriteInitRequest,
51
- UploadAppwriteInitResponse,
52
- UploadLifecycleRequest,
53
- UploadCompleteResponse,
54
- UploadFailResponse,
55
- UploadRecord,
56
- UploadsListResponse,
57
- UploadRecordDetailResponse,
58
- UploadType,
59
- MultipartCreateRequest,
60
- MultipartCreateResponse,
61
- MultipartSignPartQuery,
62
- MultipartSignPartResponse,
63
- MultipartListPartsQuery,
64
- MultipartListPartsResponse,
65
- MultipartPart,
66
- MultipartCompleteRequest,
67
- MultipartCompleteResponse,
68
- MultipartAbortRequest,
69
- MultipartAbortResponse,
70
- } from './uploads';
71
-
72
- // ─── File Records ─────────────────────────────────────────────────────────────
73
- export {
74
- fileRecordSchema,
75
- fileRecordsListQuerySchema,
76
- fileRecordsListResponseSchema,
77
- fileRecordDetailResponseSchema,
78
- fileMoveRequestSchema,
79
- fileDownloadUrlResponseSchema,
80
- fileDeleteResponseSchema,
81
- fileRestoreResponseSchema,
82
- fileUpdateRequestSchema,
83
- fileUpdateResponseSchema,
84
- } from './fileRecords';
85
- export type {
86
- FileRecord,
87
- FileRecordsListQuery,
88
- FileRecordsListResponse,
89
- FileRecordDetailResponse,
90
- FileMoveRequest,
91
- FileDownloadUrlResponse,
92
- FileDeleteResponse,
93
- FileRestoreResponse,
94
- FileUpdateRequest,
95
- FileUpdateResponse,
96
- } from './fileRecords';
97
-
98
- // ─── Folders ─────────────────────────────────────────────────────────────────
99
- export {
100
- folderSchema,
101
- folderListQuerySchema,
102
- folderListResponseSchema,
103
- folderDetailResponseSchema,
104
- folderCreateRequestSchema,
105
- folderCreateResponseSchema,
106
- folderUpdateRequestSchema,
107
- folderUpdateResponseSchema,
108
- folderDeleteResponseSchema,
109
- folderRestoreResponseSchema,
110
- } from './folders';
111
- export type {
112
- Folder,
113
- FolderListQuery,
114
- FolderListResponse,
115
- FolderDetailResponse,
116
- FolderCreateRequest,
117
- FolderCreateResponse,
118
- FolderUpdateRequest,
119
- FolderUpdateResponse,
120
- FolderDeleteResponse,
121
- FolderRestoreResponse,
122
- } from './folders';
123
-
124
- // ─── Services & Audit ─────────────────────────────────────────────────────────
125
- export {
126
- serviceSchema,
127
- serviceDetailResponseSchema,
128
- adminServiceUpdateRequestSchema,
129
- adminServiceUpdateResponseSchema,
130
- adminServiceSettingsRequestSchema,
131
- adminServiceSettingsResponseSchema,
132
- serviceUsageResponseSchema,
133
- auditEventActionSchema,
134
- auditEventSchema,
135
- auditLogListQuerySchema,
136
- auditLogListResponseSchema,
137
- adminUserSchema,
138
- adminUserListResponseSchema,
139
- adminUserUpdateRequestSchema,
140
- adminUserUpdateResponseSchema,
141
- adminUserPasswordResetRequestSchema,
142
- adminUserPasswordResetResponseSchema,
143
- adminUserRoleUpdateRequestSchema,
144
- adminUserStorageLimitUpdateRequestSchema,
145
- } from './services';
146
- export type {
147
- Service,
148
- ServiceDetailResponse,
149
- AdminServiceUpdateRequest,
150
- AdminServiceUpdateResponse,
151
- AdminServiceSettingsRequest,
152
- AdminServiceSettingsResponse,
153
- ServiceUsageResponse,
154
- AuditEventAction,
155
- AuditEvent,
156
- AuditLogListQuery,
157
- AuditLogListResponse,
158
- AdminUser,
159
- AdminUserListResponse,
160
- AdminUserUpdateRequest,
161
- AdminUserUpdateResponse,
162
- AdminUserPasswordResetRequest,
163
- AdminUserPasswordResetResponse,
164
- AdminUserRoleUpdateRequest,
165
- AdminUserStorageLimitUpdateRequest,
166
- } from './services';
167
-
168
- // ─── Main Storage ─────────────────────────────────────────────────────────────
169
- export * from './mainStorage';
170
-
171
- // ─── Releases ───────────────────────────────────────────────────────────────
172
- export {
173
- releaseDTOSchema,
174
- releaseUploadInitRequestSchema,
175
- releaseUploadInitResponseSchema,
176
- releaseUploadCompleteRequestSchema,
177
- releaseUploadCompleteResponseSchema,
178
- releaseUploadFailResponseSchema,
179
- releasesListQuerySchema,
180
- releasesListResponseSchema,
181
- releaseUpdateRequestSchema,
182
- releaseDeleteResponseSchema,
183
- releaseSyncManifestSchema,
184
- releaseSyncRequestSchema,
185
- releaseSyncResultSchema,
186
- releaseSyncResponseSchema,
187
- releaseMultipartCreateRequestSchema,
188
- releaseMultipartCreateResponseSchema,
189
- releaseMultipartSignPartQuerySchema,
190
- releaseMultipartSignPartResponseSchema,
191
- releaseMultipartListPartsQuerySchema,
192
- releaseMultipartListPartsResponseSchema,
193
- releaseMultipartPartSchema,
194
- releaseMultipartCompleteRequestSchema,
195
- releaseMultipartCompleteResponseSchema,
196
- releaseMultipartAbortRequestSchema,
197
- releaseMultipartAbortResponseSchema,
198
- appReleaseLatestQuerySchema,
199
- appReleaseLatestResponseSchema,
200
- } from './releases';
201
- export type {
202
- ReleaseDTO,
203
- ReleaseUploadInitRequest,
204
- ReleaseUploadInitResponse,
205
- ReleaseUploadCompleteRequest,
206
- ReleaseUploadCompleteResponse,
207
- ReleaseUploadFailResponse,
208
- ReleasesListQuery,
209
- ReleasesListResponse,
210
- ReleaseUpdateRequest,
211
- ReleaseDeleteResponse,
212
- ReleaseSyncManifest,
213
- ReleaseSyncRequest,
214
- ReleaseSyncResult,
215
- ReleaseSyncResponse,
216
- ReleaseMultipartCreateRequest,
217
- ReleaseMultipartCreateResponse,
218
- ReleaseMultipartSignPartQuery,
219
- ReleaseMultipartSignPartResponse,
220
- ReleaseMultipartListPartsQuery,
221
- ReleaseMultipartListPartsResponse,
222
- ReleaseMultipartPart,
223
- ReleaseMultipartCompleteRequest,
224
- ReleaseMultipartCompleteResponse,
225
- ReleaseMultipartAbortRequest,
226
- ReleaseMultipartAbortResponse,
227
- AppReleaseLatestQuery,
228
- AppReleaseLatestResponse,
229
- } from './releases';
230
-
231
- // ─── Share Links ─────────────────────────────────────────────────────────────
232
- export {
233
- shareLinkSchema,
234
- shareLinkCreateRequestSchema,
235
- shareLinkUpdateRequestSchema,
236
- shareLinkListResponseSchema,
237
- shareLinkCreateResponseSchema,
238
- shareLinkUpdateResponseSchema,
239
- shareLinkDeleteResponseSchema,
240
- shareLinkDetailResponseSchema,
241
- sharesCreateRequestSchema,
242
- publicFileAccessResponseSchema,
243
- publicFileLockedResponseSchema,
244
- } from './shareLinks';
245
- export type {
246
- ShareLink,
247
- ShareLinkCreateRequest,
248
- ShareLinkUpdateRequest,
249
- ShareLinkListResponse,
250
- ShareLinkCreateResponse,
251
- ShareLinkUpdateResponse,
252
- ShareLinkDeleteResponse,
253
- ShareLinkDetailResponse,
254
- SharesCreateRequest,
255
- PublicFileAccessResponse,
256
- PublicFileLockedResponse,
257
- } from './shareLinks';
258
-
259
- // ─── HTTP Client ─────────────────────────────────────────────────────────────
260
- export {
261
- UnisourceClient,
262
- UnisourceError,
263
- UnisourceNetworkError,
264
- getPublicFileInfo,
265
- unlockPublicFile,
266
- } from './client';
267
- export type { UnisourceClientConfig } from './client';
268
-
269
- // ─── V2 API ───────────────────────────────────────────────────────────────────
270
- export {
271
- fileRecordsListV2QuerySchema,
272
- bulkFileIdsSchema,
273
- bulkFileMoveRequestSchema,
274
- bulkOperationResponseSchema,
275
- folderListV2QuerySchema,
276
- bulkFolderIdsSchema,
277
- bulkFolderMoveRequestSchema,
278
- folderBreadcrumbsResponseSchema,
279
- } from './v2';
280
- export type {
281
- FileRecordsListV2Query,
282
- BulkFileIds,
283
- BulkFileMoveRequest,
284
- BulkOperationResponse,
285
- FolderListV2Query,
286
- BulkFolderIds,
287
- BulkFolderMoveRequest,
288
- FolderBreadcrumbsResponse,
289
- } from './v2';
@@ -1,51 +0,0 @@
1
- import { z } from 'zod';
2
- import { FILES_MAX_LIMIT, nonEmptyString } from './primitives';
3
- import { fileRecordSchema } from './fileRecords';
4
-
5
- // ─── List ──────────────────────────────────────────────────────────────────────
6
-
7
- export const mainStorageListQuerySchema = z.object({
8
- limit: z.number().int().min(1).max(FILES_MAX_LIMIT).optional(),
9
- cursor: nonEmptyString.optional(),
10
- });
11
- export type MainStorageListQuery = z.infer<typeof mainStorageListQuerySchema>;
12
-
13
- export const mainStorageFileSchema = fileRecordSchema;
14
- export type MainStorageFile = z.infer<typeof mainStorageFileSchema>;
15
-
16
- export const mainStorageListResponseSchema = z.object({
17
- items: z.array(mainStorageFileSchema),
18
- next_cursor: z.string().nullable(),
19
- });
20
- export type MainStorageListResponse = z.infer<typeof mainStorageListResponseSchema>;
21
-
22
- export const mainStorageDetailResponseSchema = mainStorageFileSchema;
23
- export type MainStorageDetailResponse = z.infer<typeof mainStorageDetailResponseSchema>;
24
-
25
- // ─── Rename ────────────────────────────────────────────────────────────────────
26
-
27
- export const mainStorageRenameRequestSchema = z.object({
28
- filename: nonEmptyString.max(255),
29
- });
30
- export type MainStorageRenameRequest = z.infer<typeof mainStorageRenameRequestSchema>;
31
-
32
- export const mainStorageRenameResponseSchema = z.object({
33
- file: mainStorageFileSchema,
34
- });
35
- export type MainStorageRenameResponse = z.infer<typeof mainStorageRenameResponseSchema>;
36
-
37
- // ─── Delete ────────────────────────────────────────────────────────────────────
38
-
39
- export const mainStorageDeleteResponseSchema = z.object({
40
- success: z.boolean(),
41
- file_id: nonEmptyString,
42
- });
43
- export type MainStorageDeleteResponse = z.infer<typeof mainStorageDeleteResponseSchema>;
44
-
45
- // ─── Restore ───────────────────────────────────────────────────────────────────
46
-
47
- export const mainStorageRestoreResponseSchema = z.object({
48
- success: z.boolean(),
49
- file_id: nonEmptyString,
50
- });
51
- export type MainStorageRestoreResponse = z.infer<typeof mainStorageRestoreResponseSchema>;
package/src/primitives.ts DELETED
@@ -1,43 +0,0 @@
1
- import { z } from 'zod';
2
-
3
- // ─── Primitives ─────────────────────────────────────────────────────────────
4
-
5
- export const nonEmptyString = z.string().trim().min(1);
6
- export const positiveInt = z.number().int().positive();
7
- export const nonNegativeInt = z.number().int().nonnegative();
8
- export const unixTimestamp = z.number().int().nonnegative();
9
-
10
- // ─── Pagination constants ─────────────────────────────────────────────────────
11
-
12
- export const FILES_DEFAULT_LIMIT = 25;
13
- export const FILES_MAX_LIMIT = 100;
14
-
15
- // ─── Upload Destination ──────────────────────────────────────────────────────
16
-
17
- /**
18
- * Storage backend a file lives on.
19
- * - 'r2' — Cloudflare R2 via presigned PUT / multipart
20
- * - 'appwrite' — Appwrite Storage via direct browser SDK upload
21
- *
22
- * `recommendedUploadDestinationSchema` adds the meta-value 'hybrid' which is
23
- * only valid as a service-wide setting (the upload manager picks r2/appwrite
24
- * per-file based on size).
25
- */
26
- export const uploadDestinationSchema = z.enum(['r2', 'appwrite']);
27
- export type UploadDestination = z.infer<typeof uploadDestinationSchema>;
28
-
29
- export const recommendedUploadDestinationSchema = z.enum(['r2', 'appwrite', 'hybrid']);
30
- export type RecommendedUploadDestination = z.infer<typeof recommendedUploadDestinationSchema>;
31
-
32
- // ─── Upload Status ────────────────────────────────────────────────────────────
33
-
34
- export const uploadStatusSchema = z.enum(['pending', 'completed', 'failed']);
35
- export type UploadStatus = z.infer<typeof uploadStatusSchema>;
36
-
37
- // ─── API Error ────────────────────────────────────────────────────────────────
38
-
39
- export const apiErrorSchema = z.object({
40
- error: nonEmptyString,
41
- message: nonEmptyString,
42
- });
43
- export type ApiError = z.infer<typeof apiErrorSchema>;