streamby-core 0.15.0 → 0.16.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.
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.initProjectModel = initProjectModel;
7
+ const mongoose_1 = __importDefault(require("mongoose"));
8
+ function initProjectModel(connection) {
9
+ const folderNodeSchema = new mongoose_1.default.Schema({
10
+ id: String,
11
+ name: String,
12
+ children: [Object],
13
+ }, { _id: false });
14
+ const memberSchema = new mongoose_1.default.Schema({
15
+ userId: { type: mongoose_1.default.Schema.Types.ObjectId, required: true },
16
+ role: { type: String, enum: ['viewer', 'editor', 'admin'], default: 'viewer' },
17
+ archived: { type: Boolean, default: false }
18
+ }, { _id: false });
19
+ const projectSchema = new mongoose_1.default.Schema({
20
+ dbType: { type: String, required: true },
21
+ name: { type: String, required: true },
22
+ description: { type: String },
23
+ image: { type: String },
24
+ folders: [folderNodeSchema],
25
+ allowUpload: { type: Boolean, default: true },
26
+ allowSharing: { type: Boolean, default: false },
27
+ members: [memberSchema],
28
+ exports: [{ type: mongoose_1.default.Schema.Types.ObjectId, ref: 'Export' }]
29
+ }, {
30
+ timestamps: true,
31
+ collection: 'streamby_projects'
32
+ });
33
+ return connection.model('Project', projectSchema);
34
+ }
@@ -1,72 +1,2 @@
1
- import mongoose from 'mongoose';
2
- import { StorageAdapter, DatabaseCredential } from '../types';
3
- import { PrismaClient } from '@prisma/client';
4
- export declare function createDatabaseProvider(databases: DatabaseCredential[], adapter: StorageAdapter): {
5
- exportProvider: import("../types").ExportProvider | undefined;
6
- projectProviders: {
7
- nosql: import("../types").ProjectProvider | undefined;
8
- sql: import("../types").ProjectProvider | undefined;
9
- };
10
- exportCollectionProvider: {
11
- getById(id: string): Promise<({
12
- entries: {
13
- id: string;
14
- exportCollectionId: string;
15
- key: string;
16
- value: string;
17
- }[];
18
- } & {
19
- id: string;
20
- name: string;
21
- createdAt: Date;
22
- updatedAt: Date;
23
- projectId: string;
24
- }) | null>;
25
- create(data: {
26
- projectId: string;
27
- name: string;
28
- entries: Array<{
29
- key: string;
30
- value: string;
31
- }>;
32
- }): Promise<{
33
- entries: {
34
- id: string;
35
- exportCollectionId: string;
36
- key: string;
37
- value: string;
38
- }[];
39
- } & {
40
- id: string;
41
- name: string;
42
- createdAt: Date;
43
- updatedAt: Date;
44
- projectId: string;
45
- }>;
46
- update(id: string, data: {
47
- name?: string;
48
- entries?: Array<{
49
- key: string;
50
- value: string;
51
- }>;
52
- }): Promise<{
53
- entries: {
54
- id: string;
55
- exportCollectionId: string;
56
- key: string;
57
- value: string;
58
- }[];
59
- } & {
60
- id: string;
61
- name: string;
62
- createdAt: Date;
63
- updatedAt: Date;
64
- projectId: string;
65
- }>;
66
- delete(id: string): Promise<{
67
- success: boolean;
68
- }>;
69
- } | undefined;
70
- mongoConnection: mongoose.Connection | undefined;
71
- prismaClient: PrismaClient<import(".prisma/client").Prisma.PrismaClientOptions, never, import("@prisma/client/runtime/library").DefaultArgs> | undefined;
72
- };
1
+ import { StorageAdapter, DatabaseCredential, DatabaseProviders } from '../types';
2
+ export declare function createDatabaseProvider(databases: DatabaseCredential[], adapter: StorageAdapter): DatabaseProviders;
@@ -1,58 +1,36 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
2
  Object.defineProperty(exports, "__esModule", { value: true });
6
3
  exports.createDatabaseProvider = createDatabaseProvider;
7
- const mongoose_1 = __importDefault(require("mongoose"));
8
- const initProjectModel_1 = require("../db/initProjectModel");
9
- const initUserModel_1 = require("../db/initUserModel");
10
- const mongoExportProvider_1 = require("./mongoExportProvider");
11
- const mongoProjectProvider_1 = require("./mongoProjectProvider");
12
- const initExportModel_1 = require("../db/initExportModel");
13
4
  const createPrismaProvider_1 = require("./createPrismaProvider");
