@robinpath/brevo
Advanced tools
| /** | ||
| * RobinPath Brevo Module (Node port) | ||
| * | ||
| * Brevo (formerly Sendinblue) — transactional email, SMS, contacts, lists, | ||
| * attributes, and templates via REST API v3. Mirror of | ||
| * packages/php/brevo/src/index.php for the WordPress plugin; shares the | ||
| * same credential contract, metadata shape, and error taxonomy so the | ||
| * visual editor can render both identically. | ||
| * | ||
| * Unlike most SaaS APIs, Brevo authenticates with a custom `api-key` header | ||
| * rather than `Authorization: Bearer …`. Keys start with `xkeysib-`. | ||
| * | ||
| * Brevo uses UPPERCASE attribute names by convention (FIRSTNAME, LASTNAME, | ||
| * SMS). Callers should pass attribute maps in that style; the module does | ||
| * not transform keys. | ||
| * | ||
| * Contacts can be addressed either by numeric `id` or by URL-encoded email | ||
| * address — Brevo's `/contacts/{identifier}` endpoints accept both. | ||
| * | ||
| * Credential type declared by this module: | ||
| * - brevo : { api_key } | ||
| */ | ||
| import type { BuiltinHandler, CredentialTypeSchema, FunctionMetadata, ModuleHost, ModuleMetadata } from "@robinpath/core"; | ||
| export declare function configureBrevo(h: ModuleHost): void; | ||
| export declare const BrevoFunctions: Record<string, BuiltinHandler>; | ||
| export declare const BrevoCredentialTypes: CredentialTypeSchema[]; | ||
| export declare const BrevoFunctionMetadata: Record<string, FunctionMetadata>; | ||
| export declare const BrevoModuleMetadata: ModuleMetadata; | ||
| //# sourceMappingURL=brevo.d.ts.map |
| {"version":3,"file":"brevo.d.ts","sourceRoot":"","sources":["../src/brevo.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EACV,cAAc,EACd,oBAAoB,EACpB,gBAAgB,EAChB,UAAU,EACV,cAAc,EAEf,MAAM,iBAAiB,CAAC;AAezB,wBAAgB,cAAc,CAAC,CAAC,EAAE,UAAU,GAAG,IAAI,CAElD;AAupBD,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAmBzD,CAAC;AAIF,eAAO,MAAM,oBAAoB,EAAE,oBAAoB,EAkBtD,CAAC;AA4EF,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAitBlE,CAAC;AAIF,eAAO,MAAM,mBAAmB,EAAE,cAiDjC,CAAC"} |
+1329
| /** | ||
| * RobinPath Brevo Module (Node port) | ||
| * | ||
| * Brevo (formerly Sendinblue) — transactional email, SMS, contacts, lists, | ||
| * attributes, and templates via REST API v3. Mirror of | ||
| * packages/php/brevo/src/index.php for the WordPress plugin; shares the | ||
| * same credential contract, metadata shape, and error taxonomy so the | ||
| * visual editor can render both identically. | ||
| * | ||
| * Unlike most SaaS APIs, Brevo authenticates with a custom `api-key` header | ||
| * rather than `Authorization: Bearer …`. Keys start with `xkeysib-`. | ||
| * | ||
| * Brevo uses UPPERCASE attribute names by convention (FIRSTNAME, LASTNAME, | ||
| * SMS). Callers should pass attribute maps in that style; the module does | ||
| * not transform keys. | ||
| * | ||
| * Contacts can be addressed either by numeric `id` or by URL-encoded email | ||
| * address — Brevo's `/contacts/{identifier}` endpoints accept both. | ||
| * | ||
| * Credential type declared by this module: | ||
| * - brevo : { api_key } | ||
| */ | ||
| // ── Module-local state (populated by configure hook) ──────────────────── | ||
| const state = {}; | ||
| function host() { | ||
| if (!state.host) { | ||
| throw new Error("Brevo module not initialized. Pass the adapter to rp.installModule() so its configure() hook runs first."); | ||
| } | ||
| return state.host; | ||
| } | ||
| export function configureBrevo(h) { | ||
| state.host = h; | ||
| } | ||
| // ── Constants ────────────────────────────────────────────────────────── | ||
| const API_BASE = "https://api.brevo.com/v3/"; | ||
| const CREDENTIAL_TYPE = "brevo"; | ||
| function errorReturn(error, code, extra = {}) { | ||
| return { error, code, ...extra }; | ||
| } | ||
| // ── Credential resolver (mirrors PHP resolveApiKey) ──────────────────── | ||
| async function resolveApiKey(credentialSlug) { | ||
| if (!credentialSlug) { | ||
| return errorReturn("Credential slug is required.", "credential_not_found"); | ||
| } | ||
| let fields; | ||
| try { | ||
| fields = await host().credentials.get(credentialSlug); | ||
| } | ||
| catch (e) { | ||
| return errorReturn(e instanceof Error ? e.message : String(e), "credential_not_found"); | ||
| } | ||
| if (!fields) { | ||
| return errorReturn(`Credential '${credentialSlug}' not found.`, "credential_not_found"); | ||
| } | ||
| const apiKey = String(fields.api_key ?? ""); | ||
| if (!apiKey) { | ||
| return errorReturn("Credential has no `api_key` field.", "api_key_missing"); | ||
| } | ||
| return { apiKey }; | ||
| } | ||
| // ── HTTP helper (normalized envelope, never throws for API errors) ───── | ||
| async function http(apiKey, method, pathAndQuery, body) { | ||
| const headers = { | ||
| "api-key": apiKey, | ||
| Accept: "application/json", | ||
| }; | ||
| if (body !== undefined && body !== null) { | ||
| headers["Content-Type"] = "application/json"; | ||
| } | ||
| const init = { method, headers }; | ||
| if (body !== undefined && body !== null) { | ||
| init.body = JSON.stringify(body); | ||
| } | ||
| let response; | ||
| try { | ||
| response = await fetch(`${API_BASE}${pathAndQuery.replace(/^\/+/, "")}`, init); | ||
| } | ||
| catch (e) { | ||
| return errorReturn(e instanceof Error ? e.message : String(e), "transport"); | ||
| } | ||
| if (response.status === 204) { | ||
| return { ok: true }; | ||
| } | ||
| const raw = await response.text(); | ||
| let decoded; | ||
| try { | ||
| decoded = raw ? JSON.parse(raw) : null; | ||
| } | ||
| catch { | ||
| decoded = { raw }; | ||
| } | ||
| if (response.status >= 200 && response.status < 300) { | ||
| if (decoded && typeof decoded === "object") | ||
| return decoded; | ||
| return { raw }; | ||
| } | ||
| return brevoError(response.status, decoded && typeof decoded === "object" | ||
| ? decoded | ||
| : {}); | ||
| } | ||
| function brevoError(status, decoded) { | ||
| // Brevo error shape: { code: "document_not_found", message: "..." } | ||
| const brevoCode = String(decoded.code ?? ""); | ||
| const message = String(decoded.message ?? `Brevo returned HTTP ${status}.`); | ||
| let code = "brevo_error"; | ||
| if (status === 429) { | ||
| code = "rate_limited"; | ||
| } | ||
| else if (status === 404 || brevoCode === "document_not_found") { | ||
| code = "not_found"; | ||
| } | ||
| else if (brevoCode === "duplicate_parameter") { | ||
| code = "duplicate_contact"; | ||
| } | ||
| return errorReturn(message, code, { | ||
| status, | ||
| brevo_error: decoded, | ||
| }); | ||
| } | ||
| // ── Shared caller (wraps http + credential resolution) ───────────────── | ||
| async function call(cred, method, path, body) { | ||
| const resolved = await resolveApiKey(cred); | ||
| if ("error" in resolved) | ||
| return resolved; | ||
| return http(resolved.apiKey, method, path, body); | ||
| } | ||
| // ── Mail body builders (mirror PHP buildMailBody / normalizeEmail) ───── | ||
| function isPlainObject(v) { | ||
| return !!v && typeof v === "object" && !Array.isArray(v); | ||
| } | ||
| function normalizeEmail(value) { | ||
| if (isPlainObject(value)) { | ||
| const out = { | ||
| email: value.email !== undefined ? String(value.email) : "", | ||
| }; | ||
| if (value.name !== undefined && | ||
| value.name !== null && | ||
| String(value.name) !== "") { | ||
| out.name = String(value.name); | ||
| } | ||
| return out; | ||
| } | ||
| return { email: String(value ?? "") }; | ||
| } | ||
| function normalizeEmailList(value) { | ||
| if (!Array.isArray(value)) { | ||
| if (isPlainObject(value) && "email" in value) { | ||
| return [normalizeEmail(value)]; | ||
| } | ||
| return [normalizeEmail(value)]; | ||
| } | ||
| return value.map((v) => normalizeEmail(v)); | ||
| } | ||
| function buildMailBody(fields) { | ||
| const hasContent = fields.htmlContent !== undefined || fields.textContent !== undefined; | ||
| const hasTemplate = fields.templateId !== undefined; | ||
| if (fields.to === undefined || | ||
| fields.to === null || | ||
| (Array.isArray(fields.to) && fields.to.length === 0)) { | ||
| return errorReturn("`to` is required.", "validation_failed"); | ||
| } | ||
| if (!hasTemplate && (fields.sender === undefined || fields.sender === null)) { | ||
| return errorReturn("`sender` is required when not using a templateId.", "validation_failed"); | ||
| } | ||
| if (!hasTemplate && !hasContent) { | ||
| return errorReturn("Provide either `templateId` or `htmlContent`/`textContent`.", "validation_failed"); | ||
| } | ||
| const body = { | ||
| to: normalizeEmailList(fields.to), | ||
| }; | ||
| if (fields.sender !== undefined) { | ||
| body.sender = normalizeEmail(fields.sender); | ||
| } | ||
| if (fields.replyTo !== undefined) { | ||
| body.replyTo = normalizeEmail(fields.replyTo); | ||
| } | ||
| if (fields.cc !== undefined) { | ||
| body.cc = normalizeEmailList(fields.cc); | ||
| } | ||
| if (fields.bcc !== undefined) { | ||
| body.bcc = normalizeEmailList(fields.bcc); | ||
| } | ||
| const passthroughKeys = [ | ||
| "subject", | ||
| "htmlContent", | ||
| "textContent", | ||
| "templateId", | ||
| "params", | ||
| "attachment", | ||
| "tags", | ||
| "headers", | ||
| "scheduledAt", | ||
| "batchId", | ||
| "messageVersions", | ||
| ]; | ||
| for (const key of passthroughKeys) { | ||
| if (fields[key] !== undefined) { | ||
| body[key] = fields[key]; | ||
| } | ||
| } | ||
| // Coerce integer templateId. | ||
| if (body.templateId !== undefined) { | ||
| body.templateId = Number(body.templateId) | 0; | ||
| } | ||
| return body; | ||
| } | ||
| // ── Internal list-membership helper (add/remove) ─────────────────────── | ||
| async function listMembership(args, action) { | ||
| const cred = String(args[0] ?? ""); | ||
| const listId = Number(args[1] ?? 0) | 0; | ||
| const emails = args[2]; | ||
| if (listId <= 0) { | ||
| return errorReturn("List ID is required.", "validation_failed"); | ||
| } | ||
| let body; | ||
| // `{all: true}` shortcut for remove. | ||
| if (isPlainObject(emails) && | ||
| emails.all === true && | ||
| action === "remove") { | ||
| body = { all: true }; | ||
| } | ||
| else { | ||
| const list = Array.isArray(emails) | ||
| ? emails | ||
| : [emails]; | ||
| const clean = list | ||
| .map((e) => String(e ?? "")) | ||
| .filter((e) => e !== ""); | ||
| if (clean.length === 0) { | ||
| return errorReturn("At least one email is required.", "validation_failed"); | ||
| } | ||
| body = { emails: clean }; | ||
| } | ||
| const path = `contacts/lists/${listId}/contacts/${action}`; | ||
| return call(cred, "POST", path, body); | ||
| } | ||
| // ── Handlers ─────────────────────────────────────────────────────────── | ||
| const sendEmail = async (args) => { | ||
| const cred = String(args[0] ?? ""); | ||
| const fields = isPlainObject(args[1]) ? args[1] : {}; | ||
| const body = buildMailBody(fields); | ||
| if ("error" in body) | ||
| return body; | ||
| return (await call(cred, "POST", "smtp/email", body)); | ||
| }; | ||
| const sendTemplateEmail = async (args) => { | ||
| const cred = String(args[0] ?? ""); | ||
| const templateId = args[1]; | ||
| const to = args[2]; | ||
| const params = isPlainObject(args[3]) ? args[3] : {}; | ||
| const extra = isPlainObject(args[4]) ? args[4] : {}; | ||
| if (templateId === null || | ||
| templateId === undefined || | ||
| templateId === "") { | ||
| return errorReturn("`templateId` is required.", "validation_failed"); | ||
| } | ||
| if (to === null || | ||
| to === undefined || | ||
| (Array.isArray(to) && to.length === 0)) { | ||
| return errorReturn("`to` is required.", "validation_failed"); | ||
| } | ||
| const fields = { | ||
| ...extra, | ||
| templateId: Number(templateId) | 0, | ||
| to, | ||
| }; | ||
| if (Object.keys(params).length > 0) { | ||
| fields.params = params; | ||
| } | ||
| const body = buildMailBody(fields); | ||
| if ("error" in body) | ||
| return body; | ||
| return (await call(cred, "POST", "smtp/email", body)); | ||
| }; | ||
| const sendTransactionalSms = async (args) => { | ||
| const cred = String(args[0] ?? ""); | ||
| const sender = String(args[1] ?? ""); | ||
| const recipient = String(args[2] ?? ""); | ||
| const content = String(args[3] ?? ""); | ||
| const opts = isPlainObject(args[4]) ? args[4] : {}; | ||
| if (sender === "") { | ||
| return errorReturn("`sender` is required.", "validation_failed"); | ||
| } | ||
| if (recipient === "") { | ||
| return errorReturn("`recipient` is required.", "validation_failed"); | ||
| } | ||
| if (content === "") { | ||
| return errorReturn("`content` is required.", "validation_failed"); | ||
| } | ||
| const body = { | ||
| sender, | ||
| recipient, | ||
| content, | ||
| type: String(opts.type ?? "transactional"), | ||
| }; | ||
| for (const passthrough of ["tag", "webUrl", "unicodeEnabled", "organisationPrefix"]) { | ||
| if (opts[passthrough] !== undefined) { | ||
| body[passthrough] = opts[passthrough]; | ||
| } | ||
| } | ||
| return (await call(cred, "POST", "transactionalSMS/sms", body)); | ||
| }; | ||
| const createContact = async (args) => { | ||
| const cred = String(args[0] ?? ""); | ||
| const email = String(args[1] ?? ""); | ||
| const attributes = isPlainObject(args[2]) ? args[2] : null; | ||
| const listIds = Array.isArray(args[3]) ? args[3] : null; | ||
| const opts = isPlainObject(args[4]) ? args[4] : {}; | ||
| if (email === "") { | ||
| return errorReturn("Email is required.", "validation_failed"); | ||
| } | ||
| const body = { email }; | ||
| if (attributes !== null && Object.keys(attributes).length > 0) { | ||
| body.attributes = attributes; | ||
| } | ||
| if (listIds !== null && listIds.length > 0) { | ||
| body.listIds = listIds.map((v) => Number(v) | 0); | ||
| } | ||
| for (const passthrough of [ | ||
| "updateEnabled", | ||
| "emailBlacklisted", | ||
| "smsBlacklisted", | ||
| "extId", | ||
| ]) { | ||
| if (Object.prototype.hasOwnProperty.call(opts, passthrough)) { | ||
| body[passthrough] = opts[passthrough]; | ||
| } | ||
| } | ||
| return (await call(cred, "POST", "contacts", body)); | ||
| }; | ||
| const updateContact = async (args) => { | ||
| const cred = String(args[0] ?? ""); | ||
| const identifier = String(args[1] ?? ""); | ||
| const fields = isPlainObject(args[2]) ? args[2] : {}; | ||
| if (identifier === "") { | ||
| return errorReturn("Identifier (email or ID) is required.", "validation_failed"); | ||
| } | ||
| if (Object.keys(fields).length === 0) { | ||
| return errorReturn("No fields to update.", "validation_failed"); | ||
| } | ||
| const body = {}; | ||
| for (const key of [ | ||
| "attributes", | ||
| "listIds", | ||
| "unlinkListIds", | ||
| "emailBlacklisted", | ||
| "smsBlacklisted", | ||
| "extId", | ||
| "emailBlacklistedReason", | ||
| "smtpBlacklistSender", | ||
| ]) { | ||
| if (Object.prototype.hasOwnProperty.call(fields, key)) { | ||
| body[key] = fields[key]; | ||
| } | ||
| } | ||
| return (await call(cred, "PUT", `contacts/${encodeURIComponent(identifier)}`, body)); | ||
| }; | ||
| const getContact = async (args) => { | ||
| const cred = String(args[0] ?? ""); | ||
| const identifier = String(args[1] ?? ""); | ||
| if (identifier === "") { | ||
| return errorReturn("Identifier (email or ID) is required.", "validation_failed"); | ||
| } | ||
| return (await call(cred, "GET", `contacts/${encodeURIComponent(identifier)}`, null)); | ||
| }; | ||
| const deleteContact = async (args) => { | ||
| const cred = String(args[0] ?? ""); | ||
| const identifier = String(args[1] ?? ""); | ||
| if (identifier === "") { | ||
| return errorReturn("Identifier (email or ID) is required.", "validation_failed"); | ||
| } | ||
| return (await call(cred, "DELETE", `contacts/${encodeURIComponent(identifier)}`, null)); | ||
| }; | ||
| const listContacts = async (args) => { | ||
| const cred = String(args[0] ?? ""); | ||
| const opts = isPlainObject(args[1]) ? args[1] : {}; | ||
| const params = new URLSearchParams(); | ||
| if (opts.limit !== undefined && opts.limit !== "") { | ||
| params.set("limit", String(Number(opts.limit) | 0)); | ||
| } | ||
| if (opts.offset !== undefined && opts.offset !== "") { | ||
| params.set("offset", String(Number(opts.offset) | 0)); | ||
| } | ||
| if (opts.modifiedSince !== undefined && opts.modifiedSince !== "") { | ||
| params.set("modifiedSince", String(opts.modifiedSince)); | ||
| } | ||
| if (opts.createdSince !== undefined && opts.createdSince !== "") { | ||
| params.set("createdSince", String(opts.createdSince)); | ||
| } | ||
| if (opts.sort !== undefined && opts.sort !== "") { | ||
| params.set("sort", String(opts.sort)); | ||
| } | ||
| let path = opts.listId !== undefined | ||
| ? `contacts/lists/${Number(opts.listId) | 0}/contacts` | ||
| : "contacts"; | ||
| const qs = params.toString(); | ||
| if (qs) | ||
| path += `?${qs}`; | ||
| return (await call(cred, "GET", path, null)); | ||
| }; | ||
| const listLists = async (args) => { | ||
| const cred = String(args[0] ?? ""); | ||
| const opts = isPlainObject(args[1]) ? args[1] : {}; | ||
| const params = new URLSearchParams(); | ||
| if (opts.limit !== undefined && opts.limit !== "") { | ||
| params.set("limit", String(Number(opts.limit) | 0)); | ||
| } | ||
| if (opts.offset !== undefined && opts.offset !== "") { | ||
| params.set("offset", String(Number(opts.offset) | 0)); | ||
| } | ||
| if (opts.sort !== undefined && opts.sort !== "") { | ||
| params.set("sort", String(opts.sort)); | ||
| } | ||
| let path = "contacts/lists"; | ||
| const qs = params.toString(); | ||
| if (qs) | ||
| path += `?${qs}`; | ||
| return (await call(cred, "GET", path, null)); | ||
| }; | ||
| const getList = async (args) => { | ||
| const cred = String(args[0] ?? ""); | ||
| const listId = Number(args[1] ?? 0) | 0; | ||
| if (listId <= 0) { | ||
| return errorReturn("List ID is required.", "validation_failed"); | ||
| } | ||
| return (await call(cred, "GET", `contacts/lists/${listId}`, null)); | ||
| }; | ||
| const createList = async (args) => { | ||
| const cred = String(args[0] ?? ""); | ||
| const name = String(args[1] ?? ""); | ||
| const folderId = Number(args[2] ?? 0) | 0; | ||
| if (name === "") { | ||
| return errorReturn("List name is required.", "validation_failed"); | ||
| } | ||
| if (folderId <= 0) { | ||
| return errorReturn("Folder ID is required.", "validation_failed"); | ||
| } | ||
| return (await call(cred, "POST", "contacts/lists", { | ||
| name, | ||
| folderId, | ||
| })); | ||
| }; | ||
| const addContactsToList = async (args) => { | ||
| return (await listMembership(args, "add")); | ||
| }; | ||
| const removeContactsFromList = async (args) => { | ||
| return (await listMembership(args, "remove")); | ||
| }; | ||
| const listAttributes = async (args) => { | ||
| const cred = String(args[0] ?? ""); | ||
| return (await call(cred, "GET", "contacts/attributes", null)); | ||
| }; | ||
| const createAttribute = async (args) => { | ||
| const cred = String(args[0] ?? ""); | ||
| const name = String(args[1] ?? ""); | ||
| const type = String(args[2] ?? "text"); | ||
| const opts = isPlainObject(args[3]) ? args[3] : {}; | ||
| if (name === "") { | ||
| return errorReturn("Attribute name is required.", "validation_failed"); | ||
| } | ||
| const category = String(opts.category ?? "normal"); | ||
| const body = { type }; | ||
| for (const passthrough of ["enumeration", "calculatedValue"]) { | ||
| if (opts[passthrough] !== undefined) { | ||
| body[passthrough] = opts[passthrough]; | ||
| } | ||
| } | ||
| const path = `contacts/attributes/${encodeURIComponent(category)}/${encodeURIComponent(name)}`; | ||
| return (await call(cred, "POST", path, body)); | ||
| }; | ||
| const listTemplates = async (args) => { | ||
| const cred = String(args[0] ?? ""); | ||
| const opts = isPlainObject(args[1]) ? args[1] : {}; | ||
| const params = new URLSearchParams(); | ||
| if (opts.templateStatus !== undefined) { | ||
| params.set("templateStatus", opts.templateStatus ? "true" : "false"); | ||
| } | ||
| if (opts.limit !== undefined && opts.limit !== "") { | ||
| params.set("limit", String(Number(opts.limit) | 0)); | ||
| } | ||
| if (opts.offset !== undefined && opts.offset !== "") { | ||
| params.set("offset", String(Number(opts.offset) | 0)); | ||
| } | ||
| let path = "smtp/templates"; | ||
| const qs = params.toString(); | ||
| if (qs) | ||
| path += `?${qs}`; | ||
| return (await call(cred, "GET", path, null)); | ||
| }; | ||
| const getTemplate = async (args) => { | ||
| const cred = String(args[0] ?? ""); | ||
| const templateId = Number(args[1] ?? 0) | 0; | ||
| if (templateId <= 0) { | ||
| return errorReturn("Template ID is required.", "validation_failed"); | ||
| } | ||
| return (await call(cred, "GET", `smtp/templates/${templateId}`, null)); | ||
| }; | ||
| const getEmailStats = async (args) => { | ||
| const cred = String(args[0] ?? ""); | ||
| const opts = isPlainObject(args[1]) ? args[1] : {}; | ||
| const params = new URLSearchParams(); | ||
| if (opts.days !== undefined && opts.days !== "") { | ||
| params.set("days", String(Number(opts.days) | 0)); | ||
| } | ||
| if (opts.startDate !== undefined && opts.startDate !== "") { | ||
| params.set("startDate", String(opts.startDate)); | ||
| } | ||
| if (opts.endDate !== undefined && opts.endDate !== "") { | ||
| params.set("endDate", String(opts.endDate)); | ||
| } | ||
| if (opts.tag !== undefined && opts.tag !== "") { | ||
| params.set("tag", String(opts.tag)); | ||
| } | ||
| let path = "smtp/statistics/aggregatedReport"; | ||
| const qs = params.toString(); | ||
| if (qs) | ||
| path += `?${qs}`; | ||
| return (await call(cred, "GET", path, null)); | ||
| }; | ||
| // ── Exports: functions map ───────────────────────────────────────────── | ||
| export const BrevoFunctions = { | ||
| sendEmail, | ||
| sendTemplateEmail, | ||
| sendTransactionalSms, | ||
| createContact, | ||
| updateContact, | ||
| getContact, | ||
| deleteContact, | ||
| listContacts, | ||
| listLists, | ||
| getList, | ||
| createList, | ||
| addContactsToList, | ||
| removeContactsFromList, | ||
| listAttributes, | ||
| createAttribute, | ||
| listTemplates, | ||
| getTemplate, | ||
| getEmailStats, | ||
| }; | ||
| // ── Exports: credential types ────────────────────────────────────────── | ||
| export const BrevoCredentialTypes = [ | ||
| { | ||
| slug: CREDENTIAL_TYPE, | ||
| title: "Brevo", | ||
| icon: "mail", | ||
| fields: [ | ||
| { | ||
| name: "api_key", | ||
| title: "API Key", | ||
| type: "password", | ||
| required: true, | ||
| placeholder: "xkeysib-…", | ||
| description: "Create under SMTP & API → API Keys at app.brevo.com. Keys start with `xkeysib-`. Brevo sends this as a custom `api-key` header, not Authorization.", | ||
| pattern: "^xkeysib-", | ||
| }, | ||
| ], | ||
| }, | ||
| ]; | ||
| // ── Shared parameter metadata ────────────────────────────────────────── | ||
| const credentialParam = { | ||
| name: "credential", | ||
| title: "Credential", | ||
| description: "Slug of a saved `brevo` credential.", | ||
| dataType: "string", | ||
| formInputType: "resource", | ||
| required: true, | ||
| allowExpression: true, | ||
| placeholder: "my_brevo", | ||
| resource: { | ||
| type: "credential", | ||
| listFn: "credential.list", | ||
| modes: ["list", "expression"], | ||
| searchable: true, | ||
| filter: { type: CREDENTIAL_TYPE }, | ||
| }, | ||
| }; | ||
| const emailParam = { | ||
| name: "email", | ||
| title: "Email", | ||
| description: "Contact email address.", | ||
| dataType: "string", | ||
| formInputType: "text", | ||
| required: true, | ||
| allowExpression: true, | ||
| placeholder: "someone@example.com", | ||
| validation: { pattern: "^[^@\\s]+@[^@\\s]+\\.[^@\\s]+$" }, | ||
| }; | ||
| const listIdParam = { | ||
| name: "listId", | ||
| title: "List", | ||
| description: "Brevo list ID (integer). Find via `listLists`.", | ||
| dataType: "number", | ||
| formInputType: "resource", | ||
| required: true, | ||
| allowExpression: true, | ||
| placeholder: "3", | ||
| resource: { | ||
| type: "brevo_list", | ||
| listFn: "brevo.listLists", | ||
| modes: ["list", "byId", "expression"], | ||
| searchable: true, | ||
| }, | ||
| }; | ||
| const identifierParam = { | ||
| name: "identifier", | ||
| title: "Identifier", | ||
| description: "Email address OR numeric contact ID. Brevo accepts either at `/contacts/{identifier}`.", | ||
| dataType: "string", | ||
| formInputType: "text", | ||
| required: true, | ||
| allowExpression: true, | ||
| placeholder: "someone@example.com", | ||
| }; | ||
| const commonErrors = { | ||
| credential_not_found: "No credential with that slug exists in the vault.", | ||
| api_key_missing: "The credential exists but has no `api_key` field.", | ||
| transport: "Network failure calling api.brevo.com.", | ||
| brevo_error: "Brevo returned an error — see `brevo_error`.", | ||
| rate_limited: "Brevo rate limited the request.", | ||
| not_found: "The requested resource does not exist.", | ||
| duplicate_contact: "A contact with that email already exists — use `updateContact` instead.", | ||
| }; | ||
| // ── Exports: function metadata ───────────────────────────────────────── | ||
| export const BrevoFunctionMetadata = { | ||
| // ── Send ────────────────────────────────────────────────── | ||
| sendEmail: { | ||
| title: "Send transactional email", | ||
| summary: "Send a one-off transactional email via `/smtp/email`", | ||
| description: "Calls `POST /smtp/email`. Supply raw `htmlContent`/`textContent` or reference a saved `templateId`. For bulk marketing sends, use Brevo campaigns in the UI and `addContactsToList` here.", | ||
| group: "send", | ||
| action: "write", | ||
| icon: "send", | ||
| capability: "manage_options", | ||
| sideEffects: ["makes_http_call", "sends_email"], | ||
| idempotent: false, | ||
| since: "1.0.0", | ||
| tags: ["brevo", "email", "send", "transactional"], | ||
| parameters: [ | ||
| credentialParam, | ||
| { | ||
| name: "fields", | ||
| title: "Fields", | ||
| description: "Email payload. Common keys:\n to : [{email, name?}] OR 'a@b.com' (coerced)\n sender : {email, name?} OR 'sender@b.com'\n subject : string\n htmlContent : HTML body\n textContent : plain-text body\n templateId : integer — overrides html/text\n params : {…} — merged into templateId placeholders\n cc, bcc : same shape as `to`\n replyTo : {email, name?}\n attachment : [{url}] OR [{name, content (base64)}]\n tags : ['signup','welcome']\n headers : { 'X-My-Header': 'value' }\n scheduledAt : ISO8601 datetime", | ||
| dataType: "object", | ||
| formInputType: "json", | ||
| required: true, | ||
| allowExpression: true, | ||
| language: "json", | ||
| rows: 8, | ||
| placeholder: '{\n "to": [{"email": "customer@example.com"}],\n "sender": {"email": "hello@yourbrand.com", "name": "Brand"},\n "subject": "Welcome",\n "htmlContent": "<p>Thanks for signing up!</p>"\n}', | ||
| }, | ||
| ], | ||
| returnType: "object", | ||
| returnDescription: "{ messageId: string } — Brevo's unique message ID for webhook correlation.", | ||
| errors: commonErrors, | ||
| examples: [ | ||
| { | ||
| title: "Welcome email", | ||
| code: 'brevo.sendEmail "my_brevo" {\n to: [{email: {{ user.email }}, name: {{ user.name }}}],\n sender: {email: "hello@brand.com", name: "Brand"},\n subject: "Welcome to Brand",\n htmlContent: "<h1>Hi {{ user.name }}</h1><p>Glad you\'re here.</p>"\n}', | ||
| }, | ||
| ], | ||
| example: 'brevo.sendEmail "my_brevo" {to:[{email:"a@b.com"}], sender:{email:"x@y.com"}, subject:"hi", htmlContent:"<p>hello</p>"}', | ||
| }, | ||
| sendTemplateEmail: { | ||
| title: "Send template email", | ||
| summary: "Send using a saved Brevo transactional template", | ||
| description: "Shortcut over `sendEmail` — sets `templateId` and `params` for you. The template design lives in Brevo; you supply the data and recipient.\n\nTemplate placeholders use `{{ params.NAME }}` syntax inside Brevo.", | ||
| group: "send", | ||
| action: "write", | ||
| icon: "mail-plus", | ||
| capability: "manage_options", | ||
| sideEffects: ["makes_http_call", "sends_email"], | ||
| idempotent: false, | ||
| since: "1.0.0", | ||
| tags: ["brevo", "template", "email"], | ||
| parameters: [ | ||
| credentialParam, | ||
| { | ||
| name: "templateId", | ||
| title: "Template ID", | ||
| description: "Numeric ID of a saved transactional template. Find via `listTemplates`.", | ||
| dataType: "number", | ||
| formInputType: "resource", | ||
| required: true, | ||
| allowExpression: true, | ||
| placeholder: "42", | ||
| resource: { | ||
| type: "brevo_template", | ||
| listFn: "brevo.listTemplates", | ||
| modes: ["list", "byId", "expression"], | ||
| searchable: true, | ||
| }, | ||
| }, | ||
| { | ||
| name: "to", | ||
| title: "Recipients", | ||
| description: "Array of `{email, name?}` OR a single email string (coerced).", | ||
| dataType: "any", | ||
| formInputType: "json", | ||
| required: true, | ||
| allowExpression: true, | ||
| language: "json", | ||
| rows: 3, | ||
| }, | ||
| { | ||
| name: "params", | ||
| title: "Params", | ||
| description: "Key-value map substituted into `{{ params.KEY }}` placeholders in the template.", | ||
| dataType: "object", | ||
| formInputType: "json", | ||
| required: false, | ||
| allowExpression: true, | ||
| language: "json", | ||
| rows: 5, | ||
| }, | ||
| { | ||
| name: "extra", | ||
| title: "Extra", | ||
| description: "Optional passthrough fields: `sender`, `replyTo`, `cc`, `bcc`, `attachment`, `tags`, `headers`, `scheduledAt`.", | ||
| dataType: "object", | ||
| formInputType: "json", | ||
| required: false, | ||
| allowExpression: true, | ||
| language: "json", | ||
| rows: 4, | ||
| advanced: true, | ||
| }, | ||
| ], | ||
| returnType: "object", | ||
| returnDescription: "{ messageId: string }", | ||
| errors: commonErrors, | ||
| example: 'brevo.sendTemplateEmail "my_brevo" 42 [{email:"a@b.com"}] {FIRSTNAME:"Ada"}', | ||
| }, | ||
| sendTransactionalSms: { | ||
| title: "Send transactional SMS", | ||
| summary: "Send a one-off SMS via `/transactionalSMS/sms`", | ||
| description: "Calls `POST /transactionalSMS/sms`. Sender must be a registered alphanumeric sender ID (max 11 chars) or a verified phone number on your account. Message content is capped at 160 GSM-7 characters per segment.", | ||
| group: "send", | ||
| action: "write", | ||
| icon: "message-square", | ||
| capability: "manage_options", | ||
| sideEffects: ["makes_http_call", "costs_money"], | ||
| idempotent: false, | ||
| since: "1.0.0", | ||
| tags: ["brevo", "sms", "send", "transactional"], | ||
| parameters: [ | ||
| credentialParam, | ||
| { | ||
| name: "sender", | ||
| title: "Sender", | ||
| description: "Alphanumeric sender ID (max 11 chars) or a verified E.164 phone number.", | ||
| dataType: "string", | ||
| formInputType: "text", | ||
| required: true, | ||
| allowExpression: true, | ||
| placeholder: "MyBrand", | ||
| }, | ||
| { | ||
| name: "recipient", | ||
| title: "Recipient", | ||
| description: "Recipient phone number in E.164 format (e.g. `+15551234567`).", | ||
| dataType: "string", | ||
| formInputType: "text", | ||
| required: true, | ||
| allowExpression: true, | ||
| placeholder: "+15551234567", | ||
| validation: { pattern: "^\\+[1-9]\\d{6,14}$" }, | ||
| }, | ||
| { | ||
| name: "content", | ||
| title: "Content", | ||
| description: "SMS body (max 160 GSM-7 chars per segment; emoji/unicode shortens that).", | ||
| dataType: "string", | ||
| formInputType: "textarea", | ||
| required: true, | ||
| allowExpression: true, | ||
| rows: 3, | ||
| }, | ||
| { | ||
| name: "options", | ||
| title: "Options", | ||
| description: "Optional keys:\n type : 'transactional' (default) | 'marketing'\n tag : string — for stats grouping\n webUrl : string — click-tracking URL", | ||
| dataType: "object", | ||
| formInputType: "json", | ||
| required: false, | ||
| allowExpression: true, | ||
| language: "json", | ||
| rows: 3, | ||
| advanced: true, | ||
| }, | ||
| ], | ||
| returnType: "object", | ||
| returnDescription: "{ reference, messageId, smsCount, usedCredits, remainingCredits }", | ||
| errors: commonErrors, | ||
| example: 'brevo.sendTransactionalSms "my_brevo" "MyBrand" "+15551234567" "Your code is 1234"', | ||
| }, | ||
| // ── Contacts ────────────────────────────────────────────── | ||
| createContact: { | ||
| title: "Create contact", | ||
| summary: "Create a new marketing contact", | ||
| description: "Calls `POST /contacts`. Returns HTTP 400 `duplicate_parameter` if the email already exists — use `updateContact` for upserts.", | ||
| group: "contacts", | ||
| action: "write", | ||
| icon: "user-plus", | ||
| capability: "manage_options", | ||
| sideEffects: ["makes_http_call"], | ||
| idempotent: false, | ||
| since: "1.0.0", | ||
| tags: ["brevo", "contact", "create"], | ||
| parameters: [ | ||
| credentialParam, | ||
| emailParam, | ||
| { | ||
| name: "attributes", | ||
| title: "Attributes", | ||
| description: "UPPERCASE attribute map (Brevo convention):\n { FIRSTNAME: 'Ada', LASTNAME: 'Lovelace', SMS: '+15551234567', BIRTHDAY: '1815-12-10' }\nDefine new attributes with `createAttribute` first.", | ||
| dataType: "object", | ||
| formInputType: "json", | ||
| required: false, | ||
| allowExpression: true, | ||
| language: "json", | ||
| rows: 4, | ||
| }, | ||
| { | ||
| name: "listIds", | ||
| title: "List IDs", | ||
| description: "Array of numeric list IDs to add the contact to.", | ||
| dataType: "array", | ||
| formInputType: "json", | ||
| required: false, | ||
| allowExpression: true, | ||
| language: "json", | ||
| rows: 2, | ||
| }, | ||
| { | ||
| name: "options", | ||
| title: "Options", | ||
| description: "Optional flags:\n updateEnabled : true → upsert (update if exists)\n emailBlacklisted : true → mark unsubscribed from the start\n smsBlacklisted : true\n extId : arbitrary external ID for your system", | ||
| dataType: "object", | ||
| formInputType: "json", | ||
| required: false, | ||
| allowExpression: true, | ||
| language: "json", | ||
| rows: 3, | ||
| advanced: true, | ||
| }, | ||
| ], | ||
| returnType: "object", | ||
| returnDescription: "{ id: int } — the new contact ID.", | ||
| errors: commonErrors, | ||
| examples: [ | ||
| { | ||
| title: "Subscribe form submitter to list 3", | ||
| code: 'brevo.createContact "my_brevo" {{ form.email }} {FIRSTNAME: {{ form.first_name }}} [3] {updateEnabled: true}', | ||
| }, | ||
| ], | ||
| example: 'brevo.createContact "my_brevo" "a@b.com" {FIRSTNAME:"Ada"} [3]', | ||
| }, | ||
| updateContact: { | ||
| title: "Update contact", | ||
| summary: "Patch attributes / list membership on an existing contact", | ||
| description: "Calls `PUT /contacts/{identifier}`. The identifier is the email address OR numeric contact ID. Only fields supplied are changed.", | ||
| group: "contacts", | ||
| action: "write", | ||
| icon: "edit-3", | ||
| capability: "manage_options", | ||
| sideEffects: ["makes_http_call"], | ||
| idempotent: true, | ||
| since: "1.0.0", | ||
| tags: ["brevo", "contact", "update"], | ||
| parameters: [ | ||
| credentialParam, | ||
| identifierParam, | ||
| { | ||
| name: "fields", | ||
| title: "Fields", | ||
| description: "Recognized keys:\n attributes : { FIRSTNAME: 'Ada', … }\n listIds : [3,7] — add to these lists\n unlinkListIds : [12] — remove from these lists\n emailBlacklisted : bool — mark unsubscribed\n smsBlacklisted : bool\n extId : string", | ||
| dataType: "object", | ||
| formInputType: "json", | ||
| required: true, | ||
| allowExpression: true, | ||
| language: "json", | ||
| rows: 5, | ||
| }, | ||
| ], | ||
| returnType: "object", | ||
| returnDescription: "{ ok: true } — Brevo returns 204 No Content.", | ||
| errors: commonErrors, | ||
| example: 'brevo.updateContact "my_brevo" "a@b.com" {attributes:{FIRSTNAME:"Ada"}, listIds:[3]}', | ||
| }, | ||
| getContact: { | ||
| title: "Get contact", | ||
| summary: "Look up a contact by email or ID", | ||
| description: "Calls `GET /contacts/{identifier}`.", | ||
| group: "contacts", | ||
| action: "read", | ||
| icon: "user", | ||
| capability: "manage_options", | ||
| sideEffects: ["makes_http_call"], | ||
| idempotent: true, | ||
| since: "1.0.0", | ||
| tags: ["brevo", "contact", "get"], | ||
| parameters: [credentialParam, identifierParam], | ||
| returnType: "object", | ||
| returnDescription: "{ id, email, attributes, listIds, listUnsubscribed, createdAt, modifiedAt, … }", | ||
| errors: commonErrors, | ||
| example: 'brevo.getContact "my_brevo" "a@b.com"', | ||
| }, | ||
| deleteContact: { | ||
| title: "Delete contact", | ||
| summary: "Permanently delete a contact", | ||
| description: "Calls `DELETE /contacts/{identifier}`. Irreversible. To unsubscribe without deleting, use `updateContact` with `emailBlacklisted: true`.", | ||
| group: "contacts", | ||
| action: "delete", | ||
| icon: "trash-2", | ||
| capability: "manage_options", | ||
| sideEffects: ["makes_http_call"], | ||
| idempotent: true, | ||
| since: "1.0.0", | ||
| tags: ["brevo", "contact", "delete"], | ||
| parameters: [credentialParam, identifierParam], | ||
| returnType: "object", | ||
| returnDescription: "{ ok: true }", | ||
| errors: commonErrors, | ||
| example: 'brevo.deleteContact "my_brevo" "a@b.com"', | ||
| }, | ||
| listContacts: { | ||
| title: "List contacts", | ||
| summary: "List marketing contacts (paginated)", | ||
| description: "Calls `GET /contacts`. Max 1000 per page. Use `listId` to scope to one list.", | ||
| group: "contacts", | ||
| action: "query", | ||
| icon: "list", | ||
| capability: "manage_options", | ||
| sideEffects: ["makes_http_call"], | ||
| idempotent: true, | ||
| since: "1.0.0", | ||
| tags: ["brevo", "contact", "list"], | ||
| parameters: [ | ||
| credentialParam, | ||
| { | ||
| name: "options", | ||
| title: "Options", | ||
| description: "Recognized keys:\n limit : 1–1000 (default 50)\n offset : pagination offset\n modifiedSince : ISO8601 — only contacts updated after\n createdSince : ISO8601\n listId : scope to one list (integer)\n sort : 'asc' | 'desc' (by modifiedAt)", | ||
| dataType: "object", | ||
| formInputType: "json", | ||
| required: false, | ||
| allowExpression: true, | ||
| language: "json", | ||
| rows: 4, | ||
| advanced: true, | ||
| }, | ||
| ], | ||
| returnType: "object", | ||
| returnDescription: "{ contacts: [], count: int }", | ||
| errors: commonErrors, | ||
| example: 'brevo.listContacts "my_brevo" {limit: 100, listId: 3}', | ||
| }, | ||
| // ── Lists ───────────────────────────────────────────────── | ||
| listLists: { | ||
| title: "List lists", | ||
| summary: "Retrieve all contact lists", | ||
| description: "Calls `GET /contacts/lists`. Up to 50 per page — paginate via `offset` if you have more.", | ||
| group: "lists", | ||
| action: "query", | ||
| icon: "list", | ||
| capability: "manage_options", | ||
| sideEffects: ["makes_http_call"], | ||
| idempotent: true, | ||
| since: "1.0.0", | ||
| tags: ["brevo", "list", "audience"], | ||
| parameters: [ | ||
| credentialParam, | ||
| { | ||
| name: "options", | ||
| title: "Options", | ||
| description: "Optional keys: `limit` (1–50), `offset`, `sort` ('asc'|'desc').", | ||
| dataType: "object", | ||
| formInputType: "json", | ||
| required: false, | ||
| allowExpression: true, | ||
| language: "json", | ||
| rows: 3, | ||
| advanced: true, | ||
| }, | ||
| ], | ||
| returnType: "object", | ||
| returnDescription: "{ lists: [{ id, name, totalSubscribers, folderId }], count: int }", | ||
| errors: commonErrors, | ||
| example: 'brevo.listLists "my_brevo"', | ||
| }, | ||
| getList: { | ||
| title: "Get list", | ||
| summary: "Retrieve a single list by ID", | ||
| description: "Calls `GET /contacts/lists/{listId}`.", | ||
| group: "lists", | ||
| action: "read", | ||
| icon: "folder", | ||
| capability: "manage_options", | ||
| sideEffects: ["makes_http_call"], | ||
| idempotent: true, | ||
| since: "1.0.0", | ||
| tags: ["brevo", "list"], | ||
| parameters: [credentialParam, listIdParam], | ||
| returnType: "object", | ||
| errors: commonErrors, | ||
| example: 'brevo.getList "my_brevo" 3', | ||
| }, | ||
| createList: { | ||
| title: "Create list", | ||
| summary: "Create a new contact list under a folder", | ||
| description: "Calls `POST /contacts/lists`. A folder ID is required — find or create folders under Contacts → Lists → Folders in the Brevo UI.", | ||
| group: "lists", | ||
| action: "write", | ||
| icon: "folder-plus", | ||
| capability: "manage_options", | ||
| sideEffects: ["makes_http_call"], | ||
| idempotent: false, | ||
| since: "1.0.0", | ||
| tags: ["brevo", "list", "create"], | ||
| parameters: [ | ||
| credentialParam, | ||
| { | ||
| name: "name", | ||
| title: "Name", | ||
| description: "List name (max 100 chars).", | ||
| dataType: "string", | ||
| formInputType: "text", | ||
| required: true, | ||
| allowExpression: true, | ||
| placeholder: "Newsletter subscribers", | ||
| }, | ||
| { | ||
| name: "folderId", | ||
| title: "Folder ID", | ||
| description: "Parent folder ID (integer). Required by Brevo.", | ||
| dataType: "number", | ||
| formInputType: "number", | ||
| required: true, | ||
| allowExpression: true, | ||
| placeholder: "1", | ||
| }, | ||
| ], | ||
| returnType: "object", | ||
| returnDescription: "{ id: int }", | ||
| errors: commonErrors, | ||
| example: 'brevo.createList "my_brevo" "Newsletter" 1', | ||
| }, | ||
| addContactsToList: { | ||
| title: "Add contacts to list", | ||
| summary: "Subscribe one or more emails (or IDs) to a list", | ||
| description: "Calls `POST /contacts/lists/{listId}/contacts/add`. Up to 150 emails per call. Contacts must already exist — create them first with `createContact {updateEnabled: true}`.", | ||
| group: "lists", | ||
| action: "write", | ||
| icon: "user-plus", | ||
| capability: "manage_options", | ||
| sideEffects: ["makes_http_call"], | ||
| idempotent: true, | ||
| since: "1.0.0", | ||
| tags: ["brevo", "list", "subscribe"], | ||
| parameters: [ | ||
| credentialParam, | ||
| listIdParam, | ||
| { | ||
| name: "emails", | ||
| title: "Emails", | ||
| description: "Array of email addresses OR a single email string. Max 150 per call.", | ||
| dataType: "any", | ||
| formInputType: "json", | ||
| required: true, | ||
| allowExpression: true, | ||
| language: "json", | ||
| rows: 4, | ||
| }, | ||
| ], | ||
| returnType: "object", | ||
| returnDescription: "{ contacts: { success: [], failure: [] } }", | ||
| errors: commonErrors, | ||
| example: 'brevo.addContactsToList "my_brevo" 3 ["a@b.com","c@d.com"]', | ||
| }, | ||
| removeContactsFromList: { | ||
| title: "Remove contacts from list", | ||
| summary: "Unsubscribe emails from a list without deleting them", | ||
| description: "Calls `POST /contacts/lists/{listId}/contacts/remove`. Contacts remain in your account; they're just removed from this list.", | ||
| group: "lists", | ||
| action: "delete", | ||
| icon: "user-minus", | ||
| capability: "manage_options", | ||
| sideEffects: ["makes_http_call"], | ||
| idempotent: true, | ||
| since: "1.0.0", | ||
| tags: ["brevo", "list", "unsubscribe"], | ||
| parameters: [ | ||
| credentialParam, | ||
| listIdParam, | ||
| { | ||
| name: "emails", | ||
| title: "Emails", | ||
| description: "Array of email addresses OR a single email string. Pass `{all: true}` to remove every contact from the list.", | ||
| dataType: "any", | ||
| formInputType: "json", | ||
| required: true, | ||
| allowExpression: true, | ||
| language: "json", | ||
| rows: 4, | ||
| }, | ||
| ], | ||
| returnType: "object", | ||
| errors: commonErrors, | ||
| example: 'brevo.removeContactsFromList "my_brevo" 3 ["a@b.com"]', | ||
| }, | ||
| // ── Attributes ──────────────────────────────────────────── | ||
| listAttributes: { | ||
| title: "List attributes", | ||
| summary: "List all custom contact attributes", | ||
| description: "Calls `GET /contacts/attributes`. Attributes are Brevo's equivalent of merge fields / custom properties — defined per account, UPPERCASE by convention.", | ||
| group: "attributes", | ||
| action: "query", | ||
| icon: "list", | ||
| capability: "manage_options", | ||
| sideEffects: ["makes_http_call"], | ||
| idempotent: true, | ||
| since: "1.0.0", | ||
| tags: ["brevo", "attribute", "merge-field"], | ||
| parameters: [credentialParam], | ||
| returnType: "object", | ||
| returnDescription: "{ attributes: [{ name, category, type, enumeration?, … }] }", | ||
| errors: commonErrors, | ||
| example: 'brevo.listAttributes "my_brevo"', | ||
| }, | ||
| createAttribute: { | ||
| title: "Create attribute", | ||
| summary: "Define a new custom contact attribute", | ||
| description: "Calls `POST /contacts/attributes/{category}/{name}`. Category is one of `normal`, `transactional`, `category`, `calculated`, `global`. Most custom fields use `normal`.", | ||
| group: "attributes", | ||
| action: "write", | ||
| icon: "plus-circle", | ||
| capability: "manage_options", | ||
| sideEffects: ["makes_http_call"], | ||
| idempotent: false, | ||
| since: "1.0.0", | ||
| tags: ["brevo", "attribute", "create"], | ||
| parameters: [ | ||
| credentialParam, | ||
| { | ||
| name: "name", | ||
| title: "Name", | ||
| description: "Attribute name — UPPERCASE by Brevo convention (e.g. `LOYALTY_TIER`, `SIGNUP_SOURCE`).", | ||
| dataType: "string", | ||
| formInputType: "text", | ||
| required: true, | ||
| allowExpression: true, | ||
| placeholder: "LOYALTY_TIER", | ||
| validation: { pattern: "^[A-Z][A-Z0-9_]*$" }, | ||
| }, | ||
| { | ||
| name: "type", | ||
| title: "Type", | ||
| description: "Data type:\n text : string\n boolean : true/false\n date : YYYY-MM-DD\n float : decimal number\n id : integer\n category : enumeration (use `category` endpoint)", | ||
| dataType: "string", | ||
| formInputType: "select", | ||
| required: true, | ||
| allowExpression: true, | ||
| defaultValue: "text", | ||
| }, | ||
| { | ||
| name: "options", | ||
| title: "Options", | ||
| description: "Optional keys:\n category : 'normal' (default) | 'transactional' | 'category' | 'calculated' | 'global'\n enumeration : [{value: 1, label: 'Gold'}, …] — for `category` type\n calculatedValue: expression — for `calculated` category", | ||
| dataType: "object", | ||
| formInputType: "json", | ||
| required: false, | ||
| allowExpression: true, | ||
| language: "json", | ||
| rows: 4, | ||
| advanced: true, | ||
| }, | ||
| ], | ||
| returnType: "object", | ||
| returnDescription: "{ ok: true } — Brevo returns 204.", | ||
| errors: commonErrors, | ||
| example: 'brevo.createAttribute "my_brevo" "LOYALTY_TIER" "text"', | ||
| }, | ||
| // ── Templates ───────────────────────────────────────────── | ||
| listTemplates: { | ||
| title: "List templates", | ||
| summary: "List saved transactional email templates", | ||
| description: "Calls `GET /smtp/templates`. Only templates with `isActive: true` can be used with `sendTemplateEmail`.", | ||
| group: "templates", | ||
| action: "query", | ||
| icon: "file-text", | ||
| capability: "manage_options", | ||
| sideEffects: ["makes_http_call"], | ||
| idempotent: true, | ||
| since: "1.0.0", | ||
| tags: ["brevo", "template", "list"], | ||
| parameters: [ | ||
| credentialParam, | ||
| { | ||
| name: "options", | ||
| title: "Options", | ||
| description: "Optional keys:\n templateStatus : true | false — filter by isActive\n limit : 1–50 (default 50)\n offset : pagination offset", | ||
| dataType: "object", | ||
| formInputType: "json", | ||
| required: false, | ||
| allowExpression: true, | ||
| language: "json", | ||
| rows: 3, | ||
| advanced: true, | ||
| }, | ||
| ], | ||
| returnType: "object", | ||
| returnDescription: "{ templates: [{ id, name, subject, isActive, testSent, sender, … }], count: int }", | ||
| errors: commonErrors, | ||
| example: 'brevo.listTemplates "my_brevo" {templateStatus: true}', | ||
| }, | ||
| getTemplate: { | ||
| title: "Get template", | ||
| summary: "Retrieve a single transactional template", | ||
| description: "Calls `GET /smtp/templates/{templateId}`.", | ||
| group: "templates", | ||
| action: "read", | ||
| icon: "file-text", | ||
| capability: "manage_options", | ||
| sideEffects: ["makes_http_call"], | ||
| idempotent: true, | ||
| since: "1.0.0", | ||
| tags: ["brevo", "template"], | ||
| parameters: [ | ||
| credentialParam, | ||
| { | ||
| name: "templateId", | ||
| title: "Template ID", | ||
| description: "Numeric template ID.", | ||
| dataType: "number", | ||
| formInputType: "number", | ||
| required: true, | ||
| allowExpression: true, | ||
| placeholder: "42", | ||
| }, | ||
| ], | ||
| returnType: "object", | ||
| errors: commonErrors, | ||
| example: 'brevo.getTemplate "my_brevo" 42', | ||
| }, | ||
| // ── Reports ─────────────────────────────────────────────── | ||
| getEmailStats: { | ||
| title: "Get email stats", | ||
| summary: "Aggregated transactional email stats", | ||
| description: "Calls `GET /smtp/statistics/aggregatedReport`. Returns `requests`, `delivered`, `hardBounces`, `softBounces`, `clicks`, `uniqueClicks`, `opens`, `uniqueOpens`, `spamReports`, `blocked`, `invalid`, `unsubscribed`.\n\nUse `days` for a rolling window or `startDate`/`endDate` for a fixed range.", | ||
| group: "reports", | ||
| action: "read", | ||
| icon: "bar-chart-3", | ||
| capability: "manage_options", | ||
| sideEffects: ["makes_http_call"], | ||
| idempotent: true, | ||
| since: "1.0.0", | ||
| tags: ["brevo", "stats", "reports"], | ||
| parameters: [ | ||
| credentialParam, | ||
| { | ||
| name: "options", | ||
| title: "Options", | ||
| description: "Optional keys:\n days : int — rolling window (e.g. 7 = last 7 days)\n startDate : YYYY-MM-DD\n endDate : YYYY-MM-DD\n tag : filter by a specific tag", | ||
| dataType: "object", | ||
| formInputType: "json", | ||
| required: false, | ||
| allowExpression: true, | ||
| language: "json", | ||
| rows: 4, | ||
| }, | ||
| ], | ||
| returnType: "object", | ||
| returnDescription: "{ requests, delivered, hardBounces, softBounces, clicks, uniqueClicks, opens, uniqueOpens, spamReports, blocked, invalid, unsubscribed }", | ||
| errors: commonErrors, | ||
| example: 'brevo.getEmailStats "my_brevo" {days: 7}', | ||
| }, | ||
| }; | ||
| // ── Exports: module metadata ─────────────────────────────────────────── | ||
| export const BrevoModuleMetadata = { | ||
| slug: "brevo", | ||
| title: "Brevo", | ||
| summary: "Transactional email + SMS + marketing contacts on Brevo (formerly Sendinblue)", | ||
| description: "Brevo is a European email + SMS marketing platform, a rival to Mailchimp and SendGrid.\n\nUse `sendEmail` for one-off transactional mail (welcome, receipts) or `sendTemplateEmail` to render a saved design with `params` substitutions. For newsletters, upsert subscribers with `createContact` / `updateContact` (Brevo's email-keyed API accepts an email address *or* a numeric contact ID) and group them with `addContactsToList`.\n\nBrevo uses UPPERCASE attribute names by convention — `FIRSTNAME`, `LASTNAME`, `SMS`, `BIRTHDAY`. Define new ones with `createAttribute`.", | ||
| category: "marketing", | ||
| icon: "icon.svg", | ||
| color: "#0B996E", | ||
| version: "0.2.0", | ||
| docsUrl: "https://docs.robinpath.com/modules/brevo", | ||
| status: "stable", | ||
| requires: [], | ||
| minNodeVersion: "18.0.0", | ||
| credentialsType: CREDENTIAL_TYPE, | ||
| operationGroups: { | ||
| send: { | ||
| title: "Send", | ||
| description: "Transactional email + SMS.", | ||
| order: 1, | ||
| }, | ||
| contacts: { | ||
| title: "Contacts", | ||
| description: "Marketing contact CRUD.", | ||
| order: 2, | ||
| }, | ||
| lists: { | ||
| title: "Lists", | ||
| description: "Audience segmentation.", | ||
| order: 3, | ||
| }, | ||
| attributes: { | ||
| title: "Attributes", | ||
| description: "Custom contact fields.", | ||
| order: 4, | ||
| }, | ||
| templates: { | ||
| title: "Templates", | ||
| description: "Saved transactional designs.", | ||
| order: 5, | ||
| }, | ||
| reports: { | ||
| title: "Reports", | ||
| description: "Aggregated email stats.", | ||
| order: 6, | ||
| }, | ||
| }, | ||
| methods: Object.keys(BrevoFunctions), | ||
| }; | ||
| //# sourceMappingURL=brevo.js.map |
| {"version":3,"file":"brevo.js","sourceRoot":"","sources":["../src/brevo.ts"],"names":[],"mappings":"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"} |
| import type { ModuleAdapter } from "@robinpath/core"; | ||
| declare const BrevoModule: ModuleAdapter; | ||
| export default BrevoModule; | ||
| export { BrevoModule }; | ||
| export { BrevoFunctions, BrevoFunctionMetadata, BrevoModuleMetadata, BrevoCredentialTypes, configureBrevo, } from "./brevo.js"; | ||
| //# sourceMappingURL=index.d.ts.map |
| {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AASrD,QAAA,MAAM,WAAW,EAAE,aAQlB,CAAC;AAEF,eAAe,WAAW,CAAC;AAC3B,OAAO,EAAE,WAAW,EAAE,CAAC;AACvB,OAAO,EACL,cAAc,EACd,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,EACpB,cAAc,GACf,MAAM,YAAY,CAAC"} |
| import { BrevoFunctions, BrevoFunctionMetadata, BrevoModuleMetadata, BrevoCredentialTypes, configureBrevo, } from "./brevo.js"; | ||
| const BrevoModule = { | ||
| name: "brevo", | ||
| functions: BrevoFunctions, | ||
| functionMetadata: BrevoFunctionMetadata, | ||
| moduleMetadata: BrevoModuleMetadata, | ||
| credentialTypes: BrevoCredentialTypes, | ||
| configure: configureBrevo, | ||
| global: false, | ||
| }; | ||
| export default BrevoModule; | ||
| export { BrevoModule }; | ||
| export { BrevoFunctions, BrevoFunctionMetadata, BrevoModuleMetadata, BrevoCredentialTypes, configureBrevo, } from "./brevo.js"; | ||
| //# sourceMappingURL=index.js.map |
| {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,cAAc,EACd,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,EACpB,cAAc,GACf,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,GAAkB;IACjC,IAAI,EAAE,OAAO;IACb,SAAS,EAAE,cAAc;IACzB,gBAAgB,EAAE,qBAAqB;IACvC,cAAc,EAAE,mBAAmB;IACnC,eAAe,EAAE,oBAAoB;IACrC,SAAS,EAAE,cAAc;IACzB,MAAM,EAAE,KAAK;CACd,CAAC;AAEF,eAAe,WAAW,CAAC;AAC3B,OAAO,EAAE,WAAW,EAAE,CAAC;AACvB,OAAO,EACL,cAAc,EACd,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,EACpB,cAAc,GACf,MAAM,YAAY,CAAC"} |
+21
-8
| { | ||
| "name": "@robinpath/brevo", | ||
| "version": "0.1.2", | ||
| "version": "0.3.0", | ||
| "publishConfig": { | ||
@@ -23,12 +23,19 @@ "access": "public" | ||
| "peerDependencies": { | ||
| "@robinpath/core": ">=0.20.0" | ||
| "@robinpath/core": ">=0.40.0" | ||
| }, | ||
| "devDependencies": { | ||
| "@robinpath/core": "^0.30.1", | ||
| "@robinpath/core": "^0.40.0", | ||
| "typescript": "^5.6.0" | ||
| }, | ||
| "description": "Brevo module for RobinPath.", | ||
| "description": "Brevo (formerly Sendinblue) — transactional email, SMS, contacts, lists, attributes, and transactional templates. Uses the encrypted credential vault for API keys.", | ||
| "keywords": [ | ||
| "brevo", | ||
| "email marketing" | ||
| "email marketing", | ||
| "sendinblue", | ||
| "email", | ||
| "sms", | ||
| "transactional", | ||
| "marketing", | ||
| "newsletter", | ||
| "contacts" | ||
| ], | ||
@@ -38,7 +45,13 @@ "license": "MIT", | ||
| "category": "email-marketing", | ||
| "type": "integration", | ||
| "auth": "api-key", | ||
| "type": "module", | ||
| "auth": "credential-vault", | ||
| "functionCount": 19, | ||
| "baseUrl": "https://api.brevo.com" | ||
| "baseUrl": "https://api.brevo.com", | ||
| "language": "nodejs", | ||
| "platforms": [ | ||
| "cloud", | ||
| "cli", | ||
| "desktop" | ||
| ] | ||
| } | ||
| } |
+1
-1
@@ -22,3 +22,3 @@ # @robinpath/brevo | ||
| ```bash | ||
| npm install @robinpath/brevo | ||
| robinpath add @robinpath/brevo | ||
| ``` | ||
@@ -25,0 +25,0 @@ |
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Network access
Supply chain riskThis module accesses the network.
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Empty package
Supply chain riskPackage does not contain any code. It may be removed, is name squatting, or the result of a faulty package publish.
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
98052
2407.08%10
400%1377
Infinity%2
100%