@ocpp-debugkit/toolkit 0.2.0 → 0.2.1

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 (70) hide show
  1. package/dist/cli/commands/report.d.ts.map +1 -1
  2. package/dist/cli/commands/report.js +6 -3
  3. package/dist/cli/commands/report.js.map +1 -1
  4. package/dist/cli/commands/scenario.d.ts +11 -3
  5. package/dist/cli/commands/scenario.d.ts.map +1 -1
  6. package/dist/cli/commands/scenario.js +41 -4
  7. package/dist/cli/commands/scenario.js.map +1 -1
  8. package/dist/cli/index.js +14 -5
  9. package/dist/cli/index.js.map +1 -1
  10. package/dist/core/__fixtures__/connector-fault.d.ts +6 -0
  11. package/dist/core/__fixtures__/connector-fault.d.ts.map +1 -1
  12. package/dist/core/__fixtures__/connector-fault.js +11 -1
  13. package/dist/core/__fixtures__/connector-fault.js.map +1 -1
  14. package/dist/core/__fixtures__/normal-session.d.ts +6 -0
  15. package/dist/core/__fixtures__/normal-session.d.ts.map +1 -1
  16. package/dist/core/__fixtures__/normal-session.js +10 -0
  17. package/dist/core/__fixtures__/normal-session.js.map +1 -1
  18. package/dist/core/detection.d.ts +13 -3
  19. package/dist/core/detection.d.ts.map +1 -1
  20. package/dist/core/detection.js +338 -6
  21. package/dist/core/detection.js.map +1 -1
  22. package/dist/core/fixtures/index.d.ts +12 -0
  23. package/dist/core/fixtures/index.d.ts.map +1 -1
  24. package/dist/core/types.d.ts +2 -2
  25. package/dist/core/types.d.ts.map +1 -1
  26. package/dist/react/components.d.ts +9 -45
  27. package/dist/react/components.d.ts.map +1 -1
  28. package/dist/react/components.js +120 -38
  29. package/dist/react/components.js.map +1 -1
  30. package/dist/reporter/html.d.ts +25 -0
  31. package/dist/reporter/html.d.ts.map +1 -0
  32. package/dist/reporter/html.js +396 -0
  33. package/dist/reporter/html.js.map +1 -0
  34. package/dist/reporter/index.d.ts +1 -0
  35. package/dist/reporter/index.d.ts.map +1 -1
  36. package/dist/reporter/index.js +1 -0
  37. package/dist/reporter/index.js.map +1 -1
  38. package/dist/scenarios/__scenarios__/diagnostics-failure.d.ts +58 -0
  39. package/dist/scenarios/__scenarios__/diagnostics-failure.d.ts.map +1 -0
  40. package/dist/scenarios/__scenarios__/diagnostics-failure.js +91 -0
  41. package/dist/scenarios/__scenarios__/diagnostics-failure.js.map +1 -0
  42. package/dist/scenarios/__scenarios__/invalid-stop-reason.d.ts +118 -0
  43. package/dist/scenarios/__scenarios__/invalid-stop-reason.d.ts.map +1 -0
  44. package/dist/scenarios/__scenarios__/invalid-stop-reason.js +226 -0
  45. package/dist/scenarios/__scenarios__/invalid-stop-reason.js.map +1 -0
  46. package/dist/scenarios/__scenarios__/meter-value-gap.d.ts +103 -0
  47. package/dist/scenarios/__scenarios__/meter-value-gap.d.ts.map +1 -0
  48. package/dist/scenarios/__scenarios__/meter-value-gap.js +196 -0
  49. package/dist/scenarios/__scenarios__/meter-value-gap.js.map +1 -0
  50. package/dist/scenarios/__scenarios__/station-offline.d.ts +6 -0
  51. package/dist/scenarios/__scenarios__/station-offline.d.ts.map +1 -1
  52. package/dist/scenarios/__scenarios__/station-offline.js +10 -0
  53. package/dist/scenarios/__scenarios__/station-offline.js.map +1 -1
  54. package/dist/scenarios/__scenarios__/status-transition-violation.d.ts +52 -0
  55. package/dist/scenarios/__scenarios__/status-transition-violation.d.ts.map +1 -0
  56. package/dist/scenarios/__scenarios__/status-transition-violation.js +112 -0
  57. package/dist/scenarios/__scenarios__/status-transition-violation.js.map +1 -0
  58. package/dist/scenarios/__scenarios__/unexpected-start.d.ts +80 -0
  59. package/dist/scenarios/__scenarios__/unexpected-start.d.ts.map +1 -0
  60. package/dist/scenarios/__scenarios__/unexpected-start.js +124 -0
  61. package/dist/scenarios/__scenarios__/unexpected-start.js.map +1 -0
  62. package/dist/scenarios/__scenarios__/unexpected-stop-reason.d.ts +6 -0
  63. package/dist/scenarios/__scenarios__/unexpected-stop-reason.d.ts.map +1 -1
  64. package/dist/scenarios/__scenarios__/unexpected-stop-reason.js +10 -0
  65. package/dist/scenarios/__scenarios__/unexpected-stop-reason.js.map +1 -1
  66. package/dist/scenarios/index.d.ts +8 -3
  67. package/dist/scenarios/index.d.ts.map +1 -1
  68. package/dist/scenarios/index.js +24 -4
  69. package/dist/scenarios/index.js.map +1 -1
  70. package/package.json +1 -1
