@ttkit/daily-hot-api 0.1.2 → 0.1.4

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 (93) hide show
  1. package/.env.example +26 -0
  2. package/README.md +26 -0
  3. package/dist/app.module.js +2 -0
  4. package/dist/app.module.js.map +1 -1
  5. package/dist/cli/args.d.ts +3 -1
  6. package/dist/cli/args.js +25 -2
  7. package/dist/cli/args.js.map +1 -1
  8. package/dist/cli/commands/logs.js +5 -0
  9. package/dist/cli/commands/logs.js.map +1 -1
  10. package/dist/cli/commands/restart.js +14 -3
  11. package/dist/cli/commands/restart.js.map +1 -1
  12. package/dist/cli/commands/start.js +17 -9
  13. package/dist/cli/commands/start.js.map +1 -1
  14. package/dist/cli/commands/status.js +5 -4
  15. package/dist/cli/commands/status.js.map +1 -1
  16. package/dist/cli/commands/stop.js +1 -1
  17. package/dist/cli/commands/stop.js.map +1 -1
  18. package/dist/cli/env.d.ts +1 -0
  19. package/dist/cli/env.js +12 -0
  20. package/dist/cli/env.js.map +1 -1
  21. package/dist/cli/health.d.ts +1 -1
  22. package/dist/cli/health.js +32 -17
  23. package/dist/cli/health.js.map +1 -1
  24. package/dist/cli/help.js +14 -2
  25. package/dist/cli/help.js.map +1 -1
  26. package/dist/cli/log-file.d.ts +4 -0
  27. package/dist/cli/log-file.js +54 -5
  28. package/dist/cli/log-file.js.map +1 -1
  29. package/dist/cli/paths.d.ts +1 -0
  30. package/dist/cli/paths.js +2 -1
  31. package/dist/cli/paths.js.map +1 -1
  32. package/dist/cli/run-state.d.ts +6 -1
  33. package/dist/cli/run-state.js +18 -6
  34. package/dist/cli/run-state.js.map +1 -1
  35. package/dist/config/validation.schema.d.ts +54 -0
  36. package/dist/config/validation.schema.js +75 -0
  37. package/dist/config/validation.schema.js.map +1 -1
  38. package/dist/daily-brief/daily-brief.module.js +1 -1
  39. package/dist/daily-brief/daily-brief.module.js.map +1 -1
  40. package/dist/daily-brief/daily-brief.service.js +1 -1
  41. package/dist/daily-brief/daily-brief.service.js.map +1 -1
  42. package/dist/database/database.module.js +15 -2
  43. package/dist/database/database.module.js.map +1 -1
  44. package/dist/database/repositories/daily-brief.repository.js +11 -1
  45. package/dist/database/repositories/daily-brief.repository.js.map +1 -1
  46. package/dist/database/repositories/hot-item.repository.d.ts +1 -1
  47. package/dist/database/repositories/hot-item.repository.js +7 -4
  48. package/dist/database/repositories/hot-item.repository.js.map +1 -1
  49. package/dist/database/repositories/news-brief.repository.d.ts +81 -0
  50. package/dist/database/repositories/news-brief.repository.js +208 -0
  51. package/dist/database/repositories/news-brief.repository.js.map +1 -0
  52. package/dist/database/schemas/news-brief.schema.d.ts +48 -0
  53. package/dist/database/schemas/news-brief.schema.js +130 -0
  54. package/dist/database/schemas/news-brief.schema.js.map +1 -0
  55. package/dist/main.js +2 -1
  56. package/dist/main.js.map +1 -1
  57. package/dist/news-brief/categories/news-category.registry.d.ts +5 -0
  58. package/dist/news-brief/categories/news-category.registry.js +106 -0
  59. package/dist/news-brief/categories/news-category.registry.js.map +1 -0
  60. package/dist/news-brief/clients/news-brief-ai.client.d.ts +45 -0
  61. package/dist/news-brief/clients/news-brief-ai.client.js +314 -0
  62. package/dist/news-brief/clients/news-brief-ai.client.js.map +1 -0
  63. package/dist/news-brief/clients/news-brief-search.service.d.ts +12 -0
  64. package/dist/news-brief/clients/news-brief-search.service.js +57 -0
  65. package/dist/news-brief/clients/news-brief-search.service.js.map +1 -0
  66. package/dist/news-brief/dto/generate-news-brief.dto.d.ts +7 -0
  67. package/dist/news-brief/dto/generate-news-brief.dto.js +45 -0
  68. package/dist/news-brief/dto/generate-news-brief.dto.js.map +1 -0
  69. package/dist/news-brief/dto/list-news-briefs-query.dto.d.ts +7 -0
  70. package/dist/news-brief/dto/list-news-briefs-query.dto.js +59 -0
  71. package/dist/news-brief/dto/list-news-briefs-query.dto.js.map +1 -0
  72. package/dist/news-brief/dto/news-brief-date-param.dto.d.ts +3 -0
  73. package/dist/news-brief/dto/news-brief-date-param.dto.js +22 -0
  74. package/dist/news-brief/dto/news-brief-date-param.dto.js.map +1 -0
  75. package/dist/news-brief/interfaces/news-brief.interface.d.ts +202 -0
  76. package/dist/news-brief/interfaces/news-brief.interface.js +3 -0
  77. package/dist/news-brief/interfaces/news-brief.interface.js.map +1 -0
  78. package/dist/news-brief/news-brief.config.d.ts +33 -0
  79. package/dist/news-brief/news-brief.config.js +118 -0
  80. package/dist/news-brief/news-brief.config.js.map +1 -0
  81. package/dist/news-brief/news-brief.controller.d.ts +56 -0
  82. package/dist/news-brief/news-brief.controller.js +185 -0
  83. package/dist/news-brief/news-brief.controller.js.map +1 -0
  84. package/dist/news-brief/news-brief.module.d.ts +2 -0
  85. package/dist/news-brief/news-brief.module.js +47 -0
  86. package/dist/news-brief/news-brief.module.js.map +1 -0
  87. package/dist/news-brief/news-brief.scheduler.d.ts +34 -0
  88. package/dist/news-brief/news-brief.scheduler.js +143 -0
  89. package/dist/news-brief/news-brief.scheduler.js.map +1 -0
  90. package/dist/news-brief/news-brief.service.d.ts +60 -0
  91. package/dist/news-brief/news-brief.service.js +676 -0
  92. package/dist/news-brief/news-brief.service.js.map +1 -0
  93. package/package.json +3 -1
