import { DEFAULT_POLLING_SOURCE_TIMER_INTERVAL } from "@pipedream/platform";
import moment from "moment";
import eodhdApis from "../../eodhd_apis.app.mjs";
export default {
key: "eodhd_apis-financial-report-released",
name: "New Financial Report Released",
description: "Emit new event when historical stock prices for a specific symbol are updated.",
type: "source",
version: "0.0.1",
dedupe: "unique",
props: {
eodhdApis,
db: "$.service.db",
timer: {
label: "Polling interval",
description: "Pipedream will poll the EODHD API on this schedule",
type: "$.interface.timer",
default: {
intervalSeconds: DEFAULT_POLLING_SOURCE_TIMER_INTERVAL,
},
},
exchangeCode: {
propDefinition: [
eodhdApis,
"exchangeCode",
],
},
symbolCode: {
propDefinition: [
eodhdApis,
"symbolCode",
({ exchangeCode }) => ({
exchangeCode,
}),
],
},
},
methods: {
_getLastDate() {
return this.db.get("lastDate") || 0;
},
_setLastDate(lastDate) {
this.db.set("lastDate", lastDate);
},
async startEvent(maxResults) {
const lastDate = this._getLastDate();
const responseArray = [];
let tempLastDate = lastDate;
const {
eodhdApis,
exchangeCode,
symbolCode,
} = this;
const items = eodhdApis.paginate({
fn: eodhdApis.listFinancialNews,
params: {
s: `${symbolCode}.${exchangeCode}`,
from: moment(lastDate).format("YYYY-MM-DD"),
},
maxResults,
});
for await (const item of items) {
const newLastDate = moment(item.date);
if (moment(newLastDate).isSameOrAfter(lastDate)) {
if (moment(newLastDate).isAfter(tempLastDate)) {
tempLastDate = newLastDate;
}
responseArray.push(item);
} else {
break;
}
}
if (!moment(lastDate).isSame(tempLastDate))
this._setLastDate(tempLastDate);
for (const responseItem of responseArray.reverse()) {
this.$emit(
responseItem,
{
id: responseItem.date,
summary: `A new report with title "${responseItem.title}" was created!`,
ts: responseItem.date,
},
);
}
},
},
hooks: {
async deploy() {
await this.startEvent(25);
},
},
async run() {
await this.startEvent();
},
};