🚀 Socket Launch Week Day 5:Introducing Repository Access Permissions and Custom Roles.Learn more
Sign In

@robinpath/brevo

Package Overview
Dependencies
Maintainers
4
Versions
4
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@robinpath/brevo - npm Package Compare versions

Comparing version
0.1.2
to
0.3.0
+29
dist/brevo.d.ts
/**
* 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"}
/**
* 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"
]
}
}

@@ -22,3 +22,3 @@ # @robinpath/brevo

```bash
npm install @robinpath/brevo
robinpath add @robinpath/brevo
```

@@ -25,0 +25,0 @@