@@ -0,0 +1,202 @@
1
+ export type NewsBriefStatus = 'generating' | 'success' | 'failed';
2
+ export type NewsBriefGenerationStatus = 'success' | 'failed' | 'skipped';
3
+ export type NewsBriefSkipReason = 'already_generated' | 'generation_in_progress';
4
+ export interface NewsBriefSource {
5
+ code: string;
6
+ name: string;
7
+ url: string;
8
+ }
9
+ export interface NewsBriefItem {
10
+ id: string;
11
+ title: string;
12
+ summary: string;
13
+ content: string;
14
+ source: NewsBriefSource;
15
+ publishedAt?: string;
16
+ tags?: string[];
17
+ importance?: number;
18
+ extensions?: Record<string, unknown>;
19
+ }
20
+ export interface NewsBriefAiItem {
21
+ sourceRef: string;
22
+ title: string;
23
+ summary: string;
24
+ content: string;
25
+ tags?: string[];
26
+ importance?: number;
27
+ }
28
+ export interface NewsBriefAiPayload {
29
+ title: string;
30
+ summary: string;
31
+ highlights: string[];
32
+ items: NewsBriefAiItem[];
33
+ }
34
+ export interface NewsBriefAnalysis {
35
+ title: string;
36
+ summary: string;
37
+ highlights: string[];
38
+ items: NewsBriefItem[];
39
+ }
40
+ export interface NewsBriefInputItem {
41
+ ref: string;
42
+ source: string;
43
+ sourceName: string;
44
+ title: string;
45
+ desc?: string;
46
+ hot?: number | string;
47
+ url: string;
48
+ timestamp?: number;
49
+ }
50
+ export interface NewsBriefInputWindow {
51
+ start: Date;
52
+ end: Date;
53
+ lookbackHours: number;
54
+ }
55
+ export interface NewsBriefResponse {
56
+ briefDate: string;
57
+ period: string;
58
+ category: string;
59
+ categoryName: string;
60
+ status: NewsBriefStatus;
61
+ title?: string;
62
+ summary?: string;
63
+ highlights: string[];
64
+ items: NewsBriefItem[];
65
+ itemCount: number;
66
+ sources: string[];
67
+ inputWindow: {
68
+ start: string;
69
+ end: string;
70
+ lookbackHours: number;
71
+ };
72
+ model?: string;
73
+ searchProvidersUsed: string[];
74
+ error?: string;
75
+ createdAt?: string;
76
+ updatedAt?: string;
77
+ }
78
+ export interface GenerateNewsBriefOptions {
79
+ category?: string;
80
+ date?: string;
81
+ period?: string;
82
+ force?: boolean;
83
+ sources?: string[];
84
+ }
85
+ export interface NewsBriefSuccessResult {
86
+ category: string;
87
+ categoryName: string;
88
+ status: 'success';
89
+ brief: NewsBriefResponse;
90
+ }
91
+ export interface NewsBriefSkippedResult {
92
+ category: string;
93
+ categoryName: string;
94
+ status: 'skipped';
95
+ reason: NewsBriefSkipReason;
96
+ brief?: NewsBriefResponse;
97
+ }
98
+ export interface NewsBriefFailedResult {
99
+ category: string;
100
+ categoryName: string;
101
+ status: 'failed';
102
+ error: string;
103
+ previousBriefRetained?: boolean;
104
+ brief?: NewsBriefResponse;
105
+ }
106
+ export type NewsBriefGenerationResult = NewsBriefSuccessResult | NewsBriefSkippedResult | NewsBriefFailedResult;
107
+ export interface NewsBriefGenerateResponse {
108
+ briefDate: string;
109
+ period: string;
110
+ results: NewsBriefGenerationResult[];
111
+ }
112
+ export interface NewsCategoryProfile {
113
+ code: string;
114
+ name: string;
115
+ description: string;
116
+ focus: string;
117
+ sources: string[];
118
+ maxItems: number;
119
+ search: boolean;
120
+ }
121
+ export interface NewsCategorySummary {
122
+ code: string;
123
+ name: string;
124
+ description: string;
125
+ sources: string[];
126
+ maxItems: number;
127
+ }
128
+ export interface NewsBriefPublicConfig {
129
+ cronExpression: string;
130
+ timezone: string;
131
+ categories: NewsCategorySummary[];
132
+ lookbackHours: number;
133
+ topItemsPerSource: number;
134
+ maxCandidates: number;
135
+ maxItemsPerCategory: number;
136
+ categoryConcurrency: number;
137
+ sourceConcurrency: number;
138
+ generatingTimeoutMinutes: number;
139
+ manualGenerateEnabled: boolean;
140
+ model: string;
141
+ searchEnabled: boolean;
142
+ searchProviders: string[];
143
+ searchMaxQueries: number;
144
+ searchQueryMaxChars: number;
145
+ }
146
+ export interface NewsBriefSearchEvidence {
147
+ ref: string;
148
+ topicTitle: string;
149
+ query: string;
150
+ provider: import('../../daily-brief/interfaces/search-provider.interface').SearchProviderName | null;
151
+ results: import('../../daily-brief/interfaces/daily-brief.interface').BriefSearchResult[];
152
+ }
153
+ export interface NewsBriefListItem {
154
+ briefDate: string;
155
+ period: string;
156
+ category: string;
157
+ categoryName: string;
158
+ status: NewsBriefStatus;
159
+ title?: string;
160
+ summary?: string;
161
+ itemCount: number;
162
+ updatedAt?: Date;
163
+ }
164
+ export interface NewsBriefListResponse {
165
+ data: NewsBriefListItem[];
166
+ total: number;
167
+ page: number;
168
+ limit: number;
169
+ totalPages: number;
170
+ }
171
+ export interface ListNewsBriefsOptions {
172
+ page?: number;
173
+ limit?: number;
174
+ category?: string;
175
+ status?: NewsBriefStatus;
176
+ period?: string;
177
+ }
178
+ export type NewsBriefDigestStatus = NewsBriefStatus | 'missing';
179
+ export interface NewsBriefDigestCategory {
180
+ category: string;
181
+ categoryName: string;
182
+ status: NewsBriefDigestStatus;
183
+ brief: NewsBriefResponse | null;
184
+ }
185
+ export interface NewsBriefDigestResponse {
186
+ briefDate: string;
187
+ categories: NewsBriefDigestCategory[];
188
+ }
189
+ export interface NewsBriefDeleteResponse {
190
+ mode: 'date';
191
+ briefDate: string;
192
+ category: string;
193
+ period: string | null;
194
+ deletedCount: number;
195
+ }
196
+ export interface NewsBriefDeleteHistoryResponse {
197
+ mode: 'olderThan' | 'beforeDate';
198
+ olderThan: string | null;
199
+ beforeDate: string;
200
+ category: string | null;
201
+ deletedCount: number;
202
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=news-brief.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"news-brief.interface.js","sourceRoot":"","sources":["../../../src/news-brief/interfaces/news-brief.interface.ts"],"names":[],"mappings":""}
@@ -0,0 +1,33 @@
1
+ import { ConfigService } from '@nestjs/config';
2
+ import { NewsCategoryProfile, NewsCategorySummary } from './interfaces/news-brief.interface';
3
+ import { SearchProviderName } from '../daily-brief/interfaces/search-provider.interface';
4
+ export declare class NewsBriefConfigService {
5
+ private readonly configService;
6
+ constructor(configService: ConfigService);
7
+ get enabled(): boolean;
8
+ get cronExpression(): string;
9
+ get timezone(): string;
10
+ get categoryCodes(): string[];
11
+ get categories(): NewsCategoryProfile[];
12
+ get lookbackHours(): number;
13
+ get topItemsPerSource(): number;
14
+ get maxCandidates(): number;
15
+ get maxItemsPerCategory(): number;
16
+ get sourceConcurrency(): number;
17
+ get categoryConcurrency(): number;
18
+ get generatingTimeoutMinutes(): number;
19
+ get manualGenerateEnabled(): boolean;
20
+ get searchEnabled(): boolean;
21
+ get searchMaxQueries(): number;
22
+ get searchConcurrency(): number;
23
+ get searchQueryMaxChars(): number;
24
+ get searchProviders(): SearchProviderName[];
25
+ get aiModel(): string;
26
+ get aiTimeoutMs(): number;
27
+ get aiMaxRetries(): number;
28
+ get openaiApiKey(): string;
29
+ get openaiBaseUrl(): string | undefined;
30
+ get knownCategories(): NewsCategoryProfile[];
31
+ toCategorySummary(profile: NewsCategoryProfile): NewsCategorySummary;
32
+ get categorySummaries(): NewsCategorySummary[];
33
+ }
@@ -0,0 +1,118 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.NewsBriefConfigService = void 0;
13
+ const common_1 = require("@nestjs/common");
14
+ const config_1 = require("@nestjs/config");
15
+ const news_category_registry_1 = require("./categories/news-category.registry");
16
+ let NewsBriefConfigService = class NewsBriefConfigService {
17
+ constructor(configService) {
18
+ this.configService = configService;
19
+ }
20
+ get enabled() {
21
+ return this.configService.getOrThrow('NEWS_BRIEF_ENABLED');
22
+ }
23
+ get cronExpression() {
24
+ return this.configService.getOrThrow('NEWS_BRIEF_CRON_EXPRESSION');
25
+ }
26
+ get timezone() {
27
+ return this.configService.getOrThrow('NEWS_BRIEF_TIMEZONE');
28
+ }
29
+ get categoryCodes() {
30
+ return this.configService
31
+ .getOrThrow('NEWS_BRIEF_CATEGORIES')
32
+ .split(',')
33
+ .map((item) => item.trim())
34
+ .filter(Boolean);
35
+ }
36
+ get categories() {
37
+ return (0, news_category_registry_1.resolveNewsCategories)(this.categoryCodes);
38
+ }
39
+ get lookbackHours() {
40
+ return this.configService.getOrThrow('NEWS_BRIEF_LOOKBACK_HOURS');
41
+ }
42
+ get topItemsPerSource() {
43
+ return this.configService.getOrThrow('NEWS_BRIEF_TOP_ITEMS_PER_SOURCE');
44
+ }
45
+ get maxCandidates() {
46
+ return this.configService.getOrThrow('NEWS_BRIEF_MAX_CANDIDATES');
47
+ }
48
+ get maxItemsPerCategory() {
49
+ return this.configService.getOrThrow('NEWS_BRIEF_MAX_ITEMS_PER_CATEGORY');
50
+ }
51
+ get sourceConcurrency() {
52
+ return this.configService.getOrThrow('NEWS_BRIEF_SOURCE_CONCURRENCY');
53
+ }
54
+ get categoryConcurrency() {
55
+ return this.configService.getOrThrow('NEWS_BRIEF_CATEGORY_CONCURRENCY');
56
+ }
57
+ get generatingTimeoutMinutes() {
58
+ return this.configService.getOrThrow('NEWS_BRIEF_GENERATING_TIMEOUT_MINUTES');
59
+ }
60
+ get manualGenerateEnabled() {
61
+ return this.configService.getOrThrow('NEWS_BRIEF_MANUAL_GENERATE_ENABLED');
62
+ }
63
+ get searchEnabled() {
64
+ return this.configService.getOrThrow('NEWS_BRIEF_SEARCH_ENABLED');
65
+ }
66
+ get searchMaxQueries() {
67
+ return this.configService.getOrThrow('NEWS_BRIEF_SEARCH_MAX_QUERIES');
68
+ }
69
+ get searchConcurrency() {
70
+ return this.configService.getOrThrow('NEWS_BRIEF_SEARCH_CONCURRENCY');
71
+ }
72
+ get searchQueryMaxChars() {
73
+ return this.configService.getOrThrow('NEWS_BRIEF_SEARCH_QUERY_MAX_CHARS');
74
+ }
75
+ get searchProviders() {
76
+ return this.configService
77
+ .getOrThrow('NEWS_BRIEF_SEARCH_PROVIDERS')
78
+ .split(',')
79
+ .map((name) => name.trim())
80
+ .filter(Boolean);
81
+ }
82
+ get aiModel() {
83
+ return this.configService.getOrThrow('AI_MODEL');
84
+ }
85
+ get aiTimeoutMs() {
86
+ return this.configService.getOrThrow('AI_TIMEOUT_MS');
87
+ }
88
+ get aiMaxRetries() {
89
+ return this.configService.getOrThrow('AI_MAX_RETRIES');
90
+ }
91
+ get openaiApiKey() {
92
+ return this.configService.getOrThrow('OPENAI_API_KEY');
93
+ }
94
+ get openaiBaseUrl() {
95
+ return (this.configService.getOrThrow('OPENAI_API_BASE_URL') || undefined);
96
+ }
97
+ get knownCategories() {
98
+ return (0, news_category_registry_1.listNewsCategoryProfiles)();
99
+ }
100
+ toCategorySummary(profile) {
101
+ return {
102
+ code: profile.code,
103
+ name: profile.name,
104
+ description: profile.description,
105
+ sources: profile.sources,
106
+ maxItems: profile.maxItems,
107
+ };
108
+ }
109
+ get categorySummaries() {
110
+ return this.categories.map((profile) => this.toCategorySummary(profile));
111
+ }
112
+ };
113
+ exports.NewsBriefConfigService = NewsBriefConfigService;
114
+ exports.NewsBriefConfigService = NewsBriefConfigService = __decorate([
115
+ (0, common_1.Injectable)(),
116
+ __metadata("design:paramtypes", [config_1.ConfigService])
117
+ ], NewsBriefConfigService);
118
+ //# sourceMappingURL=news-brief.config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"news-brief.config.js","sourceRoot":"","sources":["../../src/news-brief/news-brief.config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ import { NewsBriefConfigService } from './news-brief.config';
2
+ import { NewsBriefService } from './news-brief.service';
3
+ import { NewsBriefScheduler } from './news-brief.scheduler';
4
+ import { GenerateNewsBriefDto } from './dto/generate-news-brief.dto';
5
+ import { NewsBriefDateParamDto } from './dto/news-brief-date-param.dto';
6
+ import { ListNewsBriefsQueryDto } from './dto/list-news-briefs-query.dto';
7
+ export declare class NewsBriefController {
8
+ private readonly newsBriefService;
9
+ private readonly newsBriefScheduler;
10
+ private readonly config;
11
+ constructor(newsBriefService: NewsBriefService, newsBriefScheduler: NewsBriefScheduler, config: NewsBriefConfigService);
12
+ generate(body: GenerateNewsBriefDto): Promise<import("./interfaces/news-brief.interface").NewsBriefGenerateResponse>;
13
+ getConfig(): {
14
+ cronExpression: string;
15
+ timezone: string;
16
+ categories: import("./interfaces/news-brief.interface").NewsCategorySummary[];
17
+ lookbackHours: number;
18
+ topItemsPerSource: number;
19
+ maxCandidates: number;
20
+ maxItemsPerCategory: number;
21
+ categoryConcurrency: number;
22
+ sourceConcurrency: number;
23
+ generatingTimeoutMinutes: number;
24
+ manualGenerateEnabled: boolean;
25
+ model: string;
26
+ searchEnabled: boolean;
27
+ searchProviders: string[];
28
+ searchMaxQueries: number;
29
+ searchQueryMaxChars: number;
30
+ enabled: boolean;
31
+ };
32
+ getCategories(): import("./interfaces/news-brief.interface").NewsCategorySummary[];
33
+ getDigest(categories?: string | string[], date?: string, period?: string): Promise<import("./interfaces/news-brief.interface").NewsBriefDigestResponse>;
34
+ getSchedulerStatus(): {
35
+ isRunning: boolean;
36
+ enabled: boolean;
37
+ cronExpression: string;
38
+ timezone: string;
39
+ categories: string[];
40
+ cronJobExists: boolean;
41
+ };
42
+ startScheduler(): {
43
+ message: string;
44
+ };
45
+ stopScheduler(): {
46
+ message: string;
47
+ };
48
+ reconfigureScheduler(): {
49
+ message: string;
50
+ };
51
+ findLatest(category?: string, period?: string, includeDebug?: string): Promise<import("./interfaces/news-brief.interface").NewsBriefResponse | null>;
52
+ list(query: ListNewsBriefsQueryDto): Promise<import("./interfaces/news-brief.interface").NewsBriefListResponse>;
53
+ deleteHistory(olderThan?: string, beforeDate?: string, category?: string): Promise<import("./interfaces/news-brief.interface").NewsBriefDeleteHistoryResponse>;
54
+ deleteByDate(params: NewsBriefDateParamDto, category?: string, period?: string): Promise<import("./interfaces/news-brief.interface").NewsBriefDeleteResponse>;
55
+ findByDate(params: NewsBriefDateParamDto, category?: string, period?: string, includeDebug?: string): Promise<import("./interfaces/news-brief.interface").NewsBriefResponse | null>;
56
+ }
@@ -0,0 +1,185 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.NewsBriefController = void 0;
16
+ const common_1 = require("@nestjs/common");
17
+ const news_brief_config_1 = require("./news-brief.config");
18
+ const news_brief_service_1 = require("./news-brief.service");
19
+ const news_brief_scheduler_1 = require("./news-brief.scheduler");
20
+ const generate_news_brief_dto_1 = require("./dto/generate-news-brief.dto");
21
+ const news_brief_date_param_dto_1 = require("./dto/news-brief-date-param.dto");
22
+ const list_news_briefs_query_dto_1 = require("./dto/list-news-briefs-query.dto");
23
+ let NewsBriefController = class NewsBriefController {
24
+ constructor(newsBriefService, newsBriefScheduler, config) {
25
+ this.newsBriefService = newsBriefService;
26
+ this.newsBriefScheduler = newsBriefScheduler;
27
+ this.config = config;
28
+ }
29
+ generate(body) {
30
+ if (!this.config.manualGenerateEnabled) {
31
+ throw new common_1.ForbiddenException('Manual news brief generation is disabled. Set NEWS_BRIEF_MANUAL_GENERATE_ENABLED=true for ops use; frontend must not call this endpoint.');
32
+ }
33
+ return this.newsBriefService.generate(body);
34
+ }
35
+ getConfig() {
36
+ return {
37
+ enabled: this.newsBriefScheduler.isEnabled(),
38
+ ...this.newsBriefService.getConfig(),
39
+ };
40
+ }
41
+ getCategories() {
42
+ return this.newsBriefService.getCategories();
43
+ }
44
+ getDigest(categories, date, period) {
45
+ return this.newsBriefService.findDigest(categories, date, period);
46
+ }
47
+ getSchedulerStatus() {
48
+ return this.newsBriefScheduler.getStatus();
49
+ }
50
+ startScheduler() {
51
+ this.newsBriefScheduler.start();
52
+ return { message: 'News brief scheduler started' };
53
+ }
54
+ stopScheduler() {
55
+ this.newsBriefScheduler.stop();
56
+ return { message: 'News brief scheduler stopped' };
57
+ }
58
+ reconfigureScheduler() {
59
+ this.newsBriefScheduler.reconfigure();
60
+ return { message: 'News brief scheduler reconfigured' };
61
+ }
62
+ findLatest(category, period, includeDebug) {
63
+ return this.newsBriefService.findLatest(category, period, includeDebug === 'true');
64
+ }
65
+ list(query) {
66
+ return this.newsBriefService.list(query);
67
+ }
68
+ deleteHistory(olderThan, beforeDate, category) {
69
+ return this.newsBriefService.deleteHistory({
70
+ olderThan,
71
+ beforeDate,
72
+ category,
73
+ });
74
+ }
75
+ deleteByDate(params, category, period) {
76
+ return this.newsBriefService.deleteByDate(params.date, category, period);
77
+ }
78
+ findByDate(params, category, period, includeDebug) {
79
+ return this.newsBriefService.findByDate(params.date, category, period, includeDebug === 'true');
80
+ }
81
+ };
82
+ exports.NewsBriefController = NewsBriefController;
83
+ __decorate([
84
+ (0, common_1.Post)('generate'),
85
+ __param(0, (0, common_1.Body)()),
86
+ __metadata("design:type", Function),
87
+ __metadata("design:paramtypes", [generate_news_brief_dto_1.GenerateNewsBriefDto]),
88
+ __metadata("design:returntype", void 0)
89
+ ], NewsBriefController.prototype, "generate", null);
90
+ __decorate([
91
+ (0, common_1.Get)('config'),
92
+ __metadata("design:type", Function),
93
+ __metadata("design:paramtypes", []),
94
+ __metadata("design:returntype", void 0)
95
+ ], NewsBriefController.prototype, "getConfig", null);
96
+ __decorate([
97
+ (0, common_1.Get)('categories'),
98
+ __metadata("design:type", Function),
99
+ __metadata("design:paramtypes", []),
100
+ __metadata("design:returntype", void 0)
101
+ ], NewsBriefController.prototype, "getCategories", null);
102
+ __decorate([
103
+ (0, common_1.Get)('digest'),
104
+ __param(0, (0, common_1.Query)('categories')),
105
+ __param(1, (0, common_1.Query)('date')),
106
+ __param(2, (0, common_1.Query)('period')),
107
+ __metadata("design:type", Function),
108
+ __metadata("design:paramtypes", [Object, String, String]),
109
+ __metadata("design:returntype", void 0)
110
+ ], NewsBriefController.prototype, "getDigest", null);
111
+ __decorate([
112
+ (0, common_1.Get)('scheduler/status'),
113
+ __metadata("design:type", Function),
114
+ __metadata("design:paramtypes", []),
115
+ __metadata("design:returntype", void 0)
116
+ ], NewsBriefController.prototype, "getSchedulerStatus", null);
117
+ __decorate([
118
+ (0, common_1.Post)('scheduler/start'),
119
+ __metadata("design:type", Function),
120
+ __metadata("design:paramtypes", []),
121
+ __metadata("design:returntype", void 0)
122
+ ], NewsBriefController.prototype, "startScheduler", null);
123
+ __decorate([
124
+ (0, common_1.Post)('scheduler/stop'),
125
+ __metadata("design:type", Function),
126
+ __metadata("design:paramtypes", []),
127
+ __metadata("design:returntype", void 0)
128
+ ], NewsBriefController.prototype, "stopScheduler", null);
129
+ __decorate([
130
+ (0, common_1.Post)('scheduler/reconfigure'),
131
+ __metadata("design:type", Function),
132
+ __metadata("design:paramtypes", []),
133
+ __metadata("design:returntype", void 0)
134
+ ], NewsBriefController.prototype, "reconfigureScheduler", null);
135
+ __decorate([
136
+ (0, common_1.Get)('latest'),
137
+ __param(0, (0, common_1.Query)('category')),
138
+ __param(1, (0, common_1.Query)('period')),
139
+ __param(2, (0, common_1.Query)('includeDebug')),
140
+ __metadata("design:type", Function),
141
+ __metadata("design:paramtypes", [String, String, String]),
142
+ __metadata("design:returntype", void 0)
143
+ ], NewsBriefController.prototype, "findLatest", null);
144
+ __decorate([
145
+ (0, common_1.Get)(),
146
+ __param(0, (0, common_1.Query)()),
147
+ __metadata("design:type", Function),
148
+ __metadata("design:paramtypes", [list_news_briefs_query_dto_1.ListNewsBriefsQueryDto]),
149
+ __metadata("design:returntype", void 0)
150
+ ], NewsBriefController.prototype, "list", null);
151
+ __decorate([
152
+ (0, common_1.Delete)('history'),
153
+ __param(0, (0, common_1.Query)('olderThan')),
154
+ __param(1, (0, common_1.Query)('beforeDate')),
155
+ __param(2, (0, common_1.Query)('category')),
156
+ __metadata("design:type", Function),
157
+ __metadata("design:paramtypes", [String, String, String]),
158
+ __metadata("design:returntype", void 0)
159
+ ], NewsBriefController.prototype, "deleteHistory", null);
160
+ __decorate([
161
+ (0, common_1.Delete)(':date'),
162
+ __param(0, (0, common_1.Param)()),
163
+ __param(1, (0, common_1.Query)('category')),
164
+ __param(2, (0, common_1.Query)('period')),
165
+ __metadata("design:type", Function),
166
+ __metadata("design:paramtypes", [news_brief_date_param_dto_1.NewsBriefDateParamDto, String, String]),
167
+ __metadata("design:returntype", void 0)
168
+ ], NewsBriefController.prototype, "deleteByDate", null);
169
+ __decorate([
170
+ (0, common_1.Get)(':date'),
171
+ __param(0, (0, common_1.Param)()),
172
+ __param(1, (0, common_1.Query)('category')),
173
+ __param(2, (0, common_1.Query)('period')),
174
+ __param(3, (0, common_1.Query)('includeDebug')),
175
+ __metadata("design:type", Function),
176
+ __metadata("design:paramtypes", [news_brief_date_param_dto_1.NewsBriefDateParamDto, String, String, String]),
177
+ __metadata("design:returntype", void 0)
178
+ ], NewsBriefController.prototype, "findByDate", null);
179
+ exports.NewsBriefController = NewsBriefController = __decorate([
180
+ (0, common_1.Controller)('api/news-briefs'),
181
+ __metadata("design:paramtypes", [news_brief_service_1.NewsBriefService,
182
+ news_brief_scheduler_1.NewsBriefScheduler,
183
+ news_brief_config_1.NewsBriefConfigService])
184
+ ], NewsBriefController);
185
+ //# sourceMappingURL=news-brief.controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"news-brief.controller.js","sourceRoot":"","sources":["../../src/news-brief/news-brief.controller.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare class NewsBriefModule {
2
+ }
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.NewsBriefModule = void 0;
10
+ const common_1 = require("@nestjs/common");
11
+ const schedule_1 = require("@nestjs/schedule");
12
+ const cache_module_1 = require("../cache/cache.module");
13
+ const database_module_1 = require("../database/database.module");
14
+ const daily_brief_module_1 = require("../daily-brief/daily-brief.module");
15
+ const hot_lists_module_1 = require("../host-lists/hot-lists.module");
16
+ const scheduler_module_1 = require("../scheduler/scheduler.module");
17
+ const news_brief_ai_client_1 = require("./clients/news-brief-ai.client");
18
+ const news_brief_search_service_1 = require("./clients/news-brief-search.service");
19
+ const news_brief_config_1 = require("./news-brief.config");
20
+ const news_brief_controller_1 = require("./news-brief.controller");
21
+ const news_brief_scheduler_1 = require("./news-brief.scheduler");
22
+ const news_brief_service_1 = require("./news-brief.service");
23
+ let NewsBriefModule = class NewsBriefModule {
24
+ };
25
+ exports.NewsBriefModule = NewsBriefModule;
26
+ exports.NewsBriefModule = NewsBriefModule = __decorate([
27
+ (0, common_1.Module)({
28
+ imports: [
29
+ schedule_1.ScheduleModule,
30
+ cache_module_1.CacheModule,
31
+ database_module_1.DatabaseModule,
32
+ hot_lists_module_1.HotListsModule,
33
+ scheduler_module_1.SchedulerModule,
34
+ daily_brief_module_1.DailyBriefModule,
35
+ ],
36
+ controllers: [news_brief_controller_1.NewsBriefController],
37
+ providers: [
38
+ news_brief_config_1.NewsBriefConfigService,
39
+ news_brief_service_1.NewsBriefService,
40
+ news_brief_scheduler_1.NewsBriefScheduler,
41
+ news_brief_ai_client_1.NewsBriefAiClient,
42
+ news_brief_search_service_1.NewsBriefSearchService,
43
+ ],
44
+ exports: [news_brief_service_1.NewsBriefService],
45
+ })
46
+ ], NewsBriefModule);
47
+ //# sourceMappingURL=news-brief.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"news-brief.module.js","sourceRoot":"","sources":["../../src/news-brief/news-brief.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,+CAAkD;AAClD,wDAAoD;AACpD,iEAA6D;AAC7D,0EAAqE;AACrE,qEAAgE;AAChE,oEAAgE;AAChE,yEAAmE;AACnE,mFAA6E;AAC7E,2DAA6D;AAC7D,mEAA8D;AAC9D,iEAA4D;AAC5D,6DAAwD;AA2BjD,IAAM,eAAe,GAArB,MAAM,eAAe;CAAG,CAAA;AAAlB,0CAAe;0BAAf,eAAe;IArB3B,IAAA,eAAM,EAAC;QAEN,OAAO,EAAE;YACP,yBAAc;YACd,0BAAW;YACX,gCAAc;YACd,iCAAc;YACd,kCAAe;YAEf,qCAAgB;SACjB;QACD,WAAW,EAAE,CAAC,2CAAmB,CAAC;QAClC,SAAS,EAAE;YACT,0CAAsB;YACtB,qCAAgB;YAChB,yCAAkB;YAClB,wCAAiB;YACjB,kDAAsB;SACvB;QACD,OAAO,EAAE,CAAC,qCAAgB,CAAC;KAC5B,CAAC;GACW,eAAe,CAAG"}