movie-agent 1.0.0 → 1.1.1
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.
- package/README.md +319 -39
- package/bin/movie-agent +33 -8
- package/dist/agent.d.ts +31 -4
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +109 -16
- package/dist/agent.js.map +1 -1
- package/dist/cache.d.ts +40 -5
- package/dist/cache.d.ts.map +1 -1
- package/dist/cache.js +95 -11
- package/dist/cache.js.map +1 -1
- package/dist/factory.d.ts.map +1 -1
- package/dist/factory.js +23 -1
- package/dist/factory.js.map +1 -1
- package/dist/format.d.ts +14 -1
- package/dist/format.d.ts.map +1 -1
- package/dist/format.js +22 -1
- package/dist/format.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -1
- package/dist/index.js.map +1 -1
- package/dist/llm.d.ts +33 -0
- package/dist/llm.d.ts.map +1 -0
- package/dist/llm.js +221 -0
- package/dist/llm.js.map +1 -0
- package/dist/providers.d.ts +9 -1
- package/dist/providers.d.ts.map +1 -1
- package/dist/providers.js +27 -0
- package/dist/providers.js.map +1 -1
- package/dist/rateLimiter.d.ts +59 -0
- package/dist/rateLimiter.d.ts.map +1 -0
- package/dist/rateLimiter.js +99 -0
- package/dist/rateLimiter.js.map +1 -0
- package/dist/sanitize.d.ts +24 -0
- package/dist/sanitize.d.ts.map +1 -0
- package/dist/sanitize.js +137 -0
- package/dist/sanitize.js.map +1 -0
- package/dist/tmdbApi.d.ts +37 -1
- package/dist/tmdbApi.d.ts.map +1 -1
- package/dist/tmdbApi.js +70 -22
- package/dist/tmdbApi.js.map +1 -1
- package/dist/types.d.ts +2 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/validate.d.ts +5 -0
- package/dist/validate.d.ts.map +1 -1
- package/dist/validate.js +38 -1
- package/dist/validate.js.map +1 -1
- package/package.json +9 -3
package/dist/agent.js
CHANGED
|
@@ -12,6 +12,7 @@ const providers_1 = require("./providers");
|
|
|
12
12
|
const filters_1 = require("./filters");
|
|
13
13
|
const ranking_1 = require("./ranking");
|
|
14
14
|
const format_1 = require("./format");
|
|
15
|
+
const llm_1 = require("./llm");
|
|
15
16
|
/**
|
|
16
17
|
* MovieAgent orchestrates the full recommendation pipeline
|
|
17
18
|
*/
|
|
@@ -20,11 +21,23 @@ class MovieAgent {
|
|
|
20
21
|
* Creates a new MovieAgent instance
|
|
21
22
|
* @param tmdbClient - Optional TMDb API client for testing
|
|
22
23
|
* @param logger - Optional logger function for debugging
|
|
24
|
+
* @param enableLLM - Whether to enable LLM formatting (default: true if GEMINI_API_KEY is set)
|
|
25
|
+
* @param llmProvider - LLM provider to use ('gemini' or 'azure')
|
|
26
|
+
* @param llmApiKey - API key for the LLM provider
|
|
27
|
+
* @param azureConfig - Azure OpenAI configuration (endpoint and deployment)
|
|
28
|
+
* @param debug - Whether to include detailed error information in responses (default: false for production safety)
|
|
23
29
|
*/
|
|
24
|
-
constructor(tmdbClient, logger) {
|
|
30
|
+
constructor(tmdbClient, logger, enableLLM, llmProvider, llmApiKey, azureConfig, debug) {
|
|
25
31
|
this.tmdbClient = tmdbClient ?? new tmdbApi_1.default();
|
|
26
32
|
this.logger =
|
|
27
33
|
logger ?? ((message) => console.log(`[MovieAgent] ${message}`));
|
|
34
|
+
// Initialize LLM service if enabled and API key is available
|
|
35
|
+
const shouldEnableLLM = enableLLM ?? !!process.env.GEMINI_API_KEY;
|
|
36
|
+
this.llmService = shouldEnableLLM
|
|
37
|
+
? new llm_1.LLMService(llmApiKey, llmProvider, azureConfig)
|
|
38
|
+
: null;
|
|
39
|
+
// Default to false for production safety - only expose details when explicitly enabled
|
|
40
|
+
this.debug = debug ?? false;
|
|
28
41
|
}
|
|
29
42
|
/**
|
|
30
43
|
* Gets movie recommendations based on user input
|
|
@@ -41,17 +54,17 @@ class MovieAgent {
|
|
|
41
54
|
this.logger('Step 2: Resolving genres');
|
|
42
55
|
const genres = this.resolveGenres(input);
|
|
43
56
|
this.logger(`Resolved genres: ${genres.join(', ')}`);
|
|
44
|
-
// Step 3: Discover candidate movies via TMDb
|
|
45
|
-
this.logger('Step 3: Discovering candidate movies');
|
|
57
|
+
// Step 3: Discover candidate movies via TMDb (with watch providers)
|
|
58
|
+
this.logger('Step 3: Discovering candidate movies with providers');
|
|
46
59
|
const candidates = await this.discoverCandidates(input, genres);
|
|
47
60
|
this.logger(`Found ${candidates.length} candidate movies`);
|
|
48
61
|
if (candidates.length === 0) {
|
|
49
62
|
return this.createErrorResponse('NO_RESULTS', 'No movies found matching the criteria');
|
|
50
63
|
}
|
|
51
|
-
// Step 4:
|
|
52
|
-
this.logger('Step 4:
|
|
53
|
-
const moviesWithProviders =
|
|
54
|
-
this.logger(
|
|
64
|
+
// Step 4: Extract watch providers from embedded data (region CA)
|
|
65
|
+
this.logger('Step 4: Extracting watch providers');
|
|
66
|
+
const moviesWithProviders = this.extractWatchProviders(candidates);
|
|
67
|
+
this.logger(`${moviesWithProviders.length} movies have streaming providers`);
|
|
55
68
|
// Step 5: Apply filters (platforms, runtime, year)
|
|
56
69
|
this.logger('Step 5: Applying filters');
|
|
57
70
|
const filtered = this.applyFilters(moviesWithProviders, input);
|
|
@@ -85,12 +98,17 @@ class MovieAgent {
|
|
|
85
98
|
* @returns ErrorResponse object
|
|
86
99
|
*/
|
|
87
100
|
createErrorResponse(errorType, message, details) {
|
|
101
|
+
// Log detailed error information server-side for debugging
|
|
102
|
+
if (details) {
|
|
103
|
+
this.logger(`Error details: ${details}`);
|
|
104
|
+
}
|
|
88
105
|
return {
|
|
89
106
|
error: true,
|
|
90
107
|
errorType,
|
|
91
108
|
message,
|
|
92
109
|
timestamp: new Date().toISOString(),
|
|
93
|
-
details
|
|
110
|
+
// Only include details in response when debug mode is enabled
|
|
111
|
+
details: this.debug ? details : undefined,
|
|
94
112
|
};
|
|
95
113
|
}
|
|
96
114
|
/**
|
|
@@ -137,6 +155,14 @@ class MovieAgent {
|
|
|
137
155
|
* @throws Error if validation fails
|
|
138
156
|
*/
|
|
139
157
|
validateInput(input) {
|
|
158
|
+
// Validate mood if provided
|
|
159
|
+
if (input.mood !== undefined) {
|
|
160
|
+
(0, validate_1.validateMood)(input.mood);
|
|
161
|
+
}
|
|
162
|
+
// Validate genre if provided
|
|
163
|
+
if (input.genre !== undefined) {
|
|
164
|
+
(0, validate_1.validateGenre)(input.genre);
|
|
165
|
+
}
|
|
140
166
|
// Validate platforms if provided
|
|
141
167
|
if (input.platforms && input.platforms.length > 0) {
|
|
142
168
|
(0, validate_1.validatePlatforms)(input.platforms);
|
|
@@ -204,22 +230,22 @@ class MovieAgent {
|
|
|
204
230
|
// Fetch detailed information for top candidates
|
|
205
231
|
// Limit to top 20 to avoid excessive API calls
|
|
206
232
|
const topCandidates = response.results.slice(0, 20);
|
|
207
|
-
// Fetch details
|
|
208
|
-
|
|
233
|
+
// Fetch details with watch providers in a single call per movie
|
|
234
|
+
// This uses append_to_response to reduce API calls by 50%
|
|
235
|
+
const detailsPromises = topCandidates.map(movie => this.tmdbClient.getMovieDetailsWithProviders(movie.id));
|
|
209
236
|
const details = await Promise.all(detailsPromises);
|
|
210
237
|
return details;
|
|
211
238
|
}
|
|
212
239
|
/**
|
|
213
|
-
*
|
|
214
|
-
* @param candidates - Array of movie details
|
|
240
|
+
* Extracts watch providers from movie details and filters to those with providers
|
|
241
|
+
* @param candidates - Array of movie details with embedded providers
|
|
215
242
|
* @returns Array of movies with platform information
|
|
216
243
|
*/
|
|
217
|
-
|
|
244
|
+
extractWatchProviders(candidates) {
|
|
218
245
|
const moviesWithProviders = [];
|
|
219
|
-
// Fetch providers for each movie
|
|
220
246
|
for (const movie of candidates) {
|
|
221
247
|
try {
|
|
222
|
-
const platforms =
|
|
248
|
+
const platforms = (0, providers_1.extractPlatformsFromProviders)(movie['watch/providers'], 'CA');
|
|
223
249
|
// Only include movies with at least one provider
|
|
224
250
|
if (platforms.length > 0) {
|
|
225
251
|
moviesWithProviders.push({
|
|
@@ -230,7 +256,7 @@ class MovieAgent {
|
|
|
230
256
|
}
|
|
231
257
|
catch (error) {
|
|
232
258
|
// Log error but continue with other movies
|
|
233
|
-
this.logger(`Failed to
|
|
259
|
+
this.logger(`Failed to extract providers for movie ${movie.id}: ${error instanceof Error ? error.message : String(error)}`);
|
|
234
260
|
}
|
|
235
261
|
}
|
|
236
262
|
return moviesWithProviders;
|
|
@@ -325,9 +351,76 @@ class MovieAgent {
|
|
|
325
351
|
runtime: movie.runtime || 0,
|
|
326
352
|
overview: movie.overview || '',
|
|
327
353
|
genres: movie.genres || [],
|
|
354
|
+
poster_path: movie.poster_path,
|
|
328
355
|
}, streamingPlatforms, reason);
|
|
329
356
|
});
|
|
330
357
|
}
|
|
358
|
+
/**
|
|
359
|
+
* Get recommendations with AI-formatted output (invoke mode)
|
|
360
|
+
* @param input - User input with mood, platforms, genres, runtime, and year preferences
|
|
361
|
+
* @returns Promise resolving to AI-formatted string output or error response
|
|
362
|
+
*/
|
|
363
|
+
async invoke(input) {
|
|
364
|
+
const response = await this.getRecommendations(input);
|
|
365
|
+
if ('error' in response) {
|
|
366
|
+
return response;
|
|
367
|
+
}
|
|
368
|
+
// Use LLM if available, otherwise use fallback formatting
|
|
369
|
+
if (this.llmService) {
|
|
370
|
+
try {
|
|
371
|
+
return await this.llmService.formatRecommendations(response, input);
|
|
372
|
+
}
|
|
373
|
+
catch (error) {
|
|
374
|
+
this.logger(`LLM formatting failed, using fallback: ${error}`);
|
|
375
|
+
return this.fallbackFormat(response);
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
return this.fallbackFormat(response);
|
|
379
|
+
}
|
|
380
|
+
/**
|
|
381
|
+
* Get recommendations with AI-formatted streaming output
|
|
382
|
+
* @param input - User input with mood, platforms, genres, runtime, and year preferences
|
|
383
|
+
* @param onChunk - Callback function called for each chunk of streamed content
|
|
384
|
+
* @returns Promise resolving when streaming is complete, or error response
|
|
385
|
+
*/
|
|
386
|
+
async stream(input, onChunk) {
|
|
387
|
+
const response = await this.getRecommendations(input);
|
|
388
|
+
if ('error' in response) {
|
|
389
|
+
return response;
|
|
390
|
+
}
|
|
391
|
+
// Use LLM streaming if available, otherwise output fallback immediately
|
|
392
|
+
if (this.llmService) {
|
|
393
|
+
try {
|
|
394
|
+
await this.llmService.formatRecommendationsStream(response, input, onChunk);
|
|
395
|
+
}
|
|
396
|
+
catch (error) {
|
|
397
|
+
this.logger(`LLM streaming failed, using fallback: ${error}`);
|
|
398
|
+
onChunk(this.fallbackFormat(response));
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
else {
|
|
402
|
+
onChunk(this.fallbackFormat(response));
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
/**
|
|
406
|
+
* Fallback formatting when LLM is not available
|
|
407
|
+
*/
|
|
408
|
+
fallbackFormat(response) {
|
|
409
|
+
let output = '\\n🎬 Movie Recommendations\\n\\n';
|
|
410
|
+
response.recommendations.forEach((movie, index) => {
|
|
411
|
+
output += `${index + 1}. **${movie.title}** (${movie.releaseYear}) • ${movie.runtime} min\\n`;
|
|
412
|
+
output += ` Genres: ${movie.genres.join(', ')}\\n\\n`;
|
|
413
|
+
output += ` ${movie.description}\\n\\n`;
|
|
414
|
+
const platforms = movie.streamingPlatforms
|
|
415
|
+
.filter(p => p.available)
|
|
416
|
+
.map(p => p.name);
|
|
417
|
+
if (platforms.length > 0) {
|
|
418
|
+
output += ` 📺 Available on: ${platforms.join(', ')}\\n`;
|
|
419
|
+
}
|
|
420
|
+
output += ` ✨ Why: ${movie.matchReason}\\n\\n`;
|
|
421
|
+
});
|
|
422
|
+
return output;
|
|
423
|
+
}
|
|
331
424
|
/**
|
|
332
425
|
* Generates a match reason for a movie
|
|
333
426
|
* @param movie - Movie to explain
|
package/dist/agent.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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"}
|
package/dist/cache.d.ts
CHANGED
|
@@ -1,14 +1,35 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Simple in-memory cache with TTL support
|
|
3
3
|
*/
|
|
4
|
+
/**
|
|
5
|
+
* Optional context for cache key isolation in multi-tenant scenarios.
|
|
6
|
+
* Allows separating cache entries by user, session, or tenant.
|
|
7
|
+
*/
|
|
8
|
+
export interface CacheContext {
|
|
9
|
+
/** User identifier for user-specific cache isolation */
|
|
10
|
+
userId?: string;
|
|
11
|
+
/** Session identifier for session-specific cache isolation */
|
|
12
|
+
sessionId?: string;
|
|
13
|
+
/** Tenant identifier for multi-tenant cache isolation */
|
|
14
|
+
tenantId?: string;
|
|
15
|
+
}
|
|
4
16
|
export declare class Cache {
|
|
5
17
|
private store;
|
|
6
18
|
private defaultTtl;
|
|
19
|
+
private context?;
|
|
7
20
|
/**
|
|
8
21
|
* Creates a new cache instance
|
|
9
22
|
* @param defaultTtl Default time-to-live in seconds
|
|
23
|
+
* @param context Optional context for cache key isolation (e.g., userId, sessionId, tenantId)
|
|
24
|
+
* @throws Error if any context value is an empty string
|
|
25
|
+
*/
|
|
26
|
+
constructor(defaultTtl?: number, context?: CacheContext);
|
|
27
|
+
/**
|
|
28
|
+
* Prefixes a cache key with context information for isolation.
|
|
29
|
+
* @param key Base cache key
|
|
30
|
+
* @returns Prefixed cache key with context
|
|
10
31
|
*/
|
|
11
|
-
|
|
32
|
+
private prefixKey;
|
|
12
33
|
/**
|
|
13
34
|
* Sets a value in the cache
|
|
14
35
|
* @param key Cache key
|
|
@@ -50,9 +71,21 @@ export declare class Cache {
|
|
|
50
71
|
prune(): number;
|
|
51
72
|
}
|
|
52
73
|
/**
|
|
53
|
-
* Gets the global cache instance
|
|
74
|
+
* Gets the global cache instance.
|
|
75
|
+
*
|
|
76
|
+
* NOTE: The global cache instance does not support context-based isolation.
|
|
77
|
+
* For multi-tenant scenarios requiring cache isolation, create separate Cache
|
|
78
|
+
* instances with appropriate context parameters instead of using the global singleton.
|
|
79
|
+
*
|
|
80
|
+
* @example
|
|
81
|
+
* // For single-tenant CLI usage (default):
|
|
82
|
+
* const cache = getCache(3600);
|
|
83
|
+
*
|
|
84
|
+
* // For multi-tenant scenarios, use separate instances:
|
|
85
|
+
* const tenantCache = new Cache(3600, { tenantId: 'tenant1' });
|
|
86
|
+
*
|
|
54
87
|
* @param ttl Default TTL for the cache (only used on first call)
|
|
55
|
-
* @returns Global cache instance
|
|
88
|
+
* @returns Global cache instance without context
|
|
56
89
|
*/
|
|
57
90
|
export declare function getCache(ttl?: number): Cache;
|
|
58
91
|
/**
|
|
@@ -62,14 +95,16 @@ export declare function resetCache(): void;
|
|
|
62
95
|
/**
|
|
63
96
|
* Generates a cache key for discover parameters
|
|
64
97
|
* @param params Discover parameters object
|
|
98
|
+
* @param context Optional context for multi-tenant cache isolation
|
|
65
99
|
* @returns Cache key string
|
|
66
100
|
*/
|
|
67
|
-
export declare function generateDiscoverCacheKey(params: Record<string, any
|
|
101
|
+
export declare function generateDiscoverCacheKey(params: Record<string, any>, context?: CacheContext): string;
|
|
68
102
|
/**
|
|
69
103
|
* Generates a cache key for watch providers
|
|
70
104
|
* @param movieId Movie ID
|
|
71
105
|
* @param region Region code
|
|
106
|
+
* @param context Optional context for multi-tenant cache isolation
|
|
72
107
|
* @returns Cache key string
|
|
73
108
|
*/
|
|
74
|
-
export declare function generateProvidersCacheKey(movieId: number | string, region: string): string;
|
|
109
|
+
export declare function generateProvidersCacheKey(movieId: number | string, region: string, context?: CacheContext): string;
|
|
75
110
|
//# sourceMappingURL=cache.d.ts.map
|
package/dist/cache.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../src/cache.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,qBAAa,KAAK;IAChB,OAAO,CAAC,KAAK,CAA+B;IAC5C,OAAO,CAAC,UAAU,CAAS;
|
|
1
|
+
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../src/cache.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,wDAAwD;IACxD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,8DAA8D;IAC9D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yDAAyD;IACzD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AA6CD,qBAAa,KAAK;IAChB,OAAO,CAAC,KAAK,CAA+B;IAC5C,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,OAAO,CAAC,CAAe;IAE/B;;;;;OAKG;gBACS,UAAU,GAAE,MAAa,EAAE,OAAO,CAAC,EAAE,YAAY;IA6B7D;;;;OAIG;IACH,OAAO,CAAC,SAAS;IAIjB;;;;;OAKG;IACH,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI;IAOjD;;;;OAIG;IACH,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IAiBlC;;;;OAIG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIzB;;;;OAIG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAK5B;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;;OAGG;IACH,IAAI,IAAI,MAAM;IAId;;;OAGG;IACH,KAAK,IAAI,MAAM;CAahB;AAKD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,KAAK,CAK5C;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,IAAI,CAEjC;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC3B,OAAO,CAAC,EAAE,YAAY,GACrB,MAAM,CAOR;AAED;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,MAAM,GAAG,MAAM,EACxB,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,YAAY,GACrB,MAAM,CAIR"}
|
package/dist/cache.js
CHANGED
|
@@ -8,14 +8,79 @@ exports.getCache = getCache;
|
|
|
8
8
|
exports.resetCache = resetCache;
|
|
9
9
|
exports.generateDiscoverCacheKey = generateDiscoverCacheKey;
|
|
10
10
|
exports.generateProvidersCacheKey = generateProvidersCacheKey;
|
|
11
|
+
/**
|
|
12
|
+
* Sanitizes a context value to prevent cache key collisions.
|
|
13
|
+
* Encodes special characters to ensure unique, safe cache keys.
|
|
14
|
+
* Uses encodeURIComponent to handle special characters like colons, slashes, etc.
|
|
15
|
+
* @param value Context value to sanitize
|
|
16
|
+
* @returns Sanitized value safe for use in cache keys
|
|
17
|
+
* @throws Error if value is empty
|
|
18
|
+
*/
|
|
19
|
+
function sanitizeContextValue(value) {
|
|
20
|
+
if (!value || value.trim() === '') {
|
|
21
|
+
throw new Error('Context values cannot be empty strings');
|
|
22
|
+
}
|
|
23
|
+
// Use URI encoding to handle special characters safely
|
|
24
|
+
// This prevents collisions from characters like ':', '/', ';', etc.
|
|
25
|
+
return encodeURIComponent(value);
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Applies context prefix to a cache key for multi-tenant isolation.
|
|
29
|
+
* Prefixes are applied in order: tenant -> user -> session
|
|
30
|
+
* @param key Base cache key
|
|
31
|
+
* @param context Optional context for isolation
|
|
32
|
+
* @returns Prefixed cache key if context is provided, otherwise the original key
|
|
33
|
+
*/
|
|
34
|
+
function applyContextPrefix(key, context) {
|
|
35
|
+
if (!context) {
|
|
36
|
+
return key;
|
|
37
|
+
}
|
|
38
|
+
const prefixParts = [];
|
|
39
|
+
if (context.tenantId) {
|
|
40
|
+
prefixParts.push(`tenant:${sanitizeContextValue(context.tenantId)}`);
|
|
41
|
+
}
|
|
42
|
+
if (context.userId) {
|
|
43
|
+
prefixParts.push(`user:${sanitizeContextValue(context.userId)}`);
|
|
44
|
+
}
|
|
45
|
+
if (context.sessionId) {
|
|
46
|
+
prefixParts.push(`session:${sanitizeContextValue(context.sessionId)}`);
|
|
47
|
+
}
|
|
48
|
+
return prefixParts.length > 0 ? `${prefixParts.join(':')}:${key}` : key;
|
|
49
|
+
}
|
|
11
50
|
class Cache {
|
|
12
51
|
/**
|
|
13
52
|
* Creates a new cache instance
|
|
14
53
|
* @param defaultTtl Default time-to-live in seconds
|
|
54
|
+
* @param context Optional context for cache key isolation (e.g., userId, sessionId, tenantId)
|
|
55
|
+
* @throws Error if any context value is an empty string
|
|
15
56
|
*/
|
|
16
|
-
constructor(defaultTtl = 3600) {
|
|
57
|
+
constructor(defaultTtl = 3600, context) {
|
|
17
58
|
this.store = new Map();
|
|
18
59
|
this.defaultTtl = defaultTtl;
|
|
60
|
+
// Validate context values if provided
|
|
61
|
+
if (context) {
|
|
62
|
+
if (context.tenantId !== undefined &&
|
|
63
|
+
(!context.tenantId || context.tenantId.trim() === '')) {
|
|
64
|
+
throw new Error('Context values cannot be empty strings');
|
|
65
|
+
}
|
|
66
|
+
if (context.userId !== undefined &&
|
|
67
|
+
(!context.userId || context.userId.trim() === '')) {
|
|
68
|
+
throw new Error('Context values cannot be empty strings');
|
|
69
|
+
}
|
|
70
|
+
if (context.sessionId !== undefined &&
|
|
71
|
+
(!context.sessionId || context.sessionId.trim() === '')) {
|
|
72
|
+
throw new Error('Context values cannot be empty strings');
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
this.context = context;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Prefixes a cache key with context information for isolation.
|
|
79
|
+
* @param key Base cache key
|
|
80
|
+
* @returns Prefixed cache key with context
|
|
81
|
+
*/
|
|
82
|
+
prefixKey(key) {
|
|
83
|
+
return applyContextPrefix(key, this.context);
|
|
19
84
|
}
|
|
20
85
|
/**
|
|
21
86
|
* Sets a value in the cache
|
|
@@ -26,7 +91,8 @@ class Cache {
|
|
|
26
91
|
set(key, value, ttl) {
|
|
27
92
|
const effectiveTtl = ttl ?? this.defaultTtl;
|
|
28
93
|
const expiresAt = Date.now() + effectiveTtl * 1000;
|
|
29
|
-
this.
|
|
94
|
+
const prefixedKey = this.prefixKey(key);
|
|
95
|
+
this.store.set(prefixedKey, { value, expiresAt });
|
|
30
96
|
}
|
|
31
97
|
/**
|
|
32
98
|
* Gets a value from the cache
|
|
@@ -34,13 +100,14 @@ class Cache {
|
|
|
34
100
|
* @returns Cached value or undefined if not found or expired
|
|
35
101
|
*/
|
|
36
102
|
get(key) {
|
|
37
|
-
const
|
|
103
|
+
const prefixedKey = this.prefixKey(key);
|
|
104
|
+
const entry = this.store.get(prefixedKey);
|
|
38
105
|
if (!entry) {
|
|
39
106
|
return undefined;
|
|
40
107
|
}
|
|
41
108
|
// Check if entry has expired
|
|
42
109
|
if (Date.now() > entry.expiresAt) {
|
|
43
|
-
this.store.delete(
|
|
110
|
+
this.store.delete(prefixedKey);
|
|
44
111
|
return undefined;
|
|
45
112
|
}
|
|
46
113
|
return entry.value;
|
|
@@ -59,7 +126,8 @@ class Cache {
|
|
|
59
126
|
* @returns true if key existed and was deleted
|
|
60
127
|
*/
|
|
61
128
|
delete(key) {
|
|
62
|
-
|
|
129
|
+
const prefixedKey = this.prefixKey(key);
|
|
130
|
+
return this.store.delete(prefixedKey);
|
|
63
131
|
}
|
|
64
132
|
/**
|
|
65
133
|
* Clears all entries from the cache
|
|
@@ -94,9 +162,21 @@ exports.Cache = Cache;
|
|
|
94
162
|
// Singleton instance for application-wide use
|
|
95
163
|
let cacheInstance = null;
|
|
96
164
|
/**
|
|
97
|
-
* Gets the global cache instance
|
|
165
|
+
* Gets the global cache instance.
|
|
166
|
+
*
|
|
167
|
+
* NOTE: The global cache instance does not support context-based isolation.
|
|
168
|
+
* For multi-tenant scenarios requiring cache isolation, create separate Cache
|
|
169
|
+
* instances with appropriate context parameters instead of using the global singleton.
|
|
170
|
+
*
|
|
171
|
+
* @example
|
|
172
|
+
* // For single-tenant CLI usage (default):
|
|
173
|
+
* const cache = getCache(3600);
|
|
174
|
+
*
|
|
175
|
+
* // For multi-tenant scenarios, use separate instances:
|
|
176
|
+
* const tenantCache = new Cache(3600, { tenantId: 'tenant1' });
|
|
177
|
+
*
|
|
98
178
|
* @param ttl Default TTL for the cache (only used on first call)
|
|
99
|
-
* @returns Global cache instance
|
|
179
|
+
* @returns Global cache instance without context
|
|
100
180
|
*/
|
|
101
181
|
function getCache(ttl) {
|
|
102
182
|
if (!cacheInstance) {
|
|
@@ -113,21 +193,25 @@ function resetCache() {
|
|
|
113
193
|
/**
|
|
114
194
|
* Generates a cache key for discover parameters
|
|
115
195
|
* @param params Discover parameters object
|
|
196
|
+
* @param context Optional context for multi-tenant cache isolation
|
|
116
197
|
* @returns Cache key string
|
|
117
198
|
*/
|
|
118
|
-
function generateDiscoverCacheKey(params) {
|
|
199
|
+
function generateDiscoverCacheKey(params, context) {
|
|
119
200
|
// Sort keys to ensure consistent key generation
|
|
120
201
|
const sortedKeys = Object.keys(params).sort();
|
|
121
202
|
const keyParts = sortedKeys.map(key => `${key}=${params[key]}`);
|
|
122
|
-
|
|
203
|
+
const baseKey = `discover:${keyParts.join('&')}`;
|
|
204
|
+
return applyContextPrefix(baseKey, context);
|
|
123
205
|
}
|
|
124
206
|
/**
|
|
125
207
|
* Generates a cache key for watch providers
|
|
126
208
|
* @param movieId Movie ID
|
|
127
209
|
* @param region Region code
|
|
210
|
+
* @param context Optional context for multi-tenant cache isolation
|
|
128
211
|
* @returns Cache key string
|
|
129
212
|
*/
|
|
130
|
-
function generateProvidersCacheKey(movieId, region) {
|
|
131
|
-
|
|
213
|
+
function generateProvidersCacheKey(movieId, region, context) {
|
|
214
|
+
const baseKey = `providers:${movieId}:${region}`;
|
|
215
|
+
return applyContextPrefix(baseKey, context);
|
|
132
216
|
}
|
|
133
217
|
//# sourceMappingURL=cache.js.map
|
package/dist/cache.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../src/cache.ts"],"names":[],"mappings":";AAAA;;GAEG;;;
|
|
1
|
+
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../src/cache.ts"],"names":[],"mappings":"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"}
|
package/dist/factory.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAGrC;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAE/B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IAGpB,WAAW,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;IACjC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,YAAY,CAAC,EAAE,MAAM,CAAC;IAGtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAG5B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,iBAAiB;IAC5B;;;;;;OAMG;IACH,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,gBAAgB,GAAG,UAAU;
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAGrC;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAE/B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IAGpB,WAAW,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;IACjC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,YAAY,CAAC,EAAE,MAAM,CAAC;IAGtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAG5B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,iBAAiB;IAC5B;;;;;;OAMG;IACH,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,gBAAgB,GAAG,UAAU;IAsDnD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAgCG;IACH,MAAM,CAAC,OAAO,CAAC,KAAK,UAAQ,GAAG,UAAU;CAiC1C"}
|
package/dist/factory.js
CHANGED
|
@@ -49,8 +49,30 @@ class MovieAgentFactory {
|
|
|
49
49
|
const logger = config.debug
|
|
50
50
|
? (message) => console.log(`[MovieAgent] ${message}`)
|
|
51
51
|
: undefined;
|
|
52
|
+
// Determine LLM enablement and get the appropriate API key
|
|
53
|
+
const llmProvider = config.llmProvider;
|
|
54
|
+
let llmApiKey;
|
|
55
|
+
let enableLLM = false;
|
|
56
|
+
let azureConfig;
|
|
57
|
+
if (llmProvider === 'azure' && config.azureOpenAiApiKey) {
|
|
58
|
+
llmApiKey = config.azureOpenAiApiKey;
|
|
59
|
+
azureConfig = {
|
|
60
|
+
endpoint: config.azureOpenAiEndpoint,
|
|
61
|
+
deployment: config.azureOpenAiDeployment,
|
|
62
|
+
};
|
|
63
|
+
enableLLM = true;
|
|
64
|
+
}
|
|
65
|
+
else if (llmProvider === 'gemini' && config.geminiApiKey) {
|
|
66
|
+
llmApiKey = config.geminiApiKey;
|
|
67
|
+
enableLLM = true;
|
|
68
|
+
}
|
|
69
|
+
else if (config.geminiApiKey) {
|
|
70
|
+
// Default to Gemini if API key is provided but no provider specified
|
|
71
|
+
llmApiKey = config.geminiApiKey;
|
|
72
|
+
enableLLM = true;
|
|
73
|
+
}
|
|
52
74
|
// Create and return MovieAgent instance
|
|
53
|
-
return new agent_1.MovieAgent(tmdbClient, logger);
|
|
75
|
+
return new agent_1.MovieAgent(tmdbClient, logger, enableLLM, llmProvider, llmApiKey, azureConfig, config.debug);
|
|
54
76
|
}
|
|
55
77
|
/**
|
|
56
78
|
* Creates a MovieAgent instance from environment variables
|
package/dist/factory.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":";;;;;;AAAA,iBAAiB;AACjB,mCAAqC;AACrC,wDAAsC;AA4BtC;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAa,iBAAiB;IAC5B;;;;;;OAMG;IACH,MAAM,CAAC,MAAM,CAAC,MAAwB;QACpC,kCAAkC;QAClC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CACb,2EAA2E,CAC5E,CAAC;QACJ,CAAC;QAED,qDAAqD;QACrD,MAAM,UAAU,GAAG,IAAI,iBAAa,CAClC,MAAM,CAAC,WAAW,IAAI,8BAA8B,EACpD,MAAM,CAAC,UAAU,EACjB,MAAM,CAAC,UAAU,IAAI,IAAI,CAC1B,CAAC;QAEF,6CAA6C;QAC7C,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK;YACzB,CAAC,CAAC,CAAC,OAAe,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,OAAO,EAAE,CAAC;YAC7D,CAAC,CAAC,SAAS,CAAC;QAEd,wCAAwC;QACxC,OAAO,IAAI,kBAAU,
|
|
1
|
+
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"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"}
|
package/dist/format.d.ts
CHANGED
|
@@ -5,9 +5,21 @@ import { MovieRecommendation, StreamingPlatform, AgentResponse, ResponseMetadata
|
|
|
5
5
|
* @returns Formatted description within word count constraints
|
|
6
6
|
*/
|
|
7
7
|
export declare function buildDescription(overview: string): string;
|
|
8
|
+
/**
|
|
9
|
+
* TMDb image base URL for constructing poster URLs
|
|
10
|
+
* @see https://developer.themoviedb.org/docs/image-basics
|
|
11
|
+
*/
|
|
12
|
+
export declare const TMDB_IMAGE_BASE_URL = "https://image.tmdb.org/t/p/";
|
|
13
|
+
/**
|
|
14
|
+
* Builds a full poster URL from a TMDb poster_path
|
|
15
|
+
* @param posterPath - The poster_path from TMDb API (e.g., "/abc123.jpg")
|
|
16
|
+
* @param size - Image size (default: 'w500')
|
|
17
|
+
* @returns Full URL to the poster image, or null if no poster available
|
|
18
|
+
*/
|
|
19
|
+
export declare function buildPosterUrl(posterPath: string | null | undefined, size?: string): string | null;
|
|
8
20
|
/**
|
|
9
21
|
* Formats a movie with streaming providers into a MovieRecommendation
|
|
10
|
-
* @param movie - TMDb movie object with id, title, release_date, runtime, overview, genres
|
|
22
|
+
* @param movie - TMDb movie object with id, title, release_date, runtime, overview, genres, poster_path
|
|
11
23
|
* @param providers - Streaming provider information
|
|
12
24
|
* @param reason - Why this movie was recommended
|
|
13
25
|
* @returns Formatted MovieRecommendation
|
|
@@ -22,6 +34,7 @@ export declare function toRecommendation(movie: {
|
|
|
22
34
|
id: number;
|
|
23
35
|
name: string;
|
|
24
36
|
}>;
|
|
37
|
+
poster_path?: string | null;
|
|
25
38
|
}, providers: StreamingPlatform[], reason: string): MovieRecommendation;
|
|
26
39
|
/**
|
|
27
40
|
* Formats the complete agent response with recommendations and metadata
|
package/dist/format.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../src/format.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,iBAAiB,EACjB,aAAa,EACb,gBAAgB,EACjB,MAAM,SAAS,CAAC;AAEjB;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAuCzD;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE;IACL,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../src/format.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,iBAAiB,EACjB,aAAa,EACb,gBAAgB,EACjB,MAAM,SAAS,CAAC;AAEjB;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAuCzD;AAED;;;GAGG;AACH,eAAO,MAAM,mBAAmB,gCAAgC,CAAC;AAEjE;;;;;GAKG;AACH,wBAAgB,cAAc,CAC5B,UAAU,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACrC,IAAI,GAAE,MAAe,GACpB,MAAM,GAAG,IAAI,CAKf;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE;IACL,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC5C,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B,EACD,SAAS,EAAE,iBAAiB,EAAE,EAC9B,MAAM,EAAE,MAAM,GACb,mBAAmB,CAgBrB;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAC5B,eAAe,EAAE,mBAAmB,EAAE,EACtC,QAAQ,EAAE,IAAI,CAAC,gBAAgB,EAAE,kBAAkB,GAAG,cAAc,CAAC,GACpE,aAAa,CAkBf"}
|