react-native-bug-reporter 1.0.3 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,34 @@
1
+ package com.bugreporter
2
+
3
+ import android.app.Activity
4
+ import android.os.Handler
5
+ import java.util.concurrent.Executor
6
+
7
+ /**
8
+ * Isolated wrapper around the API 34+ `Activity.ScreenCaptureCallback`.
9
+ *
10
+ * IMPORTANT: this class is the ONLY place that references
11
+ * `Activity.ScreenCaptureCallback`. The main module must never reference that
12
+ * type directly — otherwise, on Android 13 and below where the class does not
13
+ * exist, the runtime's reflection over the module's methods throws
14
+ * `NoClassDefFoundError` and the whole native module fails to load.
15
+ *
16
+ * This class is only ever instantiated inside an `SDK_INT >= 34` guard, so it
17
+ * (and the missing framework class) is never loaded on older devices.
18
+ */
19
+ class ScreenCaptureCallbackApi34(
20
+ private val activity: Activity,
21
+ private val handler: Handler,
22
+ private val onCapture: () -> Unit,
23
+ ) {
24
+ private val callback = Activity.ScreenCaptureCallback { onCapture() }
25
+
26
+ fun register() {
27
+ val executor = Executor { command -> handler.post(command) }
28
+ activity.registerScreenCaptureCallback(executor, callback)
29
+ }
30
+
31
+ fun unregister() {
32
+ activity.unregisterScreenCaptureCallback(callback)
33
+ }
34
+ }
@@ -20,7 +20,6 @@ import com.facebook.react.bridge.WritableMap
20
20
  import com.facebook.react.modules.core.DeviceEventManagerModule
21
21
  import java.io.File
22
22
  import java.io.FileOutputStream
23
- import java.util.concurrent.Executor
24
23
 
25
24
  /**
26
25
  * Native screenshot detector for Android.
@@ -40,7 +39,8 @@ class ScreenshotDetectorModule(private val reactContext: ReactApplicationContext
40
39
 
41
40
  private val mainHandler = Handler(Looper.getMainLooper())
42
41
  private var contentObserver: ContentObserver? = null
43
- private var screenCaptureCallback: Any? = null
42
+ // Typed as Any? so this class never references the API-34 ScreenCaptureCallback.
43
+ private var screenCapture: ScreenCaptureCallbackApi34? = null
44
44
  private var isListening = false
45
45
 
46
46
  override fun getName(): String = NAME
@@ -102,13 +102,14 @@ class ScreenshotDetectorModule(private val reactContext: ReactApplicationContext
102
102
  private fun registerScreenCaptureCallback() {
103
103
  val activity = reactContext.currentActivity ?: return
104
104
  mainHandler.post {
105
- val executor = Executor { command -> mainHandler.post(command) }
106
- val callback = Activity.ScreenCaptureCallback {
107
- onScreenshotDetected()
108
- }
109
- screenCaptureCallback = callback
110
105
  try {
111
- activity.registerScreenCaptureCallback(executor, callback)
106
+ // All ScreenCaptureCallback usage is isolated in this helper so the
107
+ // missing class never loads on older Android.
108
+ val helper = ScreenCaptureCallbackApi34(activity, mainHandler) {
109
+ onScreenshotDetected()
110
+ }
111
+ helper.register()
112
+ screenCapture = helper
112
113
  } catch (e: Exception) {
113
114
  // Fall back to the content observer if the callback can't be registered.
114
115
  registerContentObserver()
@@ -117,14 +118,13 @@ class ScreenshotDetectorModule(private val reactContext: ReactApplicationContext
117
118
  }
118
119
 
119
120
  private fun unregisterScreenCaptureCallback() {
120
- val activity = reactContext.currentActivity ?: return
121
- val callback = screenCaptureCallback as? Activity.ScreenCaptureCallback ?: return
121
+ val helper = screenCapture ?: return
122
122
  mainHandler.post {
123
123
  try {
124
- activity.unregisterScreenCaptureCallback(callback)
124
+ helper.unregister()
125
125
  } catch (_: Exception) {
126
126
  }
127
- screenCaptureCallback = null
127
+ screenCapture = null
128
128
  }
129
129
  }
130
130
 
@@ -41,6 +41,7 @@ function getClient(url, anonKey) {
41
41
  function mapRow(row) {
42
42
  return {
43
43
  id: row.id,
44
+ appKey: row.app_key ?? 'default',
44
45
  title: row.title ?? '',
45
46
  description: row.description ?? '',
46
47
  severity: row.severity ?? 'medium',
@@ -97,6 +98,7 @@ async function insertReport(target, report) {
97
98
  data,
98
99
  error
99
100
  } = await supabase.from(target.tableName).insert({
101
+ app_key: target.appKey,
100
102
  title: report.title,
101
103
  description: report.description,
102
104
  severity: report.severity,
@@ -109,9 +111,35 @@ async function insertReport(target, report) {
109
111
  }).select().single();
110
112
  if (error) throw error;
111
113
  _logger.logger.log('report inserted', data.id);
114
+ // Register the app (insert-if-absent) so it shows in the admin panel.
115
+ void ensureAppRegistered(target);
112
116
  return mapRow(data);
113
117
  }
114
118
 
119
+ /**
120
+ * Inserts the app into bug_report_apps if it's not there yet (without clobbering
121
+ * its notify_emails). Fire-and-forget — never blocks submission.
122
+ */
123
+ async function ensureAppRegistered(target) {
124
+ try {
125
+ await fetch(`${target.supabaseUrl.replace(/\/+$/, '')}/rest/v1/bug_report_apps?on_conflict=app_key`, {
126
+ method: 'POST',
127
+ headers: {
128
+ apikey: target.supabaseAnonKey,
129
+ Authorization: `Bearer ${target.supabaseAnonKey}`,
130
+ 'Content-Type': 'application/json',
131
+ Prefer: 'resolution=ignore-duplicates'
132
+ },
133
+ body: JSON.stringify({
134
+ app_key: target.appKey,
135
+ app_name: target.appName
136
+ })
137
+ });
138
+ } catch {
139
+ // ignore — not critical
140
+ }
141
+ }
142
+
115
143
  /**
116
144
  * Subscribes to the reports table (newest first). Does an initial fetch, then
117
145
  * refetches on any realtime change. Returns an unsubscribe function.
@@ -156,11 +184,14 @@ async function updateReportStatus(target, reportId, status) {
156
184
 
157
185
  /** Builds a SupabaseTarget from the SDK config (with defaults). */
