@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.
Files changed (40) hide show
  1. package/dist/google/server.d.mts +2 -2
  2. package/dist/google/server.mjs +2 -2
  3. package/dist/google.d.mts +2 -2
  4. package/dist/google.mjs +2 -2
  5. package/dist/lib/dto.d.mts +2 -2
  6. package/dist/lib/validators.d.mts +9 -9
  7. package/dist/local/server.d.mts +2 -2
  8. package/dist/local/server.mjs +2 -2
  9. package/dist/local.d.mts +2 -2
  10. package/dist/local.mjs +2 -2
  11. package/dist/providers/google/config/filters.d.mts +1 -1
  12. package/dist/providers/google/lib/router.server.d.mts +121 -161
  13. package/dist/providers/google/lib/router.server.mjs +27 -33
  14. package/dist/providers/google/lib/search-params.d.mts +1 -1
  15. package/dist/providers/google/lib/service.server.d.mts +1 -1
  16. package/dist/providers/google/lib/validators.d.mts +88 -13
  17. package/dist/providers/google/lib/validators.mjs +22 -1
  18. package/dist/providers/local/config/filters.d.mts +1 -1
  19. package/dist/providers/local/lib/route-handler.server.d.mts +5 -3
  20. package/dist/providers/local/lib/route-handler.server.mjs +1 -1
  21. package/dist/providers/local/lib/router.server.d.mts +1248 -41272
  22. package/dist/providers/local/lib/router.server.mjs +35 -42
  23. package/dist/providers/local/lib/schema.d.mts +2 -2
  24. package/dist/providers/local/lib/schema.mjs +1 -1
  25. package/dist/providers/local/lib/search-params.d.mts +1 -1
  26. package/dist/providers/local/lib/service.server.d.mts +39 -16
  27. package/dist/providers/local/lib/upload.client.d.mts +4 -4
  28. package/dist/providers/local/lib/upload.client.mjs +1 -1
  29. package/dist/providers/local/lib/validators.d.mts +1403 -27
  30. package/dist/providers/local/lib/validators.mjs +38 -3
  31. package/package.json +3 -3
  32. package/src/providers/google/lib/router.server.ts +55 -51
  33. package/src/providers/google/lib/service.server.ts +1 -1
  34. package/src/providers/google/lib/validators.ts +23 -0
  35. package/src/providers/local/lib/route-handler.server.ts +12 -10
  36. package/src/providers/local/lib/router.server.ts +211 -117
  37. package/src/providers/local/lib/schema.ts +1 -1
  38. package/src/providers/local/lib/service.server.ts +1 -1
  39. package/src/providers/local/lib/upload.client.ts +6 -6
  40. 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 { initRPC } from "@tulip-systems/core/router/server";
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 { createLocalDriveProcedures };
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: "file" | "folder";
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: "file" | "folder";
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/config";
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<("file" | "folder")[] | null>;
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/config";
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: "file" | "folder" | null;
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: "file" | "folder";
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: "file" | "folder";
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<LocalDriveFileNode>;
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: "file" | "folder";
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: "file" | "folder";
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: "file" | "folder";
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: "file" | "folder";
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: "file" | "folder";
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 { StorageAsset } from "@tulip-systems/core/storage";
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: Omit<StorageAsset, "presignedUrl">;
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: Omit<StorageAsset, "presignedUrl">;
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: Omit<StorageAsset, "presignedUrl">;
44
+ asset: SelectStorageAssetSchema;
45
45
  node: LocalDriveFileNode;
46
46
  uploadId: string;
47
47
  presignedUrl: string;
@@ -1,4 +1,4 @@
1
- import { generateDefaultUUID } from "@tulip-systems/core/config";
1
+ import { generateDefaultUUID } from "@tulip-systems/core/database";
2
2
 
3
3
  //#region src/providers/local/lib/upload.client.ts
4
4
  function createLocalDriveUploadClient(props) {