@robinpath/pipedrive
Advanced tools
| import type { ModuleAdapter } from "@robinpath/core"; | ||
| declare const PipedriveModule: ModuleAdapter; | ||
| export default PipedriveModule; | ||
| export { PipedriveModule }; | ||
| export { PipedriveFunctions, PipedriveFunctionMetadata, PipedriveModuleMetadata, PipedriveCredentialTypes, configurePipedrive, } from "./pipedrive.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,eAAe,EAAE,aAQtB,CAAC;AAEF,eAAe,eAAe,CAAC;AAC/B,OAAO,EAAE,eAAe,EAAE,CAAC;AAC3B,OAAO,EACL,kBAAkB,EAClB,yBAAyB,EACzB,uBAAuB,EACvB,wBAAwB,EACxB,kBAAkB,GACnB,MAAM,gBAAgB,CAAC"} |
| import { PipedriveFunctions, PipedriveFunctionMetadata, PipedriveModuleMetadata, PipedriveCredentialTypes, configurePipedrive, } from "./pipedrive.js"; | ||
| const PipedriveModule = { | ||
| name: "pipedrive", | ||
| functions: PipedriveFunctions, | ||
| functionMetadata: PipedriveFunctionMetadata, | ||
| moduleMetadata: PipedriveModuleMetadata, | ||
| credentialTypes: PipedriveCredentialTypes, | ||
| configure: configurePipedrive, | ||
| global: false, | ||
| }; | ||
| export default PipedriveModule; | ||
| export { PipedriveModule }; | ||
| export { PipedriveFunctions, PipedriveFunctionMetadata, PipedriveModuleMetadata, PipedriveCredentialTypes, configurePipedrive, } from "./pipedrive.js"; | ||
| //# sourceMappingURL=index.js.map |
| {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,kBAAkB,EAClB,yBAAyB,EACzB,uBAAuB,EACvB,wBAAwB,EACxB,kBAAkB,GACnB,MAAM,gBAAgB,CAAC;AAExB,MAAM,eAAe,GAAkB;IACrC,IAAI,EAAE,WAAW;IACjB,SAAS,EAAE,kBAAkB;IAC7B,gBAAgB,EAAE,yBAAyB;IAC3C,cAAc,EAAE,uBAAuB;IACvC,eAAe,EAAE,wBAAwB;IACzC,SAAS,EAAE,kBAAkB;IAC7B,MAAM,EAAE,KAAK;CACd,CAAC;AAEF,eAAe,eAAe,CAAC;AAC/B,OAAO,EAAE,eAAe,EAAE,CAAC;AAC3B,OAAO,EACL,kBAAkB,EAClB,yBAAyB,EACzB,uBAAuB,EACvB,wBAAwB,EACxB,kBAAkB,GACnB,MAAM,gBAAgB,CAAC"} |
| /** | ||
| * RobinPath Pipedrive Module (Node port) | ||
| * | ||
| * Pipedrive CRM integration via API v1 — deals and persons. Mirror of | ||
| * packages/php/pipedrive/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. | ||
| * | ||
| * Pipedrive uses simple API token authentication, but every account lives at | ||
| * its own subdomain (`https://{company}.pipedrive.com`). The `pipedrive_api_key` | ||
| * credential therefore stores both the token and the company-domain slug. | ||
| * | ||
| * Authentication is passed as the `?api_token=` query parameter on every | ||
| * request — Pipedrive API v1 does not support a Bearer header. The module | ||
| * resolves the token + domain at call time from the credential vault via the | ||
| * injected ModuleHost. | ||
| * | ||
| * Credential type declared by this module: | ||
| * - pipedrive_api_key : { apiKey, companyDomain } | ||
| */ | ||
| import type { BuiltinHandler, CredentialTypeSchema, FunctionMetadata, ModuleHost, ModuleMetadata } from "@robinpath/core"; | ||
| export declare function configurePipedrive(h: ModuleHost): void; | ||
| export declare const PipedriveFunctions: Record<string, BuiltinHandler>; | ||
| export declare const PipedriveCredentialTypes: CredentialTypeSchema[]; | ||
| export declare const PipedriveFunctionMetadata: Record<string, FunctionMetadata>; | ||
| export declare const PipedriveModuleMetadata: ModuleMetadata; | ||
| //# sourceMappingURL=pipedrive.d.ts.map |
| {"version":3,"file":"pipedrive.d.ts","sourceRoot":"","sources":["../src/pipedrive.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EACV,cAAc,EACd,oBAAoB,EACpB,gBAAgB,EAChB,UAAU,EACV,cAAc,EAEf,MAAM,iBAAiB,CAAC;AAezB,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,UAAU,GAAG,IAAI,CAEtD;AA2bD,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAW7D,CAAC;AAIF,eAAO,MAAM,wBAAwB,EAAE,oBAAoB,EA2B1D,CAAC;AAuFF,eAAO,MAAM,yBAAyB,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAsVtE,CAAC;AAIF,eAAO,MAAM,uBAAuB,EAAE,cA4BrC,CAAC"} |
| /** | ||
| * RobinPath Pipedrive Module (Node port) | ||
| * | ||
| * Pipedrive CRM integration via API v1 — deals and persons. Mirror of | ||
| * packages/php/pipedrive/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. | ||
| * | ||
| * Pipedrive uses simple API token authentication, but every account lives at | ||
| * its own subdomain (`https://{company}.pipedrive.com`). The `pipedrive_api_key` | ||
| * credential therefore stores both the token and the company-domain slug. | ||
| * | ||
| * Authentication is passed as the `?api_token=` query parameter on every | ||
| * request — Pipedrive API v1 does not support a Bearer header. The module | ||
| * resolves the token + domain at call time from the credential vault via the | ||
| * injected ModuleHost. | ||
| * | ||
| * Credential type declared by this module: | ||
| * - pipedrive_api_key : { apiKey, companyDomain } | ||
| */ | ||
| // ── Module-local state (populated by configure hook) ──────────────────── | ||
| const state = {}; | ||
| function host() { | ||
| if (!state.host) { | ||
| throw new Error("Pipedrive module not initialized. Pass the adapter to rp.registerModule() via loadModule so its configure() hook runs first."); | ||
| } | ||
| return state.host; | ||
| } | ||
| export function configurePipedrive(h) { | ||
| state.host = h; | ||
| } | ||
| // ── Constants ────────────────────────────────────────────────────────── | ||
| const CREDENTIAL_TYPE = "pipedrive_api_key"; | ||
| function errorReturn(error, code, extra = {}) { | ||
| return { error, code, ...extra }; | ||
| } | ||
| // ── Credential resolver (mirrors PHP resolveCredential) ──────────────── | ||
| async function resolveCredential(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.apiKey ?? ""); | ||
| if (!apiKey) { | ||
| return errorReturn(`Credential '${credentialSlug}' has no \`apiKey\` field.`, "api_key_missing"); | ||
| } | ||
| let domain = String(fields.companyDomain ?? ""); | ||
| if (!domain) { | ||
| return errorReturn(`Credential '${credentialSlug}' has no \`companyDomain\` field.`, "company_domain_missing"); | ||
| } | ||
| // Defensive: strip any accidental https:// or .pipedrive.com the user pasted. | ||
| domain = domain.replace(/^https?:\/\//, ""); | ||
| domain = domain.replace(/\.pipedrive\.com.*$/, ""); | ||
| domain = domain.replace(/^\/+|\/+$/g, ""); | ||
| return { apiKey, domain }; | ||
| } | ||
| // ── HTTP helper (normalized envelope, never throws for API errors) ───── | ||
| async function http(apiKey, domain, method, pathAndQuery, body) { | ||
| const baseUrl = `https://${domain}.pipedrive.com/api/v1/`; | ||
| let url = baseUrl + pathAndQuery.replace(/^\/+/, ""); | ||
| const separator = url.indexOf("?") === -1 ? "?" : "&"; | ||
| url += `${separator}api_token=${encodeURIComponent(apiKey)}`; | ||
| const headers = { | ||
| 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(url, init); | ||
| } | ||
| catch (e) { | ||
| return errorReturn(e instanceof Error ? e.message : String(e), "transport"); | ||
| } | ||
| const raw = await response.text(); | ||
| if (response.status === 204 || raw === "") { | ||
| if (response.status >= 200 && response.status < 300) { | ||
| return { success: true }; | ||
| } | ||
| } | ||
| let decoded; | ||
| try { | ||
| decoded = raw ? JSON.parse(raw) : null; | ||
| } | ||
| catch { | ||
| decoded = { raw: raw.slice(0, 500) }; | ||
| } | ||
| if (response.status >= 200 && response.status < 300) { | ||
| if (decoded && typeof decoded === "object") | ||
| return decoded; | ||
| return { raw }; | ||
| } | ||
| const decodedObj = decoded && typeof decoded === "object" | ||
| ? decoded | ||
| : { raw: typeof raw === "string" ? raw.slice(0, 500) : "" }; | ||
| let message = `Pipedrive returned HTTP ${response.status}.`; | ||
| if (typeof decodedObj.error === "string") { | ||
| message = decodedObj.error; | ||
| } | ||
| else if (typeof decodedObj.message === "string") { | ||
| message = decodedObj.message; | ||
| } | ||
| let code = "pipedrive_error"; | ||
| if (response.status === 401) | ||
| code = "unauthorized"; | ||
| else if (response.status === 404) | ||
| code = "not_found"; | ||
| else if (response.status === 429) | ||
| code = "rate_limited"; | ||
| return errorReturn(message, code, { | ||
| status: response.status, | ||
| pipedrive_error: decodedObj, | ||
| }); | ||
| } | ||
| /** | ||
| * Shared caller — resolves the credential, invokes http(), passes through. | ||
| */ | ||
| async function call(cred, method, path, body) { | ||
| const resolved = await resolveCredential(cred); | ||
| if ("error" in resolved) | ||
| return resolved; | ||
| return http(resolved.apiKey, resolved.domain, method, path, body); | ||
| } | ||
| // ── Internal helpers ─────────────────────────────────────────────────── | ||
| function isPlainObject(v) { | ||
| return !!v && typeof v === "object" && !Array.isArray(v); | ||
| } | ||
| /** | ||
| * Map our camelCase deal-option keys to Pipedrive's snake_case API fields. | ||
| * Unknown keys are passed through verbatim (use snake_case for those). | ||
| */ | ||
| function mapDealFields(opts) { | ||
| const map = { | ||
| value: "value", | ||
| currency: "currency", | ||
| personId: "person_id", | ||
| orgId: "org_id", | ||
| stageId: "stage_id", | ||
| pipelineId: "pipeline_id", | ||
| status: "status", | ||
| expectedCloseDate: "expected_close_date", | ||
| ownerId: "user_id", | ||
| visibleTo: "visible_to", | ||
| title: "title", | ||
| }; | ||
| const out = {}; | ||
| for (const [k, v] of Object.entries(opts)) { | ||
| if (k === "extras" && isPlainObject(v)) { | ||
| for (const [ek, ev] of Object.entries(v)) { | ||
| out[ek] = ev; | ||
| } | ||
| continue; | ||
| } | ||
| if (map[k] !== undefined) { | ||
| out[map[k]] = v; | ||
| } | ||
| else { | ||
| // Unknown keys (e.g. custom field hashes) pass through verbatim. | ||
| out[k] = v; | ||
| } | ||
| } | ||
| return out; | ||
| } | ||
| /** | ||
| * Map person-option keys to API fields. Email and phone are auto-wrapped | ||
| * into Pipedrive's `[{value, primary, label}, ...]` shape if a plain | ||
| * string or string-array is provided. | ||
| */ | ||
| function mapPersonFields(opts) { | ||
| const map = { | ||
| name: "name", | ||
| orgId: "org_id", | ||
| ownerId: "owner_id", | ||
| visibleTo: "visible_to", | ||
| label: "label", | ||
| }; | ||
| const out = {}; | ||
| for (const [k, v] of Object.entries(opts)) { | ||
| if (k === "extras" && isPlainObject(v)) { | ||
| for (const [ek, ev] of Object.entries(v)) { | ||
| out[ek] = ev; | ||
| } | ||
| continue; | ||
| } | ||
| if (k === "email" || k === "phone") { | ||
| out[k] = wrapContactValue(v); | ||
| continue; | ||
| } | ||
| if (map[k] !== undefined) { | ||
| out[map[k]] = v; | ||
| } | ||
| else { | ||
| out[k] = v; | ||
| } | ||
| } | ||
| return out; | ||
| } | ||
| /** | ||
| * Normalize a string, string[], or already-shaped array into Pipedrive's | ||
| * `[{value, primary, label}, ...]` format used for emails and phones. | ||
| */ | ||
| function wrapContactValue(value) { | ||
| if (typeof value === "string") { | ||
| return [{ value, primary: true, label: "work" }]; | ||
| } | ||
| if (!Array.isArray(value)) { | ||
| if (isPlainObject(value) && "value" in value) { | ||
| return [value]; | ||
| } | ||
| return []; | ||
| } | ||
| // Already in object shape (assoc array with `value`)? | ||
| const arr = value; | ||
| const out = []; | ||
| let first = true; | ||
| for (const entry of arr) { | ||
| if (typeof entry === "string") { | ||
| out.push({ value: entry, primary: first, label: "work" }); | ||
| } | ||
| else if (isPlainObject(entry) && "value" in entry) { | ||
| out.push(entry); | ||
| } | ||
| first = false; | ||
| } | ||
| return out; | ||
| } | ||
| function buildQueryString(params) { | ||
| const keys = Object.keys(params); | ||
| if (keys.length === 0) | ||
| return ""; | ||
| const sp = new URLSearchParams(); | ||
| for (const k of keys) | ||
| sp.set(k, params[k]); | ||
| return sp.toString(); | ||
| } | ||
| // ── Handlers: Deals ──────────────────────────────────────────────────── | ||
| const createDeal = async (args) => { | ||
| const cred = String(args[0] ?? ""); | ||
| const title = String(args[1] ?? ""); | ||
| const opts = (isPlainObject(args[2]) ? args[2] : {}); | ||
| if (!title) { | ||
| return { error: "`title` is required." }; | ||
| } | ||
| const body = { | ||
| title, | ||
| ...mapDealFields(opts), | ||
| }; | ||
| return (await call(cred, "POST", "deals", body)); | ||
| }; | ||
| const updateDeal = async (args) => { | ||
| const cred = String(args[0] ?? ""); | ||
| const id = Number(args[1] ?? 0) | 0; | ||
| const fields = (isPlainObject(args[2]) ? args[2] : {}); | ||
| if (id <= 0) { | ||
| return { error: "`dealId` is required." }; | ||
| } | ||
| if (Object.keys(fields).length === 0) { | ||
| return { error: "`fields` is required." }; | ||
| } | ||
| return (await call(cred, "PUT", `deals/${id}`, mapDealFields(fields))); | ||
| }; | ||
| const getDeal = async (args) => { | ||
| const cred = String(args[0] ?? ""); | ||
| const id = Number(args[1] ?? 0) | 0; | ||
| if (id <= 0) { | ||
| return { error: "`dealId` is required." }; | ||
| } | ||
| return (await call(cred, "GET", `deals/${id}`, null)); | ||
| }; | ||
| const listDeals = async (args) => { | ||
| const cred = String(args[0] ?? ""); | ||
| const opts = (isPlainObject(args[1]) ? args[1] : {}); | ||
| const query = {}; | ||
| query.status = opts.status !== undefined ? String(opts.status) : "all_not_deleted"; | ||
| if (opts.limit !== undefined) { | ||
| const n = Math.max(1, Math.min(500, Number(opts.limit) | 0)); | ||
| query.limit = String(n); | ||
| } | ||
| if (opts.start !== undefined) { | ||
| const n = Math.max(0, Number(opts.start) | 0); | ||
| query.start = String(n); | ||
| } | ||
| if (opts.ownerId !== undefined) { | ||
| query.user_id = String(Number(opts.ownerId) | 0); | ||
| } | ||
| if (opts.filterId !== undefined) { | ||
| query.filter_id = String(Number(opts.filterId) | 0); | ||
| } | ||
| if (opts.sort !== undefined) { | ||
| query.sort = String(opts.sort); | ||
| } | ||
| const qs = buildQueryString(query); | ||
| const path = qs ? `deals?${qs}` : "deals"; | ||
| return (await call(cred, "GET", path, null)); | ||
| }; | ||
| // ── Handlers: Persons ────────────────────────────────────────────────── | ||
| const createPerson = async (args) => { | ||
| const cred = String(args[0] ?? ""); | ||
| const name = String(args[1] ?? ""); | ||
| const opts = (isPlainObject(args[2]) ? args[2] : {}); | ||
| if (!name) { | ||
| return { error: "`name` is required." }; | ||
| } | ||
| const body = { | ||
| name, | ||
| ...mapPersonFields(opts), | ||
| }; | ||
| return (await call(cred, "POST", "persons", body)); | ||
| }; | ||
| const updatePerson = async (args) => { | ||
| const cred = String(args[0] ?? ""); | ||
| const id = Number(args[1] ?? 0) | 0; | ||
| const fields = (isPlainObject(args[2]) ? args[2] : {}); | ||
| if (id <= 0) { | ||
| return { error: "`personId` is required." }; | ||
| } | ||
| if (Object.keys(fields).length === 0) { | ||
| return { error: "`fields` is required." }; | ||
| } | ||
| return (await call(cred, "PUT", `persons/${id}`, mapPersonFields(fields))); | ||
| }; | ||
| const getPerson = async (args) => { | ||
| const cred = String(args[0] ?? ""); | ||
| const id = Number(args[1] ?? 0) | 0; | ||
| if (id <= 0) { | ||
| return { error: "`personId` is required." }; | ||
| } | ||
| return (await call(cred, "GET", `persons/${id}`, null)); | ||
| }; | ||
| const searchPersons = async (args) => { | ||
| const cred = String(args[0] ?? ""); | ||
| const term = String(args[1] ?? ""); | ||
| const opts = (isPlainObject(args[2]) ? args[2] : {}); | ||
| if (!term) { | ||
| return { error: "`term` is required." }; | ||
| } | ||
| const query = { term }; | ||
| if (opts.fields !== undefined) { | ||
| query.fields = String(opts.fields); | ||
| } | ||
| if (opts.exactMatch !== undefined) { | ||
| query.exact_match = opts.exactMatch ? "true" : "false"; | ||
| } | ||
| if (opts.organizationId !== undefined) { | ||
| query.organization_id = String(Number(opts.organizationId) | 0); | ||
| } | ||
| if (opts.includeFields !== undefined) { | ||
| query.include_fields = String(opts.includeFields); | ||
| } | ||
| if (opts.limit !== undefined) { | ||
| const n = Math.max(1, Math.min(500, Number(opts.limit) | 0)); | ||
| query.limit = String(n); | ||
| } | ||
| if (opts.start !== undefined) { | ||
| const n = Math.max(0, Number(opts.start) | 0); | ||
| query.start = String(n); | ||
| } | ||
| const qs = buildQueryString(query); | ||
| const path = qs ? `persons/search?${qs}` : "persons/search"; | ||
| return (await call(cred, "GET", path, null)); | ||
| }; | ||
| // ── Exports: functions map ───────────────────────────────────────────── | ||
| export const PipedriveFunctions = { | ||
| // Deals. | ||
| createDeal, | ||
| updateDeal, | ||
| getDeal, | ||
| listDeals, | ||
| // Persons. | ||
| createPerson, | ||
| updatePerson, | ||
| getPerson, | ||
| searchPersons, | ||
| }; | ||
| // ── Exports: credential types ────────────────────────────────────────── | ||
| export const PipedriveCredentialTypes = [ | ||
| { | ||
| slug: CREDENTIAL_TYPE, | ||
| title: "Pipedrive API Key", | ||
| icon: "key", | ||
| fields: [ | ||
| { | ||
| name: "apiKey", | ||
| title: "API Token", | ||
| type: "password", | ||
| required: true, | ||
| placeholder: "a1b2c3d4e5f6...", | ||
| description: "Personal API token from Pipedrive. Find it under Settings → Personal preferences → API in the Pipedrive web app. The token is scoped to the issuing user — actions performed via the API will appear in audit logs as that user.", | ||
| }, | ||
| { | ||
| name: "companyDomain", | ||
| title: "Company Domain", | ||
| type: "text", | ||
| required: true, | ||
| placeholder: "your-company", | ||
| description: "The slug portion of your Pipedrive URL: if you log in at `https://acme.pipedrive.com`, this value is `acme`. Do NOT include `https://` or `.pipedrive.com`.", | ||
| pattern: "^[a-zA-Z0-9-]+$", | ||
| }, | ||
| ], | ||
| }, | ||
| ]; | ||
| // ── Shared parameter metadata ────────────────────────────────────────── | ||
| const credentialParam = { | ||
| name: "credential", | ||
| title: "Credential", | ||
| description: "Slug of a saved `pipedrive_api_key` credential. Resolves to the API token and company-domain slug at call time.", | ||
| dataType: "string", | ||
| formInputType: "resource", | ||
| required: true, | ||
| allowExpression: true, | ||
| placeholder: "my_pipedrive", | ||
| resource: { | ||
| type: "credential", | ||
| listFn: "credential.list", | ||
| modes: ["list", "expression"], | ||
| searchable: true, | ||
| filter: { type: CREDENTIAL_TYPE }, | ||
| }, | ||
| }; | ||
| const dealIdParam = { | ||
| name: "dealId", | ||
| title: "Deal ID", | ||
| description: "Numeric Pipedrive deal ID (visible in the URL when viewing a deal in the web app).", | ||
| dataType: "number", | ||
| formInputType: "number", | ||
| required: true, | ||
| allowExpression: true, | ||
| placeholder: "123", | ||
| }; | ||
| const personIdParam = { | ||
| name: "personId", | ||
| title: "Person ID", | ||
| description: "Numeric Pipedrive person ID.", | ||
| dataType: "number", | ||
| formInputType: "number", | ||
| required: true, | ||
| allowExpression: true, | ||
| placeholder: "456", | ||
| }; | ||
| const envelopeSchema = { | ||
| type: "object", | ||
| properties: { | ||
| success: { type: "boolean", description: "Pipedrive-side success flag." }, | ||
| data: { type: "object", description: "Created or fetched record." }, | ||
| additional_data: { | ||
| type: "object", | ||
| description: "Pagination cursor and other metadata.", | ||
| }, | ||
| }, | ||
| }; | ||
| const listEnvelopeSchema = { | ||
| type: "object", | ||
| properties: { | ||
| success: { type: "boolean" }, | ||
| data: { type: "array", description: "Array of records." }, | ||
| additional_data: { | ||
| type: "object", | ||
| description: "`pagination: {start, limit, more_items_in_collection, next_start}`.", | ||
| }, | ||
| }, | ||
| }; | ||
| const commonErrors = { | ||
| credential_not_found: "No credential with that slug exists in the vault.", | ||
| api_key_missing: "The credential exists but has no `apiKey` field.", | ||
| company_domain_missing: "The credential exists but has no `companyDomain` field.", | ||
| transport: "Network failure calling the Pipedrive API.", | ||
| pipedrive_error: "Pipedrive returned an error — see `pipedrive_error` for the parsed response body.", | ||
| rate_limited: "Hit Pipedrive rate limits (HTTP 429). Slow down or upgrade your plan.", | ||
| not_found: "No record with that ID exists.", | ||
| unauthorized: "API token invalid or revoked — regenerate it in Pipedrive Settings.", | ||
| }; | ||
| // ── Exports: function metadata ───────────────────────────────────────── | ||
| export const PipedriveFunctionMetadata = { | ||
| // ===================== DEALS ===================== | ||
| createDeal: { | ||
| title: "Create deal", | ||
| summary: "Open a new deal in the pipeline", | ||
| description: "Calls `POST /deals`. Only `title` is strictly required. Pipedrive auto-assigns the deal to the default pipeline + first stage if `stageId` is omitted, and to the calling user as owner unless `ownerId` is set in `extras`.", | ||
| group: "deals", | ||
| action: "write", | ||
| icon: "dollar-sign", | ||
| capability: "manage_options", | ||
| sideEffects: ["makes_http_call"], | ||
| idempotent: false, | ||
| since: "1.0.0", | ||
| tags: ["pipedrive", "deal", "create", "sales"], | ||
| parameters: [ | ||
| credentialParam, | ||
| { | ||
| name: "title", | ||
| title: "Title", | ||
| description: "Human-readable deal title shown in the pipeline cards.", | ||
| dataType: "string", | ||
| formInputType: "text", | ||
| required: true, | ||
| allowExpression: true, | ||
| placeholder: "Acme Q4 renewal", | ||
| }, | ||
| { | ||
| name: "options", | ||
| title: "Options", | ||
| description: "Recognized keys:\n value : numeric monetary value\n currency : ISO 4217 code (e.g. 'USD', 'EUR'). Defaults to org default.\n personId : numeric Person ID to link\n orgId : numeric Organization ID to link\n stageId : numeric Stage ID (must belong to the chosen pipeline)\n pipelineId: numeric Pipeline ID\n status : 'open' (default) | 'won' | 'lost' | 'deleted'\n expectedCloseDate : ISO date `YYYY-MM-DD`\n ownerId : numeric User ID to assign to\n visibleTo : '1' owner, '3' owner+followers, '5' entire company, '7' shared\n extras : any other field — passed through verbatim to Pipedrive (use snake_case)", | ||
| dataType: "object", | ||
| formInputType: "json", | ||
| required: false, | ||
| allowExpression: true, | ||
| language: "json", | ||
| rows: 6, | ||
| }, | ||
| ], | ||
| returnType: "object", | ||
| returnDescription: "{success, data: {id, title, value, ...}}.", | ||
| returnSchema: envelopeSchema, | ||
| errors: commonErrors, | ||
| examples: [ | ||
| { | ||
| title: "Create from a form submission", | ||
| code: 'pipedrive.createDeal "my_pipedrive" "{{ form.company }} trial" {\n value: 2500,\n currency: "USD",\n personId: {{ pdPerson.data.id }}\n}', | ||
| }, | ||
| ], | ||
| example: 'pipedrive.createDeal "my_pipedrive" "Acme renewal" {value: 25000, currency: "USD"}', | ||
| }, | ||
| updateDeal: { | ||
| title: "Update deal", | ||
| summary: "Patch fields on an existing deal", | ||
| description: "Calls `PUT /deals/{id}`. Only the fields you supply are changed. Most common use: setting `status` to `won` or `lost`, or moving `stageId` to advance the deal through the pipeline.", | ||
| group: "deals", | ||
| action: "write", | ||
| icon: "trending-up", | ||
| capability: "manage_options", | ||
| sideEffects: ["makes_http_call"], | ||
| idempotent: true, | ||
| since: "1.0.0", | ||
| tags: ["pipedrive", "deal", "update", "stage"], | ||
| parameters: [ | ||
| credentialParam, | ||
| dealIdParam, | ||
| { | ||
| name: "fields", | ||
| title: "Fields", | ||
| description: "Object of fields to patch. Recognized camelCase keys (mapped to snake_case for the API): `title`, `value`, `currency`, `personId`, `orgId`, `stageId`, `pipelineId`, `status`, `expectedCloseDate`, `ownerId`, `visibleTo`. Any other keys are passed through verbatim — use snake_case for those.", | ||
| dataType: "object", | ||
| formInputType: "json", | ||
| required: true, | ||
| allowExpression: true, | ||
| language: "json", | ||
| rows: 5, | ||
| }, | ||
| ], | ||
| returnType: "object", | ||
| returnDescription: "{success, data: updated deal}.", | ||
| returnSchema: envelopeSchema, | ||
| errors: commonErrors, | ||
| examples: [ | ||
| { | ||
| title: "Mark won", | ||
| code: 'pipedrive.updateDeal "my_pipedrive" 123 {status: "won"}', | ||
| }, | ||
| { | ||
| title: "Move stage", | ||
| code: 'pipedrive.updateDeal "my_pipedrive" 123 {stageId: 5}', | ||
| }, | ||
| ], | ||
| example: 'pipedrive.updateDeal "my_pipedrive" 123 {status: "won"}', | ||
| }, | ||
| getDeal: { | ||
| title: "Get deal", | ||
| summary: "Fetch a single deal by ID", | ||
| description: "Calls `GET /deals/{id}`. Returns the full deal record including computed fields like `formatted_value`, `weighted_value`, `stage_change_time`, etc.", | ||
| group: "deals", | ||
| action: "read", | ||
| icon: "dollar-sign", | ||
| capability: "manage_options", | ||
| sideEffects: ["makes_http_call"], | ||
| idempotent: true, | ||
| since: "1.0.0", | ||
| tags: ["pipedrive", "deal", "lookup"], | ||
| parameters: [credentialParam, dealIdParam], | ||
| returnType: "object", | ||
| returnDescription: '{success, data: deal} or `{error: "not_found"}`.', | ||
| returnSchema: envelopeSchema, | ||
| errors: commonErrors, | ||
| example: 'pipedrive.getDeal "my_pipedrive" 123', | ||
| }, | ||
| listDeals: { | ||
| title: "List deals", | ||
| summary: "Page through deals filtered by status", | ||
| description: "Calls `GET /deals`. Pipedrive uses offset-based pagination via `start` (zero-based) and `limit` (max 500). Read `additional_data.pagination.more_items_in_collection` and `.next_start` to walk the result set.", | ||
| group: "deals", | ||
| action: "query", | ||
| icon: "list", | ||
| capability: "manage_options", | ||
| sideEffects: ["makes_http_call"], | ||
| idempotent: true, | ||
| since: "1.0.0", | ||
| tags: ["pipedrive", "deal", "list", "paginate"], | ||
| parameters: [ | ||
| credentialParam, | ||
| { | ||
| name: "options", | ||
| title: "Options", | ||
| description: "Recognized keys:\n status : 'open' | 'won' | 'lost' | 'deleted' | 'all_not_deleted' (default 'all_not_deleted')\n limit : 1–500 (default 100)\n start : zero-based offset for pagination (default 0)\n ownerId: filter to deals owned by a specific user\n filterId : numeric saved filter ID\n sort : sort spec, e.g. 'add_time DESC'", | ||
| dataType: "object", | ||
| formInputType: "json", | ||
| required: false, | ||
| allowExpression: true, | ||
| language: "json", | ||
| rows: 5, | ||
| advanced: true, | ||
| }, | ||
| ], | ||
| returnType: "object", | ||
| returnDescription: "{success, data: [deals], additional_data: {pagination}}.", | ||
| returnSchema: listEnvelopeSchema, | ||
| errors: commonErrors, | ||
| examples: [ | ||
| { | ||
| title: "Open deals", | ||
| code: 'pipedrive.listDeals "my_pipedrive" {status: "open", limit: 50}', | ||
| }, | ||
| { | ||
| title: "Won this quarter", | ||
| code: 'pipedrive.listDeals "my_pipedrive" {status: "won", limit: 100, sort: "won_time DESC"}', | ||
| }, | ||
| ], | ||
| example: 'pipedrive.listDeals "my_pipedrive" {status: "open"}', | ||
| }, | ||
| // ===================== PERSONS ===================== | ||
| createPerson: { | ||
| title: "Create person", | ||
| summary: "Add a new person to the CRM", | ||
| description: "Calls `POST /persons`. `name` is required. Email and phone are arrays of `{value, primary, label}` objects in Pipedrive — for convenience this module accepts simple strings and wraps them automatically.", | ||
| group: "persons", | ||
| action: "write", | ||
| icon: "user-plus", | ||
| capability: "manage_options", | ||
| sideEffects: ["makes_http_call"], | ||
| idempotent: false, | ||
| since: "1.0.0", | ||
| tags: ["pipedrive", "person", "contact", "create"], | ||
| parameters: [ | ||
| credentialParam, | ||
| { | ||
| name: "name", | ||
| title: "Name", | ||
| description: "Full name of the person.", | ||
| dataType: "string", | ||
| formInputType: "text", | ||
| required: true, | ||
| allowExpression: true, | ||
| placeholder: "Ada Lovelace", | ||
| }, | ||
| { | ||
| name: "options", | ||
| title: "Options", | ||
| description: "Recognized keys:\n email : string OR array of strings OR Pipedrive-shape array of `{value, primary, label}`\n phone : same as email\n orgId : numeric Organization ID to link\n ownerId : numeric User ID owner\n visibleTo : '1' owner, '3' owner+followers, '5' entire company, '7' shared\n label : numeric label ID\n extras : any other field — pass-through to the API", | ||
| dataType: "object", | ||
| formInputType: "json", | ||
| required: false, | ||
| allowExpression: true, | ||
| language: "json", | ||
| rows: 5, | ||
| }, | ||
| ], | ||
| returnType: "object", | ||
| returnDescription: "{success, data: created person}.", | ||
| returnSchema: envelopeSchema, | ||
| errors: commonErrors, | ||
| examples: [ | ||
| { | ||
| title: "From a form submission", | ||
| code: 'pipedrive.createPerson "my_pipedrive" {{ form.full_name }} {\n email: {{ form.email }},\n phone: {{ form.phone }}\n}', | ||
| }, | ||
| ], | ||
| example: 'pipedrive.createPerson "my_pipedrive" "Ada Lovelace" {email: "ada@example.com"}', | ||
| }, | ||
| updatePerson: { | ||
| title: "Update person", | ||
| summary: "Patch fields on an existing person", | ||
| description: "Calls `PUT /persons/{id}`. Only the fields you supply are changed.", | ||
| group: "persons", | ||
| action: "write", | ||
| icon: "user-check", | ||
| capability: "manage_options", | ||
| sideEffects: ["makes_http_call"], | ||
| idempotent: true, | ||
| since: "1.0.0", | ||
| tags: ["pipedrive", "person", "update"], | ||
| parameters: [ | ||
| credentialParam, | ||
| personIdParam, | ||
| { | ||
| name: "fields", | ||
| title: "Fields", | ||
| description: "Object of fields to patch. Recognized camelCase keys: `name`, `email`, `phone`, `orgId`, `ownerId`, `visibleTo`, `label`. Email/phone strings are auto-wrapped. Other keys pass through verbatim.", | ||
| dataType: "object", | ||
| formInputType: "json", | ||
| required: true, | ||
| allowExpression: true, | ||
| language: "json", | ||
| rows: 5, | ||
| }, | ||
| ], | ||
| returnType: "object", | ||
| returnDescription: "{success, data: updated person}.", | ||
| returnSchema: envelopeSchema, | ||
| errors: commonErrors, | ||
| example: 'pipedrive.updatePerson "my_pipedrive" 456 {phone: "+1-555-0100"}', | ||
| }, | ||
| getPerson: { | ||
| title: "Get person", | ||
| summary: "Fetch a single person by ID", | ||
| description: "Calls `GET /persons/{id}`. Returns the full person record including all email/phone entries, label, owner, etc.", | ||
| group: "persons", | ||
| action: "read", | ||
| icon: "user", | ||
| capability: "manage_options", | ||
| sideEffects: ["makes_http_call"], | ||
| idempotent: true, | ||
| since: "1.0.0", | ||
| tags: ["pipedrive", "person", "lookup"], | ||
| parameters: [credentialParam, personIdParam], | ||
| returnType: "object", | ||
| returnDescription: '{success, data: person} or `{error: "not_found"}`.', | ||
| returnSchema: envelopeSchema, | ||
| errors: commonErrors, | ||
| example: 'pipedrive.getPerson "my_pipedrive" 456', | ||
| }, | ||
| searchPersons: { | ||
| title: "Search persons", | ||
| summary: "Full-text search across persons", | ||
| description: "Calls `GET /persons/search`. Matches against name, email, phone, custom fields, and notes (configurable via `fields`). Returns a result set with relevance scoring — read `data.items[].item` for the actual person records.", | ||
| group: "persons", | ||
| action: "query", | ||
| icon: "search", | ||
| capability: "manage_options", | ||
| sideEffects: ["makes_http_call"], | ||
| idempotent: true, | ||
| since: "1.0.0", | ||
| tags: ["pipedrive", "person", "search"], | ||
| parameters: [ | ||
| credentialParam, | ||
| { | ||
| name: "term", | ||
| title: "Search term", | ||
| description: "Free-text search string. Minimum 2 characters (or 1 with `exactMatch: true`).", | ||
| dataType: "string", | ||
| formInputType: "text", | ||
| required: true, | ||
| allowExpression: true, | ||
| placeholder: "ada@example.com", | ||
| }, | ||
| { | ||
| name: "options", | ||
| title: "Options", | ||
| description: "Recognized keys:\n fields : comma-separated 'name,email,phone,notes,custom_fields'\n exactMatch : bool — require an exact match (default false)\n organizationId : restrict to persons under this organization\n includeFields : comma-separated extra fields to include in results\n limit : 1–500 (default 100)\n start : zero-based offset", | ||
| dataType: "object", | ||
| formInputType: "json", | ||
| required: false, | ||
| allowExpression: true, | ||
| language: "json", | ||
| rows: 5, | ||
| advanced: true, | ||
| }, | ||
| ], | ||
| returnType: "object", | ||
| returnDescription: "{success, data: {items: [{result_score, item: person}]}}.", | ||
| errors: commonErrors, | ||
| examples: [ | ||
| { | ||
| title: "By email", | ||
| code: 'pipedrive.searchPersons "my_pipedrive" "ada@example.com"', | ||
| }, | ||
| { | ||
| title: "Exact name", | ||
| code: 'pipedrive.searchPersons "my_pipedrive" "Ada Lovelace" {exactMatch: true}', | ||
| }, | ||
| ], | ||
| example: 'pipedrive.searchPersons "my_pipedrive" "ada@example.com"', | ||
| }, | ||
| }; | ||
| // ── Exports: module metadata ─────────────────────────────────────────── | ||
| export const PipedriveModuleMetadata = { | ||
| slug: "pipedrive", | ||
| title: "Pipedrive", | ||
| summary: "Manage deals and persons in your Pipedrive sales pipeline", | ||
| description: "Sync form submissions into Pipedrive persons, create and advance deals through your pipeline, look up records, and search contacts — all from RobinPath scripts.\n\nAuthenticated with a personal API token plus your company domain (the `acme` in `acme.pipedrive.com`). Both are stored together in a `pipedrive_api_key` credential and resolved at call time. The token is passed as a `?api_token=` query parameter (Pipedrive API v1 does not support Bearer headers).\n\nResponses are returned with Pipedrive's standard envelope intact: `{success, data, additional_data?}` — read `data.id`, `data[].title`, `additional_data.pagination.next_start`, etc.", | ||
| category: "crm", | ||
| icon: "icon.svg", | ||
| color: "#1A1A1A", | ||
| version: "0.2.0", | ||
| docsUrl: "https://docs.robinpath.com/modules/pipedrive", | ||
| status: "stable", | ||
| requires: [], | ||
| minNodeVersion: "18.0.0", | ||
| credentialsType: CREDENTIAL_TYPE, | ||
| operationGroups: { | ||
| deals: { | ||
| title: "Deals", | ||
| description: "Sales opportunities moving through a pipeline.", | ||
| order: 1, | ||
| }, | ||
| persons: { | ||
| title: "Persons", | ||
| description: "Individual contacts in the CRM.", | ||
| order: 2, | ||
| }, | ||
| }, | ||
| methods: Object.keys(PipedriveFunctions), | ||
| }; | ||
| //# sourceMappingURL=pipedrive.js.map |
| {"version":3,"file":"pipedrive.js","sourceRoot":"","sources":["../src/pipedrive.ts"],"names":[],"mappings":"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"} |
+19
-8
| { | ||
| "name": "@robinpath/pipedrive", | ||
| "version": "0.1.2", | ||
| "version": "0.3.0", | ||
| "publishConfig": { | ||
@@ -23,12 +23,17 @@ "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": "Pipedrive module for RobinPath.", | ||
| "description": "Pipedrive CRM integration via API v1 — manage deals and persons in your sales pipeline. Uses the encrypted credential vault for API tokens scoped to a company domain.", | ||
| "keywords": [ | ||
| "pipedrive", | ||
| "crm" | ||
| "crm", | ||
| "sales", | ||
| "deal", | ||
| "person", | ||
| "pipeline", | ||
| "api" | ||
| ], | ||
@@ -38,7 +43,13 @@ "license": "MIT", | ||
| "category": "crm", | ||
| "type": "integration", | ||
| "auth": "api-key", | ||
| "type": "module", | ||
| "auth": "credential-vault", | ||
| "functionCount": 21, | ||
| "baseUrl": "https://api.pipedrive.com" | ||
| "baseUrl": "https://api.pipedrive.com", | ||
| "language": "nodejs", | ||
| "platforms": [ | ||
| "cloud", | ||
| "cli", | ||
| "desktop" | ||
| ] | ||
| } | ||
| } |
+1
-1
@@ -22,3 +22,3 @@ # @robinpath/pipedrive | ||
| ```bash | ||
| npm install @robinpath/pipedrive | ||
| robinpath add @robinpath/pipedrive | ||
| ``` | ||
@@ -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.
Found 1 instance in 1 package
Network access
Supply chain riskThis module accesses the network.
Found 1 instance in 1 package
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Found 1 instance in 1 package
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.
Found 1 instance in 1 package
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.
Found 1 instance in 1 package
64119
1544.5%10
400%876
Infinity%2
100%