@redotpay/mpp
v0.1.2
Published
RedotPay first-party MPP SDK: re-exports Mppx + RedotPay payment methods + RedotMPP(OpenAPI helper).
Readme
@redotpay/mpp
Single-package first-party SDK that re-exports:
mppx(Mppx, plus server helpers)redotpay-mppxmethods (client/server;charge,redotpay.charge)redotmppRedotMPPhelper (OpenAPI auth + defaults)
Install
npm i @redotpay/mpp mppxMonorepo / local
This folder is designed to live next to:
../source_code/RedotPay_payment_methods../source_code/RedotMPP_openapihelper
Usage
Environment (server quickstart):
export MPP_SECRET_KEY=...
export REDOTPAY_OPENAPI_AK=...
export REDOTPAY_OPENAPI_PRIVATE_KEY_PATH=... # or REDOTPAY_OPENAPI_PRIVATE_KEY_PEMServer:
import * as http from 'node:http'
import { Mppx, createRedotPayServer } from '@redotpay/mpp/server'
// Works out of the box (single-process in-memory replay protection).
const mppx = createRedotPayServer()
http.createServer(async (req, res) => {
const result = await Mppx.toNodeListener(
mppx['redotpay/charge']({ amount: '1' }),
)(req, res)
if (result.status === 402) return
res.end('OK')
})Production replay protection. In local/dev,
createRedotPayServer()falls back to single-process in-memory replay protection for convenience. InNODE_ENV=production, the helper now requires a shared, durableconsumeReferenceimplementation (for example Redis/DB) and throws on startup unless you explicitly opt into single-process in-memory behavior withREDOTPAY_ALLOW_IN_MEMORY_CONSUME_REFERENCE=1.Tempo-compliant production deployments should always provide a shared replay store so the same one-time token (
rdt) cannot be consumed twice (double-spend):const mppx = createRedotPayServer({ consumeReference: async ({ reference, expires }) => myStore.consumeOnce(reference, expires), // false if already consumed })
Quickstart also preserves recall/debug events:
const mppx = createRedotPayServer({
onRecall(event) {
console.log('redotpay recall', event)
},
})Client:
import { charge, extractRdtFromPaymentCredential } from '@redotpay/mpp/client'
const method = charge({
payload: { type: 'balance', rdt: 'rdt_xxx' },
})
const rdt = extractRdtFromPaymentCredential('Payment ...')Smoke test ($1, OpenAPI)
From the RedotPayMPP_v2 root folder:
REDOTPAY_OPENAPI_AK=... \
REDOTPAY_OUTER_UID=... \
REDOTPAY_OPENAPI_PRIVATE_KEY_PATH=... \
node ./tools/openapi.usd1.mjsOptional variables:
REDOTPAY_OPENAPI_BASE_URL(default: https://acquirer.redotpay.com)REDOTPAY_OPENAPI_KEY_VERSION(default: 1)
