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
|
@@ -3,6 +3,7 @@ package com.pakstr.app
|
|
|
3
3
|
import android.content.Context
|
|
4
4
|
import android.util.Log
|
|
5
5
|
import org.json.JSONObject
|
|
6
|
+
import com.pakstr.app.debug.DebugConfig
|
|
6
7
|
|
|
7
8
|
object RuntimeConfig {
|
|
8
9
|
|
|
@@ -10,7 +11,6 @@ object RuntimeConfig {
|
|
|
10
11
|
|
|
11
12
|
private var config: JSONObject? = null
|
|
12
13
|
|
|
13
|
-
|
|
14
14
|
fun load(context: Context): JSONObject {
|
|
15
15
|
|
|
16
16
|
config?.let {
|
|
@@ -21,14 +21,12 @@ object RuntimeConfig {
|
|
|
21
21
|
|
|
22
22
|
config = try {
|
|
23
23
|
|
|
24
|
-
val input =
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
)
|
|
24
|
+
val input = context.assets.open(
|
|
25
|
+
"www/pakstr-runtime.json"
|
|
26
|
+
)
|
|
28
27
|
|
|
29
|
-
val json =
|
|
30
|
-
|
|
31
|
-
.use { it.readText() }
|
|
28
|
+
val json = input.bufferedReader()
|
|
29
|
+
.use { it.readText() }
|
|
32
30
|
|
|
33
31
|
|
|
34
32
|
JSONObject(json)
|
|
@@ -36,9 +34,7 @@ object RuntimeConfig {
|
|
|
36
34
|
} catch (e: Exception) {
|
|
37
35
|
|
|
38
36
|
Log.e(
|
|
39
|
-
TAG,
|
|
40
|
-
"Failed loading runtime config",
|
|
41
|
-
e
|
|
37
|
+
TAG, "Failed loading runtime config", e
|
|
42
38
|
)
|
|
43
39
|
|
|
44
40
|
JSONObject()
|
|
@@ -47,15 +43,13 @@ object RuntimeConfig {
|
|
|
47
43
|
|
|
48
44
|
|
|
49
45
|
Log.d(
|
|
50
|
-
TAG,
|
|
51
|
-
"FINAL CONFIG: $config"
|
|
46
|
+
TAG, "FINAL CONFIG: $config"
|
|
52
47
|
)
|
|
53
48
|
|
|
54
49
|
|
|
55
50
|
return config!!
|
|
56
51
|
}
|
|
57
52
|
|
|
58
|
-
|
|
59
53
|
/**
|
|
60
54
|
* Returns backend API URL.
|
|
61
55
|
*
|
|
@@ -67,17 +61,13 @@ object RuntimeConfig {
|
|
|
67
61
|
context: Context
|
|
68
62
|
): String? {
|
|
69
63
|
|
|
70
|
-
val value =
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
"apiBase",
|
|
74
|
-
""
|
|
75
|
-
)
|
|
64
|
+
val value = load(context).optString(
|
|
65
|
+
"apiBase", ""
|
|
66
|
+
)
|
|
76
67
|
|
|
77
68
|
|
|
78
69
|
Log.d(
|
|
79
|
-
TAG,
|
|
80
|
-
"apiBase=$value"
|
|
70
|
+
TAG, "apiBase=$value"
|
|
81
71
|
)
|
|
82
72
|
|
|
83
73
|
|
|
@@ -86,7 +76,6 @@ object RuntimeConfig {
|
|
|
86
76
|
}
|
|
87
77
|
}
|
|
88
78
|
|
|
89
|
-
|
|
90
79
|
/**
|
|
91
80
|
* Determines if REST API proxy should be enabled.
|
|
92
81
|
*/
|
|
@@ -94,20 +83,17 @@ object RuntimeConfig {
|
|
|
94
83
|
context: Context
|
|
95
84
|
): Boolean {
|
|
96
85
|
|
|
97
|
-
val enabled =
|
|
98
|
-
!apiBase(context).isNullOrBlank()
|
|
86
|
+
val enabled = !apiBase(context).isNullOrBlank()
|
|
99
87
|
|
|
100
88
|
|
|
101
89
|
Log.d(
|
|
102
|
-
TAG,
|
|
103
|
-
"apiEnabled=$enabled"
|
|
90
|
+
TAG, "apiEnabled=$enabled"
|
|
104
91
|
)
|
|
105
92
|
|
|
106
93
|
|
|
107
94
|
return enabled
|
|
108
95
|
}
|
|
109
96
|
|
|
110
|
-
|
|
111
97
|
/**
|
|
112
98
|
* Nostr relay URL.
|
|
113
99
|
*/
|
|
@@ -115,24 +101,59 @@ object RuntimeConfig {
|
|
|
115
101
|
context: Context
|
|
116
102
|
): String {
|
|
117
103
|
|
|
118
|
-
val relay =
|
|
104
|
+
val relay = load(context).optString(
|
|
105
|
+
"relayUrl", ""
|
|
106
|
+
)
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
Log.d(
|
|
110
|
+
TAG, "relayUrl=$relay"
|
|
111
|
+
)
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
return relay
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
|
|
119
|
+
* Determines if developer debug tools are enabled.
|
|
120
|
+
|
|
121
|
+
*/
|
|
122
|
+
|
|
123
|
+
fun debugEnabled(
|
|
124
|
+
|
|
125
|
+
context: Context
|
|
126
|
+
|
|
127
|
+
): Boolean {
|
|
128
|
+
|
|
129
|
+
val enabled =
|
|
130
|
+
|
|
119
131
|
load(context)
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
132
|
+
|
|
133
|
+
.optJSONObject("debug")
|
|
134
|
+
|
|
135
|
+
?.optBoolean(
|
|
136
|
+
|
|
137
|
+
"enabled",
|
|
138
|
+
|
|
139
|
+
false
|
|
140
|
+
|
|
123
141
|
)
|
|
124
142
|
|
|
143
|
+
?: false
|
|
125
144
|
|
|
126
145
|
Log.d(
|
|
146
|
+
|
|
127
147
|
TAG,
|
|
128
|
-
|
|
148
|
+
|
|
149
|
+
"debugEnabled=$enabled"
|
|
150
|
+
|
|
129
151
|
)
|
|
130
152
|
|
|
153
|
+
return enabled
|
|
131
154
|
|
|
132
|
-
return relay
|
|
133
155
|
}
|
|
134
156
|
|
|
135
|
-
|
|
136
157
|
/**
|
|
137
158
|
* Clears cached config.
|
|
138
159
|
* Useful for testing after changing pakstr-runtime.json.
|
|
@@ -142,8 +163,31 @@ object RuntimeConfig {
|
|
|
142
163
|
config = null
|
|
143
164
|
|
|
144
165
|
Log.d(
|
|
145
|
-
TAG,
|
|
146
|
-
|
|
166
|
+
TAG, "Config cache cleared"
|
|
167
|
+
)
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
fun debugConfig(
|
|
171
|
+
context: Context
|
|
172
|
+
): DebugConfig {
|
|
173
|
+
|
|
174
|
+
val debug = load(context).optJSONObject("debug") ?: return DebugConfig()
|
|
175
|
+
|
|
176
|
+
|
|
177
|
+
return DebugConfig(
|
|
178
|
+
|
|
179
|
+
enabled = debug.optBoolean(
|
|
180
|
+
"enabled", false
|
|
181
|
+
),
|
|
182
|
+
|
|
183
|
+
networkLogs = debug.optBoolean(
|
|
184
|
+
"networkLogs", false
|
|
185
|
+
),
|
|
186
|
+
|
|
187
|
+
webViewLogs = debug.optBoolean(
|
|
188
|
+
"webViewLogs", false
|
|
189
|
+
),
|
|
190
|
+
|
|
147
191
|
)
|
|
148
192
|
}
|
|
149
193
|
}
|
|
@@ -26,6 +26,12 @@ class ShellRuntime(
|
|
|
26
26
|
|
|
27
27
|
fun start() {
|
|
28
28
|
|
|
29
|
+
AppDebugLogger.log(
|
|
30
|
+
context,
|
|
31
|
+
"RUNTIME",
|
|
32
|
+
"Starting ShellRuntime"
|
|
33
|
+
)
|
|
34
|
+
|
|
29
35
|
controller = WebViewController(
|
|
30
36
|
context,
|
|
31
37
|
webView,
|
|
@@ -34,14 +40,28 @@ class ShellRuntime(
|
|
|
34
40
|
permissionHandler
|
|
35
41
|
)
|
|
36
42
|
|
|
43
|
+
AppDebugLogger.log(
|
|
44
|
+
context,
|
|
45
|
+
"RUNTIME",
|
|
46
|
+
"WebViewController created"
|
|
47
|
+
)
|
|
48
|
+
|
|
49
|
+
|
|
37
50
|
CoroutineScope(Dispatchers.IO).launch {
|
|
38
51
|
|
|
52
|
+
AppDebugLogger.log(
|
|
53
|
+
context,
|
|
54
|
+
"RUNTIME",
|
|
55
|
+
"Starting background initialization"
|
|
56
|
+
)
|
|
57
|
+
|
|
39
58
|
val ok = startServer()
|
|
40
59
|
|
|
41
60
|
|
|
42
61
|
if (!ok) {
|
|
43
62
|
|
|
44
|
-
AppDebugLogger.
|
|
63
|
+
AppDebugLogger.error(
|
|
64
|
+
context,
|
|
45
65
|
"RUNTIME",
|
|
46
66
|
"Server failed"
|
|
47
67
|
)
|
|
@@ -51,22 +71,53 @@ class ShellRuntime(
|
|
|
51
71
|
}
|
|
52
72
|
|
|
53
73
|
|
|
74
|
+
AppDebugLogger.log(
|
|
75
|
+
context,
|
|
76
|
+
"RUNTIME",
|
|
77
|
+
"Server ready, switching to main thread"
|
|
78
|
+
)
|
|
79
|
+
|
|
80
|
+
|
|
54
81
|
withContext(Dispatchers.Main) {
|
|
55
82
|
|
|
83
|
+
AppDebugLogger.log(
|
|
84
|
+
context,
|
|
85
|
+
"WEBVIEW",
|
|
86
|
+
"Setting up WebView controller"
|
|
87
|
+
)
|
|
88
|
+
|
|
56
89
|
controller.setup()
|
|
57
90
|
|
|
91
|
+
AppDebugLogger.log(
|
|
92
|
+
context,
|
|
93
|
+
"WEBVIEW",
|
|
94
|
+
"WebView controller setup completed"
|
|
95
|
+
)
|
|
96
|
+
|
|
58
97
|
}
|
|
59
98
|
|
|
60
99
|
}
|
|
61
|
-
|
|
100
|
+
AppDebugLogger.load(context)
|
|
62
101
|
}
|
|
63
102
|
|
|
64
|
-
|
|
65
103
|
private fun startServer(): Boolean {
|
|
66
104
|
|
|
67
|
-
if (server != null)
|
|
105
|
+
if (server != null) {
|
|
106
|
+
|
|
107
|
+
AppDebugLogger.log(
|
|
108
|
+
|
|
109
|
+
context,
|
|
110
|
+
|
|
111
|
+
"SERVER",
|
|
112
|
+
|
|
113
|
+
"Already running"
|
|
114
|
+
|
|
115
|
+
)
|
|
116
|
+
|
|
68
117
|
return true
|
|
69
118
|
|
|
119
|
+
}
|
|
120
|
+
|
|
70
121
|
return try {
|
|
71
122
|
|
|
72
123
|
server = LocalServer(
|
|
@@ -80,32 +131,72 @@ class ShellRuntime(
|
|
|
80
131
|
)
|
|
81
132
|
|
|
82
133
|
AppDebugLogger.log(
|
|
134
|
+
|
|
135
|
+
context,
|
|
136
|
+
|
|
83
137
|
"SERVER",
|
|
84
|
-
|
|
138
|
+
|
|
139
|
+
"Starting NanoHTTPD on port $port"
|
|
140
|
+
|
|
85
141
|
)
|
|
86
142
|
|
|
87
143
|
true
|
|
88
144
|
|
|
89
145
|
} catch (e: Exception) {
|
|
90
146
|
|
|
91
|
-
AppDebugLogger.
|
|
147
|
+
AppDebugLogger.error(
|
|
148
|
+
|
|
149
|
+
context,
|
|
150
|
+
|
|
92
151
|
"SERVER",
|
|
93
|
-
|
|
152
|
+
|
|
153
|
+
"Failed to start",
|
|
154
|
+
|
|
155
|
+
e
|
|
156
|
+
|
|
94
157
|
)
|
|
95
158
|
|
|
96
159
|
false
|
|
97
160
|
}
|
|
98
161
|
}
|
|
99
162
|
|
|
100
|
-
|
|
101
163
|
fun stop() {
|
|
102
164
|
|
|
165
|
+
AppDebugLogger.log(
|
|
166
|
+
|
|
167
|
+
context,
|
|
168
|
+
|
|
169
|
+
"RUNTIME",
|
|
170
|
+
|
|
171
|
+
"Stopping ShellRuntime"
|
|
172
|
+
|
|
173
|
+
)
|
|
174
|
+
|
|
103
175
|
server?.stop()
|
|
104
176
|
|
|
177
|
+
AppDebugLogger.log(
|
|
178
|
+
|
|
179
|
+
context,
|
|
180
|
+
|
|
181
|
+
"SERVER",
|
|
182
|
+
|
|
183
|
+
"Server stopped"
|
|
184
|
+
|
|
185
|
+
)
|
|
186
|
+
|
|
105
187
|
controller.destroy()
|
|
106
188
|
|
|
107
|
-
|
|
189
|
+
AppDebugLogger.log(
|
|
190
|
+
|
|
191
|
+
context,
|
|
192
|
+
|
|
193
|
+
"WEBVIEW",
|
|
108
194
|
|
|
195
|
+
"WebView destroyed"
|
|
196
|
+
|
|
197
|
+
)
|
|
198
|
+
|
|
199
|
+
}
|
|
109
200
|
|
|
110
201
|
fun getWebview(): WebView {
|
|
111
202
|
|