@flowers-software/pdk-types
v0.4.4
Published
Public type definitions for Flowers PDK
Readme
Flowers Plugin Development Kit (PDK) Types
Flowers plugins run inside QuickJS with no access to Node or browser globals. This package ships the
type definitions and helpers (such as definePlugin, PdkApi, and HostedCodeExecutionContext) that
keep your plugin implementation type-safe while matching the runtime contracts used by the Flowers
platform.
Quick Start
import {
definePlugin,
type HostedCodeExecutionContext,
type PdkApi,
} from "@flowers-software/pdk-types";
export default definePlugin({
onAutomationActionExecution(api: PdkApi, ctx: HostedCodeExecutionContext) {
const [owner] = api.getAllTaskValuesByName("account-owner");
if (owner?.value?.length) {
api.updateTaskValueByName("account-owner", { value: owner.value });
}
},
});API Reference
Hosted Code Execution Context
The context object passed as the second parameter to the onAutomationActionExecution callback.
Shape:
const ctx: HostedCodeExecutionContext = {
customerId: "6325DE6B-50BD-4306-BF32-2A282F404538", workflowId: "029673CB-5C63-4DD7-AA9D-43E189CCBBF9",
details: {
referenceFlowId: "130E8301-B37B-4D9E-B473-BD801639A14D",
referenceFlowName: "Flow Name",
workflowName: "Workflow Name",
workflowId: "35D3B17D-AE2E-42B5-9930-D586F402CCAC",
sourceObjectName: "Step name",
workflowExternalReferenceKey: "Workflow External Reference Key",
}
}Task Value Helpers
Reading task values
const names = api.getAllTaskValuesByName("name");Updating task values
api.updateTaskValueByName("approval-notes", { value: "Ready to ship" });File Helpers
Uploading files
const imageUpload: UploadFileRequest = {
fileName: "image.png",
content: new ArrayBuffer(1024),
};
api.uploadFile(imageUpload);Downloading files
From a task
const attachments = api.getAllTaskValuesByName("attachments");
const firstFileId = attachments[0]?.value?.[0]?.id;
const fileContent = await api.downloadFile("firstFileId");From a workflow step
const [wfStep] = api.getWorkflowStepsByName("0.0.0 Start");
const firstFileIdOnStep = wfStep.files[0].id;
api.downloadFile(firstFileIdOnStep);HTTP Client
const httpClient = api.http({ baseUrl: "https://api.example.com" });
const jsonPost = httpClient.post("/users", {
id: 1,
name: "Ada Lovelace",
active: true,
tags: ["math", "computing"],
meta: { notes: "first programmer?", score: 99.5, extra: null },
});
// decodes the response body as a javascript object
jsonPost.json<{optional_type:string}>()
// decodes the response body as text
jsonPost.text()
// decodes the response body as a binary buffer
jsonPost.bytes()Workflow Step Helpers
const [startStep] = api.getWorkflowStepsByName("0.0 Start");
startStep.deadline;
startStep.responsibleTeams
startStep.responsibleUsers
startStep.completed
startStep.files
const currentStep = api.getWorkflowStepsByName(ctx.details.sourceObjectName)[0];
const pdfFiles = currentStep.files.filter(file => file.mimeType === "application/pdf");