import type { CallTemplateFunctionArgs, Context, PluginDefinition } from "@yaakapp/api"; export const plugin: PluginDefinition = { templateFunctions: [ { name: "base64.encode", description: "Encode a value to base64", args: [ { label: "Encoding", type: "select", name: "encoding", defaultValue: "base64", options: [ { label: "Base64", value: "base64", }, { label: "Base64 URL-safe", value: "base64url", }, ], }, { label: "Plain Text", type: "text", name: "value", multiLine: true }, ], async onRender(_ctx: Context, args: CallTemplateFunctionArgs): Promise { return Buffer.from(String(args.values.value ?? "")).toString( args.values.encoding === "base64url" ? "base64url" : "base64", ); }, }, { name: "base64.decode", description: "Decode a value from base64", args: [{ label: "Encoded Value", type: "text", name: "value", multiLine: true }], async onRender(_ctx: Context, args: CallTemplateFunctionArgs): Promise { return Buffer.from(String(args.values.value ?? ""), "base64").toString("utf-8"); }, }, { name: "url.encode", description: "Encode a value for use in a URL (percent-encoding)", args: [{ label: "Plain Text", type: "text", name: "value", multiLine: true }], async onRender(_ctx: Context, args: CallTemplateFunctionArgs): Promise { return encodeURIComponent(String(args.values.value ?? "")); }, }, { name: "url.decode", description: "Decode a percent-encoded URL value", args: [{ label: "Encoded Value", type: "text", name: "value", multiLine: true }], async onRender(_ctx: Context, args: CallTemplateFunctionArgs): Promise { try { return decodeURIComponent(String(args.values.value ?? "")); } catch { return ""; } }, }, ], };