Skip to content

Commit 285717d

Browse files
committed
fix: request id handling in js runtime notifier and terminal page
1 parent a1cf3f7 commit 285717d

File tree

2 files changed

+48
-26
lines changed

2 files changed

+48
-26
lines changed

lib/providers/js_runtime_notifier.dart

Lines changed: 42 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ class JsRuntimeNotifier extends StateNotifier<JsRuntimeState> {
4343

4444
final Ref ref;
4545
late final JavascriptRuntime _runtime;
46+
String? _currentRequestId;
4647

4748
void _initialize() {
4849
if (state.initialized) return;
@@ -90,6 +91,7 @@ class JsRuntimeNotifier extends StateNotifier<JsRuntimeState> {
9091
})> executePreRequestScript({
9192
required RequestModel currentRequestModel,
9293
required Map<String, dynamic> activeEnvironment,
94+
required String requestId,
9395
}) async {
9496
if ((currentRequestModel.preRequestScript ?? '').trim().isEmpty) {
9597
return (
@@ -119,6 +121,7 @@ class JsRuntimeNotifier extends StateNotifier<JsRuntimeState> {
119121
HttpRequestModel resultingRequest = httpRequest!;
120122
Map<String, dynamic> resultingEnvironment = Map.from(activeEnvironment);
121123
try {
124+
_currentRequestId = requestId;
122125
final term = ref.read(terminalStateProvider.notifier);
123126
final res = _runtime.evaluate(fullScript);
124127
state = state.copyWith(
@@ -128,7 +131,9 @@ class JsRuntimeNotifier extends StateNotifier<JsRuntimeState> {
128131
if (res.isError) {
129132
term.logJs(
130133
level: 'error',
131-
args: ['Pre-request script error', res.stringResult]);
134+
args: ['Pre-request script error', res.stringResult],
135+
context: 'preRequest',
136+
contextRequestId: requestId);
132137
} else if (res.stringResult.isNotEmpty) {
133138
final decoded = jsonDecode(res.stringResult);
134139
if (decoded is Map<String, dynamic>) {
@@ -140,7 +145,9 @@ class JsRuntimeNotifier extends StateNotifier<JsRuntimeState> {
140145
} catch (e) {
141146
term.logJs(
142147
level: 'error',
143-
args: ['Deserialize modified request failed', e.toString()]);
148+
args: ['Deserialize modified request failed', e.toString()],
149+
context: 'preRequest',
150+
contextRequestId: requestId);
144151
}
145152
}
146153
if (decoded['environment'] is Map) {
@@ -152,9 +159,13 @@ class JsRuntimeNotifier extends StateNotifier<JsRuntimeState> {
152159
} catch (e) {
153160
final msg = 'Dart-level error during pre-request script execution: $e';
154161
state = state.copyWith(lastError: msg);
155-
ref
156-
.read(terminalStateProvider.notifier)
157-
.logJs(level: 'error', args: [msg]);
162+
ref.read(terminalStateProvider.notifier).logJs(
163+
level: 'error',
164+
args: [msg],
165+
context: 'preRequest',
166+
contextRequestId: requestId);
167+
} finally {
168+
_currentRequestId = null;
158169
}
159170
return (
160171
updatedRequest: resultingRequest,
@@ -169,6 +180,7 @@ class JsRuntimeNotifier extends StateNotifier<JsRuntimeState> {
169180
})> executePostResponseScript({
170181
required RequestModel currentRequestModel,
171182
required Map<String, dynamic> activeEnvironment,
183+
required String requestId,
172184
}) async {
173185
if ((currentRequestModel.postRequestScript ?? '').trim().isEmpty) {
174186
return (
@@ -200,6 +212,7 @@ class JsRuntimeNotifier extends StateNotifier<JsRuntimeState> {
200212
HttpResponseModel resultingResponse = httpResponse!;
201213
Map<String, dynamic> resultingEnvironment = Map.from(activeEnvironment);
202214
try {
215+
_currentRequestId = requestId;
203216
final term = ref.read(terminalStateProvider.notifier);
204217
final res = _runtime.evaluate(fullScript);
205218
state = state.copyWith(
@@ -209,7 +222,9 @@ class JsRuntimeNotifier extends StateNotifier<JsRuntimeState> {
209222
if (res.isError) {
210223
term.logJs(
211224
level: 'error',
212-
args: ['Post-response script error', res.stringResult]);
225+
args: ['Post-response script error', res.stringResult],
226+
context: 'postResponse',
227+
contextRequestId: requestId);
213228
} else if (res.stringResult.isNotEmpty) {
214229
final decoded = jsonDecode(res.stringResult);
215230
if (decoded is Map<String, dynamic>) {
@@ -221,7 +236,9 @@ class JsRuntimeNotifier extends StateNotifier<JsRuntimeState> {
221236
} catch (e) {
222237
term.logJs(
223238
level: 'error',
224-
args: ['Deserialize modified response failed', e.toString()]);
239+
args: ['Deserialize modified response failed', e.toString()],
240+
context: 'postResponse',
241+
contextRequestId: requestId);
225242
}
226243
}
227244
if (decoded['environment'] is Map) {
@@ -233,18 +250,20 @@ class JsRuntimeNotifier extends StateNotifier<JsRuntimeState> {
233250
} catch (e) {
234251
final msg = 'Dart-level error during post-response script execution: $e';
235252
state = state.copyWith(lastError: msg);
236-
ref
237-
.read(terminalStateProvider.notifier)
238-
.logJs(level: 'error', args: [msg]);
253+
ref.read(terminalStateProvider.notifier).logJs(
254+
level: 'error',
255+
args: [msg],
256+
context: 'postResponse',
257+
contextRequestId: requestId);
258+
} finally {
259+
_currentRequestId = null;
239260
}
240261
return (
241262
updatedResponse: resultingResponse,
242263
updatedEnvironment: resultingEnvironment,
243264
);
244265
}
245266

246-
// High-level helpers (migrated from pre_post_script_utils) -----------------
247-
248267
Future<RequestModel> handlePreRequestScript(
249268
RequestModel requestModel,
250269
EnvironmentModel? originalEnvironmentModel,
@@ -253,6 +272,7 @@ class JsRuntimeNotifier extends StateNotifier<JsRuntimeState> {
253272
final scriptResult = await executePreRequestScript(
254273
currentRequestModel: requestModel,
255274
activeEnvironment: originalEnvironmentModel?.toJson() ?? {},
275+
requestId: requestModel.id,
256276
);
257277
final newRequestModel =
258278
requestModel.copyWith(httpRequestModel: scriptResult.updatedRequest);
@@ -304,6 +324,7 @@ class JsRuntimeNotifier extends StateNotifier<JsRuntimeState> {
304324
final scriptResult = await executePostResponseScript(
305325
currentRequestModel: requestModel,
306326
activeEnvironment: originalEnvironmentModel?.toJson() ?? {'values': []},
327+
requestId: requestModel.id,
307328
);
308329
final newRequestModel =
309330
requestModel.copyWith(httpResponseModel: scriptResult.updatedResponse);
@@ -374,7 +395,8 @@ class JsRuntimeNotifier extends StateNotifier<JsRuntimeState> {
374395
} else {
375396
argList = [args.toString()];
376397
}
377-
term.logJs(level: level, args: argList);
398+
term.logJs(
399+
level: level, args: argList, contextRequestId: _currentRequestId);
378400
} catch (e) {
379401
print('[JS ${level.toUpperCase()} HANDLER ERROR]: $args, Error: $e');
380402
}
@@ -391,9 +413,15 @@ class JsRuntimeNotifier extends StateNotifier<JsRuntimeState> {
391413
level: 'fatal',
392414
args: [if (error != null) error, message],
393415
stack: stack,
416+
context: 'global',
417+
contextRequestId: _currentRequestId,
394418
);
395419
} else {
396-
term.logJs(level: 'fatal', args: ['Malformed fatal payload', '$args']);
420+
term.logJs(
421+
level: 'fatal',
422+
args: ['Malformed fatal payload', '$args'],
423+
context: 'global',
424+
contextRequestId: _currentRequestId);
397425
}
398426
} catch (e) {
399427
print('[JS FATAL ERROR decoding error]: $args, Error: $e');

lib/screens/terminal/terminal_page.dart

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@ class _TerminalPageState extends ConsumerState<TerminalPage> {
3939
Widget build(BuildContext context) {
4040
final state = ref.watch(terminalStateProvider);
4141
final collection = ref.watch(collectionStateNotifierProvider);
42-
final selectedId = ref.watch(selectedIdStateProvider);
4342
final allEntries = state.entries;
4443
final filtered = _applyFilters(allEntries);
4544

@@ -63,23 +62,18 @@ class _TerminalPageState extends ConsumerState<TerminalPage> {
6362
itemBuilder: (ctx, i) {
6463
final e = filtered[filtered.length - 1 - i];
6564
String requestName = '';
66-
if (e.source == TerminalSource.js) {
67-
if (selectedId != null) {
68-
final model = collection?[selectedId];
69-
if (model != null) {
70-
requestName =
71-
model.name.isNotEmpty ? model.name : 'Untitled';
72-
} else {
73-
requestName = 'Untitled';
74-
}
65+
if (e.source == TerminalSource.js &&
66+
e.requestId != null) {
67+
final model = collection?[e.requestId];
68+
if (model != null) {
69+
requestName =
70+
model.name.isNotEmpty ? model.name : 'Untitled';
7571
}
7672
} else if (e.requestId != null) {
7773
final model = collection?[e.requestId];
7874
if (model != null) {
7975
requestName =
8076
model.name.isNotEmpty ? model.name : 'Untitled';
81-
} else {
82-
requestName = 'Untitled';
8377
}
8478
}
8579
switch (e.source) {

0 commit comments

Comments
 (0)