import { DEFAULT_POLLING_SOURCE_TIMER_INTERVAL } from "@pipedream/platform";
import browserhub from "../../browserhub.app.mjs";
import sampleEmit from "./test-event.mjs";
export default {
key: "browserhub-new-finished-automation-run",
name: "New Finished Automation Run",
description: "Emit new event when an automation run has finished running. [See the documentation](https://developer.browserhub.io/)",
version: "0.0.1",
type: "source",
dedupe: "unique",
props: {
browserhub,
db: "$.service.db",
timer: {
label: "Polling interval",
description: "Pipedream will poll the AskNicely on this schedule",
type: "$.interface.timer",
default: {
intervalSeconds: DEFAULT_POLLING_SOURCE_TIMER_INTERVAL,
},
},
scraperId: {
propDefinition: [
browserhub,
"scraperId",
],
optional: true,
},
},
methods: {
_getBaseDate() {
return this.db.get("baseDate");
},
_setBaseDate(baseDate = null) {
this.db.set("baseDate", baseDate);
},
async startEvent(maxResults = 0) {
const baseDate = this._getBaseDate();
let newBaseDate = null;
const response = this.browserhub.paginate({
fn: this.browserhub.listRuns,
maxResults,
baseDate,
params: {
scraper_id: this.scraperId,
},
});
const responseArray = [];
for await (const item of response) {
if (item.status === "successful") responseArray.push(item);
if (item.status === "running") newBaseDate = item.created_at;
}
if (newBaseDate) this._setBaseDate(newBaseDate);
if (!newBaseDate && responseArray.length) this._setBaseDate(responseArray[0].created_at);
for (const item of responseArray.reverse()) {
this.$emit(
item,
{
id: item.id,
summary: `Successfully finished automation run with ID: ${item.id}`,
ts: item.created_at,
},
);
}
},
},
hooks: {
async deploy() {
await this.startEvent(25);
},
},
async run() {
await this.startEvent();
},
sampleEmit,
};