actions/create-headless-import/create-headless-import.mjs
import dromo from "../../dromo.app.mjs"; import { getFileStreamAndMetadata } from "@pipedream/platform"; export default { key: "dromo-create-headless-import", name: "Create Headless Import", description: "Creates a new headless import. [See the documentation](https://developer.dromo.io/api/#tag/headless/operation/createHeadlessImport)", version: "1.0.2", annotations: { destructiveHint: false, openWorldHint: true, readOnlyHint: false, }, type: "action", props: { dromo, schemaId: { propDefinition: [ dromo, "schemaId", ], }, originalFilename: { type: "string", label: "Original Filename", description: "The original filename of the imported file. If not provided, the name of the uploaded file will be used.", optional: true, }, file: { type: "string", label: "File Path Or Url", description: "Provide either a file URL or a path to a file in the `/tmp` directory (for example, `/tmp/example.csv`)", }, syncDir: { type: "dir", accessMode: "read", sync: true, optional: true, }, }, methods: { uploadFile(url, data) { return this.dromo._makeRequest({ method: "PUT", headers: { "Content-Type": "application/octet-stream", }, url, data, }); }, }, async run({ $ }) { const { dromo, schemaId, originalFilename, file, uploadFile, } = this; const { stream, metadata, } = await getFileStreamAndMetadata(file); const response = await dromo.createHeadlessImport({ data: { schema_id: schemaId, original_filename: originalFilename || metadata.name, }, $, }); const uploadUrl = response.upload; await uploadFile(uploadUrl, stream); let importItem; const timer = (ms) => new Promise((res) => setTimeout(res, ms)); do { importItem = await dromo.getHeadlessImport({ importId: response.id, $, }); if (importItem?.status !== "AWAITING_UPLOAD") { break; } await timer(5000); } while (true); $.export("$summary", `Successfully created headless import with ID: ${response.id}`); return importItem; }, };