@@ -1,11 +1,21 @@
1
1
  /**
2
2
  * Failure detection — analyzes events and sessions for known failure patterns.
3
3
  *
4
- * Three detection rules in v0.1:
4
+ * 10 detection rules (v0.1 + v0.2):
5
+ *
6
+ * v0.1:
5
7
  * 1. FAILED_AUTHORIZATION — Authorize response with idTagInfo.status = "Invalid"
6
8
  * 2. CONNECTOR_FAULT — StatusNotification with status = "Faulted" during active session
7
- * 3. STATION_OFFLINE_DURING_SESSION — session has StartTransaction but no StopTransaction,
8
- * or connector transitions to Unavailable/Offline during an active transaction
9
+ * 3. STATION_OFFLINE_DURING_SESSION — session has StartTransaction but no StopTransaction
10
+ *
11
+ * v0.2:
12
+ * 4. TIMEOUT_NO_HEARTBEAT — no Heartbeat within expected interval after BootNotification
13
+ * 5. METER_VALUE_GAP — no MeterValues during an active transaction
14
+ * 6. INVALID_STOP_REASON — StopTransaction with unexpected/invalid stop reason
15
+ * 7. UNEXPECTED_START — StartTransaction without preceding BootNotification or Authorize
16
+ * 8. STATUS_TRANSITION_VIOLATION — illegal connector status transition
17
+ * 9. DIAGNOSTICS_FAILURE — DiagnosticsStatusNotification indicating failure
18
+ * 10. FIRMWARE_UPDATE_FAILURE — FirmwareStatusNotification indicating failure
9
19
  *
10
20
  * @see ADR-0003
11
21
  */
@@ -33,11 +43,63 @@ const SUGGESTED_STEPS = {
33
43
  'Check if the station firmware has a known stability issue',
34
44
  'Investigate if maintenance was performed on the station',
35
45
  ],
