streamby-core 0.18.0 → 0.20.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.
Files changed (94) hide show
  1. package/README.md +206 -114
  2. package/dist/adapters/database/connectionManager.d.ts +6 -0
  3. package/dist/adapters/database/connectionManager.js +47 -0
  4. package/dist/adapters/database/nosql.d.ts +8 -0
  5. package/dist/adapters/database/nosql.js +46 -0
  6. package/dist/adapters/database/nosqlAdapter.d.ts +8 -0
  7. package/dist/adapters/database/nosqlAdapter.js +30 -0
  8. package/dist/adapters/database/sql.d.ts +8 -0
  9. package/dist/adapters/database/sql.js +42 -0
  10. package/dist/adapters/database/sqlAdapter.d.ts +8 -0
  11. package/dist/adapters/database/sqlAdapter.js +42 -0
  12. package/dist/adapters/s3.d.ts +11 -2
  13. package/dist/adapters/s3.js +59 -76
  14. package/dist/adapters/storage/gcs.d.ts +0 -0
  15. package/dist/adapters/storage/gcs.js +1 -0
  16. package/dist/adapters/storage/local.d.ts +0 -0
  17. package/dist/adapters/storage/local.js +1 -0
  18. package/dist/adapters/storage/s3.d.ts +11 -0
  19. package/dist/adapters/storage/s3.js +65 -0
  20. package/dist/database/Model.d.ts +11 -0
  21. package/dist/database/Model.js +95 -0
  22. package/dist/database/connectionManager.d.ts +5 -0
  23. package/dist/database/connectionManager.js +32 -0
  24. package/dist/database/index.d.ts +3 -0
  25. package/dist/database/index.js +19 -0
  26. package/dist/database/model.d.ts +20 -0
  27. package/dist/database/model.js +2 -0
  28. package/dist/database/modelManager.d.ts +8 -0
  29. package/dist/database/modelManager.js +38 -0
  30. package/dist/database/modelRegistry.d.ts +3 -0
  31. package/dist/database/modelRegistry.js +17 -0
  32. package/dist/database/mongoAdapter.d.ts +11 -0
  33. package/dist/database/mongoAdapter.js +42 -0
  34. package/dist/database/sqlAdapter.d.ts +12 -0
  35. package/dist/database/sqlAdapter.js +68 -0
  36. package/dist/middleware/createRouter.js +81 -158
  37. package/dist/models/Model.d.ts +12 -0
  38. package/dist/models/Model.js +146 -0
  39. package/dist/models/manager.d.ts +2 -0
  40. package/dist/models/manager.js +7 -0
  41. package/dist/models/modelManager.d.ts +2 -0
  42. package/dist/models/modelManager.js +7 -0
  43. package/dist/models/modelRegistry.d.ts +3 -0
  44. package/dist/models/modelRegistry.js +17 -0
  45. package/dist/models/register.d.ts +1 -0
  46. package/dist/models/register.js +8 -0
  47. package/dist/models/registerModel.d.ts +1 -0
  48. package/dist/models/registerModel.js +8 -0
  49. package/dist/models/registry.d.ts +3 -0
  50. package/dist/models/registry.js +17 -0
  51. package/dist/providers/createStorageProvider.d.ts +1 -1
  52. package/dist/providers/createStorageProvider.js +9 -13
  53. package/dist/providers/storage.d.ts +2 -0
  54. package/dist/providers/storage.js +12 -0
  55. package/dist/services/auth.d.ts +0 -1
  56. package/dist/services/auth.js +0 -11
  57. package/dist/types/index.d.ts +4 -95
  58. package/package.json +5 -1
  59. package/dist/config.d.ts +0 -18
  60. package/dist/config.js +0 -26
  61. package/dist/db/initExportModel.d.ts +0 -60
  62. package/dist/db/initExportModel.js +0 -18
  63. package/dist/db/initProjectModel.d.ts +0 -2502
  64. package/dist/db/initProjectModel.js +0 -33
  65. package/dist/db/initUserModel.d.ts +0 -48
  66. package/dist/db/initUserModel.js +0 -19
  67. package/dist/models/ExportCollection.d.ts +0 -54
  68. package/dist/models/ExportCollection.js +0 -19
  69. package/dist/mongoose_models/initExportModel.d.ts +0 -61
  70. package/dist/mongoose_models/initExportModel.js +0 -19
  71. package/dist/mongoose_models/initProjectModel.d.ts +0 -2503
  72. package/dist/mongoose_models/initProjectModel.js +0 -34
  73. package/dist/providers/createDatabaseProvider.d.ts +0 -2
  74. package/dist/providers/createDatabaseProvider.js +0 -36
  75. package/dist/providers/createMongooseProvider.d.ts +0 -8
  76. package/dist/providers/createMongooseProvider.js +0 -33
  77. package/dist/providers/createPrismaProvider.d.ts +0 -14
  78. package/dist/providers/createPrismaProvider.js +0 -29
  79. package/dist/providers/mongoExportProvider.d.ts +0 -3
  80. package/dist/providers/mongoExportProvider.js +0 -13
  81. package/dist/providers/mongoProjectProvider.d.ts +0 -3
  82. package/dist/providers/mongoProjectProvider.js +0 -107
  83. package/dist/providers/mongooseExportProvider.d.ts +0 -3
  84. package/dist/providers/mongooseExportProvider.js +0 -13
  85. package/dist/providers/mongooseProjectProvider.d.ts +0 -3
  86. package/dist/providers/mongooseProjectProvider.js +0 -120
  87. package/dist/providers/prismaExportCollectionProvider.d.ts +0 -61
  88. package/dist/providers/prismaExportCollectionProvider.js +0 -45
  89. package/dist/providers/prismaExportProvider.d.ts +0 -3
  90. package/dist/providers/prismaExportProvider.js +0 -13
  91. package/dist/providers/prismaProjectProvider.d.ts +0 -3
  92. package/dist/providers/prismaProjectProvider.js +0 -157
  93. package/dist/utils/pushPrismaSchema.d.ts +0 -5
  94. package/dist/utils/pushPrismaSchema.js +0 -35
