@ledgerhq/device-management-kit 0.0.0-develop-20250410001138 → 0.0.0-develop-20250412001122

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 (100) hide show
  1. package/lib/cjs/src/api/command/utils/CommandUtils.js +1 -1
  2. package/lib/cjs/src/api/command/utils/CommandUtils.js.map +3 -3
  3. package/lib/cjs/src/api/command/utils/CommandUtils.test.js +1 -1
  4. package/lib/cjs/src/api/command/utils/CommandUtils.test.js.map +3 -3
  5. package/lib/cjs/src/api/index.js +1 -1
  6. package/lib/cjs/src/api/index.js.map +3 -3
  7. package/lib/cjs/src/api/transport/model/DeviceApduSender.js +2 -0
  8. package/lib/cjs/src/api/transport/model/DeviceApduSender.js.map +7 -0
  9. package/lib/cjs/src/api/transport/model/DeviceConnection.js.map +1 -1
  10. package/lib/cjs/src/api/transport/model/DeviceConnectionStateMachine.js +2 -0
  11. package/lib/cjs/src/api/transport/model/DeviceConnectionStateMachine.js.map +7 -0
  12. package/lib/cjs/src/api/transport/model/DiscoveredDevice.js.map +1 -1
  13. package/lib/cjs/src/api/transport/model/Errors.js +1 -1
  14. package/lib/cjs/src/api/transport/model/Errors.js.map +3 -3
  15. package/lib/cjs/src/api/types.js.map +1 -1
  16. package/lib/cjs/src/internal/device-session/model/DeviceSession.js +1 -1
  17. package/lib/cjs/src/internal/device-session/model/DeviceSession.js.map +2 -2
  18. package/lib/cjs/src/internal/device-session/model/DeviceSessionStateHandler.test.js +1 -1
  19. package/lib/cjs/src/internal/device-session/model/DeviceSessionStateHandler.test.js.map +3 -3
  20. package/lib/cjs/src/internal/device-session/service/DefaultApduSenderService.js +1 -1
  21. package/lib/cjs/src/internal/device-session/service/DefaultApduSenderService.js.map +2 -2
  22. package/lib/cjs/src/internal/device-session/use-case/CloseSessionsUseCase.js +1 -1
  23. package/lib/cjs/src/internal/device-session/use-case/CloseSessionsUseCase.js.map +3 -3
  24. package/lib/cjs/src/internal/device-session/use-case/CloseSessionsUseCase.test.js +1 -1
  25. package/lib/cjs/src/internal/device-session/use-case/CloseSessionsUseCase.test.js.map +3 -3
  26. package/lib/cjs/src/internal/discovery/use-case/StartDiscoveringUseCase.js +1 -1
  27. package/lib/cjs/src/internal/discovery/use-case/StartDiscoveringUseCase.js.map +2 -2
  28. package/lib/cjs/src/internal/discovery/use-case/StartDiscoveringUseCase.test.js +1 -1
  29. package/lib/cjs/src/internal/discovery/use-case/StartDiscoveringUseCase.test.js.map +2 -2
  30. package/lib/cjs/src/internal/send/use-case/SendApduUseCase.js +1 -1
  31. package/lib/cjs/src/internal/send/use-case/SendApduUseCase.js.map +3 -3
  32. package/lib/cjs/src/internal/transport/service/DefaultTransportService.js +1 -1
  33. package/lib/cjs/src/internal/transport/service/DefaultTransportService.js.map +3 -3
  34. package/lib/cjs/src/internal/transport/service/TransportService.js +1 -1
  35. package/lib/cjs/src/internal/transport/service/TransportService.js.map +1 -1
  36. package/lib/cjs/src/internal/transport/service/__mocks__/DefaultTransportService.js +1 -1
  37. package/lib/cjs/src/internal/transport/service/__mocks__/DefaultTransportService.js.map +2 -2
  38. package/lib/esm/src/api/command/utils/CommandUtils.js +1 -1
  39. package/lib/esm/src/api/command/utils/CommandUtils.js.map +3 -3
  40. package/lib/esm/src/api/command/utils/CommandUtils.test.js +1 -1
  41. package/lib/esm/src/api/command/utils/CommandUtils.test.js.map +3 -3
  42. package/lib/esm/src/api/index.js +1 -1
  43. package/lib/esm/src/api/index.js.map +3 -3
  44. package/lib/esm/src/api/transport/model/DeviceApduSender.js +1 -0
  45. package/lib/esm/src/api/transport/model/DeviceApduSender.js.map +7 -0
  46. package/lib/esm/src/api/transport/model/DeviceConnectionStateMachine.js +2 -0
  47. package/lib/esm/src/api/transport/model/DeviceConnectionStateMachine.js.map +7 -0
  48. package/lib/esm/src/api/transport/model/Errors.js +1 -1
  49. package/lib/esm/src/api/transport/model/Errors.js.map +3 -3
  50. package/lib/esm/src/internal/device-session/model/DeviceSession.js +1 -1
  51. package/lib/esm/src/internal/device-session/model/DeviceSession.js.map +2 -2
  52. package/lib/esm/src/internal/device-session/model/DeviceSessionStateHandler.test.js +1 -1
  53. package/lib/esm/src/internal/device-session/model/DeviceSessionStateHandler.test.js.map +3 -3
  54. package/lib/esm/src/internal/device-session/service/DefaultApduSenderService.js +1 -1
  55. package/lib/esm/src/internal/device-session/service/DefaultApduSenderService.js.map +2 -2
  56. package/lib/esm/src/internal/device-session/use-case/CloseSessionsUseCase.js +1 -1
  57. package/lib/esm/src/internal/device-session/use-case/CloseSessionsUseCase.js.map +3 -3
  58. package/lib/esm/src/internal/device-session/use-case/CloseSessionsUseCase.test.js +1 -1
  59. package/lib/esm/src/internal/device-session/use-case/CloseSessionsUseCase.test.js.map +3 -3
  60. package/lib/esm/src/internal/discovery/use-case/StartDiscoveringUseCase.js +1 -1
  61. package/lib/esm/src/internal/discovery/use-case/StartDiscoveringUseCase.js.map +2 -2
  62. package/lib/esm/src/internal/discovery/use-case/StartDiscoveringUseCase.test.js +1 -1
  63. package/lib/esm/src/internal/discovery/use-case/StartDiscoveringUseCase.test.js.map +2 -2
  64. package/lib/esm/src/internal/send/use-case/SendApduUseCase.js +1 -1
  65. package/lib/esm/src/internal/send/use-case/SendApduUseCase.js.map +3 -3
  66. package/lib/esm/src/internal/transport/service/DefaultTransportService.js +1 -1
  67. package/lib/esm/src/internal/transport/service/DefaultTransportService.js.map +3 -3
  68. package/lib/esm/src/internal/transport/service/__mocks__/DefaultTransportService.js +1 -1
  69. package/lib/esm/src/internal/transport/service/__mocks__/DefaultTransportService.js.map +2 -2
  70. package/lib/types/src/api/command/utils/CommandUtils.d.ts +1 -0
  71. package/lib/types/src/api/command/utils/CommandUtils.d.ts.map +1 -1
  72. package/lib/types/src/api/index.d.ts +1 -0
  73. package/lib/types/src/api/index.d.ts.map +1 -1
  74. package/lib/types/src/api/transport/model/DeviceApduSender.d.ts +17 -0
  75. package/lib/types/src/api/transport/model/DeviceApduSender.d.ts.map +1 -0
  76. package/lib/types/src/api/transport/model/DeviceConnection.d.ts +1 -1
  77. package/lib/types/src/api/transport/model/DeviceConnection.d.ts.map +1 -1
  78. package/lib/types/src/api/transport/model/DeviceConnectionStateMachine.d.ts +62 -0
  79. package/lib/types/src/api/transport/model/DeviceConnectionStateMachine.d.ts.map +1 -0
  80. package/lib/types/src/api/transport/model/DiscoveredDevice.d.ts +1 -1
  81. package/lib/types/src/api/transport/model/DiscoveredDevice.d.ts.map +1 -1
  82. package/lib/types/src/api/transport/model/Errors.d.ts +20 -0
  83. package/lib/types/src/api/transport/model/Errors.d.ts.map +1 -1
  84. package/lib/types/src/api/types.d.ts +1 -0
  85. package/lib/types/src/api/types.d.ts.map +1 -1
  86. package/lib/types/src/internal/device-session/model/DeviceSession.d.ts +1 -0
  87. package/lib/types/src/internal/device-session/model/DeviceSession.d.ts.map +1 -1
  88. package/lib/types/src/internal/device-session/use-case/CloseSessionsUseCase.d.ts +3 -1
  89. package/lib/types/src/internal/device-session/use-case/CloseSessionsUseCase.d.ts.map +1 -1
  90. package/lib/types/src/internal/discovery/use-case/StartDiscoveringUseCase.d.ts.map +1 -1
  91. package/lib/types/src/internal/send/use-case/SendApduUseCase.d.ts +5 -1
  92. package/lib/types/src/internal/send/use-case/SendApduUseCase.d.ts.map +1 -1
  93. package/lib/types/src/internal/transport/service/DefaultTransportService.d.ts +2 -0
  94. package/lib/types/src/internal/transport/service/DefaultTransportService.d.ts.map +1 -1
  95. package/lib/types/src/internal/transport/service/TransportService.d.ts +3 -1
  96. package/lib/types/src/internal/transport/service/TransportService.d.ts.map +1 -1
  97. package/lib/types/src/internal/transport/service/__mocks__/DefaultTransportService.d.ts +1 -0
  98. package/lib/types/src/internal/transport/service/__mocks__/DefaultTransportService.d.ts.map +1 -1
  99. package/lib/types/tsconfig.prod.tsbuildinfo +1 -1
  100. package/package.json +3 -3
@@ -0,0 +1,2 @@
1
+ import{Left as r,Maybe as u,Nothing as m,Right as l}from"purify-ts";import{assign as d,createActor as D,emit as C,setup as v}from"xstate";import{CommandUtils as A}from"../../command/utils/CommandUtils";import{UnknownDeviceExchangeError as y}from"../../Error";import{AlreadySendingApduError as g,DeviceDisconnectedBeforeSendingApdu as R,DeviceDisconnectedWhileSendingError as p}from"./Errors";class x{deviceId;deviceAdpuSender;machineActor;timeoutDuration;timeout=null;startReconnectionTimeout(){this.timeout=setTimeout(()=>{this.machineActor.send({type:"ReconnectionTimedOut"})},this.timeoutDuration)}constructor(n){this.deviceId=n.deviceId,this.deviceAdpuSender=n.deviceApduSender,this.timeoutDuration=n.timeoutDuration,this.machineActor=D(T({sendApduFn:(o,t)=>this.sendApduToDeviceConnection(o,t),startReconnectionTimeout:()=>this.startReconnectionTimeout(),cancelReconnectionTimeout:()=>{this.timeout&&(clearTimeout(this.timeout),this.timeout=null)},onTerminated:n.onTerminated,closeConnection:()=>{this.deviceAdpuSender.closeConnection()}})),this.machineActor.start()}sendApduToDeviceConnection(n,o){this.deviceAdpuSender.sendApdu(n,o).then(t=>{t.caseOf({Left:i=>{this.machineActor.send({type:"ApduSendingError",error:i})},Right:i=>{this.machineActor.send({type:"ApduResponseReceived",apduResponse:i})}})}).catch(t=>{this.machineActor.send({type:"ApduSendingError",error:new y(t)})})}getDependencies(){return this.deviceAdpuSender.getDependencies()}setDependencies(n){this.deviceAdpuSender.setDependencies(n)}getDeviceId(){return this.deviceId}sendApdu(n,o,t){return new Promise(i=>{this.machineActor.send({type:"SendApduCalled",apdu:n,triggersDisconnection:!!o,abortTimeout:t,responseCallback:i})})}async setupConnection(){await this.deviceAdpuSender.setupConnection()}eventDeviceAttached(){this.machineActor.send({type:"DeviceAttached"})}eventDeviceDetached(){this.machineActor.send({type:"DeviceDetached"})}closeConnection(){this.machineActor.send({type:"CloseConnectionCalled"})}}function T({sendApduFn:a,startReconnectionTimeout:n,cancelReconnectionTimeout:o,onTerminated:t,closeConnection:i}){return v({types:{},actions:{startTimer:()=>{n()},cancelTimer:()=>{o()},reconnectionTimeoutEvent:C({type:"ReconnectionTimedOut"}),sendApdu:({context:e})=>{e.apduInProgress.map(({apdu:s,abortTimeout:c})=>{a(s,!1,c)})},sendApduResponse:({context:e},s)=>{e.apduInProgress.map(({responseCallback:c})=>c(s.response))},cleanupContext:d({apduInProgress:m}),signalTermination:()=>{t()},closeConnection:()=>{i()}},guards:{isApduThatTriggersDisconnection:({context:e},s)=>e.apduInProgress.caseOf({Just:({triggersDisconnection:c,apdu:h})=>(c||A.isApduThatTriggersDisconnection(h))&&A.isSuccessResponse(s.apduResponse),Nothing:()=>!1})}}).createMachine({id:"deviceConnection",initial:"Connected",context:{apduInProgress:m},states:{Connected:{on:{DeviceDetached:{target:"WaitingForReconnection"},SendApduCalled:{target:"SendingApdu",actions:d({apduInProgress:({event:e})=>u.of({apdu:e.apdu,triggersDisconnection:e.triggersDisconnection,abortTimeout:e.abortTimeout,responseCallback:e.responseCallback})})},CloseConnectionCalled:{target:"Terminated"}}},SendingApdu:{entry:"sendApdu",on:{ApduResponseReceived:[{guard:{type:"isApduThatTriggersDisconnection",params:({event:e})=>({apduResponse:e.apduResponse})},target:"WaitingForReconnection",actions:[{type:"sendApduResponse",params:({event:e})=>({response:l(e.apduResponse)})},{type:"cleanupContext"}]},{target:"Connected",actions:[{type:"sendApduResponse",params:({event:e})=>({response:l(e.apduResponse)})},{type:"cleanupContext"}]}],ApduSendingError:{target:"Connected",actions:[{type:"sendApduResponse",params:({event:e})=>({response:r(e.error)})},"cleanupContext"]},DeviceDetached:{target:"WaitingForReconnection",actions:[{type:"sendApduResponse",params:{response:r(new p)}},"cleanupContext"]},CloseConnectionCalled:{target:"Terminated",actions:[{type:"sendApduResponse",params:{response:r(new p)}},"cleanupContext"]},SendApduCalled:{actions:({event:e})=>{e.responseCallback(r(new g))}}}},WaitingForReconnection:{entry:"startTimer",on:{DeviceAttached:{target:"Connected",actions:"cancelTimer"},SendApduCalled:{target:"WaitingForReconnectionWithQueuedSendApdu",actions:d({apduInProgress:({event:e})=>u.of({apdu:e.apdu,triggersDisconnection:e.triggersDisconnection,abortTimeout:e.abortTimeout,responseCallback:e.responseCallback})})},ReconnectionTimedOut:{target:"Terminated"},CloseConnectionCalled:{target:"Terminated"}}},WaitingForReconnectionWithQueuedSendApdu:{on:{DeviceAttached:{target:"SendingApdu",actions:"cancelTimer"},ReconnectionTimedOut:{target:"Terminated",actions:[{type:"sendApduResponse",params:{response:r(new R)}},{type:"cleanupContext"}]},CloseConnectionCalled:{target:"Terminated",actions:[{type:"sendApduResponse",params:{response:r(new p)}},"cleanupContext"]},SendApduCalled:{actions:({event:e})=>{e.responseCallback(r(new g))}}}},Terminated:{entry:["signalTermination","closeConnection"],type:"final"}}})}export{x as DeviceConnectionStateMachine};
2
+ //# sourceMappingURL=DeviceConnectionStateMachine.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../src/api/transport/model/DeviceConnectionStateMachine.ts"],
4
+ "sourcesContent": ["// import { createBrowserInspector } from \"@statelyai/inspect\";\nimport { type Either, Left, Maybe, Nothing, Right } from \"purify-ts\";\nimport { type Actor, assign, createActor, emit, setup } from \"xstate\";\n\nimport { CommandUtils } from \"@api/command/utils/CommandUtils\";\nimport { type ApduResponse } from \"@api/device-session/ApduResponse\";\nimport { type DmkError, UnknownDeviceExchangeError } from \"@api/Error\";\nimport { type DeviceId } from \"@api/types\";\n\nimport { type DeviceApduSender } from \"./DeviceApduSender\";\nimport {\n AlreadySendingApduError,\n DeviceDisconnectedBeforeSendingApdu,\n DeviceDisconnectedWhileSendingError,\n} from \"./Errors\";\n\n// const { inspect } = createBrowserInspector();\n\ntype DeviceDetachedEvent = {\n type: \"DeviceDetached\";\n};\n\ntype DeviceAttachedEvent = {\n type: \"DeviceAttached\";\n};\n\ntype ApduResponseReceived = {\n type: \"ApduResponseReceived\";\n apduResponse: ApduResponse;\n};\n\ntype ApduSendingError = {\n type: \"ApduSendingError\";\n error: DmkError;\n};\n\ntype SendApduCalled = {\n type: \"SendApduCalled\";\n apdu: Uint8Array;\n triggersDisconnection: boolean;\n abortTimeout?: number;\n responseCallback: (response: Either<DmkError, ApduResponse>) => void;\n};\n\ntype ReconnectionTimedOut = {\n type: \"ReconnectionTimedOut\";\n};\n\ntype CloseConnectionCalled = {\n type: \"CloseConnectionCalled\";\n};\n\nexport type DeviceConnectionEvent =\n | DeviceDetachedEvent\n | DeviceAttachedEvent\n | ApduResponseReceived\n | ApduSendingError\n | SendApduCalled\n | CloseConnectionCalled\n | ReconnectionTimedOut;\n\nexport type DeviceConnectionStateMachineParams<Dependencies> = {\n deviceId: DeviceId;\n deviceApduSender: DeviceApduSender<Dependencies>;\n timeoutDuration: number;\n onTerminated: () => void;\n};\n\nexport class DeviceConnectionStateMachine<Dependencies> {\n private deviceId: DeviceId;\n private deviceAdpuSender: DeviceApduSender<Dependencies>;\n\n private machineActor: Actor<ReturnType<typeof makeStateMachine>>;\n\n private timeoutDuration: number;\n private timeout: ReturnType<typeof setTimeout> | null = null;\n\n startReconnectionTimeout() {\n this.timeout = setTimeout(() => {\n this.machineActor.send({ type: \"ReconnectionTimedOut\" });\n }, this.timeoutDuration);\n }\n\n constructor(params: DeviceConnectionStateMachineParams<Dependencies>) {\n this.deviceId = params.deviceId;\n this.deviceAdpuSender = params.deviceApduSender;\n this.timeoutDuration = params.timeoutDuration;\n this.machineActor = createActor(\n makeStateMachine({\n sendApduFn: (apdu, triggersDisconnection) =>\n this.sendApduToDeviceConnection(apdu, triggersDisconnection),\n startReconnectionTimeout: () => this.startReconnectionTimeout(),\n cancelReconnectionTimeout: () => {\n if (this.timeout) {\n clearTimeout(this.timeout);\n this.timeout = null;\n }\n },\n onTerminated: params.onTerminated,\n closeConnection: () => {\n this.deviceAdpuSender.closeConnection();\n },\n }),\n // {\n // // inspect,\n // },\n );\n this.machineActor.start();\n }\n\n private sendApduToDeviceConnection(\n apdu: Uint8Array,\n triggersDisconnection?: boolean,\n ) {\n this.deviceAdpuSender\n .sendApdu(apdu, triggersDisconnection)\n .then((response) => {\n response.caseOf({\n Left: (error) => {\n this.machineActor.send({ type: \"ApduSendingError\", error });\n },\n Right: (apduResponse) => {\n this.machineActor.send({\n type: \"ApduResponseReceived\",\n apduResponse,\n });\n },\n });\n })\n .catch((error) => {\n this.machineActor.send({\n type: \"ApduSendingError\",\n error: new UnknownDeviceExchangeError(error),\n });\n });\n }\n\n /**\n * Called by the transport\n */\n\n public getDependencies(): Dependencies {\n return this.deviceAdpuSender.getDependencies();\n }\n\n public setDependencies(dependencies: Dependencies) {\n this.deviceAdpuSender.setDependencies(dependencies);\n }\n\n public getDeviceId() {\n return this.deviceId;\n }\n\n public sendApdu(\n apdu: Uint8Array,\n triggersDisconnection?: boolean,\n abortTimeout?: number,\n ): Promise<Either<DmkError, ApduResponse>> {\n return new Promise((responseCallback) => {\n this.machineActor.send({\n type: \"SendApduCalled\",\n apdu,\n triggersDisconnection: !!triggersDisconnection,\n abortTimeout,\n responseCallback,\n });\n });\n }\n\n public async setupConnection() {\n await this.deviceAdpuSender.setupConnection();\n }\n\n // State Machine Events\n\n public eventDeviceAttached() {\n this.machineActor.send({ type: \"DeviceAttached\" });\n }\n\n public eventDeviceDetached() {\n this.machineActor.send({ type: \"DeviceDetached\" });\n }\n\n public closeConnection() {\n this.machineActor.send({ type: \"CloseConnectionCalled\" });\n }\n}\n\nfunction makeStateMachine({\n sendApduFn,\n startReconnectionTimeout,\n cancelReconnectionTimeout,\n onTerminated,\n closeConnection,\n}: {\n sendApduFn: (\n apdu: Uint8Array,\n triggersDisconnection: boolean,\n abortTimeout?: number,\n ) => void;\n startReconnectionTimeout: () => void;\n cancelReconnectionTimeout: () => void;\n onTerminated: () => void;\n closeConnection: () => void;\n}) {\n return setup({\n types: {} as {\n context: {\n apduInProgress: Maybe<{\n apdu: Uint8Array;\n triggersDisconnection: boolean;\n abortTimeout?: number;\n responseCallback: (response: Either<DmkError, ApduResponse>) => void;\n }>;\n };\n events: DeviceConnectionEvent;\n },\n actions: {\n // event transitions\n startTimer: () => {\n startReconnectionTimeout();\n },\n cancelTimer: () => {\n cancelReconnectionTimeout();\n },\n reconnectionTimeoutEvent: emit({ type: \"ReconnectionTimedOut\" }),\n sendApdu: ({ context }) => {\n context.apduInProgress.map(({ apdu, abortTimeout }) => {\n sendApduFn(apdu, false, abortTimeout);\n });\n },\n sendApduResponse: (\n { context },\n params: { response: Either<DmkError, ApduResponse> },\n ) => {\n context.apduInProgress.map(({ responseCallback }) =>\n responseCallback(params.response),\n );\n },\n cleanupContext: assign({ apduInProgress: Nothing }),\n signalTermination: () => {\n onTerminated();\n },\n closeConnection: () => {\n closeConnection(); // ASK: how do we handle errors ?\n },\n },\n guards: {\n isApduThatTriggersDisconnection: (\n { context },\n params: { apduResponse: ApduResponse },\n ) => {\n return context.apduInProgress.caseOf({\n Just: ({ triggersDisconnection, apdu }) => {\n const res =\n (triggersDisconnection ||\n CommandUtils.isApduThatTriggersDisconnection(apdu)) &&\n CommandUtils.isSuccessResponse(params.apduResponse);\n return res;\n },\n Nothing: () => false,\n });\n },\n },\n }).createMachine({\n /** @xstate-layout N4IgpgJg5mDOIC5QTANwJYGMwGED2AdgWJgC7qEB0+RJpkAxACJpZgukCGmAFpANoAGALqJQABzyx05QmJAAPRAA4A7AGZKywQEYAnAFYATMoAsBg6fUA2ADQgAnolUnKBjUdXXVpnUb0aAL6B9igY2DTEZBQE1IRR9BAMAMpgBBAAguIQAK44nAA2BQIi8pLSsgTySgjW6oKU6uo61kbWyh06Vsr2TgjqAZR6HUaWXcrqBmrBoawR8XQxcbRkjDgFUrgL0YT5RSWiSCDlMjHVKnrWjaO6ev6qlnp6vYim1qaN9YLqGuPKOjpVDMQGE2JFFlRUul0AQoFlcgx4TkAEpwSQEWBgVHYdCoA5lKSnORHGpNVSUPwGXQDQSmNTDF4IZTWPRDJotUw+HwAnTA0HzFaVShQiAwuHZHKIiWo2DozHYsC4gQ6Q4SQmVc79TxDIzqG6eJq+VSM94NPQ6CYuUzmQGCax8uZbQVLEVipFS3Ku2EAUQATr68L6hKrjuqziTEJNNHrTG1dIIDE8jLTGVTlJQboI2i56QZeSEQY7wTtYl7xQiWOF2GAuLx8UcThqIwh-OmdBZPF0qQCBoydIJlAZKK0jP4bHntBaHVXi0Ky+71ptZzE9sUIMGCRVw6Aau2dJQ6WZlMM-D9+89HIh++mbndVHpdNYLAnp2DtnO0qLYe6RUjV-W1S3Ykd0QABac1KFpbx3kHCxumNS9ak5SDTHNax0NUDRfFMV8BQSJYAHVOFOWEADFA2xd8YmYR0MlIWs+HXUoGzDYDFEQQx90mVozABJ9BAvPo6iuFpRgtQRdDUWNcKdfCqCIkioHI31KOdQgUk-P9CjXDcWKAqpmx0dR-gpCTaXNUxvh7RkvCHWlaWM9RfC6dCZOXeTiPIMiKJIKj1NUuSCAAFXQABbSAAHkclIXTAKJAyQIQLpBHJAEXB8AS1HvdRGT0a0D2ZZpBxjSc3L82IFK8pSfMwcqGEXTF3IIf8mJDRtt3YpLLPJZMWkmTtzJyxD+1UBofifVQOm8YyWjKtSKs8sVlICiECAImQeAARRyMAdogX8JRoqs6IYgDQ30zUjJ8CkWQmYZbOsFLGWzUyzE5bssx8ObAsoSqlpq8r1tILadr2g6ERWksQvCiAopi5i4qbRKjH7Bo4N1dsvFjOxEIeIwUPQ9o9AGSYvG+1bfsW7yVN8+agZB3bIHByUGtk1aWti874s1FGJOHYy6gTLo3lMVN7wPBNVAtbRRg0IEC35NmS0pxTltpwL6e2xn9s0w7mY5hGuaRzrAWZIYBJpc0pd1E18tNMZLOMAwnOCAsCDwFB4CORWms3bnm1AozWSgrHYMsYyEL6FGKXcDleMMO5rXJ5XZ0gP3jZqB4evaLwXEeqwnJNKYDypWlzHePwcIVotyuFT83QldOOpqWNU30A8rEmrMjPcAJk6FP7qch432rY3dxnN1onlaZ9idy5NILuCxl+UEwrH7wiqeqmnarpjatbB3Xcibser3eckfmd3xOkrnpce0DMjHMeoAgLjeqCCsBfVCmFOESE+EqdSfnmNwLJjBPBSs0QwuV3CQWPN3AwT4LTtldoEIAA */\n id: \"deviceConnection\",\n initial: \"Connected\",\n context: {\n apduInProgress: Nothing,\n },\n states: {\n Connected: {\n on: {\n DeviceDetached: {\n target: \"WaitingForReconnection\",\n },\n SendApduCalled: {\n target: \"SendingApdu\",\n actions: assign({\n apduInProgress: ({ event }) => {\n return Maybe.of({\n apdu: event.apdu,\n triggersDisconnection: event.triggersDisconnection,\n abortTimeout: event.abortTimeout,\n responseCallback: event.responseCallback,\n });\n },\n }),\n },\n CloseConnectionCalled: {\n target: \"Terminated\",\n },\n },\n },\n SendingApdu: {\n entry: \"sendApdu\",\n on: {\n ApduResponseReceived: [\n {\n guard: {\n type: \"isApduThatTriggersDisconnection\",\n params: ({ event }) => ({ apduResponse: event.apduResponse }),\n },\n target: \"WaitingForReconnection\",\n actions: [\n {\n type: \"sendApduResponse\",\n // https://stately.ai/docs/actions#dynamic-action-parameters\n params: ({ event }) => {\n return {\n response: Right(event.apduResponse),\n };\n },\n },\n { type: \"cleanupContext\" },\n ],\n },\n {\n target: \"Connected\",\n actions: [\n {\n type: \"sendApduResponse\",\n // https://stately.ai/docs/actions#dynamic-action-parameters\n params: ({ event }) => {\n return {\n response: Right(event.apduResponse),\n };\n },\n },\n { type: \"cleanupContext\" },\n ],\n },\n ],\n ApduSendingError: {\n target: \"Connected\",\n actions: [\n {\n type: \"sendApduResponse\",\n // https://stately.ai/docs/actions#dynamic-action-parameters\n params: ({ event }) => {\n return {\n response: Left(event.error),\n };\n },\n },\n \"cleanupContext\",\n ],\n },\n DeviceDetached: {\n target: \"WaitingForReconnection\",\n actions: [\n {\n type: \"sendApduResponse\",\n params: {\n response: Left(new DeviceDisconnectedWhileSendingError()),\n },\n },\n \"cleanupContext\",\n ],\n },\n CloseConnectionCalled: {\n target: \"Terminated\",\n actions: [\n {\n type: \"sendApduResponse\",\n params: {\n response: Left(new DeviceDisconnectedWhileSendingError()),\n },\n },\n \"cleanupContext\",\n ],\n },\n SendApduCalled: {\n actions: ({ event }) => {\n event.responseCallback(Left(new AlreadySendingApduError()));\n },\n },\n },\n },\n WaitingForReconnection: {\n entry: \"startTimer\",\n on: {\n DeviceAttached: {\n target: \"Connected\",\n actions: \"cancelTimer\",\n },\n SendApduCalled: {\n target: \"WaitingForReconnectionWithQueuedSendApdu\",\n actions: assign({\n apduInProgress: ({ event }) => {\n return Maybe.of({\n apdu: event.apdu,\n triggersDisconnection: event.triggersDisconnection,\n abortTimeout: event.abortTimeout,\n responseCallback: event.responseCallback,\n });\n },\n }),\n },\n ReconnectionTimedOut: {\n target: \"Terminated\",\n },\n CloseConnectionCalled: {\n target: \"Terminated\",\n },\n },\n },\n WaitingForReconnectionWithQueuedSendApdu: {\n on: {\n DeviceAttached: {\n target: \"SendingApdu\",\n actions: \"cancelTimer\",\n },\n ReconnectionTimedOut: {\n target: \"Terminated\",\n actions: [\n {\n type: \"sendApduResponse\",\n params: {\n response: Left(new DeviceDisconnectedBeforeSendingApdu()),\n },\n },\n {\n type: \"cleanupContext\",\n },\n ],\n },\n CloseConnectionCalled: {\n target: \"Terminated\",\n actions: [\n {\n type: \"sendApduResponse\",\n params: {\n response: Left(new DeviceDisconnectedWhileSendingError()),\n },\n },\n \"cleanupContext\",\n ],\n },\n SendApduCalled: {\n actions: ({ event }) => {\n event.responseCallback(Left(new AlreadySendingApduError()));\n },\n },\n },\n },\n // TODO: ADD INACTIVE STATE\n Terminated: {\n entry: [\"signalTermination\", \"closeConnection\"],\n type: \"final\",\n },\n },\n });\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["Left", "Maybe", "Nothing", "Right", "assign", "createActor", "emit", "setup", "CommandUtils", "UnknownDeviceExchangeError", "AlreadySendingApduError", "DeviceDisconnectedBeforeSendingApdu", "DeviceDisconnectedWhileSendingError", "DeviceConnectionStateMachine", "params", "makeStateMachine", "apdu", "triggersDisconnection", "response", "error", "apduResponse", "dependencies", "abortTimeout", "responseCallback", "sendApduFn", "startReconnectionTimeout", "cancelReconnectionTimeout", "onTerminated", "closeConnection", "context", "event"]
7
+ }
@@ -1,2 +1,2 @@
1
- class n{_tag="GeneralDmkError";originalError;constructor(o){o instanceof Error?this.originalError=o:o!==void 0&&(this.originalError=new Error(String(o)))}}class t extends n{constructor(r){super(r);this.err=r}_tag="DeviceAlreadyDiscoveredError"}class s extends n{constructor(r){super(r);this.err=r}_tag="DeviceNotRecognizedError"}class d extends n{constructor(r){super(r);this.err=r}_tag="NoAccessibleDeviceError"}class c extends n{constructor(r){super(r);this.err=r}_tag="ConnectionOpeningError"}class a extends n{constructor(r){super(r);this.err=r}_tag="UnknownDeviceError"}class i extends n{constructor(r){super(r);this.err=r}_tag="TransportNotSupportedError"}class l extends n{constructor(r){super(r);this.err=r}_tag="SendApduConcurrencyError"}class p extends n{constructor(r){super(r);this.err=r}_tag="DisconnectError"}class u extends n{constructor(r){super(r);this.err=r}_tag="ReconnectionFailedError"}class E extends n{constructor(r){super(r);this.err=r}_tag="DeviceNotInitializedError"}class y extends n{constructor(r){super(r);this.err=r}_tag="NoTransportsProvidedError"}class v extends n{constructor(r){super(r);this.err=r}_tag="TransportAlreadyExistsError"}class x extends n{constructor(r){super(r);this.err=r}_tag="NoTransportProvidedError"}export{t as DeviceAlreadyConnectedError,E as DeviceNotInitializedError,s as DeviceNotRecognizedError,p as DisconnectError,n as GeneralDmkError,d as NoAccessibleDeviceError,x as NoTransportProvidedError,y as NoTransportsProvidedError,c as OpeningConnectionError,u as ReconnectionFailedError,l as SendApduConcurrencyError,v as TransportAlreadyExistsError,i as TransportNotSupportedError,a as UnknownDeviceError};
1
+ class n{_tag="GeneralDmkError";originalError;constructor(e){e instanceof Error?this.originalError=e:e!==void 0&&(this.originalError=new Error(String(e)))}}class t extends n{constructor(r){super(r);this.err=r}_tag="DeviceAlreadyDiscoveredError"}class d extends n{constructor(r){super(r);this.err=r}_tag="DeviceNotRecognizedError"}class s extends n{constructor(r){super(r);this.err=r}_tag="NoAccessibleDeviceError"}class c extends n{constructor(r){super(r);this.err=r}_tag="ConnectionOpeningError"}class a extends n{constructor(r){super(r);this.err=r}_tag="UnknownDeviceError"}class i extends n{constructor(r){super(r);this.err=r}_tag="TransportNotSupportedError"}class l extends n{constructor(r){super(r);this.err=r}_tag="SendApduConcurrencyError"}class u extends n{constructor(r){super(r);this.err=r}_tag="SendApduTimeoutError"}class p extends n{constructor(r){super(r);this.err=r}_tag="DisconnectError"}class E extends n{constructor(r){super(r);this.err=r}_tag="ReconnectionFailedError"}class y extends n{constructor(r){super(r);this.err=r}_tag="DeviceNotInitializedError"}class v extends n{constructor(r){super(r);this.err=r}_tag="NoTransportsProvidedError"}class x extends n{constructor(r){super(r);this.err=r}_tag="TransportAlreadyExistsError"}class g extends n{constructor(r){super(r);this.err=r}_tag="DeviceDisconnectedWhileSendingError"}class D extends n{constructor(r){super(r);this.err=r}_tag="AlreadySendingApduError"}class k extends n{constructor(r){super(r);this.err=r}_tag="DeviceDisconnectedBeforeSendingApdu"}class w extends n{constructor(r){super(r);this.err=r}_tag="NoTransportProvidedError"}export{D as AlreadySendingApduError,t as DeviceAlreadyConnectedError,k as DeviceDisconnectedBeforeSendingApdu,g as DeviceDisconnectedWhileSendingError,y as DeviceNotInitializedError,d as DeviceNotRecognizedError,p as DisconnectError,n as GeneralDmkError,s as NoAccessibleDeviceError,w as NoTransportProvidedError,v as NoTransportsProvidedError,c as OpeningConnectionError,E as ReconnectionFailedError,l as SendApduConcurrencyError,u as SendApduTimeoutError,x as TransportAlreadyExistsError,i as TransportNotSupportedError,a as UnknownDeviceError};
2
2
  //# sourceMappingURL=Errors.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../src/api/transport/model/Errors.ts"],