46
+ TIMEOUT_NO_HEARTBEAT: [
47
+ 'Check the station network connectivity',
48
+ 'Verify the WebSocket connection is stable',
49
+ 'Review the station heartbeat interval configuration',
50
+ 'Check if the station has rebooted or lost power',
51
+ 'Inspect the CSMS for connection acceptance issues',
52
+ ],
53
+ METER_VALUE_GAP: [
54
+ 'Verify the meter is functioning correctly',
55
+ 'Check the meter value reporting interval configuration',
56
+ 'Inspect the OCPP connection stability during the session',
57
+ 'Review station logs for meter communication errors',
58
+ 'Consider hardware replacement if meter is faulty',
59
+ ],
60
+ INVALID_STOP_REASON: [
61
+ 'Review the StopTransaction payload for the stop reason',
62
+ 'Check if the stop reason is within the OCPP 1.6 specification',
63
+ 'Investigate why the station used a non-standard reason',
64
+ 'Review station firmware for stop reason mapping bugs',
65
+ ],
66
+ UNEXPECTED_START: [
67
+ 'Verify the station performed BootNotification before starting a transaction',
68
+ 'Check if authorization was properly completed before StartTransaction',
69
+ 'Review the station startup sequence and timing',
70
+ 'Inspect the CSMS for delayed or missing responses',
71
+ ],
72
+ STATUS_TRANSITION_VIOLATION: [
73
+ 'Review the connector status transition sequence',
74
+ 'Check if the station firmware follows the OCPP status model correctly',
75
+ 'Verify no manual overrides triggered invalid transitions',
76
+ 'Inspect the connector status history for anomalies',
77
+ ],
78
+ DIAGNOSTICS_FAILURE: [
79
+ 'Review the DiagnosticsStatusNotification payload for the specific status',
80
+ 'Check the station diagnostic logs for detailed error information',
81
+ 'Verify the station hardware diagnostics are passing',
82
+ 'Contact hardware vendor if diagnostics indicate hardware failure',
83
+ ],
84
+ FIRMWARE_UPDATE_FAILURE: [
85
+ 'Review the FirmwareStatusNotification payload for the specific status',
86
+ 'Check if the firmware image was corrupted or incomplete',
87
+ 'Verify the station has sufficient storage for the firmware update',
88
+ 'Retry the firmware update after addressing the failure cause',
89
+ 'Contact the firmware provider if the image is defective',
90
+ ],
36
91
  };
37
92
  const SEVERITY = {
38
93
  FAILED_AUTHORIZATION: 'warning',
39
94
  CONNECTOR_FAULT: 'critical',
40
95
  STATION_OFFLINE_DURING_SESSION: 'critical',
96
+ TIMEOUT_NO_HEARTBEAT: 'warning',
97
+ METER_VALUE_GAP: 'warning',
98
+ INVALID_STOP_REASON: 'info',
99
+ UNEXPECTED_START: 'warning',
100
+ STATUS_TRANSITION_VIOLATION: 'warning',
101
+ DIAGNOSTICS_FAILURE: 'critical',
102
+ FIRMWARE_UPDATE_FAILURE: 'warning',
41
103
  };
42
104
  // ---------------------------------------------------------------------------
43
105
  // Payload extraction helpers
