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​