14
- const prismaExportProvider_1 = require("./prismaExportProvider");
15
- const prismaProjectProvider_1 = require("./prismaProjectProvider");
16
- const prismaExportCollectionProvider_1 = require("./prismaExportCollectionProvider");
5
+ const createMongooseProvider_1 = require("./createMongooseProvider");
17
6
  function createDatabaseProvider(databases, adapter) {
18
- let mongoConnection;
19
- let prismaClient;
7
+ let mongoProviders;
8
+ let prismaProviders;
20
9
  const mongoConfig = databases.find((db) => db.dbType === 'nosql');
21
10
  if (mongoConfig) {
22
11
  if (!mongoConfig.connectionString) {
23
12
  throw new Error('MongoDB connection string is required for mongo dbType.');
24
13
  }
25
- mongoConnection = mongoose_1.default.createConnection(mongoConfig.connectionString, {
26
- dbName: undefined,
27
- });
14
+ mongoProviders = (0, createMongooseProvider_1.createMongooseProvider)(mongoConfig.connectionString, adapter) || undefined;
28
15
  }
29
16
  const prismaConfig = databases.find((db) => db.dbType === 'sql');
30
17
  if (prismaConfig) {
31
18
  if (!prismaConfig.connectionString) {
32
19
  throw new Error('Prisma connection string is required for prisma dbType.');
33
20
  }
34
- prismaClient = (0, createPrismaProvider_1.createPrismaProvider)(prismaConfig.connectionString) || undefined;
21
+ prismaProviders = (0, createPrismaProvider_1.createPrismaProvider)(prismaConfig.connectionString, adapter) || undefined;
35
22
  }
36
- if (!mongoConnection && !prismaClient) {
23
+ if (!mongoProviders && !prismaProviders) {
37
24
  throw new Error('At least one database configuration (mongo or prisma) is required.');
38
25
  }
39
- // If mongoConnection is not defined, we can't create mongo-based providers
40
- const ExportModel = mongoConnection ? (0, initExportModel_1.initExportModel)(mongoConnection) : undefined;
41
- const ProjectModel = mongoConnection ? (0, initProjectModel_1.initProjectModel)(mongoConnection) : undefined;
42
- const UserModel = mongoConnection ? (0, initUserModel_1.initUserModel)(mongoConnection) : undefined;
43
- const mongoExportProvider = ExportModel ? (0, mongoExportProvider_1.createMongoExportProvider)(ExportModel) : undefined;
44
- const mongoProjectProvider = ProjectModel && ExportModel ? (0, mongoProjectProvider_1.createMongoProjectProvider)(ProjectModel, ExportModel, adapter) : undefined;
45
- const prismaExportProvider = prismaClient ? (0, prismaExportProvider_1.createPrismaExportProvider)(prismaClient) : undefined;
46
- const prismaProjectProvider = prismaClient ? (0, prismaProjectProvider_1.createPrismaProjectProvider)(prismaClient, adapter) : undefined;
47
- const prismaExportCollectionProvider = prismaClient ? (0, prismaExportCollectionProvider_1.createPrismaExportCollectionProvider)(prismaClient) : undefined;
48
26
  return {
49
- exportProvider: mongoExportProvider || prismaExportProvider,
27
+ exportProvider: mongoProviders?.exportProvider || prismaProviders?.exportProvider,
50
28
  projectProviders: {
51
- nosql: mongoProjectProvider,
52
- sql: prismaProjectProvider,
29
+ nosql: mongoProviders?.projectProvider,
30
+ sql: prismaProviders?.projectProvider,
53
31
  },
54
- exportCollectionProvider: prismaExportCollectionProvider, // Solo Prisma tiene este por ahora
55
- mongoConnection,
56
- prismaClient,
32
+ exportCollectionProvider: mongoProviders?.exportCollectionProvider || prismaProviders?.exportCollectionProvider,
33
+ mongooseClient: mongoProviders?.mongooseClient,
34
+ prismaClient: prismaProviders?.prismaClient,
57
35
  };
58
36
  }
@@ -0,0 +1,8 @@
1
+ import mongoose from 'mongoose';
2
+ import { StorageAdapter, ProjectProvider, ExportProvider } from '../types';
3
+ export declare function createMongooseProvider(connectionString: string, adapter: StorageAdapter): {
4
+ mongooseClient: mongoose.Connection;
5
+ exportProvider: ExportProvider;
6
+ projectProvider: ProjectProvider;
7
+ exportCollectionProvider: undefined;
8
+ } | null;
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.createMongooseProvider = createMongooseProvider;
7
+ const mongoose_1 = __importDefault(require("mongoose"));
8
+ const initProjectModel_1 = require("../mongoose_models/initProjectModel");
9
+ const initExportModel_1 = require("../mongoose_models/initExportModel");
10
+ const mongooseExportProvider_1 = require("./mongooseExportProvider");
11
+ const mongooseProjectProvider_1 = require("./mongooseProjectProvider");
12
+ function createMongooseProvider(connectionString, adapter) {
13
+ if (!connectionString) {
14
+ console.warn('Connection string is not provided. Mongoose client will not be initialized.');
15
+ return null;
16
+ }
17
+ const mongooseClient = mongoose_1.default.createConnection(connectionString, {
18
+ dbName: undefined,
19
+ });
20
+ const ExportModel = (0, initExportModel_1.initExportModel)(mongooseClient);
21
+ const ProjectModel = (0, initProjectModel_1.initProjectModel)(mongooseClient);
22
+ const exportProvider = (0, mongooseExportProvider_1.createMongooseExportProvider)(ExportModel);
23
+ const projectProvider = (0, mongooseProjectProvider_1.createMongooseProjectProvider)(ProjectModel, ExportModel, adapter);
24
+ // Mongoose does not have a direct equivalent for ExportCollectionProvider in the same way Prisma does.
25
+ // If a Mongoose-based ExportCollectionProvider is needed, it would be implemented here.
26
+ const exportCollectionProvider = undefined;
27
+ return {
28
+ mongooseClient,
29
+ exportProvider,
30
+ projectProvider,
31
+ exportCollectionProvider,
32
+ };
33
+ }
@@ -1,8 +1,14 @@
1
1
  import { PrismaClient } from '@prisma/client';
2
- export declare function createPrismaProvider(connectionString: string): PrismaClient<{
3
- datasources: {
4
- db: {
5
- url: string;
2
+ import { StorageAdapter, ProjectProvider, ExportProvider, ExportCollectionProvider } from '../types';
3
+ export declare function createPrismaProvider(connectionString: string, adapter: StorageAdapter): {
4
+ prismaClient: PrismaClient<{
5
+ datasources: {
6
+ db: {
7
+ url: string;
8
+ };
6
9
  };
7
- };
8
- }, never, import("@prisma/client/runtime/library").DefaultArgs> | null;
10
+ }, never, import("@prisma/client/runtime/library").DefaultArgs>;
11
+ exportProvider: ExportProvider;
12
+ projectProvider: ProjectProvider;
13
+ exportCollectionProvider: ExportCollectionProvider;
14
+ } | null;
@@ -2,7 +2,10 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.createPrismaProvider = createPrismaProvider;
4
4
  const client_1 = require("@prisma/client");
5
- function createPrismaProvider(connectionString) {
5
+ const prismaExportProvider_1 = require("./prismaExportProvider");
6
+ const prismaProjectProvider_1 = require("./prismaProjectProvider");
7
+ const prismaExportCollectionProvider_1 = require("./prismaExportCollectionProvider");
8
+ function createPrismaProvider(connectionString, adapter) {
6
9
  if (!connectionString) {
7
10
  console.warn('Connection string is not provided. Prisma client will not be initialized.');
8
11
  return null;
@@ -14,5 +17,13 @@ function createPrismaProvider(connectionString) {
14
17
  },
15
18
  },
16
19
  });
17
- return prisma;
20
+ const exportProvider = (0, prismaExportProvider_1.createPrismaExportProvider)(prisma);
21
+ const projectProvider = (0, prismaProjectProvider_1.createPrismaProjectProvider)(prisma, adapter);
22
+ const exportCollectionProvider = (0, prismaExportCollectionProvider_1.createPrismaExportCollectionProvider)(prisma);
23
+ return {
24
+ prismaClient: prisma,
25
+ exportProvider,
26
+ projectProvider,
27
+ exportCollectionProvider,
28
+ };
18
29
  }
@@ -0,0 +1,3 @@
1
+ import { Model } from 'mongoose';
2
+ import { ExportProvider } from '../types';
3
+ export declare function createMongooseExportProvider(ExportModel: Model<any>): ExportProvider;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createMongooseExportProvider = createMongooseExportProvider;
4
+ function createMongooseExportProvider(ExportModel) {
5
+ return {
6
+ async getById(exportId) {
7
+ return await ExportModel.findById(exportId).lean();
8
+ },
9
+ async create(data) {
10
+ return await ExportModel.create(data);
11
+ }
12
+ };
13
+ }
@@ -0,0 +1,3 @@
1
+ import { ProjectProvider, StorageAdapter } from '../types';
2
+ import { Model } from 'mongoose';
3
+ export declare function createMongooseProjectProvider(ProjectModel: Model<any>, ExportModel: Model<any>, adapter: StorageAdapter): ProjectProvider;
@@ -0,0 +1,114 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createMongooseProjectProvider = createMongooseProjectProvider;
4
+ function createMongooseProjectProvider(ProjectModel, ExportModel, adapter) {
5
+ return {
6
+ async getById(projectId, populateMembers = false) {
7
+ let query = ProjectModel.findById(projectId).populate('exports', ['_id', 'collectionName']);
8
+ if (populateMembers) {
9
+ // No longer populating 'members.userId' to avoid dependency on external User model
10
+ }
11
+ const project = await query;
12
+ if (!project)
13
+ throw new Error('Project not found');
14
+ return formatProject(project);
15
+ },
16
+ async create(data) {
17
+ const newProject = await ProjectModel.create({
18
+ dbType: data.dbType,
19
+ members: [
20
+ {
21
+ userId: data.members?.[0].userId,
22
+ role: data.members?.[0].role,
23
+ archived: false
24
+ }
25
+ ],
26
+ name: data.name,
27
+ description: data.description || '',
28
+ image: data.image || '',
29
+ folders: data.folders || [],
30
+ allowUpload: data.allowUpload ?? true,
31
+ allowSharing: data.allowSharing ?? false,
32
+ });
33
+ return formatProject(newProject);
34
+ },
35
+ async update(projectId, updates) {
36
+ const updated = await ProjectModel.findByIdAndUpdate(projectId, updates, { new: true }).populate('exports', ['_id', 'collectionName']);
37
+ if (!updated)
38
+ throw new Error('Project not found');
39
+ return formatProject(updated);
40
+ },
41
+ async list(userId) {
42
+ const all = await ProjectModel.find(userId
43
+ ? { 'members': { $elemMatch: { userId } } }
44
+ : {});
45
+ return all.map(doc => formatProjectList(doc, userId));
46
+ },
47
+ async delete(projectId) {
48
+ try {
49
+ await ProjectModel.findByIdAndDelete(projectId);
50
+ await adapter.deleteProjectDirectory(projectId);
51
+ return { success: true };
52
+ }
53
+ catch (error) {
54
+ throw new Error('Project not found');
55
+ }
56
+ },
57
+ async archive(projectId, userId) {
58
+ await ProjectModel.updateOne({ _id: projectId, 'members.userId': userId }, { $set: { 'members.$.archived': true } });
59
+ return { success: true, projects: await this.list(userId) };
60
+ },
61
+ async unarchive(projectId, userId) {
62
+ await ProjectModel.updateOne({ _id: projectId, 'members.userId': userId }, { $set: { 'members.$.archived': false } });
63
+ return { success: true, projects: await this.list(userId) };
64
+ },
65
+ async getExport(projectId, exportId) {
66
+ const exportDoc = await ExportModel.findOne({ _id: exportId, project: projectId });
67
+ if (!exportDoc)
68
+ throw new Error('Export not found');
69
+ return exportDoc;
70
+ },
71
+ async addExportToProject(projectId, exportId) {
72
+ // En Mongoose, la relación ya está definida en el modelo Export.
73
+ // No es necesario actualizar el Project directamente.
74
+ // Si se necesita vincular un Export existente a un Project, se haría al crear o actualizar el Export.
75
+ // Por ejemplo, al crear un Export:
76
+ // ExportModel.create({ ..., projectId: projectId });
77
+ // O al actualizar un Export:
78
+ // ExportModel.findByIdAndUpdate(exportId, { projectId: projectId });
79
+ // Dado que el método original de Mongoose solo añade el ID, asumimos que el Export ya existe y tiene el projectId correcto.
80
+ // Si la lógica requiere añadir un Export existente a un Project, y el Export no tiene el projectId, se debería actualizar el Export.
81
+ // Por ahora, no se requiere ninguna acción aquí si la relación ya está establecida en el modelo Export.
82
+ }
83
+ };
84
+ function formatProject(doc) {
85
+ return {
86
+ id: doc._id.toString(),
87
+ dbType: doc.dbType,
88
+ name: doc.name,
89
+ image: doc.image,
90
+ members: doc.members.map((m) => ({
91
+ userId: m.userId,
92
+ role: m.role,
93
+ archived: m.archived ?? false
94
+ })),
95
+ description: doc.description,
96
+ folders: doc.rootFolders || [],
97
+ settings: {
98
+ allowUpload: doc.allowUpload,
99
+ allowSharing: doc.allowSharing,
100
+ },
101
+ exports: doc.exports || []
102
+ };
103
+ }
104
+ function formatProjectList(doc, userId) {
105
+ const archived = doc.members?.find((m) => m.userId?.toString() === userId)?.archived ?? false;
106
+ return {
107
+ id: doc._id.toString(),
108
+ dbType: doc.dbType,
109
+ name: doc.name,
110
+ image: doc.image,
111
+ archived
112
+ };
113
+ }
114
+ }
@@ -10,9 +10,9 @@ export declare function createPrismaExportCollectionProvider(prisma: PrismaClien
10
10
  } & {
11
11
  id: string;
12
12
  name: string;
13
+ projectId: string;
13
14
  createdAt: Date;
14
15
  updatedAt: Date;
15
- projectId: string;
16
16
  }) | null>;