@@ -215,12 +277,282 @@ function detectStationOfflineDuringSession(_events, sessions) {
215
277
  */
216
278
  export function detectFailures(events, sessions) {
217
279
  const failures = [];
218
- // Rule 1: Failed authorization
280
+ // v0.1 rules
219
281
  failures.push(...detectFailedAuthorization(events));
220
- // Rule 2: Connector fault during active session
221
282
  failures.push(...detectConnectorFault(events));
222
- // Rule 3: Station offline during session
223
283
  failures.push(...detectStationOfflineDuringSession(events, sessions));
284
+ // v0.2 rules
285
+ failures.push(...detectTimeoutNoHeartbeat(events));
286
+ failures.push(...detectMeterValueGap(events, sessions));
287
+ failures.push(...detectInvalidStopReason(events));
288
+ failures.push(...detectUnexpectedStart(events));
289
+ failures.push(...detectStatusTransitionViolation(events));
290
+ failures.push(...detectDiagnosticsFailure(events));
291
+ failures.push(...detectFirmwareUpdateFailure(events));
292
+ return failures;
293
+ }
294
+ // ---------------------------------------------------------------------------
295
+ // v0.2 detection rules
296
+ // ---------------------------------------------------------------------------
297
+ /** Default heartbeat interval: 60 seconds (OCPP 1.6 default). */
298
+ const DEFAULT_HEARTBEAT_INTERVAL_MS = 60_000;
299
+ /** Valid OCPP 1.6 StopTransaction reasons. */
300
+ const VALID_STOP_REASONS = new Set([
301
+ 'EmergencyStop',
302
+ 'EVDisconnected',
303
+ 'HardReset',
304
+ 'Local',
305
+ 'Other',
306
+ 'PowerLoss',
307
+ 'Reboot',
308
+ 'Remote',
309
+ 'SoftReset',
310
+ 'UnlockCommand',
311
+ 'DeAuthorized',
312
+ ]);
313
+ /** Valid connector statuses per OCPP 1.6. */
314
+ const VALID_CONNECTOR_STATUSES = new Set([
315
+ 'Available',
316
+ 'Preparing',
317
+ 'Charging',
318
+ 'SuspendedEVSE',
319
+ 'SuspendedEV',
320
+ 'Finishing',
321
+ 'Reserved',
322
+ 'Unavailable',
323
+ 'Faulted',
324
+ ]);
325
+ /**
326
+ * Rule 4: TIMEOUT_NO_HEARTBEAT
327
+ * Detects when a station sends no Heartbeat within the expected interval
328
+ * after BootNotification. Uses 2x the default interval as the threshold.
329
+ */
330
+ function detectTimeoutNoHeartbeat(events) {
331
+ const failures = [];
332
+ const bootIndex = events.findIndex((e) => e.messageType === 'Call' && e.action === 'BootNotification');
333
+ if (bootIndex === -1)
334
+ return failures;
335
+ const bootEvent = events[bootIndex];
336
+ if (!bootEvent || bootEvent.timestamp === null)
337
+ return failures;
338
+ // Extract heartbeat interval from BootNotification response if present
339
+ let intervalMs = DEFAULT_HEARTBEAT_INTERVAL_MS;
340
+ const bootResponse = events.find((e) => e.messageType === 'CallResult' &&
341
+ e.messageId === bootEvent.messageId &&
342
+ typeof e.payload?.interval === 'number');
343
+ if (bootResponse) {
344
+ const interval = bootResponse.payload.interval;
345
+ intervalMs = interval * 1000;
346
+ }
347
+ // Look for any Heartbeat within 2x the expected interval after BootNotification
348
+ const threshold = bootEvent.timestamp + intervalMs * 2;
349
+ // Only flag if the trace has events beyond the heartbeat threshold
350
+ // (if the trace ends before the first heartbeat is due, we can't know
351
+ // if the station would have sent one)
352
+ const hasEventsBeyondThreshold = events.some((e) => e.timestamp !== null && e.timestamp > threshold);
353
+ if (!hasEventsBeyondThreshold)
354
+ return failures;
355
+ const hasHeartbeat = events.some((e) => e.messageType === 'Call' &&
356
+ e.action === 'Heartbeat' &&
357
+ e.timestamp !== null &&
358
+ e.timestamp <= threshold);
359
+ if (!hasHeartbeat) {
360
+ failures.push({
361
+ code: 'TIMEOUT_NO_HEARTBEAT',
362
+ description: `No Heartbeat received within ${(intervalMs * 2) / 1000}s of BootNotification (expected every ${intervalMs / 1000}s)`,
363
+ severity: SEVERITY.TIMEOUT_NO_HEARTBEAT,
364
+ eventIds: [bootEvent.id],
365
+ suggestedSteps: SUGGESTED_STEPS.TIMEOUT_NO_HEARTBEAT,
366
+ });
367
+ }
368
+ return failures;
369
+ }
370
+ /**
371
+ * Rule 5: METER_VALUE_GAP
372
+ * Detects active transactions (StartTransaction to StopTransaction) where
373
+ * no MeterValuesRequest was sent.
374
+ */
375
+ function detectMeterValueGap(_events, sessions) {
376
+ const failures = [];
377
+ for (const session of sessions) {
378
+ if (session.transactionId === null)
379
+ continue;
380
+ const hasStart = session.events.some((e) => e.messageType === 'Call' && e.action === 'StartTransaction');
381
+ const hasStop = session.events.some((e) => e.messageType === 'Call' && e.action === 'StopTransaction');
382
+ if (!hasStart || !hasStop)
383
+ continue;
384
+ const hasMeterValues = session.events.some((e) => e.messageType === 'Call' && e.action === 'MeterValues');
385
+ if (!hasMeterValues) {
386
+ const startEvent = session.events.find((e) => e.messageType === 'Call' && e.action === 'StartTransaction');
387
+ failures.push({
388
+ code: 'METER_VALUE_GAP',
389
+ description: `Session ${session.sessionId} (transaction ${session.transactionId}) has StartTransaction and StopTransaction but no MeterValues — metering data is missing`,
390
+ severity: SEVERITY.METER_VALUE_GAP,
391
+ eventIds: startEvent ? [startEvent.id] : [],
392
+ suggestedSteps: SUGGESTED_STEPS.METER_VALUE_GAP,
393
+ });
394
+ }
395
+ }
396
+ return failures;
397
+ }
398
+ /**
399
+ * Rule 6: INVALID_STOP_REASON
400
+ * Detects StopTransaction with a stop reason not in the OCPP 1.6 specification.
401
+ */
402
+ function detectInvalidStopReason(events) {
403
+ const failures = [];
404
+ for (const event of events) {
405
+ if (event.messageType !== 'Call' || event.action !== 'StopTransaction')
406
+ continue;
407
+ const payload = event.payload;
408
+ const reason = payload?.reason;
409
+ if (typeof reason === 'string' && !VALID_STOP_REASONS.has(reason)) {
410
+ failures.push({
411
+ code: 'INVALID_STOP_REASON',
412
+ description: `StopTransaction has invalid stop reason "${reason}" — not a valid OCPP 1.6 reason code (messageId: ${event.messageId})`,
413
+ severity: SEVERITY.INVALID_STOP_REASON,
414
+ eventIds: [event.id],
415
+ suggestedSteps: SUGGESTED_STEPS.INVALID_STOP_REASON,
416
+ });
417
+ }
418
+ }
419
+ return failures;
420
+ }
421
+ /**
422
+ * Rule 7: UNEXPECTED_START
423
+ * Detects StartTransaction without a preceding BootNotification or Authorize.
424
+ */
425
+ function detectUnexpectedStart(events) {
426
+ const failures = [];
427
+ for (let i = 0; i < events.length; i++) {
428
+ const event = events[i];
429
+ if (!event)
430
+ continue;
431
+ if (event.messageType !== 'Call' || event.action !== 'StartTransaction')
432
+ continue;
433
+ // Check for BootNotification or Authorize before this StartTransaction
434
+ const hasBoot = events
435
+ .slice(0, i)
436
+ .some((e) => e.messageType === 'Call' && e.action === 'BootNotification');
437
+ const hasAuthorize = events
438
+ .slice(0, i)
439
+ .some((e) => e.messageType === 'Call' && e.action === 'Authorize');
440
+ if (!hasBoot && !hasAuthorize) {
441
+ failures.push({
442
+ code: 'UNEXPECTED_START',
443
+ description: `StartTransaction at event ${event.id} without preceding BootNotification or Authorize — transaction started without proper initialization (messageId: ${event.messageId})`,
444
+ severity: SEVERITY.UNEXPECTED_START,
445
+ eventIds: [event.id],
446
+ suggestedSteps: SUGGESTED_STEPS.UNEXPECTED_START,
447
+ });
448
+ }
449
+ }
450
+ return failures;
451
+ }
452
+ /**
453
+ * Rule 8: STATUS_TRANSITION_VIOLATION
454
+ * Detects illegal connector status transitions.
455
+ * Valid transitions are based on the OCPP 1.6 connector state model.
456
+ */
457
+ const VALID_TRANSITIONS = {
458
+ Available: new Set(['Preparing', 'Charging', 'Reserved', 'Unavailable', 'Faulted']),
459
+ Preparing: new Set(['Charging', 'Available', 'SuspendedEVSE', 'Faulted', 'Unavailable']),
460
+ Charging: new Set(['SuspendedEVSE', 'SuspendedEV', 'Finishing', 'Available', 'Faulted']),
461
+ SuspendedEVSE: new Set(['Charging', 'Finishing', 'Available', 'Faulted']),
462
+ SuspendedEV: new Set(['Charging', 'Finishing', 'Available', 'Faulted']),
463
+ Finishing: new Set(['Available', 'Reserved', 'Faulted']),
464
+ Reserved: new Set(['Available', 'Unavailable', 'Faulted']),
465
+ Unavailable: new Set(['Available', 'Faulted']),
466
+ Faulted: new Set(['Unavailable', 'Available']),
467
+ };
468
+ function detectStatusTransitionViolation(events) {
469
+ const failures = [];
470
+ // Collect all StatusNotification statuses in order
471
+ const statusEvents = events.filter((e) => e.messageType === 'Call' && e.action === 'StatusNotification');
472
+ let prevStatus = null;
473
+ let prevEvent = null;
474
+ for (const event of statusEvents) {
475
+ const payload = event.payload;
476
+ const status = payload?.status;
477
+ if (typeof status !== 'string' || !VALID_CONNECTOR_STATUSES.has(status))
478
+ continue;
479
+ if (prevStatus !== null && prevEvent !== null) {
480
+ const allowed = VALID_TRANSITIONS[prevStatus];
481
+ if (allowed && !allowed.has(status)) {
482
+ failures.push({
483
+ code: 'STATUS_TRANSITION_VIOLATION',
484
+ description: `Connector status transition from "${prevStatus}" to "${status}" is not a valid OCPP 1.6 transition (messageId: ${event.messageId})`,
485
+ severity: SEVERITY.STATUS_TRANSITION_VIOLATION,
486
+ eventIds: [prevEvent.id, event.id],
487
+ suggestedSteps: SUGGESTED_STEPS.STATUS_TRANSITION_VIOLATION,
488
+ });
489
+ }
490
+ }
491
+ prevStatus = status;
492
+ prevEvent = event;
493
+ }
494
+ return failures;
495
+ }
496
+ /**
497
+ * Rule 9: DIAGNOSTICS_FAILURE
498
+ * Detects DiagnosticsStatusNotification with a failure status.
499
+ */
500
+ const DIAGNOSTICS_FAILURE_STATUSES = new Set([
501
+ 'Idle',
502
+ 'Uploaded',
503
+ 'UploadFailed',
504
+ 'DiagnosisFailed',
505
+ 'NotImplemented',
506
+ ]);
507
+ function detectDiagnosticsFailure(events) {
508
+ const failures = [];
509
+ for (const event of events) {
510
+ if (event.messageType !== 'Call' || event.action !== 'DiagnosticsStatusNotification')
511
+ continue;
512
+ const payload = event.payload;
513
+ const status = payload?.status;
514
+ if (typeof status === 'string' && DIAGNOSTICS_FAILURE_STATUSES.has(status)) {
515
+ // Only report actual failures, not successful diagnostics
516
+ if (status === 'UploadFailed' || status === 'DiagnosisFailed') {
517
+ failures.push({
518
+ code: 'DIAGNOSTICS_FAILURE',
519
+ description: `DiagnosticsStatusNotification reported failure status "${status}" (messageId: ${event.messageId})`,
520
+ severity: SEVERITY.DIAGNOSTICS_FAILURE,
521
+ eventIds: [event.id],
522
+ suggestedSteps: SUGGESTED_STEPS.DIAGNOSTICS_FAILURE,
523
+ });
524
+ }
525
+ }
526
+ }
527
+ return failures;
528
+ }
529
+ /**
530
+ * Rule 10: FIRMWARE_UPDATE_FAILURE
531
+ * Detects FirmwareStatusNotification indicating a firmware update failure.
532
+ */
533
+ const FIRMWARE_FAILURE_STATUSES = new Set([
534
+ 'DownloadFailed',
535
+ 'DownloadPaused',
536
+ 'InstallFailed',
537
+ 'InstallRebootingFailed',
538
+ ]);
539
+ function detectFirmwareUpdateFailure(events) {
540
+ const failures = [];
541
+ for (const event of events) {
542
+ if (event.messageType !== 'Call' || event.action !== 'FirmwareStatusNotification')
543
+ continue;
544
+ const payload = event.payload;
545
+ const status = payload?.status;
546
+ if (typeof status === 'string' && FIRMWARE_FAILURE_STATUSES.has(status)) {
547
+ failures.push({
548
+ code: 'FIRMWARE_UPDATE_FAILURE',
549
+ description: `FirmwareStatusNotification reported failure status "${status}" (messageId: ${event.messageId})`,
550
+ severity: SEVERITY.FIRMWARE_UPDATE_FAILURE,
551
+ eventIds: [event.id],
552
+ suggestedSteps: SUGGESTED_STEPS.FIRMWARE_UPDATE_FAILURE,
553
+ });
554
+ }
555
+ }
224
556
  return failures;
225
557
  }
226
558
  //# sourceMappingURL=detection.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"detection.js","sourceRoot":"","sources":["../../src/core/detection.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"detection.js","sourceRoot":"","sources":["../../src/core/detection.ts"],"names":[],"mappings":"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"}
@@ -82,6 +82,12 @@ export declare const fixtures: {
82
82
  status: string;
83
83
  };
84
84
  })[];
