@axium/storage 0.13.3 → 0.14.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.
@@ -18,6 +18,28 @@ declare const StorageCache: z.ZodObject<{
18
18
  trashedAt: z.ZodNullable<z.ZodCoercedDate<unknown>>;
19
19
  type: z.ZodString;
20
20
  metadata: z.ZodRecord<z.ZodString, z.ZodUnknown>;
21
+ acl: z.ZodOptional<z.ZodArray<z.ZodObject<{
22
+ itemId: z.ZodUUID;
23
+ userId: z.ZodOptional<z.ZodNullable<z.ZodUUID>>;
24
+ role: z.ZodOptional<z.ZodNullable<z.ZodString>>;
25
+ tag: z.ZodOptional<z.ZodNullable<z.ZodString>>;
26
+ user: z.ZodOptional<z.ZodNullable<z.ZodObject<{
27
+ id: z.ZodUUID;
28
+ name: z.ZodString;
29
+ email: z.ZodOptional<z.ZodEmail>;
30
+ emailVerified: z.ZodOptional<z.ZodOptional<z.ZodNullable<z.ZodCoercedDate<unknown>>>>;
31
+ image: z.ZodOptional<z.ZodNullable<z.ZodURL>>;
32
+ preferences: z.ZodOptional<z.ZodLazy<z.ZodObject<{
33
+ debug: z.ZodDefault<z.ZodBoolean>;
34
+ }, z.core.$strip>>>;
35
+ roles: z.ZodArray<z.ZodString>;
36
+ tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
37
+ registeredAt: z.ZodCoercedDate<unknown>;
38
+ isAdmin: z.ZodOptional<z.ZodBoolean>;
39
+ isSuspended: z.ZodOptional<z.ZodBoolean>;
40
+ }, z.core.$strip>>>;
41
+ createdAt: z.ZodCoercedDate<unknown>;
42
+ }, z.core.$loose>>>;
21
43
  }, z.core.$strip>>;