158
186
  function targetFromConfig(config) {
187
+ const appKey = config.appKey ?? 'default';
159
188
  return {
160
189
  supabaseUrl: config.supabaseUrl,
161
190
  supabaseAnonKey: config.supabaseAnonKey,
162
191
  tableName: config.tableName ?? 'bug_reports',
163
- storageBucket: config.storageBucket ?? 'bug-reports'
192
+ storageBucket: config.storageBucket ?? 'bug-reports',
193
+ appKey,
194
+ appName: config.appName ?? appKey
164
195
  };
165
196
  }
166
197
  //# sourceMappingURL=supabaseService.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["require","_supabaseJs","_logger","client","clientKey","getClient","url","anonKey","key","createClient","auth","persistSession","autoRefreshToken","mapRow","row","id","title","description","severity","screenshotUrl","screenshot_url","screenshotPath","screenshot_path","context","status","createdAt","created_at","notifyEmails","notify_emails","undefined","uploadScreenshot","target","localUri","storagePath","Date","now","Math","floor","random","endpoint","supabaseUrl","replace","storageBucket","form","FormData","append","uri","name","type","res","fetch","method","headers","apikey","supabaseAnonKey","Authorization","body","ok","text","catch","Error","publicUrl","logger","log","insertReport","report","supabase","data","error","from","tableName","insert","select","single","subscribeToReports","onData","onError","fetchAll","order","ascending","limit","map","channel","on","event","schema","table","subscribe","removeChannel","updateReportStatus","reportId","update","eq","targetFromConfig","config"],"sourceRoot":"../../../src","sources":["services/supabaseService.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["require","_supabaseJs","_logger","client","clientKey","getClient","url","anonKey","key","createClient","auth","persistSession","autoRefreshToken","mapRow","row","id","appKey","app_key","title","description","severity","screenshotUrl","screenshot_url","screenshotPath","screenshot_path","context","status","createdAt","created_at","notifyEmails","notify_emails","undefined","uploadScreenshot","target","localUri","storagePath","Date","now","Math","floor","random","endpoint","supabaseUrl","replace","storageBucket","form","FormData","append","uri","name","type","res","fetch","method","headers","apikey","supabaseAnonKey","Authorization","body","ok","text","catch","Error","publicUrl","logger","log","insertReport","report","supabase","data","error","from","tableName","insert","select","single","ensureAppRegistered","Prefer","JSON","stringify","app_name","appName","subscribeToReports","onData","onError","fetchAll","order","ascending","limit","map","channel","on","event","schema","table","subscribe","removeChannel","updateReportStatus","reportId","update","eq","targetFromConfig","config"],"sourceRoot":"../../../src","sources":["services/supabaseService.ts"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["SEVERITIES","exports"],"sourceRoot":"../../src","sources":["types.ts"],"mappings":";;;;;;AAAA;AACA;AACA;;AAIO,MAAMA,UAAyB,GAAAC,OAAA,CAAAD,UAAA,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC;;AAE9E;AACA;AACA;AACA;;AASA;;AAmBA;;AAUA;;AAUA;;AAWA;;AAOA;;AAYA;;AAYA;;AAUA","ignoreList":[]}