85
+ } | {
86
+ timestamp: string;
87
+ direction: string;
88
+ message: (string | number | {
89
+ currentTime: string;
90
+ })[];
85
91
  } | {
86
92
  timestamp: string;
87
93
  direction: string;
@@ -249,6 +255,12 @@ export declare const fixtures: {
249
255
  status: string;
250
256
  };
251
257
  })[];
258
+ } | {
259
+ timestamp: string;
260
+ direction: string;
261
+ message: (string | number | {
262
+ currentTime: string;
263
+ })[];
252
264
  } | {
253
265
  timestamp: string;
254
266
  direction: string;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/fixtures/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,aAAa,MAAM,mCAAmC,CAAC;AAC9D,OAAO,UAAU,MAAM,gCAAgC,CAAC;AACxD,OAAO,cAAc,MAAM,oCAAoC,CAAC;AAEhE,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,cAAc,EAAE,CAAC;AAErD,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAIX,CAAC;AAEX,eAAO,MAAM,YAAY,+DAAgE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/fixtures/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,aAAa,MAAM,mCAAmC,CAAC;AAC9D,OAAO,UAAU,MAAM,gCAAgC,CAAC;AACxD,OAAO,cAAc,MAAM,oCAAoC,CAAC;AAEhE,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,cAAc,EAAE,CAAC;AAErD,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAIX,CAAC;AAEX,eAAO,MAAM,YAAY,+DAAgE,CAAC"}
@@ -113,8 +113,8 @@ export interface ParseResult {
113
113
  }
114
114
  /** Severity of a detected failure. */
115
115
  export type FailureSeverity = 'critical' | 'warning' | 'info';
116
- /** Failure rule codes implemented in v0.1. */
117
- export type FailureCode = 'FAILED_AUTHORIZATION' | 'CONNECTOR_FAULT' | 'STATION_OFFLINE_DURING_SESSION';
116
+ /** Failure rule codes. v0.1 codes + v0.2 additions. */
117
+ export type FailureCode = 'FAILED_AUTHORIZATION' | 'CONNECTOR_FAULT' | 'STATION_OFFLINE_DURING_SESSION' | 'TIMEOUT_NO_HEARTBEAT' | 'METER_VALUE_GAP' | 'INVALID_STOP_REASON' | 'UNEXPECTED_START' | 'STATUS_TRANSITION_VIOLATION' | 'DIAGNOSTICS_FAILURE' | 'FIRMWARE_UPDATE_FAILURE';
118
118
  /**
119
119
  * A detected failure in a trace.
120
120
  */
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"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"}
@@ -1,50 +1,14 @@
1
1
  /**
2
- * React component stubs for @ocpp-debugkit/toolkit/react.
2
+ * React components for @ocpp-debugkit/toolkit/react.
3
3
  *
4
- * v0.2.0: These are stub implementationspresentational components
5
- * that will be fully extracted from the Inspector in Phase 4.
6
- * They are functional but minimal, using no external CSS framework.
4
+ * These are presentational componentsthey accept data as props and
5
+ * render UI. They are SSR-safe (no window/document access at module level).
6
+ * No external CSS framework uses inline styles for zero-dependency rendering.
7
7
  */
