/** * El nodo de Apify: correr actores y tareas, y leer lo que dejan. * * ## Por qué existe * * [2026-09-13] Él tenía el polling montado a mano: «Start Apify job (HTTP) → * Check status (HTTP) → Loop Until Complete (conditional) → else → Check», con * el token pegado en cada HTTP. Apify no tiene OAuth para terceros —Zapier, * Make y n8n van con token igual— así que la credencial es una API key como * la de Firecrawl, y lo demás es un nodo con las llamadas ya escritas. * * ## La operación que motiva el nodo * * `runActorAndWait`: `run-sync-get-dataset-items` corre el actor y devuelve * los items del dataset en la MISMA respuesta (hasta 300 s; pasado eso, 408). * Con eso el flujo de arriba cabe en un nodo. Para actores más lentos siguen * estando `startRun` + `getRun` + `getDatasetItems`, que es lo que él hacía a * mano, ahora con la key en la credencial. * * ## Por qué siete * * Las tres del polling (`startRun`, `getRun`, `getDatasetItems`), la que lo * evita (`runActorAndWait`), su gemela para tareas guardadas (`runTask`), el * key-value store (`getKeyValueRecord`: `OUTPUT`, un `results-map`, lo que el * actor guarde con nombre) y `abortRun`. Lo que queda fuera a propósito: * listar actores y datasets del usuario, webhooks de Apify y el request * queue — nada de eso hace falta para correr un actor y leer su resultado. * * ⚠️ El orden de este array es el orden del desplegable. */ export declare const APIFY_OPERATIONS: readonly ["runActorAndWait", "startRun", "getRun", "getDatasetItems", "getKeyValueRecord", "runTask", "abortRun"]; export type ApifyOperation = (typeof APIFY_OPERATIONS)[number]; export declare function isApifyOperation(value: unknown): value is ApifyOperation; /** * Las que devuelven una COLECCIÓN sobre la que el nodo de abajo repite: los * items de un dataset. `runActorAndWait` y `runTask` los traen en la misma * respuesta; `getDatasetItems` los pide aparte. Las otras devuelven UN objeto * (la corrida, el registro). * * ⚠️ Se itera `items`, y sólo `items`. La salida lleva `_meta.iterable: true` * con `iterateField: 'items'`, como el crawl de Firecrawl. */ export declare const APIFY_ITERABLE_OPERATIONS: ReadonlyArray; export type ApifyParamType = "template" | "textarea" | "json" | "select" | "number" | "booleanSelect"; export interface ApifyParamSpec { name: string; label: string; type: ApifyParamType; required?: boolean; description?: string; placeholder?: string; default?: string | number; options?: ReadonlyArray<{ value: string; label: string; }>; min?: number; max?: number; advanced?: boolean; } export interface ApifyOperationSpec { label: string; description: string; apiRoute: string; params: ApifyParamSpec[]; } export declare const APIFY_OPERATION_SPECS: Record;