1.0.8 • Published 10 months ago

@debugger_supreme/rbac v1.0.8

Weekly downloads
-
License
MIT
Repository
-
Last release
10 months ago

@debugger_supreme/rbac

A reusable RBAC (Role-Based Access Control) library for Mambu API interactions and permissions management.

Installation

npm install @debugger_supreme/rbac

Usage

Basic Static Configuration

const { initialize } = require("@debugger_supreme/rbac");

// Initialize with static config
const rbac = initialize({
  mambu: {
    baseUrl: process.env.MAMBU_URL,
    apiKey: process.env.MAMBU_API_KEY,
  },
  permissions: {
    baseUrl: process.env.PERMISSIONS_URL,
    apiKey: process.env.PERMISSIONS_AUTH,
  },
});

// Use in Express routes
app.post(
  "/reports",
  auth,// your auth middleware that sets the mambuData obj
  rbac.rbac("uploadDepositFile"), // RBAC middleware
  async (req, res) => {
    // Your route handler
  }
);

Dynamic Configuration

For multi-tenant applications where Mambu configuration varies by subscription and environment:

  1. First, create your config utility:
// config/mambuConfig.js
const config = {
  platinumkenya: {
    sandbox: {
      baseUrl: "https://platinumkenya.sandbox.mambu.com/api",
      apiKey: process.env.mambu_platinumkenya_sandbox_api_key,
    },
    production: {
      baseUrl: "https://platinumkenya.mambu.com/api",
      apiKey: process.env.mambu_platinumkenya_production_api_key,
    },
  },
  // Add more subscriptions as needed
};

/**
 * Get Mambu configuration based on subscription and environment
 * @param {object} params
 * @param {string} params.sub - Subscription name (e.g. "platinumkenya")
 * @param {string} params.mambu_env - Environment ("sandbox" or "production")
 * @returns {{ baseUrl: string, apiKey: string }}
 */
function getConfig({ sub = "platinumkenya", mambu_env = "sandbox" }) {
  return config[sub][mambu_env];
}

module.exports = getConfig;
  1. Create an auth middleware that sets required Mambu data:
// middleware/auth.js
const auth = (req, res, next) => {
  // Extract data from token/headers/etc
  const { userId, base_url, mambu_env, sub } = extractMambuUser(
    req.header("mambuUser")
  );

  // Set on request object
  req.mambuData = {
    userId,
    base_url,
    mambu_env,
    sub,
  };

  next();
};
  1. Use dynamic config in routes:
const getConfig = require("./config/mambuConfig");

app.post(
  "/reports",
  auth, // Add auth middleware first
  rbac.rbac("uploadDepositFile").useConfig(getConfig),
  (req, res) => {
    // Your handler
  }
);

The library will:

  1. Extract sub and mambu_env from req.mambuData
  2. Call your config function with these values
  3. Use the returned config for that specific request

API Reference

initialize(config)

Initializes the library with configuration.

const rbac = initialize({
  mambu: {
    baseUrl: "https://api.mambu.com",
    apiKey: "your-mambu-api-key",
  },
  permissions: {
    baseUrl: "https://permissions-api.example.com",
    apiKey: "your-permissions-api-key",
  },
});

rbac(action).useConfig(configFactory)

Adds dynamic configuration to a route. The config factory must return { baseUrl, apiKey }.

rbac.rbac("action").useConfig(({ sub, mambu_env }) => ({
  baseUrl: `https://${sub}.${mambu_env}.mambu.com/api`,
  apiKey: "your-key",
}));

MambuClient

Client for interacting with Mambu API.

  • getUser(encodedKey): Get user details
  • getLoan(id): Get loan details
  • getLoanSchedule(loanAccountId): Get loan schedule
  • getClientDeposits(accountHolderKey): Get client deposits
  • getDepositTransactions(accountId): Get deposit transactions

PermissionsClient

Client for handling permissions.

  • authorize(action, username): Authorize a user action

Development

# Install dependencies
npm install

# Run tests
npm test

# Build
npm run build

License

MIT

publish npm

npm publish --access public

1.0.8

10 months ago

1.0.7

10 months ago

1.0.6

10 months ago

1.0.5

10 months ago

1.0.4

10 months ago

1.0.3

10 months ago

1.0.2

10 months ago

1.0.1

10 months ago

1.0.0

10 months ago