@luxuryescapes/povoconnect
TypeScript icon, indicating that this package has built-in type declarations

0.0.8 • Public • Published

Povo Connect

A persistence agnostic replacement for Heroku Connect.

npm install @luxuryescapes/povoconnect

Before using Povo Connect make some rough API request calculations and check that you will not exceed the Salesforce API limits.

Credentials

Create credentials for connection:

export const credentials = {
  clientId: "ABCDEFG",
  clientSecret: "123456",
  loginUrl: "https://cs6.salesforce.com",
  password: "password",
  username: "foo@bar.com"
}

Create Topic

import { connect, upsertTopic } from "@luxuryescapes/povoconnect";
import { credentials } from "./config";

async function createTopic() {
  const conn = await connect(credentials);

  const topic = await upsertTopic(conn, "OpportunityUpdates")
}

Subscribe To Topic

Subscribe to the topic to sync data in real time.

Note: store message.data.replayId of the latest processed message for use next time you run a job.

import { connect, subscribe } from "@luxuryescapes/povoconnect";
import { credentials } from "./config";

const timeout = Infinity;

async function onReceive(message) {
  // do something here 
}

async function subscribeToOpportunityUpdates() {
  const conn = await connect(credentials);

  const subscription = {
    topic: "OpportunityUpdates",
    replayId: null
  }

  await subscribe(
    conn,
    subscription,
    timeout,
    onReceive
  );
}

Find

Retrieves the object to sync.

import { connect, findOne } from "@luxuryescapes/povoconnect";
import { credentials } from "./config";

const fields = ["Id", "Name"]

function mapper(sobject) {
  return {
    sfid: sobject.Id,
    name: sobject.Name
  }
}

async function findOpportunityById(sfid) {
  const conn = await connect(credentials);
  
  const model = await findOne(
    conn,
    "Opportunity",
    sfid,
    mapper,
    onReceive,
    fields
  );

  return model
}

Find All

When you make a schema change or you had an outage findAll will fetch all objects of a type so you can update your data. After this is done events should keep your data in sync.

import { connect, findAll } from "@luxuryescapes/povoconnect";
import { credentials } from "./config";

const maxFetch = 60000;

function mapper(sobject) {
  return {
    sfid: sobject.Id,
    name: sobject.Name
  }
}

const query = {
  fields: ["Id", "CreatedDate"],
  where: "foo = 'bar'",
  limit: 100
}

async function findAllOpportunity() {
  const conn = await connect(credentials);

  const models = await findAll(
    conn,
    "Opportunity",
    maxFetch,
    mapper,
    query
  );
}

Describe Object

Describe the SO object for mapping:

import { connect, describe } from "@luxuryescapes/povoconnect";
import { credentials } from "./config";

async function describeObject() {
  const conn = await connect(credentials);

  const meta = await describe(conn, "Opportunity");
}

/@luxuryescapes/povoconnect/

    Package Sidebar

    Install

    npm i @luxuryescapes/povoconnect

    Weekly Downloads

    60

    Version

    0.0.8

    License

    MIT

    Unpacked Size

    49.8 kB

    Total Files

    32

    Last publish

    Collaborators

    • georgia-wahib-le
    • jeanbiezus
    • deven.chen
    • emanuel.kozerski
    • elias.vieira
    • roberto-luxuryescapes
    • ethanscavia
    • jahanzeb-hussain-le
    • lukejudd-lux
    • chiamaka-ibeme-le
    • vincent-tran-le
    • welingtonlarsenlux
    • hfrankel
    • sangin.lee
    • tuanhung-pham-le
    • lukas-zimmermann-le
    • lux-alexd
    • william.idoine
    • edward.iskenderian
    • adham-oliveira
    • james-kwok-le
    • aleksandar.vuksanovic
    • nishanthi.n
    • glesage_le
    • daviaazevedo
    • william-ong
    • philippecarvalho
    • dulaj.pathirana
    • hamed.le
    • samhammond
    • paulo.silva3991
    • noahxny
    • dishang
    • ahmad.hafez
    • jordikitto_le
    • steve.dang
    • andrewjohnstone
    • brunohaveroth
    • pavel-lux
    • mary-le
    • pankaj-le
    • rubenbelem
    • gabe-miranda-lux
    • thilina-piyadasun-le
    • gabriel.costa.lux
    • icelic
    • cervantes.kenneth
    • harish-indla-le
    • eran.stiller.luxury.escapes
    • sakethgetla
    • nicholaspuglia
    • sitaraman
    • siddharth.bose
    • aarontoomey-le
    • sergio.costa.luxuryescapes
    • mzilio-lux
    • michael-reid-le
    • matthewdelaneyatluxuryescapes
    • ricardobalbinot
    • callmekev
    • semeer-acheerithodi-le
    • andrey-tryapitsin-le
    • quan.tang
    • alexander.yakovenko
    • greg-cumming-le
    • jerry.huang-le
    • dan-wanigasekera-le
    • dunedayl
    • arminmon-le
    • mattswansonlux
    • cleberricardi
    • felipefeal.lux
    • tracymu
    • chris.nguyen.lux
    • marhalpert
    • reb2020
    • zediah
    • sonyque
    • joshuacullenlux
    • shawn-cx-li
    • colins44
    • diegogadens
    • felixivanov
    • joshua.paling.le
    • operations.luxgroup
    • eddiemcleanlux
    • robert.harris.lux
    • kostya-luxuryescapes
    • alexb.pi
    • kaustuva
    • luizcarraro
    • ryan.tian
    • le_tyang
    • richardbiddle
    • henryshen-le
    • jamesly