Overview
Multi-vendor CRM adapter framework for the AbsoluteJS stack.
@absolutejs/crmv0.0.10-alpha.10alphaCommerce & GrowthMulti-vendor CRM adapter framework with one type-safe contract across HubSpot, Salesforce, Pipedrive, and more.
A unified CRM contract (CRMAdapter) plus vendor adapters for the major CRMs, so the rest of your app only ever sees generic CRMContact, CRMLead, and CRMDeal types. OAuth2 flows ride on @absolutejs/auth and citra, token and sync-queue storage are bring-your-own interfaces with in-memory, Redis, SQLite, and Postgres implementations shipped, and a voice bridge connects @absolutejs/voice agents for lead capture and disposition logging.
bun add @absolutejs/crmMulti-vendor CRM adapter framework for the AbsoluteJS stack.
Status: alpha. Pin an exact version while the API approaches 1.0.
A unified CRM contract (CRMAdapter) plus vendor adapters for the major CRMs, designed to be:
Type-safe end-to-end — generic CRMContact / CRMLead / CRMDeal types are what the rest of your framework sees; vendor-specific shapes are confined to one adapter.
Auth-integrated — OAuth2 flows ride on @absolutejs/auth + citra. No bespoke per-vendor login code in your app.
Bring-your-own-store — CRMTokenStore and CRMSyncQueue are interfaces with shipped implementations for in-memory, Redis, SQLite, and Neon/Postgres.
Bidirectional-ready — outbound mutations + inbound webhook intake are plumbed through the same queue from day one. v1 ships push-at-call-end + on-demand pull; v2 activates full sync via config.
Voice-aware — drop-in bridge to @absolutejs/voice agents via VoiceCRMContract. Lead-capture and disposition-logging pathway templates included.
Vendor — Status — Auth — Adapter — Webhooks
Salesforce — shipped — citra — shipped — shipped
HubSpot — shipped — citra — shipped — shipped
Pipedrive — shipped — citra — shipped — shipped
Zoho CRM — shipped — citra — shipped — shipped
Attio — shipped — citra — shipped — shipped
Close — shipped — citra — shipped — shipped
monday CRM — shipped — citra — shipped — shipped
GoHighLevel — shipped — citra — shipped — shipped
The package exports all eight adapter factories from its root, plus OAuth handlers, signed webhook receivers, in-memory and durable stores, reconciliation workers, and the voice CRM bridge.
Vendor SDK strategy is per-vendor: Salesforce uses jsforce, HubSpot uses @hubspot/api-client, monday.com uses @mondaydotcomorg/api for the typed value. Pipedrive / Zoho / Attio / Close / GoHighLevel use raw fetch + handwritten types. All SDKs are in optionalDependencies and lazy-loaded inside the adapter file.
Adapter outputs flow through generic types only. Vendor types never leak past src/adapters/.ts.
CRMTokenStore is the source of truth for OAuth tokens, refresh tokens, instance URLs, and region/sub-account context. The runtime asks the store for a token, hands it to the adapter, and re-asks on 401 after a refresh.
Generic CRMContact, CRMLead, and CRMDeal types are what your framework sees; vendor-specific shapes are confined to a single adapter file per vendor.
Adapter factories ship for HubSpot, Salesforce, Pipedrive, Zoho, Attio, Close, monday, and GoHighLevel, all exported from the package root.
OAuth2 flows ride on @absolutejs/auth and citra; CRMTokenStore is the source of truth for tokens, refresh tokens, instance URLs, and region context, with automatic re-ask on 401.
CRMTokenStore, CRMLocalEntityStore, and CRMSyncQueue are interfaces with shipped in-memory, Redis, SQLite, and Neon/Postgres implementations.
Outbound mutations and inbound webhook intake flow through the same sync queue, with a reconciler and pluggable conflict resolvers (last-write-wins, remote-wins).
createVoiceCRMBridge and createVoiceLeadCapturePathway connect @absolutejs/voice agents to the CRM runtime for lead capture and disposition logging.
Outcomes
Multi-vendor CRM adapter framework for the AbsoluteJS stack.
A unified CRM contract (CRMAdapter) plus vendor adapters for the major CRMs, designed to be:
Vendor — Status — Auth — Adapter — Webhooks
Hardening checklist
Follow in order
Working example for Quick start.
import {
createInMemoryCRMSyncQueue,
createInMemoryCRMTokenStore,
} from "@absolutejs/crm";
const tokenStore = createInMemoryCRMTokenStore();
const syncQueue = createInMemoryCRMSyncQueue();Wire a runtime from a token store, a sync queue, and the vendor adapter factories you need — swap the in-memory stores for the Redis, SQLite, or Postgres implementations in production.
import {
createCRMRuntime,
createHubSpotCRMAdapter,
createInMemoryCRMSyncQueue,
createInMemoryCRMTokenStore
} from '@absolutejs/crm';
const runtime = createCRMRuntime({
adapters: { hubspot: createHubSpotCRMAdapter },
syncQueue: createInMemoryCRMSyncQueue(),
tokenStore: createInMemoryCRMTokenStore()
});
// The runtime resolves the user's token from the store, hands it to the
// vendor adapter, and re-asks the store on 401 after a refresh.Search the declarations exported by the current package type files. Expand a symbol to inspect its source-backed signature.
Current package surface
Import surface · click to copy