17
17
  create(data: {
18
18
  projectId: string;
@@ -31,9 +31,9 @@ export declare function createPrismaExportCollectionProvider(prisma: PrismaClien
31
31
  } & {
32
32
  id: string;
33
33
  name: string;
34
+ projectId: string;
34
35
  createdAt: Date;
35
36
  updatedAt: Date;
36
- projectId: string;
37
37
  }>;
38
38
  update(id: string, data: {
39
39
  name?: string;
@@ -51,9 +51,9 @@ export declare function createPrismaExportCollectionProvider(prisma: PrismaClien
51
51
  } & {
52
52
  id: string;
53
53
  name: string;
54
+ projectId: string;
54
55
  createdAt: Date;
55
56
  updatedAt: Date;
56
- projectId: string;
57
57
  }>;
58
58
  delete(id: string): Promise<{
59
59
  success: boolean;
@@ -12,7 +12,7 @@ function createPrismaProjectProvider(prisma, adapter) {
12
12
  },
13
13
  });
14
14
  if (!project)
15
- throw new Error('Project not found');
15
+ return null;
16
16
  return formatProject(project);
17
17
  },
18
18
  async create(data) {
@@ -1,4 +1,5 @@
1
1
  import { Request } from 'express';
2
+ import mongoose from 'mongoose';
2
3
  export interface S3Config {
3
4
  bucket: string;
4
5
  region: string;
@@ -107,7 +108,7 @@ export interface ProjectProvider {
107
108
  projects: ProjectListInfo[];
108
109
  }>;
109
110
  list(userId?: string): Promise<ProjectListInfo[]>;
110
- getById(projectId: string, populateMembers?: boolean): Promise<ProjectInfo>;
111
+ getById(projectId: string, populateMembers?: boolean): Promise<ProjectInfo | null>;
111
112
  delete(projectId: string): Promise<{
112
113
  success: boolean;
113
114
  }>;
@@ -154,3 +155,13 @@ export interface ExportCollectionProvider {
154
155
  success: boolean;
155
156
  }>;
156
157
  }
158
+ export interface DatabaseProviders {
159
+ exportProvider?: ExportProvider;
160
+ projectProviders: {
161
+ nosql?: ProjectProvider;
162
+ sql?: ProjectProvider;
163
+ };
164
+ exportCollectionProvider?: ExportCollectionProvider;
165
+ mongooseClient?: mongoose.Connection;
166
+ prismaClient?: any;
167
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "streamby-core",
3
- "version": "0.15.0",
3
+ "version": "0.16.0",
4
4
  "description": "StreamBy middleware framework for media storage management",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",