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
@@ -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
- context.assets.open(
26
- "www/pakstr-runtime.json"
27
- )
24
+ val input = context.assets.open(
25
+ "www/pakstr-runtime.json"
26
+ )
28
27
 
29
- val json =
30
- input.bufferedReader()
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
- load(context)
72
- .optString(
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
- .optString(
121
- "relayUrl",
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
- "relayUrl=$relay"
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
- "Config cache cleared"
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.log(
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
- "Started OK"
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.log(
147
+ AppDebugLogger.error(
148
+
149
+ context,
150
+
92
151
  "SERVER",
93
- "Failed to start: ${e.message}"
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