pakstr 0.3.4 → 0.5.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.
Files changed (34) hide show
  1. package/android-template/app/build.gradle.kts +71 -4
  2. package/android-template/app/proguard-rules.pro +21 -18
  3. package/android-template/app/src/main/AndroidManifest.xml +17 -0
  4. package/android-template/app/src/main/java/com/pakstr/app/ApplicationClass.kt +14 -0
  5. package/android-template/app/src/main/java/com/pakstr/app/LocalServer.kt +80 -21
  6. package/android-template/app/src/main/java/com/pakstr/app/MainActivity.kt +61 -11
  7. package/android-template/app/src/main/java/com/pakstr/app/RuntimeConfig.kt +81 -37
  8. package/android-template/app/src/main/java/com/pakstr/app/ShellRuntime.kt +100 -9
  9. package/android-template/app/src/main/java/com/pakstr/app/WebViewController.kt +280 -20
  10. package/android-template/app/src/main/java/com/pakstr/app/crypto/Bip340Verifier.kt +0 -5
  11. package/android-template/app/src/main/java/com/pakstr/app/debug/AppDebugLogger.kt +348 -3
  12. package/android-template/app/src/main/java/com/pakstr/app/debug/CrashHandler.kt +32 -0
  13. package/android-template/app/src/main/java/com/pakstr/app/debug/DebugConfig.kt +11 -0
  14. package/android-template/app/src/main/java/com/pakstr/app/debug/DebugConfigLoader.kt +36 -0
  15. package/android-template/app/src/main/java/com/pakstr/app/debug/DebugConfigProvider.kt +29 -0
  16. package/android-template/app/src/main/java/com/pakstr/app/debug/DebugLogStorage.kt +139 -0
  17. package/android-template/app/src/main/java/com/pakstr/app/debug/DebugPreferences.kt +85 -0
  18. package/android-template/app/src/main/java/com/pakstr/app/debug/DebugReportExporter.kt +149 -0
  19. package/android-template/app/src/main/java/com/pakstr/app/debug/DebugReportShare.kt +52 -0
  20. package/android-template/app/src/main/java/com/pakstr/app/debug/DebugRuntimeOverride.kt +55 -0
  21. package/android-template/app/src/main/java/com/pakstr/app/debug/DebugSession.kt +16 -0
  22. package/android-template/app/src/main/java/com/pakstr/app/debug/DeveloperToolsManager.kt +63 -0
  23. package/android-template/app/src/main/java/com/pakstr/app/debug/WebViewDebugManager.kt +30 -0
  24. package/android-template/app/src/main/java/com/pakstr/app/debug/logging/PakstrLog.kt +16 -0
  25. package/android-template/app/src/main/java/com/pakstr/app/debug/logging/PakstrLogger.kt +154 -0
  26. package/android-template/app/src/main/java/com/pakstr/app/signer/AmberSigner.kt +1 -10
  27. package/android-template/app/src/main/java/com/pakstr/app/signer/NostrBridge.kt +163 -11
  28. package/android-template/app/src/main/java/com/pakstr/app/signer/SignerManager.kt +71 -0
  29. package/android-template/app/src/main/res/xml/file_paths.xml +9 -0
  30. package/android-template/gradle/libs.versions.toml +1 -0
  31. package/android-template/gradle.properties +2 -1
  32. package/dist/runners/LocalGradleRunner.js +12 -2
  33. package/dist/runtime/runtimeConfig.js +6 -1
  34. package/package.json +1 -1