4
- "sourcesContent": ["import { type DmkError } from \"@api/Error\";\n\nexport type ConnectError =\n | UnknownDeviceError\n | OpeningConnectionError\n | DeviceAlreadyConnectedError;\n\nexport class GeneralDmkError implements DmkError {\n _tag = \"GeneralDmkError\";\n originalError?: unknown;\n constructor(err?: unknown) {\n if (err instanceof Error) {\n this.originalError = err;\n } else if (err !== undefined) {\n this.originalError = new Error(String(err));\n }\n }\n}\n\nexport class DeviceAlreadyConnectedError extends GeneralDmkError {\n override readonly _tag = \"DeviceAlreadyDiscoveredError\";\n constructor(readonly err?: unknown) {\n super(err);\n }\n}\n\nexport class DeviceNotRecognizedError extends GeneralDmkError {\n override readonly _tag = \"DeviceNotRecognizedError\";\n constructor(readonly err?: unknown) {\n super(err);\n }\n}\n\nexport class NoAccessibleDeviceError extends GeneralDmkError {\n override readonly _tag = \"NoAccessibleDeviceError\";\n constructor(readonly err?: unknown) {\n super(err);\n }\n}\n\nexport class OpeningConnectionError extends GeneralDmkError {\n override readonly _tag = \"ConnectionOpeningError\";\n constructor(readonly err?: unknown) {\n super(err);\n }\n}\n\nexport class UnknownDeviceError extends GeneralDmkError {\n override readonly _tag = \"UnknownDeviceError\";\n constructor(readonly err?: unknown) {\n super(err);\n }\n}\n\nexport class TransportNotSupportedError extends GeneralDmkError {\n override readonly _tag = \"TransportNotSupportedError\";\n constructor(readonly err?: unknown) {\n super(err);\n }\n}\nexport class SendApduConcurrencyError extends GeneralDmkError {\n override readonly _tag = \"SendApduConcurrencyError\";\n constructor(readonly err?: unknown) {\n super(err);\n }\n}\n\nexport class DisconnectError extends GeneralDmkError {\n override readonly _tag = \"DisconnectError\";\n constructor(readonly err?: unknown) {\n super(err);\n }\n}\n\nexport class ReconnectionFailedError extends GeneralDmkError {\n override readonly _tag = \"ReconnectionFailedError\";\n constructor(readonly err?: unknown) {\n super(err);\n }\n}\n\nexport class DeviceNotInitializedError extends GeneralDmkError {\n override readonly _tag = \"DeviceNotInitializedError\";\n constructor(readonly err?: unknown) {\n super(err);\n }\n}\n\nexport class NoTransportsProvidedError extends GeneralDmkError {\n override readonly _tag = \"NoTransportsProvidedError\";\n constructor(readonly err?: unknown) {\n super(err);\n }\n}\n\nexport class TransportAlreadyExistsError extends GeneralDmkError {\n override readonly _tag = \"TransportAlreadyExistsError\";\n constructor(readonly err?: unknown) {\n super(err);\n }\n}\n\nexport class NoTransportProvidedError extends GeneralDmkError {\n override readonly _tag = \"NoTransportProvidedError\";\n constructor(readonly err?: unknown) {\n super(err);\n }\n}\n"],
5
- "mappings": "AAOO,MAAMA,CAAoC,CAC/C,KAAO,kBACP,cACA,YAAYC,EAAe,CACrBA,aAAe,MACjB,KAAK,cAAgBA,EACZA,IAAQ,SACjB,KAAK,cAAgB,IAAI,MAAM,OAAOA,CAAG,CAAC,EAE9C,CACF,CAEO,MAAMC,UAAoCF,CAAgB,CAE/D,YAAqBC,EAAe,CAClC,MAAMA,CAAG,EADU,SAAAA,CAErB,CAHkB,KAAO,8BAI3B,CAEO,MAAME,UAAiCH,CAAgB,CAE5D,YAAqBC,EAAe,CAClC,MAAMA,CAAG,EADU,SAAAA,CAErB,CAHkB,KAAO,0BAI3B,CAEO,MAAMG,UAAgCJ,CAAgB,CAE3D,YAAqBC,EAAe,CAClC,MAAMA,CAAG,EADU,SAAAA,CAErB,CAHkB,KAAO,yBAI3B,CAEO,MAAMI,UAA+BL,CAAgB,CAE1D,YAAqBC,EAAe,CAClC,MAAMA,CAAG,EADU,SAAAA,CAErB,CAHkB,KAAO,wBAI3B,CAEO,MAAMK,UAA2BN,CAAgB,CAEtD,YAAqBC,EAAe,CAClC,MAAMA,CAAG,EADU,SAAAA,CAErB,CAHkB,KAAO,oBAI3B,CAEO,MAAMM,UAAmCP,CAAgB,CAE9D,YAAqBC,EAAe,CAClC,MAAMA,CAAG,EADU,SAAAA,CAErB,CAHkB,KAAO,4BAI3B,CACO,MAAMO,UAAiCR,CAAgB,CAE5D,YAAqBC,EAAe,CAClC,MAAMA,CAAG,EADU,SAAAA,CAErB,CAHkB,KAAO,0BAI3B,CAEO,MAAMQ,UAAwBT,CAAgB,CAEnD,YAAqBC,EAAe,CAClC,MAAMA,CAAG,EADU,SAAAA,CAErB,CAHkB,KAAO,iBAI3B,CAEO,MAAMS,UAAgCV,CAAgB,CAE3D,YAAqBC,EAAe,CAClC,MAAMA,CAAG,EADU,SAAAA,CAErB,CAHkB,KAAO,yBAI3B,CAEO,MAAMU,UAAkCX,CAAgB,CAE7D,YAAqBC,EAAe,CAClC,MAAMA,CAAG,EADU,SAAAA,CAErB,CAHkB,KAAO,2BAI3B,CAEO,MAAMW,UAAkCZ,CAAgB,CAE7D,YAAqBC,EAAe,CAClC,MAAMA,CAAG,EADU,SAAAA,CAErB,CAHkB,KAAO,2BAI3B,CAEO,MAAMY,UAAoCb,CAAgB,CAE/D,YAAqBC,EAAe,CAClC,MAAMA,CAAG,EADU,SAAAA,CAErB,CAHkB,KAAO,6BAI3B,CAEO,MAAMa,UAAiCd,CAAgB,CAE5D,YAAqBC,EAAe,CAClC,MAAMA,CAAG,EADU,SAAAA,CAErB,CAHkB,KAAO,0BAI3B",
6
- "names": ["GeneralDmkError", "err", "DeviceAlreadyConnectedError", "DeviceNotRecognizedError", "NoAccessibleDeviceError", "OpeningConnectionError", "UnknownDeviceError", "TransportNotSupportedError", "SendApduConcurrencyError", "DisconnectError", "ReconnectionFailedError", "DeviceNotInitializedError", "NoTransportsProvidedError", "TransportAlreadyExistsError", "NoTransportProvidedError"]
4
+ "sourcesContent": ["import { type DmkError } from \"@api/Error\";\n\nexport type ConnectError =\n | UnknownDeviceError\n | OpeningConnectionError\n | DeviceAlreadyConnectedError;\n\nexport class GeneralDmkError implements DmkError {\n _tag = \"GeneralDmkError\";\n originalError?: unknown;\n constructor(err?: unknown) {\n if (err instanceof Error) {\n this.originalError = err;\n } else if (err !== undefined) {\n this.originalError = new Error(String(err));\n }\n }\n}\n\nexport class DeviceAlreadyConnectedError extends GeneralDmkError {\n override readonly _tag = \"DeviceAlreadyDiscoveredError\";\n constructor(readonly err?: unknown) {\n super(err);\n }\n}\n\nexport class DeviceNotRecognizedError extends GeneralDmkError {\n override readonly _tag = \"DeviceNotRecognizedError\";\n constructor(readonly err?: unknown) {\n super(err);\n }\n}\n\nexport class NoAccessibleDeviceError extends GeneralDmkError {\n override readonly _tag = \"NoAccessibleDeviceError\";\n constructor(readonly err?: unknown) {\n super(err);\n }\n}\n\nexport class OpeningConnectionError extends GeneralDmkError {\n override readonly _tag = \"ConnectionOpeningError\";\n constructor(readonly err?: unknown) {\n super(err);\n }\n}\n\nexport class UnknownDeviceError extends GeneralDmkError {\n override readonly _tag = \"UnknownDeviceError\";\n constructor(readonly err?: unknown) {\n super(err);\n }\n}\n\nexport class TransportNotSupportedError extends GeneralDmkError {\n override readonly _tag = \"TransportNotSupportedError\";\n constructor(readonly err?: unknown) {\n super(err);\n }\n}\nexport class SendApduConcurrencyError extends GeneralDmkError {\n override readonly _tag = \"SendApduConcurrencyError\";\n constructor(readonly err?: unknown) {\n super(err);\n }\n}\n\nexport class SendApduTimeoutError extends GeneralDmkError {\n override readonly _tag = \"SendApduTimeoutError\";\n constructor(readonly err?: unknown) {\n super(err);\n }\n}\nexport class DisconnectError extends GeneralDmkError {\n override readonly _tag = \"DisconnectError\";\n constructor(readonly err?: unknown) {\n super(err);\n }\n}\n\nexport class ReconnectionFailedError extends GeneralDmkError {\n override readonly _tag = \"ReconnectionFailedError\";\n constructor(readonly err?: unknown) {\n super(err);\n }\n}\n\nexport class DeviceNotInitializedError extends GeneralDmkError {\n override readonly _tag = \"DeviceNotInitializedError\";\n constructor(readonly err?: unknown) {\n super(err);\n }\n}\n\nexport class NoTransportsProvidedError extends GeneralDmkError {\n override readonly _tag = \"NoTransportsProvidedError\";\n constructor(readonly err?: unknown) {\n super(err);\n }\n}\n\nexport class TransportAlreadyExistsError extends GeneralDmkError {\n override readonly _tag = \"TransportAlreadyExistsError\";\n constructor(readonly err?: unknown) {\n super(err);\n }\n}\n\nexport class DeviceDisconnectedWhileSendingError extends GeneralDmkError {\n override readonly _tag = \"DeviceDisconnectedWhileSendingError\";\n constructor(readonly err?: unknown) {\n super(err);\n }\n}\n\nexport class AlreadySendingApduError extends GeneralDmkError {\n override readonly _tag = \"AlreadySendingApduError\";\n constructor(readonly err?: unknown) {\n super(err);\n }\n}\n\nexport class DeviceDisconnectedBeforeSendingApdu extends GeneralDmkError {\n override readonly _tag = \"DeviceDisconnectedBeforeSendingApdu\";\n constructor(readonly err?: unknown) {\n super(err);\n }\n}\n\nexport class NoTransportProvidedError extends GeneralDmkError {\n override readonly _tag = \"NoTransportProvidedError\";\n constructor(readonly err?: unknown) {\n super(err);\n }\n}\n"],
5
+ "mappings": "AAOO,MAAMA,CAAoC,CAC/C,KAAO,kBACP,cACA,YAAYC,EAAe,CACrBA,aAAe,MACjB,KAAK,cAAgBA,EACZA,IAAQ,SACjB,KAAK,cAAgB,IAAI,MAAM,OAAOA,CAAG,CAAC,EAE9C,CACF,CAEO,MAAMC,UAAoCF,CAAgB,CAE/D,YAAqBC,EAAe,CAClC,MAAMA,CAAG,EADU,SAAAA,CAErB,CAHkB,KAAO,8BAI3B,CAEO,MAAME,UAAiCH,CAAgB,CAE5D,YAAqBC,EAAe,CAClC,MAAMA,CAAG,EADU,SAAAA,CAErB,CAHkB,KAAO,0BAI3B,CAEO,MAAMG,UAAgCJ,CAAgB,CAE3D,YAAqBC,EAAe,CAClC,MAAMA,CAAG,EADU,SAAAA,CAErB,CAHkB,KAAO,yBAI3B,CAEO,MAAMI,UAA+BL,CAAgB,CAE1D,YAAqBC,EAAe,CAClC,MAAMA,CAAG,EADU,SAAAA,CAErB,CAHkB,KAAO,wBAI3B,CAEO,MAAMK,UAA2BN,CAAgB,CAEtD,YAAqBC,EAAe,CAClC,MAAMA,CAAG,EADU,SAAAA,CAErB,CAHkB,KAAO,oBAI3B,CAEO,MAAMM,UAAmCP,CAAgB,CAE9D,YAAqBC,EAAe,CAClC,MAAMA,CAAG,EADU,SAAAA,CAErB,CAHkB,KAAO,4BAI3B,CACO,MAAMO,UAAiCR,CAAgB,CAE5D,YAAqBC,EAAe,CAClC,MAAMA,CAAG,EADU,SAAAA,CAErB,CAHkB,KAAO,0BAI3B,CAEO,MAAMQ,UAA6BT,CAAgB,CAExD,YAAqBC,EAAe,CAClC,MAAMA,CAAG,EADU,SAAAA,CAErB,CAHkB,KAAO,sBAI3B,CACO,MAAMS,UAAwBV,CAAgB,CAEnD,YAAqBC,EAAe,CAClC,MAAMA,CAAG,EADU,SAAAA,CAErB,CAHkB,KAAO,iBAI3B,CAEO,MAAMU,UAAgCX,CAAgB,CAE3D,YAAqBC,EAAe,CAClC,MAAMA,CAAG,EADU,SAAAA,CAErB,CAHkB,KAAO,yBAI3B,CAEO,MAAMW,UAAkCZ,CAAgB,CAE7D,YAAqBC,EAAe,CAClC,MAAMA,CAAG,EADU,SAAAA,CAErB,CAHkB,KAAO,2BAI3B,CAEO,MAAMY,UAAkCb,CAAgB,CAE7D,YAAqBC,EAAe,CAClC,MAAMA,CAAG,EADU,SAAAA,CAErB,CAHkB,KAAO,2BAI3B,CAEO,MAAMa,UAAoCd,CAAgB,CAE/D,YAAqBC,EAAe,CAClC,MAAMA,CAAG,EADU,SAAAA,CAErB,CAHkB,KAAO,6BAI3B,CAEO,MAAMc,UAA4Cf,CAAgB,CAEvE,YAAqBC,EAAe,CAClC,MAAMA,CAAG,EADU,SAAAA,CAErB,CAHkB,KAAO,qCAI3B,CAEO,MAAMe,UAAgChB,CAAgB,CAE3D,YAAqBC,EAAe,CAClC,MAAMA,CAAG,EADU,SAAAA,CAErB,CAHkB,KAAO,yBAI3B,CAEO,MAAMgB,UAA4CjB,CAAgB,CAEvE,YAAqBC,EAAe,CAClC,MAAMA,CAAG,EADU,SAAAA,CAErB,CAHkB,KAAO,qCAI3B,CAEO,MAAMiB,UAAiClB,CAAgB,CAE5D,YAAqBC,EAAe,CAClC,MAAMA,CAAG,EADU,SAAAA,CAErB,CAHkB,KAAO,0BAI3B",
6
+ "names": ["GeneralDmkError", "err", "DeviceAlreadyConnectedError", "DeviceNotRecognizedError", "NoAccessibleDeviceError", "OpeningConnectionError", "UnknownDeviceError", "TransportNotSupportedError", "SendApduConcurrencyError", "SendApduTimeoutError", "DisconnectError", "ReconnectionFailedError", "DeviceNotInitializedError", "NoTransportsProvidedError", "TransportAlreadyExistsError", "DeviceDisconnectedWhileSendingError", "AlreadySendingApduError", "DeviceDisconnectedBeforeSendingApdu", "NoTransportProvidedError"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import{BehaviorSubject as p}from"rxjs";import{v4 as v}from"uuid";import{CommandUtils as d}from"../../../api/command/utils/CommandUtils";import{DeviceStatus as c}from"../../../api/device/DeviceStatus";import{DeviceSessionStateType as h}from"../../../api/device-session/DeviceSessionState";import{DEVICE_SESSION_REFRESHER_DEFAULT_OPTIONS as S}from"../../device-session/data/DeviceSessionRefresherConst";import{MutexService as m}from"../../device-session/service/MutexService";import{RefresherService as u}from"../../device-session/service/RefresherService";import{DevicePinger as D}from"./DevicePinger";import{DeviceSessionEventDispatcher as l,SessionEvents as r}from"./DeviceSessionEventDispatcher";import{DeviceSessionRefresher as _}from"./DeviceSessionRefresher";import{DeviceSessionStateHandler as f}from"./DeviceSessionStateHandler";class x{_id;_connectedDevice;_deviceState;_managerApiService;_secureChannelService;_logger;_refresherOptions;_pinger;_deviceSessionRefresher;_refresherService;_commandMutex=new m;_sessionEventDispatcher=new l;constructor({connectedDevice:e,id:s=v()},t,i,n,a){this._id=s,this._connectedDevice=e,this._logger=t("device-session"),this._managerApiService=i,this._secureChannelService=n,this._refresherOptions={...S,...a},this._deviceState=new p({sessionStateType:h.Connected,deviceStatus:c.CONNECTED,deviceModelId:this._connectedDevice.deviceModel.id}),this._pinger=new D(t,e,this._sessionEventDispatcher,o=>this.sendCommand(o)),this._deviceSessionRefresher=new _(t,this._refresherOptions,this._sessionEventDispatcher,this._connectedDevice),new f(t,this._sessionEventDispatcher,this._connectedDevice,this._deviceState,o=>this.setDeviceSessionState(o)),this._refresherService=new u(t,{start:()=>this._deviceSessionRefresher.restartRefresher(),stop:()=>this._deviceSessionRefresher.stopRefresher()})}async initialiseSession(){try{await this._pinger.ping()}catch(e){throw this._logger.error("Error while initialising session",{data:{error:e}}),e}finally{this._refresherOptions.isRefresherDisabled||this._deviceSessionRefresher.startRefresher()}}get id(){return this._id}get connectedDevice(){return this._connectedDevice}get state(){return this._deviceState.asObservable()}setDeviceSessionState(e){this._deviceState.next(e)}async sendApdu(e,s={isPolling:!1,triggersDisconnection:!1}){const t=await this._commandMutex.lock();try{this._sessionEventDispatcher.dispatch({eventName:r.DEVICE_STATE_UPDATE_BUSY});const i=await this._connectedDevice.sendApdu(e,s.triggersDisconnection);return i.ifRight(n=>{d.isLockedDeviceResponse(n)?this._sessionEventDispatcher.dispatch({eventName:r.DEVICE_STATE_UPDATE_LOCKED}):this._sessionEventDispatcher.dispatch({eventName:r.DEVICE_STATE_UPDATE_CONNECTED})}).ifLeft(()=>{this._sessionEventDispatcher.dispatch({eventName:r.DEVICE_STATE_UPDATE_CONNECTED})}),i}finally{t()}}async sendCommand(e){const s=e.getApdu();return(await this.sendApdu(s.getRawApdu(),{isPolling:!1,triggersDisconnection:e.triggersDisconnection??!1})).caseOf({Left:i=>{throw i},Right:i=>e.parseResponse(i,this._connectedDevice.deviceModel.id)})}executeDeviceAction(e){const{observable:s,cancel:t}=e._execute({sendApdu:async i=>this.sendApdu(i),sendCommand:async i=>this.sendCommand(i),getDeviceSessionState:()=>this._deviceState.getValue(),getDeviceSessionStateObservable:()=>this.state,setDeviceSessionState:i=>(this.setDeviceSessionState(i),this._deviceState.getValue()),disableRefresher:i=>this._refresherService.disableRefresher(i),getManagerApiService:()=>this._managerApiService,getSecureChannelService:()=>this._secureChannelService});return{observable:s,cancel:t}}close(){this._updateDeviceStatus(c.NOT_CONNECTED),this._deviceState.complete(),this._deviceSessionRefresher.stopRefresher()}disableRefresher(e){return this._refresherService.disableRefresher(e)}_updateDeviceStatus(e){const s=this._deviceState.getValue();this._deviceState.next({...s,deviceStatus:e})}}export{x as DeviceSession};
1
+ import{BehaviorSubject as p}from"rxjs";import{v4 as v}from"uuid";import{CommandUtils as d}from"../../../api/command/utils/CommandUtils";import{DeviceStatus as c}from"../../../api/device/DeviceStatus";import{DeviceSessionStateType as h}from"../../../api/device-session/DeviceSessionState";import{DEVICE_SESSION_REFRESHER_DEFAULT_OPTIONS as S}from"../../device-session/data/DeviceSessionRefresherConst";import{MutexService as u}from"../../device-session/service/MutexService";import{RefresherService as m}from"../../device-session/service/RefresherService";import{DevicePinger as D}from"./DevicePinger";import{DeviceSessionEventDispatcher as l,SessionEvents as r}from"./DeviceSessionEventDispatcher";import{DeviceSessionRefresher as _}from"./DeviceSessionRefresher";import{DeviceSessionStateHandler as f}from"./DeviceSessionStateHandler";class x{_id;_connectedDevice;_deviceState;_managerApiService;_secureChannelService;_logger;_refresherOptions;_pinger;_deviceSessionRefresher;_refresherService;_commandMutex=new u;_sessionEventDispatcher=new l;constructor({connectedDevice:e,id:t=v()},s,i,n,a){this._id=t,this._connectedDevice=e,this._logger=s("device-session"),this._managerApiService=i,this._secureChannelService=n,this._refresherOptions={...S,...a},this._deviceState=new p({sessionStateType:h.Connected,deviceStatus:c.CONNECTED,deviceModelId:this._connectedDevice.deviceModel.id}),this._pinger=new D(s,e,this._sessionEventDispatcher,o=>this.sendCommand(o)),this._deviceSessionRefresher=new _(s,this._refresherOptions,this._sessionEventDispatcher,this._connectedDevice),new f(s,this._sessionEventDispatcher,this._connectedDevice,this._deviceState,o=>this.setDeviceSessionState(o)),this._refresherService=new m(s,{start:()=>this._deviceSessionRefresher.restartRefresher(),stop:()=>this._deviceSessionRefresher.stopRefresher()})}async initialiseSession(){try{await this._pinger.ping()}catch(e){throw this._logger.error("Error while initialising session",{data:{error:e}}),e}finally{this._refresherOptions.isRefresherDisabled||this._deviceSessionRefresher.startRefresher()}}get id(){return this._id}get connectedDevice(){return this._connectedDevice}get state(){return this._deviceState.asObservable()}setDeviceSessionState(e){this._deviceState.next(e)}async sendApdu(e,t={isPolling:!1,triggersDisconnection:!1,abortTimeout:void 0}){const s=await this._commandMutex.lock();try{this._sessionEventDispatcher.dispatch({eventName:r.DEVICE_STATE_UPDATE_BUSY});const i=await this._connectedDevice.sendApdu(e,t.triggersDisconnection,t.abortTimeout);return i.ifRight(n=>{d.isLockedDeviceResponse(n)?this._sessionEventDispatcher.dispatch({eventName:r.DEVICE_STATE_UPDATE_LOCKED}):this._sessionEventDispatcher.dispatch({eventName:r.DEVICE_STATE_UPDATE_CONNECTED})}).ifLeft(()=>{this._sessionEventDispatcher.dispatch({eventName:r.DEVICE_STATE_UPDATE_CONNECTED})}),i}finally{s()}}async sendCommand(e){const t=e.getApdu();return(await this.sendApdu(t.getRawApdu(),{isPolling:!1,triggersDisconnection:e.triggersDisconnection??!1})).caseOf({Left:i=>{throw i},Right:i=>e.parseResponse(i,this._connectedDevice.deviceModel.id)})}executeDeviceAction(e){const{observable:t,cancel:s}=e._execute({sendApdu:async i=>this.sendApdu(i),sendCommand:async i=>this.sendCommand(i),getDeviceSessionState:()=>this._deviceState.getValue(),getDeviceSessionStateObservable:()=>this.state,setDeviceSessionState:i=>(this.setDeviceSessionState(i),this._deviceState.getValue()),disableRefresher:i=>this._refresherService.disableRefresher(i),getManagerApiService:()=>this._managerApiService,getSecureChannelService:()=>this._secureChannelService});return{observable:t,cancel:s}}close(){this._updateDeviceStatus(c.NOT_CONNECTED),this._deviceState.complete(),this._deviceSessionRefresher.stopRefresher()}disableRefresher(e){return this._refresherService.disableRefresher(e)}_updateDeviceStatus(e){const t=this._deviceState.getValue();this._deviceState.next({...t,deviceStatus:e})}}export{x as DeviceSession};
2
2
  //# sourceMappingURL=DeviceSession.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../src/internal/device-session/model/DeviceSession.ts"],
4
- "sourcesContent": ["import { type Either } from \"purify-ts\";\nimport { BehaviorSubject, type Observable } from \"rxjs\";\nimport { v4 as uuidv4 } from \"uuid\";\n\nimport { type Command } from \"@api/command/Command\";\nimport { type CommandResult } from \"@api/command/model/CommandResult\";\nimport { CommandUtils } from \"@api/command/utils/CommandUtils\";\nimport { DeviceStatus } from \"@api/device/DeviceStatus\";\nimport {\n type DeviceAction,\n type DeviceActionIntermediateValue,\n type ExecuteDeviceActionReturnType,\n} from \"@api/device-action/DeviceAction\";\nimport { type ApduResponse } from \"@api/device-session/ApduResponse\";\nimport {\n type DeviceSessionState,\n DeviceSessionStateType,\n} from \"@api/device-session/DeviceSessionState\";\nimport { type DeviceSessionId } from \"@api/device-session/types\";\nimport { type DmkError } from \"@api/Error\";\nimport { type LoggerPublisherService } from \"@api/logger-publisher/service/LoggerPublisherService\";\nimport { type TransportConnectedDevice } from \"@api/transport/model/TransportConnectedDevice\";\nimport { DEVICE_SESSION_REFRESHER_DEFAULT_OPTIONS } from \"@internal/device-session/data/DeviceSessionRefresherConst\";\nimport { MutexService } from \"@internal/device-session/service/MutexService\";\nimport { RefresherService } from \"@internal/device-session/service/RefresherService\";\nimport { type ManagerApiService } from \"@internal/manager-api/service/ManagerApiService\";\nimport { type SecureChannelService } from \"@internal/secure-channel/service/SecureChannelService\";\n\nimport { DevicePinger } from \"./DevicePinger\";\nimport {\n DeviceSessionEventDispatcher,\n SessionEvents,\n} from \"./DeviceSessionEventDispatcher\";\nimport { DeviceSessionRefresher } from \"./DeviceSessionRefresher\";\nimport { DeviceSessionStateHandler } from \"./DeviceSessionStateHandler\";\n\nexport type SessionConstructorArgs = {\n connectedDevice: TransportConnectedDevice;\n id?: DeviceSessionId;\n};\n\nexport type DeviceSessionRefresherOptions = {\n isRefresherDisabled: boolean;\n pollingInterval?: number;\n};\n\ntype SendApduOptions = {\n isPolling?: boolean;\n triggersDisconnection?: boolean;\n};\n\n/**\n * Represents a session with a device.\n */\nexport class DeviceSession {\n private readonly _id: DeviceSessionId;\n private readonly _connectedDevice: TransportConnectedDevice;\n private readonly _deviceState: BehaviorSubject<DeviceSessionState>;\n private readonly _managerApiService: ManagerApiService;\n private readonly _secureChannelService: SecureChannelService;\n private readonly _logger: LoggerPublisherService;\n private readonly _refresherOptions: DeviceSessionRefresherOptions;\n private _pinger: DevicePinger;\n private _deviceSessionRefresher: DeviceSessionRefresher;\n private readonly _refresherService: RefresherService;\n private _commandMutex = new MutexService();\n private _sessionEventDispatcher = new DeviceSessionEventDispatcher();\n\n constructor(\n { connectedDevice, id = uuidv4() }: SessionConstructorArgs,\n loggerModuleFactory: (tag: string) => LoggerPublisherService,\n managerApiService: ManagerApiService,\n secureChannelService: SecureChannelService,\n deviceSessionRefresherOptions: DeviceSessionRefresherOptions | undefined,\n ) {\n this._id = id;\n this._connectedDevice = connectedDevice;\n this._logger = loggerModuleFactory(\"device-session\");\n this._managerApiService = managerApiService;\n this._secureChannelService = secureChannelService;\n this._refresherOptions = {\n ...DEVICE_SESSION_REFRESHER_DEFAULT_OPTIONS,\n ...deviceSessionRefresherOptions,\n };\n this._deviceState = new BehaviorSubject<DeviceSessionState>({\n sessionStateType: DeviceSessionStateType.Connected,\n deviceStatus: DeviceStatus.CONNECTED,\n deviceModelId: this._connectedDevice.deviceModel.id,\n });\n\n this._pinger = new DevicePinger(\n loggerModuleFactory,\n connectedDevice,\n this._sessionEventDispatcher,\n (command) => this.sendCommand(command),\n );\n this._deviceSessionRefresher = new DeviceSessionRefresher(\n loggerModuleFactory,\n this._refresherOptions,\n this._sessionEventDispatcher,\n this._connectedDevice,\n );\n new DeviceSessionStateHandler(\n loggerModuleFactory,\n this._sessionEventDispatcher,\n this._connectedDevice,\n this._deviceState,\n (state) => this.setDeviceSessionState(state),\n );\n\n this._refresherService = new RefresherService(loggerModuleFactory, {\n start: () => this._deviceSessionRefresher.restartRefresher(),\n stop: () => this._deviceSessionRefresher.stopRefresher(),\n });\n }\n\n public async initialiseSession(): Promise<void> {\n try {\n await this._pinger.ping();\n } catch (error) {\n this._logger.error(\"Error while initialising session\", {\n data: { error },\n });\n throw error;\n } finally {\n if (!this._refresherOptions.isRefresherDisabled) {\n this._deviceSessionRefresher.startRefresher();\n }\n }\n }\n\n public get id(): DeviceSessionId {\n return this._id;\n }\n\n public get connectedDevice(): TransportConnectedDevice {\n return this._connectedDevice;\n }\n\n public get state(): Observable<DeviceSessionState> {\n return this._deviceState.asObservable();\n }\n\n public setDeviceSessionState(state: DeviceSessionState): void {\n this._deviceState.next(state);\n }\n\n public async sendApdu(\n rawApdu: Uint8Array,\n options: SendApduOptions = {\n isPolling: false,\n triggersDisconnection: false,\n },\n ): Promise<Either<DmkError, ApduResponse>> {\n const release = await this._commandMutex.lock();\n\n try {\n this._sessionEventDispatcher.dispatch({\n eventName: SessionEvents.DEVICE_STATE_UPDATE_BUSY,\n });\n const result = await this._connectedDevice.sendApdu(\n rawApdu,\n options.triggersDisconnection,\n );\n\n result\n .ifRight((response: ApduResponse) => {\n if (CommandUtils.isLockedDeviceResponse(response)) {\n this._sessionEventDispatcher.dispatch({\n eventName: SessionEvents.DEVICE_STATE_UPDATE_LOCKED,\n });\n } else {\n this._sessionEventDispatcher.dispatch({\n eventName: SessionEvents.DEVICE_STATE_UPDATE_CONNECTED,\n });\n }\n })\n .ifLeft(() => {\n this._sessionEventDispatcher.dispatch({\n eventName: SessionEvents.DEVICE_STATE_UPDATE_CONNECTED,\n });\n });\n return result;\n } finally {\n release();\n }\n }\n\n public async sendCommand<Response, Args, ErrorStatusCodes>(\n command: Command<Response, Args, ErrorStatusCodes>,\n ): Promise<CommandResult<Response, ErrorStatusCodes>> {\n const apdu = command.getApdu();\n\n const response = await this.sendApdu(apdu.getRawApdu(), {\n isPolling: false,\n triggersDisconnection: command.triggersDisconnection ?? false,\n });\n\n return response.caseOf({\n Left: (err) => {\n throw err;\n },\n Right: (r) =>\n command.parseResponse(r, this._connectedDevice.deviceModel.id),\n });\n }\n\n public executeDeviceAction<\n Output,\n Input,\n E extends DmkError,\n IntermediateValue extends DeviceActionIntermediateValue,\n >(\n deviceAction: DeviceAction<Output, Input, E, IntermediateValue>,\n ): ExecuteDeviceActionReturnType<Output, E, IntermediateValue> {\n const { observable, cancel } = deviceAction._execute({\n sendApdu: async (apdu: Uint8Array) => this.sendApdu(apdu),\n sendCommand: async <Response, ErrorStatusCodes, Args>(\n command: Command<Response, ErrorStatusCodes, Args>,\n ) => this.sendCommand(command),\n getDeviceSessionState: () => this._deviceState.getValue(),\n getDeviceSessionStateObservable: () => this.state,\n setDeviceSessionState: (state: DeviceSessionState) => {\n this.setDeviceSessionState(state);\n return this._deviceState.getValue();\n },\n disableRefresher: (blockerId: string) =>\n this._refresherService.disableRefresher(blockerId),\n getManagerApiService: () => this._managerApiService,\n getSecureChannelService: () => this._secureChannelService,\n });\n return { observable, cancel };\n }\n\n public close(): void {\n this._updateDeviceStatus(DeviceStatus.NOT_CONNECTED);\n this._deviceState.complete();\n this._deviceSessionRefresher.stopRefresher();\n }\n\n public disableRefresher(id: string): () => void {\n return this._refresherService.disableRefresher(id);\n }\n\n private _updateDeviceStatus(deviceStatus: DeviceStatus): void {\n const state = this._deviceState.getValue();\n this._deviceState.next({ ...state, deviceStatus });\n }\n}\n"],
5
- "mappings": "AACA,OAAS,mBAAAA,MAAwC,OACjD,OAAS,MAAMC,MAAc,OAI7B,OAAS,gBAAAC,MAAoB,kCAC7B,OAAS,gBAAAC,MAAoB,2BAO7B,OAEE,0BAAAC,MACK,yCAKP,OAAS,4CAAAC,MAAgD,4DACzD,OAAS,gBAAAC,MAAoB,gDAC7B,OAAS,oBAAAC,MAAwB,oDAIjC,OAAS,gBAAAC,MAAoB,iBAC7B,OACE,gCAAAC,EACA,iBAAAC,MACK,iCACP,OAAS,0BAAAC,MAA8B,2BACvC,OAAS,6BAAAC,MAAiC,8BAoBnC,MAAMC,CAAc,CACR,IACA,iBACA,aACA,mBACA,sBACA,QACA,kBACT,QACA,wBACS,kBACT,cAAgB,IAAIP,EACpB,wBAA0B,IAAIG,EAEtC,YACE,CAAE,gBAAAK,EAAiB,GAAAC,EAAKd,EAAO,CAAE,EACjCe,EACAC,EACAC,EACAC,EACA,CACA,KAAK,IAAMJ,EACX,KAAK,iBAAmBD,EACxB,KAAK,QAAUE,EAAoB,gBAAgB,EACnD,KAAK,mBAAqBC,EAC1B,KAAK,sBAAwBC,EAC7B,KAAK,kBAAoB,CACvB,GAAGb,EACH,GAAGc,CACL,EACA,KAAK,aAAe,IAAInB,EAAoC,CAC1D,iBAAkBI,EAAuB,UACzC,aAAcD,EAAa,UAC3B,cAAe,KAAK,iBAAiB,YAAY,EACnD,CAAC,EAED,KAAK,QAAU,IAAIK,EACjBQ,EACAF,EACA,KAAK,wBACJM,GAAY,KAAK,YAAYA,CAAO,CACvC,EACA,KAAK,wBAA0B,IAAIT,EACjCK,EACA,KAAK,kBACL,KAAK,wBACL,KAAK,gBACP,EACA,IAAIJ,EACFI,EACA,KAAK,wBACL,KAAK,iBACL,KAAK,aACJK,GAAU,KAAK,sBAAsBA,CAAK,CAC7C,EAEA,KAAK,kBAAoB,IAAId,EAAiBS,EAAqB,CACjE,MAAO,IAAM,KAAK,wBAAwB,iBAAiB,EAC3D,KAAM,IAAM,KAAK,wBAAwB,cAAc,CACzD,CAAC,CACH,CAEA,MAAa,mBAAmC,CAC9C,GAAI,CACF,MAAM,KAAK,QAAQ,KAAK,CAC1B,OAASM,EAAO,CACd,WAAK,QAAQ,MAAM,mCAAoC,CACrD,KAAM,CAAE,MAAAA,CAAM,CAChB,CAAC,EACKA,CACR,QAAE,CACK,KAAK,kBAAkB,qBAC1B,KAAK,wBAAwB,eAAe,CAEhD,CACF,CAEA,IAAW,IAAsB,CAC/B,OAAO,KAAK,GACd,CAEA,IAAW,iBAA4C,CACrD,OAAO,KAAK,gBACd,CAEA,IAAW,OAAwC,CACjD,OAAO,KAAK,aAAa,aAAa,CACxC,CAEO,sBAAsBD,EAAiC,CAC5D,KAAK,aAAa,KAAKA,CAAK,CAC9B,CAEA,MAAa,SACXE,EACAC,EAA2B,CACzB,UAAW,GACX,sBAAuB,EACzB,EACyC,CACzC,MAAMC,EAAU,MAAM,KAAK,cAAc,KAAK,EAE9C,GAAI,CACF,KAAK,wBAAwB,SAAS,CACpC,UAAWf,EAAc,wBAC3B,CAAC,EACD,MAAMgB,EAAS,MAAM,KAAK,iBAAiB,SACzCH,EACAC,EAAQ,qBACV,EAEA,OAAAE,EACG,QAASC,GAA2B,CAC/BzB,EAAa,uBAAuByB,CAAQ,EAC9C,KAAK,wBAAwB,SAAS,CACpC,UAAWjB,EAAc,0BAC3B,CAAC,EAED,KAAK,wBAAwB,SAAS,CACpC,UAAWA,EAAc,6BAC3B,CAAC,CAEL,CAAC,EACA,OAAO,IAAM,CACZ,KAAK,wBAAwB,SAAS,CACpC,UAAWA,EAAc,6BAC3B,CAAC,CACH,CAAC,EACIgB,CACT,QAAE,CACAD,EAAQ,CACV,CACF,CAEA,MAAa,YACXL,EACoD,CACpD,MAAMQ,EAAOR,EAAQ,QAAQ,EAO7B,OALiB,MAAM,KAAK,SAASQ,EAAK,WAAW,EAAG,CACtD,UAAW,GACX,sBAAuBR,EAAQ,uBAAyB,EAC1D,CAAC,GAEe,OAAO,CACrB,KAAOS,GAAQ,CACb,MAAMA,CACR,EACA,MAAQC,GACNV,EAAQ,cAAcU,EAAG,KAAK,iBAAiB,YAAY,EAAE,CACjE,CAAC,CACH,CAEO,oBAMLC,EAC6D,CAC7D,KAAM,CAAE,WAAAC,EAAY,OAAAC,CAAO,EAAIF,EAAa,SAAS,CACnD,SAAU,MAAOH,GAAqB,KAAK,SAASA,CAAI,EACxD,YAAa,MACXR,GACG,KAAK,YAAYA,CAAO,EAC7B,sBAAuB,IAAM,KAAK,aAAa,SAAS,EACxD,gCAAiC,IAAM,KAAK,MAC5C,sBAAwBC,IACtB,KAAK,sBAAsBA,CAAK,EACzB,KAAK,aAAa,SAAS,GAEpC,iBAAmBa,GACjB,KAAK,kBAAkB,iBAAiBA,CAAS,EACnD,qBAAsB,IAAM,KAAK,mBACjC,wBAAyB,IAAM,KAAK,qBACtC,CAAC,EACD,MAAO,CAAE,WAAAF,EAAY,OAAAC,CAAO,CAC9B,CAEO,OAAc,CACnB,KAAK,oBAAoB9B,EAAa,aAAa,EACnD,KAAK,aAAa,SAAS,EAC3B,KAAK,wBAAwB,cAAc,CAC7C,CAEO,iBAAiBY,EAAwB,CAC9C,OAAO,KAAK,kBAAkB,iBAAiBA,CAAE,CACnD,CAEQ,oBAAoBoB,EAAkC,CAC5D,MAAMd,EAAQ,KAAK,aAAa,SAAS,EACzC,KAAK,aAAa,KAAK,CAAE,GAAGA,EAAO,aAAAc,CAAa,CAAC,CACnD,CACF",
4
+ "sourcesContent": ["import { type Either } from \"purify-ts\";\nimport { BehaviorSubject, type Observable } from \"rxjs\";\nimport { v4 as uuidv4 } from \"uuid\";\n\nimport { type Command } from \"@api/command/Command\";\nimport { type CommandResult } from \"@api/command/model/CommandResult\";\nimport { CommandUtils } from \"@api/command/utils/CommandUtils\";\nimport { DeviceStatus } from \"@api/device/DeviceStatus\";\nimport {\n type DeviceAction,\n type DeviceActionIntermediateValue,\n type ExecuteDeviceActionReturnType,\n} from \"@api/device-action/DeviceAction\";\nimport { type ApduResponse } from \"@api/device-session/ApduResponse\";\nimport {\n type DeviceSessionState,\n DeviceSessionStateType,\n} from \"@api/device-session/DeviceSessionState\";\nimport { type DeviceSessionId } from \"@api/device-session/types\";\nimport { type DmkError } from \"@api/Error\";\nimport { type LoggerPublisherService } from \"@api/logger-publisher/service/LoggerPublisherService\";\nimport { type TransportConnectedDevice } from \"@api/transport/model/TransportConnectedDevice\";\nimport { DEVICE_SESSION_REFRESHER_DEFAULT_OPTIONS } from \"@internal/device-session/data/DeviceSessionRefresherConst\";\nimport { MutexService } from \"@internal/device-session/service/MutexService\";\nimport { RefresherService } from \"@internal/device-session/service/RefresherService\";\nimport { type ManagerApiService } from \"@internal/manager-api/service/ManagerApiService\";\nimport { type SecureChannelService } from \"@internal/secure-channel/service/SecureChannelService\";\n\nimport { DevicePinger } from \"./DevicePinger\";\nimport {\n DeviceSessionEventDispatcher,\n SessionEvents,\n} from \"./DeviceSessionEventDispatcher\";\nimport { DeviceSessionRefresher } from \"./DeviceSessionRefresher\";\nimport { DeviceSessionStateHandler } from \"./DeviceSessionStateHandler\";\n\nexport type SessionConstructorArgs = {\n connectedDevice: TransportConnectedDevice;\n id?: DeviceSessionId;\n};\n\nexport type DeviceSessionRefresherOptions = {\n isRefresherDisabled: boolean;\n pollingInterval?: number;\n};\n\ntype SendApduOptions = {\n isPolling?: boolean;\n triggersDisconnection?: boolean;\n abortTimeout?: number;\n};\n\n/**\n * Represents a session with a device.\n */\nexport class DeviceSession {\n private readonly _id: DeviceSessionId;\n private readonly _connectedDevice: TransportConnectedDevice;\n private readonly _deviceState: BehaviorSubject<DeviceSessionState>;\n private readonly _managerApiService: ManagerApiService;\n private readonly _secureChannelService: SecureChannelService;\n private readonly _logger: LoggerPublisherService;\n private readonly _refresherOptions: DeviceSessionRefresherOptions;\n private _pinger: DevicePinger;\n private _deviceSessionRefresher: DeviceSessionRefresher;\n private readonly _refresherService: RefresherService;\n private _commandMutex = new MutexService();\n private _sessionEventDispatcher = new DeviceSessionEventDispatcher();\n\n constructor(\n { connectedDevice, id = uuidv4() }: SessionConstructorArgs,\n loggerModuleFactory: (tag: string) => LoggerPublisherService,\n managerApiService: ManagerApiService,\n secureChannelService: SecureChannelService,\n deviceSessionRefresherOptions: DeviceSessionRefresherOptions | undefined,\n ) {\n this._id = id;\n this._connectedDevice = connectedDevice;\n this._logger = loggerModuleFactory(\"device-session\");\n this._managerApiService = managerApiService;\n this._secureChannelService = secureChannelService;\n this._refresherOptions = {\n ...DEVICE_SESSION_REFRESHER_DEFAULT_OPTIONS,\n ...deviceSessionRefresherOptions,\n };\n this._deviceState = new BehaviorSubject<DeviceSessionState>({\n sessionStateType: DeviceSessionStateType.Connected,\n deviceStatus: DeviceStatus.CONNECTED,\n deviceModelId: this._connectedDevice.deviceModel.id,\n });\n\n this._pinger = new DevicePinger(\n loggerModuleFactory,\n connectedDevice,\n this._sessionEventDispatcher,\n (command) => this.sendCommand(command),\n );\n this._deviceSessionRefresher = new DeviceSessionRefresher(\n loggerModuleFactory,\n this._refresherOptions,\n this._sessionEventDispatcher,\n this._connectedDevice,\n );\n new DeviceSessionStateHandler(\n loggerModuleFactory,\n this._sessionEventDispatcher,\n this._connectedDevice,\n this._deviceState,\n (state) => this.setDeviceSessionState(state),\n );\n\n this._refresherService = new RefresherService(loggerModuleFactory, {\n start: () => this._deviceSessionRefresher.restartRefresher(),\n stop: () => this._deviceSessionRefresher.stopRefresher(),\n });\n }\n\n public async initialiseSession(): Promise<void> {\n try {\n await this._pinger.ping();\n } catch (error) {\n this._logger.error(\"Error while initialising session\", {\n data: { error },\n });\n throw error;\n } finally {\n if (!this._refresherOptions.isRefresherDisabled) {\n this._deviceSessionRefresher.startRefresher();\n }\n }\n }\n\n public get id(): DeviceSessionId {\n return this._id;\n }\n\n public get connectedDevice(): TransportConnectedDevice {\n return this._connectedDevice;\n }\n\n public get state(): Observable<DeviceSessionState> {\n return this._deviceState.asObservable();\n }\n\n public setDeviceSessionState(state: DeviceSessionState): void {\n this._deviceState.next(state);\n }\n\n public async sendApdu(\n rawApdu: Uint8Array,\n options: SendApduOptions = {\n isPolling: false,\n triggersDisconnection: false,\n abortTimeout: undefined,\n },\n ): Promise<Either<DmkError, ApduResponse>> {\n const release = await this._commandMutex.lock();\n\n try {\n this._sessionEventDispatcher.dispatch({\n eventName: SessionEvents.DEVICE_STATE_UPDATE_BUSY,\n });\n const result = await this._connectedDevice.sendApdu(\n rawApdu,\n options.triggersDisconnection,\n options.abortTimeout,\n );\n\n result\n .ifRight((response: ApduResponse) => {\n if (CommandUtils.isLockedDeviceResponse(response)) {\n this._sessionEventDispatcher.dispatch({\n eventName: SessionEvents.DEVICE_STATE_UPDATE_LOCKED,\n });\n } else {\n this._sessionEventDispatcher.dispatch({\n eventName: SessionEvents.DEVICE_STATE_UPDATE_CONNECTED,\n });\n }\n })\n .ifLeft(() => {\n this._sessionEventDispatcher.dispatch({\n eventName: SessionEvents.DEVICE_STATE_UPDATE_CONNECTED,\n });\n });\n return result;\n } finally {\n release();\n }\n }\n\n public async sendCommand<Response, Args, ErrorStatusCodes>(\n command: Command<Response, Args, ErrorStatusCodes>,\n ): Promise<CommandResult<Response, ErrorStatusCodes>> {\n const apdu = command.getApdu();\n\n const response = await this.sendApdu(apdu.getRawApdu(), {\n isPolling: false,\n triggersDisconnection: command.triggersDisconnection ?? false,\n });\n\n return response.caseOf({\n Left: (err) => {\n throw err;\n },\n Right: (r) =>\n command.parseResponse(r, this._connectedDevice.deviceModel.id),\n });\n }\n\n public executeDeviceAction<\n Output,\n Input,\n E extends DmkError,\n IntermediateValue extends DeviceActionIntermediateValue,\n >(\n deviceAction: DeviceAction<Output, Input, E, IntermediateValue>,\n ): ExecuteDeviceActionReturnType<Output, E, IntermediateValue> {\n const { observable, cancel } = deviceAction._execute({\n sendApdu: async (apdu: Uint8Array) => this.sendApdu(apdu),\n sendCommand: async <Response, ErrorStatusCodes, Args>(\n command: Command<Response, ErrorStatusCodes, Args>,\n ) => this.sendCommand(command),\n getDeviceSessionState: () => this._deviceState.getValue(),\n getDeviceSessionStateObservable: () => this.state,\n setDeviceSessionState: (state: DeviceSessionState) => {\n this.setDeviceSessionState(state);\n return this._deviceState.getValue();\n },\n disableRefresher: (blockerId: string) =>\n this._refresherService.disableRefresher(blockerId),\n getManagerApiService: () => this._managerApiService,\n getSecureChannelService: () => this._secureChannelService,\n });\n return { observable, cancel };\n }\n\n public close(): void {\n this._updateDeviceStatus(DeviceStatus.NOT_CONNECTED);\n this._deviceState.complete();\n this._deviceSessionRefresher.stopRefresher();\n }\n\n public disableRefresher(id: string): () => void {\n return this._refresherService.disableRefresher(id);\n }\n\n private _updateDeviceStatus(deviceStatus: DeviceStatus): void {\n const state = this._deviceState.getValue();\n this._deviceState.next({ ...state, deviceStatus });\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["BehaviorSubject", "uuidv4", "CommandUtils", "DeviceStatus", "DeviceSessionStateType", "DEVICE_SESSION_REFRESHER_DEFAULT_OPTIONS", "MutexService", "RefresherService", "DevicePinger", "DeviceSessionEventDispatcher", "SessionEvents", "DeviceSessionRefresher", "DeviceSessionStateHandler", "DeviceSession", "connectedDevice", "id", "loggerModuleFactory", "managerApiService", "secureChannelService", "deviceSessionRefresherOptions", "command", "state", "error", "rawApdu", "options", "release", "result", "response", "apdu", "err", "r", "deviceAction", "observable", "cancel", "blockerId", "deviceStatus"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import{BehaviorSubject as E,Subject as S}from"rxjs";import{CommandResultStatus as u,DeviceModelId as p,DeviceSessionStateType as l,DeviceStatus as o}from"../../../api/index";import{SessionEvents as s}from"../../device-session/model/DeviceSessionEventDispatcher";import{DeviceSessionStateHandler as D}from"./DeviceSessionStateHandler";describe("DeviceSessionStateHandler",()=>{let n,c,i;const v=vi.fn(()=>i);let r,d,t,a;beforeEach(()=>{n=new S,c={listen:()=>n,dispatch:vi.fn()},i={error:vi.fn()},r={deviceModel:{id:"device-model-1"}},d=new E({sessionStateType:l.ReadyWithoutSecureChannel,deviceStatus:o.CONNECTED,deviceModelId:p.NANO_X,currentApp:{name:"",version:""},installedApps:[],isSecureConnectionAllowed:!1}),t=vi.fn(),a=new D(v,c,r,d,t)}),afterEach(()=>{a&&typeof a.unsubscribe=="function"&&a.unsubscribe()}),it("updates device state on COMMAND_SUCCEEDED event with a successful response",()=>{const e={data:{name:"TestApp",version:"1.0.0"},status:u.Success};n.next({eventName:s.COMMAND_SUCCEEDED,eventData:e}),expect(t).toHaveBeenCalledWith({sessionStateType:l.ReadyWithoutSecureChannel,deviceStatus:o.CONNECTED,deviceModelId:"device-model-1",currentApp:{name:"TestApp",version:"1.0.0"},installedApps:[],isSecureConnectionAllowed:!1})}),it("updates device state on DEVICE_STATE_UPDATE_BUSY event",()=>{n.next({eventName:s.DEVICE_STATE_UPDATE_BUSY}),expect(t).toHaveBeenCalled();const e=t.mock.calls[0][0];expect(e.deviceStatus).toBe(o.BUSY)}),it("updates device state on DEVICE_STATE_UPDATE_CONNECTED event",()=>{n.next({eventName:s.DEVICE_STATE_UPDATE_CONNECTED}),expect(t).toHaveBeenCalled();const e=t.mock.calls[0][0];expect(e.deviceStatus).toBe(o.CONNECTED)}),it("logs error and does not update state if command result is unsuccessful",()=>{const e={data:null,error:{_tag:"SomeOtherError"}};n.next({eventName:s.COMMAND_SUCCEEDED,eventData:e}),expect(i.error).toHaveBeenCalledWith("Error while parsing APDU response",{data:{parsedResponse:e}}),expect(t).not.toHaveBeenCalled()}),it("does not update state if command result is not a success",()=>{const e={data:null,error:{_tag:"SomeOtherError"}};n.next({eventName:s.COMMAND_SUCCEEDED,eventData:e}),expect(t).not.toHaveBeenCalled()})});
1
+ import{BehaviorSubject as E,Subject as u}from"rxjs";import{expect as e}from"vitest";import{CommandResultStatus as D,DeviceModelId as C,DeviceSessionStateType as l,DeviceStatus as i}from"../../../api/index";import{SessionEvents as o}from"../../device-session/model/DeviceSessionEventDispatcher";import{DeviceSessionStateHandler as p}from"./DeviceSessionStateHandler";describe("DeviceSessionStateHandler",()=>{let t,c,r;const S=vi.fn(()=>r);let d,v,n,a;beforeEach(()=>{t=new u,c={listen:()=>t,dispatch:vi.fn()},r={error:vi.fn()},d={deviceModel:{id:"device-model-1"}},v=new E({sessionStateType:l.ReadyWithoutSecureChannel,deviceStatus:i.CONNECTED,deviceModelId:C.NANO_X,currentApp:{name:"",version:""},installedApps:[],isSecureConnectionAllowed:!1}),n=vi.fn(),a=new p(S,c,d,v,n)}),afterEach(()=>{a&&typeof a.unsubscribe=="function"&&a.unsubscribe()}),it("updates device state on COMMAND_SUCCEEDED event with a successful response",()=>{const s={data:{name:"TestApp",version:"1.0.0"},status:D.Success};t.next({eventName:o.COMMAND_SUCCEEDED,eventData:s}),e(n).toHaveBeenCalledWith({sessionStateType:l.ReadyWithoutSecureChannel,deviceStatus:i.CONNECTED,deviceModelId:"device-model-1",currentApp:{name:"TestApp",version:"1.0.0"},installedApps:[],isSecureConnectionAllowed:!1})}),it("updates device state on DEVICE_STATE_UPDATE_BUSY event",()=>{t.next({eventName:o.DEVICE_STATE_UPDATE_BUSY}),e(n).toHaveBeenCalledWith(e.objectContaining({deviceStatus:i.BUSY}))}),it("updates device state on DEVICE_STATE_UPDATE_CONNECTED event",()=>{t.next({eventName:o.DEVICE_STATE_UPDATE_CONNECTED}),e(n).toHaveBeenCalledWith(e.objectContaining({deviceStatus:i.CONNECTED}))}),it("logs error and does not update state if command result is unsuccessful",()=>{const s={data:null,error:{_tag:"SomeOtherError"}};t.next({eventName:o.COMMAND_SUCCEEDED,eventData:s}),e(r.error).toHaveBeenCalledWith("Error while parsing APDU response",{data:{parsedResponse:s}}),e(n).not.toHaveBeenCalled()}),it("does not update state if command result is not a success",()=>{const s={data:null,error:{_tag:"SomeOtherError"}};t.next({eventName:o.COMMAND_SUCCEEDED,eventData:s}),e(n).not.toHaveBeenCalled()})});
2
2
  //# sourceMappingURL=DeviceSessionStateHandler.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../src/internal/device-session/model/DeviceSessionStateHandler.test.ts"],
4
- "sourcesContent": ["/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n\nimport { BehaviorSubject, Subject } from \"rxjs\";\n\nimport { type DeviceSessionState } from \"@api/device-session/DeviceSessionState\";\nimport {\n CommandResultStatus,\n DeviceModelId,\n DeviceSessionStateType,\n DeviceStatus,\n} from \"@api/index\";\nimport {\n type DeviceSessionEventDispatcher,\n type NewEvent,\n SessionEvents,\n} from \"@internal/device-session/model/DeviceSessionEventDispatcher\";\n\nimport { DeviceSessionStateHandler } from \"./DeviceSessionStateHandler\";\n\ndescribe(\"DeviceSessionStateHandler\", () => {\n let fakeEventSubject: Subject<NewEvent>;\n let fakeSessionEventDispatcher: DeviceSessionEventDispatcher;\n let mockLogger: {\n error: (message: string, meta?: Record<string, unknown>) => void;\n };\n const mockLoggerModuleFactory = vi.fn(() => mockLogger);\n let fakeConnectedDevice: { deviceModel: { id: string } };\n let deviceState: BehaviorSubject<DeviceSessionState>;\n let setDeviceSessionState: any;\n let handler: DeviceSessionStateHandler;\n\n beforeEach(() => {\n fakeEventSubject = new Subject<NewEvent>();\n //@ts-expect-error mock\n fakeSessionEventDispatcher = {\n listen: () => fakeEventSubject,\n dispatch: vi.fn(),\n };\n\n mockLogger = {\n error: vi.fn(),\n };\n\n fakeConnectedDevice = {\n deviceModel: {\n id: \"device-model-1\",\n },\n };\n\n deviceState = new BehaviorSubject<DeviceSessionState>({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n deviceModelId: DeviceModelId.NANO_X,\n currentApp: { name: \"\", version: \"\" },\n installedApps: [],\n isSecureConnectionAllowed: false,\n });\n\n setDeviceSessionState = vi.fn();\n\n handler = new DeviceSessionStateHandler(\n //@ts-expect-error mock\n mockLoggerModuleFactory,\n fakeSessionEventDispatcher,\n fakeConnectedDevice,\n deviceState,\n setDeviceSessionState,\n );\n });\n\n afterEach(() => {\n if (handler && typeof handler.unsubscribe === \"function\") {\n handler.unsubscribe();\n }\n });\n\n it(\"updates device state on COMMAND_SUCCEEDED event with a successful response\", () => {\n // Given\n const fakeCommandResult = {\n data: {\n name: \"TestApp\",\n version: \"1.0.0\",\n },\n status: CommandResultStatus.Success,\n };\n\n // When\n fakeEventSubject.next({\n eventName: SessionEvents.COMMAND_SUCCEEDED,\n //@ts-expect-error mock\n eventData: fakeCommandResult,\n });\n\n // Then\n expect(setDeviceSessionState).toHaveBeenCalledWith({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n deviceModelId: \"device-model-1\",\n currentApp: { name: \"TestApp\", version: \"1.0.0\" },\n installedApps: [],\n isSecureConnectionAllowed: false,\n });\n });\n\n it(\"updates device state on DEVICE_STATE_UPDATE_BUSY event\", () => {\n // When\n fakeEventSubject.next({\n eventName: SessionEvents.DEVICE_STATE_UPDATE_BUSY,\n });\n\n // Then\n expect(setDeviceSessionState).toHaveBeenCalled();\n const callArg = setDeviceSessionState.mock.calls[0][0];\n expect(callArg.deviceStatus).toBe(DeviceStatus.BUSY);\n });\n\n it(\"updates device state on DEVICE_STATE_UPDATE_CONNECTED event\", () => {\n // When\n fakeEventSubject.next({\n eventName: SessionEvents.DEVICE_STATE_UPDATE_CONNECTED,\n });\n\n // Then\n expect(setDeviceSessionState).toHaveBeenCalled();\n const callArg = setDeviceSessionState.mock.calls[0][0];\n expect(callArg.deviceStatus).toBe(DeviceStatus.CONNECTED);\n });\n\n it(\"logs error and does not update state if command result is unsuccessful\", () => {\n // Given\n const fakeErrorCommandResult = {\n data: null,\n error: { _tag: \"SomeOtherError\" },\n };\n\n // When\n fakeEventSubject.next({\n eventName: SessionEvents.COMMAND_SUCCEEDED,\n //@ts-expect-error mock\n eventData: fakeErrorCommandResult,\n });\n\n // Then\n expect(mockLogger.error).toHaveBeenCalledWith(\n \"Error while parsing APDU response\",\n { data: { parsedResponse: fakeErrorCommandResult } },\n );\n expect(setDeviceSessionState).not.toHaveBeenCalled();\n });\n\n it(\"does not update state if command result is not a success\", () => {\n // Given\n const fakeErrorCommandResult = {\n data: null,\n error: { _tag: \"SomeOtherError\" },\n };\n\n // When\n fakeEventSubject.next({\n eventName: SessionEvents.COMMAND_SUCCEEDED,\n //@ts-expect-error mock\n eventData: fakeErrorCommandResult,\n });\n\n // Then\n expect(setDeviceSessionState).not.toHaveBeenCalled();\n });\n});\n"],
5
- "mappings": "AAGA,OAAS,mBAAAA,EAAiB,WAAAC,MAAe,OAGzC,OACE,uBAAAC,EACA,iBAAAC,EACA,0BAAAC,EACA,gBAAAC,MACK,aACP,OAGE,iBAAAC,MACK,8DAEP,OAAS,6BAAAC,MAAiC,8BAE1C,SAAS,4BAA6B,IAAM,CAC1C,IAAIC,EACAC,EACAC,EAGJ,MAAMC,EAA0B,GAAG,GAAG,IAAMD,CAAU,EACtD,IAAIE,EACAC,EACAC,EACAC,EAEJ,WAAW,IAAM,CACfP,EAAmB,IAAIP,EAEvBQ,EAA6B,CAC3B,OAAQ,IAAMD,EACd,SAAU,GAAG,GAAG,CAClB,EAEAE,EAAa,CACX,MAAO,GAAG,GAAG,CACf,EAEAE,EAAsB,CACpB,YAAa,CACX,GAAI,gBACN,CACF,EAEAC,EAAc,IAAIb,EAAoC,CACpD,iBAAkBI,EAAuB,0BACzC,aAAcC,EAAa,UAC3B,cAAeF,EAAc,OAC7B,WAAY,CAAE,KAAM,GAAI,QAAS,EAAG,EACpC,cAAe,CAAC,EAChB,0BAA2B,EAC7B,CAAC,EAEDW,EAAwB,GAAG,GAAG,EAE9BC,EAAU,IAAIR,EAEZI,EACAF,EACAG,EACAC,EACAC,CACF,CACF,CAAC,EAED,UAAU,IAAM,CACVC,GAAW,OAAOA,EAAQ,aAAgB,YAC5CA,EAAQ,YAAY,CAExB,CAAC,EAED,GAAG,6EAA8E,IAAM,CAErF,MAAMC,EAAoB,CACxB,KAAM,CACJ,KAAM,UACN,QAAS,OACX,EACA,OAAQd,EAAoB,OAC9B,EAGAM,EAAiB,KAAK,CACpB,UAAWF,EAAc,kBAEzB,UAAWU,CACb,CAAC,EAGD,OAAOF,CAAqB,EAAE,qBAAqB,CACjD,iBAAkBV,EAAuB,0BACzC,aAAcC,EAAa,UAC3B,cAAe,iBACf,WAAY,CAAE,KAAM,UAAW,QAAS,OAAQ,EAChD,cAAe,CAAC,EAChB,0BAA2B,EAC7B,CAAC,CACH,CAAC,EAED,GAAG,yDAA0D,IAAM,CAEjEG,EAAiB,KAAK,CACpB,UAAWF,EAAc,wBAC3B,CAAC,EAGD,OAAOQ,CAAqB,EAAE,iBAAiB,EAC/C,MAAMG,EAAUH,EAAsB,KAAK,MAAM,CAAC,EAAE,CAAC,EACrD,OAAOG,EAAQ,YAAY,EAAE,KAAKZ,EAAa,IAAI,CACrD,CAAC,EAED,GAAG,8DAA+D,IAAM,CAEtEG,EAAiB,KAAK,CACpB,UAAWF,EAAc,6BAC3B,CAAC,EAGD,OAAOQ,CAAqB,EAAE,iBAAiB,EAC/C,MAAMG,EAAUH,EAAsB,KAAK,MAAM,CAAC,EAAE,CAAC,EACrD,OAAOG,EAAQ,YAAY,EAAE,KAAKZ,EAAa,SAAS,CAC1D,CAAC,EAED,GAAG,yEAA0E,IAAM,CAEjF,MAAMa,EAAyB,CAC7B,KAAM,KACN,MAAO,CAAE,KAAM,gBAAiB,CAClC,EAGAV,EAAiB,KAAK,CACpB,UAAWF,EAAc,kBAEzB,UAAWY,CACb,CAAC,EAGD,OAAOR,EAAW,KAAK,EAAE,qBACvB,oCACA,CAAE,KAAM,CAAE,eAAgBQ,CAAuB,CAAE,CACrD,EACA,OAAOJ,CAAqB,EAAE,IAAI,iBAAiB,CACrD,CAAC,EAED,GAAG,2DAA4D,IAAM,CAEnE,MAAMI,EAAyB,CAC7B,KAAM,KACN,MAAO,CAAE,KAAM,gBAAiB,CAClC,EAGAV,EAAiB,KAAK,CACpB,UAAWF,EAAc,kBAEzB,UAAWY,CACb,CAAC,EAGD,OAAOJ,CAAqB,EAAE,IAAI,iBAAiB,CACrD,CAAC,CACH,CAAC",
6
- "names": ["BehaviorSubject", "Subject", "CommandResultStatus", "DeviceModelId", "DeviceSessionStateType", "DeviceStatus", "SessionEvents", "DeviceSessionStateHandler", "fakeEventSubject", "fakeSessionEventDispatcher", "mockLogger", "mockLoggerModuleFactory", "fakeConnectedDevice", "deviceState", "setDeviceSessionState", "handler", "fakeCommandResult", "callArg", "fakeErrorCommandResult"]
4
+ "sourcesContent": ["import { BehaviorSubject, Subject } from \"rxjs\";\nimport { expect, type Mock } from \"vitest\";\n\nimport { type DeviceSessionState } from \"@api/device-session/DeviceSessionState\";\nimport {\n CommandResultStatus,\n DeviceModelId,\n DeviceSessionStateType,\n DeviceStatus,\n} from \"@api/index\";\nimport {\n type DeviceSessionEventDispatcher,\n type NewEvent,\n SessionEvents,\n} from \"@internal/device-session/model/DeviceSessionEventDispatcher\";\n\nimport {\n DeviceSessionStateHandler,\n type SetDeviceSessionStateFn,\n} from \"./DeviceSessionStateHandler\";\n\ndescribe(\"DeviceSessionStateHandler\", () => {\n let fakeEventSubject: Subject<NewEvent>;\n let fakeSessionEventDispatcher: DeviceSessionEventDispatcher;\n let mockLogger: {\n error: (message: string, meta?: Record<string, unknown>) => void;\n };\n const mockLoggerModuleFactory = vi.fn(() => mockLogger);\n let fakeConnectedDevice: { deviceModel: { id: string } };\n let deviceState: BehaviorSubject<DeviceSessionState>;\n let setDeviceSessionState: Mock<SetDeviceSessionStateFn>;\n let handler: DeviceSessionStateHandler;\n\n beforeEach(() => {\n fakeEventSubject = new Subject<NewEvent>();\n //@ts-expect-error mock\n fakeSessionEventDispatcher = {\n listen: () => fakeEventSubject,\n dispatch: vi.fn(),\n };\n\n mockLogger = {\n error: vi.fn(),\n };\n\n fakeConnectedDevice = {\n deviceModel: {\n id: \"device-model-1\",\n },\n };\n\n deviceState = new BehaviorSubject<DeviceSessionState>({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n deviceModelId: DeviceModelId.NANO_X,\n currentApp: { name: \"\", version: \"\" },\n installedApps: [],\n isSecureConnectionAllowed: false,\n });\n\n setDeviceSessionState = vi.fn();\n\n handler = new DeviceSessionStateHandler(\n //@ts-expect-error mock\n mockLoggerModuleFactory,\n fakeSessionEventDispatcher,\n fakeConnectedDevice,\n deviceState,\n setDeviceSessionState,\n );\n });\n\n afterEach(() => {\n if (handler && typeof handler.unsubscribe === \"function\") {\n handler.unsubscribe();\n }\n });\n\n it(\"updates device state on COMMAND_SUCCEEDED event with a successful response\", () => {\n // Given\n const fakeCommandResult = {\n data: {\n name: \"TestApp\",\n version: \"1.0.0\",\n },\n status: CommandResultStatus.Success,\n };\n\n // When\n fakeEventSubject.next({\n eventName: SessionEvents.COMMAND_SUCCEEDED,\n //@ts-expect-error mock\n eventData: fakeCommandResult,\n });\n\n // Then\n expect(setDeviceSessionState).toHaveBeenCalledWith({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n deviceModelId: \"device-model-1\",\n currentApp: { name: \"TestApp\", version: \"1.0.0\" },\n installedApps: [],\n isSecureConnectionAllowed: false,\n });\n });\n\n it(\"updates device state on DEVICE_STATE_UPDATE_BUSY event\", () => {\n // When\n fakeEventSubject.next({\n eventName: SessionEvents.DEVICE_STATE_UPDATE_BUSY,\n });\n\n // Then\n expect(setDeviceSessionState).toHaveBeenCalledWith(\n expect.objectContaining({ deviceStatus: DeviceStatus.BUSY }),\n );\n });\n\n it(\"updates device state on DEVICE_STATE_UPDATE_CONNECTED event\", () => {\n // When\n fakeEventSubject.next({\n eventName: SessionEvents.DEVICE_STATE_UPDATE_CONNECTED,\n });\n\n // Then\n expect(setDeviceSessionState).toHaveBeenCalledWith(\n expect.objectContaining({ deviceStatus: DeviceStatus.CONNECTED }),\n );\n });\n\n it(\"logs error and does not update state if command result is unsuccessful\", () => {\n // Given\n const fakeErrorCommandResult = {\n data: null,\n error: { _tag: \"SomeOtherError\" },\n };\n\n // When\n fakeEventSubject.next({\n eventName: SessionEvents.COMMAND_SUCCEEDED,\n //@ts-expect-error mock\n eventData: fakeErrorCommandResult,\n });\n\n // Then\n expect(mockLogger.error).toHaveBeenCalledWith(\n \"Error while parsing APDU response\",\n { data: { parsedResponse: fakeErrorCommandResult } },\n );\n expect(setDeviceSessionState).not.toHaveBeenCalled();\n });\n\n it(\"does not update state if command result is not a success\", () => {\n // Given\n const fakeErrorCommandResult = {\n data: null,\n error: { _tag: \"SomeOtherError\" },\n };\n\n // When\n fakeEventSubject.next({\n eventName: SessionEvents.COMMAND_SUCCEEDED,\n //@ts-expect-error mock\n eventData: fakeErrorCommandResult,\n });\n\n // Then\n expect(setDeviceSessionState).not.toHaveBeenCalled();\n });\n});\n"],
5
+ "mappings": "AAAA,OAAS,mBAAAA,EAAiB,WAAAC,MAAe,OACzC,OAAS,UAAAC,MAAyB,SAGlC,OACE,uBAAAC,EACA,iBAAAC,EACA,0BAAAC,EACA,gBAAAC,MACK,aACP,OAGE,iBAAAC,MACK,8DAEP,OACE,6BAAAC,MAEK,8BAEP,SAAS,4BAA6B,IAAM,CAC1C,IAAIC,EACAC,EACAC,EAGJ,MAAMC,EAA0B,GAAG,GAAG,IAAMD,CAAU,EACtD,IAAIE,EACAC,EACAC,EACAC,EAEJ,WAAW,IAAM,CACfP,EAAmB,IAAIR,EAEvBS,EAA6B,CAC3B,OAAQ,IAAMD,EACd,SAAU,GAAG,GAAG,CAClB,EAEAE,EAAa,CACX,MAAO,GAAG,GAAG,CACf,EAEAE,EAAsB,CACpB,YAAa,CACX,GAAI,gBACN,CACF,EAEAC,EAAc,IAAId,EAAoC,CACpD,iBAAkBK,EAAuB,0BACzC,aAAcC,EAAa,UAC3B,cAAeF,EAAc,OAC7B,WAAY,CAAE,KAAM,GAAI,QAAS,EAAG,EACpC,cAAe,CAAC,EAChB,0BAA2B,EAC7B,CAAC,EAEDW,EAAwB,GAAG,GAAG,EAE9BC,EAAU,IAAIR,EAEZI,EACAF,EACAG,EACAC,EACAC,CACF,CACF,CAAC,EAED,UAAU,IAAM,CACVC,GAAW,OAAOA,EAAQ,aAAgB,YAC5CA,EAAQ,YAAY,CAExB,CAAC,EAED,GAAG,6EAA8E,IAAM,CAErF,MAAMC,EAAoB,CACxB,KAAM,CACJ,KAAM,UACN,QAAS,OACX,EACA,OAAQd,EAAoB,OAC9B,EAGAM,EAAiB,KAAK,CACpB,UAAWF,EAAc,kBAEzB,UAAWU,CACb,CAAC,EAGDf,EAAOa,CAAqB,EAAE,qBAAqB,CACjD,iBAAkBV,EAAuB,0BACzC,aAAcC,EAAa,UAC3B,cAAe,iBACf,WAAY,CAAE,KAAM,UAAW,QAAS,OAAQ,EAChD,cAAe,CAAC,EAChB,0BAA2B,EAC7B,CAAC,CACH,CAAC,EAED,GAAG,yDAA0D,IAAM,CAEjEG,EAAiB,KAAK,CACpB,UAAWF,EAAc,wBAC3B,CAAC,EAGDL,EAAOa,CAAqB,EAAE,qBAC5Bb,EAAO,iBAAiB,CAAE,aAAcI,EAAa,IAAK,CAAC,CAC7D,CACF,CAAC,EAED,GAAG,8DAA+D,IAAM,CAEtEG,EAAiB,KAAK,CACpB,UAAWF,EAAc,6BAC3B,CAAC,EAGDL,EAAOa,CAAqB,EAAE,qBAC5Bb,EAAO,iBAAiB,CAAE,aAAcI,EAAa,SAAU,CAAC,CAClE,CACF,CAAC,EAED,GAAG,yEAA0E,IAAM,CAEjF,MAAMY,EAAyB,CAC7B,KAAM,KACN,MAAO,CAAE,KAAM,gBAAiB,CAClC,EAGAT,EAAiB,KAAK,CACpB,UAAWF,EAAc,kBAEzB,UAAWW,CACb,CAAC,EAGDhB,EAAOS,EAAW,KAAK,EAAE,qBACvB,oCACA,CAAE,KAAM,CAAE,eAAgBO,CAAuB,CAAE,CACrD,EACAhB,EAAOa,CAAqB,EAAE,IAAI,iBAAiB,CACrD,CAAC,EAED,GAAG,2DAA4D,IAAM,CAEnE,MAAMG,EAAyB,CAC7B,KAAM,KACN,MAAO,CAAE,KAAM,gBAAiB,CAClC,EAGAT,EAAiB,KAAK,CACpB,UAAWF,EAAc,kBAEzB,UAAWW,CACb,CAAC,EAGDhB,EAAOa,CAAqB,EAAE,IAAI,iBAAiB,CACrD,CAAC,CACH,CAAC",
6
+ "names": ["BehaviorSubject", "Subject", "expect", "CommandResultStatus", "DeviceModelId", "DeviceSessionStateType", "DeviceStatus", "SessionEvents", "DeviceSessionStateHandler", "fakeEventSubject", "fakeSessionEventDispatcher", "mockLogger", "mockLoggerModuleFactory", "fakeConnectedDevice", "deviceState", "setDeviceSessionState", "handler", "fakeCommandResult", "fakeErrorCommandResult"]
7
7
  }
@@ -1,2 +1,2 @@
1
- var _=Object.defineProperty;var A=Object.getOwnPropertyDescriptor;var c=(n,r,t,e)=>{for(var i=e>1?void 0:e?A(r,t):r,a=n.length-1,m;a>=0;a--)(m=n[a])&&(i=(e?m(r,t,i):m(i))||i);return e&&i&&_(r,t,i),i},d=(n,r)=>(t,e)=>r(t,e,n);import{inject as b,injectable as H}from"inversify";import{Left as l,Maybe as s,Right as z}from"purify-ts";import{v4 as y}from"uuid";import{APDU_DATA_LENGTH_LENGTH as p,CHANNEL_LENGTH as u,HEAD_TAG as E,HEAD_TAG_LENGTH as L,INDEX_LENGTH as f}from"../../../api/device-session/data/FramerConst";import{FramerUtils as g}from"../../../api/device-session/utils/FramerUtils";import{FramerApduError as v,FramerOverflowError as F}from"../../device-session/model/Errors";import{Frame as T}from"../../device-session/model/Frame";import{FrameHeader as w}from"../../device-session/model/FrameHeader";import{loggerTypes as N}from"../../logger-publisher/di/loggerTypes";let o=class{_frameSize;_channel;_padding;_logger;constructor({frameSize:r,channel:t=s.zero(),padding:e=!1},i){this._frameSize=r,this._channel=t,this._padding=e,this._logger=i("framer")}getFrames(r){const t=[];let e=0,i=this.getFrameAtIndex(r,e);for(;i.isRight();)t.push(i.extract()),e+=1,i=this.getFrameAtIndex(r,e).mapLeft(a=>(a instanceof F?this._logger.debug("Frames parsed",{data:{count:e}}):this._logger.error("Error while parsing frame",{data:{error:a}}),a));return t}getFrameAtIndex(r,t){const e=this.getFrameHeaderFrom(t,r.length),i=t*this._frameSize-this.getHeaderSizeSumFrom(t);if(i>r.length)return l(new F);if(e.getLength()>this._frameSize)return l(new v);const a=this._frameSize-e.getLength(),m=r.slice(t===0?0:i,t===0?a:i+this._frameSize-e.getLength()),h=this._padding?new Uint8Array(a).fill(0):new Uint8Array(m.length<a?m.length:a);h.set(m,0);const S=new T({header:e,data:h});return z(S)}getFrameHeaderFrom(r,t){const e=new w({uuid:y(),channel:this._channel.map(i=>g.getLastBytesFrom(i,u)),headTag:new Uint8Array([E]),index:g.numberToByteArray(r,f),length:this.getFrameHeaderSizeFromIndex(r),dataSize:s.zero()});return r===0&&e.setDataSize(s.of(g.numberToByteArray(t,p))),e}getHeaderSizeSumFrom(r){let t=this.getFrameHeaderSizeFromIndex(0),e=1;for(;e<r;)t+=this.getFrameHeaderSizeFromIndex(e),e+=1;return t}getFrameHeaderSizeFromIndex(r){return this._channel.caseOf({Just:()=>u,Nothing:()=>0})+f+L+(r===0?p:0)}};o=c([H(),d(1,b(N.LoggerPublisherServiceFactory))],o);export{o as DefaultApduSenderService};
1
+ var A=Object.defineProperty;var _=Object.getOwnPropertyDescriptor;var c=(m,r,t,e)=>{for(var i=e>1?void 0:e?_(r,t):r,a=m.length-1,n;a>=0;a--)(n=m[a])&&(i=(e?n(r,t,i):n(i))||i);return e&&i&&A(r,t,i),i},d=(m,r)=>(t,e)=>r(t,e,m);import{inject as b,injectable as H}from"inversify";import{Left as l,Maybe as s,Right as z}from"purify-ts";import{v4 as v}from"uuid";import{APDU_DATA_LENGTH_LENGTH as p,CHANNEL_LENGTH as u,HEAD_TAG as y,HEAD_TAG_LENGTH as E,INDEX_LENGTH as f}from"../../../api/device-session/data/FramerConst";import{FramerUtils as g}from"../../../api/device-session/utils/FramerUtils";import{FramerApduError as L,FramerOverflowError as F}from"../../device-session/model/Errors";import{Frame as T}from"../../device-session/model/Frame";import{FrameHeader as w}from"../../device-session/model/FrameHeader";import{loggerTypes as N}from"../../logger-publisher/di/loggerTypes";let o=class{_frameSize;_channel;_padding;_logger;constructor({frameSize:r,channel:t=s.zero(),padding:e=!1},i){this._frameSize=r,this._channel=t,this._padding=e,this._logger=i("DefaultApduSenderService")}getFrames(r){const t=[];let e=0,i=this.getFrameAtIndex(r,e);for(;i.isRight();)t.push(i.extract()),e+=1,i=this.getFrameAtIndex(r,e).mapLeft(a=>(a instanceof F?this._logger.debug("Frames parsed",{data:{count:e}}):this._logger.error("Error while parsing frame",{data:{error:a}}),a));return t}getFrameAtIndex(r,t){const e=this.getFrameHeaderFrom(t,r.length),i=t*this._frameSize-this.getHeaderSizeSumFrom(t);if(i>r.length)return l(new F);if(e.getLength()>this._frameSize)return l(new L);const a=this._frameSize-e.getLength(),n=r.slice(t===0?0:i,t===0?a:i+this._frameSize-e.getLength()),h=this._padding?new Uint8Array(a).fill(0):new Uint8Array(n.length<a?n.length:a);h.set(n,0);const S=new T({header:e,data:h});return z(S)}getFrameHeaderFrom(r,t){const e=new w({uuid:v(),channel:this._channel.map(i=>g.getLastBytesFrom(i,u)),headTag:new Uint8Array([y]),index:g.numberToByteArray(r,f),length:this.getFrameHeaderSizeFromIndex(r),dataSize:s.zero()});return r===0&&e.setDataSize(s.of(g.numberToByteArray(t,p))),e}getHeaderSizeSumFrom(r){let t=this.getFrameHeaderSizeFromIndex(0),e=1;for(;e<r;)t+=this.getFrameHeaderSizeFromIndex(e),e+=1;return t}getFrameHeaderSizeFromIndex(r){return this._channel.caseOf({Just:()=>u,Nothing:()=>0})+f+E+(r===0?p:0)}};o=c([H(),d(1,b(N.LoggerPublisherServiceFactory))],o);export{o as DefaultApduSenderService};
2
2
  //# sourceMappingURL=DefaultApduSenderService.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../src/internal/device-session/service/DefaultApduSenderService.ts"],
4
- "sourcesContent": ["import { inject, injectable } from \"inversify\";\nimport { Either, Left, Maybe, Right } from \"purify-ts\";\nimport { v4 } from \"uuid\";\n\nimport {\n APDU_DATA_LENGTH_LENGTH,\n CHANNEL_LENGTH,\n HEAD_TAG,\n HEAD_TAG_LENGTH,\n INDEX_LENGTH,\n} from \"@api/device-session/data/FramerConst\";\nimport type {\n ApduSenderService,\n ApduSenderServiceConstructorArgs,\n} from \"@api/device-session/service/ApduSenderService\";\nimport { FramerUtils } from \"@api/device-session/utils/FramerUtils\";\nimport { LoggerPublisherService } from \"@api/logger-publisher/service/LoggerPublisherService\";\nimport {\n FramerApduError,\n FramerOverflowError,\n} from \"@internal/device-session/model/Errors\";\nimport { Frame } from \"@internal/device-session/model/Frame\";\nimport { FrameHeader } from \"@internal/device-session/model/FrameHeader\";\nimport { loggerTypes } from \"@internal/logger-publisher/di/loggerTypes\";\nimport { DmkError } from \"@root/src/api/Error\";\n/**\n * Default implementation of ApduSenderService\n *\n * Split APDU in an array of frames readies to send to a TransportConnectedDevice\n */\n@injectable()\nexport class DefaultApduSenderService implements ApduSenderService {\n protected _frameSize: number;\n protected _channel: Maybe<Uint8Array>;\n protected _padding: boolean;\n private _logger: LoggerPublisherService;\n\n /**\n * Constructor\n *\n * @param frameSize\n * @param channel\n * @param padding\n * @param loggerServiceFactory\n */\n constructor(\n {\n frameSize,\n channel = Maybe.zero(),\n padding = false,\n }: ApduSenderServiceConstructorArgs,\n @inject(loggerTypes.LoggerPublisherServiceFactory)\n loggerServiceFactory: (tag: string) => LoggerPublisherService,\n ) {\n this._frameSize = frameSize;\n this._channel = channel;\n this._padding = padding;\n this._logger = loggerServiceFactory(\"framer\");\n }\n\n /**\n * Get frames from apdu\n *\n * @param apdu\n */\n public getFrames(apdu: Uint8Array): Frame[] {\n const frames: Frame[] = [];\n let count = 0;\n let frame = this.getFrameAtIndex(apdu, count);\n\n while (frame.isRight()) {\n frames.push(frame.extract());\n count += 1;\n frame = this.getFrameAtIndex(apdu, count).mapLeft((error) => {\n if (error instanceof FramerOverflowError) {\n this._logger.debug(\"Frames parsed\", { data: { count } });\n } else {\n this._logger.error(\"Error while parsing frame\", { data: { error } });\n }\n return error;\n });\n }\n return frames;\n }\n\n /**\n * Get apdu frame at index\n * Split every {{PACKET_SIZE - HEADER_SIZE}} bytes of apdu\n * @param apdu\n * @param frameIndex\n * @private\n */\n private getFrameAtIndex(\n apdu: Uint8Array,\n frameIndex: number,\n ): Either<DmkError, Frame> {\n const header = this.getFrameHeaderFrom(frameIndex, apdu.length);\n const frameOffset =\n frameIndex * this._frameSize - this.getHeaderSizeSumFrom(frameIndex);\n\n if (frameOffset > apdu.length) {\n return Left(new FramerOverflowError());\n }\n if (header.getLength() > this._frameSize) {\n return Left(new FramerApduError());\n }\n const dataMaxSize = this._frameSize - header.getLength();\n const data = apdu.slice(\n frameIndex === 0 ? 0 : frameOffset,\n frameIndex === 0\n ? dataMaxSize\n : frameOffset + this._frameSize - header.getLength(),\n );\n const frameData = this._padding\n ? new Uint8Array(dataMaxSize).fill(0)\n : new Uint8Array(data.length < dataMaxSize ? data.length : dataMaxSize);\n frameData.set(data, 0);\n const frame = new Frame({\n header,\n data: frameData,\n });\n return Right(frame);\n }\n\n /**\n * Get frame header\n * @param frameIndex\n * @param apduSize\n * @private\n */\n private getFrameHeaderFrom(\n frameIndex: number,\n apduSize: number,\n ): FrameHeader {\n const header = new FrameHeader({\n uuid: v4(),\n channel: this._channel.map((channel) =>\n FramerUtils.getLastBytesFrom(channel, CHANNEL_LENGTH),\n ),\n headTag: new Uint8Array([HEAD_TAG]),\n index: FramerUtils.numberToByteArray(frameIndex, INDEX_LENGTH),\n length: this.getFrameHeaderSizeFromIndex(frameIndex),\n dataSize: Maybe.zero(),\n });\n if (frameIndex === 0) {\n header.setDataSize(\n Maybe.of(\n FramerUtils.numberToByteArray(apduSize, APDU_DATA_LENGTH_LENGTH),\n ),\n );\n }\n return header;\n }\n\n /**\n * Get frame offset\n * First frame has more bytes of header\n * Padding append means a 0 bytes is added at the end of each frame\n * @private\n * @param frameIndex\n */\n private getHeaderSizeSumFrom(frameIndex: number): number {\n let sum = this.getFrameHeaderSizeFromIndex(0);\n let i = 1;\n while (i < frameIndex) {\n sum += this.getFrameHeaderSizeFromIndex(i);\n i += 1;\n }\n return sum;\n }\n\n /**\n * Get frame header size\n * @private\n * @param frameIndex\n */\n private getFrameHeaderSizeFromIndex(frameIndex: number): number {\n return (\n this._channel.caseOf({\n Just: () => CHANNEL_LENGTH,\n Nothing: () => 0,\n }) +\n INDEX_LENGTH +\n HEAD_TAG_LENGTH +\n (frameIndex === 0 ? APDU_DATA_LENGTH_LENGTH : 0)\n );\n }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { inject, injectable } from \"inversify\";\nimport { Either, Left, Maybe, Right } from \"purify-ts\";\nimport { v4 } from \"uuid\";\n\nimport {\n APDU_DATA_LENGTH_LENGTH,\n CHANNEL_LENGTH,\n HEAD_TAG,\n HEAD_TAG_LENGTH,\n INDEX_LENGTH,\n} from \"@api/device-session/data/FramerConst\";\nimport type {\n ApduSenderService,\n ApduSenderServiceConstructorArgs,\n} from \"@api/device-session/service/ApduSenderService\";\nimport { FramerUtils } from \"@api/device-session/utils/FramerUtils\";\nimport { LoggerPublisherService } from \"@api/logger-publisher/service/LoggerPublisherService\";\nimport {\n FramerApduError,\n FramerOverflowError,\n} from \"@internal/device-session/model/Errors\";\nimport { Frame } from \"@internal/device-session/model/Frame\";\nimport { FrameHeader } from \"@internal/device-session/model/FrameHeader\";\nimport { loggerTypes } from \"@internal/logger-publisher/di/loggerTypes\";\nimport { DmkError } from \"@root/src/api/Error\";\n/**\n * Default implementation of ApduSenderService\n *\n * Split APDU in an array of frames readies to send to a TransportConnectedDevice\n */\n@injectable()\nexport class DefaultApduSenderService implements ApduSenderService {\n protected _frameSize: number;\n protected _channel: Maybe<Uint8Array>;\n protected _padding: boolean;\n private _logger: LoggerPublisherService;\n\n /**\n * Constructor\n *\n * @param frameSize\n * @param channel\n * @param padding\n * @param loggerServiceFactory\n */\n constructor(\n {\n frameSize,\n channel = Maybe.zero(),\n padding = false,\n }: ApduSenderServiceConstructorArgs,\n @inject(loggerTypes.LoggerPublisherServiceFactory)\n loggerServiceFactory: (tag: string) => LoggerPublisherService,\n ) {\n this._frameSize = frameSize;\n this._channel = channel;\n this._padding = padding;\n this._logger = loggerServiceFactory(\"DefaultApduSenderService\");\n }\n\n /**\n * Get frames from apdu\n *\n * @param apdu\n */\n public getFrames(apdu: Uint8Array): Frame[] {\n const frames: Frame[] = [];\n let count = 0;\n let frame = this.getFrameAtIndex(apdu, count);\n\n while (frame.isRight()) {\n frames.push(frame.extract());\n count += 1;\n frame = this.getFrameAtIndex(apdu, count).mapLeft((error) => {\n if (error instanceof FramerOverflowError) {\n this._logger.debug(\"Frames parsed\", { data: { count } });\n } else {\n this._logger.error(\"Error while parsing frame\", { data: { error } });\n }\n return error;\n });\n }\n return frames;\n }\n\n /**\n * Get apdu frame at index\n * Split every {{PACKET_SIZE - HEADER_SIZE}} bytes of apdu\n * @param apdu\n * @param frameIndex\n * @private\n */\n private getFrameAtIndex(\n apdu: Uint8Array,\n frameIndex: number,\n ): Either<DmkError, Frame> {\n const header = this.getFrameHeaderFrom(frameIndex, apdu.length);\n const frameOffset =\n frameIndex * this._frameSize - this.getHeaderSizeSumFrom(frameIndex);\n\n if (frameOffset > apdu.length) {\n return Left(new FramerOverflowError());\n }\n if (header.getLength() > this._frameSize) {\n return Left(new FramerApduError());\n }\n const dataMaxSize = this._frameSize - header.getLength();\n const data = apdu.slice(\n frameIndex === 0 ? 0 : frameOffset,\n frameIndex === 0\n ? dataMaxSize\n : frameOffset + this._frameSize - header.getLength(),\n );\n const frameData = this._padding\n ? new Uint8Array(dataMaxSize).fill(0)\n : new Uint8Array(data.length < dataMaxSize ? data.length : dataMaxSize);\n frameData.set(data, 0);\n const frame = new Frame({\n header,\n data: frameData,\n });\n return Right(frame);\n }\n\n /**\n * Get frame header\n * @param frameIndex\n * @param apduSize\n * @private\n */\n private getFrameHeaderFrom(\n frameIndex: number,\n apduSize: number,\n ): FrameHeader {\n const header = new FrameHeader({\n uuid: v4(),\n channel: this._channel.map((channel) =>\n FramerUtils.getLastBytesFrom(channel, CHANNEL_LENGTH),\n ),\n headTag: new Uint8Array([HEAD_TAG]),\n index: FramerUtils.numberToByteArray(frameIndex, INDEX_LENGTH),\n length: this.getFrameHeaderSizeFromIndex(frameIndex),\n dataSize: Maybe.zero(),\n });\n if (frameIndex === 0) {\n header.setDataSize(\n Maybe.of(\n FramerUtils.numberToByteArray(apduSize, APDU_DATA_LENGTH_LENGTH),\n ),\n );\n }\n return header;\n }\n\n /**\n * Get frame offset\n * First frame has more bytes of header\n * Padding append means a 0 bytes is added at the end of each frame\n * @private\n * @param frameIndex\n */\n private getHeaderSizeSumFrom(frameIndex: number): number {\n let sum = this.getFrameHeaderSizeFromIndex(0);\n let i = 1;\n while (i < frameIndex) {\n sum += this.getFrameHeaderSizeFromIndex(i);\n i += 1;\n }\n return sum;\n }\n\n /**\n * Get frame header size\n * @private\n * @param frameIndex\n */\n private getFrameHeaderSizeFromIndex(frameIndex: number): number {\n return (\n this._channel.caseOf({\n Just: () => CHANNEL_LENGTH,\n Nothing: () => 0,\n }) +\n INDEX_LENGTH +\n HEAD_TAG_LENGTH +\n (frameIndex === 0 ? APDU_DATA_LENGTH_LENGTH : 0)\n );\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["inject", "injectable", "Left", "Maybe", "Right", "v4", "APDU_DATA_LENGTH_LENGTH", "CHANNEL_LENGTH", "HEAD_TAG", "HEAD_TAG_LENGTH", "INDEX_LENGTH", "FramerUtils", "FramerApduError", "FramerOverflowError", "Frame", "FrameHeader", "loggerTypes", "DefaultApduSenderService", "frameSize", "channel", "Maybe", "padding", "loggerServiceFactory", "apdu", "frames", "count", "frame", "error", "FramerOverflowError", "frameIndex", "header", "frameOffset", "Left", "FramerApduError", "dataMaxSize", "data", "frameData", "Frame", "Right", "apduSize", "FrameHeader", "v4", "FramerUtils", "CHANNEL_LENGTH", "HEAD_TAG", "INDEX_LENGTH", "APDU_DATA_LENGTH_LENGTH", "sum", "i", "HEAD_TAG_LENGTH", "__decorateClass", "injectable", "__decorateParam", "inject", "loggerTypes"]
7
7
  }
@@ -1,2 +1,2 @@
1
- var p=Object.defineProperty;var m=Object.getOwnPropertyDescriptor;var t=(o,e,i,s)=>{for(var c=s>1?void 0:s?m(e,i):e,v=o.length-1,n;v>=0;v--)(n=o[v])&&(c=(s?n(e,i,c):n(c))||c);return s&&c&&p(e,i,c),c},S=(o,e)=>(i,s)=>e(i,s,o);import{inject as D,injectable as d}from"inversify";import{deviceSessionTypes as f}from"../../device-session/di/deviceSessionTypes";let r=class{_sessionService;constructor(e){this._sessionService=e}execute(){const e=this._sessionService.getDeviceSessions();for(const i of e)i.close()}};r=t([d(),S(0,D(f.DeviceSessionService))],r);export{r as CloseSessionsUseCase};
1
+ var a=Object.defineProperty;var m=Object.getOwnPropertyDescriptor;var S=(o,e,i,s)=>{for(var r=s>1?void 0:s?m(e,i):e,t=o.length-1,n;t>=0;t--)(n=o[t])&&(r=(s?n(e,i,r):n(r))||r);return s&&r&&a(e,i,r),r},v=(o,e)=>(i,s)=>e(i,s,o);import{inject as p,injectable as D}from"inversify";import{deviceSessionTypes as d}from"../../device-session/di/deviceSessionTypes";import{transportDiTypes as f}from"../../transport/di/transportDiTypes";let c=class{_sessionService;_transportService;constructor(e,i){this._sessionService=e,this._transportService=i}execute(){const e=this._sessionService.getDeviceSessions();for(const i of e)this._transportService.closeConnection(i.connectedDevice),this._sessionService.removeDeviceSession(i.id)}};c=S([D(),v(0,p(d.DeviceSessionService)),v(1,p(f.TransportService))],c);export{c as CloseSessionsUseCase};
2
2
  //# sourceMappingURL=CloseSessionsUseCase.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../src/internal/device-session/use-case/CloseSessionsUseCase.ts"],
4
- "sourcesContent": ["import { inject, injectable } from \"inversify\";\n\nimport { deviceSessionTypes } from \"@internal/device-session/di/deviceSessionTypes\";\nimport type { DeviceSessionService } from \"@internal/device-session/service/DeviceSessionService\";\n\n@injectable()\nexport class CloseSessionsUseCase {\n private readonly _sessionService: DeviceSessionService;\n constructor(\n @inject(deviceSessionTypes.DeviceSessionService)\n sessionService: DeviceSessionService,\n ) {\n this._sessionService = sessionService;\n }\n\n execute() {\n const deviceSessions = this._sessionService.getDeviceSessions();\n\n for (const dSession of deviceSessions) {\n dSession.close();\n }\n }\n}\n"],
5
- "mappings": "iOAAA,OAAS,UAAAA,EAAQ,cAAAC,MAAkB,YAEnC,OAAS,sBAAAC,MAA0B,iDAI5B,IAAMC,EAAN,KAA2B,CACf,gBACjB,YAEEC,EACA,CACA,KAAK,gBAAkBA,CACzB,CAEA,SAAU,CACR,MAAMC,EAAiB,KAAK,gBAAgB,kBAAkB,EAE9D,UAAWC,KAAYD,EACrBC,EAAS,MAAM,CAEnB,CACF,EAhBaH,EAANI,EAAA,CADNC,EAAW,EAIPC,EAAA,EAAAC,EAAOC,EAAmB,oBAAoB,IAHtCR",
6
- "names": ["inject", "injectable", "deviceSessionTypes", "CloseSessionsUseCase", "sessionService", "deviceSessions", "dSession", "__decorateClass", "injectable", "__decorateParam", "inject", "deviceSessionTypes"]
4
+ "sourcesContent": ["import { inject, injectable } from \"inversify\";\n\nimport { deviceSessionTypes } from \"@internal/device-session/di/deviceSessionTypes\";\nimport type { DeviceSessionService } from \"@internal/device-session/service/DeviceSessionService\";\nimport { transportDiTypes } from \"@internal/transport/di/transportDiTypes\";\nimport type { TransportService } from \"@internal/transport/service/TransportService\";\n\n@injectable()\nexport class CloseSessionsUseCase {\n private readonly _sessionService: DeviceSessionService;\n private readonly _transportService: TransportService;\n constructor(\n @inject(deviceSessionTypes.DeviceSessionService)\n sessionService: DeviceSessionService,\n @inject(transportDiTypes.TransportService)\n transportService: TransportService,\n ) {\n this._sessionService = sessionService;\n this._transportService = transportService;\n }\n\n execute() {\n const deviceSessions = this._sessionService.getDeviceSessions();\n\n for (const dSession of deviceSessions) {\n this._transportService.closeConnection(dSession.connectedDevice);\n this._sessionService.removeDeviceSession(dSession.id);\n }\n }\n}\n"],
5
+ "mappings": "iOAAA,OAAS,UAAAA,EAAQ,cAAAC,MAAkB,YAEnC,OAAS,sBAAAC,MAA0B,iDAEnC,OAAS,oBAAAC,MAAwB,0CAI1B,IAAMC,EAAN,KAA2B,CACf,gBACA,kBACjB,YAEEC,EAEAC,EACA,CACA,KAAK,gBAAkBD,EACvB,KAAK,kBAAoBC,CAC3B,CAEA,SAAU,CACR,MAAMC,EAAiB,KAAK,gBAAgB,kBAAkB,EAE9D,UAAWC,KAAYD,EACrB,KAAK,kBAAkB,gBAAgBC,EAAS,eAAe,EAC/D,KAAK,gBAAgB,oBAAoBA,EAAS,EAAE,CAExD,CACF,EArBaJ,EAANK,EAAA,CADNC,EAAW,EAKPC,EAAA,EAAAC,EAAOC,EAAmB,oBAAoB,GAE9CF,EAAA,EAAAC,EAAOE,EAAiB,gBAAgB,IANhCV",
6
+ "names": ["inject", "injectable", "deviceSessionTypes", "transportDiTypes", "CloseSessionsUseCase", "sessionService", "transportService", "deviceSessions", "dSession", "__decorateClass", "injectable", "__decorateParam", "inject", "deviceSessionTypes", "transportDiTypes"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import{DEVICE_SESSION_REFRESHER_DEFAULT_OPTIONS as S}from"../../device-session/data/DeviceSessionRefresherConst";import{deviceSessionStubBuilder as m}from"../../device-session/model/DeviceSession.stub";import{DefaultDeviceSessionService as l}from"../../device-session/service/DefaultDeviceSessionService";import{CloseSessionsUseCase as p}from"../../device-session/use-case/CloseSessionsUseCase";import{DefaultLoggerPublisherService as u}from"../../logger-publisher/service/DefaultLoggerPublisherService";import{AxiosManagerApiDataSource as f}from"../../manager-api/data/AxiosManagerApiDataSource";import{DefaultManagerApiService as D}from"../../manager-api/service/DefaultManagerApiService";import{DefaultSecureChannelDataSource as v}from"../../secure-channel/data/DefaultSecureChannelDataSource";import{DefaultSecureChannelService as g}from"../../secure-channel/service/DefaultSecureChannelService";let r,a,t,n,c,o;describe("CloseSessionsUseCase",()=>{beforeEach(()=>{r=new u([],"close-sessions-use-case-test"),a=new f({}),t=new D(a),n=new v({}),c=new g(n),o=new l(()=>r)}),it("should be able to close every session",()=>{const i=[...Array(10).keys()].map(e=>{const s=m({id:e.toString()},()=>r,t,c,S);return vi.spyOn(s,"close"),s});i.forEach(e=>o.addDeviceSession(e)),new p(o).execute(),i.forEach(e=>{expect(e.close).toHaveBeenCalled()})})});
1
+ import{DEVICE_SESSION_REFRESHER_DEFAULT_OPTIONS as S}from"../../device-session/data/DeviceSessionRefresherConst";import{deviceSessionStubBuilder as m}from"../../device-session/model/DeviceSession.stub";import{DefaultDeviceSessionService as p}from"../../device-session/service/DefaultDeviceSessionService";import{CloseSessionsUseCase as l}from"../../device-session/use-case/CloseSessionsUseCase";import{DefaultLoggerPublisherService as u}from"../../logger-publisher/service/DefaultLoggerPublisherService";import{AxiosManagerApiDataSource as f}from"../../manager-api/data/AxiosManagerApiDataSource";import{DefaultManagerApiService as v}from"../../manager-api/service/DefaultManagerApiService";import{DefaultSecureChannelDataSource as D}from"../../secure-channel/data/DefaultSecureChannelDataSource";import{DefaultSecureChannelService as g}from"../../secure-channel/service/DefaultSecureChannelService";import{DefaultTransportService as C}from"../../transport/service/__mocks__/DefaultTransportService";let o,i,t,a,n,r,c;describe("CloseSessionsUseCase",()=>{beforeEach(()=>{o=new u([],"close-sessions-use-case-test"),i=new f({}),t=new v(i),a=new D({}),n=new g(a),r=new p(()=>o),c=new C}),it("should be able to close every session",()=>{[...Array(10).keys()].map(e=>{const s=m({id:e.toString()},()=>o,t,n,S);return vi.spyOn(s,"close"),s}).forEach(e=>r.addDeviceSession(e)),new l(r,c).execute();for(const e of r.getDeviceSessions())expect(e.close).toHaveBeenCalled()})});
2
2
  //# sourceMappingURL=CloseSessionsUseCase.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../src/internal/device-session/use-case/CloseSessionsUseCase.test.ts"],
4
- "sourcesContent": ["import { type DmkConfig } from \"@api/DmkConfig\";\nimport { type LoggerPublisherService } from \"@api/logger-publisher/service/LoggerPublisherService\";\nimport { DEVICE_SESSION_REFRESHER_DEFAULT_OPTIONS } from \"@internal/device-session/data/DeviceSessionRefresherConst\";\nimport { deviceSessionStubBuilder } from \"@internal/device-session/model/DeviceSession.stub\";\nimport { DefaultDeviceSessionService } from \"@internal/device-session/service/DefaultDeviceSessionService\";\nimport { type DeviceSessionService } from \"@internal/device-session/service/DeviceSessionService\";\nimport { CloseSessionsUseCase } from \"@internal/device-session/use-case/CloseSessionsUseCase\";\nimport { DefaultLoggerPublisherService } from \"@internal/logger-publisher/service/DefaultLoggerPublisherService\";\nimport { AxiosManagerApiDataSource } from \"@internal/manager-api/data/AxiosManagerApiDataSource\";\nimport { type ManagerApiDataSource } from \"@internal/manager-api/data/ManagerApiDataSource\";\nimport { DefaultManagerApiService } from \"@internal/manager-api/service/DefaultManagerApiService\";\nimport { type ManagerApiService } from \"@internal/manager-api/service/ManagerApiService\";\nimport { DefaultSecureChannelDataSource } from \"@internal/secure-channel/data/DefaultSecureChannelDataSource\";\nimport { type SecureChannelDataSource } from \"@internal/secure-channel/data/SecureChannelDataSource\";\nimport { DefaultSecureChannelService } from \"@internal/secure-channel/service/DefaultSecureChannelService\";\nimport { type SecureChannelService } from \"@internal/secure-channel/service/SecureChannelService\";\n\nlet logger: LoggerPublisherService;\nlet managerApiDataSource: ManagerApiDataSource;\nlet managerApi: ManagerApiService;\nlet secureChannelDataSource: SecureChannelDataSource;\nlet secureChannel: SecureChannelService;\nlet sessionService: DeviceSessionService;\n\ndescribe(\"CloseSessionsUseCase\", () => {\n beforeEach(() => {\n logger = new DefaultLoggerPublisherService(\n [],\n \"close-sessions-use-case-test\",\n );\n managerApiDataSource = new AxiosManagerApiDataSource({} as DmkConfig);\n managerApi = new DefaultManagerApiService(managerApiDataSource);\n secureChannelDataSource = new DefaultSecureChannelDataSource(\n {} as DmkConfig,\n );\n secureChannel = new DefaultSecureChannelService(secureChannelDataSource);\n sessionService = new DefaultDeviceSessionService(() => logger);\n });\n\n it(\"should be able to close every session\", () => {\n //given\n const sessions = [...Array(10).keys()].map((id) => {\n const session = deviceSessionStubBuilder(\n { id: id.toString() },\n () => logger,\n managerApi,\n secureChannel,\n DEVICE_SESSION_REFRESHER_DEFAULT_OPTIONS,\n );\n vi.spyOn(session, \"close\");\n return session;\n });\n sessions.forEach((session) => sessionService.addDeviceSession(session));\n const useCase = new CloseSessionsUseCase(sessionService);\n //when\n useCase.execute();\n //then\n sessions.forEach((session) => {\n expect(session.close).toHaveBeenCalled();\n });\n });\n});\n"],
5
- "mappings": "AAEA,OAAS,4CAAAA,MAAgD,4DACzD,OAAS,4BAAAC,MAAgC,oDACzC,OAAS,+BAAAC,MAAmC,+DAE5C,OAAS,wBAAAC,MAA4B,yDACrC,OAAS,iCAAAC,MAAqC,mEAC9C,OAAS,6BAAAC,MAAiC,uDAE1C,OAAS,4BAAAC,MAAgC,yDAEzC,OAAS,kCAAAC,MAAsC,+DAE/C,OAAS,+BAAAC,MAAmC,+DAG5C,IAAIC,EACAC,EACAC,EACAC,EACAC,EACAC,EAEJ,SAAS,uBAAwB,IAAM,CACrC,WAAW,IAAM,CACfL,EAAS,IAAIL,EACX,CAAC,EACD,8BACF,EACAM,EAAuB,IAAIL,EAA0B,CAAC,CAAc,EACpEM,EAAa,IAAIL,EAAyBI,CAAoB,EAC9DE,EAA0B,IAAIL,EAC5B,CAAC,CACH,EACAM,EAAgB,IAAIL,EAA4BI,CAAuB,EACvEE,EAAiB,IAAIZ,EAA4B,IAAMO,CAAM,CAC/D,CAAC,EAED,GAAG,wCAAyC,IAAM,CAEhD,MAAMM,EAAW,CAAC,GAAG,MAAM,EAAE,EAAE,KAAK,CAAC,EAAE,IAAKC,GAAO,CACjD,MAAMC,EAAUhB,EACd,CAAE,GAAIe,EAAG,SAAS,CAAE,EACpB,IAAMP,EACNE,EACAE,EACAb,CACF,EACA,UAAG,MAAMiB,EAAS,OAAO,EAClBA,CACT,CAAC,EACDF,EAAS,QAASE,GAAYH,EAAe,iBAAiBG,CAAO,CAAC,EACtD,IAAId,EAAqBW,CAAc,EAE/C,QAAQ,EAEhBC,EAAS,QAASE,GAAY,CAC5B,OAAOA,EAAQ,KAAK,EAAE,iBAAiB,CACzC,CAAC,CACH,CAAC,CACH,CAAC",
6
- "names": ["DEVICE_SESSION_REFRESHER_DEFAULT_OPTIONS", "deviceSessionStubBuilder", "DefaultDeviceSessionService", "CloseSessionsUseCase", "DefaultLoggerPublisherService", "AxiosManagerApiDataSource", "DefaultManagerApiService", "DefaultSecureChannelDataSource", "DefaultSecureChannelService", "logger", "managerApiDataSource", "managerApi", "secureChannelDataSource", "secureChannel", "sessionService", "sessions", "id", "session"]
4
+ "sourcesContent": ["import { type DmkConfig } from \"@api/DmkConfig\";\nimport { type LoggerPublisherService } from \"@api/logger-publisher/service/LoggerPublisherService\";\nimport { DEVICE_SESSION_REFRESHER_DEFAULT_OPTIONS } from \"@internal/device-session/data/DeviceSessionRefresherConst\";\nimport { deviceSessionStubBuilder } from \"@internal/device-session/model/DeviceSession.stub\";\nimport { DefaultDeviceSessionService } from \"@internal/device-session/service/DefaultDeviceSessionService\";\nimport { type DeviceSessionService } from \"@internal/device-session/service/DeviceSessionService\";\nimport { CloseSessionsUseCase } from \"@internal/device-session/use-case/CloseSessionsUseCase\";\nimport { DefaultLoggerPublisherService } from \"@internal/logger-publisher/service/DefaultLoggerPublisherService\";\nimport { AxiosManagerApiDataSource } from \"@internal/manager-api/data/AxiosManagerApiDataSource\";\nimport { type ManagerApiDataSource } from \"@internal/manager-api/data/ManagerApiDataSource\";\nimport { DefaultManagerApiService } from \"@internal/manager-api/service/DefaultManagerApiService\";\nimport { type ManagerApiService } from \"@internal/manager-api/service/ManagerApiService\";\nimport { DefaultSecureChannelDataSource } from \"@internal/secure-channel/data/DefaultSecureChannelDataSource\";\nimport { type SecureChannelDataSource } from \"@internal/secure-channel/data/SecureChannelDataSource\";\nimport { DefaultSecureChannelService } from \"@internal/secure-channel/service/DefaultSecureChannelService\";\nimport { type SecureChannelService } from \"@internal/secure-channel/service/SecureChannelService\";\nimport { DefaultTransportService } from \"@internal/transport/service/__mocks__/DefaultTransportService\";\n\nlet logger: LoggerPublisherService;\nlet managerApiDataSource: ManagerApiDataSource;\nlet managerApi: ManagerApiService;\nlet secureChannelDataSource: SecureChannelDataSource;\nlet secureChannel: SecureChannelService;\nlet sessionService: DeviceSessionService;\nlet transportService: DefaultTransportService;\n\n// @TODO Fix this test with vi.spyOn session close [SNAPSHOT PURPOSE]\ndescribe(\"CloseSessionsUseCase\", () => {\n beforeEach(() => {\n logger = new DefaultLoggerPublisherService(\n [],\n \"close-sessions-use-case-test\",\n );\n managerApiDataSource = new AxiosManagerApiDataSource({} as DmkConfig);\n managerApi = new DefaultManagerApiService(managerApiDataSource);\n secureChannelDataSource = new DefaultSecureChannelDataSource(\n {} as DmkConfig,\n );\n secureChannel = new DefaultSecureChannelService(secureChannelDataSource);\n sessionService = new DefaultDeviceSessionService(() => logger);\n transportService = new DefaultTransportService();\n });\n\n it(\"should be able to close every session\", () => {\n //given\n const sessions = [...Array(10).keys()].map((id) => {\n const session = deviceSessionStubBuilder(\n { id: id.toString() },\n () => logger,\n managerApi,\n secureChannel,\n DEVICE_SESSION_REFRESHER_DEFAULT_OPTIONS,\n );\n vi.spyOn(session, \"close\");\n return session;\n });\n sessions.forEach((session) => sessionService.addDeviceSession(session));\n const useCase = new CloseSessionsUseCase(sessionService, transportService);\n //when\n useCase.execute();\n //then\n for (const session of sessionService.getDeviceSessions()) {\n expect(session.close).toHaveBeenCalled();\n }\n });\n});\n"],
5
+ "mappings": "AAEA,OAAS,4CAAAA,MAAgD,4DACzD,OAAS,4BAAAC,MAAgC,oDACzC,OAAS,+BAAAC,MAAmC,+DAE5C,OAAS,wBAAAC,MAA4B,yDACrC,OAAS,iCAAAC,MAAqC,mEAC9C,OAAS,6BAAAC,MAAiC,uDAE1C,OAAS,4BAAAC,MAAgC,yDAEzC,OAAS,kCAAAC,MAAsC,+DAE/C,OAAS,+BAAAC,MAAmC,+DAE5C,OAAS,2BAAAC,MAA+B,gEAExC,IAAIC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EAGJ,SAAS,uBAAwB,IAAM,CACrC,WAAW,IAAM,CACfN,EAAS,IAAIN,EACX,CAAC,EACD,8BACF,EACAO,EAAuB,IAAIN,EAA0B,CAAC,CAAc,EACpEO,EAAa,IAAIN,EAAyBK,CAAoB,EAC9DE,EAA0B,IAAIN,EAC5B,CAAC,CACH,EACAO,EAAgB,IAAIN,EAA4BK,CAAuB,EACvEE,EAAiB,IAAIb,EAA4B,IAAMQ,CAAM,EAC7DM,EAAmB,IAAIP,CACzB,CAAC,EAED,GAAG,wCAAyC,IAAM,CAE/B,CAAC,GAAG,MAAM,EAAE,EAAE,KAAK,CAAC,EAAE,IAAKQ,GAAO,CACjD,MAAMC,EAAUjB,EACd,CAAE,GAAIgB,EAAG,SAAS,CAAE,EACpB,IAAMP,EACNE,EACAE,EACAd,CACF,EACA,UAAG,MAAMkB,EAAS,OAAO,EAClBA,CACT,CAAC,EACQ,QAASA,GAAYH,EAAe,iBAAiBG,CAAO,CAAC,EACtD,IAAIf,EAAqBY,EAAgBC,CAAgB,EAEjE,QAAQ,EAEhB,UAAWE,KAAWH,EAAe,kBAAkB,EACrD,OAAOG,EAAQ,KAAK,EAAE,iBAAiB,CAE3C,CAAC,CACH,CAAC",
6
+ "names": ["DEVICE_SESSION_REFRESHER_DEFAULT_OPTIONS", "deviceSessionStubBuilder", "DefaultDeviceSessionService", "CloseSessionsUseCase", "DefaultLoggerPublisherService", "AxiosManagerApiDataSource", "DefaultManagerApiService", "DefaultSecureChannelDataSource", "DefaultSecureChannelService", "DefaultTransportService", "logger", "managerApiDataSource", "managerApi", "secureChannelDataSource", "secureChannel", "sessionService", "transportService", "id", "session"]
7
7
  }
@@ -1,2 +1,2 @@
1
- var m=Object.defineProperty;var d=Object.getOwnPropertyDescriptor;var c=(i,r,o,t)=>{for(var e=t>1?void 0:t?d(r,o):r,p=i.length-1,n;p>=0;p--)(n=i[p])&&(e=(t?n(r,o,e):n(e))||e);return t&&e&&m(r,o,e),e},a=(i,r)=>(o,t)=>r(o,t,i);import{inject as D,injectable as f}from"inversify";import{map as v,mergeMap as l,of as T}from"rxjs";import{DeviceModel as u}from"../../../api/device/DeviceModel";import{TransportNotSupportedError as g}from"../../../api/transport/model/Errors";import{transportDiTypes as h}from"../../transport/di/transportDiTypes";let s=class{constructor(r){this._transportService=r}mapDiscoveredDevice(r){const o=new u({id:r.id,model:r.deviceModel.id,name:r.deviceModel.productName});return{id:r.id,deviceModel:o,transport:r.transport}}execute({transport:r}){if(!r){const t=this._transportService.getAllTransports();return T(...t).pipe(l(e=>e.startDiscovering().pipe(v(p=>this.mapDiscoveredDevice(p)))))}return this._transportService.getTransport(r).caseOf({Just:t=>t.startDiscovering().pipe(v(e=>this.mapDiscoveredDevice(e))),Nothing:()=>{throw new g(new Error("Unknown transport"))}})}};s=c([f(),a(0,D(h.TransportService))],s);export{s as StartDiscoveringUseCase};
1
+ var v=Object.defineProperty;var d=Object.getOwnPropertyDescriptor;var a=(i,r,o,t)=>{for(var e=t>1?void 0:t?d(r,o):r,s=i.length-1,n;s>=0;s--)(n=i[s])&&(e=(t?n(r,o,e):n(e))||e);return t&&e&&v(r,o,e),e},c=(i,r)=>(o,t)=>r(o,t,i);import{inject as D,injectable as f}from"inversify";import{map as m,mergeMap as l,of as T}from"rxjs";import{DeviceModel as u}from"../../../api/device/DeviceModel";import{TransportNotSupportedError as g}from"../../../api/transport/model/Errors";import{transportDiTypes as h}from"../../transport/di/transportDiTypes";let p=class{constructor(r){this._transportService=r}mapDiscoveredDevice(r){const o=new u({id:r.id,model:r.deviceModel.id,name:r.deviceModel.productName});return{id:r.id,deviceModel:o,transport:r.transport,name:r.name||o.name,rssi:r.rssi}}execute({transport:r}){if(!r){const t=this._transportService.getAllTransports();return T(...t).pipe(l(e=>e.startDiscovering().pipe(m(s=>this.mapDiscoveredDevice(s)))))}return this._transportService.getTransport(r).caseOf({Just:t=>t.startDiscovering().pipe(m(e=>this.mapDiscoveredDevice(e))),Nothing:()=>{throw new g(new Error("Unknown transport"))}})}};p=a([f(),c(0,D(h.TransportService))],p);export{p as StartDiscoveringUseCase};
2
2
  //# sourceMappingURL=StartDiscoveringUseCase.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../src/internal/discovery/use-case/StartDiscoveringUseCase.ts"],
4
- "sourcesContent": ["import { inject, injectable } from \"inversify\";\nimport { map, mergeMap, Observable, of } from \"rxjs\";\n\nimport { DeviceModel } from \"@api/device/DeviceModel\";\nimport { DiscoveredDevice } from \"@api/transport/model/DiscoveredDevice\";\nimport { TransportNotSupportedError } from \"@api/transport/model/Errors\";\nimport { TransportDiscoveredDevice } from \"@api/transport/model/TransportDiscoveredDevice\";\nimport { TransportIdentifier } from \"@api/transport/model/TransportIdentifier\";\nimport { transportDiTypes } from \"@internal/transport/di/transportDiTypes\";\nimport { type TransportService } from \"@internal/transport/service/TransportService\";\n\nexport type StartDiscoveringUseCaseArgs = {\n /**\n * Identifier of the transport to start discovering devices.\n * Can be undefined to discover all available transports in parralel.\n */\n transport?: TransportIdentifier;\n};\n\n/**\n * Starts discovering devices connected.\n *\n * For the WebHID implementation, this use-case needs to be called as a result of an user interaction (button \"click\" event for ex).\n */\n@injectable()\nexport class StartDiscoveringUseCase {\n constructor(\n @inject(transportDiTypes.TransportService)\n private readonly _transportService: TransportService,\n ) {}\n\n private mapDiscoveredDevice(\n device: TransportDiscoveredDevice,\n ): DiscoveredDevice {\n const deviceModel = new DeviceModel({\n id: device.id,\n model: device.deviceModel.id,\n name: device.deviceModel.productName,\n });\n return {\n id: device.id,\n deviceModel,\n transport: device.transport,\n };\n }\n\n execute({\n transport,\n }: StartDiscoveringUseCaseArgs): Observable<DiscoveredDevice> {\n if (!transport) {\n const transports = this._transportService.getAllTransports();\n return of(...transports).pipe(\n mergeMap((instance) =>\n instance\n .startDiscovering()\n .pipe(map((device) => this.mapDiscoveredDevice(device))),\n ),\n );\n }\n\n const instance = this._transportService.getTransport(transport);\n\n return instance.caseOf({\n Just: (t) => {\n return t\n .startDiscovering()\n .pipe(map((device) => this.mapDiscoveredDevice(device)));\n },\n Nothing: () => {\n throw new TransportNotSupportedError(new Error(\"Unknown transport\"));\n },\n });\n }\n}\n"],
5
- "mappings": "iOAAA,OAAS,UAAAA,EAAQ,cAAAC,MAAkB,YACnC,OAAS,OAAAC,EAAK,YAAAC,EAAsB,MAAAC,MAAU,OAE9C,OAAS,eAAAC,MAAmB,0BAE5B,OAAS,8BAAAC,MAAkC,8BAG3C,OAAS,oBAAAC,MAAwB,0CAiB1B,IAAMC,EAAN,KAA8B,CACnC,YAEmBC,EACjB,CADiB,uBAAAA,CAChB,CAEK,oBACNC,EACkB,CAClB,MAAMC,EAAc,IAAIC,EAAY,CAClC,GAAIF,EAAO,GACX,MAAOA,EAAO,YAAY,GAC1B,KAAMA,EAAO,YAAY,WAC3B,CAAC,EACD,MAAO,CACL,GAAIA,EAAO,GACX,YAAAC,EACA,UAAWD,EAAO,SACpB,CACF,CAEA,QAAQ,CACN,UAAAG,CACF,EAA8D,CAC5D,GAAI,CAACA,EAAW,CACd,MAAMC,EAAa,KAAK,kBAAkB,iBAAiB,EAC3D,OAAOC,EAAG,GAAGD,CAAU,EAAE,KACvBE,EAAUC,GACRA,EACG,iBAAiB,EACjB,KAAKC,EAAKR,GAAW,KAAK,oBAAoBA,CAAM,CAAC,CAAC,CAC3D,CACF,CACF,CAIA,OAFiB,KAAK,kBAAkB,aAAaG,CAAS,EAE9C,OAAO,CACrB,KAAO,GACE,EACJ,iBAAiB,EACjB,KAAKK,EAAKR,GAAW,KAAK,oBAAoBA,CAAM,CAAC,CAAC,EAE3D,QAAS,IAAM,CACb,MAAM,IAAIS,EAA2B,IAAI,MAAM,mBAAmB,CAAC,CACrE,CACF,CAAC,CACH,CACF,EAhDaX,EAANY,EAAA,CADNC,EAAW,EAGPC,EAAA,EAAAC,EAAOC,EAAiB,gBAAgB,IAFhChB",
4
+ "sourcesContent": ["import { inject, injectable } from \"inversify\";\nimport { map, mergeMap, Observable, of } from \"rxjs\";\n\nimport { DeviceModel } from \"@api/device/DeviceModel\";\nimport { DiscoveredDevice } from \"@api/transport/model/DiscoveredDevice\";\nimport { TransportNotSupportedError } from \"@api/transport/model/Errors\";\nimport { TransportDiscoveredDevice } from \"@api/transport/model/TransportDiscoveredDevice\";\nimport { TransportIdentifier } from \"@api/transport/model/TransportIdentifier\";\nimport { transportDiTypes } from \"@internal/transport/di/transportDiTypes\";\nimport { type TransportService } from \"@internal/transport/service/TransportService\";\n\nexport type StartDiscoveringUseCaseArgs = {\n /**\n * Identifier of the transport to start discovering devices.\n * Can be undefined to discover all available transports in parralel.\n */\n transport?: TransportIdentifier;\n};\n\n/**\n * Starts discovering devices connected.\n *\n * For the WebHID implementation, this use-case needs to be called as a result of an user interaction (button \"click\" event for ex).\n */\n@injectable()\nexport class StartDiscoveringUseCase {\n constructor(\n @inject(transportDiTypes.TransportService)\n private readonly _transportService: TransportService,\n ) {}\n\n private mapDiscoveredDevice(\n device: TransportDiscoveredDevice,\n ): DiscoveredDevice {\n const deviceModel = new DeviceModel({\n id: device.id,\n model: device.deviceModel.id,\n name: device.deviceModel.productName,\n });\n return {\n id: device.id,\n deviceModel,\n transport: device.transport,\n name: device.name || deviceModel.name,\n rssi: device.rssi,\n };\n }\n\n execute({\n transport,\n }: StartDiscoveringUseCaseArgs): Observable<DiscoveredDevice> {\n if (!transport) {\n const transports = this._transportService.getAllTransports();\n return of(...transports).pipe(\n mergeMap((instance) =>\n instance\n .startDiscovering()\n .pipe(map((device) => this.mapDiscoveredDevice(device))),\n ),\n );\n }\n\n const instance = this._transportService.getTransport(transport);\n\n return instance.caseOf({\n Just: (t) => {\n return t\n .startDiscovering()\n .pipe(map((device) => this.mapDiscoveredDevice(device)));\n },\n Nothing: () => {\n throw new TransportNotSupportedError(new Error(\"Unknown transport\"));\n },\n });\n }\n}\n"],
5
+ "mappings": "iOAAA,OAAS,UAAAA,EAAQ,cAAAC,MAAkB,YACnC,OAAS,OAAAC,EAAK,YAAAC,EAAsB,MAAAC,MAAU,OAE9C,OAAS,eAAAC,MAAmB,0BAE5B,OAAS,8BAAAC,MAAkC,8BAG3C,OAAS,oBAAAC,MAAwB,0CAiB1B,IAAMC,EAAN,KAA8B,CACnC,YAEmBC,EACjB,CADiB,uBAAAA,CAChB,CAEK,oBACNC,EACkB,CAClB,MAAMC,EAAc,IAAIC,EAAY,CAClC,GAAIF,EAAO,GACX,MAAOA,EAAO,YAAY,GAC1B,KAAMA,EAAO,YAAY,WAC3B,CAAC,EACD,MAAO,CACL,GAAIA,EAAO,GACX,YAAAC,EACA,UAAWD,EAAO,UAClB,KAAMA,EAAO,MAAQC,EAAY,KACjC,KAAMD,EAAO,IACf,CACF,CAEA,QAAQ,CACN,UAAAG,CACF,EAA8D,CAC5D,GAAI,CAACA,EAAW,CACd,MAAMC,EAAa,KAAK,kBAAkB,iBAAiB,EAC3D,OAAOC,EAAG,GAAGD,CAAU,EAAE,KACvBE,EAAUC,GACRA,EACG,iBAAiB,EACjB,KAAKC,EAAKR,GAAW,KAAK,oBAAoBA,CAAM,CAAC,CAAC,CAC3D,CACF,CACF,CAIA,OAFiB,KAAK,kBAAkB,aAAaG,CAAS,EAE9C,OAAO,CACrB,KAAO,GACE,EACJ,iBAAiB,EACjB,KAAKK,EAAKR,GAAW,KAAK,oBAAoBA,CAAM,CAAC,CAAC,EAE3D,QAAS,IAAM,CACb,MAAM,IAAIS,EAA2B,IAAI,MAAM,mBAAmB,CAAC,CACrE,CACF,CAAC,CACH,CACF,EAlDaX,EAANY,EAAA,CADNC,EAAW,EAGPC,EAAA,EAAAC,EAAOC,EAAiB,gBAAgB,IAFhChB",
6
6
  "names": ["inject", "injectable", "map", "mergeMap", "of", "DeviceModel", "TransportNotSupportedError", "transportDiTypes", "StartDiscoveringUseCase", "_transportService", "device", "deviceModel", "DeviceModel", "transport", "transports", "of", "mergeMap", "instance", "map", "TransportNotSupportedError", "__decorateClass", "injectable", "__decorateParam", "inject", "transportDiTypes"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import{Maybe as d}from"purify-ts";import{of as p}from"rxjs";import{DeviceModel as v}from"../../../api/device/DeviceModel";import{TransportMock as m}from"../../../api/transport/model/__mocks__/TransportMock";import{DefaultTransportService as l}from"../../transport/service/DefaultTransportService";import{StartDiscoveringUseCase as D}from"./StartDiscoveringUseCase";vi.mock("@internal/transport/service/DefaultTransportService");let r,o;describe("StartDiscoveringUseCase",()=>{const c={id:"internal-discovered-device-id",deviceModel:{id:"nanoSP",productName:"productName"},transport:"USB"};beforeEach(()=>{r=new m,o=new l}),afterEach(()=>{vi.restoreAllMocks()}),test("If connect use case encounter an error, return it",()=>new Promise((s,t)=>{const i=vi.fn(()=>p(c));vi.spyOn(r,"startDiscovering").mockImplementation(i),vi.spyOn(o,"getTransport").mockReturnValue(d.of(r));const n=new D(o).execute({transport:"USB"});expect(i).toHaveBeenCalled(),n.subscribe({next:e=>{try{expect(e).toStrictEqual({id:"internal-discovered-device-id",transport:"USB",deviceModel:new v({id:"internal-discovered-device-id",model:"nanoSP",name:"productName"})}),s()}catch(a){t(a)}},error:e=>{t(e)}})}))});
1
+ import{Maybe as d}from"purify-ts";import{of as p}from"rxjs";import{DeviceModel as v}from"../../../api/device/DeviceModel";import{TransportMock as m}from"../../../api/transport/model/__mocks__/TransportMock";import{DefaultTransportService as l}from"../../transport/service/DefaultTransportService";import{StartDiscoveringUseCase as D}from"./StartDiscoveringUseCase";vi.mock("@internal/transport/service/DefaultTransportService");let r,o;describe("StartDiscoveringUseCase",()=>{const s={id:"internal-discovered-device-id",deviceModel:{id:"nanoSP",productName:"productName"},transport:"USB",rssi:void 0};beforeEach(()=>{r=new m,o=new l}),afterEach(()=>{vi.restoreAllMocks()}),test("If connect use case encounter an error, return it",()=>new Promise((c,t)=>{const i=vi.fn(()=>p(s));vi.spyOn(r,"startDiscovering").mockImplementation(i),vi.spyOn(o,"getTransport").mockReturnValue(d.of(r));const n=new D(o).execute({transport:"USB"});expect(i).toHaveBeenCalled(),n.subscribe({next:e=>{try{expect(e).toStrictEqual({id:"internal-discovered-device-id",transport:"USB",name:"productName",deviceModel:new v({id:"internal-discovered-device-id",model:"nanoSP",name:"productName"}),rssi:void 0}),c()}catch(a){t(a)}},error:e=>{t(e)}})}))});
2
2
  //# sourceMappingURL=StartDiscoveringUseCase.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../src/internal/discovery/use-case/StartDiscoveringUseCase.test.ts"],
4
- "sourcesContent": ["import { Maybe } from \"purify-ts\";\nimport { of } from \"rxjs\";\n\nimport { DeviceModel } from \"@api/device/DeviceModel\";\nimport { type TransportDeviceModel } from \"@api/device-model/model/DeviceModel\";\nimport { TransportMock } from \"@api/transport/model/__mocks__/TransportMock\";\nimport { type TransportDiscoveredDevice } from \"@api/transport/model/TransportDiscoveredDevice\";\nimport {\n type DeviceModelId,\n type DiscoveredDevice,\n type Transport,\n} from \"@api/types\";\nimport { DefaultTransportService } from \"@internal/transport/service/DefaultTransportService\";\nimport { type TransportService } from \"@internal/transport/service/TransportService\";\n\nimport { StartDiscoveringUseCase } from \"./StartDiscoveringUseCase\";\n\nvi.mock(\"@internal/transport/service/DefaultTransportService\");\n\nlet transport: Transport;\nlet transportService: TransportService;\n\ndescribe(\"StartDiscoveringUseCase\", () => {\n const stubDiscoveredDevice: TransportDiscoveredDevice = {\n id: \"internal-discovered-device-id\",\n deviceModel: {\n id: \"nanoSP\" as DeviceModelId,\n productName: \"productName\",\n } as TransportDeviceModel,\n transport: \"USB\",\n };\n\n beforeEach(() => {\n transport = new TransportMock();\n // @ts-expect-error mock\n transportService = new DefaultTransportService();\n });\n\n afterEach(() => {\n vi.restoreAllMocks();\n });\n\n test(\"If connect use case encounter an error, return it\", () =>\n new Promise<void>((resolve, reject) => {\n const mockedStartDiscovering = vi.fn(() => {\n return of(stubDiscoveredDevice);\n });\n vi.spyOn(transport, \"startDiscovering\").mockImplementation(\n mockedStartDiscovering,\n );\n\n vi.spyOn(transportService, \"getTransport\").mockReturnValue(\n Maybe.of(transport),\n );\n\n const usecase = new StartDiscoveringUseCase(transportService);\n\n const discover = usecase.execute({ transport: \"USB\" });\n\n expect(mockedStartDiscovering).toHaveBeenCalled();\n\n discover.subscribe({\n next: (discoveredDevice) => {\n try {\n expect(discoveredDevice).toStrictEqual({\n id: \"internal-discovered-device-id\",\n transport: \"USB\",\n deviceModel: new DeviceModel({\n id: \"internal-discovered-device-id\",\n model: \"nanoSP\" as DeviceModelId,\n name: \"productName\",\n }),\n } as DiscoveredDevice);\n resolve();\n } catch (error) {\n reject(error);\n }\n },\n error: (error) => {\n reject(error);\n },\n });\n }));\n});\n"],
5
- "mappings": "AAAA,OAAS,SAAAA,MAAa,YACtB,OAAS,MAAAC,MAAU,OAEnB,OAAS,eAAAC,MAAmB,0BAE5B,OAAS,iBAAAC,MAAqB,+CAO9B,OAAS,2BAAAC,MAA+B,sDAGxC,OAAS,2BAAAC,MAA+B,4BAExC,GAAG,KAAK,qDAAqD,EAE7D,IAAIC,EACAC,EAEJ,SAAS,0BAA2B,IAAM,CACxC,MAAMC,EAAkD,CACtD,GAAI,gCACJ,YAAa,CACX,GAAI,SACJ,YAAa,aACf,EACA,UAAW,KACb,EAEA,WAAW,IAAM,CACfF,EAAY,IAAIH,EAEhBI,EAAmB,IAAIH,CACzB,CAAC,EAED,UAAU,IAAM,CACd,GAAG,gBAAgB,CACrB,CAAC,EAED,KAAK,oDAAqD,IACxD,IAAI,QAAc,CAACK,EAASC,IAAW,CACrC,MAAMC,EAAyB,GAAG,GAAG,IAC5BV,EAAGO,CAAoB,CAC/B,EACD,GAAG,MAAMF,EAAW,kBAAkB,EAAE,mBACtCK,CACF,EAEA,GAAG,MAAMJ,EAAkB,cAAc,EAAE,gBACzCP,EAAM,GAAGM,CAAS,CACpB,EAIA,MAAMM,EAFU,IAAIP,EAAwBE,CAAgB,EAEnC,QAAQ,CAAE,UAAW,KAAM,CAAC,EAErD,OAAOI,CAAsB,EAAE,iBAAiB,EAEhDC,EAAS,UAAU,CACjB,KAAOC,GAAqB,CAC1B,GAAI,CACF,OAAOA,CAAgB,EAAE,cAAc,CACrC,GAAI,gCACJ,UAAW,MACX,YAAa,IAAIX,EAAY,CAC3B,GAAI,gCACJ,MAAO,SACP,KAAM,aACR,CAAC,CACH,CAAqB,EACrBO,EAAQ,CACV,OAASK,EAAO,CACdJ,EAAOI,CAAK,CACd,CACF,EACA,MAAQA,GAAU,CAChBJ,EAAOI,CAAK,CACd,CACF,CAAC,CACH,CAAC,CAAC,CACN,CAAC",
4
+ "sourcesContent": ["import { Maybe } from \"purify-ts\";\nimport { of } from \"rxjs\";\n\nimport { DeviceModel } from \"@api/device/DeviceModel\";\nimport { type TransportDeviceModel } from \"@api/device-model/model/DeviceModel\";\nimport { TransportMock } from \"@api/transport/model/__mocks__/TransportMock\";\nimport { type TransportDiscoveredDevice } from \"@api/transport/model/TransportDiscoveredDevice\";\nimport {\n type DeviceModelId,\n type DiscoveredDevice,\n type Transport,\n} from \"@api/types\";\nimport { DefaultTransportService } from \"@internal/transport/service/DefaultTransportService\";\nimport { type TransportService } from \"@internal/transport/service/TransportService\";\n\nimport { StartDiscoveringUseCase } from \"./StartDiscoveringUseCase\";\n\nvi.mock(\"@internal/transport/service/DefaultTransportService\");\n\nlet transport: Transport;\nlet transportService: TransportService;\n\ndescribe(\"StartDiscoveringUseCase\", () => {\n const stubDiscoveredDevice: TransportDiscoveredDevice = {\n id: \"internal-discovered-device-id\",\n deviceModel: {\n id: \"nanoSP\" as DeviceModelId,\n productName: \"productName\",\n } as TransportDeviceModel,\n transport: \"USB\",\n rssi: undefined,\n };\n\n beforeEach(() => {\n transport = new TransportMock();\n // @ts-expect-error mock\n transportService = new DefaultTransportService();\n });\n\n afterEach(() => {\n vi.restoreAllMocks();\n });\n\n test(\"If connect use case encounter an error, return it\", () =>\n new Promise<void>((resolve, reject) => {\n const mockedStartDiscovering = vi.fn(() => {\n return of(stubDiscoveredDevice);\n });\n vi.spyOn(transport, \"startDiscovering\").mockImplementation(\n mockedStartDiscovering,\n );\n\n vi.spyOn(transportService, \"getTransport\").mockReturnValue(\n Maybe.of(transport),\n );\n\n const usecase = new StartDiscoveringUseCase(transportService);\n\n const discover = usecase.execute({ transport: \"USB\" });\n\n expect(mockedStartDiscovering).toHaveBeenCalled();\n\n discover.subscribe({\n next: (discoveredDevice) => {\n try {\n expect(discoveredDevice).toStrictEqual({\n id: \"internal-discovered-device-id\",\n transport: \"USB\",\n name: \"productName\",\n deviceModel: new DeviceModel({\n id: \"internal-discovered-device-id\",\n model: \"nanoSP\" as DeviceModelId,\n name: \"productName\",\n }),\n rssi: undefined,\n } as DiscoveredDevice);\n resolve();\n } catch (error) {\n reject(error);\n }\n },\n error: (error) => {\n reject(error);\n },\n });\n }));\n});\n"],
5
+ "mappings": "AAAA,OAAS,SAAAA,MAAa,YACtB,OAAS,MAAAC,MAAU,OAEnB,OAAS,eAAAC,MAAmB,0BAE5B,OAAS,iBAAAC,MAAqB,+CAO9B,OAAS,2BAAAC,MAA+B,sDAGxC,OAAS,2BAAAC,MAA+B,4BAExC,GAAG,KAAK,qDAAqD,EAE7D,IAAIC,EACAC,EAEJ,SAAS,0BAA2B,IAAM,CACxC,MAAMC,EAAkD,CACtD,GAAI,gCACJ,YAAa,CACX,GAAI,SACJ,YAAa,aACf,EACA,UAAW,MACX,KAAM,MACR,EAEA,WAAW,IAAM,CACfF,EAAY,IAAIH,EAEhBI,EAAmB,IAAIH,CACzB,CAAC,EAED,UAAU,IAAM,CACd,GAAG,gBAAgB,CACrB,CAAC,EAED,KAAK,oDAAqD,IACxD,IAAI,QAAc,CAACK,EAASC,IAAW,CACrC,MAAMC,EAAyB,GAAG,GAAG,IAC5BV,EAAGO,CAAoB,CAC/B,EACD,GAAG,MAAMF,EAAW,kBAAkB,EAAE,mBACtCK,CACF,EAEA,GAAG,MAAMJ,EAAkB,cAAc,EAAE,gBACzCP,EAAM,GAAGM,CAAS,CACpB,EAIA,MAAMM,EAFU,IAAIP,EAAwBE,CAAgB,EAEnC,QAAQ,CAAE,UAAW,KAAM,CAAC,EAErD,OAAOI,CAAsB,EAAE,iBAAiB,EAEhDC,EAAS,UAAU,CACjB,KAAOC,GAAqB,CAC1B,GAAI,CACF,OAAOA,CAAgB,EAAE,cAAc,CACrC,GAAI,gCACJ,UAAW,MACX,KAAM,cACN,YAAa,IAAIX,EAAY,CAC3B,GAAI,gCACJ,MAAO,SACP,KAAM,aACR,CAAC,EACD,KAAM,MACR,CAAqB,EACrBO,EAAQ,CACV,OAASK,EAAO,CACdJ,EAAOI,CAAK,CACd,CACF,EACA,MAAQA,GAAU,CAChBJ,EAAOI,CAAK,CACd,CACF,CAAC,CACH,CAAC,CAAC,CACN,CAAC",
6
6
  "names": ["Maybe", "of", "DeviceModel", "TransportMock", "DefaultTransportService", "StartDiscoveringUseCase", "transport", "transportService", "stubDiscoveredDevice", "resolve", "reject", "mockedStartDiscovering", "discover", "discoveredDevice", "error"]
7
7
  }
@@ -1,2 +1,2 @@
1
- var p=Object.defineProperty;var a=Object.getOwnPropertyDescriptor;var v=(t,r,i,o)=>{for(var e=o>1?void 0:o?a(r,i):r,c=t.length-1,s;c>=0;c--)(s=t[c])&&(e=(o?s(r,i,e):s(e))||e);return o&&e&&p(r,i,e),e},g=(t,r)=>(i,o)=>r(i,o,t);import{inject as S,injectable as d}from"inversify";import{deviceSessionTypes as m}from"../../device-session/di/deviceSessionTypes";import{loggerTypes as l}from"../../logger-publisher/di/loggerTypes";let n=class{_sessionService;_logger;constructor(r,i){this._sessionService=r,this._logger=i("SendApduUseCase")}async execute({sessionId:r,apdu:i}){return this._sessionService.getDeviceSessionById(r).caseOf({Right:async e=>(await e.sendApdu(i)).caseOf({Right:s=>s,Left:s=>{throw this._logger.error("Error sending APDU",{data:{sessionId:r,apdu:i,error:s}}),s}}),Left:e=>{throw this._logger.error("Error getting deviceSession",{data:{error:e}}),e}})}};n=v([d(),g(0,S(m.DeviceSessionService)),g(1,S(l.LoggerPublisherServiceFactory))],n);export{n as SendApduUseCase};
1
+ var a=Object.defineProperty;var d=Object.getOwnPropertyDescriptor;var S=(t,e,r,i)=>{for(var s=i>1?void 0:i?d(e,r):e,o=t.length-1,n;o>=0;o--)(n=t[o])&&(s=(i?n(e,r,s):n(s))||s);return i&&s&&a(e,r,s),s},v=(t,e)=>(r,i)=>e(r,i,t);import{inject as p,injectable as m}from"inversify";import{deviceSessionTypes as l}from"../../device-session/di/deviceSessionTypes";import{loggerTypes as h}from"../../logger-publisher/di/loggerTypes";let g=class{_sessionService;_logger;constructor(e,r){this._sessionService=e,this._logger=r("SendApduUseCase")}async execute({sessionId:e,apdu:r,abortTimeout:i}){return this._sessionService.getDeviceSessionById(e).caseOf({Right:async o=>(await o.sendApdu(r,{abortTimeout:i})).caseOf({Right:c=>c,Left:c=>{throw this._logger.error("Error sending APDU",{data:{sessionId:e,apdu:r,error:c}}),c}}),Left:o=>{throw this._logger.error("Error getting deviceSession",{data:{error:o}}),o}})}};g=S([m(),v(0,p(l.DeviceSessionService)),v(1,p(h.LoggerPublisherServiceFactory))],g);export{g as SendApduUseCase};
2
2
  //# sourceMappingURL=SendApduUseCase.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../src/internal/send/use-case/SendApduUseCase.ts"],
4
- "sourcesContent": ["import { inject, injectable } from \"inversify\";\n\nimport { ApduResponse } from \"@api/device-session/ApduResponse\";\nimport { type LoggerPublisherService } from \"@api/logger-publisher/service/LoggerPublisherService\";\nimport { DeviceSessionId } from \"@api/types\";\nimport { deviceSessionTypes } from \"@internal/device-session/di/deviceSessionTypes\";\nimport type { DeviceSessionService } from \"@internal/device-session/service/DeviceSessionService\";\nimport { loggerTypes } from \"@internal/logger-publisher/di/loggerTypes\";\n\n/**\n * The arguments for the SendApduUseCase.\n */\nexport type SendApduUseCaseArgs = {\n /**\n * Device session identifier from `DeviceManagementKit.connect`.\n */\n sessionId: DeviceSessionId;\n /**\n * Raw APDU to send to the device.\n */\n apdu: Uint8Array;\n};\n\n/**\n * Sends an APDU to a connected device.\n */\n@injectable()\nexport class SendApduUseCase {\n private readonly _sessionService: DeviceSessionService;\n private readonly _logger: LoggerPublisherService;\n\n constructor(\n @inject(deviceSessionTypes.DeviceSessionService)\n sessionService: DeviceSessionService,\n @inject(loggerTypes.LoggerPublisherServiceFactory)\n loggerFactory: (tag: string) => LoggerPublisherService,\n ) {\n this._sessionService = sessionService;\n this._logger = loggerFactory(\"SendApduUseCase\");\n }\n\n async execute({\n sessionId,\n apdu,\n }: SendApduUseCaseArgs): Promise<ApduResponse> {\n const deviceSessionOrError =\n this._sessionService.getDeviceSessionById(sessionId);\n\n return deviceSessionOrError.caseOf({\n // Case device session found\n Right: async (deviceSession) => {\n const response = await deviceSession.sendApdu(apdu);\n return response.caseOf({\n // Case APDU sent and response received successfully\n Right: (data) => data,\n // Case error sending or receiving APDU\n Left: (error) => {\n this._logger.error(\"Error sending APDU\", {\n data: { sessionId, apdu, error },\n });\n throw error;\n },\n });\n },\n // Case device session not found\n Left: (error) => {\n this._logger.error(\"Error getting deviceSession\", {\n data: { error },\n });\n throw error;\n },\n });\n }\n}\n"],
5
- "mappings": "iOAAA,OAAS,UAAAA,EAAQ,cAAAC,MAAkB,YAKnC,OAAS,sBAAAC,MAA0B,iDAEnC,OAAS,eAAAC,MAAmB,4CAoBrB,IAAMC,EAAN,KAAsB,CACV,gBACA,QAEjB,YAEEC,EAEAC,EACA,CACA,KAAK,gBAAkBD,EACvB,KAAK,QAAUC,EAAc,iBAAiB,CAChD,CAEA,MAAM,QAAQ,CACZ,UAAAC,EACA,KAAAC,CACF,EAA+C,CAI7C,OAFE,KAAK,gBAAgB,qBAAqBD,CAAS,EAEzB,OAAO,CAEjC,MAAO,MAAOE,IACK,MAAMA,EAAc,SAASD,CAAI,GAClC,OAAO,CAErB,MAAQE,GAASA,EAEjB,KAAOC,GAAU,CACf,WAAK,QAAQ,MAAM,qBAAsB,CACvC,KAAM,CAAE,UAAAJ,EAAW,KAAAC,EAAM,MAAAG,CAAM,CACjC,CAAC,EACKA,CACR,CACF,CAAC,EAGH,KAAOA,GAAU,CACf,WAAK,QAAQ,MAAM,8BAA+B,CAChD,KAAM,CAAE,MAAAA,CAAM,CAChB,CAAC,EACKA,CACR,CACF,CAAC,CACH,CACF,EA9CaP,EAANQ,EAAA,CADNC,EAAW,EAMPC,EAAA,EAAAC,EAAOC,EAAmB,oBAAoB,GAE9CF,EAAA,EAAAC,EAAOE,EAAY,6BAA6B,IAPxCb",
6
- "names": ["inject", "injectable", "deviceSessionTypes", "loggerTypes", "SendApduUseCase", "sessionService", "loggerFactory", "sessionId", "apdu", "deviceSession", "data", "error", "__decorateClass", "injectable", "__decorateParam", "inject", "deviceSessionTypes", "loggerTypes"]
4
+ "sourcesContent": ["import { inject, injectable } from \"inversify\";\n\nimport { ApduResponse } from \"@api/device-session/ApduResponse\";\nimport { type LoggerPublisherService } from \"@api/logger-publisher/service/LoggerPublisherService\";\nimport { DeviceSessionId } from \"@api/types\";\nimport { deviceSessionTypes } from \"@internal/device-session/di/deviceSessionTypes\";\nimport type { DeviceSessionService } from \"@internal/device-session/service/DeviceSessionService\";\nimport { loggerTypes } from \"@internal/logger-publisher/di/loggerTypes\";\n\n/**\n * The arguments for the SendApduUseCase.\n */\nexport type SendApduUseCaseArgs = {\n /**\n * Device session identifier from `DeviceManagementKit.connect`.\n */\n sessionId: DeviceSessionId;\n /**\n * Raw APDU to send to the device.\n */\n apdu: Uint8Array;\n /**\n * The time, in milliseconds, to wait before aborting an operation.\n */\n abortTimeout?: number;\n};\n\n/**\n * Sends an APDU to a connected device.\n */\n@injectable()\nexport class SendApduUseCase {\n private readonly _sessionService: DeviceSessionService;\n private readonly _logger: LoggerPublisherService;\n\n constructor(\n @inject(deviceSessionTypes.DeviceSessionService)\n sessionService: DeviceSessionService,\n @inject(loggerTypes.LoggerPublisherServiceFactory)\n loggerFactory: (tag: string) => LoggerPublisherService,\n ) {\n this._sessionService = sessionService;\n this._logger = loggerFactory(\"SendApduUseCase\");\n }\n\n async execute({\n sessionId,\n apdu,\n abortTimeout,\n }: SendApduUseCaseArgs): Promise<ApduResponse> {\n const deviceSessionOrError =\n this._sessionService.getDeviceSessionById(sessionId);\n\n return deviceSessionOrError.caseOf({\n // Case device session found\n Right: async (deviceSession) => {\n const response = await deviceSession.sendApdu(apdu, { abortTimeout });\n return response.caseOf({\n // Case APDU sent and response received successfully\n Right: (data) => data,\n // Case error sending or receiving APDU\n Left: (error) => {\n this._logger.error(\"Error sending APDU\", {\n data: { sessionId, apdu, error },\n });\n throw error;\n },\n });\n },\n // Case device session not found\n Left: (error) => {\n this._logger.error(\"Error getting deviceSession\", {\n data: { error },\n });\n throw error;\n },\n });\n }\n}\n"],
5
+ "mappings": "iOAAA,OAAS,UAAAA,EAAQ,cAAAC,MAAkB,YAKnC,OAAS,sBAAAC,MAA0B,iDAEnC,OAAS,eAAAC,MAAmB,4CAwBrB,IAAMC,EAAN,KAAsB,CACV,gBACA,QAEjB,YAEEC,EAEAC,EACA,CACA,KAAK,gBAAkBD,EACvB,KAAK,QAAUC,EAAc,iBAAiB,CAChD,CAEA,MAAM,QAAQ,CACZ,UAAAC,EACA,KAAAC,EACA,aAAAC,CACF,EAA+C,CAI7C,OAFE,KAAK,gBAAgB,qBAAqBF,CAAS,EAEzB,OAAO,CAEjC,MAAO,MAAOG,IACK,MAAMA,EAAc,SAASF,EAAM,CAAE,aAAAC,CAAa,CAAC,GACpD,OAAO,CAErB,MAAQE,GAASA,EAEjB,KAAOC,GAAU,CACf,WAAK,QAAQ,MAAM,qBAAsB,CACvC,KAAM,CAAE,UAAAL,EAAW,KAAAC,EAAM,MAAAI,CAAM,CACjC,CAAC,EACKA,CACR,CACF,CAAC,EAGH,KAAOA,GAAU,CACf,WAAK,QAAQ,MAAM,8BAA+B,CAChD,KAAM,CAAE,MAAAA,CAAM,CAChB,CAAC,EACKA,CACR,CACF,CAAC,CACH,CACF,EA/CaR,EAANS,EAAA,CADNC,EAAW,EAMPC,EAAA,EAAAC,EAAOC,EAAmB,oBAAoB,GAE9CF,EAAA,EAAAC,EAAOE,EAAY,6BAA6B,IAPxCd",
6
+ "names": ["inject", "injectable", "deviceSessionTypes", "loggerTypes", "SendApduUseCase", "sessionService", "loggerFactory", "sessionId", "apdu", "abortTimeout", "deviceSession", "data", "error", "__decorateClass", "injectable", "__decorateParam", "inject", "deviceSessionTypes", "loggerTypes"]
7
7
  }
