@ledgerhq/device-management-kit-devtools-ui 0.0.0-develop-20260630003344 → 0.0.0-develop-20260701003433
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/lib/build/src/Dashboard.d.ts.map +1 -1
- package/lib/build/src/Dashboard.js +5 -1
- package/lib/build/src/Dashboard.js.map +1 -1
- package/lib/build/src/components/DashboardNavigationBar.d.ts +1 -0
- package/lib/build/src/components/DashboardNavigationBar.d.ts.map +1 -1
- package/lib/build/src/components/DashboardNavigationBar.js +2 -1
- package/lib/build/src/components/DashboardNavigationBar.js.map +1 -1
- package/lib/build/src/hooks/connectorMessageHandlers.d.ts +2 -2
- package/lib/build/src/hooks/connectorMessageHandlers.d.ts.map +1 -1
- package/lib/build/src/hooks/connectorMessageHandlers.js +30 -2
- package/lib/build/src/hooks/connectorMessageHandlers.js.map +1 -1
- package/lib/build/src/hooks/useConnectorMessages.d.ts +15 -0
- package/lib/build/src/hooks/useConnectorMessages.d.ts.map +1 -1
- package/lib/build/src/hooks/useConnectorMessages.js +23 -5
- package/lib/build/src/hooks/useConnectorMessages.js.map +1 -1
- package/lib/build/src/screens/logger/mapConnectorMessageToLogData.d.ts +1 -4
- package/lib/build/src/screens/logger/mapConnectorMessageToLogData.d.ts.map +1 -1
- package/lib/build/src/screens/logger/mapConnectorMessageToLogData.js +2 -6
- package/lib/build/src/screens/logger/mapConnectorMessageToLogData.js.map +1 -1
- package/lib/build/src/screens/mock-capture/deviceConfigFromSession.d.ts +16 -0
- package/lib/build/src/screens/mock-capture/deviceConfigFromSession.d.ts.map +1 -0
- package/lib/build/src/screens/mock-capture/deviceConfigFromSession.js +52 -0
- package/lib/build/src/screens/mock-capture/deviceConfigFromSession.js.map +1 -0
- package/lib/build/src/screens/mock-capture/generateSessionExport.d.ts +36 -0
- package/lib/build/src/screens/mock-capture/generateSessionExport.d.ts.map +1 -0
- package/lib/build/src/screens/mock-capture/generateSessionExport.js +79 -0
- package/lib/build/src/screens/mock-capture/generateSessionExport.js.map +1 -0
- package/lib/build/src/screens/mock-capture/generateSessionExport.test.d.ts +2 -0
- package/lib/build/src/screens/mock-capture/generateSessionExport.test.d.ts.map +1 -0
- package/lib/build/src/screens/mock-capture/generateSessionExport.test.js +125 -0
- package/lib/build/src/screens/mock-capture/generateSessionExport.test.js.map +1 -0
- package/lib/build/src/screens/mock-capture/index.d.ts +23 -0
- package/lib/build/src/screens/mock-capture/index.d.ts.map +1 -0
- package/lib/build/src/screens/mock-capture/index.js +281 -0
- package/lib/build/src/screens/mock-capture/index.js.map +1 -0
- package/lib/build/tsconfig.build.tsbuildinfo +1 -1
- package/lib/cjs/package.json +2 -1
- package/lib/cjs/src/Dashboard.js +3 -3
- package/lib/cjs/src/Dashboard.js.map +3 -3
- package/lib/cjs/src/components/DashboardNavigationBar.js +8 -8
- package/lib/cjs/src/components/DashboardNavigationBar.js.map +2 -2
- package/lib/cjs/src/hooks/connectorMessageHandlers.js +1 -1
- package/lib/cjs/src/hooks/connectorMessageHandlers.js.map +3 -3
- package/lib/cjs/src/hooks/useConnectorMessages.js +1 -1
- package/lib/cjs/src/hooks/useConnectorMessages.js.map +3 -3
- package/lib/cjs/src/screens/logger/mapConnectorMessageToLogData.js +1 -1
- package/lib/cjs/src/screens/logger/mapConnectorMessageToLogData.js.map +3 -3
- package/lib/cjs/src/screens/mock-capture/deviceConfigFromSession.js +2 -0
- package/lib/cjs/src/screens/mock-capture/deviceConfigFromSession.js.map +7 -0
- package/lib/cjs/src/screens/mock-capture/generateSessionExport.js +2 -0
- package/lib/cjs/src/screens/mock-capture/generateSessionExport.js.map +7 -0
- package/lib/cjs/src/screens/mock-capture/generateSessionExport.test.js +2 -0
- package/lib/cjs/src/screens/mock-capture/generateSessionExport.test.js.map +7 -0
- package/lib/cjs/src/screens/mock-capture/index.js +109 -0
- package/lib/cjs/src/screens/mock-capture/index.js.map +7 -0
- package/lib/esm/package.json +2 -1
- package/lib/esm/src/Dashboard.js +3 -3
- package/lib/esm/src/Dashboard.js.map +3 -3
- package/lib/esm/src/components/DashboardNavigationBar.js +8 -8
- package/lib/esm/src/components/DashboardNavigationBar.js.map +2 -2
- package/lib/esm/src/hooks/connectorMessageHandlers.js +1 -1
- package/lib/esm/src/hooks/connectorMessageHandlers.js.map +3 -3
- package/lib/esm/src/hooks/useConnectorMessages.js +1 -1
- package/lib/esm/src/hooks/useConnectorMessages.js.map +3 -3
- package/lib/esm/src/screens/logger/mapConnectorMessageToLogData.js +1 -1
- package/lib/esm/src/screens/logger/mapConnectorMessageToLogData.js.map +3 -3
- package/lib/esm/src/screens/mock-capture/deviceConfigFromSession.js +2 -0
- package/lib/esm/src/screens/mock-capture/deviceConfigFromSession.js.map +7 -0
- package/lib/esm/src/screens/mock-capture/generateSessionExport.js +2 -0
- package/lib/esm/src/screens/mock-capture/generateSessionExport.js.map +7 -0
- package/lib/esm/src/screens/mock-capture/generateSessionExport.test.js +2 -0
- package/lib/esm/src/screens/mock-capture/generateSessionExport.test.js.map +7 -0
- package/lib/esm/src/screens/mock-capture/index.js +109 -0
- package/lib/esm/src/screens/mock-capture/index.js.map +7 -0
- package/package.json +8 -7
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Dashboard.d.ts","sourceRoot":"","sources":["../../../src/Dashboard.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,+CAA+C,CAAC;
|
|
1
|
+
{"version":3,"file":"Dashboard.d.ts","sourceRoot":"","sources":["../../../src/Dashboard.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,+CAA+C,CAAC;AAuJ/E,wBAAgB,0BAA0B,CAAC,EACzC,SAAS,GACV,EAAE;IACD,SAAS,EAAE,SAAS,CAAC;CACtB,2CAQA"}
|
|
@@ -9,6 +9,7 @@ import { SplitView } from "./components/SplitView";
|
|
|
9
9
|
import { useConnectorMessages } from "./hooks/useConnectorMessages";
|
|
10
10
|
import { Inspector } from "./screens/inspector";
|
|
11
11
|
import { Logger } from "./screens/logger";
|
|
12
|
+
import { MockCapture } from "./screens/mock-capture";
|
|
12
13
|
import { ErrorBoundary } from "./ErrorBoundary";
|
|
13
14
|
const DashboardContainer = styled.div `
|
|
14
15
|
display: flex;
|
|
@@ -23,17 +24,20 @@ const ContentArea = styled.div `
|
|
|
23
24
|
overflow: hidden;
|
|
24
25
|
`;
|
|
25
26
|
const Dashboard = ({ connector }) => {
|
|
26
|
-
const { receivedMessages, sentMessages, logs, connectedDevices, sessionStates, discoveredDevices, isListening, isActivelyDiscovering, isLoggerConnected, isInspectorConnected, providerValue, apduResponses, sendMessage, clearLogs, startListening, stopListening, startDiscovering, stopDiscovering, connectDevice, getProvider, setProvider, sendApdu, } = useConnectorMessages(connector);
|
|
27
|
+
const { receivedMessages, sentMessages, logs, connectedDevices, sessionStates, discoveredDevices, isListening, isActivelyDiscovering, isLoggerConnected, isInspectorConnected, providerValue, apduResponses, apduExchanges, isRecordingExchanges, sendMessage, clearLogs, startRecordingExchanges, stopRecordingExchanges, clearRecordedExchanges, startListening, stopListening, startDiscovering, stopDiscovering, connectDevice, getProvider, setProvider, sendApdu, } = useConnectorMessages(connector);
|
|
27
28
|
const [currentScreen, setCurrentScreen] = useState(DashboardScreen.logs);
|
|
28
29
|
const [isDebugOpen, setIsDebugOpen] = useState(false);
|
|
29
30
|
const logger = (_jsx(Logger, { logs: logs, clearLogs: clearLogs, isConnected: isLoggerConnected }));
|
|
30
31
|
const inspector = (_jsx(Inspector, { devices: connectedDevices, sessionStates: sessionStates, discoveredDevices: discoveredDevices, isListening: isListening, isActivelyDiscovering: isActivelyDiscovering, sendMessage: sendMessage, isConnected: isInspectorConnected, startListening: startListening, stopListening: stopListening, startDiscovering: startDiscovering, stopDiscovering: stopDiscovering, connectDevice: connectDevice, providerValue: providerValue, getProvider: getProvider, setProvider: setProvider, sendApdu: sendApdu, apduResponses: apduResponses }));
|
|
32
|
+
const mockCapture = (_jsx(MockCapture, { apduExchanges: apduExchanges, isRecording: isRecordingExchanges, isConnected: isLoggerConnected, startRecording: startRecordingExchanges, stopRecording: stopRecordingExchanges, clearRecorded: clearRecordedExchanges, sessionStates: sessionStates, connectedDevices: connectedDevices }));
|
|
31
33
|
const content = (() => {
|
|
32
34
|
switch (currentScreen) {
|
|
33
35
|
case DashboardScreen.logs:
|
|
34
36
|
return logger;
|
|
35
37
|
case DashboardScreen.inspector:
|
|
36
38
|
return inspector;
|
|
39
|
+
case DashboardScreen.mockCapture:
|
|
40
|
+
return mockCapture;
|
|
37
41
|
case DashboardScreen.splitHorizontal:
|
|
38
42
|
return (_jsx(SplitView, { direction: "horizontal", first: logger, second: inspector }));
|
|
39
43
|
case DashboardScreen.splitVertical:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Dashboard.js","sourceRoot":"","sources":["../../../src/Dashboard.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Dashboard.js","sourceRoot":"","sources":["../../../src/Dashboard.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DashboardNavigationBar.d.ts","sourceRoot":"","sources":["../../../../src/components/DashboardNavigationBar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,oBAAY,eAAe;IACzB,IAAI,SAAS;IACb,SAAS,cAAc;IACvB,eAAe,oBAAoB;IACnC,aAAa,kBAAkB;CAChC;AAgGD,KAAK,2BAA2B,GAAG;IACjC,aAAa,EAAE,eAAe,CAAC;IAC/B,cAAc,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,IAAI,CAAC;IAClD,iBAAiB,EAAE,OAAO,CAAC;IAC3B,oBAAoB,EAAE,OAAO,CAAC;CAC/B,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,KAAK,CAAC,EAAE,CAAC,2BAA2B,
|
|
1
|
+
{"version":3,"file":"DashboardNavigationBar.d.ts","sourceRoot":"","sources":["../../../../src/components/DashboardNavigationBar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,oBAAY,eAAe;IACzB,IAAI,SAAS;IACb,SAAS,cAAc;IACvB,WAAW,gBAAgB;IAC3B,eAAe,oBAAoB;IACnC,aAAa,kBAAkB;CAChC;AAgGD,KAAK,2BAA2B,GAAG;IACjC,aAAa,EAAE,eAAe,CAAC;IAC/B,cAAc,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,IAAI,CAAC;IAClD,iBAAiB,EAAE,OAAO,CAAC;IAC3B,oBAAoB,EAAE,OAAO,CAAC;CAC/B,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,KAAK,CAAC,EAAE,CAAC,2BAA2B,CA0DxE,CAAC"}
|
|
@@ -4,6 +4,7 @@ export var DashboardScreen;
|
|
|
4
4
|
(function (DashboardScreen) {
|
|
5
5
|
DashboardScreen["logs"] = "logs";
|
|
6
6
|
DashboardScreen["inspector"] = "inspector";
|
|
7
|
+
DashboardScreen["mockCapture"] = "mockCapture";
|
|
7
8
|
DashboardScreen["splitHorizontal"] = "splitHorizontal";
|
|
8
9
|
DashboardScreen["splitVertical"] = "splitVertical";
|
|
9
10
|
})(DashboardScreen || (DashboardScreen = {}));
|
|
@@ -80,6 +81,6 @@ const SplitLabel = styled.span `
|
|
|
80
81
|
const SplitHorizontalIcon = () => (_jsxs("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "currentColor", children: [_jsx("rect", { x: "2", y: "2", width: "12", height: "5", rx: "1", opacity: "0.6" }), _jsx("rect", { x: "2", y: "9", width: "12", height: "5", rx: "1" })] }));
|
|
81
82
|
const SplitVerticalIcon = () => (_jsxs("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "currentColor", children: [_jsx("rect", { x: "2", y: "2", width: "5", height: "12", rx: "1", opacity: "0.6" }), _jsx("rect", { x: "9", y: "2", width: "5", height: "12", rx: "1" })] }));
|
|
82
83
|
export const DashboardNavigationBar = ({ currentScreen, onScreenChange, isLoggerConnected, isInspectorConnected, }) => {
|
|
83
|
-
return (_jsxs(NavContainer, { children: [_jsxs(NavGroup, { children: [_jsxs(NavButton, { "$isActive": currentScreen === DashboardScreen.logs, "$isConnected": isLoggerConnected, onClick: () => onScreenChange(DashboardScreen.logs), children: [_jsx(ConnectionIndicator, { "$connected": isLoggerConnected }), "Logger"] }), _jsxs(NavButton, { "$isActive": currentScreen === DashboardScreen.inspector, "$isConnected": isInspectorConnected, onClick: () => onScreenChange(DashboardScreen.inspector), children: [_jsx(ConnectionIndicator, { "$connected": isInspectorConnected }), "Inspector"] })] }), _jsx(Divider, {}), _jsxs(NavGroup, { children: [_jsx(SplitLabel, { children: "Split:" }), _jsx(SplitButton, { "$isActive": currentScreen === DashboardScreen.splitHorizontal, onClick: () => onScreenChange(DashboardScreen.splitHorizontal), title: "Split Horizontal (top/bottom)", children: _jsx(SplitHorizontalIcon, {}) }), _jsx(SplitButton, { "$isActive": currentScreen === DashboardScreen.splitVertical, onClick: () => onScreenChange(DashboardScreen.splitVertical), title: "Split Vertical (left/right)", children: _jsx(SplitVerticalIcon, {}) })] })] }));
|
|
84
|
+
return (_jsxs(NavContainer, { children: [_jsxs(NavGroup, { children: [_jsxs(NavButton, { "$isActive": currentScreen === DashboardScreen.logs, "$isConnected": isLoggerConnected, onClick: () => onScreenChange(DashboardScreen.logs), children: [_jsx(ConnectionIndicator, { "$connected": isLoggerConnected }), "Logger"] }), _jsxs(NavButton, { "$isActive": currentScreen === DashboardScreen.inspector, "$isConnected": isInspectorConnected, onClick: () => onScreenChange(DashboardScreen.inspector), children: [_jsx(ConnectionIndicator, { "$connected": isInspectorConnected }), "Inspector"] }), _jsxs(NavButton, { "$isActive": currentScreen === DashboardScreen.mockCapture, "$isConnected": isLoggerConnected, onClick: () => onScreenChange(DashboardScreen.mockCapture), children: [_jsx(ConnectionIndicator, { "$connected": isLoggerConnected }), "Mock Capture"] })] }), _jsx(Divider, {}), _jsxs(NavGroup, { children: [_jsx(SplitLabel, { children: "Split:" }), _jsx(SplitButton, { "$isActive": currentScreen === DashboardScreen.splitHorizontal, onClick: () => onScreenChange(DashboardScreen.splitHorizontal), title: "Split Horizontal (top/bottom)", children: _jsx(SplitHorizontalIcon, {}) }), _jsx(SplitButton, { "$isActive": currentScreen === DashboardScreen.splitVertical, onClick: () => onScreenChange(DashboardScreen.splitVertical), title: "Split Vertical (left/right)", children: _jsx(SplitVerticalIcon, {}) })] })] }));
|
|
84
85
|
};
|
|
85
86
|
//# sourceMappingURL=DashboardNavigationBar.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DashboardNavigationBar.js","sourceRoot":"","sources":["../../../../src/components/DashboardNavigationBar.tsx"],"names":[],"mappings":";AACA,OAAO,MAAM,MAAM,mBAAmB,CAAC;AAEvC,MAAM,CAAN,IAAY,
|
|
1
|
+
{"version":3,"file":"DashboardNavigationBar.js","sourceRoot":"","sources":["../../../../src/components/DashboardNavigationBar.tsx"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@ import type { Dispatch, SetStateAction } from "react";
|
|
|
2
2
|
import { type ConnectedDevice, type DeviceSessionState, type DiscoveredDevice } from "@ledgerhq/device-management-kit";
|
|
3
3
|
import { type DevToolsModule } from "@ledgerhq/device-management-kit-devtools-core";
|
|
4
4
|
import { type LogData } from "../screens/logger/types";
|
|
5
|
-
import { type ApduResponse } from "./useConnectorMessages";
|
|
5
|
+
import { type ApduExchange, type ApduResponse } from "./useConnectorMessages";
|
|
6
6
|
/**
|
|
7
7
|
* Handle module connected handshake message.
|
|
8
8
|
*/
|
|
@@ -10,7 +10,7 @@ export declare function handleModuleConnected(payload: string, setConnectedModul
|
|
|
10
10
|
/**
|
|
11
11
|
* Handle log message. Returns true if message was a log, false otherwise.
|
|
12
12
|
*/
|
|
13
|
-
export declare function handleLogMessage(
|
|
13
|
+
export declare function handleLogMessage(payload: string, setLogs: Dispatch<SetStateAction<LogData[]>>, setApduExchanges: Dispatch<SetStateAction<ApduExchange[]>>, isRecordingExchanges: boolean): boolean;
|
|
14
14
|
/**
|
|
15
15
|
* Handle connected devices update message.
|
|
16
16
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connectorMessageHandlers.d.ts","sourceRoot":"","sources":["../../../../src/hooks/connectorMessageHandlers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AACtD,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACtB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,+CAA+C,CAAC;AAGpF,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"connectorMessageHandlers.d.ts","sourceRoot":"","sources":["../../../../src/hooks/connectorMessageHandlers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AACtD,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACtB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,+CAA+C,CAAC;AAGpF,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,YAAY,EAAE,MAAM,wBAAwB,CAAC;AA6B9E;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,MAAM,EACf,mBAAmB,EAAE,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,GACjE,IAAI,CAON;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,QAAQ,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC,CAAC,EAC5C,gBAAgB,EAAE,QAAQ,CAAC,cAAc,CAAC,YAAY,EAAE,CAAC,CAAC,EAC1D,oBAAoB,EAAE,OAAO,GAC5B,OAAO,CAaT;AAED;;GAEG;AACH,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,MAAM,EACf,mBAAmB,EAAE,QAAQ,CAAC,cAAc,CAAC,eAAe,EAAE,CAAC,CAAC,GAC/D,IAAI,CAON;AAED;;GAEG;AACH,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,MAAM,EACf,gBAAgB,EAAE,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC,CAAC,GAC1E,IAAI,CAUN;AAED;;GAEG;AACH,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,MAAM,EACf,oBAAoB,EAAE,QAAQ,CAAC,cAAc,CAAC,gBAAgB,EAAE,CAAC,CAAC,GACjE,IAAI,CAON;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,EACf,gBAAgB,EAAE,QAAQ,CAAC,cAAc,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,GACxD,IAAI,CAON;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EACf,gBAAgB,EAAE,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,GACpE,IAAI,CAON"}
|
|
@@ -1,4 +1,26 @@
|
|
|
1
1
|
import { mapConnectorMessageToLogData } from "../screens/logger/mapConnectorMessageToLogData";
|
|
2
|
+
const APDU_EXCHANGE_LOG = "apdu-exchange";
|
|
3
|
+
/**
|
|
4
|
+
* Extracts a structured APDU exchange from a log message, if the log carries
|
|
5
|
+
* the `apdu-exchange` payload emitted by DMK. Returns null otherwise.
|
|
6
|
+
*/
|
|
7
|
+
function tryExtractApduExchange(logData) {
|
|
8
|
+
const data = logData.payload;
|
|
9
|
+
if (typeof data !== "object" ||
|
|
10
|
+
data === null ||
|
|
11
|
+
Array.isArray(data) ||
|
|
12
|
+
data["type"] !== APDU_EXCHANGE_LOG ||
|
|
13
|
+
typeof data["apdu"] !== "string" ||
|
|
14
|
+
typeof data["response"] !== "string") {
|
|
15
|
+
return null;
|
|
16
|
+
}
|
|
17
|
+
return {
|
|
18
|
+
sessionId: typeof data["sessionId"] === "string" ? data["sessionId"] : undefined,
|
|
19
|
+
apdu: data["apdu"],
|
|
20
|
+
response: data["response"],
|
|
21
|
+
timestamp: logData.timestamp,
|
|
22
|
+
};
|
|
23
|
+
}
|
|
2
24
|
/**
|
|
3
25
|
* Handle module connected handshake message.
|
|
4
26
|
*/
|
|
@@ -14,10 +36,16 @@ export function handleModuleConnected(payload, setConnectedModules) {
|
|
|
14
36
|
/**
|
|
15
37
|
* Handle log message. Returns true if message was a log, false otherwise.
|
|
16
38
|
*/
|
|
17
|
-
export function handleLogMessage(
|
|
18
|
-
const logData = mapConnectorMessageToLogData(
|
|
39
|
+
export function handleLogMessage(payload, setLogs, setApduExchanges, isRecordingExchanges) {
|
|
40
|
+
const logData = mapConnectorMessageToLogData(payload);
|
|
19
41
|
if (logData !== null) {
|
|
20
42
|
setLogs((prev) => [...prev, logData]);
|
|
43
|
+
if (isRecordingExchanges) {
|
|
44
|
+
const exchange = tryExtractApduExchange(logData);
|
|
45
|
+
if (exchange !== null) {
|
|
46
|
+
setApduExchanges((prev) => [...prev, exchange]);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
21
49
|
return true;
|
|
22
50
|
}
|
|
23
51
|
return false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connectorMessageHandlers.js","sourceRoot":"","sources":["../../../../src/hooks/connectorMessageHandlers.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,4BAA4B,EAAE,MAAM,gDAAgD,CAAC;AAI9F;;GAEG;AACH,MAAM,UAAU,qBAAqB,CACnC,OAAe,EACf,mBAAkE;IAElE,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAA+B,CAAC;QACrE,mBAAmB,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IAC5D,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,yCAAyC,EAAE,CAAC,CAAC,CAAC;IAC9D,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAC9B,
|
|
1
|
+
{"version":3,"file":"connectorMessageHandlers.js","sourceRoot":"","sources":["../../../../src/hooks/connectorMessageHandlers.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,6 +16,16 @@ export type ApduResponse = {
|
|
|
16
16
|
data?: number[];
|
|
17
17
|
error?: string;
|
|
18
18
|
};
|
|
19
|
+
/**
|
|
20
|
+
* A single APDU exchange (request + response) captured passively from the DMK
|
|
21
|
+
* logs of the host app. Used to derive mock-server mocks.
|
|
22
|
+
*/
|
|
23
|
+
export type ApduExchange = {
|
|
24
|
+
sessionId?: string;
|
|
25
|
+
apdu: string;
|
|
26
|
+
response: string;
|
|
27
|
+
timestamp: string;
|
|
28
|
+
};
|
|
19
29
|
export type ConnectorMessagesState = {
|
|
20
30
|
receivedMessages: Message[];
|
|
21
31
|
sentMessages: Message[];
|
|
@@ -30,8 +40,13 @@ export type ConnectorMessagesState = {
|
|
|
30
40
|
isInspectorConnected: boolean;
|
|
31
41
|
providerValue: number | null;
|
|
32
42
|
apduResponses: Map<string, ApduResponse>;
|
|
43
|
+
apduExchanges: ApduExchange[];
|
|
44
|
+
isRecordingExchanges: boolean;
|
|
33
45
|
sendMessage: (type: string, payload: string) => void;
|
|
34
46
|
clearLogs: () => void;
|
|
47
|
+
startRecordingExchanges: () => void;
|
|
48
|
+
stopRecordingExchanges: () => void;
|
|
49
|
+
clearRecordedExchanges: () => void;
|
|
35
50
|
startListening: () => void;
|
|
36
51
|
stopListening: () => void;
|
|
37
52
|
startDiscovering: () => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useConnectorMessages.d.ts","sourceRoot":"","sources":["../../../../src/hooks/useConnectorMessages.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACtB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,KAAK,SAAS,EAEd,KAAK,cAAc,
|
|
1
|
+
{"version":3,"file":"useConnectorMessages.d.ts","sourceRoot":"","sources":["../../../../src/hooks/useConnectorMessages.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACtB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,KAAK,SAAS,EAEd,KAAK,cAAc,EAIpB,MAAM,+CAA+C,CAAC;AAEvD,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAoBvD,MAAM,MAAM,YAAY,GAAG;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,gBAAgB,EAAE,OAAO,EAAE,CAAC;IAC5B,YAAY,EAAE,OAAO,EAAE,CAAC;IACxB,IAAI,EAAE,OAAO,EAAE,CAAC;IAChB,gBAAgB,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC;IACtC,gBAAgB,EAAE,eAAe,EAAE,CAAC;IACpC,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAC/C,iBAAiB,EAAE,gBAAgB,EAAE,CAAC;IACtC,WAAW,EAAE,OAAO,CAAC;IACrB,qBAAqB,EAAE,OAAO,CAAC;IAC/B,iBAAiB,EAAE,OAAO,CAAC;IAC3B,oBAAoB,EAAE,OAAO,CAAC;IAC9B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACzC,aAAa,EAAE,YAAY,EAAE,CAAC;IAC9B,oBAAoB,EAAE,OAAO,CAAC;IAC9B,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACrD,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,uBAAuB,EAAE,MAAM,IAAI,CAAC;IACpC,sBAAsB,EAAE,MAAM,IAAI,CAAC;IACnC,sBAAsB,EAAE,MAAM,IAAI,CAAC;IACnC,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,gBAAgB,EAAE,MAAM,IAAI,CAAC;IAC7B,eAAe,EAAE,MAAM,IAAI,CAAC;IAC5B,aAAa,EAAE,CACb,QAAQ,EAAE,MAAM,EAChB,uBAAuB,CAAC,EAAE;QACxB,mBAAmB,EAAE,OAAO,CAAC;QAC7B,eAAe,CAAC,EAAE,MAAM,CAAC;KAC1B,KACE,IAAI,CAAC;IACV,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,MAAM,CAAC;CAC1D,CAAC;AAMF;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,SAAS,GACnB,sBAAsB,CA2KxB"}
|
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
* Handles all communication between the Dashboard UI and the client app
|
|
6
6
|
* via the connector (WebSocket or Rozenite).
|
|
7
7
|
*/
|
|
8
|
-
import { useCallback, useEffect, useMemo, useState } from "react";
|
|
9
|
-
import { DEVTOOLS_MODULES, INSPECTOR_MESSAGE_TYPES, MODULE_CONNECTED_MESSAGE_TYPE, } from "@ledgerhq/device-management-kit-devtools-core";
|
|
8
|
+
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
9
|
+
import { DEVTOOLS_MODULES, INSPECTOR_MESSAGE_TYPES, LOGGER_MESSAGE_TYPES, MODULE_CONNECTED_MESSAGE_TYPE, } from "@ledgerhq/device-management-kit-devtools-core";
|
|
10
10
|
import { createApduCommands, createDiscoveryCommands, createProviderCommands, } from "./commandDispatcher";
|
|
11
11
|
import { handleApduResponse, handleConnectedDevicesUpdate, handleDeviceSessionStateUpdate, handleDiscoveredDevicesUpdate, handleLogMessage, handleModuleConnected, handleProviderValue, } from "./connectorMessageHandlers";
|
|
12
12
|
// ============================================================================
|
|
@@ -37,6 +37,9 @@ export function useConnectorMessages(connector) {
|
|
|
37
37
|
const [isActivelyDiscovering, setIsActivelyDiscovering] = useState(false);
|
|
38
38
|
const [providerValue, setProviderValue] = useState(null);
|
|
39
39
|
const [apduResponses, setApduResponses] = useState(new Map());
|
|
40
|
+
const [apduExchanges, setApduExchanges] = useState([]);
|
|
41
|
+
const [isRecordingExchanges, setIsRecordingExchanges] = useState(false);
|
|
42
|
+
const isRecordingExchangesRef = useRef(false);
|
|
40
43
|
// === Tracked Connector (keeps all sent messages in state) ===
|
|
41
44
|
const trackedConnector = useMemo(() => ({
|
|
42
45
|
...connector,
|
|
@@ -68,9 +71,8 @@ export function useConnectorMessages(connector) {
|
|
|
68
71
|
case INSPECTOR_MESSAGE_TYPES.APDU_RESPONSE:
|
|
69
72
|
handleApduResponse(payload, setApduResponses);
|
|
70
73
|
break;
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
handleLogMessage(type, payload, setLogs);
|
|
74
|
+
case LOGGER_MESSAGE_TYPES.ADD_LOG:
|
|
75
|
+
handleLogMessage(payload, setLogs, setApduExchanges, isRecordingExchangesRef.current);
|
|
74
76
|
break;
|
|
75
77
|
}
|
|
76
78
|
});
|
|
@@ -104,6 +106,17 @@ export function useConnectorMessages(connector) {
|
|
|
104
106
|
const clearLogs = useCallback(() => {
|
|
105
107
|
setLogs([]);
|
|
106
108
|
}, []);
|
|
109
|
+
const startRecordingExchanges = useCallback(() => {
|
|
110
|
+
isRecordingExchangesRef.current = true;
|
|
111
|
+
setIsRecordingExchanges(true);
|
|
112
|
+
}, []);
|
|
113
|
+
const stopRecordingExchanges = useCallback(() => {
|
|
114
|
+
isRecordingExchangesRef.current = false;
|
|
115
|
+
setIsRecordingExchanges(false);
|
|
116
|
+
}, []);
|
|
117
|
+
const clearRecordedExchanges = useCallback(() => {
|
|
118
|
+
setApduExchanges([]);
|
|
119
|
+
}, []);
|
|
107
120
|
// === Derived State ===
|
|
108
121
|
const isLoggerConnected = connectedModules.has(DEVTOOLS_MODULES.LOGGER);
|
|
109
122
|
const isInspectorConnected = connectedModules.has(DEVTOOLS_MODULES.DMK_INSPECTOR);
|
|
@@ -122,9 +135,14 @@ export function useConnectorMessages(connector) {
|
|
|
122
135
|
isInspectorConnected,
|
|
123
136
|
providerValue,
|
|
124
137
|
apduResponses,
|
|
138
|
+
apduExchanges,
|
|
139
|
+
isRecordingExchanges,
|
|
125
140
|
// Actions
|
|
126
141
|
sendMessage: trackedConnector.sendMessage,
|
|
127
142
|
clearLogs,
|
|
143
|
+
startRecordingExchanges,
|
|
144
|
+
stopRecordingExchanges,
|
|
145
|
+
clearRecordedExchanges,
|
|
128
146
|
startListening,
|
|
129
147
|
stopListening,
|
|
130
148
|
startDiscovering,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useConnectorMessages.js","sourceRoot":"","sources":["../../../../src/hooks/useConnectorMessages.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"useConnectorMessages.js","sourceRoot":"","sources":["../../../../src/hooks/useConnectorMessages.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,3 @@
|
|
|
1
1
|
import type { LogData } from "./types";
|
|
2
|
-
export declare function mapConnectorMessageToLogData(
|
|
3
|
-
type: string;
|
|
4
|
-
payload: string;
|
|
5
|
-
}): LogData | null;
|
|
2
|
+
export declare function mapConnectorMessageToLogData(payload: string): LogData | null;
|
|
6
3
|
//# sourceMappingURL=mapConnectorMessageToLogData.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mapConnectorMessageToLogData.d.ts","sourceRoot":"","sources":["../../../../../src/screens/logger/mapConnectorMessageToLogData.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"mapConnectorMessageToLogData.d.ts","sourceRoot":"","sources":["../../../../../src/screens/logger/mapConnectorMessageToLogData.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAe,OAAO,EAAE,MAAM,SAAS,CAAC;AAEpD,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAa5E"}
|
|
@@ -1,9 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
if (connectorMessage.type !== LOGGER_MESSAGE_TYPES.ADD_LOG) {
|
|
4
|
-
return null;
|
|
5
|
-
}
|
|
6
|
-
const { timestamp, tag, verbosity, message, payloadJSON } = JSON.parse(connectorMessage.payload);
|
|
1
|
+
export function mapConnectorMessageToLogData(payload) {
|
|
2
|
+
const { timestamp, tag, verbosity, message, payloadJSON } = JSON.parse(payload);
|
|
7
3
|
return {
|
|
8
4
|
timestamp,
|
|
9
5
|
tag,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mapConnectorMessageToLogData.js","sourceRoot":"","sources":["../../../../../src/screens/logger/mapConnectorMessageToLogData.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"mapConnectorMessageToLogData.js","sourceRoot":"","sources":["../../../../../src/screens/logger/mapConnectorMessageToLogData.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,4BAA4B,CAAC,OAAe;IAC1D,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CACpE,OAAO,CACO,CAAC;IACjB,OAAO;QACL,SAAS;QACT,GAAG;QACH,SAAS;QACT,OAAO;QACP,WAAW;QACX,sBAAsB;QACtB,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAqC;KACrE,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { type ConnectedDevice, type DeviceSessionState } from "@ledgerhq/device-management-kit";
|
|
2
|
+
import { type DeviceConfig } from "@ledgerhq/device-mockserver-client";
|
|
3
|
+
type ConnectivityType = ConnectedDevice["type"];
|
|
4
|
+
/**
|
|
5
|
+
* Builds a partial mock-server device config from a DMK device session state.
|
|
6
|
+
*
|
|
7
|
+
* The mock server's `device_type` values match the `DeviceModelId` enum values
|
|
8
|
+
* (e.g. "nanoX", "stax"), so the model id is used directly. The `name` is the
|
|
9
|
+
* commercial model name (e.g. "Flex", "Gen 5"). The optional `connectivityType`
|
|
10
|
+
* ("USB" / "BLE") comes from the connected device. The `firmware_version` (SE
|
|
11
|
+
* version) is always present, defaulting to an empty string until the session
|
|
12
|
+
* is ready. The running app is only available once the session is ready.
|
|
13
|
+
*/
|
|
14
|
+
export declare function deviceConfigFromSession(state?: DeviceSessionState, connectivityType?: ConnectivityType): Partial<DeviceConfig>;
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=deviceConfigFromSession.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deviceConfigFromSession.d.ts","sourceRoot":"","sources":["../../../../../src/screens/mock-capture/deviceConfigFromSession.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,kBAAkB,EAGxB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAEvE,KAAK,gBAAgB,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;AAehD;;;;;;;;;GASG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,CAAC,EAAE,kBAAkB,EAC1B,gBAAgB,CAAC,EAAE,gBAAgB,GAClC,OAAO,CAAC,YAAY,CAAC,CAgCvB"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { DeviceSessionStateType, StaticDeviceModelDataSource, } from "@ledgerhq/device-management-kit";
|
|
2
|
+
const DASHBOARD_APP_NAME = "BOLOS";
|
|
3
|
+
const deviceModelDataSource = new StaticDeviceModelDataSource();
|
|
4
|
+
function firmwareVersionFromState(state) {
|
|
5
|
+
if ("firmwareVersion" in state && state.firmwareVersion?.os) {
|
|
6
|
+
return state.firmwareVersion.os;
|
|
7
|
+
}
|
|
8
|
+
if ("currentApp" in state && state.currentApp?.name === DASHBOARD_APP_NAME) {
|
|
9
|
+
return state.currentApp.version;
|
|
10
|
+
}
|
|
11
|
+
return "";
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Builds a partial mock-server device config from a DMK device session state.
|
|
15
|
+
*
|
|
16
|
+
* The mock server's `device_type` values match the `DeviceModelId` enum values
|
|
17
|
+
* (e.g. "nanoX", "stax"), so the model id is used directly. The `name` is the
|
|
18
|
+
* commercial model name (e.g. "Flex", "Gen 5"). The optional `connectivityType`
|
|
19
|
+
* ("USB" / "BLE") comes from the connected device. The `firmware_version` (SE
|
|
20
|
+
* version) is always present, defaulting to an empty string until the session
|
|
21
|
+
* is ready. The running app is only available once the session is ready.
|
|
22
|
+
*/
|
|
23
|
+
export function deviceConfigFromSession(state, connectivityType) {
|
|
24
|
+
if (!state) {
|
|
25
|
+
return {};
|
|
26
|
+
}
|
|
27
|
+
const firmwareVersion = firmwareVersionFromState(state);
|
|
28
|
+
const deviceModel = deviceModelDataSource.getDeviceModel({
|
|
29
|
+
id: state.deviceModelId,
|
|
30
|
+
});
|
|
31
|
+
const base = {
|
|
32
|
+
name: deviceModel.productName,
|
|
33
|
+
device_type: state.deviceModelId,
|
|
34
|
+
...(connectivityType ? { connectivity_type: connectivityType } : {}),
|
|
35
|
+
firmware_version: firmwareVersion,
|
|
36
|
+
};
|
|
37
|
+
if (state.sessionStateType === DeviceSessionStateType.Connected) {
|
|
38
|
+
return base;
|
|
39
|
+
}
|
|
40
|
+
return {
|
|
41
|
+
...base,
|
|
42
|
+
// The dashboard (BOLOS) is not an installed app, so it is never listed.
|
|
43
|
+
...(state.currentApp && state.currentApp.name !== DASHBOARD_APP_NAME
|
|
44
|
+
? {
|
|
45
|
+
apps: [
|
|
46
|
+
{ name: state.currentApp.name, version: state.currentApp.version },
|
|
47
|
+
],
|
|
48
|
+
}
|
|
49
|
+
: {}),
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=deviceConfigFromSession.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deviceConfigFromSession.js","sourceRoot":"","sources":["../../../../../src/screens/mock-capture/deviceConfigFromSession.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,sBAAsB,EACtB,2BAA2B,GAC5B,MAAM,iCAAiC,CAAC;AAKzC,MAAM,kBAAkB,GAAG,OAAO,CAAC;AACnC,MAAM,qBAAqB,GAAG,IAAI,2BAA2B,EAAE,CAAC;AAEhE,SAAS,wBAAwB,CAAC,KAAyB;IACzD,IAAI,iBAAiB,IAAI,KAAK,IAAI,KAAK,CAAC,eAAe,EAAE,EAAE,EAAE,CAAC;QAC5D,OAAO,KAAK,CAAC,eAAe,CAAC,EAAE,CAAC;IAClC,CAAC;IACD,IAAI,YAAY,IAAI,KAAK,IAAI,KAAK,CAAC,UAAU,EAAE,IAAI,KAAK,kBAAkB,EAAE,CAAC;QAC3E,OAAO,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC;IAClC,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,uBAAuB,CACrC,KAA0B,EAC1B,gBAAmC;IAEnC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,eAAe,GAAG,wBAAwB,CAAC,KAAK,CAAC,CAAC;IACxD,MAAM,WAAW,GAAG,qBAAqB,CAAC,cAAc,CAAC;QACvD,EAAE,EAAE,KAAK,CAAC,aAAa;KACxB,CAAC,CAAC;IAEH,MAAM,IAAI,GAA0B;QAClC,IAAI,EAAE,WAAW,CAAC,WAAW;QAC7B,WAAW,EAAE,KAAK,CAAC,aAAa;QAChC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACpE,gBAAgB,EAAE,eAAe;KAClC,CAAC;IAEF,IAAI,KAAK,CAAC,gBAAgB,KAAK,sBAAsB,CAAC,SAAS,EAAE,CAAC;QAChE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO;QACL,GAAG,IAAI;QACP,wEAAwE;QACxE,GAAG,CAAC,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,KAAK,kBAAkB;YAClE,CAAC,CAAC;gBACE,IAAI,EAAE;oBACJ,EAAE,IAAI,EAAE,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,UAAU,CAAC,OAAO,EAAE;iBACnE;aACF;YACH,CAAC,CAAC,EAAE,CAAC;KACR,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { type DeviceConfig, type SessionExport } from "@ledgerhq/device-mockserver-client";
|
|
2
|
+
import { type ApduExchange } from "../../hooks/useConnectorMessages";
|
|
3
|
+
export type GenerateSessionExportOptions = {
|
|
4
|
+
/** Include the handshake APDUs (GetOsVersion / GetAppAndVersion) as mocks. */
|
|
5
|
+
includeHandshake?: boolean;
|
|
6
|
+
};
|
|
7
|
+
/**
|
|
8
|
+
* A device and the APDU exchanges captured from it, used to build one entry of
|
|
9
|
+
* the session export.
|
|
10
|
+
*/
|
|
11
|
+
export type DeviceCaptureGroup = {
|
|
12
|
+
device: Partial<DeviceConfig>;
|
|
13
|
+
exchanges: ApduExchange[];
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Derives a mock-server session export from captured APDU exchanges.
|
|
17
|
+
*
|
|
18
|
+
* Each unique request APDU becomes a mock whose `prefix` is the full request
|
|
19
|
+
* hex (so the server matches it exactly), and whose `responses` replay the
|
|
20
|
+
* captured responses in order.
|
|
21
|
+
*
|
|
22
|
+
* @param exchanges Captured APDU exchanges.
|
|
23
|
+
* @param device Device metadata to attach (name, device_type, firmware...).
|
|
24
|
+
* @param options Generation options.
|
|
25
|
+
*/
|
|
26
|
+
export declare function generateSessionExport(exchanges: ApduExchange[], device?: Partial<DeviceConfig>, options?: GenerateSessionExportOptions): SessionExport;
|
|
27
|
+
/**
|
|
28
|
+
* Derives a mock-server session export from several devices, each with its own
|
|
29
|
+
* captured exchanges. Used when more than one device was active during the
|
|
30
|
+
* recording so each gets a distinct entry instead of being merged together.
|
|
31
|
+
*
|
|
32
|
+
* @param groups One device + its exchanges per connected device.
|
|
33
|
+
* @param options Generation options.
|
|
34
|
+
*/
|
|
35
|
+
export declare function generateMultiDeviceSessionExport(groups: DeviceCaptureGroup[], options?: GenerateSessionExportOptions): SessionExport;
|
|
36
|
+
//# sourceMappingURL=generateSessionExport.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generateSessionExport.d.ts","sourceRoot":"","sources":["../../../../../src/screens/mock-capture/generateSessionExport.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,YAAY,EAEjB,KAAK,aAAa,EACnB,MAAM,oCAAoC,CAAC;AAE5C,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,kCAAkC,CAAC;AASrE,MAAM,MAAM,4BAA4B,GAAG;IACzC,8EAA8E;IAC9E,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B,CAAC;AAsCF;;;GAGG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;IAC9B,SAAS,EAAE,YAAY,EAAE,CAAC;CAC3B,CAAC;AAmBF;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,YAAY,EAAE,EACzB,MAAM,GAAE,OAAO,CAAC,YAAY,CAAM,EAClC,OAAO,GAAE,4BAAiC,GACzC,aAAa,CAMf;AAED;;;;;;;GAOG;AACH,wBAAgB,gCAAgC,CAC9C,MAAM,EAAE,kBAAkB,EAAE,EAC5B,OAAO,GAAE,4BAAiC,GACzC,aAAa,CAOf"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* APDU prefixes the mock server synthesizes from device metadata when no
|
|
3
|
+
* explicit mock matches (GetOsVersion, GetAppAndVersion). They are excluded by
|
|
4
|
+
* default so the generated session relies on the device config for handshakes.
|
|
5
|
+
*/
|
|
6
|
+
const HANDSHAKE_PREFIXES = ["e0010000", "b0010000"];
|
|
7
|
+
function isHandshake(prefix) {
|
|
8
|
+
return HANDSHAKE_PREFIXES.some((handshake) => prefix.startsWith(handshake));
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Collapses a list of responses to a single entry when they are all identical,
|
|
12
|
+
* keeping the ordered sequence otherwise (the mock server serves responses in
|
|
13
|
+
* order and loops once exhausted).
|
|
14
|
+
*/
|
|
15
|
+
function dedupeResponses(responses) {
|
|
16
|
+
const allIdentical = responses.every((r) => r === responses[0]);
|
|
17
|
+
return allIdentical ? responses.slice(0, 1) : responses;
|
|
18
|
+
}
|
|
19
|
+
function buildMocks(exchanges, includeHandshake) {
|
|
20
|
+
const responsesByPrefix = new Map();
|
|
21
|
+
for (const exchange of exchanges) {
|
|
22
|
+
const prefix = exchange.apdu.toLowerCase();
|
|
23
|
+
if (!includeHandshake && isHandshake(prefix)) {
|
|
24
|
+
continue;
|
|
25
|
+
}
|
|
26
|
+
const responses = responsesByPrefix.get(prefix) ?? [];
|
|
27
|
+
responses.push(exchange.response.toLowerCase());
|
|
28
|
+
responsesByPrefix.set(prefix, responses);
|
|
29
|
+
}
|
|
30
|
+
return [...responsesByPrefix.entries()].map(([prefix, responses]) => ({
|
|
31
|
+
prefix,
|
|
32
|
+
responses: dedupeResponses(responses),
|
|
33
|
+
}));
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Builds a single device config (metadata + derived mocks).
|
|
37
|
+
*/
|
|
38
|
+
function buildDeviceConfig(device, exchanges, includeHandshake) {
|
|
39
|
+
const mocks = buildMocks(exchanges, includeHandshake);
|
|
40
|
+
const { name, ...rest } = device;
|
|
41
|
+
return {
|
|
42
|
+
...(name !== undefined ? { name } : {}),
|
|
43
|
+
...rest,
|
|
44
|
+
mocks,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Derives a mock-server session export from captured APDU exchanges.
|
|
49
|
+
*
|
|
50
|
+
* Each unique request APDU becomes a mock whose `prefix` is the full request
|
|
51
|
+
* hex (so the server matches it exactly), and whose `responses` replay the
|
|
52
|
+
* captured responses in order.
|
|
53
|
+
*
|
|
54
|
+
* @param exchanges Captured APDU exchanges.
|
|
55
|
+
* @param device Device metadata to attach (name, device_type, firmware...).
|
|
56
|
+
* @param options Generation options.
|
|
57
|
+
*/
|
|
58
|
+
export function generateSessionExport(exchanges, device = {}, options = {}) {
|
|
59
|
+
return {
|
|
60
|
+
devices: [
|
|
61
|
+
buildDeviceConfig(device, exchanges, options.includeHandshake ?? false),
|
|
62
|
+
],
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Derives a mock-server session export from several devices, each with its own
|
|
67
|
+
* captured exchanges. Used when more than one device was active during the
|
|
68
|
+
* recording so each gets a distinct entry instead of being merged together.
|
|
69
|
+
*
|
|
70
|
+
* @param groups One device + its exchanges per connected device.
|
|
71
|
+
* @param options Generation options.
|
|
72
|
+
*/
|
|
73
|
+
export function generateMultiDeviceSessionExport(groups, options = {}) {
|
|
74
|
+
const includeHandshake = options.includeHandshake ?? false;
|
|
75
|
+
return {
|
|
76
|
+
devices: groups.map(({ device, exchanges }) => buildDeviceConfig(device, exchanges, includeHandshake)),
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=generateSessionExport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generateSessionExport.js","sourceRoot":"","sources":["../../../../../src/screens/mock-capture/generateSessionExport.ts"],"names":[],"mappings":"AAQA;;;;GAIG;AACH,MAAM,kBAAkB,GAAG,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;AAOpD,SAAS,WAAW,CAAC,MAAc;IACjC,OAAO,kBAAkB,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;AAC9E,CAAC;AAED;;;;GAIG;AACH,SAAS,eAAe,CAAC,SAAmB;IAC1C,MAAM,YAAY,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IAChE,OAAO,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC1D,CAAC;AAED,SAAS,UAAU,CACjB,SAAyB,EACzB,gBAAyB;IAEzB,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAoB,CAAC;IAEtD,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAC3C,IAAI,CAAC,gBAAgB,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;YAC7C,SAAS;QACX,CAAC;QACD,MAAM,SAAS,GAAG,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QACtD,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;QAChD,iBAAiB,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAC3C,CAAC;IAED,OAAO,CAAC,GAAG,iBAAiB,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC;QACpE,MAAM;QACN,SAAS,EAAE,eAAe,CAAC,SAAS,CAAC;KACtC,CAAC,CAAC,CAAC;AACN,CAAC;AAWD;;GAEG;AACH,SAAS,iBAAiB,CACxB,MAA6B,EAC7B,SAAyB,EACzB,gBAAyB;IAEzB,MAAM,KAAK,GAAG,UAAU,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;IACtD,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,CAAC;IACjC,OAAO;QACL,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvC,GAAG,IAAI;QACP,KAAK;KACN,CAAC;AACJ,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,qBAAqB,CACnC,SAAyB,EACzB,SAAgC,EAAE,EAClC,UAAwC,EAAE;IAE1C,OAAO;QACL,OAAO,EAAE;YACP,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,gBAAgB,IAAI,KAAK,CAAC;SACxE;KACF,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,gCAAgC,CAC9C,MAA4B,EAC5B,UAAwC,EAAE;IAE1C,MAAM,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,IAAI,KAAK,CAAC;IAC3D,OAAO;QACL,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE,CAC5C,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,gBAAgB,CAAC,CACvD;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generateSessionExport.test.d.ts","sourceRoot":"","sources":["../../../../../src/screens/mock-capture/generateSessionExport.test.ts"],"names":[],"mappings":""}
|