@omss/framework 1.1.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 (71) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +516 -0
  3. package/dist/controllers/content.controller.d.ts +37 -0
  4. package/dist/controllers/content.controller.d.ts.map +1 -0
  5. package/dist/controllers/content.controller.js +37 -0
  6. package/dist/controllers/content.controller.js.map +1 -0
  7. package/dist/controllers/health.controller.d.ts +11 -0
  8. package/dist/controllers/health.controller.d.ts.map +1 -0
  9. package/dist/controllers/health.controller.js +18 -0
  10. package/dist/controllers/health.controller.js.map +1 -0
  11. package/dist/controllers/proxy.controller.d.ts +17 -0
  12. package/dist/controllers/proxy.controller.d.ts.map +1 -0
  13. package/dist/controllers/proxy.controller.js +32 -0
  14. package/dist/controllers/proxy.controller.js.map +1 -0
  15. package/dist/core/cache.d.ts +29 -0
  16. package/dist/core/cache.d.ts.map +1 -0
  17. package/dist/core/cache.js +95 -0
  18. package/dist/core/cache.js.map +1 -0
  19. package/dist/core/errors.d.ts +27 -0
  20. package/dist/core/errors.d.ts.map +1 -0
  21. package/dist/core/errors.js +42 -0
  22. package/dist/core/errors.js.map +1 -0
  23. package/dist/core/server.d.ts +46 -0
  24. package/dist/core/server.d.ts.map +1 -0
  25. package/dist/core/server.js +210 -0
  26. package/dist/core/server.js.map +1 -0
  27. package/dist/core/types.d.ts +123 -0
  28. package/dist/core/types.d.ts.map +1 -0
  29. package/dist/core/types.js +4 -0
  30. package/dist/core/types.js.map +1 -0
  31. package/dist/index.d.ts +19 -0
  32. package/dist/index.d.ts.map +1 -0
  33. package/dist/index.js +48 -0
  34. package/dist/index.js.map +1 -0
  35. package/dist/middleware/error-handler.d.ts +4 -0
  36. package/dist/middleware/error-handler.d.ts.map +1 -0
  37. package/dist/middleware/error-handler.js +57 -0
  38. package/dist/middleware/error-handler.js.map +1 -0
  39. package/dist/middleware/logger.d.ts +3 -0
  40. package/dist/middleware/logger.d.ts.map +1 -0
  41. package/dist/middleware/logger.js +34 -0
  42. package/dist/middleware/logger.js.map +1 -0
  43. package/dist/middleware/validation.d.ts +33 -0
  44. package/dist/middleware/validation.d.ts.map +1 -0
  45. package/dist/middleware/validation.js +93 -0
  46. package/dist/middleware/validation.js.map +1 -0
  47. package/dist/providers/base-provider.d.ts +91 -0
  48. package/dist/providers/base-provider.d.ts.map +1 -0
  49. package/dist/providers/base-provider.js +170 -0
  50. package/dist/providers/base-provider.js.map +1 -0
  51. package/dist/providers/provider-registry.d.ts +56 -0
  52. package/dist/providers/provider-registry.d.ts.map +1 -0
  53. package/dist/providers/provider-registry.js +182 -0
  54. package/dist/providers/provider-registry.js.map +1 -0
  55. package/dist/services/health.service.d.ts +16 -0
  56. package/dist/services/health.service.d.ts.map +1 -0
  57. package/dist/services/health.service.js +44 -0
  58. package/dist/services/health.service.js.map +1 -0
  59. package/dist/services/proxy.service.d.ts +56 -0
  60. package/dist/services/proxy.service.d.ts.map +1 -0
  61. package/dist/services/proxy.service.js +224 -0
  62. package/dist/services/proxy.service.js.map +1 -0
  63. package/dist/services/source.service.d.ts +57 -0
  64. package/dist/services/source.service.d.ts.map +1 -0
  65. package/dist/services/source.service.js +226 -0
  66. package/dist/services/source.service.js.map +1 -0
  67. package/dist/services/tmdb.service.d.ts +67 -0
  68. package/dist/services/tmdb.service.d.ts.map +1 -0
  69. package/dist/services/tmdb.service.js +237 -0
  70. package/dist/services/tmdb.service.js.map +1 -0
  71. package/package.json +90 -0
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ // OMSS v1.0 specification types + some custom stuff
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":";AAAA,oDAAoD"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * @omss/framework
3
+ *
4
+ * Official OMSS backend framework for multi-provider streaming media aggregation
5
+ *
6
+ * @packageDocumentation
7
+ */
8
+ export { OMSSServer } from './core/server';
9
+ export { OMSSConfig, SourceResponse, Source, Subtitle, HealthResponse } from './core/types';
10
+ export { OMSSError, OMSSErrors } from './core/errors';
11
+ export { CacheService, MemoryCacheService, RedisCacheService } from './core/cache';
12
+ export * from './providers/base-provider';
13
+ export { ProviderRegistry, ProviderRegistryConfig } from './providers/provider-registry';
14
+ export { SourceService } from './services/source.service';
15
+ export { ProxyService } from './services/proxy.service';
16
+ export { HealthService } from './services/health.service';
17
+ export { ProxyService as ProxyUtils } from './services/proxy.service';
18
+ export type * from './core/types';
19
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC5F,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAGnF,cAAc,2BAA2B,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAGzF,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAG1D,OAAO,EAAE,YAAY,IAAI,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAGtE,mBAAmB,cAAc,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ /**
3
+ * @omss/framework
4
+ *
5
+ * Official OMSS backend framework for multi-provider streaming media aggregation
6
+ *
7
+ * @packageDocumentation
8
+ */
9
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ var desc = Object.getOwnPropertyDescriptor(m, k);
12
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
13
+ desc = { enumerable: true, get: function() { return m[k]; } };
14
+ }
15
+ Object.defineProperty(o, k2, desc);
16
+ }) : (function(o, m, k, k2) {
17
+ if (k2 === undefined) k2 = k;
18
+ o[k2] = m[k];
19
+ }));
20
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
21
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
22
+ };
23
+ Object.defineProperty(exports, "__esModule", { value: true });
24
+ exports.ProxyUtils = exports.HealthService = exports.ProxyService = exports.SourceService = exports.ProviderRegistry = exports.RedisCacheService = exports.MemoryCacheService = exports.OMSSErrors = exports.OMSSError = exports.OMSSServer = void 0;
25
+ // Core exports
26
+ var server_1 = require("./core/server");
27
+ Object.defineProperty(exports, "OMSSServer", { enumerable: true, get: function () { return server_1.OMSSServer; } });
28
+ var errors_1 = require("./core/errors");
29
+ Object.defineProperty(exports, "OMSSError", { enumerable: true, get: function () { return errors_1.OMSSError; } });
30
+ Object.defineProperty(exports, "OMSSErrors", { enumerable: true, get: function () { return errors_1.OMSSErrors; } });
31
+ var cache_1 = require("./core/cache");
32
+ Object.defineProperty(exports, "MemoryCacheService", { enumerable: true, get: function () { return cache_1.MemoryCacheService; } });
33
+ Object.defineProperty(exports, "RedisCacheService", { enumerable: true, get: function () { return cache_1.RedisCacheService; } });
34
+ // Provider exports
35
+ __exportStar(require("./providers/base-provider"), exports);
36
+ var provider_registry_1 = require("./providers/provider-registry");
37
+ Object.defineProperty(exports, "ProviderRegistry", { enumerable: true, get: function () { return provider_registry_1.ProviderRegistry; } });
38
+ // Service exports
39
+ var source_service_1 = require("./services/source.service");
40
+ Object.defineProperty(exports, "SourceService", { enumerable: true, get: function () { return source_service_1.SourceService; } });
41
+ var proxy_service_1 = require("./services/proxy.service");
42
+ Object.defineProperty(exports, "ProxyService", { enumerable: true, get: function () { return proxy_service_1.ProxyService; } });
43
+ var health_service_1 = require("./services/health.service");
44
+ Object.defineProperty(exports, "HealthService", { enumerable: true, get: function () { return health_service_1.HealthService; } });
45
+ // Utility exports
46
+ var proxy_service_2 = require("./services/proxy.service");
47
+ Object.defineProperty(exports, "ProxyUtils", { enumerable: true, get: function () { return proxy_service_2.ProxyService; } });
48
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;;;;;;;;;;;;;;;AAEH,eAAe;AACf,wCAA2C;AAAlC,oGAAA,UAAU,OAAA;AAEnB,wCAAsD;AAA7C,mGAAA,SAAS,OAAA;AAAE,oGAAA,UAAU,OAAA;AAC9B,sCAAmF;AAA5D,2GAAA,kBAAkB,OAAA;AAAE,0GAAA,iBAAiB,OAAA;AAE5D,mBAAmB;AACnB,4DAA0C;AAC1C,mEAAyF;AAAhF,qHAAA,gBAAgB,OAAA;AAEzB,kBAAkB;AAClB,4DAA0D;AAAjD,+GAAA,aAAa,OAAA;AACtB,0DAAwD;AAA/C,6GAAA,YAAY,OAAA;AACrB,4DAA0D;AAAjD,+GAAA,aAAa,OAAA;AAEtB,kBAAkB;AAClB,0DAAsE;AAA7D,2GAAA,YAAY,OAAc"}
@@ -0,0 +1,4 @@
1
+ import { FastifyError, FastifyRequest, FastifyReply } from 'fastify';
2
+ import { OMSSError } from '../core/errors';
3
+ export declare function errorHandler(error: FastifyError | OMSSError, request: FastifyRequest, reply: FastifyReply): Promise<never>;
4
+ //# sourceMappingURL=error-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-handler.d.ts","sourceRoot":"","sources":["../../src/middleware/error-handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACrE,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE1C,wBAAsB,YAAY,CAAC,KAAK,EAAE,YAAY,GAAG,SAAS,EAAE,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,YAAY,kBAwD/G"}
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.errorHandler = errorHandler;
4
+ const errors_1 = require("../core/errors");
5
+ async function errorHandler(error, request, reply) {
6
+ // Log error for debugging
7
+ console.error('[ErrorHandler]', {
8
+ url: request.url,
9
+ method: request.method,
10
+ error: error.message,
11
+ stack: error.stack,
12
+ });
13
+ // Handle OMSS-specific errors
14
+ if (error instanceof errors_1.OMSSError) {
15
+ return reply.code(error.statusCode).send(error.toJSON());
16
+ }
17
+ // Handle Fastify validation errors
18
+ if (error.validation) {
19
+ return reply.code(400).send({
20
+ error: {
21
+ code: 'INVALID_PARAMETER',
22
+ message: 'Request validation failed',
23
+ details: error.validation,
24
+ },
25
+ traceId: request.id,
26
+ });
27
+ }
28
+ // Handle 404 errors
29
+ if (error.statusCode === 404) {
30
+ return reply.code(404).send({
31
+ error: {
32
+ code: 'ENDPOINT_NOT_FOUND',
33
+ message: 'The requested endpoint does not exist',
34
+ details: {
35
+ path: request.url,
36
+ method: request.method,
37
+ },
38
+ },
39
+ traceId: request.id,
40
+ });
41
+ }
42
+ // Handle generic errors
43
+ const statusCode = error.statusCode || 500;
44
+ return reply.code(statusCode).send({
45
+ error: {
46
+ code: 'INTERNAL_ERROR',
47
+ message: process.env.NODE_ENV === 'production' ? 'An unexpected error occurred' : error.message,
48
+ details: process.env.NODE_ENV === 'production'
49
+ ? undefined
50
+ : {
51
+ stack: error.stack,
52
+ },
53
+ },
54
+ traceId: request.id,
55
+ });
56
+ }
57
+ //# sourceMappingURL=error-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-handler.js","sourceRoot":"","sources":["../../src/middleware/error-handler.ts"],"names":[],"mappings":";;AAGA,oCAwDC;AA1DD,0CAA0C;AAEnC,KAAK,UAAU,YAAY,CAAC,KAA+B,EAAE,OAAuB,EAAE,KAAmB;IAC5G,0BAA0B;IAC1B,OAAO,CAAC,KAAK,CAAC,gBAAgB,EAAE;QAC5B,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,KAAK,EAAE,KAAK,CAAC,OAAO;QACpB,KAAK,EAAE,KAAK,CAAC,KAAK;KACrB,CAAC,CAAC;IAEH,8BAA8B;IAC9B,IAAI,KAAK,YAAY,kBAAS,EAAE,CAAC;QAC7B,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IAC7D,CAAC;IAED,mCAAmC;IACnC,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;QACnB,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;YACxB,KAAK,EAAE;gBACH,IAAI,EAAE,mBAAmB;gBACzB,OAAO,EAAE,2BAA2B;gBACpC,OAAO,EAAE,KAAK,CAAC,UAAU;aAC5B;YACD,OAAO,EAAE,OAAO,CAAC,EAAE;SACtB,CAAC,CAAC;IACP,CAAC;IAED,oBAAoB;IACpB,IAAI,KAAK,CAAC,UAAU,KAAK,GAAG,EAAE,CAAC;QAC3B,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;YACxB,KAAK,EAAE;gBACH,IAAI,EAAE,oBAAoB;gBAC1B,OAAO,EAAE,uCAAuC;gBAChD,OAAO,EAAE;oBACL,IAAI,EAAE,OAAO,CAAC,GAAG;oBACjB,MAAM,EAAE,OAAO,CAAC,MAAM;iBACzB;aACJ;YACD,OAAO,EAAE,OAAO,CAAC,EAAE;SACtB,CAAC,CAAC;IACP,CAAC;IAED,wBAAwB;IACxB,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,IAAI,GAAG,CAAC;IAC3C,OAAO,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC;QAC/B,KAAK,EAAE;YACH,IAAI,EAAE,gBAAgB;YACtB,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,CAAC,CAAC,CAAC,8BAA8B,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO;YAC/F,OAAO,EACH,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY;gBACjC,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC;oBACI,KAAK,EAAE,KAAK,CAAC,KAAK;iBACrB;SACd;QACD,OAAO,EAAE,OAAO,CAAC,EAAE;KACtB,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { FastifyRequest, FastifyReply, HookHandlerDoneFunction } from 'fastify';
2
+ export declare function requestLogger(request: FastifyRequest, reply: FastifyReply, done: HookHandlerDoneFunction): void;
3
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/middleware/logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAC;AAoBhF,wBAAgB,aAAa,CAAC,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,uBAAuB,QAYxG"}
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.requestLogger = requestLogger;
4
+ // Color codes for console output
5
+ const colors = {
6
+ reset: '\x1b[0m',
7
+ green: '\x1b[32m',
8
+ yellow: '\x1b[33m',
9
+ red: '\x1b[31m',
10
+ blue: '\x1b[34m',
11
+ gray: '\x1b[90m',
12
+ };
13
+ function getStatusColor(statusCode) {
14
+ if (statusCode >= 500)
15
+ return colors.red;
16
+ if (statusCode >= 400)
17
+ return colors.yellow;
18
+ if (statusCode >= 300)
19
+ return colors.blue;
20
+ if (statusCode >= 200)
21
+ return colors.green;
22
+ return colors.reset;
23
+ }
24
+ function requestLogger(request, reply, done) {
25
+ const startTime = Date.now();
26
+ reply.raw.on('finish', () => {
27
+ const duration = Date.now() - startTime;
28
+ const timestamp = new Date().toISOString();
29
+ const statusColor = getStatusColor(reply.statusCode);
30
+ console.log(`${colors.gray}[${timestamp}]${colors.reset} ` + `${request.method} ${request.url} ` + `${statusColor}${reply.statusCode}${colors.reset} ` + `${colors.gray}- ${duration}ms${colors.reset}`);
31
+ });
32
+ done();
33
+ }
34
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/middleware/logger.ts"],"names":[],"mappings":";;AAoBA,sCAYC;AA9BD,iCAAiC;AACjC,MAAM,MAAM,GAAG;IACX,KAAK,EAAE,SAAS;IAChB,KAAK,EAAE,UAAU;IACjB,MAAM,EAAE,UAAU;IAClB,GAAG,EAAE,UAAU;IACf,IAAI,EAAE,UAAU;IAChB,IAAI,EAAE,UAAU;CACnB,CAAC;AAEF,SAAS,cAAc,CAAC,UAAkB;IACtC,IAAI,UAAU,IAAI,GAAG;QAAE,OAAO,MAAM,CAAC,GAAG,CAAC;IACzC,IAAI,UAAU,IAAI,GAAG;QAAE,OAAO,MAAM,CAAC,MAAM,CAAC;IAC5C,IAAI,UAAU,IAAI,GAAG;QAAE,OAAO,MAAM,CAAC,IAAI,CAAC;IAC1C,IAAI,UAAU,IAAI,GAAG;QAAE,OAAO,MAAM,CAAC,KAAK,CAAC;IAC3C,OAAO,MAAM,CAAC,KAAK,CAAC;AACxB,CAAC;AAED,SAAgB,aAAa,CAAC,OAAuB,EAAE,KAAmB,EAAE,IAA6B;IACrG,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE7B,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;QACxB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QACxC,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC3C,MAAM,WAAW,GAAG,cAAc,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAErD,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,IAAI,IAAI,SAAS,IAAI,MAAM,CAAC,KAAK,GAAG,GAAG,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,GAAG,GAAG,GAAG,WAAW,GAAG,KAAK,CAAC,UAAU,GAAG,MAAM,CAAC,KAAK,GAAG,GAAG,GAAG,MAAM,CAAC,IAAI,KAAK,QAAQ,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;IAC7M,CAAC,CAAC,CAAC;IAEH,IAAI,EAAE,CAAC;AACX,CAAC"}
@@ -0,0 +1,33 @@
1
+ import { FastifyRequest, FastifyReply } from 'fastify';
2
+ import { TMDBService } from '../services/tmdb.service';
3
+ /**
4
+ * Basic TMDB ID format validation
5
+ */
6
+ export declare function validateTmdbIdFormat(id: string): void;
7
+ /**
8
+ * Validate season number format
9
+ */
10
+ export declare function validateSeasonFormat(season: number): void;
11
+ /**
12
+ * Validate episode number format
13
+ */
14
+ export declare function validateEpisodeFormat(episode: number, season: number): void;
15
+ /**
16
+ * Content-Type validation middleware
17
+ * Note: This is an async hook handler that doesn't use the 'done' callback
18
+ */
19
+ export declare function validateContentType(request: FastifyRequest, reply: FastifyReply): Promise<void>;
20
+ /**
21
+ * Create TMDB validation middleware
22
+ */
23
+ export declare function createTMDBValidator(tmdbService: TMDBService): {
24
+ /**
25
+ * Validate movie exists and has been released
26
+ */
27
+ validateMovie(tmdbId: string): Promise<void>;
28
+ /**
29
+ * Validate TV episode exists and has aired
30
+ */
31
+ validateTVEpisode(tmdbId: string, season: number, episode: number): Promise<void>;
32
+ };
33
+ //# sourceMappingURL=validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/middleware/validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAEtD;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAIrD;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAIzD;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAI3E;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAiBrG;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,WAAW;IAEpD;;OAEG;0BACyB,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBlD;;OAEG;8BAC6B,MAAM,UAAU,MAAM,WAAW,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;EAkB9F"}
@@ -0,0 +1,93 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validateTmdbIdFormat = validateTmdbIdFormat;
4
+ exports.validateSeasonFormat = validateSeasonFormat;
5
+ exports.validateEpisodeFormat = validateEpisodeFormat;
6
+ exports.validateContentType = validateContentType;
7
+ exports.createTMDBValidator = createTMDBValidator;
8
+ const errors_1 = require("../core/errors");
9
+ /**
10
+ * Basic TMDB ID format validation
11
+ */
12
+ function validateTmdbIdFormat(id) {
13
+ if (!/^\d{1,20}$/.test(id)) {
14
+ throw errors_1.OMSSErrors.invalidTmdbId(id);
15
+ }
16
+ }
17
+ /**
18
+ * Validate season number format
19
+ */
20
+ function validateSeasonFormat(season) {
21
+ if (season < 0 || season > 99) {
22
+ throw errors_1.OMSSErrors.invalidSeason(season, 99);
23
+ }
24
+ }
25
+ /**
26
+ * Validate episode number format
27
+ */
28
+ function validateEpisodeFormat(episode, season) {
29
+ if (episode < 1 || episode > 9999) {
30
+ throw errors_1.OMSSErrors.invalidEpisode(episode, season, 9999);
31
+ }
32
+ }
33
+ /**
34
+ * Content-Type validation middleware
35
+ * Note: This is an async hook handler that doesn't use the 'done' callback
36
+ */
37
+ async function validateContentType(request, reply) {
38
+ const accept = request.headers['accept'];
39
+ // Check Accept header
40
+ if (accept && !accept.includes('application/json') && !accept.includes('*/*')) {
41
+ reply.code(406).send({
42
+ error: {
43
+ code: 'UNSUPPORTED_MEDIA_TYPE',
44
+ message: 'Server only supports application/json responses',
45
+ details: {
46
+ accept: accept,
47
+ supported: ['application/json'],
48
+ },
49
+ },
50
+ traceId: request.id,
51
+ });
52
+ }
53
+ }
54
+ /**
55
+ * Create TMDB validation middleware
56
+ */
57
+ function createTMDBValidator(tmdbService) {
58
+ return {
59
+ /**
60
+ * Validate movie exists and has been released
61
+ */
62
+ async validateMovie(tmdbId) {
63
+ // First check format
64
+ validateTmdbIdFormat(tmdbId);
65
+ // Then validate with TMDB
66
+ const result = await tmdbService.validateMovie(tmdbId);
67
+ if (!result.exists) {
68
+ throw errors_1.OMSSErrors.invalidTmdbId(tmdbId);
69
+ }
70
+ if (!result.released) {
71
+ throw errors_1.OMSSErrors.invalidTmdbId(tmdbId);
72
+ }
73
+ },
74
+ /**
75
+ * Validate TV episode exists and has aired
76
+ */
77
+ async validateTVEpisode(tmdbId, season, episode) {
78
+ // First check formats
79
+ validateTmdbIdFormat(tmdbId);
80
+ validateSeasonFormat(season);
81
+ validateEpisodeFormat(episode, season);
82
+ // Then validate with TMDB
83
+ const result = await tmdbService.validateTVEpisode(tmdbId, season, episode);
84
+ if (!result.exists) {
85
+ throw errors_1.OMSSErrors.invalidEpisode(episode, season, -1);
86
+ }
87
+ if (!result.released) {
88
+ throw errors_1.OMSSErrors.invalidEpisode(episode, season, -1);
89
+ }
90
+ },
91
+ };
92
+ }
93
+ //# sourceMappingURL=validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/middleware/validation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,91 @@
1
+ import { ProviderCapabilities, ProviderMediaObject, ProviderResult } from '../core/types';
2
+ /**
3
+ * Console wrapper for provider logging
4
+ */
5
+ declare class ProviderLogger {
6
+ private providerId;
7
+ private providerName;
8
+ private isProduction;
9
+ constructor(providerId: string, providerName: string, isProduction?: boolean);
10
+ /**
11
+ * Format log prefix with context
12
+ */
13
+ private formatPrefix;
14
+ log(message: string, media?: ProviderMediaObject): void;
15
+ info(message: string, media?: ProviderMediaObject): void;
16
+ warn(message: string, media?: ProviderMediaObject): void;
17
+ error(message: string, error?: any, media?: ProviderMediaObject): void;
18
+ debug(message: string, data?: any, media?: ProviderMediaObject): void;
19
+ success(message: string, media?: ProviderMediaObject): void;
20
+ }
21
+ /**
22
+ * Proxy URL configuration
23
+ */
24
+ interface ProxyConfig {
25
+ baseUrl?: string;
26
+ host?: string;
27
+ port?: number;
28
+ protocol?: 'http' | 'https';
29
+ }
30
+ export declare abstract class BaseProvider {
31
+ abstract readonly id: string;
32
+ abstract readonly name: string;
33
+ abstract readonly enabled: boolean;
34
+ abstract readonly BASE_URL: string;
35
+ abstract readonly HEADERS: Record<string, string>;
36
+ abstract readonly capabilities: ProviderCapabilities;
37
+ /**
38
+ * Protected console logger instance (lazy initialized)
39
+ */
40
+ private _console?;
41
+ /**
42
+ * Proxy configuration (set by ProviderRegistry)
43
+ */
44
+ private static proxyConfig;
45
+ /**
46
+ * Get console logger (lazy initialization)
47
+ */
48
+ protected get console(): ProviderLogger;
49
+ /**
50
+ * Set global proxy configuration
51
+ */
52
+ static setProxyConfig(config: ProxyConfig): void;
53
+ /**
54
+ * Get proxy base URL
55
+ */
56
+ private static getProxyBaseUrl;
57
+ /**
58
+ * Fetch sources for a movie
59
+ */
60
+ abstract getMovieSources(media: ProviderMediaObject): Promise<ProviderResult>;
61
+ /**
62
+ * Fetch sources for a TV episode
63
+ */
64
+ abstract getTVSources(media: ProviderMediaObject): Promise<ProviderResult>;
65
+ /**
66
+ * Health check for provider availability
67
+ */
68
+ healthCheck(): Promise<boolean>;
69
+ /**
70
+ * Helper: Create proxy URL with full server address
71
+ */
72
+ protected createProxyUrl(url: string, headers?: Record<string, string>): string;
73
+ /**
74
+ * Helper: Create relative proxy URL (for same-origin requests)
75
+ */
76
+ protected createRelativeProxyUrl(url: string, headers?: Record<string, string>): string;
77
+ /**
78
+ * Helper: Infer quality from URL or filename
79
+ */
80
+ protected inferQuality(filename: string): string;
81
+ /**
82
+ * Helper: Infer type from URL extension
83
+ */
84
+ protected inferType(url: string): string;
85
+ /**
86
+ * Check if provider supports given content type
87
+ */
88
+ protected supportsContentType(type: 'movies' | 'tv' | 'sub'): boolean;
89
+ }
90
+ export {};
91
+ //# sourceMappingURL=base-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-provider.d.ts","sourceRoot":"","sources":["../../src/providers/base-provider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,170 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BaseProvider = void 0;
4
+ /**
5
+ * Console wrapper for provider logging
6
+ */
7
+ class ProviderLogger {
8
+ providerId;
9
+ providerName;
10
+ isProduction;
11
+ constructor(providerId, providerName, isProduction = process.env.NODE_ENV === 'production') {
12
+ this.providerId = providerId;
13
+ this.providerName = providerName;
14
+ this.isProduction = isProduction;
15
+ }
16
+ /**
17
+ * Format log prefix with context
18
+ */
19
+ formatPrefix(media) {
20
+ if (this.isProduction) {
21
+ return `[${this.providerName}]`;
22
+ }
23
+ const parts = [`[${this.providerName}]`, `[${this.providerId}]`];
24
+ if (media) {
25
+ if (media.type === 'movie') {
26
+ parts.push(`[Movie: ${media.tmdbId}]`);
27
+ if (media.title)
28
+ parts.push(`[${media.title}]`);
29
+ }
30
+ else {
31
+ parts.push(`[TV: ${media.tmdbId}]`, `[S${media.s}E${media.e}]`);
32
+ if (media.title)
33
+ parts.push(`[${media.title}]`);
34
+ }
35
+ }
36
+ return parts.join(' ');
37
+ }
38
+ log(message, media) {
39
+ if (this.isProduction)
40
+ return;
41
+ console.log(`${this.formatPrefix(media)} ${message}`);
42
+ }
43
+ info(message, media) {
44
+ console.info(`${this.formatPrefix(media)} ${message}`);
45
+ }
46
+ warn(message, media) {
47
+ console.warn(`${this.formatPrefix(media)} ⚠️ ${message}`);
48
+ }
49
+ error(message, error, media) {
50
+ console.error(`${this.formatPrefix(media)} ❌ ${message}`, error || '');
51
+ }
52
+ debug(message, data, media) {
53
+ if (this.isProduction)
54
+ return;
55
+ console.debug(`${this.formatPrefix(media)} 🔍 ${message}`, data || '');
56
+ }
57
+ success(message, media) {
58
+ if (this.isProduction)
59
+ return;
60
+ console.log(`${this.formatPrefix(media)} ✅ ${message}`);
61
+ }
62
+ }
63
+ class BaseProvider {
64
+ /**
65
+ * Protected console logger instance (lazy initialized)
66
+ */
67
+ _console;
68
+ /**
69
+ * Proxy configuration (set by ProviderRegistry)
70
+ */
71
+ static proxyConfig = {};
72
+ /**
73
+ * Get console logger (lazy initialization)
74
+ */
75
+ get console() {
76
+ if (!this._console) {
77
+ this._console = new ProviderLogger(this.id, this.name);
78
+ }
79
+ return this._console;
80
+ }
81
+ /**
82
+ * Set global proxy configuration
83
+ */
84
+ static setProxyConfig(config) {
85
+ BaseProvider.proxyConfig = config;
86
+ }
87
+ /**
88
+ * Get proxy base URL
89
+ */
90
+ static getProxyBaseUrl() {
91
+ const config = BaseProvider.proxyConfig;
92
+ // If baseUrl is explicitly set, use it
93
+ if (config.baseUrl) {
94
+ return config.baseUrl;
95
+ }
96
+ // Build from host, port, protocol
97
+ const protocol = config.protocol || 'http';
98
+ const host = config.host || 'localhost';
99
+ const port = config.port;
100
+ // Only add port if it's not default for the protocol
101
+ const needsPort = (protocol === 'http' && port && port !== 80) || (protocol === 'https' && port && port !== 443);
102
+ if (needsPort) {
103
+ return `${protocol}://${host}:${port}`;
104
+ }
105
+ return `${protocol}://${host}`;
106
+ }
107
+ /**
108
+ * Health check for provider availability
109
+ */
110
+ async healthCheck() {
111
+ return this.enabled;
112
+ }
113
+ /**
114
+ * Helper: Create proxy URL with full server address
115
+ */
116
+ createProxyUrl(url, headers) {
117
+ const data = JSON.stringify({ url, headers });
118
+ const encodedData = encodeURIComponent(data);
119
+ const baseUrl = BaseProvider.getProxyBaseUrl();
120
+ return `${baseUrl}/v1/proxy?data=${encodedData}`;
121
+ }
122
+ /**
123
+ * Helper: Create relative proxy URL (for same-origin requests)
124
+ */
125
+ createRelativeProxyUrl(url, headers) {
126
+ const data = JSON.stringify({ url, headers });
127
+ return `/v1/proxy?data=${encodeURIComponent(data)}`;
128
+ }
129
+ /**
130
+ * Helper: Infer quality from URL or filename
131
+ */
132
+ inferQuality(filename) {
133
+ const patterns = [
134
+ { regex: /2160p|4k/i, quality: '2160p' },
135
+ { regex: /1080p/i, quality: '1080p' },
136
+ { regex: /720p/i, quality: '720p' },
137
+ { regex: /480p/i, quality: '480p' },
138
+ { regex: /360p/i, quality: '360p' },
139
+ ];
140
+ for (const { regex, quality } of patterns) {
141
+ if (regex.test(filename))
142
+ return quality;
143
+ }
144
+ return 'unknown';
145
+ }
146
+ /**
147
+ * Helper: Infer type from URL extension
148
+ */
149
+ inferType(url) {
150
+ if (url.includes('.m3u8'))
151
+ return 'hls';
152
+ if (url.includes('.mpd'))
153
+ return 'dash';
154
+ if (url.includes('.mp4'))
155
+ return 'mp4';
156
+ if (url.includes('.mkv'))
157
+ return 'mkv';
158
+ if (url.includes('.webm'))
159
+ return 'webm';
160
+ return 'embed';
161
+ }
162
+ /**
163
+ * Check if provider supports given content type
164
+ */
165
+ supportsContentType(type) {
166
+ return this.capabilities.supportedContentTypes.includes(type);
167
+ }
168
+ }
169
+ exports.BaseProvider = BaseProvider;
170
+ //# sourceMappingURL=base-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-provider.js","sourceRoot":"","sources":["../../src/providers/base-provider.ts"],"names":[],"mappings":"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"}