@ocpp-debugkit/toolkit 0.2.0 → 0.3.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 (123) hide show
  1. package/README.md +234 -12
  2. package/dist/cli/commands/anonymize.d.ts +15 -0
  3. package/dist/cli/commands/anonymize.d.ts.map +1 -0
  4. package/dist/cli/commands/anonymize.js +104 -0
  5. package/dist/cli/commands/anonymize.js.map +1 -0
  6. package/dist/cli/commands/ci.d.ts +10 -0
  7. package/dist/cli/commands/ci.d.ts.map +1 -0
  8. package/dist/cli/commands/ci.js +96 -0
  9. package/dist/cli/commands/ci.js.map +1 -0
  10. package/dist/cli/commands/diff.d.ts +10 -0
  11. package/dist/cli/commands/diff.d.ts.map +1 -0
  12. package/dist/cli/commands/diff.js +71 -0
  13. package/dist/cli/commands/diff.js.map +1 -0
  14. package/dist/cli/commands/report.d.ts.map +1 -1
  15. package/dist/cli/commands/report.js +6 -3
  16. package/dist/cli/commands/report.js.map +1 -1
  17. package/dist/cli/commands/scenario.d.ts +11 -3
  18. package/dist/cli/commands/scenario.d.ts.map +1 -1
  19. package/dist/cli/commands/scenario.js +41 -4
  20. package/dist/cli/commands/scenario.js.map +1 -1
  21. package/dist/cli/index.js +41 -5
  22. package/dist/cli/index.js.map +1 -1
  23. package/dist/core/__fixtures__/connector-fault.d.ts +6 -0
  24. package/dist/core/__fixtures__/connector-fault.d.ts.map +1 -1
  25. package/dist/core/__fixtures__/connector-fault.js +11 -1
  26. package/dist/core/__fixtures__/connector-fault.js.map +1 -1
  27. package/dist/core/__fixtures__/normal-session.d.ts +6 -0
  28. package/dist/core/__fixtures__/normal-session.d.ts.map +1 -1
  29. package/dist/core/__fixtures__/normal-session.js +10 -0
  30. package/dist/core/__fixtures__/normal-session.js.map +1 -1
  31. package/dist/core/assertions.d.ts +36 -0
  32. package/dist/core/assertions.d.ts.map +1 -0
  33. package/dist/core/assertions.js +335 -0
  34. package/dist/core/assertions.js.map +1 -0
  35. package/dist/core/detection.d.ts +20 -3
  36. package/dist/core/detection.d.ts.map +1 -1
  37. package/dist/core/detection.js +624 -6
  38. package/dist/core/detection.js.map +1 -1
  39. package/dist/core/diff.d.ts +68 -0
  40. package/dist/core/diff.d.ts.map +1 -0
  41. package/dist/core/diff.js +199 -0
  42. package/dist/core/diff.js.map +1 -0
  43. package/dist/core/fixtures/index.d.ts +12 -0
  44. package/dist/core/fixtures/index.d.ts.map +1 -1
  45. package/dist/core/index.d.ts +4 -0
  46. package/dist/core/index.d.ts.map +1 -1
  47. package/dist/core/index.js +4 -0
  48. package/dist/core/index.js.map +1 -1
  49. package/dist/core/types.d.ts +77 -2
  50. package/dist/core/types.d.ts.map +1 -1
  51. package/dist/index.d.ts +3 -1
  52. package/dist/index.d.ts.map +1 -1
  53. package/dist/index.js +2 -0
  54. package/dist/index.js.map +1 -1
  55. package/dist/react/components.d.ts +9 -45
  56. package/dist/react/components.d.ts.map +1 -1
  57. package/dist/react/components.js +120 -38
  58. package/dist/react/components.js.map +1 -1
  59. package/dist/reporter/html.d.ts +25 -0
  60. package/dist/reporter/html.d.ts.map +1 -0
  61. package/dist/reporter/html.js +396 -0
  62. package/dist/reporter/html.js.map +1 -0
  63. package/dist/reporter/index.d.ts +1 -0
  64. package/dist/reporter/index.d.ts.map +1 -1
  65. package/dist/reporter/index.js +1 -0
  66. package/dist/reporter/index.js.map +1 -1
  67. package/dist/scenarios/__scenarios__/diagnostics-failure.d.ts +58 -0
  68. package/dist/scenarios/__scenarios__/diagnostics-failure.d.ts.map +1 -0
  69. package/dist/scenarios/__scenarios__/diagnostics-failure.js +91 -0
  70. package/dist/scenarios/__scenarios__/diagnostics-failure.js.map +1 -0
  71. package/dist/scenarios/__scenarios__/heartbeat-irregular.d.ts +51 -0
  72. package/dist/scenarios/__scenarios__/heartbeat-irregular.d.ts.map +1 -0
  73. package/dist/scenarios/__scenarios__/heartbeat-irregular.js +81 -0
  74. package/dist/scenarios/__scenarios__/heartbeat-irregular.js.map +1 -0
  75. package/dist/scenarios/__scenarios__/invalid-stop-reason.d.ts +118 -0
  76. package/dist/scenarios/__scenarios__/invalid-stop-reason.d.ts.map +1 -0
  77. package/dist/scenarios/__scenarios__/invalid-stop-reason.js +226 -0
  78. package/dist/scenarios/__scenarios__/invalid-stop-reason.js.map +1 -0
  79. package/dist/scenarios/__scenarios__/meter-anomaly.d.ts +115 -0
  80. package/dist/scenarios/__scenarios__/meter-anomaly.d.ts.map +1 -0
  81. package/dist/scenarios/__scenarios__/meter-anomaly.js +152 -0
  82. package/dist/scenarios/__scenarios__/meter-anomaly.js.map +1 -0
  83. package/dist/scenarios/__scenarios__/meter-value-gap.d.ts +103 -0
  84. package/dist/scenarios/__scenarios__/meter-value-gap.d.ts.map +1 -0
  85. package/dist/scenarios/__scenarios__/meter-value-gap.js +196 -0
  86. package/dist/scenarios/__scenarios__/meter-value-gap.js.map +1 -0
  87. package/dist/scenarios/__scenarios__/short-session.d.ts +111 -0
  88. package/dist/scenarios/__scenarios__/short-session.d.ts.map +1 -0
  89. package/dist/scenarios/__scenarios__/short-session.js +129 -0
  90. package/dist/scenarios/__scenarios__/short-session.js.map +1 -0
  91. package/dist/scenarios/__scenarios__/slow-csms-response.d.ts +52 -0
  92. package/dist/scenarios/__scenarios__/slow-csms-response.d.ts.map +1 -0
  93. package/dist/scenarios/__scenarios__/slow-csms-response.js +61 -0
  94. package/dist/scenarios/__scenarios__/slow-csms-response.js.map +1 -0
  95. package/dist/scenarios/__scenarios__/station-offline.d.ts +6 -0
  96. package/dist/scenarios/__scenarios__/station-offline.d.ts.map +1 -1
  97. package/dist/scenarios/__scenarios__/station-offline.js +10 -0
  98. package/dist/scenarios/__scenarios__/station-offline.js.map +1 -1
  99. package/dist/scenarios/__scenarios__/status-transition-violation.d.ts +52 -0
  100. package/dist/scenarios/__scenarios__/status-transition-violation.d.ts.map +1 -0
  101. package/dist/scenarios/__scenarios__/status-transition-violation.js +112 -0
  102. package/dist/scenarios/__scenarios__/status-transition-violation.js.map +1 -0
  103. package/dist/scenarios/__scenarios__/unexpected-start.d.ts +80 -0
  104. package/dist/scenarios/__scenarios__/unexpected-start.d.ts.map +1 -0
  105. package/dist/scenarios/__scenarios__/unexpected-start.js +124 -0
  106. package/dist/scenarios/__scenarios__/unexpected-start.js.map +1 -0
  107. package/dist/scenarios/__scenarios__/unexpected-stop-reason.d.ts +6 -0
  108. package/dist/scenarios/__scenarios__/unexpected-stop-reason.d.ts.map +1 -1
  109. package/dist/scenarios/__scenarios__/unexpected-stop-reason.js +10 -0
  110. package/dist/scenarios/__scenarios__/unexpected-stop-reason.js.map +1 -1
  111. package/dist/scenarios/__scenarios__/unresponsive-csms.d.ts +53 -0
  112. package/dist/scenarios/__scenarios__/unresponsive-csms.d.ts.map +1 -0
  113. package/dist/scenarios/__scenarios__/unresponsive-csms.js +53 -0
  114. package/dist/scenarios/__scenarios__/unresponsive-csms.js.map +1 -0
  115. package/dist/scenarios/compare.d.ts +39 -0
  116. package/dist/scenarios/compare.d.ts.map +1 -0
  117. package/dist/scenarios/compare.js +77 -0
  118. package/dist/scenarios/compare.js.map +1 -0
  119. package/dist/scenarios/index.d.ts +15 -3
  120. package/dist/scenarios/index.d.ts.map +1 -1
  121. package/dist/scenarios/index.js +45 -4
  122. package/dist/scenarios/index.js.map +1 -1
  123. package/package.json +1 -1