@@ -1,2 +1,2 @@
1
- var u=Object.defineProperty;var m=Object.getOwnPropertyDescriptor;var g=(s,r,e,t)=>{for(var o=t>1?void 0:t?m(r,e):r,n=s.length-1,p;n>=0;n--)(p=s[n])&&(o=(t?p(r,e,o):p(o))||o);return t&&o&&u(r,e,o),o},i=(s,r)=>(e,t)=>r(e,t,s);import{inject as a,injectable as f}from"inversify";import{Left as h,Maybe as S,Right as T}from"purify-ts";import{NoTransportProvidedError as F,TransportAlreadyExistsError as _}from"../../../api/transport/model/Errors";import{deviceModelTypes as M}from"../../device-model/di/deviceModelTypes";import{deviceSessionTypes as v}from"../../device-session/di/deviceSessionTypes";import{loggerTypes as A}from"../../logger-publisher/di/loggerTypes";import{transportDiTypes as y}from"../../transport/di/transportDiTypes";let c=class{constructor(r,e,t,o,n,p){this._config=e;this._loggerModuleFactory=t;this._deviceModelDataSource=o;this._apduSenderServiceFactory=n;this._apduReceiverServiceFactory=p;if(this._logger=t("TransportService"),r.length===0)throw this._logger.warn("No transports provided, please check your configuration"),new F("No transports provided, please check your configuration");for(const l of r){const d=this.addTransport(l);if(d.isLeft())throw d.extract()}}_transports=new Map;_logger;addTransport(r){const e=r({deviceModelDataSource:this._deviceModelDataSource,loggerServiceFactory:this._loggerModuleFactory,config:this._config,apduSenderServiceFactory:this._apduSenderServiceFactory,apduReceiverServiceFactory:this._apduReceiverServiceFactory});return this.addTransportInternal(e)}addTransportInternal(r){return this.getTransport(r.getIdentifier()).isJust()?(this._logger.warn(`Transport ${r.getIdentifier()} already exists, please check your configuration`),h(new _(`Transport ${r.getIdentifier()} already exists, please check your configuration`))):(this._transports.set(r.getIdentifier(),r),T(void 0))}getTransport(r){return S.fromNullable(this._transports.get(r))}getAllTransports(){return Array.from(this._transports.values())}};c=g([f(),i(0,a(y.TransportsInput)),i(1,a(y.DmkConfig)),i(2,a(A.LoggerPublisherServiceFactory)),i(3,a(M.DeviceModelDataSource)),i(4,a(v.ApduSenderServiceFactory)),i(5,a(v.ApduReceiverServiceFactory))],c);export{c as DefaultTransportService};
1
+ var m=Object.defineProperty;var u=Object.getOwnPropertyDescriptor;var g=(n,r,e,t)=>{for(var o=t>1?void 0:t?u(r,e):r,s=n.length-1,p;s>=0;s--)(p=n[s])&&(o=(t?p(r,e,o):p(o))||o);return t&&o&&m(r,e,o),o},i=(n,r)=>(e,t)=>r(e,t,n);import{inject as a,injectable as f}from"inversify";import{Left as h,Maybe as T,Right as S}from"purify-ts";import{NoTransportProvidedError as F,TransportAlreadyExistsError as _}from"../../../api/transport/model/Errors";import{deviceModelTypes as M}from"../../device-model/di/deviceModelTypes";import{deviceSessionTypes as v}from"../../device-session/di/deviceSessionTypes";import{loggerTypes as A}from"../../logger-publisher/di/loggerTypes";import{transportDiTypes as y}from"../../transport/di/transportDiTypes";let c=class{constructor(r,e,t,o,s,p){this._config=e;this._loggerModuleFactory=t;this._deviceModelDataSource=o;this._apduSenderServiceFactory=s;this._apduReceiverServiceFactory=p;if(this._logger=t("TransportService"),r.length===0)throw this._logger.warn("No transports provided, please check your configuration"),new F("No transports provided, please check your configuration");for(const l of r){const d=this.addTransport(l);if(d.isLeft())throw d.extract()}}_transports=new Map;_logger;addTransport(r){const e=r({deviceModelDataSource:this._deviceModelDataSource,loggerServiceFactory:this._loggerModuleFactory,config:this._config,apduSenderServiceFactory:this._apduSenderServiceFactory,apduReceiverServiceFactory:this._apduReceiverServiceFactory});return this.addTransportInternal(e)}addTransportInternal(r){return this.getTransport(r.getIdentifier()).isJust()?(this._logger.warn(`Transport ${r.getIdentifier()} already exists, please check your configuration`),h(new _(`Transport ${r.getIdentifier()} already exists, please check your configuration`))):(this._transports.set(r.getIdentifier(),r),S(void 0))}getTransport(r){return T.fromNullable(this._transports.get(r))}getAllTransports(){return Array.from(this._transports.values())}closeConnection(r){this.getTransport(r.transport).map(t=>t.disconnect({connectedDevice:r}))}};c=g([f(),i(0,a(y.TransportsInput)),i(1,a(y.DmkConfig)),i(2,a(A.LoggerPublisherServiceFactory)),i(3,a(M.DeviceModelDataSource)),i(4,a(v.ApduSenderServiceFactory)),i(5,a(v.ApduReceiverServiceFactory))],c);export{c as DefaultTransportService};
2
2
  //# sourceMappingURL=DefaultTransportService.js.map