@reproapp/react-sdk
v0.0.2
Published
Repro React SDK (MVP)
Readme
Repro React SDK
Capture user sessions with rrweb, tie network requests to user actions, and share a viewer link for fast debugging.
Install
npm i repro-react rrweb
# or
yarn add repro-react rrweb
# or
pnpm add repro-react rrwebPeer requirements:
- react >= 17
- react-dom >= 17
- rrweb >= 1 < 2
Configure
- Get your
appIdandtenantIdfrom Repro. - Wrap your app with the provider.
import ReproProvider from "repro-react";
export default function App() {
return (
<ReproProvider appId="app_123" tenantId="tenant_abc">
<YourApp />
</ReproProvider>
);
}Optional configuration and full interface coverage:
import ReproProvider, { attachAxios, type MaskingOptions } from "repro-react";
import axios from "axios";
const masking: MaskingOptions = {
maskAllInputs: true,
maskTextSelector: ".pii",
maskInputOptions: { password: true },
};
const api = axios.create({ baseURL: "https://api.example.com" });
attachAxios(api);
export default function App() {
return (
<ReproProvider
appId="app_123"
tenantId="tenant_abc"
apiBase="https://repro.example.com"
button={{ text: "Report issue" }}
masking={masking}
>
<YourApp />
</ReproProvider>
);
}Notes:
apiBasedefaults tohttps://repro-api-d7288.ondigitalocean.app/api.button.textoverrides the floating button label (same label for Record and Stop).attachAxiosworks with any Axios instance;window.axiosis auto-attached if present.- This SDK runs in the browser; for Next.js use a client component.
Run
- Start your app (for example,
npm run dev). - Open the page and click "Authenticate to Record".
- Sign in with your Repro user credentials.
- Click "Record", reproduce the issue, then click "Stop & Report".
Verify it works
- The floating controls appear at the bottom right. "Stop & Report" is visible while recording.
- After stopping, a share card appears with a viewer link you can copy.
- In DevTools -> Network, app requests include
X-Bug-Session-IdandX-Bug-Action-Idwhile recording. - Requests to your
apiBasesucceed (for example,POST /v1/sessionsandPOST /v1/sessions/:id/finish).
API
ReproProvider
type Props = {
appId: string;
tenantId: string;
apiBase?: string; // default: https://repro-api-d7288.ondigitalocean.app/api
children: React.ReactNode;
button?: { text?: string };
masking?: MaskingOptions;
};attachAxios
attachAxios(axiosInstance: any): voidAttach request/response interceptors to an Axios instance so it can inject
X-Bug-Session-Id and X-Bug-Action-Id during active recordings.
MaskingOptions
Supported rrweb masking options:
maskAllInputsmaskTextClassmaskTextSelectormaskInputOptionsmaskInputFnmaskTextFn
