streamby-core 0.9.20 → 0.9.21

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.
@@ -1,5 +1,2 @@
1
- import { Router } from 'express';
2
- import { StreamByConfig, StorageAdapter } from '../types';
3
- export declare function createStreamByRouter(config: StreamByConfig & {
4
- adapter?: StorageAdapter;
5
- }): Router;
1
+ import type { StreamByConfig } from '../types';
2
+ export declare function createStreamByRouter(config: StreamByConfig): import("express-serve-static-core").Router;
@@ -5,165 +5,23 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.createStreamByRouter = createStreamByRouter;
7
7
  const express_1 = __importDefault(require("express"));
8
- const s3_1 = require("../adapters/s3");
9
- const file_1 = require("../services/file");
10
8
  const project_1 = require("../services/project");
11
- const presign_1 = require("../services/presign");
12
9
  function createStreamByRouter(config) {
13
- const router = express_1.default.Router();
14
- const adapter = config.adapter || (() => {
15
- switch (config.storageProvider.type) {
16
- case 's3':
17
- return (0, s3_1.createS3Adapter)(config.storageProvider.config);
18
- default:
19
- throw new Error('Unsupported storage type');
20
- }
21
- })();
22
- router.get('/auth', async (req, res) => {
23
- try {
24
- const auth = await config.authProvider(req);
25
- res.status(200).json({ logged: true, ...auth });
26
- }
27
- catch (err) {
28
- res.status(401).json({ logged: false });
29
- }
30
- });
31
- router.get('/upload-project-image-url/:id', async (req, res) => {
32
- try {
33
- const auth = await config.authProvider(req);
34
- if (auth.role !== 'admin' && auth.role !== 'editor') {
35
- return res.status(403).json({ error: 'Permission denied' });
36
- }
37
- const projectId = req.params.id;
38
- if (!projectId) {
39
- return res.status(400).json({ error: 'Missing filename, contentType, or projectId' });
40
- }
41
- const url = await (0, presign_1.getPresignedProjectImageUrl)(adapter, projectId);
42
- res.json(url);
43
- }
44
- catch (err) {
45
- res.status(500).json({ error: 'Failed to generate presigned URL', details: err.message });
46
- }
47
- });
48
- router.delete('/delete-project-image-url/:id', async (req, res) => {
49
- try {
50
- const auth = await config.authProvider(req);
51
- if (auth.role !== 'admin' && auth.role !== 'editor') {
52
- return res.status(403).json({ error: 'Permission denied' });
53
- }
54
- const projectId = req.params.id;
55
- if (!projectId) {
56
- return res.status(400).json({ error: 'Missing filename, contentType, or projectId' });
57
- }
58
- await (0, file_1.deleteProjectImage)(adapter, projectId);
59
- const updated = await (0, project_1.deleteProjectImageService)(req, config.authProvider, config.projectProvider);
60
- res.status(201).json(updated);
61
- }
62
- catch (err) {
63
- res.status(500).json({ error: 'Failed to generate presigned URL', details: err.message });
64
- }
65
- });
66
- router.post('/upload-url', async (req, res) => {
67
- try {
68
- const auth = await config.authProvider(req);
69
- if (auth.role !== 'admin' && auth.role !== 'editor') {
70
- return res.status(403).json({ error: 'Permission denied' });
71
- }
72
- const { filename, contentType, projectId } = req.body;
73
- if (!filename || !contentType || !projectId) {
74
- return res.status(400).json({ error: 'Missing filename, contentType, or projectId' });
75
- }
76
- const url = await (0, presign_1.getPresignedUrl)(adapter, contentType, projectId);
77
- res.json(url);
78
- }
79
- catch (err) {
80
- res.status(500).json({ error: 'Failed to generate presigned URL', details: err.message });
81
- }
82
- });
83
- router.get('/files', async (req, res) => {
84
- try {
85
- const auth = await config.authProvider(req);
86
- const projectId = (req.query.projectId || req.headers['x-project-id']);
87
- if (!projectId || !auth.projects.includes(projectId)) {
88
- return res.status(403).json({ error: 'Unauthorized or missing projectId' });
89
- }
90
- const files = await (0, file_1.listFilesService)(adapter, req, projectId);
91
- res.json(files);
92
- }
93
- catch (err) {
94
- res.status(500).json({ error: 'Failed to list files', details: err });
95
- }
96
- });
97
- router.patch('/projects/:id', async (req, res) => {
98
- try {
99
- const auth = await config.authProvider(req);
100
- if (auth.role !== 'admin' && auth.role !== 'editor') {
101
- return res.status(403).json({ error: 'Permission denied' });
102
- }
103
- const projectId = req.params.id;
104
- const updates = req.body;
105
- if (!updates || typeof updates !== 'object') {
106
- return res.status(400).json({ error: 'Missing updates payload' });
107
- }
108
- const updated = await config.projectProvider.update(projectId, updates);
109
- res.status(200).json({ success: true, project: updated });
110
- }
111
- catch (err) {
112
- res.status(500).json({ error: 'Failed to update project', details: err.message });
113
- }
114
- });
115
- router.get('/projects/:id', async (req, res) => {
116
- try {
117
- const auth = await config.authProvider(req);
118
- const projectId = req.params.id;
119
- const project = await config.projectProvider.getById(projectId);
120
- const isMember = project.members?.some((m) => m.userId?.toString() === auth.userId?.toString());
121
- if (!isMember) {
122
- return res.status(403).json({ error: 'Unauthorized project access' });
123
- }
124
- res.json({ project });
125
- }
126
- catch (err) {
127
- res.status(404).json({ error: 'Project not found', details: err.message });
128
- }
129
- });
130
- router.post('/projects/create', async (req, res) => {
131
- try {
132
- const auth = await config.authProvider(req);
133
- if (auth.role !== 'admin' && auth.role !== 'editor') {
134
- return res.status(403).json({ error: 'Permission denied' });
135
- }
136
- const created = await (0, project_1.createProjectService)(req, config.authProvider, config.projectProvider);
137
- res.status(201).json(created);
138
- }
139
- catch (err) {
140
- res.status(500).json({ error: 'Failed to create project', details: err.message });
141
- }
142
- });
143
- router.delete('/projects/:id', async (req, res) => {
144
- try {
145
- const auth = await config.authProvider(req);
146
- const projectId = req.params.id;
147
- if (auth.role !== 'admin' && auth.role !== 'editor') {
148
- return res.status(403).json({ error: 'Permission denied' });
149
- }
150
- await config.projectProvider.delete(projectId);
151
- await adapter.deleteProjectDirectory(projectId);
152
- res.status(200).json({ success: true });
153
- }
154
- catch (err) {
155
- res.status(500).json({ error: 'Failed to delete project', details: err.message });
156
- }
157
- });
158
- router.get('/projects', async (req, res) => {
159
- try {
160
- const auth = await config.authProvider(req);
161
- const projects = await config.projectProvider.list(auth.userId);
162
- res.json({ projects });
163
- }
164
- catch (err) {
165
- res.status(500).json({ error: 'Failed to list projects', details: err });
166
- }
167
- });
168
- return router;
10
+ const app = express_1.default.Router();
11
+ app.post('/project', (req, res) => {
12
+ (0, project_1.createProjectService)(req, config.authProvider, config.projectProvider)
13
+ .then((result) => res.json(result))
14
+ .catch((err) => res.status(400).json({ error: err.message }));
15
+ });
16
+ app.put('/project/:projectId', (req, res) => {
17
+ (0, project_1.updateProjectService)(req, config.authProvider, config.projectProvider)
18
+ .then((result) => res.json(result))
19
+ .catch((err) => res.status(400).json({ error: err.message }));
20
+ });
21
+ app.delete('/project/:projectId/image', (req, res) => {
22
+ (0, project_1.deleteProjectImageService)(req, config.authProvider, config.projectProvider, config.storageAdapter)
23
+ .then((result) => res.json(result))
24
+ .catch((err) => res.status(400).json({ error: err.message }));
25
+ });
26
+ return app;
169
27
  }
