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.
- package/android-template/app/build.gradle.kts +71 -4
- package/android-template/app/proguard-rules.pro +21 -18
- package/android-template/app/src/main/AndroidManifest.xml +17 -0
- package/android-template/app/src/main/java/com/pakstr/app/ApplicationClass.kt +14 -0
- package/android-template/app/src/main/java/com/pakstr/app/LocalServer.kt +80 -21
- package/android-template/app/src/main/java/com/pakstr/app/MainActivity.kt +61 -11
- package/android-template/app/src/main/java/com/pakstr/app/RuntimeConfig.kt +81 -37
- package/android-template/app/src/main/java/com/pakstr/app/ShellRuntime.kt +100 -9
- package/android-template/app/src/main/java/com/pakstr/app/WebViewController.kt +280 -20
- package/android-template/app/src/main/java/com/pakstr/app/crypto/Bip340Verifier.kt +0 -5
- package/android-template/app/src/main/java/com/pakstr/app/debug/AppDebugLogger.kt +348 -3
- package/android-template/app/src/main/java/com/pakstr/app/debug/CrashHandler.kt +32 -0
- package/android-template/app/src/main/java/com/pakstr/app/debug/DebugConfig.kt +11 -0
- package/android-template/app/src/main/java/com/pakstr/app/debug/DebugConfigLoader.kt +36 -0
- package/android-template/app/src/main/java/com/pakstr/app/debug/DebugConfigProvider.kt +29 -0
- package/android-template/app/src/main/java/com/pakstr/app/debug/DebugLogStorage.kt +139 -0
- package/android-template/app/src/main/java/com/pakstr/app/debug/DebugPreferences.kt +85 -0
- package/android-template/app/src/main/java/com/pakstr/app/debug/DebugReportExporter.kt +149 -0
- package/android-template/app/src/main/java/com/pakstr/app/debug/DebugReportShare.kt +52 -0
- package/android-template/app/src/main/java/com/pakstr/app/debug/DebugRuntimeOverride.kt +55 -0
- package/android-template/app/src/main/java/com/pakstr/app/debug/DebugSession.kt +16 -0
- package/android-template/app/src/main/java/com/pakstr/app/debug/DeveloperToolsManager.kt +63 -0
- package/android-template/app/src/main/java/com/pakstr/app/debug/WebViewDebugManager.kt +30 -0
- package/android-template/app/src/main/java/com/pakstr/app/debug/logging/PakstrLog.kt +16 -0
- package/android-template/app/src/main/java/com/pakstr/app/debug/logging/PakstrLogger.kt +154 -0
- package/android-template/app/src/main/java/com/pakstr/app/signer/AmberSigner.kt +1 -10
- package/android-template/app/src/main/java/com/pakstr/app/signer/NostrBridge.kt +163 -11
- package/android-template/app/src/main/java/com/pakstr/app/signer/SignerManager.kt +71 -0
- package/android-template/app/src/main/res/xml/file_paths.xml +9 -0
- package/android-template/gradle/libs.versions.toml +1 -0
- package/android-template/gradle.properties +2 -1
- package/dist/runners/LocalGradleRunner.js +12 -2
- package/dist/runtime/runtimeConfig.js +6 -1
- 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(
|
|
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
|
-
|
|
204
|
-
|
|
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.
|
|
215
|
-
|
|
216
|
-
|
|
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
|
}
|