Skip to main content
Glama
convert-pdf-to-text.ts2.17 kB
import { createAction, Property } from '@activepieces/pieces-framework'; import { doctlyAuth } from '../common/auth'; import FormData from 'form-data'; import { AuthenticationType, httpClient, HttpMethod } from '@activepieces/pieces-common'; import { BASE_URL } from '../common/constants'; import { CreateDocumentResponse, GetDocumentResponse } from '../common/types'; export const convertPdfToTextAction = createAction({ name: 'convert-pdf-to-text', auth: doctlyAuth, displayName: 'Convert PDF to Text', description: 'Converts PDF document to text file with markdown formatting.', props: { file: Property.File({ displayName: 'Document File', required: true, }), }, async run(context) { const { file } = context.propsValue; const formData = new FormData(); formData.append('file', file.data, { filename: file.filename }); const response = await httpClient.sendRequest<CreateDocumentResponse>({ method: HttpMethod.POST, url: BASE_URL + '/documents/', authentication: { type: AuthenticationType.BEARER_TOKEN, token: context.auth.secret_text, }, headers: { ...formData.getHeaders(), }, body: formData, }); const docId = response.body.id; let status = response.body.status; const timeoutAt = Date.now() + 5 * 60 * 1000; while (!['COMPLETED', 'FAILED'].includes(status) && Date.now() < timeoutAt) { await new Promise((resolve) => setTimeout(resolve, 5000)); const pollResponse = await httpClient.sendRequest<GetDocumentResponse>({ method: HttpMethod.GET, url: BASE_URL + `/documents/${docId}`, authentication: { type: AuthenticationType.BEARER_TOKEN, token: context.auth.secret_text, }, }); status = pollResponse.body.status; if (status === 'COMPLETED') { const mdResponse = await httpClient.sendRequest({ method: HttpMethod.GET, url: pollResponse.body.output_file_url, }); const markdownText = mdResponse.body as unknown as string; return { markdownText, ...pollResponse.body }; } if (status === 'FAILED') throw new Error('Document processing failed.'); } throw new Error('Document Parse timed out or failed.'); }, });

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/activepieces/activepieces'

If you have feedback or need assistance with the MCP directory API, please join our Discord server