@tulip-systems/drive 0.10.1 → 0.10.3
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.
- package/dist/google/server.d.mts +2 -2
- package/dist/google/server.mjs +2 -2
- package/dist/google.d.mts +2 -2
- package/dist/google.mjs +2 -2
- package/dist/lib/dto.d.mts +2 -2
- package/dist/lib/validators.d.mts +9 -9
- package/dist/local/server.d.mts +2 -2
- package/dist/local/server.mjs +2 -2
- package/dist/local.d.mts +2 -2
- package/dist/local.mjs +2 -2
- package/dist/providers/google/config/filters.d.mts +1 -1
- package/dist/providers/google/lib/router.server.d.mts +121 -161
- package/dist/providers/google/lib/router.server.mjs +27 -33
- package/dist/providers/google/lib/search-params.d.mts +1 -1
- package/dist/providers/google/lib/service.server.d.mts +1 -1
- package/dist/providers/google/lib/validators.d.mts +88 -13
- package/dist/providers/google/lib/validators.mjs +22 -1
- package/dist/providers/local/config/filters.d.mts +1 -1
- package/dist/providers/local/lib/route-handler.server.d.mts +5 -3
- package/dist/providers/local/lib/route-handler.server.mjs +1 -1
- package/dist/providers/local/lib/router.server.d.mts +1248 -41272
- package/dist/providers/local/lib/router.server.mjs +35 -42
- package/dist/providers/local/lib/schema.d.mts +2 -2
- package/dist/providers/local/lib/schema.mjs +1 -1
- package/dist/providers/local/lib/search-params.d.mts +1 -1
- package/dist/providers/local/lib/service.server.d.mts +39 -16
- package/dist/providers/local/lib/upload.client.d.mts +4 -4
- package/dist/providers/local/lib/upload.client.mjs +1 -1
- package/dist/providers/local/lib/validators.d.mts +1403 -27
- package/dist/providers/local/lib/validators.mjs +38 -3
- package/package.json +3 -3
- package/src/providers/google/lib/router.server.ts +55 -51
- package/src/providers/google/lib/service.server.ts +1 -1
- package/src/providers/google/lib/validators.ts +23 -0
- package/src/providers/local/lib/route-handler.server.ts +12 -10
- package/src/providers/local/lib/router.server.ts +211 -117
- package/src/providers/local/lib/schema.ts +1 -1
- package/src/providers/local/lib/service.server.ts +1 -1
- package/src/providers/local/lib/upload.client.ts +6 -6
- package/src/providers/local/lib/validators.ts +58 -5
|
@@ -1,51 +1,44 @@
|
|
|
1
|
-
import { createLocalDriveFolderInputSchema, getLocalDriveNodesByParentIdInputSchema, getLocalFileURLSchema, listLocalDriveFlatInputSchema, listLocalDriveTreeInputSchema, localDriveNodeSchema, localDriveNodeWithChildrenSchema, presignLocalDriveFileInputSchema, updateLocalDriveNodeInputSchema } from "./validators.mjs";
|
|
1
|
+
import { createLocalDriveFolderInputSchema, getLocalDriveNodesByParentIdInputSchema, getLocalFileURLSchema, listLocalDriveFlatInputSchema, listLocalDriveTreeInputSchema, localDriveFileNodeSchema, localDriveFlatResponseSchema, localDriveNodeParentSchema, localDriveNodeSchema, localDriveNodeWithChildrenSchema, localDrivePresignUploadOutputSchema, localDriveTreeResponseSchema, presignLocalDriveFileInputSchema, updateLocalDriveNodeInputSchema } from "./validators.mjs";
|
|
2
2
|
import { z } from "zod";
|
|
3
|
-
import {
|
|
3
|
+
import { oc } from "@orpc/contract";
|
|
4
4
|
import { bulkActionSchema } from "@tulip-systems/core/router";
|
|
5
5
|
|
|
6
6
|
//#region src/providers/local/lib/router.server.ts
|
|
7
7
|
/**
|
|
8
|
+
* Local Drive router contract defines the input and output schemas for local drive-related procedures.
|
|
9
|
+
*/
|
|
10
|
+
const localDriveRouterContract = {
|
|
11
|
+
getNodeWithChildren: oc.input(z.object({
|
|
12
|
+
id: z.string(),
|
|
13
|
+
namespace: z.string()
|
|
14
|
+
})).output(localDriveNodeWithChildrenSchema.nullable()),
|
|
15
|
+
getNodesByParentId: oc.input(getLocalDriveNodesByParentIdInputSchema).output(z.array(localDriveNodeSchema)),
|
|
16
|
+
listTree: oc.input(listLocalDriveTreeInputSchema).output(localDriveTreeResponseSchema),
|
|
17
|
+
listFlat: oc.input(listLocalDriveFlatInputSchema).output(localDriveFlatResponseSchema),
|
|
18
|
+
getFolderParents: oc.input(z.object({
|
|
19
|
+
id: z.string().nullable(),
|
|
20
|
+
namespace: z.string()
|
|
21
|
+
})).output(z.array(localDriveNodeParentSchema)),
|
|
22
|
+
getURL: oc.input(getLocalFileURLSchema.extend({ id: z.string() })).output(z.string().nullable()),
|
|
23
|
+
presignUpload: oc.input(presignLocalDriveFileInputSchema).output(localDrivePresignUploadOutputSchema),
|
|
24
|
+
confirmUpload: oc.input(z.object({ uploadId: z.string() })).output(localDriveFileNodeSchema),
|
|
25
|
+
createFolder: oc.input(createLocalDriveFolderInputSchema).output(localDriveNodeSchema),
|
|
26
|
+
updateNode: oc.input(z.object({
|
|
27
|
+
id: z.string(),
|
|
28
|
+
data: updateLocalDriveNodeInputSchema
|
|
29
|
+
})).output(localDriveNodeSchema),
|
|
30
|
+
setReadonly: oc.input(bulkActionSchema.extend({ readonly: z.boolean() })).output(z.array(localDriveNodeSchema)),
|
|
31
|
+
moveNode: oc.input(z.object({
|
|
32
|
+
id: z.string(),
|
|
33
|
+
parentId: z.string().nullish()
|
|
34
|
+
})).output(localDriveNodeSchema),
|
|
35
|
+
archiveNodes: oc.input(bulkActionSchema).output(z.array(localDriveNodeSchema)),
|
|
36
|
+
restoreNodes: oc.input(bulkActionSchema).output(z.array(localDriveNodeSchema)),
|
|
37
|
+
deleteNodes: oc.input(bulkActionSchema).output(z.void())
|
|
38
|
+
};
|
|
39
|
+
/**
|
|
8
40
|
* Create Drive base procedures
|
|
9
41
|
*/
|
|
10
|
-
function createLocalDriveProcedures(drive) {
|
|
11
|
-
const { protectedProcedure } = initRPC();
|
|
12
|
-
return {
|
|
13
|
-
getNodeWithChildren: protectedProcedure.input(z.object({
|
|
14
|
-
id: z.string(),
|
|
15
|
-
namespace: z.string()
|
|
16
|
-
})).output(localDriveNodeWithChildrenSchema.nullable()).handler(async ({ input }) => drive.getNodeWithChildren(input)),
|
|
17
|
-
getNodesByParentId: protectedProcedure.input(getLocalDriveNodesByParentIdInputSchema).output(z.array(localDriveNodeSchema)).handler(async ({ input }) => drive.getNodesByParentId(input)),
|
|
18
|
-
listTree: protectedProcedure.input(listLocalDriveTreeInputSchema).handler(async ({ input }) => drive.listTree(input)),
|
|
19
|
-
listFlat: protectedProcedure.input(listLocalDriveFlatInputSchema).handler(async ({ input }) => drive.listFlat(input)),
|
|
20
|
-
getFolderParents: protectedProcedure.input(z.object({
|
|
21
|
-
id: z.string().nullable(),
|
|
22
|
-
namespace: z.string()
|
|
23
|
-
})).handler(async ({ input }) => drive.getFolderParents(input)),
|
|
24
|
-
getURL: protectedProcedure.input(getLocalFileURLSchema.extend({ id: z.string() })).output(z.string().nullable()).handler(async ({ input: { id, ...options } }) => {
|
|
25
|
-
const node = await drive.getNodeById(id);
|
|
26
|
-
if (!node) return null;
|
|
27
|
-
return await drive.getURL(node, options);
|
|
28
|
-
}),
|
|
29
|
-
presignUpload: protectedProcedure.input(presignLocalDriveFileInputSchema).handler(async ({ input }) => drive.presignUpload(input)),
|
|
30
|
-
confirmUpload: protectedProcedure.input(z.object({ uploadId: z.string() })).handler(async ({ input }) => drive.confirmUpload(input.uploadId)),
|
|
31
|
-
createFolder: protectedProcedure.input(createLocalDriveFolderInputSchema).output(localDriveNodeSchema).handler(async ({ input }) => drive.createFolder(input)),
|
|
32
|
-
updateNode: protectedProcedure.input(z.object({
|
|
33
|
-
id: z.string(),
|
|
34
|
-
data: updateLocalDriveNodeInputSchema
|
|
35
|
-
})).output(localDriveNodeSchema).handler(async ({ input }) => drive.updateNode(input.id, input.data)),
|
|
36
|
-
setReadonly: protectedProcedure.input(bulkActionSchema.extend({ readonly: z.boolean() })).output(z.array(localDriveNodeSchema)).handler(async ({ input }) => drive.setReadonly(input.ids, input.readonly)),
|
|
37
|
-
moveNode: protectedProcedure.input(z.object({
|
|
38
|
-
id: z.string(),
|
|
39
|
-
parentId: z.string().nullish()
|
|
40
|
-
})).output(localDriveNodeSchema).handler(async ({ input }) => drive.moveNode({
|
|
41
|
-
id: input.id,
|
|
42
|
-
parentId: input.parentId ?? null
|
|
43
|
-
})),
|
|
44
|
-
archiveNodes: protectedProcedure.input(bulkActionSchema).output(z.array(localDriveNodeSchema)).handler(async ({ input }) => drive.archiveNodes(input.ids)),
|
|
45
|
-
restoreNodes: protectedProcedure.input(bulkActionSchema).output(z.array(localDriveNodeSchema)).handler(async ({ input }) => drive.restoreNodes(input.ids)),
|
|
46
|
-
deleteNodes: protectedProcedure.input(bulkActionSchema).output(z.void()).handler(async ({ input }) => drive.deleteNodes(input.ids))
|
|
47
|
-
};
|
|
48
|
-
}
|
|
49
42
|
|
|
50
43
|
//#endregion
|
|
51
|
-
export {
|
|
44
|
+
export { localDriveRouterContract };
|
|
@@ -49,7 +49,7 @@ declare const nodes: drizzle_orm_pg_core0.PgTableWithColumns<{
|
|
|
49
49
|
tableName: "nodes";
|
|
50
50
|
dataType: "string";
|
|
51
51
|
columnType: "PgEnumColumn";
|
|
52
|
-
data: "
|
|
52
|
+
data: "folder" | "file";
|
|
53
53
|
driverParam: string;
|
|
54
54
|
notNull: false;
|
|
55
55
|
hasDefault: false;
|
|
@@ -604,7 +604,7 @@ declare const driveSchema: {
|
|
|
604
604
|
tableName: "nodes";
|
|
605
605
|
dataType: "string";
|
|
606
606
|
columnType: "PgEnumColumn";
|
|
607
|
-
data: "
|
|
607
|
+
data: "folder" | "file";
|
|
608
608
|
driverParam: string;
|
|
609
609
|
notNull: false;
|
|
610
610
|
hasDefault: false;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { imageVariants, nodeSubtypes } from "./constants.mjs";
|
|
2
|
-
import { baseColumns } from "@tulip-systems/core/
|
|
2
|
+
import { baseColumns } from "@tulip-systems/core/database";
|
|
3
3
|
import { imageDispositions, storageAssets } from "@tulip-systems/core/storage";
|
|
4
4
|
import { relations } from "drizzle-orm";
|
|
5
5
|
import { boolean, pgEnum, pgTable, unique } from "drizzle-orm/pg-core";
|
|
@@ -4,7 +4,7 @@ import * as nuqs_server0 from "nuqs/server";
|
|
|
4
4
|
declare const localDriveTreeFilterSearchParams: {
|
|
5
5
|
readonly subtypes: nuqs_server0.SingleParserBuilder<("image" | "document" | "spreadsheet" | "video" | "audio" | "archive" | "other")[] | null>;
|
|
6
6
|
readonly hidden: nuqs_server0.SingleParserBuilder<boolean | null>;
|
|
7
|
-
readonly types: nuqs_server0.SingleParserBuilder<("
|
|
7
|
+
readonly types: nuqs_server0.SingleParserBuilder<("folder" | "file")[] | null>;
|
|
8
8
|
readonly contentTypes: nuqs_server0.SingleParserBuilder<string[] | null>;
|
|
9
9
|
readonly nodeIds: nuqs_server0.SingleParserBuilder<string[] | null>;
|
|
10
10
|
readonly isArchived: nuqs_server0.SingleParserBuilder<boolean | null>;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { DriveArchive, DriveDirectUpload, DriveNodeMutations, DrivePresignedUpload, DrivePreviewGenerator, DriveReader, DriveReadonly } from "../../../lib/contracts.mjs";
|
|
2
2
|
import { CreateLocalDriveFolderSchema, GetLocalDriveNodesByParentIdInput, GetLocalFileURLSchema, ListLocalDriveFlatSchema, ListLocalDriveTreeSchema, LocalDriveFileNode, LocalDriveNode, LocalDriveNodeChild, LocalDriveNodeWithAsset, LocalDriveNodeWithChildren, LocalNode, PresignLocalDriveFileInput, UpdateLocalDriveNodeInput, UploadLocalDriveFileSchema } from "./validators.mjs";
|
|
3
|
-
import { TDatabaseSchema } from "@tulip-systems/core/
|
|
3
|
+
import { TDatabaseSchema } from "@tulip-systems/core/database";
|
|
4
4
|
import { ObjectBodyInput } from "@tulip-systems/core/storage";
|
|
5
5
|
import { TableQueryResponse } from "@tulip-systems/core/data-tables/server";
|
|
6
6
|
import { Database } from "@tulip-systems/core/database/server";
|
|
@@ -109,7 +109,7 @@ declare class LocalDrive<TSchema extends TDatabaseSchema> implements DriveReader
|
|
|
109
109
|
parentId: string | null;
|
|
110
110
|
contentType: string | null;
|
|
111
111
|
size: number | null;
|
|
112
|
-
type: "
|
|
112
|
+
type: "folder" | "file" | null;
|
|
113
113
|
readonly: boolean | null;
|
|
114
114
|
id: string;
|
|
115
115
|
subtype: "image" | "document" | "spreadsheet" | "video" | "audio" | "archive" | "other";
|
|
@@ -172,7 +172,7 @@ declare class LocalDrive<TSchema extends TDatabaseSchema> implements DriveReader
|
|
|
172
172
|
updatedAt: Date;
|
|
173
173
|
name: string;
|
|
174
174
|
namespace: string;
|
|
175
|
-
type: "
|
|
175
|
+
type: "folder" | "file";
|
|
176
176
|
subtype: "image" | "document" | "spreadsheet" | "video" | "audio" | "archive" | "other";
|
|
177
177
|
size: number | null;
|
|
178
178
|
contentType: string | null;
|
|
@@ -211,7 +211,7 @@ declare class LocalDrive<TSchema extends TDatabaseSchema> implements DriveReader
|
|
|
211
211
|
updatedAt: Date;
|
|
212
212
|
name: string;
|
|
213
213
|
namespace: string;
|
|
214
|
-
type: "
|
|
214
|
+
type: "folder" | "file";
|
|
215
215
|
subtype: "image" | "document" | "spreadsheet" | "video" | "audio" | "archive" | "other";
|
|
216
216
|
size: number | null;
|
|
217
217
|
contentType: string | null;
|
|
@@ -247,22 +247,22 @@ declare class LocalDrive<TSchema extends TDatabaseSchema> implements DriveReader
|
|
|
247
247
|
presignedUrl: string;
|
|
248
248
|
node: LocalDriveFileNode;
|
|
249
249
|
asset: {
|
|
250
|
-
id: string;
|
|
251
|
-
createdAt: Date;
|
|
252
|
-
updatedAt: Date;
|
|
253
|
-
name: string | null;
|
|
254
|
-
key: string;
|
|
255
250
|
metadata: unknown;
|
|
256
|
-
provider: "s3";
|
|
257
251
|
uploadId: string;
|
|
252
|
+
name: string | null;
|
|
258
253
|
visibility: "private" | "public";
|
|
259
254
|
size: number | null;
|
|
260
255
|
contentType: string | null;
|
|
256
|
+
provider: "s3";
|
|
261
257
|
bucket: string;
|
|
258
|
+
key: string;
|
|
262
259
|
status: "error" | "pending" | "ready";
|
|
263
260
|
etag: string | null;
|
|
264
261
|
uploadedAt: Date;
|
|
265
262
|
deletedAt: Date | null;
|
|
263
|
+
id: string;
|
|
264
|
+
createdAt: Date;
|
|
265
|
+
updatedAt: Date;
|
|
266
266
|
};
|
|
267
267
|
}>;
|
|
268
268
|
/**
|
|
@@ -278,7 +278,30 @@ declare class LocalDrive<TSchema extends TDatabaseSchema> implements DriveReader
|
|
|
278
278
|
* @returns A promise resolving to the finalized file node.
|
|
279
279
|
* @throws {ServerError} If the asset or node cannot be resolved.
|
|
280
280
|
*/
|
|
281
|
-
confirmUpload(uploadId: string): Promise<
|
|
281
|
+
confirmUpload(uploadId: string): Promise<{
|
|
282
|
+
id: string;
|
|
283
|
+
createdAt: Date;
|
|
284
|
+
updatedAt: Date;
|
|
285
|
+
name: string;
|
|
286
|
+
namespace: string;
|
|
287
|
+
subtype: "image" | "document" | "spreadsheet" | "video" | "audio" | "archive" | "other";
|
|
288
|
+
size: number | null;
|
|
289
|
+
contentType: string | null;
|
|
290
|
+
readonly: boolean;
|
|
291
|
+
hidden: boolean;
|
|
292
|
+
archivedAt: Date | null;
|
|
293
|
+
parentId: string | null;
|
|
294
|
+
links: {
|
|
295
|
+
view: string | null;
|
|
296
|
+
download: string | null;
|
|
297
|
+
preview: string | null;
|
|
298
|
+
thumbnail: string | null;
|
|
299
|
+
};
|
|
300
|
+
availability: "ready" | "pending" | "failed";
|
|
301
|
+
provider: "local";
|
|
302
|
+
assetId: string | null;
|
|
303
|
+
type: "file";
|
|
304
|
+
}>;
|
|
282
305
|
/**
|
|
283
306
|
* Generates preview assets for an image node.
|
|
284
307
|
*
|
|
@@ -309,7 +332,7 @@ declare class LocalDrive<TSchema extends TDatabaseSchema> implements DriveReader
|
|
|
309
332
|
updatedAt: Date;
|
|
310
333
|
name: string;
|
|
311
334
|
namespace: string;
|
|
312
|
-
type: "
|
|
335
|
+
type: "folder" | "file";
|
|
313
336
|
subtype: "image" | "document" | "spreadsheet" | "video" | "audio" | "archive" | "other";
|
|
314
337
|
size: number | null;
|
|
315
338
|
contentType: string | null;
|
|
@@ -344,7 +367,7 @@ declare class LocalDrive<TSchema extends TDatabaseSchema> implements DriveReader
|
|
|
344
367
|
updatedAt: Date;
|
|
345
368
|
name: string;
|
|
346
369
|
namespace: string;
|
|
347
|
-
type: "
|
|
370
|
+
type: "folder" | "file";
|
|
348
371
|
subtype: "image" | "document" | "spreadsheet" | "video" | "audio" | "archive" | "other";
|
|
349
372
|
size: number | null;
|
|
350
373
|
contentType: string | null;
|
|
@@ -378,7 +401,7 @@ declare class LocalDrive<TSchema extends TDatabaseSchema> implements DriveReader
|
|
|
378
401
|
updatedAt: Date;
|
|
379
402
|
name: string;
|
|
380
403
|
namespace: string;
|
|
381
|
-
type: "
|
|
404
|
+
type: "folder" | "file";
|
|
382
405
|
subtype: "image" | "document" | "spreadsheet" | "video" | "audio" | "archive" | "other";
|
|
383
406
|
size: number | null;
|
|
384
407
|
contentType: string | null;
|
|
@@ -412,7 +435,7 @@ declare class LocalDrive<TSchema extends TDatabaseSchema> implements DriveReader
|
|
|
412
435
|
updatedAt: Date;
|
|
413
436
|
name: string;
|
|
414
437
|
namespace: string;
|
|
415
|
-
type: "
|
|
438
|
+
type: "folder" | "file";
|
|
416
439
|
subtype: "image" | "document" | "spreadsheet" | "video" | "audio" | "archive" | "other";
|
|
417
440
|
size: number | null;
|
|
418
441
|
contentType: string | null;
|
|
@@ -443,7 +466,7 @@ declare class LocalDrive<TSchema extends TDatabaseSchema> implements DriveReader
|
|
|
443
466
|
updatedAt: Date;
|
|
444
467
|
name: string;
|
|
445
468
|
namespace: string;
|
|
446
|
-
type: "
|
|
469
|
+
type: "folder" | "file";
|
|
447
470
|
subtype: "image" | "document" | "spreadsheet" | "video" | "audio" | "archive" | "other";
|
|
448
471
|
size: number | null;
|
|
449
472
|
contentType: string | null;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { LocalDriveFileNode, LocalDriveNode, PresignLocalDriveFileInput, UpdateLocalDriveNodeInput } from "./validators.mjs";
|
|
2
|
-
import {
|
|
2
|
+
import { SelectStorageAssetSchema } from "@tulip-systems/core/storage";
|
|
3
3
|
import { BulkActionSchema } from "@tulip-systems/core/router";
|
|
4
4
|
|
|
5
5
|
//#region src/providers/local/lib/upload.client.d.ts
|
|
@@ -13,13 +13,13 @@ type LocalDriveUploadFileRequest = PresignLocalDriveFileInput & {
|
|
|
13
13
|
type LocalDriveUploadHooks = {
|
|
14
14
|
beforePresign?: (input: LocalDriveUploadFileRequest) => Promise<void> | void;
|
|
15
15
|
afterPresign?: (presignResult: {
|
|
16
|
-
asset:
|
|
16
|
+
asset: SelectStorageAssetSchema;
|
|
17
17
|
node: LocalDriveFileNode;
|
|
18
18
|
uploadId: string;
|
|
19
19
|
presignedUrl: string;
|
|
20
20
|
}) => Promise<void> | void;
|
|
21
21
|
beforeConfirm?: (presignResult: {
|
|
22
|
-
asset:
|
|
22
|
+
asset: SelectStorageAssetSchema;
|
|
23
23
|
node: LocalDriveFileNode;
|
|
24
24
|
uploadId: string;
|
|
25
25
|
presignedUrl: string;
|
|
@@ -41,7 +41,7 @@ type LocalDriveUploadClient = {
|
|
|
41
41
|
type CreateLocalDriveUploadClientProps = {
|
|
42
42
|
endpoints: {
|
|
43
43
|
presignUpload: (input: PresignLocalDriveFileInput) => Promise<{
|
|
44
|
-
asset:
|
|
44
|
+
asset: SelectStorageAssetSchema;
|
|
45
45
|
node: LocalDriveFileNode;
|
|
46
46
|
uploadId: string;
|
|
47
47
|
presignedUrl: string;
|