@@ -0,0 +1,80 @@
1
+ declare const _default: {
2
+ name: string;
3
+ description: string;
4
+ trace: {
5
+ traceId: string;
6
+ metadata: {
7
+ stationId: string;
8
+ ocppVersion: string;
9
+ source: string;
10
+ description: string;
11
+ };
12
+ events: ({
13
+ timestamp: string;
14
+ direction: string;
15
+ message: (string | number | {
16
+ connectorId: number;
17
+ idTag: string;
18
+ meterStart: number;
19
+ timestamp: string;
20
+ })[];
21
+ } | {
22
+ timestamp: string;
23
+ direction: string;
24
+ message: (string | number | {
25
+ transactionId: number;
26
+ idTagInfo: {
27
+ status: string;
28
+ };
29
+ })[];
30
+ } | {
31
+ timestamp: string;
32
+ direction: string;
33
+ message: (string | number | {
34
+ connectorId: number;
35
+ status: string;
36
+ errorCode: string;
37
+ })[];
38
+ } | {
39
+ timestamp: string;
40
+ direction: string;
41
+ message: {}[];
42
+ } | {
43
+ timestamp: string;
44
+ direction: string;
45
+ message: (string | number | {
46
+ connectorId: number;
47
+ transactionId: number;
48
+ meterValue: {
49
+ timestamp: string;
50
+ sampledValue: {
51
+ value: string;
52
+ measurand: string;
53
+ unit: string;
54
+ }[];
55
+ }[];
56
+ })[];
57
+ } | {
58
+ timestamp: string;
59
+ direction: string;
60
+ message: (string | number | {
61
+ transactionId: number;
62
+ idTag: string;
63
+ meterStop: number;
64
+ timestamp: string;
65
+ reason: string;
66
+ })[];
67
+ } | {
68
+ timestamp: string;
69
+ direction: string;
70
+ message: (string | number | {
71
+ idTagInfo: {
72
+ status: string;
73
+ };
74
+ })[];
75
+ })[];
76
+ };
77
+ expectedFailures: string[];
78
+ };
79
+ export default _default;
80
+ //# sourceMappingURL=unexpected-start.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unexpected-start.d.ts","sourceRoot":"","sources":["../../../src/scenarios/__scenarios__/unexpected-start.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,wBA4HE"}
@@ -0,0 +1,124 @@
1
+ export default {
2
+ name: 'unexpected-start',
3
+ description: 'StartTransaction without preceding BootNotification or Authorize. Expects UNEXPECTED_START failure.',
4
+ trace: {
5
+ traceId: 'scenario-unexpected-start',
6
+ metadata: {
7
+ stationId: 'CS-SYNTHETIC-008',
8
+ ocppVersion: '1.6',
9
+ source: 'synthetic-scenario',
10
+ description: 'Station sends StartTransaction without BootNotification or Authorize — transaction started without proper initialization.',
11
+ },
12
+ events: [
13
+ {
14
+ timestamp: '2024-01-15T22:00:00.000Z',
15
+ direction: 'CS_TO_CSMS',
16
+ message: [
17
+ 2,
18
+ 'msg-001',
19
+ 'StartTransaction',
20
+ {
21
+ connectorId: 1,
22
+ idTag: 'SYNTHETIC-TAG-008',
23
+ meterStart: 0,
24
+ timestamp: '2024-01-15T22:00:00.000Z',
25
+ },
26
+ ],
27
+ },
28
+ {
29
+ timestamp: '2024-01-15T22:00:00.500Z',
30
+ direction: 'CSMS_TO_CS',
31
+ message: [
32
+ 3,
33
+ 'msg-001',
34
+ {
35
+ transactionId: 100008,
36
+ idTagInfo: {
37
+ status: 'Accepted',
38
+ },
39
+ },
40
+ ],
41
+ },
42
+ {
43
+ timestamp: '2024-01-15T22:00:01.000Z',
44
+ direction: 'CS_TO_CSMS',
45
+ message: [
46
+ 2,
47
+ 'msg-002',
48
+ 'StatusNotification',
49
+ {
50
+ connectorId: 1,
51
+ status: 'Charging',
52
+ errorCode: 'NoError',
53
+ },
54
+ ],
55
+ },
56
+ {
57
+ timestamp: '2024-01-15T22:00:01.500Z',
58
+ direction: 'CSMS_TO_CS',
59
+ message: [3, 'msg-002', {}],
60
+ },
61
+ {
62
+ timestamp: '2024-01-15T22:00:10.000Z',
63
+ direction: 'CS_TO_CSMS',
64
+ message: [
65
+ 2,
66
+ 'msg-003',
67
+ 'MeterValues',
68
+ {
69
+ connectorId: 1,
70
+ transactionId: 100008,
71
+ meterValue: [
72
+ {
73
+ timestamp: '2024-01-15T22:00:10.000Z',
74
+ sampledValue: [
75
+ {
76
+ value: '100',
77
+ measurand: 'Energy.Active.Import.Register',
78
+ unit: 'Wh',
79
+ },
80
+ ],
81
+ },
82
+ ],
83
+ },
84
+ ],
85
+ },
86
+ {
87
+ timestamp: '2024-01-15T22:00:10.500Z',
88
+ direction: 'CSMS_TO_CS',
89
+ message: [3, 'msg-003', {}],
90
+ },
91
+ {
92
+ timestamp: '2024-01-15T22:01:30.000Z',
93
+ direction: 'CS_TO_CSMS',
94
+ message: [
95
+ 2,
96
+ 'msg-004',
97
+ 'StopTransaction',
98
+ {
99
+ transactionId: 100008,
100
+ idTag: 'SYNTHETIC-TAG-008',
101
+ meterStop: 100,
102
+ timestamp: '2024-01-15T22:01:30.000Z',
103
+ reason: 'EVDisconnected',
104
+ },
105
+ ],
106
+ },
107
+ {
108
+ timestamp: '2024-01-15T22:01:30.500Z',
109
+ direction: 'CSMS_TO_CS',
110
+ message: [
111
+ 3,
112
+ 'msg-004',
113
+ {
114
+ idTagInfo: {
115
+ status: 'Accepted',
116
+ },
117
+ },
118
+ ],
119
+ },
120
+ ],
121
+ },
122
+ expectedFailures: ['UNEXPECTED_START'],
123
+ };
124
+ //# sourceMappingURL=unexpected-start.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unexpected-start.js","sourceRoot":"","sources":["../../../src/scenarios/__scenarios__/unexpected-start.ts"],"names":[],"mappings":"AAAA,eAAe;IACb,IAAI,EAAE,kBAAkB;IACxB,WAAW,EACT,qGAAqG;IACvG,KAAK,EAAE;QACL,OAAO,EAAE,2BAA2B;QACpC,QAAQ,EAAE;YACR,SAAS,EAAE,kBAAkB;YAC7B,WAAW,EAAE,KAAK;YAClB,MAAM,EAAE,oBAAoB;YAC5B,WAAW,EACT,2HAA2H;SAC9H;QACD,MAAM,EAAE;YACN;gBACE,SAAS,EAAE,0BAA0B;gBACrC,SAAS,EAAE,YAAY;gBACvB,OAAO,EAAE;oBACP,CAAC;oBACD,SAAS;oBACT,kBAAkB;oBAClB;wBACE,WAAW,EAAE,CAAC;wBACd,KAAK,EAAE,mBAAmB;wBAC1B,UAAU,EAAE,CAAC;wBACb,SAAS,EAAE,0BAA0B;qBACtC;iBACF;aACF;YACD;gBACE,SAAS,EAAE,0BAA0B;gBACrC,SAAS,EAAE,YAAY;gBACvB,OAAO,EAAE;oBACP,CAAC;oBACD,SAAS;oBACT;wBACE,aAAa,EAAE,MAAM;wBACrB,SAAS,EAAE;4BACT,MAAM,EAAE,UAAU;yBACnB;qBACF;iBACF;aACF;YACD;gBACE,SAAS,EAAE,0BAA0B;gBACrC,SAAS,EAAE,YAAY;gBACvB,OAAO,EAAE;oBACP,CAAC;oBACD,SAAS;oBACT,oBAAoB;oBACpB;wBACE,WAAW,EAAE,CAAC;wBACd,MAAM,EAAE,UAAU;wBAClB,SAAS,EAAE,SAAS;qBACrB;iBACF;aACF;YACD;gBACE,SAAS,EAAE,0BAA0B;gBACrC,SAAS,EAAE,YAAY;gBACvB,OAAO,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,CAAC;aAC5B;YACD;gBACE,SAAS,EAAE,0BAA0B;gBACrC,SAAS,EAAE,YAAY;gBACvB,OAAO,EAAE;oBACP,CAAC;oBACD,SAAS;oBACT,aAAa;oBACb;wBACE,WAAW,EAAE,CAAC;wBACd,aAAa,EAAE,MAAM;wBACrB,UAAU,EAAE;4BACV;gCACE,SAAS,EAAE,0BAA0B;gCACrC,YAAY,EAAE;oCACZ;wCACE,KAAK,EAAE,KAAK;wCACZ,SAAS,EAAE,+BAA+B;wCAC1C,IAAI,EAAE,IAAI;qCACX;iCACF;6BACF;yBACF;qBACF;iBACF;aACF;YACD;gBACE,SAAS,EAAE,0BAA0B;gBACrC,SAAS,EAAE,YAAY;gBACvB,OAAO,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,CAAC;aAC5B;YACD;gBACE,SAAS,EAAE,0BAA0B;gBACrC,SAAS,EAAE,YAAY;gBACvB,OAAO,EAAE;oBACP,CAAC;oBACD,SAAS;oBACT,iBAAiB;oBACjB;wBACE,aAAa,EAAE,MAAM;wBACrB,KAAK,EAAE,mBAAmB;wBAC1B,SAAS,EAAE,GAAG;wBACd,SAAS,EAAE,0BAA0B;wBACrC,MAAM,EAAE,gBAAgB;qBACzB;iBACF;aACF;YACD;gBACE,SAAS,EAAE,0BAA0B;gBACrC,SAAS,EAAE,YAAY;gBACvB,OAAO,EAAE;oBACP,CAAC;oBACD,SAAS;oBACT;wBACE,SAAS,EAAE;4BACT,MAAM,EAAE,UAAU;yBACnB;qBACF;iBACF;aACF;SACF;KACF;IACD,gBAAgB,EAAE,CAAC,kBAAkB,CAAC;CACvC,CAAC"}
@@ -71,6 +71,12 @@ declare const _default: {
71
71
  status: string;
72
72
  };