8
8
  import type { SessionTimelineProps, MessageInspectorProps, FailureSummaryProps, ReportViewerProps, ReplayControlsProps } from './types.js';
9
- export declare function SessionTimeline({ events, selectedEventId, onSelectEvent }: SessionTimelineProps): {
10
- readonly type: "SessionTimeline";
11
- readonly props: {
12
- readonly events: import("../index.js").Event[];
13
- readonly selectedEventId: string | null | undefined;
14
- readonly onSelectEvent: ((eventId: string) => void) | undefined;
15
- };
16
- };
17
- export declare function MessageInspector({ event }: MessageInspectorProps): {
18
- readonly type: "MessageInspector";
19
- readonly props: {
20
- readonly event: import("../index.js").Event | null;
21
- };
22
- };
23
- export declare function FailureSummary({ failures }: FailureSummaryProps): {
24
- readonly type: "FailureSummary";
25
- readonly props: {
26
- readonly failures: import("../index.js").Failure[];
27
- };
28
- };
29
- export declare function ReportViewer({ html }: ReportViewerProps): {
30
- readonly type: "ReportViewer";
31
- readonly props: {
32
- readonly html: string;
33
- };
34
- };
35
- export declare function ReplayControls({ isPlaying, currentIndex, totalEvents, onPlay, onPause, onStep, onStepBack, onJump, speed, onSpeedChange, }: ReplayControlsProps): {
36
- readonly type: "ReplayControls";
37
- readonly props: {
38
- readonly isPlaying: boolean;
39
- readonly currentIndex: number;
40
- readonly totalEvents: number;
41
- readonly onPlay: () => void;
42
- readonly onPause: () => void;
43
- readonly onStep: () => void;
44
- readonly onStepBack: () => void;
45
- readonly onJump: (index: number) => void;
46
- readonly speed: number | undefined;
47
- readonly onSpeedChange: ((speed: number) => void) | undefined;
48
- };
49
- };
9
+ export declare function SessionTimeline({ events, selectedEventId, onSelectEvent }: SessionTimelineProps): import("react").JSX.Element;
10
+ export declare function MessageInspector({ event }: MessageInspectorProps): import("react").JSX.Element;
11
+ export declare function FailureSummary({ failures }: FailureSummaryProps): import("react").JSX.Element;
12
+ export declare function ReportViewer({ html }: ReportViewerProps): import("react").JSX.Element;
13
+ export declare function ReplayControls({ isPlaying, currentIndex, totalEvents, onPlay, onPause, onStep, onStepBack, onJump, speed, onSpeedChange, }: ReplayControlsProps): import("react").JSX.Element;
50
14
  //# sourceMappingURL=components.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"components.d.ts","sourceRoot":"","sources":["../../src/react/components.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EACV,oBAAoB,EACpB,qBAAqB,EACrB,mBAAmB,EACnB,iBAAiB,EACjB,mBAAmB,EACpB,MAAM,YAAY,CAAC;AAEpB,wBAAgB,eAAe,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE,aAAa,EAAE,EAAE,oBAAoB;;;;;;;EAK/F;AAED,wBAAgB,gBAAgB,CAAC,EAAE,KAAK,EAAE,EAAE,qBAAqB;;;;;EAKhE;AAED,wBAAgB,cAAc,CAAC,EAAE,QAAQ,EAAE,EAAE,mBAAmB;;;;;EAK/D;AAED,wBAAgB,YAAY,CAAC,EAAE,IAAI,EAAE,EAAE,iBAAiB;;;;;EAKvD;AAED,wBAAgB,cAAc,CAAC,EAC7B,SAAS,EACT,YAAY,EACZ,WAAW,EACX,MAAM,EACN,OAAO,EACP,MAAM,EACN,UAAU,EACV,MAAM,EACN,KAAK,EACL,aAAa,GACd,EAAE,mBAAmB;;;;;;;;;;;;;;EAgBrB"}
1
+ {"version":3,"file":"components.d.ts","sourceRoot":"","sources":["../../src/react/components.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EACV,oBAAoB,EACpB,qBAAqB,EACrB,mBAAmB,EACnB,iBAAiB,EACjB,mBAAmB,EACpB,MAAM,YAAY,CAAC;AAkFpB,wBAAgB,eAAe,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE,aAAa,EAAE,EAAE,oBAAoB,+BAgC/F;AAED,wBAAgB,gBAAgB,CAAC,EAAE,KAAK,EAAE,EAAE,qBAAqB,+BAsDhE;AAED,wBAAgB,cAAc,CAAC,EAAE,QAAQ,EAAE,EAAE,mBAAmB,+BA2C/D;AAED,wBAAgB,YAAY,CAAC,EAAE,IAAI,EAAE,EAAE,iBAAiB,+BAiBvD;AAED,wBAAgB,cAAc,CAAC,EAC7B,SAAS,EACT,YAAY,EACZ,WAAW,EACX,MAAM,EACN,OAAO,EACP,MAAM,EACN,UAAU,EACV,MAAM,EACN,KAAK,EACL,aAAa,GACd,EAAE,mBAAmB,+BA+DrB"}