@btst/stack 2.11.0 → 2.11.1

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 (62) hide show
  1. package/dist/packages/stack/src/plugins/media/api/plugin.cjs +4 -1
  2. package/dist/packages/stack/src/plugins/media/api/plugin.mjs +5 -2
  3. package/dist/plugins/blog/api/index.d.cts +2 -2
  4. package/dist/plugins/blog/api/index.d.mts +2 -2
  5. package/dist/plugins/blog/api/index.d.ts +2 -2
  6. package/dist/plugins/blog/client/hooks/index.d.cts +2 -2
  7. package/dist/plugins/blog/client/hooks/index.d.mts +2 -2
  8. package/dist/plugins/blog/client/hooks/index.d.ts +2 -2
  9. package/dist/plugins/blog/client/index.d.cts +2 -2
  10. package/dist/plugins/blog/client/index.d.mts +2 -2
  11. package/dist/plugins/blog/client/index.d.ts +2 -2
  12. package/dist/plugins/blog/query-keys.d.cts +2 -2
  13. package/dist/plugins/blog/query-keys.d.mts +2 -2
  14. package/dist/plugins/blog/query-keys.d.ts +2 -2
  15. package/dist/plugins/kanban/api/index.d.cts +1 -1
  16. package/dist/plugins/kanban/api/index.d.mts +1 -1
  17. package/dist/plugins/kanban/api/index.d.ts +1 -1
  18. package/dist/plugins/kanban/query-keys.d.cts +1 -1
  19. package/dist/plugins/kanban/query-keys.d.mts +1 -1
  20. package/dist/plugins/kanban/query-keys.d.ts +1 -1
  21. package/dist/{packages/stack/src/plugins → plugins}/media/api/adapters/local.cjs +7 -1
  22. package/dist/plugins/media/api/adapters/local.d.cts +30 -0
  23. package/dist/plugins/media/api/adapters/local.d.mts +30 -0
  24. package/dist/plugins/media/api/adapters/local.d.ts +30 -0
  25. package/dist/{packages/stack/src/plugins → plugins}/media/api/adapters/local.mjs +7 -1
  26. package/dist/plugins/media/api/adapters/s3.d.cts +1 -1
  27. package/dist/plugins/media/api/adapters/s3.d.mts +1 -1
  28. package/dist/plugins/media/api/adapters/s3.d.ts +1 -1
  29. package/dist/plugins/media/api/adapters/vercel-blob.d.cts +1 -1
  30. package/dist/plugins/media/api/adapters/vercel-blob.d.mts +1 -1
  31. package/dist/plugins/media/api/adapters/vercel-blob.d.ts +1 -1
  32. package/dist/plugins/media/api/index.cjs +0 -2
  33. package/dist/plugins/media/api/index.d.cts +5 -102
  34. package/dist/plugins/media/api/index.d.mts +5 -102
  35. package/dist/plugins/media/api/index.d.ts +5 -102
  36. package/dist/plugins/media/api/index.mjs +0 -1
  37. package/dist/plugins/media/query-keys.d.cts +2 -2
  38. package/dist/plugins/media/query-keys.d.mts +2 -2
  39. package/dist/plugins/media/query-keys.d.ts +2 -2
  40. package/dist/shared/{stack.Bci0-plK.d.ts → stack.C5ucdatf.d.ts} +76 -3
  41. package/dist/shared/{stack.IUeyQKrm.d.mts → stack.DEW8EtFu.d.cts} +13 -13
  42. package/dist/shared/{stack.6mEHS2WH.d.mts → stack.DGsFF5qb.d.cts} +6 -6
  43. package/dist/shared/{stack.C_MUwwgR.d.mts → stack.DpZoZd98.d.mts} +76 -3
  44. package/dist/shared/{stack.DjgpFWq3.d.cts → stack.DvMUCTTl.d.mts} +13 -13
  45. package/dist/shared/{stack.AJTXI7kw.d.cts → stack.NtflNnnH.d.mts} +6 -6
  46. package/dist/shared/{stack.QYn-Px94.d.ts → stack.QrBE0Bc8.d.ts} +6 -6
  47. package/dist/shared/{stack.DO6vOGQG.d.cts → stack.lkebw2nj.d.cts} +1 -1
  48. package/dist/shared/{stack.DO6vOGQG.d.mts → stack.lkebw2nj.d.mts} +1 -1
  49. package/dist/shared/{stack.DO6vOGQG.d.ts → stack.lkebw2nj.d.ts} +1 -1
  50. package/dist/shared/{stack.D7HSzZdG.d.ts → stack.qta0-CPq.d.ts} +13 -13
  51. package/dist/shared/{stack.D6zyQnMo.d.cts → stack.vVFh38aS.d.cts} +76 -3
  52. package/package.json +14 -1
  53. package/src/plugins/media/__tests__/storage-adapters.test.ts +11 -0
  54. package/src/plugins/media/api/adapters/local.ts +10 -1
  55. package/src/plugins/media/api/index.ts +0 -5
  56. package/src/plugins/media/api/plugin.ts +6 -0
  57. package/dist/shared/{stack.eq5eg1yt.d.cts → stack.BOokfhZD.d.cts} +13 -13
  58. package/dist/shared/{stack.CMbX8Q5C.d.ts → stack.BvCR4-9H.d.ts} +13 -13
  59. package/dist/shared/{stack.Dj04W2c3.d.mts → stack.CWxAl9K3.d.mts} +13 -13
  60. package/dist/shared/{stack.BQmuNl5p.d.ts → stack.Sod_PZhB.d.cts} +9 -9
  61. package/dist/shared/{stack.BQmuNl5p.d.cts → stack.Sod_PZhB.d.mts} +9 -9
  62. package/dist/shared/{stack.BQmuNl5p.d.mts → stack.Sod_PZhB.d.ts} +9 -9