1
+ {"version":3,"names":["SEVERITIES","exports"],"sourceRoot":"../../src","sources":["types.ts"],"mappings":";;;;;;AAAA;AACA;AACA;;AAIO,MAAMA,UAAyB,GAAAC,OAAA,CAAAD,UAAA,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC;;AAE9E;AACA;AACA;AACA;;AASA;;AAmBA;;AAUA;;AAUA;;AAWA;;AAOA;;AAcA;;AAYA;;AAUA","ignoreList":[]}
@@ -34,6 +34,7 @@ function getClient(url, anonKey) {
34
34
  function mapRow(row) {
35
35
  return {
36
36
  id: row.id,
37
+ appKey: row.app_key ?? 'default',
37
38
  title: row.title ?? '',
38
39
  description: row.description ?? '',
39
40
  severity: row.severity ?? 'medium',
@@ -90,6 +91,7 @@ export async function insertReport(target, report) {
90
91
  data,
91
92
  error
92
93
  } = await supabase.from(target.tableName).insert({
94
+ app_key: target.appKey,
93
95
  title: report.title,
94
96
  description: report.description,
95
97
  severity: report.severity,
@@ -102,9 +104,35 @@ export async function insertReport(target, report) {
102
104
  }).select().single();
103
105
  if (error) throw error;
104
106
  logger.log('report inserted', data.id);
107
+ // Register the app (insert-if-absent) so it shows in the admin panel.
108
+ void ensureAppRegistered(target);
105
109
  return mapRow(data);
106
110
  }
107
111
 
112
+ /**
113
+ * Inserts the app into bug_report_apps if it's not there yet (without clobbering
114
+ * its notify_emails). Fire-and-forget — never blocks submission.
115
+ */
116
+ async function ensureAppRegistered(target) {
117
+ try {
118
+ await fetch(`${target.supabaseUrl.replace(/\/+$/, '')}/rest/v1/bug_report_apps?on_conflict=app_key`, {
119
+ method: 'POST',
120
+ headers: {
121
+ apikey: target.supabaseAnonKey,
122
+ Authorization: `Bearer ${target.supabaseAnonKey}`,
123
+ 'Content-Type': 'application/json',
124
+ Prefer: 'resolution=ignore-duplicates'
125
+ },
126
+ body: JSON.stringify({
127
+ app_key: target.appKey,
128
+ app_name: target.appName
129
+ })
130
+ });
131
+ } catch {
132
+ // ignore — not critical
133
+ }
134
+ }
135
+
108
136
  /**
109
137
  * Subscribes to the reports table (newest first). Does an initial fetch, then
110
138
  * refetches on any realtime change. Returns an unsubscribe function.
@@ -149,11 +177,14 @@ export async function updateReportStatus(target, reportId, status) {
149
177
 
150
178
  /** Builds a SupabaseTarget from the SDK config (with defaults). */
151
179
  export function targetFromConfig(config) {
180
+ const appKey = config.appKey ?? 'default';
152
181
  return {
153
182
  supabaseUrl: config.supabaseUrl,
154
183
  supabaseAnonKey: config.supabaseAnonKey,
155
184
  tableName: config.tableName ?? 'bug_reports',
156
- storageBucket: config.storageBucket ?? 'bug-reports'
185
+ storageBucket: config.storageBucket ?? 'bug-reports',
186
+ appKey,
187
+ appName: config.appName ?? appKey
157
188
  };
158
189
  }
159
190
  //# sourceMappingURL=supabaseService.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["createClient","logger","client","clientKey","getClient","url","anonKey","key","auth","persistSession","autoRefreshToken","mapRow","row","id","title","description","severity","screenshotUrl","screenshot_url","screenshotPath","screenshot_path","context","status","createdAt","created_at","notifyEmails","notify_emails","undefined","uploadScreenshot","target","localUri","storagePath","Date","now","Math","floor","random","endpoint","supabaseUrl","replace","storageBucket","form","FormData","append","uri","name","type","res","fetch","method","headers","apikey","supabaseAnonKey","Authorization","body","ok","text","catch","Error","publicUrl","log","insertReport","report","supabase","data","error","from","tableName","insert","select","single","subscribeToReports","onData","onError","fetchAll","order","ascending","limit","map","channel","on","event","schema","table","subscribe","removeChannel","updateReportStatus","reportId","update","eq","targetFromConfig","config"],"sourceRoot":"../../../src","sources":["services/supabaseService.ts"],"mappings":";;AAAA,OAAO,gCAAgC;AACvC,SAASA,YAAY,QAA6B,uBAAuB;AAEzE,SAASC,MAAM,QAAQ,iBAAiB;;AAExC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,IAAIC,MAA6B,GAAG,IAAI;AACxC,IAAIC,SAAS,GAAG,EAAE;AAElB,SAASC,SAASA,CAACC,GAAW,EAAEC,OAAe,EAAkB;EAC/D,MAAMC,GAAG,GAAG,GAAGF,GAAG,KAAKC,OAAO,EAAE;EAChC,IAAI,CAACJ,MAAM,IAAIC,SAAS,KAAKI,GAAG,EAAE;IAChCL,MAAM,GAAGF,YAAY,CAACK,GAAG,EAAEC,OAAO,EAAE;MAClCE,IAAI,EAAE;QAAEC,cAAc,EAAE,KAAK;QAAEC,gBAAgB,EAAE;MAAM;IACzD,CAAC,CAAC;IACFP,SAAS,GAAGI,GAAG;EACjB;EACA,OAAOL,MAAM;AACf;AASA;AACA,SAASS,MAAMA,CAACC,GAA4B,EAAa;EACvD,OAAO;IACLC,EAAE,EAAED,GAAG,CAACC,EAAY;IACpBC,KAAK,EAAGF,GAAG,CAACE,KAAK,IAAe,EAAE;IAClCC,WAAW,EAAGH,GAAG,CAACG,WAAW,IAAe,EAAE;IAC9CC,QAAQ,EAAGJ,GAAG,CAACI,QAAQ,IAA8B,QAAQ;IAC7DC,aAAa,EAAGL,GAAG,CAACM,cAAc,IAAe,IAAI;IACrDC,cAAc,EAAGP,GAAG,CAACQ,eAAe,IAAe,IAAI;IACvDC,OAAO,EAAGT,GAAG,CAACS,OAAO,IAA8B,CAAC,CAA0B;IAC9EC,MAAM,EAAGV,GAAG,CAACU,MAAM,IAA4B,MAAM;IACrDC,SAAS,EAAGX,GAAG,CAACY,UAAU,IAAe,EAAE;IAC3CC,YAAY,EAAGb,GAAG,CAACc,aAAa,IAAiBC;EACnD,CAAC;AACH;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,eAAeC,gBAAgBA,CACpCC,MAAsB,EACtBC,QAAgB,EACO;EACvB,MAAMC,WAAW,GAAG,GAAGC,IAAI,CAACC,GAAG,CAAC,CAAC,IAAIC,IAAI,CAACC,KAAK,CAACD,IAAI,CAACE,MAAM,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM;EAC1E,MAAMC,QAAQ,GAAG,GAAGR,MAAM,CAACS,WAAW,CAACC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,sBAAsBV,MAAM,CAACW,aAAa,IAAIT,WAAW,EAAE;EAErH,MAAMU,IAAI,GAAG,IAAIC,QAAQ,CAAC,CAAC;EAC3BD,IAAI,CAACE,MAAM,CAAC,MAAM,EAAE;IAClBC,GAAG,EAAEd,QAAQ;IACbe,IAAI,EAAEd,WAAW;IACjBe,IAAI,EAAE;EACR,CAAoB,CAAC;EAErB,MAAMC,GAAG,GAAG,MAAMC,KAAK,CAACX,QAAQ,EAAE;IAChCY,MAAM,EAAE,MAAM;IACdC,OAAO,EAAE;MACPC,MAAM,EAAEtB,MAAM,CAACuB,eAAe;MAC9BC,aAAa,EAAE,UAAUxB,MAAM,CAACuB,eAAe,EAAE;MACjD,UAAU,EAAE;IACd,CAAC;IACDE,IAAI,EAAEb;EACR,CAAC,CAAC;EAEF,IAAI,CAACM,GAAG,CAACQ,EAAE,EAAE;IACX,MAAMC,IAAI,GAAG,MAAMT,GAAG,CAACS,IAAI,CAAC,CAAC,CAACC,KAAK,CAAC,MAAM,EAAE,CAAC;IAC7C,MAAM,IAAIC,KAAK,CAAC,0BAA0BX,GAAG,CAACzB,MAAM,MAAMkC,IAAI,EAAE,CAAC;EACnE;EAEA,MAAMG,SAAS,GAAG,GAAG9B,MAAM,CAACS,WAAW,CAACC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,6BAA6BV,MAAM,CAACW,aAAa,IAAIT,WAAW,EAAE;EAC7H9B,MAAM,CAAC2D,GAAG,CAAC,qBAAqB,EAAE7B,WAAW,CAAC;EAC9C,OAAO;IAAE4B,SAAS;IAAE5B;EAAY,CAAC;AACnC;;AAEA;AACA,OAAO,eAAe8B,YAAYA,CAChChC,MAAsB,EACtBiC,MAA6B,EACT;EACpB,MAAMC,QAAQ,GAAG3D,SAAS,CAACyB,MAAM,CAACS,WAAW,EAAET,MAAM,CAACuB,eAAe,CAAC;EACtE,MAAM;IAAEY,IAAI;IAAEC;EAAM,CAAC,GAAG,MAAMF,QAAQ,CACnCG,IAAI,CAACrC,MAAM,CAACsC,SAAS,CAAC,CACtBC,MAAM,CAAC;IACNtD,KAAK,EAAEgD,MAAM,CAAChD,KAAK;IACnBC,WAAW,EAAE+C,MAAM,CAAC/C,WAAW;IAC/BC,QAAQ,EAAE8C,MAAM,CAAC9C,QAAQ;IACzBE,cAAc,EAAE4C,MAAM,CAAC7C,aAAa;IACpCG,eAAe,EAAE0C,MAAM,CAAC3C,cAAc;IACtCE,OAAO,EAAEyC,MAAM,CAACzC,OAAO;IACvBC,MAAM,EAAEwC,MAAM,CAACxC,MAAM;IACrBE,UAAU,EAAEsC,MAAM,CAACvC,SAAS;IAC5BG,aAAa,EAAEoC,MAAM,CAACrC,YAAY,IAAI;EACxC,CAAC,CAAC,CACD4C,MAAM,CAAC,CAAC,CACRC,MAAM,CAAC,CAAC;EACX,IAAIL,KAAK,EAAE,MAAMA,KAAK;EACtBhE,MAAM,CAAC2D,GAAG,CAAC,iBAAiB,EAAEI,IAAI,CAACnD,EAAE,CAAC;EACtC,OAAOF,MAAM,CAACqD,IAAI,CAAC;AACrB;;AAEA;AACA;AACA;AACA;AACA,OAAO,SAASO,kBAAkBA,CAChC1C,MAAsB,EACtB2C,MAAsC,EACtCC,OAAgC,EACpB;EACZ,MAAMV,QAAQ,GAAG3D,SAAS,CAACyB,MAAM,CAACS,WAAW,EAAET,MAAM,CAACuB,eAAe,CAAC;EAEtE,MAAMsB,QAAQ,GAAG,MAAAA,CAAA,KAAY;IAC3B,MAAM;MAAEV,IAAI;MAAEC;IAAM,CAAC,GAAG,MAAMF,QAAQ,CACnCG,IAAI,CAACrC,MAAM,CAACsC,SAAS,CAAC,CACtBE,MAAM,CAAC,GAAG,CAAC,CACXM,KAAK,CAAC,YAAY,EAAE;MAAEC,SAAS,EAAE;IAAM,CAAC,CAAC,CACzCC,KAAK,CAAC,GAAG,CAAC;IACb,IAAIZ,KAAK,EAAE;MACThE,MAAM,CAACgE,KAAK,CAAC,qBAAqB,EAAEA,KAAK,CAAC;MAC1CQ,OAAO,GAAGR,KAAyB,CAAC;MACpC;IACF;IACAO,MAAM,CAAC,CAACR,IAAI,IAAI,EAAE,EAAEc,GAAG,CAACnE,MAAM,CAAC,CAAC;EAClC,CAAC;EAED+D,QAAQ,CAAC,CAAC;EAEV,MAAMK,OAAO,GAAGhB,QAAQ,CACrBgB,OAAO,CAAC,eAAelD,MAAM,CAACsC,SAAS,EAAE,CAAC,CAC1Ca,EAAE,CACD,kBAAkB,EAClB;IAAEC,KAAK,EAAE,GAAG;IAAEC,MAAM,EAAE,QAAQ;IAAEC,KAAK,EAAEtD,MAAM,CAACsC;EAAU,CAAC,EACzD,MAAMO,QAAQ,CAAC,CACjB,CAAC,CACAU,SAAS,CAAC,CAAC;EAEd,OAAO,MAAM;IACXrB,QAAQ,CAACsB,aAAa,CAACN,OAAO,CAAC;EACjC,CAAC;AACH;;AAEA;AACA,OAAO,eAAeO,kBAAkBA,CACtCzD,MAAsB,EACtB0D,QAAgB,EAChBjE,MAA2B,EACZ;EACf,MAAMyC,QAAQ,GAAG3D,SAAS,CAACyB,MAAM,CAACS,WAAW,EAAET,MAAM,CAACuB,eAAe,CAAC;EACtE,MAAM;IAAEa;EAAM,CAAC,GAAG,MAAMF,QAAQ,CAC7BG,IAAI,CAACrC,MAAM,CAACsC,SAAS,CAAC,CACtBqB,MAAM,CAAC;IAAElE;EAAO,CAAC,CAAC,CAClBmE,EAAE,CAAC,IAAI,EAAEF,QAAQ,CAAC;EACrB,IAAItB,KAAK,EAAE,MAAMA,KAAK;AACxB;;AAEA;AACA,OAAO,SAASyB,gBAAgBA,CAACC,MAKhC,EAAkB;EACjB,OAAO;IACLrD,WAAW,EAAEqD,MAAM,CAACrD,WAAW;IAC/Bc,eAAe,EAAEuC,MAAM,CAACvC,eAAe;IACvCe,SAAS,EAAEwB,MAAM,CAACxB,SAAS,IAAI,aAAa;IAC5C3B,aAAa,EAAEmD,MAAM,CAACnD,aAAa,IAAI;EACzC,CAAC;AACH","ignoreList":[]}
1
+ {"version":3,"names":["createClient","logger","client","clientKey","getClient","url","anonKey","key","auth","persistSession","autoRefreshToken","mapRow","row","id","appKey","app_key","title","description","severity","screenshotUrl","screenshot_url","screenshotPath","screenshot_path","context","status","createdAt","created_at","notifyEmails","notify_emails","undefined","uploadScreenshot","target","localUri","storagePath","Date","now","Math","floor","random","endpoint","supabaseUrl","replace","storageBucket","form","FormData","append","uri","name","type","res","fetch","method","headers","apikey","supabaseAnonKey","Authorization","body","ok","text","catch","Error","publicUrl","log","insertReport","report","supabase","data","error","from","tableName","insert","select","single","ensureAppRegistered","Prefer","JSON","stringify","app_name","appName","subscribeToReports","onData","onError","fetchAll","order","ascending","limit","map","channel","on","event","schema","table","subscribe","removeChannel","updateReportStatus","reportId","update","eq","targetFromConfig","config"],"sourceRoot":"../../../src","sources":["services/supabaseService.ts"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["SEVERITIES"],"sourceRoot":"../../src","sources":["types.ts"],"mappings":";;AAAA;AACA;AACA;;AAIA,OAAO,MAAMA,UAAyB,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC;;AAE9E;AACA;AACA;AACA;;AASA;;AAmBA;;AAUA;;AAUA;;AAWA;;AAOA;;AAYA;;AAYA;;AAUA","ignoreList":[]}
1
+ {"version":3,"names":["SEVERITIES"],"sourceRoot":"../../src","sources":["types.ts"],"mappings":";;AAAA;AACA;AACA;;AAIA,OAAO,MAAMA,UAAyB,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC;;AAE9E;AACA;AACA;AACA;;AASA;;AAmBA;;AAUA;;AAUA;;AAWA;;AAOA;;AAcA;;AAYA;;AAUA","ignoreList":[]}
@@ -5,6 +5,8 @@ export interface SupabaseTarget {
5
5
  supabaseAnonKey: string;
6
6
  tableName: string;
7
7
  storageBucket: string;
8
+ appKey: string;
9
+ appName: string;
8
10
  }
9
11
  export interface UploadResult {
10
12
  publicUrl: string;
@@ -34,5 +36,7 @@ export declare function targetFromConfig(config: {
34
36
  supabaseAnonKey: string;
35
37
  tableName?: string;
36
38
  storageBucket?: string;
39
+ appKey?: string;
40
+ appName?: string;
37
41
  }): SupabaseTarget;
38
42
  //# sourceMappingURL=supabaseService.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"supabaseService.d.ts","sourceRoot":"","sources":["../../../../src/services/supabaseService.ts"],"names":[],"mappings":"AAAA,OAAO,gCAAgC,CAAC;AAExC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AA4B1C,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;CACvB;AAkBD,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;GAOG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,cAAc,EACtB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,YAAY,CAAC,CA6BvB;AAED,6DAA6D;AAC7D,wBAAsB,YAAY,CAChC,MAAM,EAAE,cAAc,EACtB,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,GAC5B,OAAO,CAAC,SAAS,CAAC,CAoBpB;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,cAAc,EACtB,MAAM,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,IAAI,EACtC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAC/B,MAAM,IAAI,CA+BZ;AAED,yCAAyC;AACzC,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,cAAc,EACtB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,SAAS,CAAC,QAAQ,CAAC,GAC1B,OAAO,CAAC,IAAI,CAAC,CAOf;AAED,mEAAmE;AACnE,wBAAgB,gBAAgB,CAAC,MAAM,EAAE;IACvC,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,GAAG,cAAc,CAOjB"}
1
+ {"version":3,"file":"supabaseService.d.ts","sourceRoot":"","sources":["../../../../src/services/supabaseService.ts"],"names":[],"mappings":"AAAA,OAAO,gCAAgC,CAAC;AAExC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AA4B1C,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAmBD,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;GAOG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,cAAc,EACtB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,YAAY,CAAC,CA6BvB;AAED,6DAA6D;AAC7D,wBAAsB,YAAY,CAChC,MAAM,EAAE,cAAc,EACtB,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,GAC5B,OAAO,CAAC,SAAS,CAAC,CAuBpB;AA0BD;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,cAAc,EACtB,MAAM,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,IAAI,EACtC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAC/B,MAAM,IAAI,CA+BZ;AAED,yCAAyC;AACzC,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,cAAc,EACtB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,SAAS,CAAC,QAAQ,CAAC,GAC1B,OAAO,CAAC,IAAI,CAAC,CAOf;AAED,mEAAmE;AACnE,wBAAgB,gBAAgB,CAAC,MAAM,EAAE;IACvC,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,GAAG,cAAc,CAUjB"}
@@ -69,6 +69,8 @@ export interface BugReportInput {
69
69
  /** The full bug report persisted on the backend. */
70
70
  export interface BugReport extends BugReportInput {
71
71
  id?: string;
72
+ /** Logical app this report belongs to. */
73
+ appKey?: string;
72
74
  screenshotUrl: string | null;
73
75
  screenshotPath: string | null;
74
76
  context: CollectedContext;
@@ -102,6 +104,14 @@ export interface BugReporterConfig {
102
104
  supabaseUrl: string;
103
105
  /** Supabase anon (public) API key. */
104
106
  supabaseAnonKey: string;
107
+ /**
108
+ * Logical app identifier for multi-app bug tracking. Every report is tagged
109
+ * with this key so the admin panel can show per-app sections + counts and
110
+ * route notification emails per app. Defaults to "default".
111
+ */
112
+ appKey?: string;
113
+ /** Human-friendly app name shown in the admin panel (defaults to appKey). */
114
+ appName?: string;
105
115
  /** Postgres table reports are inserted into. Defaults to "bug_reports". */
106
116
  tableName?: string;
107
117
  /** Supabase Storage bucket for screenshots. Defaults to "bug-reports". */
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-bug-reporter",
3
- "version": "1.0.3",
3
+ "version": "1.1.0",
4
4
  "description": "Universal React Native bug reporter: auto-detect screenshots, annotate, collect device/app/user context, and ship to Supabase (Postgres + Storage) with Edge Function email.",
5
5
  "main": "lib/commonjs/index.js",
6
6
  "module": "lib/module/index.js",
@@ -33,12 +33,15 @@ export interface SupabaseTarget {
33
33
  supabaseAnonKey: string;
34
34
  tableName: string;
35
35
  storageBucket: string;
36
+ appKey: string;
37
+ appName: string;
36
38
  }
37
39
 
38
40
  /** DB row (snake_case) → SDK BugReport (camelCase). */
39
41
  function mapRow(row: Record<string, unknown>): BugReport {
40
42
  return {
41
43
  id: row.id as string,
44
+ appKey: (row.app_key as string) ?? 'default',
42
45
  title: (row.title as string) ?? '',
43
46
  description: (row.description as string) ?? '',
44
47
  severity: (row.severity as BugReport['severity']) ?? 'medium',
@@ -107,6 +110,7 @@ export async function insertReport(
107
110
  const { data, error } = await supabase
108
111
  .from(target.tableName)
109
112
  .insert({
113
+ app_key: target.appKey,
110
114
  title: report.title,
111
115
  description: report.description,
112
116
  severity: report.severity,
@@ -121,9 +125,35 @@ export async function insertReport(
121
125
  .single();
122
126
  if (error) throw error;
123
127
  logger.log('report inserted', data.id);
128
+ // Register the app (insert-if-absent) so it shows in the admin panel.
129
+ void ensureAppRegistered(target);
124
130
  return mapRow(data);
125
131
  }
126
132
 
133
+ /**
134
+ * Inserts the app into bug_report_apps if it's not there yet (without clobbering
135
+ * its notify_emails). Fire-and-forget — never blocks submission.
136
+ */
137
+ async function ensureAppRegistered(target: SupabaseTarget): Promise<void> {
138
+ try {
139
+ await fetch(
140
+ `${target.supabaseUrl.replace(/\/+$/, '')}/rest/v1/bug_report_apps?on_conflict=app_key`,
141
+ {
142
+ method: 'POST',
143
+ headers: {
144
+ apikey: target.supabaseAnonKey,
145
+ Authorization: `Bearer ${target.supabaseAnonKey}`,
146
+ 'Content-Type': 'application/json',
147
+ Prefer: 'resolution=ignore-duplicates',
148
+ },
149
+ body: JSON.stringify({ app_key: target.appKey, app_name: target.appName }),
150
+ },
151
+ );
152
+ } catch {
153
+ // ignore — not critical
154
+ }
155
+ }
156
+
127
157
  /**
128
158
  * Subscribes to the reports table (newest first). Does an initial fetch, then
129
159
  * refetches on any realtime change. Returns an unsubscribe function.
@@ -185,11 +215,16 @@ export function targetFromConfig(config: {
185
215
  supabaseAnonKey: string;
186
216
  tableName?: string;
187
217
  storageBucket?: string;
218
+ appKey?: string;
219
+ appName?: string;
188
220
  }): SupabaseTarget {
221
+ const appKey = config.appKey ?? 'default';
189
222
  return {
190
223
  supabaseUrl: config.supabaseUrl,
191
224
  supabaseAnonKey: config.supabaseAnonKey,
192
225
  tableName: config.tableName ?? 'bug_reports',
193
226
  storageBucket: config.storageBucket ?? 'bug-reports',
227
+ appKey,
228
+ appName: config.appName ?? appKey,
194
229
  };
195
230
  }
package/src/types.ts CHANGED
@@ -78,6 +78,8 @@ export interface BugReportInput {
78
78
  /** The full bug report persisted on the backend. */
79
79
  export interface BugReport extends BugReportInput {
80
80
  id?: string;
81
+ /** Logical app this report belongs to. */
82
+ appKey?: string;
81
83
  screenshotUrl: string | null;
82
84
  screenshotPath: string | null;
83
85
  context: CollectedContext;
@@ -115,6 +117,14 @@ export interface BugReporterConfig {
115
117
  supabaseUrl: string;
116
118
  /** Supabase anon (public) API key. */
117
119
  supabaseAnonKey: string;
120
+ /**
121
+ * Logical app identifier for multi-app bug tracking. Every report is tagged
122
+ * with this key so the admin panel can show per-app sections + counts and
123
+ * route notification emails per app. Defaults to "default".
124
+ */
125
+ appKey?: string;
126
+ /** Human-friendly app name shown in the admin panel (defaults to appKey). */
127
+ appName?: string;
118
128
  /** Postgres table reports are inserted into. Defaults to "bug_reports". */
119
129
  tableName?: string;
120
130
  /** Supabase Storage bucket for screenshots. Defaults to "bug-reports". */