streamby-core 0.2.0 → 0.4.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.
@@ -7,6 +7,7 @@ exports.createStreamByRouter = createStreamByRouter;
7
7
  const express_1 = __importDefault(require("express"));
8
8
  const s3_1 = require("../adapters/s3");
9
9
  const file_1 = require("../services/file");
10
+ const project_1 = require("../services/project");
10
11
  function createStreamByRouter(config) {
11
12
  const router = express_1.default.Router();
12
13
  const adapter = config.adapter || (() => {
@@ -52,12 +53,25 @@ function createStreamByRouter(config) {
52
53
  if (!projectId || !auth.projects.includes(projectId)) {
53
54
  return res.status(403).json({ error: 'Unauthorized project access' });
54
55
  }
55
- const project = await config.projectProvider(projectId);
56
+ const project = await config.projectProvider.getById(projectId);
56
57
  res.json({ project });
57
58
  }
58
59
  catch (err) {
59
60
  res.status(404).json({ error: 'Project not found', details: err });
60
61
  }
61
62
  });
63
+ router.post('/projects', async (req, res) => {
64
+ try {
65
+ const auth = await config.authProvider(req);
66
+ if (auth.role !== 'admin' && auth.role !== 'editor') {
67
+ return res.status(403).json({ error: 'Permission denied' });
68
+ }
69
+ const created = await (0, project_1.createProjectService)(req, config.projectProvider);
70
+ res.status(201).json(created);
71
+ }
72
+ catch (err) {
73
+ res.status(500).json({ error: 'Failed to create project', details: err.message });
74
+ }
75
+ });
62
76
  return router;
63
77
  }
@@ -0,0 +1,15 @@
1
+ import { Request } from 'express';
2
+ import { ProjectProvider } from '../types';
3
+ export declare function createProjectService(req: Request, projectProvider: ProjectProvider): Promise<{
4
+ success: boolean;
5
+ project: {
6
+ id: string;
7
+ name: string;
8
+ description: string | undefined;
9
+ settings: {
10
+ allowUpload?: boolean;
11
+ allowSharing?: boolean;
12
+ } | undefined;
13
+ rootFolders: import("../types").FolderNode[];
14
+ };
15
+ }>;
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createProjectService = createProjectService;
4
+ async function createProjectService(req, projectProvider) {
5
+ const { name, description } = req.body;
6
+ if (!name) {
7
+ throw new Error('Project name is required');
8
+ }
9
+ const newProject = await projectProvider.create({
10
+ name,
11
+ description: description || '',
12
+ rootFolders: [],
13
+ allowUpload: true,
14
+ allowSharing: false
15
+ });
16
+ return {
17
+ success: true,
18
+ project: {
19
+ id: newProject.id,
20
+ name: newProject.name,
21
+ description: newProject.description,
22
+ settings: newProject.settings,
23
+ rootFolders: newProject.rootFolders || [],
24
+ }
25
+ };
26
+ }
@@ -39,4 +39,13 @@ export interface AuthContext {
39
39
  role: 'viewer' | 'editor' | 'admin';
40
40
  }
41
41
  export type AuthProvider = (req: Request) => Promise<AuthContext>;
42
- export type ProjectProvider = (projectId: string) => Promise<ProjectInfo>;
42
+ export interface ProjectProvider {
43
+ getById(projectId: string): Promise<ProjectInfo>;
44
+ create(data: {
45
+ name: string;
46
+ description?: string;
47
+ allowUpload?: boolean;
48
+ allowSharing?: boolean;
49
+ rootFolders?: FolderNode[];
50
+ }): Promise<ProjectInfo>;
51
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "streamby-core",
3
- "version": "0.2.0",
3
+ "version": "0.4.0",
4
4
  "description": "StreamBy middleware framework for media storage management",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",