@@ -43,6 +43,7 @@ class WebViewController(
43
43
  private val loadRunnable = Runnable {
44
44
  webView.loadUrl("http://127.0.0.1:$port/")
45
45
  //webView.loadUrl("https://sigit.io")
46
+ //webView.loadUrl("http://127.0.0.1:$port/not-found.html")
46
47
  }
47
48
 
48
49
  private var nip07Injected = false
@@ -84,18 +85,107 @@ class WebViewController(
84
85
  webViewClient = object : WebViewClient() {
85
86
 
86
87
  override fun onPageFinished(
87
- view: WebView?,
88
- url: String?
88
+ view: WebView?, url: String?
89
89
  ) {
90
90
  super.onPageFinished(view, url)
91
91
 
92
92
  hideLoader()
93
93
 
94
94
  if (!nip07Injected) {
95
- nip07Injected =
96
- injectNip07()
95
+ nip07Injected = injectNip07()
97
96
 
98
97
  }
98
+ injectDebugLogger()
99
+ }
100
+
101
+ override fun onReceivedHttpError(
102
+
103
+ view: WebView?,
104
+
105
+ request: WebResourceRequest?,
106
+
107
+ errorResponse: WebResourceResponse?
108
+
109
+ ) {
110
+
111
+ super.onReceivedHttpError(
112
+
113
+ view,
114
+
115
+ request,
116
+
117
+ errorResponse
118
+
119
+ )
120
+
121
+ val url =
122
+
123
+ request?.url?.toString()
124
+
125
+ ?: return
126
+
127
+ if (url.endsWith("favicon.ico")) {
128
+
129
+ return
130
+
131
+ }
132
+ if (AppDebugLogger.isWebViewLoggingEnabled(context)) {
133
+ AppDebugLogger.error(
134
+
135
+ context,
136
+
137
+ "WEBVIEW",
138
+
139
+ "HTTP error: $url status=${errorResponse?.statusCode}"
140
+
141
+ )
142
+ }
143
+ }
144
+
145
+ override fun onReceivedError(
146
+
147
+ view: WebView?,
148
+
149
+ request: WebResourceRequest?,
150
+
151
+ error: android.webkit.WebResourceError?
152
+
153
+ ) {
154
+
155
+ super.onReceivedError(
156
+
157
+ view,
158
+
159
+ request,
160
+
161
+ error
162
+
163
+ )
164
+
165
+ val url =
166
+
167
+ request?.url?.toString()
168
+
169
+ ?: "unknown"
170
+
171
+ val message =
172
+
173
+ error?.description
174
+
175
+ ?.toString()
176
+
177
+ ?: "unknown error"
178
+ if (AppDebugLogger.isWebViewLoggingEnabled(context)) {
179
+ AppDebugLogger.error(
180
+
181
+ context,
182
+
183
+ "WEBVIEW",
184
+
185
+ "Load error: $url - $message"
186
+
187
+ )
188
+ }
99
189
  }
100
190
 
101
191
  override fun shouldInterceptRequest(
@@ -110,22 +200,60 @@ class WebViewController(
110
200
  }
111
201
 
112
202
  override fun shouldOverrideUrlLoading(
113
- view: WebView?,
114
- request: WebResourceRequest?
203
+ view: WebView?, request: WebResourceRequest?
115
204
  ): Boolean {
116
205
  val url = request?.url ?: return true
117
206
  return url.host != "127.0.0.1"
118
207
  }
119
208
 
120
-
121
209
  }
122
210
  webChromeClient = object : WebChromeClient() {
123
211
 
124
- override fun onPermissionRequest(request: PermissionRequest) {
212
+ override fun onPermissionRequest(
213
+
214
+ request: PermissionRequest
215
+
216
+ ) {
125
217
 
126
218
  permissionHandler.onPermissionRequest(request)
127
219
 
128
220
  }
221
+
222
+ override fun onConsoleMessage(
223
+
224
+ consoleMessage: android.webkit.ConsoleMessage
225
+
226
+ ): Boolean {
227
+
228
+ val level =
229
+
230
+ when (consoleMessage.messageLevel()) {
231
+
232
+ android.webkit.ConsoleMessage.MessageLevel.ERROR -> "ERROR"
233
+
234
+ android.webkit.ConsoleMessage.MessageLevel.WARNING -> "WARN"
235
+
236
+ android.webkit.ConsoleMessage.MessageLevel.LOG -> "LOG"
237
+
238
+ else -> "DEBUG"
239
+ }
240
+ if (AppDebugLogger.isWebViewLoggingEnabled(context)) {
241
+ AppDebugLogger.log(
242
+
243
+ context,
244
+
245
+ "WEBVIEW",
246
+
247
+ "$level: ${consoleMessage.message()} " +
248
+
249
+ "(${consoleMessage.sourceId()}:${consoleMessage.lineNumber()})"
250
+
251
+ )
252
+ }
253
+ return true
254
+
255
+ }
256
+
129
257
  }
130
258
  }
131
259
 
@@ -139,7 +267,7 @@ class WebViewController(
139
267
 
140
268
  webView = webView,
141
269
 
142
- ),
270
+ ),
143
271
 
144
272
  "AndroidBridge"
145
273
 
@@ -199,23 +327,155 @@ class WebViewController(
199
327
  private fun injectNip07(): Boolean {
200
328
 
201
329
  return try {
202
- val js =
203
- context.assets
204
- .open("nip07.js")
205
- .bufferedReader()
206
- .readText()
330
+ val js = context.assets.open("nip07.js")
331
+ .bufferedReader()
332
+ .readText()
207
333
 
208
334
  webView.evaluateJavascript(
209
- js,
210
- null
335
+ js, null
211
336
  )
212
337
  true
213
338
  } catch (e: Exception) {
214
- AppDebugLogger.log(
215
- "WEBVIEW",
216
- "Failed loading nip07.js: ${e.message}"
217
- )
339
+ if (AppDebugLogger.isWebViewLoggingEnabled(context)) {
340
+ AppDebugLogger.log(
341
+ context, "WebViewController - WEBVIEW", "Failed loading nip07.js: ${e.message}"
342
+ )
343
+ }
218
344
  false
219
345
  }
220
346
  }
347
+
348
+ private fun injectDebugLogger() {
349
+
350
+ val js = """
351
+ (function(){
352
+
353
+ if (!window.AndroidBridge) {
354
+ return;
355
+ }
356
+
357
+
358
+ const oldLog = console.log;
359
+ const oldWarn = console.warn;
360
+ const oldError = console.error;
361
+
362
+
363
+ function send(level, args){
364
+
365
+ try {
366
+
367
+ const message =
368
+ Array.from(args)
369
+ .map(item => {
370
+
371
+ if(typeof item === 'object'){
372
+ return JSON.stringify(item);
373
+ }
374
+
375
+ return String(item);
376
+
377
+ })
378
+ .join(" ");
379
+
380
+ window.AndroidBridge.debugLog(
381
+ level,
382
+ message
383
+ );
384
+
385
+ } catch(e){
386
+
387
+ }
388
+ }
389
+
390
+
391
+ console.log = function(){
392
+
393
+ send(
394
+ "LOG",
395
+ arguments
396
+ );
397
+
398
+ oldLog.apply(
399
+ console,
400
+ arguments
401
+ );
402
+ };
403
+
404
+
405
+ console.warn = function(){
406
+
407
+ send(
408
+ "WARN",
409
+ arguments
410
+ );
411
+
412
+ oldWarn.apply(
413
+ console,
414
+ arguments
415
+ );
416
+ };
417
+
418
+
419
+ console.error = function(){
420
+
421
+ send(
422
+ "ERROR",
423
+ arguments
424
+ );
425
+
426
+ oldError.apply(
427
+ console,
428
+ arguments
429
+ );
430
+ };
431
+
432
+
433
+ window.onerror =
434
+ function(
435
+ message,
436
+ source,
437
+ line,
438
+ column,
439
+ error
440
+ ){
441
+
442
+ send(
443
+ "ERROR",
444
+ [
445
+ "JS ERROR:",
446
+ message,
447
+ source,
448
+ line,
449
+ column,
450
+ error?.stack
451
+ ]
452
+ );
453
+
454
+ return false;
455
+ };
456
+
457
+
458
+ window.onunhandledrejection =
459
+ function(event){
460
+
461
+ send(
462
+ "ERROR",
463
+ [
464
+ "PROMISE ERROR:",
465
+ event.reason
466
+ ]
467
+ );
468
+
469
+ };
470
+
471
+
472
+ })();
473
+ """.trimIndent()
474
+
475
+
476
+ webView.evaluateJavascript(
477
+ js,
478
+ null
479
+ )
480
+ }
221
481
  }
@@ -146,11 +146,6 @@ object Bip340Verifier {
146
146
 
147
147
  } catch (e: Exception) {
148
148
 
149
- AppDebugLogger.log(
150
- "BIP340",
151
- "Verification failed: ${e.message}"
152
- )
153
-
154
149
  false
155
150
 
156
151
  }