@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");
}

Readme

Keywords

none

Package Sidebar

Install

npm i @luxuryescapes/povoconnect

Weekly Downloads

32

Version

0.0.8

License

MIT

Unpacked Size

49.8 kB

Total Files

32

Last publish

Collaborators

  • elias.vieira
  • roberto-luxuryescapes
  • angus-leung
  • ethanscavia
  • jahanzeb-hussain-le
  • lukejudd-lux
  • chiamaka-ibeme-le
  • vincent-tran-le
  • welingtonlarsenlux
  • hfrankel
  • sangin.lee
  • tuanhung-pham-le
  • lukas-zimmermann-le
  • alexanderswanle
  • lux-alexd
  • yaodan.zhang.lux
  • 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