Public type definitions for Flowers PDK
npm install @flowers-software/pdk-typesFlowers 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.
``typescript
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 });
}
},
});
`
callback.
Shape:
`typescript
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
$3
`typescript
const names = api.getAllTaskValuesByName("name");
`$3
`typescript
api.updateTaskValueByName("approval-notes", { value: "Ready to ship" });
`
File Helpers
$3
`typescript
const imageUpload: UploadFileRequest = {
fileName: "image.png",
content: new ArrayBuffer(1024),
};
api.uploadFile(imageUpload);
`$3
#### From a task
`typescript
const attachments = api.getAllTaskValuesByName("attachments");
const firstFileId = attachments[0]?.value?.[0]?.id;
const fileContent = await api.downloadFile("firstFileId");
`#### From a workflow step
`typescript
const [wfStep] = api.getWorkflowStepsByName("0.0.0 Start");
const firstFileIdOnStep = wfStep.files[0].id;
api.downloadFile(firstFileIdOnStep);
`HTTP Client
`typescript
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
`typescript
const [startStep] = api.getWorkflowStepsByName("0.0 Start");
startStep.deadline;
startStep.responsibleTeams
startStep.responsibleUsers
startStep.completed
startStep.filesconst currentStep = api.getWorkflowStepsByName(ctx.details.sourceObjectName)[0];
const pdfFiles = currentStep.files.filter(file => file.mimeType === "application/pdf");
``