22
44
  users: z.ZodRecord<z.ZodUUID, z.ZodObject<{
23
45
  id: z.ZodUUID;
package/dist/common.d.ts CHANGED
@@ -22,6 +22,28 @@ export declare const StorageItemMetadata: z.ZodObject<{
22
22
  trashedAt: z.ZodNullable<z.ZodCoercedDate<unknown>>;
23
23
  type: z.ZodString;
24
24
  metadata: z.ZodRecord<z.ZodString, z.ZodUnknown>;
25
+ acl: z.ZodOptional<z.ZodArray<z.ZodObject<{
26
+ itemId: z.ZodUUID;
27
+ userId: z.ZodOptional<z.ZodNullable<z.ZodUUID>>;
28
+ role: z.ZodOptional<z.ZodNullable<z.ZodString>>;
29
+ tag: z.ZodOptional<z.ZodNullable<z.ZodString>>;
30
+ user: z.ZodOptional<z.ZodNullable<z.ZodObject<{
31
+ id: z.ZodUUID;
32
+ name: z.ZodString;
33
+ email: z.ZodOptional<z.ZodEmail>;
34
+ emailVerified: z.ZodOptional<z.ZodOptional<z.ZodNullable<z.ZodCoercedDate<unknown>>>>;
35
+ image: z.ZodOptional<z.ZodNullable<z.ZodURL>>;
36
+ preferences: z.ZodOptional<z.ZodLazy<z.ZodObject<{
37
+ debug: z.ZodDefault<z.ZodBoolean>;
38
+ }, z.core.$strip>>>;
39
+ roles: z.ZodArray<z.ZodString>;
40
+ tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
41
+ registeredAt: z.ZodCoercedDate<unknown>;
42
+ isAdmin: z.ZodOptional<z.ZodBoolean>;
43
+ isSuspended: z.ZodOptional<z.ZodBoolean>;
44
+ }, z.core.$strip>>>;
45
+ createdAt: z.ZodCoercedDate<unknown>;
46
+ }, z.core.$loose>>>;
25
47
  }, z.core.$strip>;
26
48
  export interface StorageItemMetadata<T extends Record<string, unknown> = Record<string, unknown>> extends z.infer<typeof StorageItemMetadata> {
27
49
  metadata: T;
@@ -70,6 +92,28 @@ export declare const UserStorage: z.ZodObject<{
70
92
  trashedAt: z.ZodNullable<z.ZodCoercedDate<unknown>>;
71
93
  type: z.ZodString;
72
94
  metadata: z.ZodRecord<z.ZodString, z.ZodUnknown>;
95
+ acl: z.ZodOptional<z.ZodArray<z.ZodObject<{
96
+ itemId: z.ZodUUID;
97
+ userId: z.ZodOptional<z.ZodNullable<z.ZodUUID>>;
98
+ role: z.ZodOptional<z.ZodNullable<z.ZodString>>;
99
+ tag: z.ZodOptional<z.ZodNullable<z.ZodString>>;
100
+ user: z.ZodOptional<z.ZodNullable<z.ZodObject<{
101
+ id: z.ZodUUID;
102
+ name: z.ZodString;
103
+ email: z.ZodOptional<z.ZodEmail>;
104
+ emailVerified: z.ZodOptional<z.ZodOptional<z.ZodNullable<z.ZodCoercedDate<unknown>>>>;
105
+ image: z.ZodOptional<z.ZodNullable<z.ZodURL>>;
106
+ preferences: z.ZodOptional<z.ZodLazy<z.ZodObject<{
107
+ debug: z.ZodDefault<z.ZodBoolean>;
108
+ }, z.core.$strip>>>;
109
+ roles: z.ZodArray<z.ZodString>;
110
+ tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
111
+ registeredAt: z.ZodCoercedDate<unknown>;
112
+ isAdmin: z.ZodOptional<z.ZodBoolean>;
113
+ isSuspended: z.ZodOptional<z.ZodBoolean>;
114
+ }, z.core.$strip>>>;
115
+ createdAt: z.ZodCoercedDate<unknown>;
116
+ }, z.core.$loose>>>;
73
117
  }, z.core.$strip>>;
74
118
  limits: z.ZodObject<{
75
119
  item_size: z.ZodInt;
@@ -178,6 +222,28 @@ declare const StorageAPI: {
178
222
  trashedAt: z.ZodNullable<z.ZodCoercedDate<unknown>>;
179
223
  type: z.ZodString;
180
224
  metadata: z.ZodRecord<z.ZodString, z.ZodUnknown>;
225
+ acl: z.ZodOptional<z.ZodArray<z.ZodObject<{
226
+ itemId: z.ZodUUID;
227
+ userId: z.ZodOptional<z.ZodNullable<z.ZodUUID>>;
228
+ role: z.ZodOptional<z.ZodNullable<z.ZodString>>;
229
+ tag: z.ZodOptional<z.ZodNullable<z.ZodString>>;
230
+ user: z.ZodOptional<z.ZodNullable<z.ZodObject<{
231
+ id: z.ZodUUID;
232
+ name: z.ZodString;
233
+ email: z.ZodOptional<z.ZodEmail>;
234
+ emailVerified: z.ZodOptional<z.ZodOptional<z.ZodNullable<z.ZodCoercedDate<unknown>>>>;
235
+ image: z.ZodOptional<z.ZodNullable<z.ZodURL>>;
236
+ preferences: z.ZodOptional<z.ZodLazy<z.ZodObject<{
237
+ debug: z.ZodDefault<z.ZodBoolean>;
238
+ }, z.core.$strip>>>;
239
+ roles: z.ZodArray<z.ZodString>;
240
+ tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
241
+ registeredAt: z.ZodCoercedDate<unknown>;
242
+ isAdmin: z.ZodOptional<z.ZodBoolean>;
243
+ isSuspended: z.ZodOptional<z.ZodBoolean>;
244
+ }, z.core.$strip>>>;
245
+ createdAt: z.ZodCoercedDate<unknown>;
246
+ }, z.core.$loose>>>;
181
247
  }, z.core.$strip>>;
182
248
  limits: z.ZodObject<{
183
249
  item_size: z.ZodInt;
@@ -205,6 +271,28 @@ declare const StorageAPI: {
205
271
  trashedAt: z.ZodNullable<z.ZodCoercedDate<unknown>>;
206
272
  type: z.ZodString;
207
273
  metadata: z.ZodRecord<z.ZodString, z.ZodUnknown>;
274
+ acl: z.ZodOptional<z.ZodArray<z.ZodObject<{
275
+ itemId: z.ZodUUID;
276
+ userId: z.ZodOptional<z.ZodNullable<z.ZodUUID>>;
277
+ role: z.ZodOptional<z.ZodNullable<z.ZodString>>;
278
+ tag: z.ZodOptional<z.ZodNullable<z.ZodString>>;
279
+ user: z.ZodOptional<z.ZodNullable<z.ZodObject<{
280
+ id: z.ZodUUID;
281
+ name: z.ZodString;
282
+ email: z.ZodOptional<z.ZodEmail>;
283
+ emailVerified: z.ZodOptional<z.ZodOptional<z.ZodNullable<z.ZodCoercedDate<unknown>>>>;
284
+ image: z.ZodOptional<z.ZodNullable<z.ZodURL>>;
285
+ preferences: z.ZodOptional<z.ZodLazy<z.ZodObject<{
286
+ debug: z.ZodDefault<z.ZodBoolean>;
287
+ }, z.core.$strip>>>;
288
+ roles: z.ZodArray<z.ZodString>;
289
+ tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
290
+ registeredAt: z.ZodCoercedDate<unknown>;
291
+ isAdmin: z.ZodOptional<z.ZodBoolean>;
292
+ isSuspended: z.ZodOptional<z.ZodBoolean>;
293
+ }, z.core.$strip>>>;
294
+ createdAt: z.ZodCoercedDate<unknown>;
295
+ }, z.core.$loose>>>;
208
296
  }, z.core.$strip>>;
209
297
  };
210
298
  readonly 'users/:id/storage/trash': {
@@ -222,6 +310,28 @@ declare const StorageAPI: {
222
310
  trashedAt: z.ZodNullable<z.ZodCoercedDate<unknown>>;
223
311
  type: z.ZodString;
224
312
  metadata: z.ZodRecord<z.ZodString, z.ZodUnknown>;
313
+ acl: z.ZodOptional<z.ZodArray<z.ZodObject<{
314
+ itemId: z.ZodUUID;
315
+ userId: z.ZodOptional<z.ZodNullable<z.ZodUUID>>;
316
+ role: z.ZodOptional<z.ZodNullable<z.ZodString>>;
317
+ tag: z.ZodOptional<z.ZodNullable<z.ZodString>>;
318
+ user: z.ZodOptional<z.ZodNullable<z.ZodObject<{
319
+ id: z.ZodUUID;
320
+ name: z.ZodString;
321
+ email: z.ZodOptional<z.ZodEmail>;
322
+ emailVerified: z.ZodOptional<z.ZodOptional<z.ZodNullable<z.ZodCoercedDate<unknown>>>>;
323
+ image: z.ZodOptional<z.ZodNullable<z.ZodURL>>;
324
+ preferences: z.ZodOptional<z.ZodLazy<z.ZodObject<{
325
+ debug: z.ZodDefault<z.ZodBoolean>;
326
+ }, z.core.$strip>>>;
327
+ roles: z.ZodArray<z.ZodString>;
328
+ tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
329
+ registeredAt: z.ZodCoercedDate<unknown>;
330
+ isAdmin: z.ZodOptional<z.ZodBoolean>;
331
+ isSuspended: z.ZodOptional<z.ZodBoolean>;
332
+ }, z.core.$strip>>>;
333
+ createdAt: z.ZodCoercedDate<unknown>;
334
+ }, z.core.$loose>>>;
225
335
  }, z.core.$strip>>;
226
336
  };
227
337
  readonly 'users/:id/storage/shared': {
@@ -239,6 +349,28 @@ declare const StorageAPI: {
239
349
  trashedAt: z.ZodNullable<z.ZodCoercedDate<unknown>>;
240
350
  type: z.ZodString;
241
351
  metadata: z.ZodRecord<z.ZodString, z.ZodUnknown>;
352
+ acl: z.ZodOptional<z.ZodArray<z.ZodObject<{
353
+ itemId: z.ZodUUID;
354
+ userId: z.ZodOptional<z.ZodNullable<z.ZodUUID>>;
355
+ role: z.ZodOptional<z.ZodNullable<z.ZodString>>;
356
+ tag: z.ZodOptional<z.ZodNullable<z.ZodString>>;
357
+ user: z.ZodOptional<z.ZodNullable<z.ZodObject<{
358
+ id: z.ZodUUID;
359
+ name: z.ZodString;
360
+ email: z.ZodOptional<z.ZodEmail>;
361
+ emailVerified: z.ZodOptional<z.ZodOptional<z.ZodNullable<z.ZodCoercedDate<unknown>>>>;
362
+ image: z.ZodOptional<z.ZodNullable<z.ZodURL>>;
363
+ preferences: z.ZodOptional<z.ZodLazy<z.ZodObject<{
364
+ debug: z.ZodDefault<z.ZodBoolean>;
365
+ }, z.core.$strip>>>;
366
+ roles: z.ZodArray<z.ZodString>;
367
+ tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
368
+ registeredAt: z.ZodCoercedDate<unknown>;
369
+ isAdmin: z.ZodOptional<z.ZodBoolean>;
370
+ isSuspended: z.ZodOptional<z.ZodBoolean>;
371
+ }, z.core.$strip>>>;
372
+ createdAt: z.ZodCoercedDate<unknown>;
373
+ }, z.core.$loose>>>;
242
374
  }, z.core.$strip>>;
243
375
  };
244
376
  readonly storage: {
@@ -281,6 +413,28 @@ declare const StorageAPI: {
281
413
  trashedAt: z.ZodNullable<z.ZodCoercedDate<unknown>>;
282
414
  type: z.ZodString;
283
415
  metadata: z.ZodRecord<z.ZodString, z.ZodUnknown>;
416
+ acl: z.ZodOptional<z.ZodArray<z.ZodObject<{
417
+ itemId: z.ZodUUID;
418
+ userId: z.ZodOptional<z.ZodNullable<z.ZodUUID>>;
419
+ role: z.ZodOptional<z.ZodNullable<z.ZodString>>;
420
+ tag: z.ZodOptional<z.ZodNullable<z.ZodString>>;
421
+ user: z.ZodOptional<z.ZodNullable<z.ZodObject<{
422
+ id: z.ZodUUID;
423
+ name: z.ZodString;
424
+ email: z.ZodOptional<z.ZodEmail>;
425
+ emailVerified: z.ZodOptional<z.ZodOptional<z.ZodNullable<z.ZodCoercedDate<unknown>>>>;
426
+ image: z.ZodOptional<z.ZodNullable<z.ZodURL>>;
427
+ preferences: z.ZodOptional<z.ZodLazy<z.ZodObject<{
428
+ debug: z.ZodDefault<z.ZodBoolean>;
429
+ }, z.core.$strip>>>;
430
+ roles: z.ZodArray<z.ZodString>;
431
+ tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
432
+ registeredAt: z.ZodCoercedDate<unknown>;
433
+ isAdmin: z.ZodOptional<z.ZodBoolean>;
434
+ isSuspended: z.ZodOptional<z.ZodBoolean>;
435
+ }, z.core.$strip>>>;
436
+ createdAt: z.ZodCoercedDate<unknown>;
437
+ }, z.core.$loose>>>;
284
438
  }, z.core.$strip>>];
285
439
  };
286
440
  readonly 'storage/item/:id': {
@@ -298,6 +452,28 @@ declare const StorageAPI: {
298
452
  trashedAt: z.ZodNullable<z.ZodCoercedDate<unknown>>;
299
453
  type: z.ZodString;
300
454
  metadata: z.ZodRecord<z.ZodString, z.ZodUnknown>;
455
+ acl: z.ZodOptional<z.ZodArray<z.ZodObject<{
456
+ itemId: z.ZodUUID;
457
+ userId: z.ZodOptional<z.ZodNullable<z.ZodUUID>>;
458
+ role: z.ZodOptional<z.ZodNullable<z.ZodString>>;
459
+ tag: z.ZodOptional<z.ZodNullable<z.ZodString>>;
460
+ user: z.ZodOptional<z.ZodNullable<z.ZodObject<{
461
+ id: z.ZodUUID;
462
+ name: z.ZodString;
463
+ email: z.ZodOptional<z.ZodEmail>;
464
+ emailVerified: z.ZodOptional<z.ZodOptional<z.ZodNullable<z.ZodCoercedDate<unknown>>>>;
465
+ image: z.ZodOptional<z.ZodNullable<z.ZodURL>>;
466
+ preferences: z.ZodOptional<z.ZodLazy<z.ZodObject<{
467
+ debug: z.ZodDefault<z.ZodBoolean>;
468
+ }, z.core.$strip>>>;
469
+ roles: z.ZodArray<z.ZodString>;
470
+ tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
471
+ registeredAt: z.ZodCoercedDate<unknown>;
472
+ isAdmin: z.ZodOptional<z.ZodBoolean>;
473
+ isSuspended: z.ZodOptional<z.ZodBoolean>;
474
+ }, z.core.$strip>>>;
475
+ createdAt: z.ZodCoercedDate<unknown>;
476
+ }, z.core.$loose>>>;
301
477
  }, z.core.$strip>;
302
478
  readonly DELETE: z.ZodObject<{
303
479
  createdAt: z.ZodCoercedDate<unknown>;
@@ -313,6 +489,28 @@ declare const StorageAPI: {
313
489
  trashedAt: z.ZodNullable<z.ZodCoercedDate<unknown>>;
314
490
  type: z.ZodString;
315
491
  metadata: z.ZodRecord<z.ZodString, z.ZodUnknown>;
492
+ acl: z.ZodOptional<z.ZodArray<z.ZodObject<{
493
+ itemId: z.ZodUUID;
494
+ userId: z.ZodOptional<z.ZodNullable<z.ZodUUID>>;
495
+ role: z.ZodOptional<z.ZodNullable<z.ZodString>>;
496
+ tag: z.ZodOptional<z.ZodNullable<z.ZodString>>;
497
+ user: z.ZodOptional<z.ZodNullable<z.ZodObject<{
498
+ id: z.ZodUUID;
499
+ name: z.ZodString;
500
+ email: z.ZodOptional<z.ZodEmail>;
501
+ emailVerified: z.ZodOptional<z.ZodOptional<z.ZodNullable<z.ZodCoercedDate<unknown>>>>;
502
+ image: z.ZodOptional<z.ZodNullable<z.ZodURL>>;
503
+ preferences: z.ZodOptional<z.ZodLazy<z.ZodObject<{
504
+ debug: z.ZodDefault<z.ZodBoolean>;
505
+ }, z.core.$strip>>>;
506
+ roles: z.ZodArray<z.ZodString>;
507
+ tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
508
+ registeredAt: z.ZodCoercedDate<unknown>;
509
+ isAdmin: z.ZodOptional<z.ZodBoolean>;
510
+ isSuspended: z.ZodOptional<z.ZodBoolean>;
511
+ }, z.core.$strip>>>;
512
+ createdAt: z.ZodCoercedDate<unknown>;
513
+ }, z.core.$loose>>>;
316
514
  }, z.core.$strip>;
317
515
  readonly PATCH: readonly [z.ZodObject<{
318
516
  name: z.ZodOptional<z.ZodString>;
@@ -332,6 +530,28 @@ declare const StorageAPI: {
332
530
  trashedAt: z.ZodNullable<z.ZodCoercedDate<unknown>>;
333
531
  type: z.ZodString;
334
532
  metadata: z.ZodRecord<z.ZodString, z.ZodUnknown>;
533
+ acl: z.ZodOptional<z.ZodArray<z.ZodObject<{
534
+ itemId: z.ZodUUID;
535
+ userId: z.ZodOptional<z.ZodNullable<z.ZodUUID>>;
536
+ role: z.ZodOptional<z.ZodNullable<z.ZodString>>;
537
+ tag: z.ZodOptional<z.ZodNullable<z.ZodString>>;
538
+ user: z.ZodOptional<z.ZodNullable<z.ZodObject<{
539
+ id: z.ZodUUID;
540
+ name: z.ZodString;
541
+ email: z.ZodOptional<z.ZodEmail>;
542
+ emailVerified: z.ZodOptional<z.ZodOptional<z.ZodNullable<z.ZodCoercedDate<unknown>>>>;
543
+ image: z.ZodOptional<z.ZodNullable<z.ZodURL>>;
544
+ preferences: z.ZodOptional<z.ZodLazy<z.ZodObject<{
545
+ debug: z.ZodDefault<z.ZodBoolean>;
546
+ }, z.core.$strip>>>;
547
+ roles: z.ZodArray<z.ZodString>;
548
+ tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
549
+ registeredAt: z.ZodCoercedDate<unknown>;
550
+ isAdmin: z.ZodOptional<z.ZodBoolean>;
551
+ isSuspended: z.ZodOptional<z.ZodBoolean>;
552
+ }, z.core.$strip>>>;
553
+ createdAt: z.ZodCoercedDate<unknown>;
554
+ }, z.core.$loose>>>;
335
555
  }, z.core.$strip>];
336
556
  };
337
557
  readonly 'storage/directory/:id': {
@@ -349,6 +569,28 @@ declare const StorageAPI: {
349
569
  trashedAt: z.ZodNullable<z.ZodCoercedDate<unknown>>;
350
570
  type: z.ZodString;
351
571
  metadata: z.ZodRecord<z.ZodString, z.ZodUnknown>;
572
+ acl: z.ZodOptional<z.ZodArray<z.ZodObject<{
573
+ itemId: z.ZodUUID;
574
+ userId: z.ZodOptional<z.ZodNullable<z.ZodUUID>>;
575
+ role: z.ZodOptional<z.ZodNullable<z.ZodString>>;
576
+ tag: z.ZodOptional<z.ZodNullable<z.ZodString>>;
577
+ user: z.ZodOptional<z.ZodNullable<z.ZodObject<{
578
+ id: z.ZodUUID;
579
+ name: z.ZodString;
580
+ email: z.ZodOptional<z.ZodEmail>;
581
+ emailVerified: z.ZodOptional<z.ZodOptional<z.ZodNullable<z.ZodCoercedDate<unknown>>>>;
582
+ image: z.ZodOptional<z.ZodNullable<z.ZodURL>>;
583
+ preferences: z.ZodOptional<z.ZodLazy<z.ZodObject<{
584
+ debug: z.ZodDefault<z.ZodBoolean>;
585
+ }, z.core.$strip>>>;
586
+ roles: z.ZodArray<z.ZodString>;
587
+ tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
588
+ registeredAt: z.ZodCoercedDate<unknown>;
589
+ isAdmin: z.ZodOptional<z.ZodBoolean>;
590
+ isSuspended: z.ZodOptional<z.ZodBoolean>;
591
+ }, z.core.$strip>>>;
592
+ createdAt: z.ZodCoercedDate<unknown>;
593
+ }, z.core.$loose>>>;
352
594
  }, z.core.$strip>>;
353
595
  };
354
596
  readonly 'storage/directory/:id/recursive': {
@@ -366,6 +608,28 @@ declare const StorageAPI: {
366
608
  trashedAt: z.ZodNullable<z.ZodCoercedDate<unknown>>;
367
609
  type: z.ZodString;
368
610
  metadata: z.ZodRecord<z.ZodString, z.ZodUnknown>;
611
+ acl: z.ZodOptional<z.ZodArray<z.ZodObject<{
612
+ itemId: z.ZodUUID;
613
+ userId: z.ZodOptional<z.ZodNullable<z.ZodUUID>>;
614
+ role: z.ZodOptional<z.ZodNullable<z.ZodString>>;
615
+ tag: z.ZodOptional<z.ZodNullable<z.ZodString>>;
616
+ user: z.ZodOptional<z.ZodNullable<z.ZodObject<{
617
+ id: z.ZodUUID;
618
+ name: z.ZodString;
619
+ email: z.ZodOptional<z.ZodEmail>;
620
+ emailVerified: z.ZodOptional<z.ZodOptional<z.ZodNullable<z.ZodCoercedDate<unknown>>>>;
621
+ image: z.ZodOptional<z.ZodNullable<z.ZodURL>>;
622
+ preferences: z.ZodOptional<z.ZodLazy<z.ZodObject<{
623
+ debug: z.ZodDefault<z.ZodBoolean>;
624
+ }, z.core.$strip>>>;
625
+ roles: z.ZodArray<z.ZodString>;
626
+ tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
627
+ registeredAt: z.ZodCoercedDate<unknown>;
628
+ isAdmin: z.ZodOptional<z.ZodBoolean>;
629
+ isSuspended: z.ZodOptional<z.ZodBoolean>;
630
+ }, z.core.$strip>>>;
631
+ createdAt: z.ZodCoercedDate<unknown>;
632
+ }, z.core.$loose>>>;
369
633
  path: z.ZodString;
370
634
  }, z.core.$strip>>;
371
635
  };
package/dist/common.js CHANGED
@@ -1,4 +1,4 @@
1
- import { $API, setServerConfig } from '@axium/core';
1
+ import { $API, AccessControl, setServerConfig } from '@axium/core';
2
2
  import * as z from 'zod';
3
3
  /**
4
4
  * An update to file metadata.
@@ -25,6 +25,7 @@ export const StorageItemMetadata = z.object({
25
25
  trashedAt: z.coerce.date().nullable(),
26
26
  type: z.string(),
27
27
  metadata: z.record(z.string(), z.unknown()),
28
+ acl: AccessControl.array().optional(),
28
29
  });
29
30
  export const syncProtocolVersion = 0;
30
31
  export const StorageLimits = z.object({
@@ -9,6 +9,7 @@ import { batchFormatVersion, StorageItemUpdate, syncProtocolVersion } from '../c
9
9
  import '../polyfills.js';
10
10
  import { getLimits } from './config.js';
11
11
  import { deleteRecursive, getRecursive, getUserStats, parseItem } from './db.js';
12
+ import { from as aclFrom } from '@axium/server/acl';
12
13
  addRoute({
13
14
  path: '/api/storage',
14
15
  OPTIONS() {
@@ -70,6 +71,7 @@ addRoute({
70
71
  error(409, 'Item is not a directory');
71
72
  const items = await database
72
73
  .selectFrom('storage')
74
+ .select(aclFrom('storage'))
73
75
  .where('parentId', '=', itemId)
74
76
  .where('trashedAt', 'is', null)
75
77
  .selectAll()
@@ -121,6 +123,7 @@ addRoute({
121
123
  await checkAuthForUser(request, userId);
122
124
  const items = await database
123
125
  .selectFrom('storage')
126
+ .select(aclFrom('storage'))
124
127
  .where('userId', '=', userId)
125
128
  .where('trashedAt', 'is', null)
126
129
  .where('parentId', 'is', null)
@@ -154,6 +157,7 @@ addRoute({
154
157
  const items = await database
155
158
  .selectFrom('storage as item')
156
159
  .selectAll('item')
160
+ .select(aclFrom('storage', { alias: 'item' }))
157
161
  .where('trashedAt', 'is', null)
158
162
  .where(existsInACL('id', user))
159
163
  .where(eb => eb.not(existsInACL('parentId', user)))
package/lib/List.svelte CHANGED
@@ -1,6 +1,7 @@
1
1
  <script lang="ts">
2
2
  import { AccessControlDialog, FormDialog, Icon } from '@axium/client/components';
3
3
  import '@axium/client/styles/list';
4
+ import type { AccessControllable, UserPublic } from '@axium/core';
4
5
  import { formatBytes } from '@axium/core/format';
5
6
  import { forMime as iconForMime } from '@axium/core/icons';
6
7
  import { getDirectoryMetadata, updateItemMetadata } from '@axium/storage/client';
@@ -10,19 +11,18 @@
10
11
  items = $bindable(),
11
12
  appMode,
12
13
  emptyText = 'Folder is empty.',
13
- }: { appMode?: boolean; items: StorageItemMetadata[]; emptyText?: string } = $props();
14
+ user,
15
+ }: { appMode?: boolean; items: (StorageItemMetadata & AccessControllable)[]; emptyText?: string; user?: UserPublic } = $props();
14
16
 
15
- let activeIndex = $state<number>(-1);
16
- let activeItem = $derived(activeIndex == -1 ? null : items[activeIndex]);
17
+ let activeIndex = $state<number>(0);
18
+ const activeItem = $derived(items[activeIndex]);
17
19
  const dialogs = $state<Record<string, HTMLDialogElement>>({});
18
20
  </script>
19
21
 
20
22
  {#snippet action(name: string, icon: string, i: number)}
21
23
  <span
22
24
  class="action"
23
- onclick={(e: Event) => {
24
- e.stopPropagation();
25
- e.preventDefault();
25
+ onclick={() => {
26
26
  activeIndex = i;
27
27
  dialogs[name].showModal();
28
28
  }}
@@ -60,10 +60,30 @@
60
60
  <span class="name">{item.name}</span>
61
61
  <span>{item.modifiedAt.toLocaleString()}</span>
62
62
  <span>{item.type == 'inode/directory' ? '—' : formatBytes(item.size)}</span>
63
- {@render action('rename', 'pencil', i)}
64
- {@render action('share', 'user-group', i)}
65
- {@render action('download', 'download', i)}
66
- {@render action('trash', 'trash', i)}
63
+ <div
64
+ style:display="contents"
65
+ onclick={e => {
66
+ e.stopPropagation();
67
+ e.stopImmediatePropagation();
68
+ }}
69
+ >
70
+ {@render action('rename', 'pencil', i)}
71
+ {@render action('share' + item.id, 'user-group', i)}
72
+ <AccessControlDialog
73
+ bind:dialog={dialogs['share' + item.id]}
74
+ {item}
75
+ itemType="storage"
76
+ editable={(item.acl?.find(
77
+ a =>
78
+ a.userId == user?.id ||
79
+ (a.role && user?.roles.includes(a.role)) ||
80
+ (a.tag && user?.tags?.includes(a.tag)) ||
81
+ (!a.userId && !a.role && !a.tag)
82
+ )?.manage as boolean | undefined) ?? true}
83
+ />
84
+ {@render action('download', 'download', i)}
85
+ {@render action('trash', 'trash', i)}
86
+ </div>
67
87
  </div>
68
88
  {:else}
69
89
  <p class="list-empty">{emptyText}</p>
@@ -84,7 +104,6 @@
84
104
  <input name="name" type="text" required value={activeItem?.name} />
85
105
  </div>
86
106
  </FormDialog>
87
- <AccessControlDialog bind:dialog={dialogs.share} bind:item={activeItem} itemType="storage" editable={true} />
88
107
  <FormDialog
89
108
  bind:dialog={dialogs.trash}
90
109
  submitText="Trash"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@axium/storage",
3
- "version": "0.13.3",
3
+ "version": "0.14.0",
4
4
  "author": "James Prevett <axium@jamespre.dev>",
5
5
  "description": "User file storage for Axium",
6
6
  "funding": {
@@ -39,9 +39,9 @@
39
39
  "build": "tsc"
40
40
  },
41
41
  "peerDependencies": {
42
- "@axium/client": ">=0.12.0",
43
- "@axium/core": ">=0.18.0",
44
- "@axium/server": ">=0.30.0",
42
+ "@axium/client": ">=0.13.0",
43
+ "@axium/core": ">=0.19.0",
44
+ "@axium/server": ">=0.34.0",
45
45
  "@sveltejs/kit": "^2.27.3",
46
46
  "utilium": "^2.3.8"
47
47
  },
@@ -1,65 +1,14 @@
1
1
  <script lang="ts">
2
- import { Icon } from '@axium/client/components';
2
+ import SidebarLayout from '@axium/client/components/SidebarLayout';
3
3
  import { StorageUsage } from '@axium/storage/components';
4
- import { capitalize } from 'utilium';
5
4
 
6
5
  let { children, data } = $props();
7
6
  </script>
8
7
 
9
- <div class="app">
10
- <div class="sidebar">
11
- {#each data.tabs as { href, name, icon: i, active }}
12
- <a {href} class={['item', 'icon-text', active && 'active']}><Icon {i} /> {capitalize(name)}</a>
13
- {/each}
8
+ <SidebarLayout tabs={data.tabs}>
9
+ {#snippet bottom()}
10
+ <StorageUsage userId={data.session?.userId} />
11
+ {/snippet}
14
12
 
15
- <div class="usage">
16
- <StorageUsage userId={data.session?.userId} />
17
- </div>
18
- </div>
19
-
20
- <div class="files-content">
21
- {@render children()}
22
- </div>
23
- </div>
24
-
25
- <style>
26
- .app {
27
- display: grid;
28
- grid-template-columns: 15em 1fr;
29
- height: 100%;
30
- }
31
-
32
- .sidebar {
33
- grid-column: 1;
34
- width: 100%;
35
- display: inline-flex;
36
- flex-direction: column;
37
- gap: 0.5em;
38
- padding-left: 1em;
39
- }
40
-
41
- .item {
42
- padding: 0.3em 0.5em;
43
- border-radius: 0.25em 1em 1em 0.25em;
44
- }
45
-
46
- .item:hover {
47
- background-color: var(--bg-accent);
48
- cursor: pointer;
49
- }
50
-
51
- .item.active {
52
- background-color: var(--bg-accent);
53
- }
54
-
55
- .usage {
56
- margin-top: auto;
57
- }
58
-
59
- .files-content {
60
- grid-column: 2;
61
- padding: 1em;
62
- overflow-x: hidden;
63
- overflow-y: scroll;
64
- }
65
- </style>
13
+ {@render children()}
14
+ </SidebarLayout>
@@ -1,11 +1,11 @@
1
1
  import { getCurrentSession } from '@axium/client/user';
2
- import type { Session } from '@axium/core';
2
+ import type { Session, User } from '@axium/core';
3
3
  import type { LayoutRouteId } from './$types';
4
4
 
5
5
  export const ssr = false;
6
6
 
7
7
  export async function load({ url, route, parent }) {
8
- let { session }: { session?: Session | null } = await parent();
8
+ let { session }: { session?: (Session & { user: User }) | null } = await parent();
9
9
 
10
10
  session ||= await getCurrentSession().catch(() => null);
11
11
 
@@ -9,5 +9,5 @@
9
9
  <title>Files</title>
10
10
  </svelte:head>
11
11
 
12
- <StorageList appMode bind:items />
12
+ <StorageList appMode bind:items user={data.session?.user} />
13
13
  <StorageAdd onadd={item => items.push(item)} />
@@ -34,7 +34,7 @@
34
34
  >
35
35
  <Icon i="folder-arrow-up" /> Back
36
36
  </button>
37
- <StorageList appMode bind:items />
37
+ <StorageList appMode bind:items user={data.session?.user} />
38
38
  <StorageAdd parentId={item.id} onadd={item => items.push(item)} />
39
39
  {:else}
40
40
  <p>No preview available.</p>
@@ -1,38 +1,12 @@
1
1
  <script lang="ts">
2
- import { Icon } from '@axium/client/components';
3
- import '@axium/client/styles/list';
4
- import { formatBytes } from '@axium/core/format';
5
- import { forMime as iconForMime } from '@axium/core/icons';
6
- import type { PageProps } from './$types';
2
+ import { StorageList } from '@axium/storage/components';
7
3
 
8
- const { data }: PageProps = $props();
4
+ const { data } = $props();
5
+ let items = $state(data.items!);
9
6
  </script>
10
7
 
11
8
  <svelte:head>
12
9
  <title>Files - Shared With You</title>
13
10
  </svelte:head>
14
11
 
15
- <div class="list">
16
- <div class="list-item list-header">
17
- <span></span>
18
- <span>Name</span>
19
- <span>Last Modified</span>
20
- <span>Size</span>
21
- </div>
22
- {#each data.items as item, i (item.id)}
23
- <div class="list-item">
24
- <dfn title={item.type}><Icon i={iconForMime(item.type)} /></dfn>
25
- <span class="name">{item.name}</span>
26
- <span>{item.modifiedAt.toLocaleString()}</span>
27
- <span>{formatBytes(item.size)}</span>
28
- </div>
29
- {:else}
30
- <p class="list-empty">No items have been shared with you.</p>
31
- {/each}
32
- </div>
33
-
34
- <style>
35
- .list-item {
36
- grid-template-columns: 1em 4fr 15em 5em;
37
- }
38
- </style>
12
+ <StorageList appMode bind:items emptyText="No items have been shared with you." user={data.session?.user} />
@@ -21,4 +21,4 @@
21
21
 
22
22
  <p><NumberBar max={limits.user_size * 1_000_000} value={usedBytes} text={barText} /></p>
23
23
 
24
- <StorageList bind:items emptyText="You have not uploaded any files yet." />
24
+ <StorageList bind:items emptyText="You have not uploaded any files yet." user={data.session?.user} />