@@ -22,9 +22,12 @@ const mediaBackendPlugin = (config) => api.defineBackendPlugin({
22
22
  api: (adapter) => ({
23
23
  listAssets: (params) => getters.listAssets(adapter, params),
24
24
  getAssetById: (id) => getters.getAssetById(adapter, id),
25
+ createAsset: (input) => mutations.createAsset(adapter, input),
26
+ updateAsset: (id, input) => mutations.updateAsset(adapter, id, input),
25
27
  listFolders: (params) => getters.listFolders(adapter, params),
26
28
  getFolderById: (id) => getters.getFolderById(adapter, id),
27
- getFolderByName: (name, parentId, tenantId) => getters.getFolderByName(adapter, name, parentId, tenantId)
29
+ getFolderByName: (name, parentId, tenantId) => getters.getFolderByName(adapter, name, parentId, tenantId),
30
+ createFolder: (input) => mutations.createFolder(adapter, input)
28
31
  }),
29
32
  routes: (adapter) => {
30
33
  const {
@@ -3,7 +3,7 @@ import { z } from 'zod';
3
3
  import { mediaSchema } from '../db.mjs';
4
4
  import { AssetListQuerySchema, createAssetSchema, updateAssetSchema, createFolderSchema, uploadTokenRequestSchema } from '../schemas.mjs';
5
5
  import { getFolderByName, getFolderById, listFolders, getAssetById, listAssets } from './getters.mjs';
6
- import { createAsset, updateAsset, deleteAsset, createFolder, deleteFolder } from './mutations.mjs';
6
+ import { createFolder, updateAsset, createAsset, deleteAsset, deleteFolder } from './mutations.mjs';
7
7
  import { isDirectAdapter, isS3Adapter, isVercelBlobAdapter } from './storage-adapter.mjs';
8
8
  import { runHookWithShim } from '../../utils.mjs';
9
9
 
@@ -20,9 +20,12 @@ const mediaBackendPlugin = (config) => defineBackendPlugin({
20
20
  api: (adapter) => ({
21
21
  listAssets: (params) => listAssets(adapter, params),
22
22
  getAssetById: (id) => getAssetById(adapter, id),
23
+ createAsset: (input) => createAsset(adapter, input),
24
+ updateAsset: (id, input) => updateAsset(adapter, id, input),
23
25
  listFolders: (params) => listFolders(adapter, params),
24
26
  getFolderById: (id) => getFolderById(adapter, id),
25
- getFolderByName: (name, parentId, tenantId) => getFolderByName(adapter, name, parentId, tenantId)
27
+ getFolderByName: (name, parentId, tenantId) => getFolderByName(adapter, name, parentId, tenantId),
28
+ createFolder: (input) => createFolder(adapter, input)
26
29
  }),
27
30
  routes: (adapter) => {
28
31
  const {
@@ -1,5 +1,5 @@
1
- export { B as BLOG_QUERY_KEYS, h as BlogApiContext, k as BlogApiRouter, i as BlogBackendHooks, e as BlogRouteKey, N as NextPreviousPostsQuerySchema, P as PostListParams, f as PostListQuerySchema, c as PostListResult, j as blogBackendPlugin, d as createBlogQueryKeys, g as getAllPosts, b as getAllTags, a as getPostBySlug } from '../../../shared/stack.DjgpFWq3.cjs';
2
- import { P as Post, T as Tag, S as SerializedPost, a as SerializedTag } from '../../../shared/stack.BQmuNl5p.cjs';
1
+ export { B as BLOG_QUERY_KEYS, h as BlogApiContext, k as BlogApiRouter, i as BlogBackendHooks, e as BlogRouteKey, N as NextPreviousPostsQuerySchema, P as PostListParams, f as PostListQuerySchema, c as PostListResult, j as blogBackendPlugin, d as createBlogQueryKeys, g as getAllPosts, b as getAllTags, a as getPostBySlug } from '../../../shared/stack.DEW8EtFu.cjs';
2
+ import { P as Post, T as Tag, S as SerializedPost, a as SerializedTag } from '../../../shared/stack.Sod_PZhB.cjs';
3
3
  import '@tanstack/react-query';
4
4
  import '@btst/stack/plugins/client';
5
5
  import '@btst/stack/plugins/api';
@@ -1,5 +1,5 @@
1
- export { B as BLOG_QUERY_KEYS, h as BlogApiContext, k as BlogApiRouter, i as BlogBackendHooks, e as BlogRouteKey, N as NextPreviousPostsQuerySchema, P as PostListParams, f as PostListQuerySchema, c as PostListResult, j as blogBackendPlugin, d as createBlogQueryKeys, g as getAllPosts, b as getAllTags, a as getPostBySlug } from '../../../shared/stack.IUeyQKrm.mjs';
2
- import { P as Post, T as Tag, S as SerializedPost, a as SerializedTag } from '../../../shared/stack.BQmuNl5p.mjs';
1
+ export { B as BLOG_QUERY_KEYS, h as BlogApiContext, k as BlogApiRouter, i as BlogBackendHooks, e as BlogRouteKey, N as NextPreviousPostsQuerySchema, P as PostListParams, f as PostListQuerySchema, c as PostListResult, j as blogBackendPlugin, d as createBlogQueryKeys, g as getAllPosts, b as getAllTags, a as getPostBySlug } from '../../../shared/stack.DvMUCTTl.mjs';
2
+ import { P as Post, T as Tag, S as SerializedPost, a as SerializedTag } from '../../../shared/stack.Sod_PZhB.mjs';
3
3
  import '@tanstack/react-query';
4
4
  import '@btst/stack/plugins/client';
5
5
  import '@btst/stack/plugins/api';
@@ -1,5 +1,5 @@
1
- export { B as BLOG_QUERY_KEYS, h as BlogApiContext, k as BlogApiRouter, i as BlogBackendHooks, e as BlogRouteKey, N as NextPreviousPostsQuerySchema, P as PostListParams, f as PostListQuerySchema, c as PostListResult, j as blogBackendPlugin, d as createBlogQueryKeys, g as getAllPosts, b as getAllTags, a as getPostBySlug } from '../../../shared/stack.D7HSzZdG.js';
2
- import { P as Post, T as Tag, S as SerializedPost, a as SerializedTag } from '../../../shared/stack.BQmuNl5p.js';
1
+ export { B as BLOG_QUERY_KEYS, h as BlogApiContext, k as BlogApiRouter, i as BlogBackendHooks, e as BlogRouteKey, N as NextPreviousPostsQuerySchema, P as PostListParams, f as PostListQuerySchema, c as PostListResult, j as blogBackendPlugin, d as createBlogQueryKeys, g as getAllPosts, b as getAllTags, a as getPostBySlug } from '../../../shared/stack.qta0-CPq.js';
2
+ import { P as Post, T as Tag, S as SerializedPost, a as SerializedTag } from '../../../shared/stack.Sod_PZhB.js';
3
3
  import '@tanstack/react-query';
4
4
  import '@btst/stack/plugins/client';
5
5
  import '@btst/stack/plugins/api';
@@ -1,6 +1,6 @@
1
- export { P as PostCreateInput, e as PostUpdateInput, o as UseNextPreviousPostsOptions, p as UseNextPreviousPostsResult, d as UsePostResult, b as UsePostSearchOptions, c as UsePostSearchResult, U as UsePostsOptions, a as UsePostsResult, r as UseRecentPostsOptions, s as UseRecentPostsResult, k as useCreatePost, m as useDeletePost, q as useNextPreviousPosts, g as usePost, n as usePostSearch, u as usePosts, t as useRecentPosts, h as useSuspensePost, f as useSuspensePosts, j as useSuspenseTags, i as useTags, l as useUpdatePost } from '../../../../shared/stack.AJTXI7kw.cjs';
1
+ export { P as PostCreateInput, e as PostUpdateInput, o as UseNextPreviousPostsOptions, p as UseNextPreviousPostsResult, d as UsePostResult, b as UsePostSearchOptions, c as UsePostSearchResult, U as UsePostsOptions, a as UsePostsResult, r as UseRecentPostsOptions, s as UseRecentPostsResult, k as useCreatePost, m as useDeletePost, q as useNextPreviousPosts, g as usePost, n as usePostSearch, u as usePosts, t as useRecentPosts, h as useSuspensePost, f as useSuspensePosts, j as useSuspenseTags, i as useTags, l as useUpdatePost } from '../../../../shared/stack.DGsFF5qb.cjs';
2
2
  import '@tanstack/react-query';
3
- import '../../../../shared/stack.BQmuNl5p.cjs';
3
+ import '../../../../shared/stack.Sod_PZhB.cjs';
4
4
  import 'zod';
5
5
 
6
6
  declare function useDebounce<T>(value: T, delay?: number): T;
@@ -1,6 +1,6 @@
1
- export { P as PostCreateInput, e as PostUpdateInput, o as UseNextPreviousPostsOptions, p as UseNextPreviousPostsResult, d as UsePostResult, b as UsePostSearchOptions, c as UsePostSearchResult, U as UsePostsOptions, a as UsePostsResult, r as UseRecentPostsOptions, s as UseRecentPostsResult, k as useCreatePost, m as useDeletePost, q as useNextPreviousPosts, g as usePost, n as usePostSearch, u as usePosts, t as useRecentPosts, h as useSuspensePost, f as useSuspensePosts, j as useSuspenseTags, i as useTags, l as useUpdatePost } from '../../../../shared/stack.6mEHS2WH.mjs';
1
+ export { P as PostCreateInput, e as PostUpdateInput, o as UseNextPreviousPostsOptions, p as UseNextPreviousPostsResult, d as UsePostResult, b as UsePostSearchOptions, c as UsePostSearchResult, U as UsePostsOptions, a as UsePostsResult, r as UseRecentPostsOptions, s as UseRecentPostsResult, k as useCreatePost, m as useDeletePost, q as useNextPreviousPosts, g as usePost, n as usePostSearch, u as usePosts, t as useRecentPosts, h as useSuspensePost, f as useSuspensePosts, j as useSuspenseTags, i as useTags, l as useUpdatePost } from '../../../../shared/stack.NtflNnnH.mjs';
2
2
  import '@tanstack/react-query';
3
- import '../../../../shared/stack.BQmuNl5p.mjs';
3
+ import '../../../../shared/stack.Sod_PZhB.mjs';
4
4
  import 'zod';
5
5
 
6
6
  declare function useDebounce<T>(value: T, delay?: number): T;
@@ -1,6 +1,6 @@
1
- export { P as PostCreateInput, e as PostUpdateInput, o as UseNextPreviousPostsOptions, p as UseNextPreviousPostsResult, d as UsePostResult, b as UsePostSearchOptions, c as UsePostSearchResult, U as UsePostsOptions, a as UsePostsResult, r as UseRecentPostsOptions, s as UseRecentPostsResult, k as useCreatePost, m as useDeletePost, q as useNextPreviousPosts, g as usePost, n as usePostSearch, u as usePosts, t as useRecentPosts, h as useSuspensePost, f as useSuspensePosts, j as useSuspenseTags, i as useTags, l as useUpdatePost } from '../../../../shared/stack.QYn-Px94.js';
1
+ export { P as PostCreateInput, e as PostUpdateInput, o as UseNextPreviousPostsOptions, p as UseNextPreviousPostsResult, d as UsePostResult, b as UsePostSearchOptions, c as UsePostSearchResult, U as UsePostsOptions, a as UsePostsResult, r as UseRecentPostsOptions, s as UseRecentPostsResult, k as useCreatePost, m as useDeletePost, q as useNextPreviousPosts, g as usePost, n as usePostSearch, u as usePosts, t as useRecentPosts, h as useSuspensePost, f as useSuspensePosts, j as useSuspenseTags, i as useTags, l as useUpdatePost } from '../../../../shared/stack.QrBE0Bc8.js';
2
2
  import '@tanstack/react-query';
3
- import '../../../../shared/stack.BQmuNl5p.js';
3
+ import '../../../../shared/stack.Sod_PZhB.js';
4
4
  import 'zod';
5
5
 
6
6
  declare function useDebounce<T>(value: T, delay?: number): T;
@@ -2,8 +2,8 @@ import * as _btst_stack_plugins_client from '@btst/stack/plugins/client';
2
2
  import * as _btst_yar from '@btst/yar';
3
3
  import { ComponentType, ReactNode } from 'react';
4
4
  import { QueryClient } from '@tanstack/react-query';
5
- import { P as Post, S as SerializedPost } from '../../../shared/stack.BQmuNl5p.cjs';
6
- export { U as UsePostsOptions, a as UsePostsResult } from '../../../shared/stack.AJTXI7kw.cjs';
5
+ import { P as Post, S as SerializedPost } from '../../../shared/stack.Sod_PZhB.cjs';
6
+ export { U as UsePostsOptions, a as UsePostsResult } from '../../../shared/stack.DGsFF5qb.cjs';
7
7
  import 'zod';
8
8
 
9
9
  /**
@@ -2,8 +2,8 @@ import * as _btst_stack_plugins_client from '@btst/stack/plugins/client';
2
2
  import * as _btst_yar from '@btst/yar';
3
3
  import { ComponentType, ReactNode } from 'react';
4
4
  import { QueryClient } from '@tanstack/react-query';
5
- import { P as Post, S as SerializedPost } from '../../../shared/stack.BQmuNl5p.mjs';
6
- export { U as UsePostsOptions, a as UsePostsResult } from '../../../shared/stack.6mEHS2WH.mjs';
5
+ import { P as Post, S as SerializedPost } from '../../../shared/stack.Sod_PZhB.mjs';
6
+ export { U as UsePostsOptions, a as UsePostsResult } from '../../../shared/stack.NtflNnnH.mjs';
7
7
  import 'zod';
8
8
 
9
9
  /**
@@ -2,8 +2,8 @@ import * as _btst_stack_plugins_client from '@btst/stack/plugins/client';
2
2
  import * as _btst_yar from '@btst/yar';
3
3
  import { ComponentType, ReactNode } from 'react';
4
4
  import { QueryClient } from '@tanstack/react-query';
5
- import { P as Post, S as SerializedPost } from '../../../shared/stack.BQmuNl5p.js';
6
- export { U as UsePostsOptions, a as UsePostsResult } from '../../../shared/stack.QYn-Px94.js';
5
+ import { P as Post, S as SerializedPost } from '../../../shared/stack.Sod_PZhB.js';
6
+ export { U as UsePostsOptions, a as UsePostsResult } from '../../../shared/stack.QrBE0Bc8.js';
7
7
  import 'zod';
8
8
 
9
9
  /**
@@ -1,7 +1,7 @@
1
1
  import '@tanstack/react-query';
2
- export { d as createBlogQueryKeys } from '../../shared/stack.DjgpFWq3.cjs';
2
+ export { d as createBlogQueryKeys } from '../../shared/stack.DEW8EtFu.cjs';
3
3
  import '@btst/stack/plugins/client';
4
- import '../../shared/stack.BQmuNl5p.cjs';
4
+ import '../../shared/stack.Sod_PZhB.cjs';
5
5
  import '@btst/stack/plugins/api';
6
6
  import '@btst/db';
7
7
  import 'better-call';
@@ -1,7 +1,7 @@
1
1
  import '@tanstack/react-query';
2
- export { d as createBlogQueryKeys } from '../../shared/stack.IUeyQKrm.mjs';
2
+ export { d as createBlogQueryKeys } from '../../shared/stack.DvMUCTTl.mjs';
3
3
  import '@btst/stack/plugins/client';
4
- import '../../shared/stack.BQmuNl5p.mjs';
4
+ import '../../shared/stack.Sod_PZhB.mjs';
5
5
  import '@btst/stack/plugins/api';
6
6
  import '@btst/db';
7
7
  import 'better-call';
@@ -1,7 +1,7 @@
1
1
  import '@tanstack/react-query';
2
- export { d as createBlogQueryKeys } from '../../shared/stack.D7HSzZdG.js';
2
+ export { d as createBlogQueryKeys } from '../../shared/stack.qta0-CPq.js';
3
3
  import '@btst/stack/plugins/client';
4
- import '../../shared/stack.BQmuNl5p.js';
4
+ import '../../shared/stack.Sod_PZhB.js';
5
5
  import '@btst/stack/plugins/api';
6
6
  import '@btst/db';
7
7
  import 'better-call';
@@ -1,4 +1,4 @@
1
- export { B as BoardListResult, C as CreateKanbanTaskInput, i as KANBAN_QUERY_KEYS, b as KanbanApiContext, K as KanbanApiRouter, c as KanbanBackendHooks, a as KanbanRouteKey, e as createKanbanTask, f as findOrCreateKanbanBoard, g as getAllBoards, d as getBoardById, h as getKanbanColumnsByBoardId, k as kanbanBackendPlugin } from '../../../shared/stack.eq5eg1yt.cjs';
1
+ export { B as BoardListResult, C as CreateKanbanTaskInput, i as KANBAN_QUERY_KEYS, b as KanbanApiContext, K as KanbanApiRouter, c as KanbanBackendHooks, a as KanbanRouteKey, e as createKanbanTask, f as findOrCreateKanbanBoard, g as getAllBoards, d as getBoardById, h as getKanbanColumnsByBoardId, k as kanbanBackendPlugin } from '../../../shared/stack.BOokfhZD.cjs';
2
2
  import { B as BoardWithColumns, S as SerializedBoardWithColumns, C as ColumnWithTasks, a as SerializedColumn, T as Task, b as SerializedTask } from '../../../shared/stack.DJaKVY7v.cjs';
3
3
  import '@btst/stack/plugins/api';
4
4
  import '@btst/db';
@@ -1,4 +1,4 @@
1
- export { B as BoardListResult, C as CreateKanbanTaskInput, i as KANBAN_QUERY_KEYS, b as KanbanApiContext, K as KanbanApiRouter, c as KanbanBackendHooks, a as KanbanRouteKey, e as createKanbanTask, f as findOrCreateKanbanBoard, g as getAllBoards, d as getBoardById, h as getKanbanColumnsByBoardId, k as kanbanBackendPlugin } from '../../../shared/stack.Dj04W2c3.mjs';
1
+ export { B as BoardListResult, C as CreateKanbanTaskInput, i as KANBAN_QUERY_KEYS, b as KanbanApiContext, K as KanbanApiRouter, c as KanbanBackendHooks, a as KanbanRouteKey, e as createKanbanTask, f as findOrCreateKanbanBoard, g as getAllBoards, d as getBoardById, h as getKanbanColumnsByBoardId, k as kanbanBackendPlugin } from '../../../shared/stack.CWxAl9K3.mjs';
2
2
  import { B as BoardWithColumns, S as SerializedBoardWithColumns, C as ColumnWithTasks, a as SerializedColumn, T as Task, b as SerializedTask } from '../../../shared/stack.DJaKVY7v.mjs';
3
3
  import '@btst/stack/plugins/api';
4
4
  import '@btst/db';
@@ -1,4 +1,4 @@
1
- export { B as BoardListResult, C as CreateKanbanTaskInput, i as KANBAN_QUERY_KEYS, b as KanbanApiContext, K as KanbanApiRouter, c as KanbanBackendHooks, a as KanbanRouteKey, e as createKanbanTask, f as findOrCreateKanbanBoard, g as getAllBoards, d as getBoardById, h as getKanbanColumnsByBoardId, k as kanbanBackendPlugin } from '../../../shared/stack.CMbX8Q5C.js';
1
+ export { B as BoardListResult, C as CreateKanbanTaskInput, i as KANBAN_QUERY_KEYS, b as KanbanApiContext, K as KanbanApiRouter, c as KanbanBackendHooks, a as KanbanRouteKey, e as createKanbanTask, f as findOrCreateKanbanBoard, g as getAllBoards, d as getBoardById, h as getKanbanColumnsByBoardId, k as kanbanBackendPlugin } from '../../../shared/stack.BvCR4-9H.js';
2
2
  import { B as BoardWithColumns, S as SerializedBoardWithColumns, C as ColumnWithTasks, a as SerializedColumn, T as Task, b as SerializedTask } from '../../../shared/stack.DJaKVY7v.js';
3
3
  import '@btst/stack/plugins/api';
4
4
  import '@btst/db';
@@ -1,5 +1,5 @@
1
1
  import * as _tanstack_react_query from '@tanstack/react-query';
2
- import { K as KanbanApiRouter, j as BoardsListDiscriminator } from '../../shared/stack.eq5eg1yt.cjs';
2
+ import { K as KanbanApiRouter, j as BoardsListDiscriminator } from '../../shared/stack.BOokfhZD.cjs';
3
3
  import { createApiClient } from '@btst/stack/plugins/client';
4
4
  import { S as SerializedBoardWithColumns } from '../../shared/stack.DJaKVY7v.cjs';
5
5
  import '@btst/stack/plugins/api';
@@ -1,5 +1,5 @@
1
1
  import * as _tanstack_react_query from '@tanstack/react-query';
2
- import { K as KanbanApiRouter, j as BoardsListDiscriminator } from '../../shared/stack.Dj04W2c3.mjs';
2
+ import { K as KanbanApiRouter, j as BoardsListDiscriminator } from '../../shared/stack.CWxAl9K3.mjs';
3
3
  import { createApiClient } from '@btst/stack/plugins/client';
4
4
  import { S as SerializedBoardWithColumns } from '../../shared/stack.DJaKVY7v.mjs';
5
5
  import '@btst/stack/plugins/api';
@@ -1,5 +1,5 @@
1
1
  import * as _tanstack_react_query from '@tanstack/react-query';
2
- import { K as KanbanApiRouter, j as BoardsListDiscriminator } from '../../shared/stack.CMbX8Q5C.js';
2
+ import { K as KanbanApiRouter, j as BoardsListDiscriminator } from '../../shared/stack.BvCR4-9H.js';
3
3
  import { createApiClient } from '@btst/stack/plugins/client';
4
4
  import { S as SerializedBoardWithColumns } from '../../shared/stack.DJaKVY7v.js';
5
5
  import '@btst/stack/plugins/api';
@@ -40,7 +40,13 @@ function localAdapter(options = {}) {
40
40
  const encodedFilename = url.split("/").pop();
41
41
  if (!encodedFilename) return;
42
42
  const filename = decodeURIComponent(encodedFilename);
43
- const filePath = path__namespace.join(uploadDir, filename);
43
+ const resolvedUploadDir = path__namespace.resolve(uploadDir);
44
+ const filePath = path__namespace.join(resolvedUploadDir, filename);
45
+ if (!filePath.startsWith(resolvedUploadDir + path__namespace.sep)) {
46
+ throw new Error(
47
+ `Refusing to delete file outside upload directory: ${filePath}`
48
+ );
49
+ }
44
50
  try {
45
51
  await fs__namespace.unlink(filePath);
46
52
  } catch (err) {
@@ -0,0 +1,30 @@
1
+ import { D as DirectStorageAdapter } from '../../../../shared/stack.lkebw2nj.cjs';
2
+
3
+ interface LocalStorageAdapterOptions {
4
+ /**
5
+ * Absolute path to the directory where uploaded files are stored.
6
+ * @default "./public/uploads"
7
+ */
8
+ uploadDir?: string;
9
+ /**
10
+ * URL prefix used to build the public URL for uploaded files.
11
+ * @default "/uploads"
12
+ */
13
+ publicPath?: string;
14
+ }
15
+ /**
16
+ * Create a local filesystem storage adapter.
17
+ * Files are written to `uploadDir` and served at `publicPath`.
18
+ * Suitable for development and self-hosted deployments.
19
+ *
20
+ * @example
21
+ * ```ts
22
+ * mediaBackendPlugin({
23
+ * storageAdapter: localAdapter({ uploadDir: "./public/uploads", publicPath: "/uploads" })
24
+ * })
25
+ * ```
26
+ */
27
+ declare function localAdapter(options?: LocalStorageAdapterOptions): DirectStorageAdapter;
28
+
29
+ export { localAdapter };
30
+ export type { LocalStorageAdapterOptions };
@@ -0,0 +1,30 @@
1
+ import { D as DirectStorageAdapter } from '../../../../shared/stack.lkebw2nj.mjs';
2
+
3
+ interface LocalStorageAdapterOptions {
4
+ /**
5
+ * Absolute path to the directory where uploaded files are stored.
6
+ * @default "./public/uploads"
7
+ */
8
+ uploadDir?: string;
9
+ /**
10
+ * URL prefix used to build the public URL for uploaded files.
11
+ * @default "/uploads"
12
+ */
13
+ publicPath?: string;
14
+ }
15
+ /**
16
+ * Create a local filesystem storage adapter.
17
+ * Files are written to `uploadDir` and served at `publicPath`.
18
+ * Suitable for development and self-hosted deployments.
19
+ *
20
+ * @example
21
+ * ```ts
22
+ * mediaBackendPlugin({
23
+ * storageAdapter: localAdapter({ uploadDir: "./public/uploads", publicPath: "/uploads" })
24
+ * })
25
+ * ```
26
+ */
27
+ declare function localAdapter(options?: LocalStorageAdapterOptions): DirectStorageAdapter;
28
+
29
+ export { localAdapter };
30
+ export type { LocalStorageAdapterOptions };
@@ -0,0 +1,30 @@
1
+ import { D as DirectStorageAdapter } from '../../../../shared/stack.lkebw2nj.js';
2
+
3
+ interface LocalStorageAdapterOptions {
4
+ /**
5
+ * Absolute path to the directory where uploaded files are stored.
6
+ * @default "./public/uploads"
7
+ */
8
+ uploadDir?: string;
9
+ /**
10
+ * URL prefix used to build the public URL for uploaded files.
11
+ * @default "/uploads"
12
+ */
13
+ publicPath?: string;
14
+ }
15
+ /**
16
+ * Create a local filesystem storage adapter.
17
+ * Files are written to `uploadDir` and served at `publicPath`.
18
+ * Suitable for development and self-hosted deployments.
19
+ *
20
+ * @example
21
+ * ```ts
22
+ * mediaBackendPlugin({
23
+ * storageAdapter: localAdapter({ uploadDir: "./public/uploads", publicPath: "/uploads" })
24
+ * })
25
+ * ```
26
+ */
27
+ declare function localAdapter(options?: LocalStorageAdapterOptions): DirectStorageAdapter;
28
+
29
+ export { localAdapter };
30
+ export type { LocalStorageAdapterOptions };
@@ -22,7 +22,13 @@ function localAdapter(options = {}) {
22
22
  const encodedFilename = url.split("/").pop();
23
23
  if (!encodedFilename) return;
24
24
  const filename = decodeURIComponent(encodedFilename);
25
- const filePath = path.join(uploadDir, filename);
25
+ const resolvedUploadDir = path.resolve(uploadDir);
26
+ const filePath = path.join(resolvedUploadDir, filename);
27
+ if (!filePath.startsWith(resolvedUploadDir + path.sep)) {
28
+ throw new Error(
29
+ `Refusing to delete file outside upload directory: ${filePath}`
30
+ );
31
+ }
26
32
  try {
27
33
  await fs.unlink(filePath);
28
34
  } catch (err) {
@@ -1,4 +1,4 @@
1
- import { S as S3StorageAdapter } from '../../../../shared/stack.DO6vOGQG.cjs';
1
+ import { a as S3StorageAdapter } from '../../../../shared/stack.lkebw2nj.cjs';
2
2
 
3
3
  interface S3StorageAdapterOptions {
4
4
  /**
@@ -1,4 +1,4 @@
1
- import { S as S3StorageAdapter } from '../../../../shared/stack.DO6vOGQG.mjs';
1
+ import { a as S3StorageAdapter } from '../../../../shared/stack.lkebw2nj.mjs';
2
2
 
3
3
  interface S3StorageAdapterOptions {
4
4
  /**
@@ -1,4 +1,4 @@
1
- import { S as S3StorageAdapter } from '../../../../shared/stack.DO6vOGQG.js';
1
+ import { a as S3StorageAdapter } from '../../../../shared/stack.lkebw2nj.js';
2
2
 
3
3
  interface S3StorageAdapterOptions {
4
4
  /**
@@ -1,4 +1,4 @@
1
- import { V as VercelBlobStorageAdapter } from '../../../../shared/stack.DO6vOGQG.cjs';
1
+ import { V as VercelBlobStorageAdapter } from '../../../../shared/stack.lkebw2nj.cjs';
2
2
 
3
3
  interface VercelBlobStorageAdapterOptions {
4
4
  /**
@@ -1,4 +1,4 @@
1
- import { V as VercelBlobStorageAdapter } from '../../../../shared/stack.DO6vOGQG.mjs';
1
+ import { V as VercelBlobStorageAdapter } from '../../../../shared/stack.lkebw2nj.mjs';
2
2
 
3
3
  interface VercelBlobStorageAdapterOptions {
4
4
  /**
@@ -1,4 +1,4 @@
1
- import { V as VercelBlobStorageAdapter } from '../../../../shared/stack.DO6vOGQG.js';
1
+ import { V as VercelBlobStorageAdapter } from '../../../../shared/stack.lkebw2nj.js';
2
2
 
3
3
  interface VercelBlobStorageAdapterOptions {
4
4
  /**
@@ -5,7 +5,6 @@ const getters = require('../../../packages/stack/src/plugins/media/api/getters.c
5
5
  const mutations = require('../../../packages/stack/src/plugins/media/api/mutations.cjs');
6
6
  const serializers = require('../../../packages/stack/src/plugins/media/api/serializers.cjs');
7
7
  const queryKeyDefs = require('../../../packages/stack/src/plugins/media/api/query-key-defs.cjs');
8
- const local = require('../../../packages/stack/src/plugins/media/api/adapters/local.cjs');
9
8
 
10
9
 
11
10
 
@@ -24,4 +23,3 @@ exports.serializeAsset = serializers.serializeAsset;
24
23
  exports.serializeFolder = serializers.serializeFolder;
25
24
  exports.MEDIA_QUERY_KEYS = queryKeyDefs.MEDIA_QUERY_KEYS;
26
25
  exports.assetListDiscriminator = queryKeyDefs.assetListDiscriminator;
27
- exports.localAdapter = local.localAdapter;
@@ -1,81 +1,11 @@
1
- export { a as MEDIA_QUERY_KEYS, c as MediaApiContext, M as MediaApiRouter, e as MediaBackendConfig, d as MediaBackendHooks, b as assetListDiscriminator, m as mediaBackendPlugin } from '../../../shared/stack.D6zyQnMo.cjs';
1
+ export { C as CreateAssetInput, e as CreateFolderInput, M as MEDIA_QUERY_KEYS, g as MediaApiContext, j as MediaApiRouter, i as MediaBackendConfig, h as MediaBackendHooks, U as UpdateAssetInput, f as assetListDiscriminator, c as createAsset, a as createFolder, d as deleteAsset, b as deleteFolder, m as mediaBackendPlugin, u as updateAsset } from '../../../shared/stack.vVFh38aS.cjs';
2
2
  export { A as AssetListParams, d as AssetListResult, F as FolderListParams, g as getAssetById, b as getFolderById, c as getFolderByName, l as listAssets, a as listFolders } from '../../../shared/stack.jU2iG86n.cjs';
3
- import { DBAdapter } from '@btst/db';
4
- import { A as Asset, F as Folder, S as SerializedAsset, a as SerializedFolder } from '../../../shared/stack.BMlLOMED.cjs';
5
- import { D as DirectStorageAdapter } from '../../../shared/stack.DO6vOGQG.cjs';
6
- export { S as S3StorageAdapter, b as S3UploadToken, a as StorageAdapter, U as UploadOptions, c as VercelBlobHandlerCallbacks, V as VercelBlobStorageAdapter } from '../../../shared/stack.DO6vOGQG.cjs';
3
+ import { A as Asset, S as SerializedAsset, F as Folder, a as SerializedFolder } from '../../../shared/stack.BMlLOMED.cjs';
4
+ export { D as DirectStorageAdapter, a as S3StorageAdapter, b as S3UploadToken, S as StorageAdapter, U as UploadOptions, c as VercelBlobHandlerCallbacks, V as VercelBlobStorageAdapter } from '../../../shared/stack.lkebw2nj.cjs';
7
5
  import '@btst/stack/plugins/api';
8
6
  import 'better-call';
9
7
  import 'zod';
10
-
11
- /**
12
- * Input for creating a new asset record.
13
- */
14
- interface CreateAssetInput {
15
- filename: string;
16
- originalName: string;
17
- mimeType: string;
18
- size: number;
19
- url: string;
20
- folderId?: string;
21
- alt?: string;
22
- tenantId?: string;
23
- }
24
- /**
25
- * Input for updating an existing asset record.
26
- */
27
- interface UpdateAssetInput {
28
- alt?: string;
29
- folderId?: string | null;
30
- }
31
- /**
32
- * Input for creating a new folder.
33
- */
34
- interface CreateFolderInput {
35
- name: string;
36
- parentId?: string;
37
- tenantId?: string;
38
- }
39
- /**
40
- * Create an asset record in the database.
41
- * Pure DB function — no authorization hooks, no HTTP context.
42
- *
43
- * @remarks **Security:** No authorization hooks (e.g. `onBeforeUpload`) are called.
44
- * The caller is responsible for any access-control checks before invoking this function.
45
- */
46
- declare function createAsset(adapter: DBAdapter, input: CreateAssetInput): Promise<Asset>;
47
- /**
48
- * Update an asset's `alt` text or `folderId`.
49
- * Pure DB function — no authorization hooks, no HTTP context.
50
- *
51
- * @remarks **Security:** No authorization hooks are called.
52
- */
53
- declare function updateAsset(adapter: DBAdapter, id: string, input: UpdateAssetInput): Promise<Asset | null>;
54
- /**
55
- * Delete an asset record from the database by its ID.
56
- * Does NOT delete the underlying file — the caller must do that via the storage adapter.
57
- * Pure DB function — no authorization hooks, no HTTP context.
58
- *
59
- * @remarks **Security:** No authorization hooks are called.
60
- */
61
- declare function deleteAsset(adapter: DBAdapter, id: string): Promise<void>;
62
- /**
63
- * Create a folder record in the database.
64
- * Pure DB function — no authorization hooks, no HTTP context.
65
- *
66
- * @remarks **Security:** No authorization hooks are called.
67
- */
68
- declare function createFolder(adapter: DBAdapter, input: CreateFolderInput): Promise<Folder>;
69
- /**
70
- * Delete a folder record from the database by its ID.
71
- * Child folders are cascade-deleted automatically. Throws if the folder or
72
- * any of its descendants contain assets (which have associated storage files
73
- * that must be deleted via the storage adapter first).
74
- * Pure DB function — no authorization hooks, no HTTP context.
75
- *
76
- * @remarks **Security:** No authorization hooks are called.
77
- */
78
- declare function deleteFolder(adapter: DBAdapter, id: string): Promise<void>;
8
+ import '@btst/db';
79
9
 
80
10
  /**
81
11
  * Serialize an Asset for SSR/SSG use (convert dates to strings).
@@ -88,31 +18,4 @@ declare function serializeAsset(asset: Asset): SerializedAsset;
88
18
  */
89
19
  declare function serializeFolder(folder: Folder): SerializedFolder;
90
20
 
91
- interface LocalStorageAdapterOptions {
92
- /**
93
- * Absolute path to the directory where uploaded files are stored.
94
- * @default "./public/uploads"
95
- */
96
- uploadDir?: string;
97
- /**
98
- * URL prefix used to build the public URL for uploaded files.
99
- * @default "/uploads"
100
- */
101
- publicPath?: string;
102
- }
103
- /**
104
- * Create a local filesystem storage adapter.
105
- * Files are written to `uploadDir` and served at `publicPath`.
106
- * Suitable for development and self-hosted deployments.
107
- *
108
- * @example
109
- * ```ts
110
- * mediaBackendPlugin({
111
- * storageAdapter: localAdapter({ uploadDir: "./public/uploads", publicPath: "/uploads" })
112
- * })
113
- * ```
114
- */
115
- declare function localAdapter(options?: LocalStorageAdapterOptions): DirectStorageAdapter;
116
-
117
- export { DirectStorageAdapter, createAsset, createFolder, deleteAsset, deleteFolder, localAdapter, serializeAsset, serializeFolder, updateAsset };
118
- export type { CreateAssetInput, CreateFolderInput, LocalStorageAdapterOptions, UpdateAssetInput };
21
+ export { serializeAsset, serializeFolder };