@@ -1,5 +1,5 @@
1
1
  import { Request } from 'express';
2
- import { AuthProvider, ProjectProvider } from '../types';
2
+ import { AuthProvider, ProjectProvider, StorageAdapter } from '../types';
3
3
  export declare function createProjectService(req: Request, authProvider: AuthProvider, projectProvider: ProjectProvider): Promise<{
4
4
  success: boolean;
5
5
  project: import("../types").ProjectInfo;
@@ -8,6 +8,6 @@ export declare function updateProjectService(req: Request, authProvider: AuthPro
8
8
  success: boolean;
9
9
  project: import("../types").ProjectInfo;
10
10
  }>;
11
- export declare function deleteProjectImageService(req: Request, authProvider: AuthProvider, projectProvider: ProjectProvider): Promise<{
11
+ export declare function deleteProjectImageService(req: Request, authProvider: AuthProvider, projectProvider: ProjectProvider, storageAdapter: StorageAdapter): Promise<{
12
12
  success: boolean;
13
13
  }>;
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.createProjectService = createProjectService;
4
4
  exports.updateProjectService = updateProjectService;
5
5
  exports.deleteProjectImageService = deleteProjectImageService;
6
+ const file_1 = require("./file");
6
7
  async function createProjectService(req, authProvider, projectProvider) {
7
8
  const { name, description } = req.body;
8
9
  const auth = await authProvider(req);
@@ -36,7 +37,7 @@ async function updateProjectService(req, authProvider, projectProvider) {
36
37
  project: updatedProject,
37
38
  };
38
39
  }
39
- async function deleteProjectImageService(req, authProvider, projectProvider) {
40
+ async function deleteProjectImageService(req, authProvider, projectProvider, storageAdapter) {
40
41
  const { projectId } = req.params;
41
42
  const auth = await authProvider(req);
42
43
  const project = await projectProvider.getById(projectId);
@@ -46,8 +47,6 @@ async function deleteProjectImageService(req, authProvider, projectProvider) {
46
47
  if (!project.members?.find((e) => e.userId === auth.userId)) {
47
48
  throw new Error('Unauthorized');
48
49
  }
49
- await projectProvider.update(projectId, { image: '' });
50
- return {
51
- success: true,
52
- };
50
+ await (0, file_1.deleteProjectImage)(storageAdapter, projectId);
51
+ return { success: true };
53
52
  }
@@ -40,6 +40,7 @@ export interface StreamByConfig {
40
40
  config: S3Config;
41
41
  };
42
42
  authProvider: AuthProvider;
43
+ storageAdapter: StorageAdapter;
43
44
  projectProvider: ProjectProvider;
44
45
  dbConnection?: Connection;
45
46
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "streamby-core",
3
- "version": "0.9.20",
3
+ "version": "0.9.21",
4
4
  "description": "StreamBy middleware framework for media storage management",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",