Create business-critical documents like invoices, contracts, sales proposals, and work orders automatically.
Emit new event for every new row added in a table. See documentation here
Emit new event for every insert
, update
, or delete
operation in a table. This source requires user configuration using the Supabase website. More information in the README. Also see documentation here
import fs from "fs";
import axios from "axios";
import {
ServicePrincipalCredentials,
PDFServices,
MimeType,
DocumentMergeParams,
OutputFormat,
DocumentMergeJob,
DocumentMergeResult
} from "@adobe/pdfservices-node-sdk";
export default defineComponent({
props: {
adobe_document_generation_api: {
type: "app",
app: "adobe_document_generation_api",
}
},
async run({steps, $}) {
// Configuration constants
const PDF_SERVICES_CLIENT_ID = this.adobe_document_generation_api.$auth.client_id;
const PDF_SERVICES_CLIENT_SECRET = this.adobe_document_generation_api.$auth.client_secret;
try {
// Initial setup, create credentials instance
const credentials = new ServicePrincipalCredentials({
clientId: PDF_SERVICES_CLIENT_ID,
clientSecret: PDF_SERVICES_CLIENT_SECRET
});
// Creates a PDF Services instance
const pdfServices = new PDFServices({ credentials });
// Creates an asset(s) from source file(s) and upload
const response = await axios.get("https://developer.adobe.com/document-services/docs/receiptTemplate.docx", { responseType: 'stream' });
const readStream = response.data;
const inputAsset = await pdfServices.upload({
readStream,
mimeType: MimeType.DOCX
});
// Setup input data for the document merge process
const jsonDataForMerge = {
"author": "Gary Lee",
"Company": {
"Name": "Projected",
"Address": "19718 Mandrake Way",
"PhoneNumber": "+1-100000098"
},
"Invoice": {
"Date": "January 15, 2021",
"Number": 123,
"Items": [
{
"item": "Gloves",
"description": "Microwave gloves",
"UnitPrice": 5,
"Quantity": 2,
"Total": 10
},
{
"item": "Bowls",
"description": "Microwave bowls",
"UnitPrice": 10,
"Quantity": 2,
"Total": 20
}
]
},
"Customer": {
"Name": "Collins Candy",
"Address": "315 Dunning Way",
"PhoneNumber": "+1-200000046",
"Email": "cc@abcdef.co.dw"
},
"Tax": 5,
"Shipping": 5,
"clause": {
"overseas": "The shipment might take 5-10 more than informed."
},
"paymentMethod": "Cash"
};
// Create parameters for the job
const params = new DocumentMergeParams({
jsonDataForMerge,
outputFormat: OutputFormat.PDF
});
// Creates a new job instance
const job = new DocumentMergeJob({ inputAsset, params });
// Submit the job and get the job result
const pollingURL = await pdfServices.submit({ job });
const pdfServicesResponse = await pdfServices.getJobResult({
pollingURL,
resultType: DocumentMergeResult
});
// Get content from the resulting asset(s)
const resultAsset = pdfServicesResponse.result.asset;
const streamAsset = await pdfServices.getContent({ asset: resultAsset });
// Creates a write stream and copy stream asset's content to it
const outputFilePath = "/tmp/generatePDFOutput.pdf";
console.log(`Saving asset at ${outputFilePath}`);
return new Promise((resolve, reject) => {
const writeStream = fs.createWriteStream(outputFilePath);
streamAsset.readStream.pipe(writeStream);
writeStream.on('finish', () => resolve(outputFilePath));
writeStream.on('error', reject);
});
} catch(err) {
console.error('Error generating PDF:', err);
throw err;
}
},
})
Supabase is a real-time backend-as-a-service that provides developers with a suite of tools to quickly build and scale their applications. It offers database storage, authentication, instant APIs, and real-time subscriptions. With the Supabase API, you can perform CRUD operations on your database, manage users, and listen to database changes in real time. When integrated with Pipedream, you can automate workflows that react to these database events, synchronize data across multiple services, or streamline user management processes.
import { axios } from "@pipedream/platform"
export default defineComponent({
props: {
supabase: {
type: "app",
app: "supabase",
}
},
async run({steps, $}) {
return await axios($, {
url: `https://${this.supabase.$auth.subdomain}.supabase.co/rest/v1/`,
headers: {
Authorization: `Bearer ${this.supabase.$auth.service_key}`,
"apikey": `${this.supabase.$auth.service_key}`,
},
})
},
})