@ttkit/daily-hot-api 0.1.3 → 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.
- package/.env.example +24 -0
- package/README.md +1 -0
- package/dist/app.module.js +2 -0
- package/dist/app.module.js.map +1 -1
- package/dist/config/validation.schema.d.ts +51 -0
- package/dist/config/validation.schema.js +69 -0
- package/dist/config/validation.schema.js.map +1 -1
- package/dist/daily-brief/daily-brief.module.js +1 -1
- package/dist/daily-brief/daily-brief.module.js.map +1 -1
- package/dist/daily-brief/daily-brief.service.js +1 -1
- package/dist/daily-brief/daily-brief.service.js.map +1 -1
- package/dist/database/database.module.js +15 -2
- package/dist/database/database.module.js.map +1 -1
- package/dist/database/repositories/daily-brief.repository.js +11 -1
- package/dist/database/repositories/daily-brief.repository.js.map +1 -1
- package/dist/database/repositories/hot-item.repository.d.ts +1 -1
- package/dist/database/repositories/hot-item.repository.js +7 -4
- package/dist/database/repositories/hot-item.repository.js.map +1 -1
- package/dist/database/repositories/news-brief.repository.d.ts +81 -0
- package/dist/database/repositories/news-brief.repository.js +208 -0
- package/dist/database/repositories/news-brief.repository.js.map +1 -0
- package/dist/database/schemas/news-brief.schema.d.ts +48 -0
- package/dist/database/schemas/news-brief.schema.js +130 -0
- package/dist/database/schemas/news-brief.schema.js.map +1 -0
- package/dist/news-brief/categories/news-category.registry.d.ts +5 -0
- package/dist/news-brief/categories/news-category.registry.js +106 -0
- package/dist/news-brief/categories/news-category.registry.js.map +1 -0
- package/dist/news-brief/clients/news-brief-ai.client.d.ts +45 -0
- package/dist/news-brief/clients/news-brief-ai.client.js +314 -0
- package/dist/news-brief/clients/news-brief-ai.client.js.map +1 -0
- package/dist/news-brief/clients/news-brief-search.service.d.ts +12 -0
- package/dist/news-brief/clients/news-brief-search.service.js +57 -0
- package/dist/news-brief/clients/news-brief-search.service.js.map +1 -0
- package/dist/news-brief/dto/generate-news-brief.dto.d.ts +7 -0
- package/dist/news-brief/dto/generate-news-brief.dto.js +45 -0
- package/dist/news-brief/dto/generate-news-brief.dto.js.map +1 -0
- package/dist/news-brief/dto/list-news-briefs-query.dto.d.ts +7 -0
- package/dist/news-brief/dto/list-news-briefs-query.dto.js +59 -0
- package/dist/news-brief/dto/list-news-briefs-query.dto.js.map +1 -0
- package/dist/news-brief/dto/news-brief-date-param.dto.d.ts +3 -0
- package/dist/news-brief/dto/news-brief-date-param.dto.js +22 -0
- package/dist/news-brief/dto/news-brief-date-param.dto.js.map +1 -0
- package/dist/news-brief/interfaces/news-brief.interface.d.ts +202 -0
- package/dist/news-brief/interfaces/news-brief.interface.js +3 -0
- package/dist/news-brief/interfaces/news-brief.interface.js.map +1 -0
- package/dist/news-brief/news-brief.config.d.ts +33 -0
- package/dist/news-brief/news-brief.config.js +118 -0
- package/dist/news-brief/news-brief.config.js.map +1 -0
- package/dist/news-brief/news-brief.controller.d.ts +56 -0
- package/dist/news-brief/news-brief.controller.js +185 -0
- package/dist/news-brief/news-brief.controller.js.map +1 -0
- package/dist/news-brief/news-brief.module.d.ts +2 -0
- package/dist/news-brief/news-brief.module.js +47 -0
- package/dist/news-brief/news-brief.module.js.map +1 -0
- package/dist/news-brief/news-brief.scheduler.d.ts +34 -0
- package/dist/news-brief/news-brief.scheduler.js +143 -0
- package/dist/news-brief/news-brief.scheduler.js.map +1 -0
- package/dist/news-brief/news-brief.service.d.ts +60 -0
- package/dist/news-brief/news-brief.service.js +676 -0
- package/dist/news-brief/news-brief.service.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { OnModuleDestroy, OnModuleInit } from '@nestjs/common';
|
|
2
|
+
import { SchedulerRegistry } from '@nestjs/schedule';
|
|
3
|
+
import { HotListsService } from '../host-lists/hot-lists.service';
|
|
4
|
+
import { NewsBriefConfigService } from './news-brief.config';
|
|
5
|
+
import { NewsBriefService } from './news-brief.service';
|
|
6
|
+
export declare class NewsBriefScheduler implements OnModuleInit, OnModuleDestroy {
|
|
7
|
+
private readonly config;
|
|
8
|
+
private readonly schedulerRegistry;
|
|
9
|
+
private readonly newsBriefService;
|
|
10
|
+
private readonly hotListsService;
|
|
11
|
+
private readonly logger;
|
|
12
|
+
private readonly cronJobName;
|
|
13
|
+
private isRunning;
|
|
14
|
+
private enabled;
|
|
15
|
+
constructor(config: NewsBriefConfigService, schedulerRegistry: SchedulerRegistry, newsBriefService: NewsBriefService, hotListsService: HotListsService);
|
|
16
|
+
onModuleInit(): void;
|
|
17
|
+
onModuleDestroy(): void;
|
|
18
|
+
isEnabled(): boolean;
|
|
19
|
+
getStatus(): {
|
|
20
|
+
isRunning: boolean;
|
|
21
|
+
enabled: boolean;
|
|
22
|
+
cronExpression: string;
|
|
23
|
+
timezone: string;
|
|
24
|
+
categories: string[];
|
|
25
|
+
cronJobExists: boolean;
|
|
26
|
+
};
|
|
27
|
+
start(): void;
|
|
28
|
+
stop(): void;
|
|
29
|
+
reconfigure(): void;
|
|
30
|
+
private setupCronJob;
|
|
31
|
+
private stopCronJob;
|
|
32
|
+
private handleCron;
|
|
33
|
+
private validateCategoryProfiles;
|
|
34
|
+
}
|
|
@@ -0,0 +1,143 @@
|
|
|
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 NewsBriefScheduler_1;
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.NewsBriefScheduler = void 0;
|
|
14
|
+
const common_1 = require("@nestjs/common");
|
|
15
|
+
const schedule_1 = require("@nestjs/schedule");
|
|
16
|
+
const cron_1 = require("cron");
|
|
17
|
+
const hot_lists_service_1 = require("../host-lists/hot-lists.service");
|
|
18
|
+
const news_brief_config_1 = require("./news-brief.config");
|
|
19
|
+
const news_brief_service_1 = require("./news-brief.service");
|
|
20
|
+
const news_brief_ai_client_1 = require("./clients/news-brief-ai.client");
|
|
21
|
+
let NewsBriefScheduler = NewsBriefScheduler_1 = class NewsBriefScheduler {
|
|
22
|
+
constructor(config, schedulerRegistry, newsBriefService, hotListsService) {
|
|
23
|
+
this.config = config;
|
|
24
|
+
this.schedulerRegistry = schedulerRegistry;
|
|
25
|
+
this.newsBriefService = newsBriefService;
|
|
26
|
+
this.hotListsService = hotListsService;
|
|
27
|
+
this.logger = new common_1.Logger(NewsBriefScheduler_1.name);
|
|
28
|
+
this.cronJobName = 'news-brief-generate';
|
|
29
|
+
this.isRunning = false;
|
|
30
|
+
this.enabled = false;
|
|
31
|
+
this.enabled = this.config.enabled;
|
|
32
|
+
}
|
|
33
|
+
onModuleInit() {
|
|
34
|
+
this.validateCategoryProfiles(this.config.knownCategories);
|
|
35
|
+
this.setupCronJob();
|
|
36
|
+
}
|
|
37
|
+
onModuleDestroy() {
|
|
38
|
+
this.stopCronJob();
|
|
39
|
+
}
|
|
40
|
+
isEnabled() {
|
|
41
|
+
return this.enabled;
|
|
42
|
+
}
|
|
43
|
+
getStatus() {
|
|
44
|
+
return {
|
|
45
|
+
isRunning: this.isRunning,
|
|
46
|
+
enabled: this.enabled,
|
|
47
|
+
cronExpression: this.config.cronExpression,
|
|
48
|
+
timezone: this.config.timezone,
|
|
49
|
+
categories: this.config.categoryCodes,
|
|
50
|
+
cronJobExists: this.schedulerRegistry.doesExist('cron', this.cronJobName),
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
start() {
|
|
54
|
+
this.enabled = true;
|
|
55
|
+
this.setupCronJob();
|
|
56
|
+
}
|
|
57
|
+
stop() {
|
|
58
|
+
this.enabled = false;
|
|
59
|
+
this.stopCronJob();
|
|
60
|
+
}
|
|
61
|
+
reconfigure() {
|
|
62
|
+
this.setupCronJob();
|
|
63
|
+
}
|
|
64
|
+
setupCronJob() {
|
|
65
|
+
try {
|
|
66
|
+
this.stopCronJob();
|
|
67
|
+
if (!this.enabled) {
|
|
68
|
+
this.logger.log('News brief scheduler is disabled');
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
const cronExpression = this.config.cronExpression;
|
|
72
|
+
const timezone = this.config.timezone;
|
|
73
|
+
const job = new cron_1.CronJob(cronExpression, () => {
|
|
74
|
+
void this.handleCron();
|
|
75
|
+
}, null, false, timezone);
|
|
76
|
+
this.schedulerRegistry.addCronJob(this.cronJobName, job);
|
|
77
|
+
job.start();
|
|
78
|
+
this.logger.log(`News brief cron job setup with expression: ${cronExpression}`);
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
this.logger.error('Failed to setup news brief cron job:', error);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
stopCronJob() {
|
|
85
|
+
try {
|
|
86
|
+
if (this.schedulerRegistry.doesExist('cron', this.cronJobName)) {
|
|
87
|
+
this.schedulerRegistry.deleteCronJob(this.cronJobName);
|
|
88
|
+
this.logger.log(`Stopped cron job: ${this.cronJobName}`);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
catch (error) {
|
|
92
|
+
this.logger.error('Failed to stop news brief cron job:', error);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
async handleCron() {
|
|
96
|
+
if (!this.enabled || this.isRunning) {
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
this.isRunning = true;
|
|
100
|
+
try {
|
|
101
|
+
const result = await this.newsBriefService.generate();
|
|
102
|
+
const succeeded = result.results.filter((item) => item.status === 'success').length;
|
|
103
|
+
const failed = result.results.filter((item) => item.status === 'failed').length;
|
|
104
|
+
this.logger.log(`News brief run for ${result.briefDate}/${result.period}: ${succeeded} succeeded, ${failed} failed`);
|
|
105
|
+
}
|
|
106
|
+
catch (error) {
|
|
107
|
+
this.logger.error('News brief generation failed:', error);
|
|
108
|
+
}
|
|
109
|
+
finally {
|
|
110
|
+
this.isRunning = false;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
validateCategoryProfiles(profiles) {
|
|
114
|
+
const registeredSources = new Set(this.hotListsService.getAllSources());
|
|
115
|
+
const missingSources = [];
|
|
116
|
+
const oversized = [];
|
|
117
|
+
for (const profile of profiles) {
|
|
118
|
+
for (const source of profile.sources) {
|
|
119
|
+
if (!registeredSources.has(source)) {
|
|
120
|
+
missingSources.push(`${profile.code}:${source}`);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
if (profile.maxItems > news_brief_ai_client_1.PROMPT_BUDGET.maxOutputItems) {
|
|
124
|
+
oversized.push(`${profile.code}:${profile.maxItems}`);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
if (missingSources.length > 0) {
|
|
128
|
+
throw new Error(`Unknown hot list source(s) in news category registry: ${missingSources.join(', ')}`);
|
|
129
|
+
}
|
|
130
|
+
if (oversized.length > 0) {
|
|
131
|
+
throw new Error(`News category maxItems exceeds PROMPT_BUDGET.maxOutputItems (${news_brief_ai_client_1.PROMPT_BUDGET.maxOutputItems}): ${oversized.join(', ')}`);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
};
|
|
135
|
+
exports.NewsBriefScheduler = NewsBriefScheduler;
|
|
136
|
+
exports.NewsBriefScheduler = NewsBriefScheduler = NewsBriefScheduler_1 = __decorate([
|
|
137
|
+
(0, common_1.Injectable)(),
|
|
138
|
+
__metadata("design:paramtypes", [news_brief_config_1.NewsBriefConfigService,
|
|
139
|
+
schedule_1.SchedulerRegistry,
|
|
140
|
+
news_brief_service_1.NewsBriefService,
|
|
141
|
+
hot_lists_service_1.HotListsService])
|
|
142
|
+
], NewsBriefScheduler);
|
|
143
|
+
//# sourceMappingURL=news-brief.scheduler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"news-brief.scheduler.js","sourceRoot":"","sources":["../../src/news-brief/news-brief.scheduler.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,2CAKwB;AACxB,+CAAqD;AACrD,+BAA+B;AAC/B,uEAAkE;AAClE,2DAA6D;AAC7D,6DAAwD;AAExD,yEAA+D;AAGxD,IAAM,kBAAkB,0BAAxB,MAAM,kBAAkB;IAM7B,YACmB,MAA8B,EAC9B,iBAAoC,EACpC,gBAAkC,EAClC,eAAgC;QAHhC,WAAM,GAAN,MAAM,CAAwB;QAC9B,sBAAiB,GAAjB,iBAAiB,CAAmB;QACpC,qBAAgB,GAAhB,gBAAgB,CAAkB;QAClC,oBAAe,GAAf,eAAe,CAAiB;QATlC,WAAM,GAAG,IAAI,eAAM,CAAC,oBAAkB,CAAC,IAAI,CAAC,CAAC;QAC7C,gBAAW,GAAG,qBAAqB,CAAC;QAC7C,cAAS,GAAG,KAAK,CAAC;QAClB,YAAO,GAAG,KAAK,CAAC;QAQtB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;IACrC,CAAC;IAED,YAAY;QAKV,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;QAC3D,IAAI,CAAC,YAAY,EAAE,CAAC;IACtB,CAAC;IAED,eAAe;QACb,IAAI,CAAC,WAAW,EAAE,CAAC;IACrB,CAAC;IAGD,SAAS;QACP,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,SAAS;QACP,OAAO;YACL,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,cAAc;YAC1C,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ;YAC9B,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,aAAa;YACrC,aAAa,EAAE,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC;SAC1E,CAAC;IACJ,CAAC;IAED,KAAK;QACH,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,YAAY,EAAE,CAAC;IACtB,CAAC;IAED,IAAI;QACF,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACrB,IAAI,CAAC,WAAW,EAAE,CAAC;IACrB,CAAC;IAED,WAAW;QAET,IAAI,CAAC,YAAY,EAAE,CAAC;IACtB,CAAC;IAEO,YAAY;QAClB,IAAI,CAAC;YACH,IAAI,CAAC,WAAW,EAAE,CAAC;YAEnB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;gBAClB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;gBACpD,OAAO;YACT,CAAC;YAED,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC;YAClD,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;YACtC,MAAM,GAAG,GAAG,IAAI,cAAO,CACrB,cAAc,EACd,GAAG,EAAE;gBACH,KAAK,IAAI,CAAC,UAAU,EAAE,CAAC;YACzB,CAAC,EACD,IAAI,EACJ,KAAK,EACL,QAAQ,CACT,CAAC;YAEF,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;YACzD,GAAG,CAAC,KAAK,EAAE,CAAC;YACZ,IAAI,CAAC,MAAM,CAAC,GAAG,CACb,8CAA8C,cAAc,EAAE,CAC/D,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,sCAAsC,EAAE,KAAK,CAAC,CAAC;QACnE,CAAC;IACH,CAAC;IAEO,WAAW;QACjB,IAAI,CAAC;YACH,IAAI,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC/D,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBACvD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,qBAAqB,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;YAC3D,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,qCAAqC,EAAE,KAAK,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,UAAU;QACtB,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACpC,OAAO;QACT,CAAC;QAED,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC;YACtD,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CACrC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,CACpC,CAAC,MAAM,CAAC;YACT,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAClC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,QAAQ,CACnC,CAAC,MAAM,CAAC;YACT,IAAI,CAAC,MAAM,CAAC,GAAG,CACb,sBAAsB,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,eAAe,MAAM,SAAS,CACpG,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,CAAC,CAAC;QAC5D,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACzB,CAAC;IACH,CAAC;IAEO,wBAAwB,CAAC,QAA+B;QAC9D,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE,CAAC,CAAC;QACxE,MAAM,cAAc,GAAa,EAAE,CAAC;QACpC,MAAM,SAAS,GAAa,EAAE,CAAC;QAE/B,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;gBACrC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;oBACnC,cAAc,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,IAAI,MAAM,EAAE,CAAC,CAAC;gBACnD,CAAC;YACH,CAAC;YACD,IAAI,OAAO,CAAC,QAAQ,GAAG,oCAAa,CAAC,cAAc,EAAE,CAAC;gBACpD,SAAS,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;YACxD,CAAC;QACH,CAAC;QAED,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CACb,yDAAyD,cAAc,CAAC,IAAI,CAC1E,IAAI,CACL,EAAE,CACJ,CAAC;QACJ,CAAC;QACD,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CACb,gEAAgE,oCAAa,CAAC,cAAc,MAAM,SAAS,CAAC,IAAI,CAC9G,IAAI,CACL,EAAE,CACJ,CAAC;QACJ,CAAC;IACH,CAAC;CACF,CAAA;AA5JY,gDAAkB;6BAAlB,kBAAkB;IAD9B,IAAA,mBAAU,GAAE;qCAQgB,0CAAsB;QACX,4BAAiB;QAClB,qCAAgB;QACjB,mCAAe;GAVxC,kBAAkB,CA4J9B"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { CacheService } from '../cache/cache.service';
|
|
2
|
+
import { HotListsService } from '../host-lists/hot-lists.service';
|
|
3
|
+
import { HotItemRepository } from '../database/repositories/hot-item.repository';
|
|
4
|
+
import { NewsBriefRepository } from '../database/repositories/news-brief.repository';
|
|
5
|
+
import { FetchHotDataTask } from '../scheduler/tasks/fetch-hot-data.task';
|
|
6
|
+
import { GenerateNewsBriefOptions, ListNewsBriefsOptions, NewsBriefDeleteHistoryResponse, NewsBriefDeleteResponse, NewsBriefDigestResponse, NewsBriefGenerateResponse, NewsBriefListResponse, NewsBriefPublicConfig, NewsBriefResponse, NewsCategorySummary } from './interfaces/news-brief.interface';
|
|
7
|
+
import { NewsBriefAiClient } from './clients/news-brief-ai.client';
|
|
8
|
+
import { NewsBriefSearchService } from './clients/news-brief-search.service';
|
|
9
|
+
import { NewsBriefConfigService } from './news-brief.config';
|
|
10
|
+
export declare class NewsBriefService {
|
|
11
|
+
private readonly config;
|
|
12
|
+
private readonly newsBriefRepository;
|
|
13
|
+
private readonly hotItemRepository;
|
|
14
|
+
private readonly fetchHotDataTask;
|
|
15
|
+
private readonly hotListsService;
|
|
16
|
+
private readonly aiClient;
|
|
17
|
+
private readonly searchService;
|
|
18
|
+
private readonly cacheService;
|
|
19
|
+
private readonly logger;
|
|
20
|
+
constructor(config: NewsBriefConfigService, newsBriefRepository: NewsBriefRepository, hotItemRepository: HotItemRepository, fetchHotDataTask: FetchHotDataTask, hotListsService: HotListsService, aiClient: NewsBriefAiClient, searchService: NewsBriefSearchService, cacheService: CacheService);
|
|
21
|
+
generate(options?: GenerateNewsBriefOptions): Promise<NewsBriefGenerateResponse>;
|
|
22
|
+
findLatest(category: string | undefined, period?: string, includeDebug?: boolean): Promise<NewsBriefResponse | null>;
|
|
23
|
+
findByDate(date: string, category: string | undefined, period?: string, includeDebug?: boolean): Promise<NewsBriefResponse | null>;
|
|
24
|
+
findDigest(categories?: string | string[], date?: string, period?: string): Promise<NewsBriefDigestResponse>;
|
|
25
|
+
list(options: ListNewsBriefsOptions): Promise<NewsBriefListResponse>;
|
|
26
|
+
deleteByDate(date: string, category?: string, period?: string): Promise<NewsBriefDeleteResponse>;
|
|
27
|
+
deleteHistory(options: {
|
|
28
|
+
olderThan?: string;
|
|
29
|
+
beforeDate?: string;
|
|
30
|
+
category?: string;
|
|
31
|
+
}): Promise<NewsBriefDeleteHistoryResponse>;
|
|
32
|
+
getConfig(): NewsBriefPublicConfig;
|
|
33
|
+
getCategories(): NewsCategorySummary[];
|
|
34
|
+
private generateForCategory;
|
|
35
|
+
private generateClaimedBrief;
|
|
36
|
+
private fetchLatestSourceItems;
|
|
37
|
+
private refreshSourceOnce;
|
|
38
|
+
private refreshSource;
|
|
39
|
+
private loadHistoryItems;
|
|
40
|
+
private buildSourceNameMap;
|
|
41
|
+
private toInputItem;
|
|
42
|
+
private mergeAndLimitItems;
|
|
43
|
+
private timestampOf;
|
|
44
|
+
private effectiveMaxItems;
|
|
45
|
+
private isSearchActive;
|
|
46
|
+
private buildSearchEvidence;
|
|
47
|
+
private buildSearchQuery;
|
|
48
|
+
private resolveDigestProfiles;
|
|
49
|
+
private resolveGenerateProfiles;
|
|
50
|
+
private requireKnownCategory;
|
|
51
|
+
private unknownCategoryMessage;
|
|
52
|
+
private resolveSourcesOverride;
|
|
53
|
+
private resolveBriefDate;
|
|
54
|
+
private validateDate;
|
|
55
|
+
private normalizePeriod;
|
|
56
|
+
private normalizeOptionalPeriod;
|
|
57
|
+
private resolveOlderThanDate;
|
|
58
|
+
private resolveInputWindow;
|
|
59
|
+
private toResponse;
|
|
60
|
+
}
|