@@ -1,2 +1,2 @@
1
1
  import { StorageAdapter, StorageProvider } from '../types';
2
- export declare function createStorageProvider(providers: StorageProvider[]): StorageAdapter;
2
+ export declare const createStorageProvider: (providers: StorageProvider[]) => StorageAdapter;
@@ -1,16 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createStorageProvider = createStorageProvider;
4
- const s3_1 = require("../adapters/s3");
5
- function createStorageProvider(providers) {
6
- if (!providers.length)
7
- throw new Error('No storage providers configured.');
8
- const selected = providers[0];
9
- switch (selected.type) {
10
- case 's3':
11
- return (0, s3_1.createS3Adapter)(selected.config);
12
- // futuro: case 'gcs': return createGCSAdapter(selected.config);
13
- default:
14
- throw new Error(`Unsupported storage type: ${selected.type}`);
3
+ exports.createStorageProvider = void 0;
4
+ const s3_1 = require("../adapters/storage/s3");
5
+ const createStorageProvider = (providers) => {
6
+ const s3Provider = providers.find(p => p.type === 's3');
7
+ if (s3Provider) {
8
+ return new s3_1.S3Adapter(s3Provider.config);
15
9
  }
16
- }
10
+ throw new Error('No storage provider configured.');
11
+ };
12
+ exports.createStorageProvider = createStorageProvider;
@@ -0,0 +1,2 @@
1
+ import { StorageAdapter, StorageProvider } from '../types';
2
+ export declare const createStorageProvider: (providers: StorageProvider[]) => StorageAdapter;
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createStorageProvider = void 0;
4
+ const s3_1 = require("../adapters/storage/s3");
5
+ const createStorageProvider = (providers) => {
6
+ const s3Provider = providers.find(p => p.type === 's3');
7
+ if (s3Provider) {
8
+ return new s3_1.S3Adapter(s3Provider.config);
9
+ }
10
+ throw new Error('No storage provider configured.');
11
+ };
12
+ exports.createStorageProvider = createStorageProvider;
@@ -2,4 +2,3 @@ import { Request } from 'express';
2
2
  import { StreamByConfig, AuthContext } from '../types';
3
3
  export declare function resolveAuth(config: StreamByConfig, req: Request): Promise<AuthContext>;
4
4
  export declare function checkRole(auth: AuthContext, required: 'viewer' | 'editor' | 'admin'): void;
5
- export declare function dummyAuthProvider(req: Request): Promise<AuthContext>;
@@ -2,13 +2,10 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.resolveAuth = resolveAuth;
4
4
  exports.checkRole = checkRole;
5
- exports.dummyAuthProvider = dummyAuthProvider;
6
5
  async function resolveAuth(config, req) {
7
6
  const auth = await config.authProvider(req);
8
7
  if (!auth ||
9
8
  !auth.userId ||
10
- !Array.isArray(auth.projects) ||
11
- auth.projects.length === 0 ||
12
9
  !auth.role) {
13
10
  throw new Error('Invalid or missing authentication context');
14
11
  }
@@ -22,11 +19,3 @@ function checkRole(auth, required) {
22
19
  throw new Error(`Insufficient role: requires ${required}, found ${auth.role}`);
23
20
  }
24
21
  }
25
- async function dummyAuthProvider(req) {
26
- return {
27
- userId: 'c52c30eb-9d7c-4727-90e6-e0e88d6a5ffd',
28
- username: 'dev-user',
29
- projects: [],
30
- role: 'admin'
31
- };
32
- }
@@ -1,5 +1,4 @@
1
1
  import { Request } from 'express';
2
- import mongoose from 'mongoose';
3
2
  export interface S3Config {
4
3
  bucket: string;
5
4
  region: string;
@@ -7,12 +6,6 @@ export interface S3Config {
7
6
  secretAccessKey: string;
8
7
  }
9
8
  export type StorageProviderType = 's3';
10
- export interface S3Config {
11
- bucket: string;
12
- region: string;
13
- accessKeyId: string;
14
- secretAccessKey: string;
15
- }
16
9
  export type StorageProvider = {
17
10
  type: StorageProviderType;
18
11
  config: S3Config;
@@ -25,6 +18,7 @@ export interface StorageAdapter {
25
18
  getPresignedProjectImageUrl?: (projectId: string) => Promise<any>;
26
19
  }
27
20
  export interface ProjectInfo {
21
+ _id?: string;
28
22
  id: string;
29
23
  dbType: DatabaseType;
30
24
  name: string;
@@ -35,7 +29,6 @@ export interface ProjectInfo {
35
29
  archived?: boolean;
36
30
  }[];
37
31
  description?: string;
38
- folders?: FolderNode[];
39
32
  exports?: {
40
33
  id: string;
41
34
  collectionName: string;
@@ -52,14 +45,10 @@ export interface ProjectListInfo {
52
45
  image?: string;
53
46
  archived: boolean;
54
47
  }
55
- export interface FolderNode {
56
- id: string;
57
- name: string;
58
- children?: FolderNode[];
59
- }
60
48
  export type DatabaseType = 'sql' | 'nosql';
61
49
  export interface DatabaseCredential {
62
- dbType: DatabaseType;
50
+ id: string;
51
+ type: DatabaseType;
63
52
  connectionString?: string;
64
53
  }
65
54
  export interface StreamByConfig {
@@ -69,99 +58,19 @@ export interface StreamByConfig {
69
58
  }[];
70
59
  authProvider: AuthProvider;
71
60
  databases?: DatabaseCredential[];
72
- exportProvider?: ExportProvider;
73
- projectProvider?: ProjectProvider;
74
- exportCollectionProvider?: ExportCollectionProvider;
75
61
  adapter?: StorageAdapter;
76
62
  }
77
63
  export interface AuthContext {
78
64
  userId: string;
79
65
  username: string;
80
- projects: string[];
81
66
  role: 'viewer' | 'editor' | 'admin';
82
67
  }
83
68
  export type AuthProvider = (req: Request) => Promise<AuthContext>;
84
69
  export interface Export {
70
+ _id?: string;
85
71
  id: string;
86
72
  collectionName: string;
87
73
  projectId: string;
88
74
  createdAt: Date;
89
75
  updatedAt: Date;
90
76
  }
91
- export interface ExportProvider {
92
- getById(exportId: string): Promise<Export | null>;
93
- create(data: {
94
- name: string;
95
- description?: string;
96
- collectionName: string;
97
- projectId: string;
98
- }): Promise<Export>;
99
- }
100
- export interface ProjectProvider {
101
- getExport(projectId: string, exportId: string): Promise<any | null>;
102
- archive(projectId: string, userId: string): Promise<{
103
- success: boolean;
104
- projects: ProjectListInfo[];
105
- }>;
106
- unarchive(projectId: string, userId: string): Promise<{
107
- success: boolean;
108
- projects: ProjectListInfo[];
109
- }>;
110
- list(userId?: string, archived?: boolean): Promise<ProjectListInfo[]>;
111
- getById(projectId: string, populateMembers?: boolean): Promise<ProjectInfo | null>;
112
- delete(projectId: string): Promise<{
113
- success: boolean;
114
- }>;
115
- update(projectId: string, updates: Partial<Omit<ProjectInfo, 'id' | 'folders'>>): Promise<ProjectInfo>;
116
- create(data: {
117
- dbType: DatabaseType;
118
- name: string;
119
- image?: string;
120
- members?: {
121
- userId: string;
122
- role: 'viewer' | 'editor' | 'admin';
123
- }[];
124
- description?: string;
125
- allowUpload?: boolean;
126
- allowSharing?: boolean;
127
- folders?: FolderNode[];
128
- }): Promise<ProjectInfo>;
129
- addExportToProject(projectId: string, exportId: string): Promise<void>;
130
- }
131
- export interface ExportEntry {
132
- id: string;
133
- key: string;
134
- value: string;
135
- exportCollectionId: string;
136
- }
137
- export interface ExportCollectionProvider {
138
- getById(id: string): Promise<any | null>;
139
- create(data: {
140
- projectId: string;
141
- name: string;
142
- entries: Array<{
143
- key: string;
144
- value: string;
145
- }>;
146
- }): Promise<any>;
147
- update(id: string, data: {
148
- name?: string;
149
- entries?: Array<{
150
- key: string;
151
- value: string;
152
- }>;
153
- }): Promise<any>;
154
- delete(id: string): Promise<{
155
- success: boolean;
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.18.0",
3
+ "version": "0.20.0",
4
4
  "description": "StreamBy middleware framework for media storage management",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -35,14 +35,18 @@
35
35
  "bcrypt": "^5.1.1",
36
36
  "dotenv": "^16.5.0",
37
37
  "express": "^4.0.0",
38
+ "mongodb": "^6.17.0",
38
39
  "mongoose": "^8.13.2",
40
+ "pg": "^8.16.3",
39
41
  "prisma": "^6.12.0"
40
42
  },
41
43
  "devDependencies": {
42
44
  "@types/bcrypt": "^5.0.2",
43
45
  "@types/cors": "^2.8.18",
44
46
  "@types/express": "^4.17.17",
47
+ "@types/mongodb": "^4.0.7",
45
48
  "@types/node": "^22.15.21",
49
+ "@types/pg": "^8.15.4",
46
50
  "@types/supertest": "^6.0.3",
47
51
  "cors": "^2.8.5",
48
52
  "supertest": "^7.1.0",
package/dist/config.d.ts DELETED
@@ -1,18 +0,0 @@
1
- export declare const config: {
2
- s3: {
3
- accessKeyId: string;
4
- secretAccessKey: string;
5
- region: string;
6
- bucketName: string;
7
- };
8
- gcs: {
9
- projectId: string;
10
- keyFilename: string;
11
- bucketName: string;
12
- };
13
- local: {
14
- storagePath: string;
15
- };
16
- mongooseString: string;
17
- prismaString: string;
18
- };
package/dist/config.js DELETED
@@ -1,26 +0,0 @@
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.config = void 0;
7
- const dotenv_1 = __importDefault(require("dotenv"));
8
- dotenv_1.default.config();
9
- exports.config = {
10
- s3: {
11
- accessKeyId: process.env.AWS_ACCESS_KEY_ID || '',
12
- secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY || '',
13
- region: process.env.AWS_REGION || 'us-east-1',
14
- bucketName: process.env.AWS_BUCKET_NAME || 'streamby-dev',
15
- },
16
- gcs: {
17
- projectId: process.env.GCS_PROJECT_ID || '',
18
- keyFilename: process.env.GCS_KEY_FILENAME || '',
19
- bucketName: process.env.GCS_BUCKET_NAME || 'streamby-dev',
20
- },
21
- local: {
22
- storagePath: process.env.LOCAL_STORAGE_PATH || './uploads',
23
- },
24
- mongooseString: process.env.MONGOOSE_STRING || '',
25
- prismaString: process.env.PRISMA_STRING || '',
26
- };
@@ -1,60 +0,0 @@
1
- import mongoose from 'mongoose';
2
- export declare function initExportModel(connection: mongoose.Connection): mongoose.Model<{
3
- createdAt: NativeDate;
4
- updatedAt: NativeDate;
5
- } & {
6
- name: string;
7
- collectionName: string;
8
- projectId: mongoose.Types.ObjectId;
9
- description?: string | null | undefined;
10
- }, {}, {}, {}, mongoose.Document<unknown, {}, {
11
- createdAt: NativeDate;
12
- updatedAt: NativeDate;
13
- } & {
14
- name: string;
15
- collectionName: string;
16
- projectId: mongoose.Types.ObjectId;
17
- description?: string | null | undefined;
18
- }, {}> & {
19
- createdAt: NativeDate;
20
- updatedAt: NativeDate;
21
- } & {
22
- name: string;
23
- collectionName: string;
24
- projectId: mongoose.Types.ObjectId;
25
- description?: string | null | undefined;
26
- } & {
27
- _id: mongoose.Types.ObjectId;
28
- } & {
29
- __v: number;
30
- }, mongoose.Schema<any, mongoose.Model<any, any, any, any, any, any>, {}, {}, {}, {}, {
31
- timestamps: true;
32
- }, {
33
- createdAt: NativeDate;
34
- updatedAt: NativeDate;
35
- } & {
36
- name: string;
37
- collectionName: string;
38
- projectId: mongoose.Types.ObjectId;
39
- description?: string | null | undefined;
40
- }, mongoose.Document<unknown, {}, mongoose.FlatRecord<{
41
- createdAt: NativeDate;
42
- updatedAt: NativeDate;
43
- } & {
44
- name: string;
45
- collectionName: string;
46
- projectId: mongoose.Types.ObjectId;
47
- description?: string | null | undefined;
48
- }>, {}> & mongoose.FlatRecord<{
49
- createdAt: NativeDate;
50
- updatedAt: NativeDate;
51
- } & {
52
- name: string;
53
- collectionName: string;
54
- projectId: mongoose.Types.ObjectId;
55
- description?: string | null | undefined;
56
- }> & {
57
- _id: mongoose.Types.ObjectId;
58
- } & {
59
- __v: number;
60
- }>>;
@@ -1,18 +0,0 @@
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.initExportModel = initExportModel;
7
- const mongoose_1 = __importDefault(require("mongoose"));
8
- function initExportModel(connection) {
9
- const exportSchema = new mongoose_1.default.Schema({
10
- name: { type: String, required: true },
11
- description: { type: String },
12
- collectionName: { type: String, required: true },
13
- projectId: { type: mongoose_1.default.Schema.Types.ObjectId, ref: 'Project', required: true },
14
- }, {
15
- timestamps: true
16
- });
17
- return connection.model('Export', exportSchema);
18
- }