DPSSDKsOverview

DPS SDKs

Public, framework-agnostic packages on npm for building on top of DPS — the cross-app subscription registry and the mobile artifact / release pipeline.

As of @duabalabs/dps-client v0.2.0 the money-creation surface (donations, subscriptions, invoices, product checkout) was removed from this client. Those checkout flows now live in @duabalabs/sellub-client and are served by sellub-server. DPS owns only the read-only subscription registry (a Parse object fed by Sellub → DPS webhooks) plus the mobile release CLI.

Source for both packages lives in the monorepo: packages/dps-client and dps-cli.

The two DPS packages

PackageWhat it’s forRuns in
@duabalabs/dps-clientRead the cross-app subscription registry and the event log bridged from Sellub. The auth-gate / entitlement layer.Node, browser, edge, React Native
@duabalabs/dps-cliThe dps command-line tool — upload mobile artifacts, create / publish / roll back releases, validate repos and trigger remote builds.Node 18+ CLI / CI

Install

# Subscription / entitlement client
npm install @duabalabs/dps-client    # or: pnpm add @duabalabs/dps-client
 
# Release CLI (global)
npm i -g @duabalabs/dps-cli          # or: pnpm add -g @duabalabs/dps-cli

Browser vs server client

@duabalabs/dps-client ships two factories with an identical method surface — pick the one that matches where your code runs:

FactoryTransportCredentialsUse from
createDpsClient({ Parse })Parse JS SDK Cloud.runApp ID + public JS keyBrowser, static-export Next.js, React Native
createDpsServerClient({ serverUrl, appId, masterKey })fetch to /functions/*App ID + master keyServer routes, trusted backends, CI
⚠️

Never ship a master key to a browser bundle. Public landings use createDpsClient with a JS key only; trusted backends use createDpsServerClient.

Where payments live now

dps-client no longer creates payments. The split is:

  • @duabalabs/dps-clientreads subscription status and bridged events. This is what an app calls to gate access (checkSubscription).
  • @duabalabs/sellub-clientcreates money: one-off payments (externalPayments), subscriptions, and hosted invoices. Sellub captures the payment, then bridges the lifecycle event to DPS, which is what dps-client later surfaces through checkSubscription / listEvents.

So a typical integration uses both: sellub-client to start a checkout, and dps-client to read whether the resulting subscription is active.

Versioning

  • Packages are versioned independently with semver.
  • dps-client is at 0.3.x; anything below 1.0.0 may break between minor versions, so pin exact versions in production until a package hits 1.x.