Skip to main content

App Framework

The @qumra/app-react-router is the official framework for building Qumra apps with React Router 7. It wraps the core @qumra/app-sdk and provides authentication, API access, webhook handling, and session management.

Installation

npm install @qumra/app-react-router @qumra/app-session-storage-prisma

Initialization

Create a server-side module to initialize the framework. This file should be placed at app/qumra.server.ts:

app/qumra.server.ts
import { qumraApp, AppDistribution } from "@qumra/app-react-router";
import { PrismaSessionStorage } from "@qumra/app-session-storage-prisma";
import { prisma } from "../prisma/lib/prisma";

const qumra = qumraApp({
apiKey: process.env.QUMRA_API_KEY!,
secretKey: process.env.QUMRA_API_SECRET!,
appUrl: process.env.QUMRA_APP_URL!,
sessionStorage: new PrismaSessionStorage(prisma),
distribution: AppDistribution.AppStore,
});

export default qumra;
export const authenticate = qumra.authenticate;
Server-only

This file must only be imported on the server side. The .server.ts suffix ensures React Router excludes it from the client bundle.

Configuration

The qumraApp() function accepts a configuration object:

const qumra = qumraApp({
apiKey: string, // Your app's API key (client_id)
secretKey: string, // Your app's secret key (client_secret)
appUrl: string, // Your app's URL
sessionStorage: SessionStorage, // Session storage adapter
distribution: AppDistribution, // App distribution type
hooks?: {
afterAuth?: (options) => void, // Called after successful auth
},
});

Properties

PropertyTypeDescription
apiKeystringYour app's API key, also known as the client_id.
secretKeystringYour app's secret key, also known as client_secret.
appUrlstringThe base URL where your app is hosted.
sessionStorageSessionStorageA session storage adapter (Prisma or MongoDB).
distributionAppDistributionAppStore for public apps, Private for single-store apps.
hooksobjectOptional lifecycle hooks.

Distribution Types

TypeDescription
AppDistribution.AppStoreMulti-store app distributed via the App Store. Uses OAuth for authentication.
AppDistribution.PrivateSingle-store private app. Uses a static access token.

Session Storage Adapters

npm install @qumra/app-session-storage-prisma
Prisma Adapter
import { PrismaSessionStorage } from "@qumra/app-session-storage-prisma";
const sessionStorage = new PrismaSessionStorage(prisma);
MongoDB Adapter
import { MongoDBSessionStorage } from "@qumra/app-session-storage-mongodb";
const sessionStorage = new MongoDBSessionStorage(db, {
collectionName: "sessions", // optional, defaults to "sessions"
});

Return Value

The qumraApp() function returns an object with:

PropertyTypeDescription
authenticate.admin(request)functionAuthenticate admin panel requests. Returns admin, session, store.
authenticate.webhook(request)functionAuthenticate webhook requests. Returns topic, payload, store.
addDocumentResponseHeaders()functionAdd required response headers for iframe embedding.

Packages Overview

The Qumra SDK ecosystem consists of these packages:

PackagePurpose
@qumra/app-react-routerApp framework for React Router 7 (authentication, routing)
@qumra/app-sdkCore SDK (security, sessions, errors, validation)
@qumra/app-session-storage-prismaPrisma session storage adapter
@qumra/app-session-storage-mongodbMongoDB session storage adapter
@qumra/jisrApp Bridge for admin panel communication
@qumra/manaraDesign system and UI components
@qumra/riwaqUI Extensions SDK (Admin, Checkout, Storefront)
@qumra/web-pixels-extensionWeb Pixels for analytics and tracking

Next Steps