@lfreiredev/eazycrumb-issue-reporter
v0.1.0
Published
Issue reporter module for EazyCrumb breadcrumbs
Maintainers
Readme
EazyCrumb Issue Reporter
A lightweight issue reporter that consumes an existing EazyCrumb tracker, packages a structured report (error + breadcrumbs + context), and sends it to your backend.
Install
npm install @lfreiredev/eazycrumb @lfreiredev/eazycrumb-issue-reporterUsage
import { createTracker } from '@lfreiredev/eazycrumb'
import { createIssueReporter } from '@lfreiredev/eazycrumb-issue-reporter'
const tracker = createTracker({
maxBreadcrumbs: 100,
})
const reporter = createIssueReporter(tracker, {
endpoint: '/api/issue-reports',
app: { name: 'my-app', version: '1.0.0', env: 'prod' },
getContext: () => ({
route: window.location.pathname,
tenantId: 'tenant_123',
featureFlags: { checkoutV2: true },
}),
getUser: () => ({ id: 'user_456', emailHash: 'hash_abc' }),
captureStack: true,
maxBreadcrumbs: 50,
})
const result = await reporter.reportIssue({
error: new Error('Something broke'),
message: 'User note about what happened',
tags: { surface: 'report-button' },
extra: { flow: 'checkout' },
})
if (result.status === 'sent') {
console.log('Report sent:', result.reportId)
}Optional: Unhandled Errors
const teardown = reporter.installUnhandledHandlers?.({
autoSend: true,
prompt: async (err) => {
// show a user prompt before sending
return true
},
})
// later
teardown?.()API
createIssueReporter(tracker, options)
Options
endpoint(required): Report endpoint.app:{ name, version, env }metadata.getContext: function returning safe context (route, tenantId, flags).getUser: function returning safe user info.headers: static headers or a function returning headers.timeoutMs: request timeout (default8000).captureStack: include stack trace (defaultfalse).maxBreadcrumbs: last N breadcrumbs to include.sanitizeExtra: custom sanitizer (values are still capped + filtered).
reportIssue(input)
Input
error:unknown(Error or thrown value)message: user notetags: key/value tagsextra: additional safe metadataincludeBreadcrumbs: defaulttrue
Return
Promise<{ status: 'sent' | 'failed'; reportId?: string }>
Backend Contract (Minimal)
POST /api/issue-reports
Body: IssueReportPayload
Response: { reportId?: string }
2xx responses are treated as sent. If reportId exists, it is returned to the caller.
Development
npm run build -w @lfreiredev/eazycrumb-issue-reporter