73
73
  })[];
74
+ } | {
75
+ timestamp: string;
76
+ direction: string;
77
+ message: (string | number | {
78
+ currentTime: string;
79
+ })[];
74
80
  } | {
75
81
  timestamp: string;
76
82
  direction: string;
@@ -1 +1 @@
1
- {"version":3,"file":"unexpected-stop-reason.d.ts","sourceRoot":"","sources":["../../../src/scenarios/__scenarios__/unexpected-stop-reason.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,wBAwNE"}
1
+ {"version":3,"file":"unexpected-stop-reason.d.ts","sourceRoot":"","sources":["../../../src/scenarios/__scenarios__/unexpected-stop-reason.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,wBAkOE"}
@@ -131,6 +131,16 @@ export default {
131
131
  direction: 'CSMS_TO_CS',
132
132
  message: [3, 'msg-005', {}],
133
133
  },
134
+ {
135
+ timestamp: '2024-01-15T16:07:30.000Z',
136
+ direction: 'CS_TO_CSMS',
137
+ message: [2, 'msg-hb-1', 'Heartbeat', {}],
138
+ },
139
+ {
140
+ timestamp: '2024-01-15T16:07:30.500Z',
141
+ direction: 'CSMS_TO_CS',
142
+ message: [3, 'msg-hb-1', { currentTime: '2024-01-15T16:07:30.500Z' }],
143
+ },
134
144
  {
135
145
  timestamp: '2024-01-15T16:20:00.000Z',
136
146
  direction: 'CS_TO_CSMS',
@@ -1 +1 @@
1
- {"version":3,"file":"unexpected-stop-reason.js","sourceRoot":"","sources":["../../../src/scenarios/__scenarios__/unexpected-stop-reason.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"unexpected-stop-reason.js","sourceRoot":"","sources":["../../../src/scenarios/__scenarios__/unexpected-stop-reason.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ declare const _default: {
2
+ name: string;
3
+ description: string;
4
+ trace: {
5
+ traceId: string;
6
+ metadata: {
7
+ stationId: string;
8
+ ocppVersion: string;
9
+ source: string;
10
+ description: string;
11
+ };
12
+ events: ({
13
+ timestamp: string;
14
+ direction: string;
15
+ message: (string | number | {
16
+ chargePointVendor: string;
17
+ chargePointModel: string;
18
+ chargePointSerialNumber: string;
19
+ firmwareVersion: string;
20
+ })[];
21
+ } | {
22
+ timestamp: string;
23
+ direction: string;
24
+ message: {}[];
25
+ } | {
26
+ timestamp: string;
27
+ direction: string;
28
+ message: (string | number | {
29
+ currentTime: string;
30
+ })[];
31
+ })[];
32
+ };
33
+ expectedFailures: string[];
34
+ assertions: ({
35
+ type: string;
36
+ params: {
37
+ code: string;
38
+ severity: string;
39
+ min?: undefined;
40
+ max?: undefined;
41
+ };
42
+ } | {
43
+ type: string;
44
+ params: {
45
+ code: string;
46
+ min: number;
47
+ max: number;
48
+ severity?: undefined;
49
+ };
50
+ })[];
51
+ };
52
+ export default _default;
53
+ //# sourceMappingURL=unresponsive-csms.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unresponsive-csms.d.ts","sourceRoot":"","sources":["../../../src/scenarios/__scenarios__/unresponsive-csms.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,wBAoDE"}
@@ -0,0 +1,53 @@
1
+ export default {
2
+ name: 'unresponsive-csms',
3
+ description: 'BootNotification Call sent but CSMS never responds — no CallResult or CallError. Expects UNRESPONSIVE_CSMS failure. Uses failure_severity and failure_count assertions.',
4
+ trace: {
5
+ traceId: 'scenario-unresponsive-csms',
6
+ metadata: {
7
+ stationId: 'CS-SYNTHETIC-015',
8
+ ocppVersion: '1.6',
9
+ source: 'synthetic-scenario',
10
+ description: 'CSMS never responds to BootNotification — unresponsive CSMS.',
11
+ },
12
+ events: [
13
+ {
14
+ timestamp: '2024-01-15T08:00:00.000Z',
15
+ direction: 'CS_TO_CSMS',
16
+ message: [
17
+ 2,
18
+ 'msg-001',
19
+ 'BootNotification',
20
+ {
21
+ chargePointVendor: 'SyntheticVendor',
22
+ chargePointModel: 'SM-100',
23
+ chargePointSerialNumber: 'CS-SYNTHETIC-015',
24
+ firmwareVersion: '1.0.0',
25
+ },
26
+ ],
27
+ },
28
+ // No CallResult for msg-001 — CSMS unresponsive
29
+ {
30
+ timestamp: '2024-01-15T08:00:05.000Z',
31
+ direction: 'CS_TO_CSMS',
32
+ message: [2, 'msg-002', 'Heartbeat', {}],
33
+ },
34
+ {
35
+ timestamp: '2024-01-15T08:00:05.500Z',
36
+ direction: 'CSMS_TO_CS',
37
+ message: [3, 'msg-002', { currentTime: '2024-01-15T08:00:05.500Z' }],
38
+ },
39
+ ],
40
+ },
41
+ expectedFailures: ['UNRESPONSIVE_CSMS'],
42
+ assertions: [
43
+ {
44
+ type: 'failure_severity',
45
+ params: { code: 'UNRESPONSIVE_CSMS', severity: 'critical' },
46
+ },
47
+ {
48
+ type: 'failure_count',
49
+ params: { code: 'UNRESPONSIVE_CSMS', min: 1, max: 1 },
50
+ },
51
+ ],
52
+ };
53
+ //# sourceMappingURL=unresponsive-csms.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unresponsive-csms.js","sourceRoot":"","sources":["../../../src/scenarios/__scenarios__/unresponsive-csms.ts"],"names":[],"mappings":"AAAA,eAAe;IACb,IAAI,EAAE,mBAAmB;IACzB,WAAW,EACT,yKAAyK;IAC3K,KAAK,EAAE;QACL,OAAO,EAAE,4BAA4B;QACrC,QAAQ,EAAE;YACR,SAAS,EAAE,kBAAkB;YAC7B,WAAW,EAAE,KAAK;YAClB,MAAM,EAAE,oBAAoB;YAC5B,WAAW,EAAE,8DAA8D;SAC5E;QACD,MAAM,EAAE;YACN;gBACE,SAAS,EAAE,0BAA0B;gBACrC,SAAS,EAAE,YAAY;gBACvB,OAAO,EAAE;oBACP,CAAC;oBACD,SAAS;oBACT,kBAAkB;oBAClB;wBACE,iBAAiB,EAAE,iBAAiB;wBACpC,gBAAgB,EAAE,QAAQ;wBAC1B,uBAAuB,EAAE,kBAAkB;wBAC3C,eAAe,EAAE,OAAO;qBACzB;iBACF;aACF;YACD,gDAAgD;YAChD;gBACE,SAAS,EAAE,0BAA0B;gBACrC,SAAS,EAAE,YAAY;gBACvB,OAAO,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,EAAE,CAAC;aACzC;YACD;gBACE,SAAS,EAAE,0BAA0B;gBACrC,SAAS,EAAE,YAAY;gBACvB,OAAO,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,WAAW,EAAE,0BAA0B,EAAE,CAAC;aACrE;SACF;KACF;IACD,gBAAgB,EAAE,CAAC,mBAAmB,CAAC;IACvC,UAAU,EAAE;QACV;YACE,IAAI,EAAE,kBAAkB;YACxB,MAAM,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,QAAQ,EAAE,UAAU,EAAE;SAC5D;QACD;YACE,IAAI,EAAE,eAAe;YACrB,MAAM,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE;SACtD;KACF;CACF,CAAC"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Scenario comparison — compare two scenario evaluation results.
3
+ *
4
+ * Useful for regression testing: did the fix change the detected failures?
5
+ * Compare a "before" run against an "after" run to see what changed.
6
+ *
7
+ * @module @ocpp-debugkit/toolkit/scenarios
8
+ */
9
+ import type { FailureCode, ScenarioEvalResult } from '../core/index.js';
10
+ /** Result of comparing two scenario evaluation reports. */
11
+ export interface ScenarioComparison {
12
+ /** Whether both scenarios passed all assertions. */
13
+ bothPassed: boolean;
14
+ /** Whether the first scenario (a) passed. */
15
+ aPassed: boolean;
16
+ /** Whether the second scenario (b) passed. */
17
+ bPassed: boolean;
18
+ /** Failure codes detected in A but not B. */
19
+ failuresOnlyInA: FailureCode[];
20
+ /** Failure codes detected in B but not A. */
21
+ failuresOnlyInB: FailureCode[];
22
+ /** Assertion results that changed (passed→failed or failed→passed). */
23
+ changedAssertions: {
24
+ assertionType: string;
25
+ passedInA: boolean;
26
+ passedInB: boolean;
27
+ }[];
28
+ /** Human-readable summary of changes. */
29
+ summary: string;
30
+ }
31
+ /**
32
+ * Compare two scenario evaluation results.
33
+ *
34
+ * @param a - First scenario evaluation result
35
+ * @param b - Second scenario evaluation result
36
+ * @returns A {@link ScenarioComparison} describing the differences
37
+ */
38
+ export declare function compareScenarioReports(a: ScenarioEvalResult, b: ScenarioEvalResult): ScenarioComparison;
39
+ //# sourceMappingURL=compare.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compare.d.ts","sourceRoot":"","sources":["../../src/scenarios/compare.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAMxE,2DAA2D;AAC3D,MAAM,WAAW,kBAAkB;IACjC,oDAAoD;IACpD,UAAU,EAAE,OAAO,CAAC;IACpB,6CAA6C;IAC7C,OAAO,EAAE,OAAO,CAAC;IACjB,8CAA8C;IAC9C,OAAO,EAAE,OAAO,CAAC;IACjB,6CAA6C;IAC7C,eAAe,EAAE,WAAW,EAAE,CAAC;IAC/B,6CAA6C;IAC7C,eAAe,EAAE,WAAW,EAAE,CAAC;IAC/B,uEAAuE;IACvE,iBAAiB,EAAE;QACjB,aAAa,EAAE,MAAM,CAAC;QACtB,SAAS,EAAE,OAAO,CAAC;QACnB,SAAS,EAAE,OAAO,CAAC;KACpB,EAAE,CAAC;IACJ,yCAAyC;IACzC,OAAO,EAAE,MAAM,CAAC;CACjB;AAMD;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,CAAC,EAAE,kBAAkB,EACrB,CAAC,EAAE,kBAAkB,GACpB,kBAAkB,CAgEpB"}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * Scenario comparison — compare two scenario evaluation results.
3
+ *
4
+ * Useful for regression testing: did the fix change the detected failures?
5
+ * Compare a "before" run against an "after" run to see what changed.
6
+ *
7
+ * @module @ocpp-debugkit/toolkit/scenarios
8
+ */
9
+ // ---------------------------------------------------------------------------
10
+ // Comparison
11
+ // ---------------------------------------------------------------------------
12
+ /**
13
+ * Compare two scenario evaluation results.
14
+ *
15
+ * @param a - First scenario evaluation result
16
+ * @param b - Second scenario evaluation result
17
+ * @returns A {@link ScenarioComparison} describing the differences
18
+ */
19
+ export function compareScenarioReports(a, b) {
20
+ const aPassed = a.allPassed;
21
+ const bPassed = b.allPassed;
22
+ const bothPassed = aPassed && bPassed;
23
+ // Failure code diff
24
+ const aCodes = new Set(a.detectedFailureCodes);
25
+ const bCodes = new Set(b.detectedFailureCodes);
26
+ const failuresOnlyInA = a.detectedFailureCodes.filter((c) => !bCodes.has(c));
27
+ const failuresOnlyInB = b.detectedFailureCodes.filter((c) => !aCodes.has(c));
28
+ // Assertion diff — compare assertions at the same index
29
+ const maxLen = Math.max(a.assertions.length, b.assertions.length);
30
+ const changedAssertions = [];
31
+ for (let i = 0; i < maxLen; i++) {
32
+ const aResult = a.assertions[i];
33
+ const bResult = b.assertions[i];
34
+ if (!aResult || !bResult)
35
+ continue;
36
+ if (aResult.passed !== bResult.passed) {
37
+ changedAssertions.push({
38
+ assertionType: aResult.assertion.type,
39
+ passedInA: aResult.passed,
40
+ passedInB: bResult.passed,
41
+ });
42
+ }
43
+ }
44
+ // Summary
45
+ const parts = [];
46
+ if (aPassed && !bPassed) {
47
+ parts.push('Scenario A passed but B failed — regression detected');
48
+ }
49
+ else if (!aPassed && bPassed) {
50
+ parts.push('Scenario A failed but B passed — improvement detected');
51
+ }
52
+ else if (bothPassed) {
53
+ parts.push('Both scenarios passed all assertions');
54
+ }
55
+ else {
56
+ parts.push('Both scenarios failed');
57
+ }
58
+ if (failuresOnlyInA.length > 0) {
59
+ parts.push(`Failures only in A: ${failuresOnlyInA.join(', ')}`);
60
+ }
61
+ if (failuresOnlyInB.length > 0) {
62
+ parts.push(`Failures only in B: ${failuresOnlyInB.join(', ')}`);
63
+ }
64
+ if (changedAssertions.length > 0) {
65
+ parts.push(`${changedAssertions.length} assertion(s) changed result`);
66
+ }
67
+ return {
68
+ bothPassed,
69
+ aPassed,
70
+ bPassed,
71
+ failuresOnlyInA,
72
+ failuresOnlyInB,
73
+ changedAssertions,
74
+ summary: parts.join('. '),
75
+ };
76
+ }
77
+ //# sourceMappingURL=compare.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compare.js","sourceRoot":"","sources":["../../src/scenarios/compare.ts"],"names":[],"mappings":"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"}
@@ -10,9 +10,21 @@ declare const failedAuthScenario: Scenario;
10
10
  declare const connectorFaultScenario: Scenario;
11
11
  declare const stationOfflineScenario: Scenario;
12
12
  declare const unexpectedStopReasonScenario: Scenario;
13
- export declare const scenarios: readonly [Scenario, Scenario, Scenario, Scenario, Scenario];
14
- export declare const scenarioNames: readonly ["normal-session", "failed-auth", "connector-fault", "station-offline", "unexpected-stop-reason"];
15
- export { normalSessionScenario, failedAuthScenario, connectorFaultScenario, stationOfflineScenario, unexpectedStopReasonScenario, };
13
+ declare const meterValueGapScenario: Scenario;
14
+ declare const invalidStopReasonScenario: Scenario;
15
+ declare const unexpectedStartScenario: Scenario;
16
+ declare const statusTransitionViolationScenario: Scenario;
17
+ declare const diagnosticsFailureScenario: Scenario;
18
+ declare const slowCsmsResponseScenario: Scenario;
19
+ declare const meterAnomalyScenario: Scenario;
20
+ declare const shortSessionScenario: Scenario;
21
+ declare const heartbeatIrregularScenario: Scenario;
22
+ declare const unresponsiveCsmsScenario: Scenario;
23
+ export declare const scenarios: readonly [Scenario, Scenario, Scenario, Scenario, Scenario, Scenario, Scenario, Scenario, Scenario, Scenario, Scenario, Scenario, Scenario, Scenario, Scenario];
24
+ export declare const scenarioNames: readonly ["normal-session", "failed-auth", "connector-fault", "station-offline", "unexpected-stop-reason", "meter-value-gap", "invalid-stop-reason", "unexpected-start", "status-transition-violation", "diagnostics-failure", "slow-csms-response", "meter-anomaly", "short-session", "heartbeat-irregular", "unresponsive-csms"];
25
+ export { normalSessionScenario, failedAuthScenario, connectorFaultScenario, stationOfflineScenario, unexpectedStopReasonScenario, meterValueGapScenario, invalidStopReasonScenario, unexpectedStartScenario, statusTransitionViolationScenario, diagnosticsFailureScenario, slowCsmsResponseScenario, meterAnomalyScenario, shortSessionScenario, heartbeatIrregularScenario, unresponsiveCsmsScenario, };
26
+ export { compareScenarioReports } from './compare.js';
27
+ export type { ScenarioComparison } from './compare.js';
16
28
  /**
17
29
  * Get a scenario by name.
18
30
  * @returns The scenario, or undefined if not found.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/scenarios/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAS,MAAM,kBAAkB,CAAC;AAUxD,QAAA,MAAM,qBAAqB,EAAE,QAM5B,CAAC;AAEF,QAAA,MAAM,kBAAkB,EAAE,QAMzB,CAAC;AAEF,QAAA,MAAM,sBAAsB,EAAE,QAM7B,CAAC;AAMF,QAAA,MAAM,sBAAsB,EAAE,QAAgD,CAAC;AAC/E,QAAA,MAAM,4BAA4B,EAAE,QAAsD,CAAC;AAM3F,eAAO,MAAM,SAAS,6DAMZ,CAAC;AAEX,eAAO,MAAM,aAAa,4GAMhB,CAAC;AAEX,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EAClB,sBAAsB,EACtB,sBAAsB,EACtB,4BAA4B,GAC7B,CAAC;AAEF;;;GAGG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAE9D"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/scenarios/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAS,MAAM,kBAAkB,CAAC;AAoBxD,QAAA,MAAM,qBAAqB,EAAE,QAM5B,CAAC;AAEF,QAAA,MAAM,kBAAkB,EAAE,QAMzB,CAAC;AAEF,QAAA,MAAM,sBAAsB,EAAE,QAM7B,CAAC;AAMF,QAAA,MAAM,sBAAsB,EAAE,QAAgD,CAAC;AAC/E,QAAA,MAAM,4BAA4B,EAAE,QAAsD,CAAC;AAC3F,QAAA,MAAM,qBAAqB,EAAE,QAA+C,CAAC;AAC7E,QAAA,MAAM,yBAAyB,EAAE,QAAmD,CAAC;AACrF,QAAA,MAAM,uBAAuB,EAAE,QAAiD,CAAC;AACjF,QAAA,MAAM,iCAAiC,EAAE,QACS,CAAC;AACnD,QAAA,MAAM,0BAA0B,EAAE,QAAoD,CAAC;AACvF,QAAA,MAAM,wBAAwB,EAAE,QAAkD,CAAC;AACnF,QAAA,MAAM,oBAAoB,EAAE,QAA8C,CAAC;AAC3E,QAAA,MAAM,oBAAoB,EAAE,QAA8C,CAAC;AAC3E,QAAA,MAAM,0BAA0B,EAAE,QAAoD,CAAC;AACvF,QAAA,MAAM,wBAAwB,EAAE,QAAkD,CAAC;AAMnF,eAAO,MAAM,SAAS,iKAgBZ,CAAC;AAEX,eAAO,MAAM,aAAa,oUAgBhB,CAAC;AAEX,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EAClB,sBAAsB,EACtB,sBAAsB,EACtB,4BAA4B,EAC5B,qBAAqB,EACrB,yBAAyB,EACzB,uBAAuB,EACvB,iCAAiC,EACjC,0BAA0B,EAC1B,wBAAwB,EACxB,oBAAoB,EACpB,oBAAoB,EACpB,0BAA0B,EAC1B,wBAAwB,GACzB,CAAC;AAEF,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACtD,YAAY,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAEvD;;;GAGG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAE9D"}
@@ -7,18 +7,28 @@
7
7
  import { fixtures } from '../core/index.js';
8
8
  import stationOffline from './__scenarios__/station-offline.js';
9
9
  import unexpectedStopReason from './__scenarios__/unexpected-stop-reason.js';
10
+ import meterValueGap from './__scenarios__/meter-value-gap.js';
11
+ import invalidStopReason from './__scenarios__/invalid-stop-reason.js';
12
+ import unexpectedStart from './__scenarios__/unexpected-start.js';
13
+ import statusTransitionViolation from './__scenarios__/status-transition-violation.js';
14
+ import diagnosticsFailure from './__scenarios__/diagnostics-failure.js';
15
+ import slowCsmsResponse from './__scenarios__/slow-csms-response.js';
16
+ import meterAnomaly from './__scenarios__/meter-anomaly.js';
17
+ import shortSession from './__scenarios__/short-session.js';
18
+ import heartbeatIrregular from './__scenarios__/heartbeat-irregular.js';
19
+ import unresponsiveCsms from './__scenarios__/unresponsive-csms.js';
10
20
  // ---------------------------------------------------------------------------
11
21
  // Scenarios derived from core fixtures
12
22
  // ---------------------------------------------------------------------------
13
23
  const normalSessionScenario = {
14
24
  name: 'normal-session',
15
- description: 'Normal charging session: boot authorize start transaction meter values stop transaction. No failures expected.',
25
+ description: 'Normal charging session: boot, authorize, start transaction, meter values, stop transaction. No failures expected.',
16
26
  trace: fixtures.normalSession,
17
27
  expectedFailures: [],
18
28
  };
19
29
  const failedAuthScenario = {
20
30
  name: 'failed-auth',
21
- description: 'Failed authorization: station connector prepares, idTag is rejected by CSMS. StartTransaction is not attempted. Expects FAILED_AUTHORIZATION failure.',
31
+ description: 'Failed authorization: station prepares, idTag is rejected by CSMS. StartTransaction is not attempted. Expects FAILED_AUTHORIZATION failure.',
22
32
  trace: fixtures.failedAuth,
23
33
  expectedFailures: ['FAILED_AUTHORIZATION'],
24
34
  };
@@ -29,10 +39,20 @@ const connectorFaultScenario = {
29
39
  expectedFailures: ['CONNECTOR_FAULT'],
30
40
  };
31
41
  // ---------------------------------------------------------------------------
32
- // Scenarios from JSON files
42
+ // Scenarios from fixture files
33
43
  // ---------------------------------------------------------------------------
34
44
  const stationOfflineScenario = stationOffline;
35
45
  const unexpectedStopReasonScenario = unexpectedStopReason;
46
+ const meterValueGapScenario = meterValueGap;
47
+ const invalidStopReasonScenario = invalidStopReason;
48
+ const unexpectedStartScenario = unexpectedStart;
49
+ const statusTransitionViolationScenario = statusTransitionViolation;
50
+ const diagnosticsFailureScenario = diagnosticsFailure;
51
+ const slowCsmsResponseScenario = slowCsmsResponse;
52
+ const meterAnomalyScenario = meterAnomaly;
53
+ const shortSessionScenario = shortSession;
54
+ const heartbeatIrregularScenario = heartbeatIrregular;
55
+ const unresponsiveCsmsScenario = unresponsiveCsms;
36
56
  // ---------------------------------------------------------------------------
37
57
  // Registry
38
58
  // ---------------------------------------------------------------------------
@@ -42,6 +62,16 @@ export const scenarios = [
42
62
  connectorFaultScenario,
43
63
  stationOfflineScenario,
44
64
  unexpectedStopReasonScenario,
65
+ meterValueGapScenario,
66
+ invalidStopReasonScenario,
67
+ unexpectedStartScenario,
68
+ statusTransitionViolationScenario,
69
+ diagnosticsFailureScenario,
70
+ slowCsmsResponseScenario,
71
+ meterAnomalyScenario,
72
+ shortSessionScenario,
73
+ heartbeatIrregularScenario,
74
+ unresponsiveCsmsScenario,
45
75
  ];
46
76
  export const scenarioNames = [
47
77
  'normal-session',
@@ -49,8 +79,19 @@ export const scenarioNames = [
49
79
  'connector-fault',
50
80
  'station-offline',
51
81
  'unexpected-stop-reason',
82
+ 'meter-value-gap',
83
+ 'invalid-stop-reason',
84
+ 'unexpected-start',
85
+ 'status-transition-violation',
86
+ 'diagnostics-failure',
87
+ 'slow-csms-response',
88
+ 'meter-anomaly',
89
+ 'short-session',
90
+ 'heartbeat-irregular',
91
+ 'unresponsive-csms',
52
92
  ];
53
- export { normalSessionScenario, failedAuthScenario, connectorFaultScenario, stationOfflineScenario, unexpectedStopReasonScenario, };
93
+ export { normalSessionScenario, failedAuthScenario, connectorFaultScenario, stationOfflineScenario, unexpectedStopReasonScenario, meterValueGapScenario, invalidStopReasonScenario, unexpectedStartScenario, statusTransitionViolationScenario, diagnosticsFailureScenario, slowCsmsResponseScenario, meterAnomalyScenario, shortSessionScenario, heartbeatIrregularScenario, unresponsiveCsmsScenario, };
94
+ export { compareScenarioReports } from './compare.js';
54
95
  /**
55
96
  * Get a scenario by name.
56
97
  * @returns The scenario, or undefined if not found.
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/scenarios/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,OAAO,cAAc,MAAM,oCAAoC,CAAC;AAChE,OAAO,oBAAoB,MAAM,2CAA2C,CAAC;AAE7E,8EAA8E;AAC9E,uCAAuC;AACvC,8EAA8E;AAE9E,MAAM,qBAAqB,GAAa;IACtC,IAAI,EAAE,gBAAgB;IACtB,WAAW,EACT,wHAAwH;IAC1H,KAAK,EAAE,QAAQ,CAAC,aAAsB;IACtC,gBAAgB,EAAE,EAAE;CACrB,CAAC;AAEF,MAAM,kBAAkB,GAAa;IACnC,IAAI,EAAE,aAAa;IACnB,WAAW,EACT,uJAAuJ;IACzJ,KAAK,EAAE,QAAQ,CAAC,UAAmB;IACnC,gBAAgB,EAAE,CAAC,sBAAsB,CAAC;CAC3C,CAAC;AAEF,MAAM,sBAAsB,GAAa;IACvC,IAAI,EAAE,iBAAiB;IACvB,WAAW,EACT,gLAAgL;IAClL,KAAK,EAAE,QAAQ,CAAC,cAAuB;IACvC,gBAAgB,EAAE,CAAC,iBAAiB,CAAC;CACtC,CAAC;AAEF,8EAA8E;AAC9E,4BAA4B;AAC5B,8EAA8E;AAE9E,MAAM,sBAAsB,GAAa,cAAqC,CAAC;AAC/E,MAAM,4BAA4B,GAAa,oBAA2C,CAAC;AAE3F,8EAA8E;AAC9E,WAAW;AACX,8EAA8E;AAE9E,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,qBAAqB;IACrB,kBAAkB;IAClB,sBAAsB;IACtB,sBAAsB;IACtB,4BAA4B;CACpB,CAAC;AAEX,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,gBAAgB;IAChB,aAAa;IACb,iBAAiB;IACjB,iBAAiB;IACjB,wBAAwB;CAChB,CAAC;AAEX,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EAClB,sBAAsB,EACtB,sBAAsB,EACtB,4BAA4B,GAC7B,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AAChD,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/scenarios/index.ts"],"names":[],"mappings":"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"}