@ledgerhq/device-management-kit-devtools-rozenite 0.0.0-develop-20260701003433 → 0.0.0-develop-20260702003423
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +1 -1
- package/dist/rozenite.json +1 -1
- package/package.json +4 -4
package/dist/index.js
CHANGED
|
@@ -522,7 +522,7 @@ Details
|
|
|
522
522
|
|
|
523
523
|
${(function(o){switch(o.kind){case Ra.method:return`[class: "${o.targetClass.name}", method: "${o.method.toString()}"]`;case Ra.parameter:return`[class: "${o.targetClass.name}", index: "${o.index.toString()}"]`;case Ra.property:return`[class: "${o.targetClass.name}", property: "${o.property.toString()}"]`}})(i)}`,{cause:n})}throw n}function p4(e,t){return(r,n,i)=>{try{i===void 0?(function(o,s){const u=im(o,s);return(c,f)=>{Hu(c.constructor,Bd,Vd,MC(u(c),f))}})(e,t)(r,n):typeof i=="number"?(function(o,s){const u=im(o,s);return(c,f,p)=>{if(!(function(g,h){return typeof g=="function"&&h===void 0})(c,f))throw new La(bo.injectionDecoratorConflict,`Found an @inject decorator in a non constructor parameter.
|
|
524
524
|
Found @inject decorator at method "${f?.toString()??""}" at class "${c.constructor.name}"`);Hu(c,Bd,Vd,(function(g,h){return m=>{const y=m.constructorArguments[h];return m.constructorArguments[h]=g(y),m}})(u(c),p))}})(e,t)(r,n,i):(function(o,s){const u=im(o,s);return(c,f,p)=>{if(!(function(g){return g.set!==void 0})(p))throw new La(bo.injectionDecoratorConflict,`Found an @inject decorator in a non setter property method.
|
|
525
|
-
Found @inject decorator at method "${f.toString()}" at class "${c.constructor.name}"`);Hu(c.constructor,Bd,Vd,MC(u(c),f))}})(e,t)(r,n,i)}catch(o){d4(r,n,i,o)}}}function im(e,t){return r=>{const n=t(r);return i=>(n(i),e(i))}}function Ye(e){return p4(f4(oc.singleInjection,e),l4)}(function(e){e[e.method=0]="method",e[e.parameter=1]="parameter",e[e.property=2]="property"})(Ra||(Ra={}));const DC="@inversifyjs/core/classIsInjectableFlagReflectKey",h4=[Array,BigInt,Boolean,Function,Number,Object,String];function g4(e){const t=P1(e,"design:paramtypes");t!==void 0&&Hu(e,Bd,Vd,(function(r){return n=>(r.forEach(((i,o)=>{var s;n.constructorArguments[o]!==void 0||(s=i,h4.includes(s))||(n.constructorArguments[o]=(function(u){return{isFromTypescriptParamType:!0,kind:oc.singleInjection,name:void 0,optional:!1,tags:new Map,value:u}})(i))})),n)})(t))}function Et(e){return t=>{(function(r){if(P1(r,DC)!==void 0)throw new La(bo.injectionDecoratorConflict,`Cannot apply @injectable decorator multiple times at class "${r.name}"`);o4(r,DC,!0)})(t),g4(t)}}var LC;(function(e){e[e.multipleInjection=0]="multipleInjection",e[e.singleInjection=1]="singleInjection"})(LC||(LC={}));var FC;(function(e){e[e.singleMandatory=0]="singleMandatory",e[e.singleOptional=1]="singleOptional",e[e.multipleMandatory=2]="multipleMandatory",e[e.multipleOptional=3]="multipleOptional",e[e.length=4]="length"})(FC||(FC={}));let v4=class{constructor(t,r,n,i,o){this.deviceModel=t,this.serviceUuid=r,this.writeUuid=n,this.writeCmdUuid=i,this.notifyUuid=o}},Qs=class{id;productName;usbProductId;bootloaderUsbProductId;usbOnly;memorySize;getBlockSize;masks;bluetoothSpec;constructor(t){this.id=t.id,this.productName=t.productName,this.usbProductId=t.usbProductId,this.bootloaderUsbProductId=t.bootloaderUsbProductId,this.usbOnly=t.usbOnly,this.memorySize=t.memorySize,this.getBlockSize=t.getBlockSize,this.masks=t.masks,this.bluetoothSpec=t.bluetoothSpec}};var m4=Object.defineProperty,y4=(e,t,r)=>t in e?m4(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,b4=(e,t,r,n)=>{for(var i=t,o=e.length-1,s;o>=0;o--)(s=e[o])&&(i=s(i)||i);return i},S4=(e,t,r)=>y4(e,t+"",r);let Oa=class{getAllDeviceModels(){return Object.values(Oa.deviceModelByIds)}getDeviceModel(t){return Oa.deviceModelByIds[t.id]}filterDeviceModels(t){return this.getAllDeviceModels().filter(r=>Object.entries(t).every(([n,i])=>r[n]===i))}getBluetoothServicesInfos(){return Object.values(Oa.deviceModelByIds).reduce((t,r)=>{const{bluetoothSpec:n}=r;return n?{...t,...n.reduce((i,o)=>({...i,[o.serviceUuid]:new v4(r,o.serviceUuid,o.writeUuid,o.writeCmdUuid,o.notifyUuid)}),{})}:t},{})}getBluetoothServices(){return Object.values(Oa.deviceModelByIds).map(t=>(t.bluetoothSpec||[]).map(r=>r.serviceUuid)).flat().filter(t=>!!t)}};S4(Oa,"deviceModelByIds",{[qt.NANO_S]:new Qs({id:qt.NANO_S,productName:"Ledger Nano S",usbProductId:16,bootloaderUsbProductId:1,usbOnly:!0,memorySize:320*1024,getBlockSize:e=>SC.lt(SC.coerce(e.firmwareVersion)??"","2.0.0")?4*1024:2*1024,masks:[823132160]}),[qt.NANO_SP]:new Qs({id:qt.NANO_SP,productName:"Ledger Nano S Plus",usbProductId:80,bootloaderUsbProductId:5,usbOnly:!0,memorySize:1533*1024,getBlockSize:()=>512,masks:[856686592]}),[qt.NANO_X]:new Qs({id:qt.NANO_X,productName:"Ledger Nano X",usbProductId:64,bootloaderUsbProductId:4,usbOnly:!1,memorySize:2*1024*1024,getBlockSize:()=>4*1024,masks:[855638016],bluetoothSpec:[{serviceUuid:"13d63400-2c97-0004-0000-4c6564676572",notifyUuid:"13d63400-2c97-0004-0001-4c6564676572",writeUuid:"13d63400-2c97-0004-0002-4c6564676572",writeCmdUuid:"13d63400-2c97-0004-0003-4c6564676572"}]}),[qt.STAX]:new Qs({id:qt.STAX,productName:"Ledger Stax",usbProductId:96,bootloaderUsbProductId:6,usbOnly:!1,memorySize:1533*1024,getBlockSize:()=>512,masks:[857735168],bluetoothSpec:[{serviceUuid:"13d63400-2c97-6004-0000-4c6564676572",notifyUuid:"13d63400-2c97-6004-0001-4c6564676572",writeUuid:"13d63400-2c97-6004-0002-4c6564676572",writeCmdUuid:"13d63400-2c97-6004-0003-4c6564676572"}]}),[qt.FLEX]:new Qs({id:qt.FLEX,productName:"Ledger Flex",usbProductId:112,bootloaderUsbProductId:7,usbOnly:!1,memorySize:1533*1024,getBlockSize:()=>512,masks:[858783744],bluetoothSpec:[{serviceUuid:"13d63400-2c97-3004-0000-4c6564676572",notifyUuid:"13d63400-2c97-3004-0001-4c6564676572",writeUuid:"13d63400-2c97-3004-0002-4c6564676572",writeCmdUuid:"13d63400-2c97-3004-0003-4c6564676572"}]}),[qt.APEX]:new Qs({id:qt.APEX,productName:"Ledger Nano Gen5",usbProductId:128,bootloaderUsbProductId:8,usbOnly:!1,memorySize:1533*1024,getBlockSize:()=>512,masks:[859832320],bluetoothSpec:[{serviceUuid:"13d63400-2c97-8004-0000-4c6564676572",notifyUuid:"13d63400-2c97-8004-0001-4c6564676572",writeUuid:"13d63400-2c97-8004-0002-4c6564676572",writeCmdUuid:"13d63400-2c97-8004-0003-4c6564676572"},{serviceUuid:"13d63400-2c97-9004-0000-4c6564676572",notifyUuid:"13d63400-2c97-9004-0001-4c6564676572",writeUuid:"13d63400-2c97-9004-0002-4c6564676572",writeCmdUuid:"13d63400-2c97-9004-0003-4c6564676572"}]})}),Oa=b4([Et()],Oa);let w4=class{statusCode;data;constructor({statusCode:t,data:r}){this.statusCode=t,this.data=r}};const x4=5,is=1,H0=2,pl=2,U0=2,Pr=[];for(let e=0;e<256;++e)Pr.push((e+256).toString(16).slice(1));function E4(e,t=0){return(Pr[e[t+0]]+Pr[e[t+1]]+Pr[e[t+2]]+Pr[e[t+3]]+"-"+Pr[e[t+4]]+Pr[e[t+5]]+"-"+Pr[e[t+6]]+Pr[e[t+7]]+"-"+Pr[e[t+8]]+Pr[e[t+9]]+"-"+Pr[e[t+10]]+Pr[e[t+11]]+Pr[e[t+12]]+Pr[e[t+13]]+Pr[e[t+14]]+Pr[e[t+15]]).toLowerCase()}let om;const C4=new Uint8Array(16);function _4(){if(!om){if(typeof crypto>"u"||!crypto.getRandomValues)throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");om=crypto.getRandomValues.bind(crypto)}return om(C4)}const R4=typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto),NC={randomUUID:R4};function Fp(e,t,r){if(NC.randomUUID&&!e)return NC.randomUUID();e=e||{};const n=e.random||(e.rng||_4)();return n[6]=n[6]&15|64,n[8]=n[8]&63|128,E4(n)}const ds={getLastBytesFrom(e,t){return e.slice(-t)},getFirstBytesFrom(e,t){return e.slice(0,t)},bytesToNumber(e){return e.reduce((t,r,n)=>t+r*Math.pow(256,e.length-1-n),0)},numberToByteArray(e,t){return new Uint8Array(t).map((r,n)=>e>>8*(t-1-n)&255)}},jC=2,am=800;let zC=class{_tag="FramerOverflowError";originalError;constructor(){this.originalError=new Error("Frame header length is greater than frame size")}},O4=class{_tag="FramerApduError";originalError;constructor(){this.originalError=new Error("Frame offset is greater than apdu length")}},BC=class{_tag="ReceiverApduError";originalError;constructor(t){this.originalError=new Error(t??"Unable to parse apdu")}},VC=class{_tag="DeviceSessionNotFound";originalError;constructor(t){this.originalError=t??new Error("Device session not found")}},c2=class{_header;_data;constructor({header:t,data:r}){this._header=t,this._data=r}toString(){return JSON.stringify({header:this._header.toString(),data:Jo(this._data)},null,2)}getRawData(){const t=this._header.getRawData(),r=new Uint8Array(t.length+this._data.length);return r.set(t,0),r.set(this._data,t.length),r}getHeader(){return this._header}getData(){return this._data}},f2=class{_uuid;_channel;_headTag;_index;_length;_dataLength;constructor({uuid:t,dataSize:r,index:n,headTag:i,length:o,channel:s}){this._uuid=t,this._dataLength=r,this._index=n,this._headTag=i,this._length=o,this._channel=s}getDataLength(){return this._dataLength.map(t=>ds.bytesToNumber(t))}setDataSize(t){return this._dataLength=t,this}getLength(){return this._length}toString(){return JSON.stringify({uuid:this._uuid.toString(),dataSize:this._dataLength.extract()?.toString(),index:this._index.toString(),headTag:this._headTag.toString(),length:this._length.toString(),channel:this._channel.extract()?.toString()})}getRawData(){return new Uint8Array([...this._channel.caseOf({Just:t=>[...t],Nothing:()=>[]}),...this._headTag,...this._index,...this._dataLength.caseOf({Just:t=>[...t],Nothing:()=>[]})])}};const Sr={LoggerPublisherServiceFactory:Symbol.for("LoggerPublisherServiceFactory")};var T4=(e,t,r,n)=>{for(var i=t,o=e.length-1,s;o>=0;o--)(s=e[o])&&(i=s(i)||i);return i},$4=(e,t)=>(r,n)=>t(r,n,e);let HC=class{_channel;_logger;_pendingFrames;constructor({channel:t=En.zero()},r){this._channel=t,this._logger=r("ApduReceiverService"),this._pendingFrames=[]}handleFrame(t){return this.getFrameFromBytes(t).map(r=>{if(this._pendingFrames.push(r),!this._pendingFrames[0])return jt;const n=this._pendingFrames[0].getHeader().getDataLength();return this.getCompleteFrame(n)})}getCompleteFrame(t){return t.chain(r=>{if(!this.isComplete(r))return this._logger.debug("frame is not complete, waiting for more"),jt;const n=ds.getFirstBytesFrom(this.concatFrames(this._pendingFrames),r),i=ds.getFirstBytesFrom(n,n.length-jC),o=ds.getLastBytesFrom(n,jC);return this._pendingFrames=[],Qr(new w4({data:i,statusCode:o}))})}getFrameFromBytes(t){const r=this._channel.caseOf({Just:()=>H0,Nothing:()=>0}),n=t.slice(r,r+is),i=t.slice(r+is,r+is+pl),o=i.reduce((h,m)=>h+m,0)===0;if(!o&&this._pendingFrames.length===0)return Ut(new BC);const s=r+is+pl,u=o?U0:0;if(t.length<r+is+pl+u)return Ut(new BC("Unable to parse header from apdu"));const c=o?Qr(t.slice(s,s+u)):jt,f=s+u,p=t.slice(f),g=new c2({header:new f2({uuid:Fp(),channel:this._channel,dataSize:c,headTag:n,index:i,length:r+is+pl+u}),data:p});return nr(g)}isComplete(t){return this._pendingFrames.reduce((r,n)=>r+n.getData().length,0)>=t}concatFrames(t){return t.reduce((r,n)=>Uint8Array.from([...r,...n.getData()]),new Uint8Array(0))}};HC=T4([Et(),$4(1,Ye(Sr.LoggerPublisherServiceFactory))],HC);var I4=(e,t,r,n)=>{for(var i=t,o=e.length-1,s;o>=0;o--)(s=e[o])&&(i=s(i)||i);return i},A4=(e,t)=>(r,n)=>t(r,n,e);let UC=class{_frameSize;_channel;_padding;_logger;constructor({frameSize:t,channel:r=En.zero(),padding:n=!1},i){this._frameSize=t,this._channel=r,this._padding=n,this._logger=i("DefaultApduSenderService")}getFrames(t){const r=[];let n=0,i=this.getFrameAtIndex(t,n);for(;i.isRight();)r.push(i.extract()),n+=1,i=this.getFrameAtIndex(t,n).mapLeft(o=>(o instanceof zC||this._logger.error("Error while parsing frame",{data:{error:o}}),o));return r}getFrameAtIndex(t,r){const n=this.getFrameHeaderFrom(r,t.length),i=r===0?0:r*this._frameSize-this.getHeaderSizeSumFrom(r);if(i>=t.length)return Ut(new zC);if(n.getLength()>this._frameSize)return Ut(new O4);const o=this._frameSize-n.getLength(),s=t.slice(i,i+this._frameSize-n.getLength()),u=this._padding?new Uint8Array(o).fill(0):new Uint8Array(s.length<o?s.length:o);u.set(s,0);const c=new c2({header:n,data:u});return nr(c)}getFrameHeaderFrom(t,r){const n=new f2({uuid:Fp(),channel:this._channel.map(i=>ds.getLastBytesFrom(i,H0)),headTag:new Uint8Array([x4]),index:ds.numberToByteArray(t,pl),length:this.getFrameHeaderSizeFromIndex(t),dataSize:En.zero()});return t===0&&n.setDataSize(En.of(ds.numberToByteArray(r,U0))),n}getHeaderSizeSumFrom(t){let r=this.getFrameHeaderSizeFromIndex(0),n=1;for(;n<t;)r+=this.getFrameHeaderSizeFromIndex(n),n+=1;return r}getFrameHeaderSizeFromIndex(t){return this._channel.caseOf({Just:()=>H0,Nothing:()=>0})+pl+is+(t===0?U0:0)}};UC=I4([Et(),A4(1,Ye(Sr.LoggerPublisherServiceFactory))],UC);const W0={LocalConfigDataSource:Symbol.for("LocalConfigDataSource"),RemoteConfigDataSource:Symbol.for("RemoteConfigDataSource"),ConfigService:Symbol.for("ConfigService")},un={ApduSenderServiceFactory:Symbol.for("ApduSenderServiceFactory"),ApduReceiverServiceFactory:Symbol.for("ApduReceiverServiceFactory"),DeviceSessionService:Symbol.for("DeviceSessionService")},WC={ConnectUseCase:Symbol.for("ConnectUseCase"),DisconnectUseCase:Symbol.for("DisconnectUseCase")},Np={ManagerApiService:Symbol.for("ManagerApiService"),ManagerApiDataSource:Symbol.for("ManagerApiDataSource"),DmkConfig:Symbol.for("ManagerApiDmkConfig")},Fa={DmkConfig:Symbol.for("TransportDmkConfig"),TransportService:Symbol.for("TransportService"),TransportsInput:Symbol.for("TransportsInput")};var k4=(e,t,r,n)=>{for(var i=t,o=e.length-1,s;o>=0;o--)(s=e[o])&&(i=s(i)||i);return i},GC=(e,t)=>(r,n)=>t(r,n,e);let qC=class{_sessionService;_logger;constructor(t,r){this._sessionService=t,this._logger=r("SendCommandUseCase")}async execute({sessionId:t,command:r,abortTimeout:n}){return this._sessionService.getDeviceSessionById(t).caseOf({Right:async i=>await i.sendCommand(r,n),Left:i=>{throw this._logger.error("Error getting session",{data:{error:i}}),i}})}};qC=k4([Et(),GC(0,Ye(un.DeviceSessionService)),GC(1,Ye(Sr.LoggerPublisherServiceFactory))],qC);var P4=(e,t,r,n)=>{for(var i=t,o=e.length-1,s;o>=0;o--)(s=e[o])&&(i=s(i)||i);return i};let XC=class{execute=vi.fn(()=>"stub")};XC=P4([Et()],XC);var M4=(e,t,r,n)=>{for(var i=t,o=e.length-1,s;o>=0;o--)(s=e[o])&&(i=s(i)||i);return i},KC=(e,t)=>(r,n)=>t(r,n,e);let YC=class{_sessionService;_logger;constructor(t,r){this._sessionService=t,this._logger=r("ExecuteDeviceActionUseCase")}execute({sessionId:t,deviceAction:r}){return this._sessionService.getDeviceSessionById(t).caseOf({Right:n=>n.executeDeviceAction(r),Left:n=>{throw this._logger.error("Error getting session",{data:{error:n}}),n}})}};YC=M4([Et(),KC(0,Ye(un.DeviceSessionService)),KC(1,Ye(Sr.LoggerPublisherServiceFactory))],YC);function D4(e){return typeof e=="object"&&e!==null&&"version"in e&&"name"in e&&typeof e.version=="string"&&typeof e.name=="string"}let QC=class{constructor(t){this.err=t,this.originalError=t}_tag="ApiCallError";originalError},L4=class{constructor(t){this.err=t,this.originalError=t}_tag="ParseResponseError";originalError},d2=class{constructor(t){this.err=t,this.originalError=t}_tag="JSONParseError";originalError},F4=class{constructor(t){this.err=t,this.originalError=t}_tag="ReadFileError";originalError};const N4="@ledgerhq/device-management-kit",j4="0.0.0-develop-20260701003433",JC={name:N4,version:j4};var z4=(e,t,r,n)=>{for(var i=t,o=e.length-1,s;o>=0;o--)(s=e[o])&&(i=s(i)||i);return i};const B4={name:JC.name,version:JC.version},V4=()=>JSON.stringify(B4);let ZC=class{getConfig(){return Cn.encase(()=>V4()).mapLeft(t=>new F4(t)).chain(t=>Cn.encase(()=>{const r=JSON.parse(t);if(D4(r))return r;throw new Error("Invalid config file")}).mapLeft(r=>new d2(r)))}};ZC=z4([Et()],ZC);var H4=(e,t,r,n)=>{for(var i=t,o=e.length-1,s;o>=0;o--)(s=e[o])&&(i=s(i)||i);return i};let e_=class{getConfig(){return Cn.of({name:"DeviceSDK",version:"0.0.0-stub.1"})}};e_=H4([Et()],e_);var U4=(e,t,r,n)=>{for(var i=t,o=e.length-1,s;o>=0;o--)(s=e[o])&&(i=s(i)||i);return i};let t_=class{async getConfig(){const t=await this._callApi();if(t.isLeft())return Ut(new QC(t.extract()));if(!t.extract().ok)return Ut(new QC(new Error("response not ok")));const r=await t.extract().json();return r.isLeft()?Ut(new d2):r.chain(n=>this._parseResponse(n)).map(n=>n)}_parseResponse(t){const{name:r,version:n}=t;return!r||!n?Ut(new L4):Cn.of({name:r,version:n})}_callApi(){return new Promise(t=>{t(Cn.of({ok:!0,json:async()=>new Promise(r=>{r(Cn.of({name:"DeviceSDK",version:"0.0.0-fake.1",yolo:"yolo"}))})}))})}};t_=U4([Et()],t_);var W4=(e,t,r,n)=>{for(var i=t,o=e.length-1,s;o>=0;o--)(s=e[o])&&(i=s(i)||i);return i};let r_=class{async getConfig(){return new Promise(t=>t(Cn.of({name:"DeviceSDK",version:"0.0.0-fake.2"})))}};r_=W4([Et()],r_);var G4=(e,t,r,n)=>{for(var i=t,o=e.length-1,s;o>=0;o--)(s=e[o])&&(i=s(i)||i);return i},sm=(e,t)=>(r,n)=>t(r,n,e);let n_=class{_local;_remote;_logger;constructor(t,r,n){this._local=t,this._remote=r,this._logger=n("config")}async getDmkConfig(){const t=this._local.getConfig().ifLeft(r=>{this._logger.error("Local config not available",{data:{error:r}})});if(t.isRight()){const r=t.extract();return this._logger.info("Local config available",{data:{config:r}}),r}return this._remote.getConfig().then(r=>r.mapLeft(n=>(this._logger.error("Local config available",{data:{error:n}}),{name:"DeadDmk",version:"0.0.0-dead.1"})).extract())}};n_=G4([Et(),sm(0,Ye(W0.LocalConfigDataSource)),sm(1,Ye(W0.RemoteConfigDataSource)),sm(2,Ye(Sr.LoggerPublisherServiceFactory))],n_);var q4=(e,t,r,n)=>{for(var i=t,o=e.length-1,s;o>=0;o--)(s=e[o])&&(i=s(i)||i);return i},X4=(e,t)=>(r,n)=>t(r,n,e);let i_=class{_configService;constructor(t){this._configService=t}async getDmkVersion(){return(await this._configService.getDmkConfig()).version}};i_=q4([Et(),X4(0,Ye(W0.ConfigService))],i_);const K4={DeviceModelDataSource:Symbol.for("DeviceModelDataSource")};var Y4=(e,t,r,n)=>{for(var i=t,o=e.length-1,s;o>=0;o--)(s=e[o])&&(i=s(i)||i);return i},o_=(e,t)=>(r,n)=>t(r,n,e);let a_=class{constructor(t,r){this._sessionService=t,this._logger=r("DisableDeviceSessionRefresherUseCase")}_logger;execute({sessionId:t,blockerId:r}){return this._sessionService.getDeviceSessionById(t).caseOf({Left:n=>{throw this._logger.error("Error getting device session",{data:{error:n}}),n},Right:n=>n.disableRefresher(r)})}};a_=Y4([Et(),o_(0,Ye(un.DeviceSessionService)),o_(1,Ye(Sr.LoggerPublisherServiceFactory))],a_);var Q4=(e,t,r,n)=>{for(var i=t,o=e.length-1,s;o>=0;o--)(s=e[o])&&(i=s(i)||i);return i},J4=(e,t)=>(r,n)=>t(r,n,e);let s_=class{_sessions;_sessionsSubject;_logger;constructor(t){this._sessions=[],this._sessionsSubject=new U$,this._logger=t("DeviceSessionService")}get sessionsObs(){return this._sessionsSubject.asObservable()}addDeviceSession(t){return this._sessions.find(r=>r.id===t.id)?(this._logger.warn("DeviceSession already exists",{data:{deviceSession:t}}),this):(this._sessions.push(t),this._sessionsSubject.next(t),this._logger.info("DeviceSession added",{data:{sessionId:t.id}}),this)}removeDeviceSession(t){const r=this._sessions.find(n=>n.id===t);return r?(r.close(),this._sessions=this._sessions.filter(n=>n.id!==t),this._logger.info("DeviceSession removed",{data:{sessionId:t}}),this):(this._logger.warn("DeviceSession not found",{data:{sessionId:t}}),this)}getDeviceSessionById(t){return En.fromNullable(this._sessions.find(r=>r.id===t)).toEither(new VC)}getDeviceSessionsByDeviceId(t){return En.fromPredicate(({length:r})=>r>0,this._sessions.filter(r=>r.connectedDevice.id===t)).toEither(new VC)}getDeviceSessions(){return this._sessions}};s_=Q4([Et(),J4(0,Ye(Sr.LoggerPublisherServiceFactory))],s_);var Z4=(e,t,r,n)=>{for(var i=t,o=e.length-1,s;o>=0;o--)(s=e[o])&&(i=s(i)||i);return i},l_=(e,t)=>(r,n)=>t(r,n,e);let u_=class{_sessionService;_transportService;constructor(t,r){this._sessionService=t,this._transportService=r}execute(){const t=this._sessionService.getDeviceSessions();for(const r of t)this._transportService.closeConnection(r.connectedDevice),this._sessionService.removeDeviceSession(r.id)}};u_=Z4([Et(),l_(0,Ye(un.DeviceSessionService)),l_(1,Ye(Fa.TransportService))],u_);var ej=(e,t,r,n)=>{for(var i=t,o=e.length-1,s;o>=0;o--)(s=e[o])&&(i=s(i)||i);return i},c_=(e,t)=>(r,n)=>t(r,n,e);let f_=class{_sessionService;_logger;constructor(t,r){this._sessionService=t,this._logger=r("GetDeviceSessionStateUseCase")}execute({sessionId:t}){return this._sessionService.getDeviceSessionById(t).caseOf({Left:r=>{throw this._logger.error("Error getting session device",{data:{error:r}}),r},Right:r=>r.state})}};f_=ej([Et(),c_(0,Ye(un.DeviceSessionService)),c_(1,Ye(Sr.LoggerPublisherServiceFactory))],f_);var tj=(e,t,r,n)=>{for(var i=t,o=e.length-1,s;o>=0;o--)(s=e[o])&&(i=s(i)||i);return i},d_=(e,t)=>(r,n)=>t(r,n,e);let p_=class{_sessionService;_logger;constructor(t,r){this._sessionService=t,this._logger=r("UnsafeBypassIntentQueueUseCase")}execute({sessionId:t,bypass:r}){this._sessionService.getDeviceSessionById(t).caseOf({Left:n=>{throw this._logger.error("Error getting session",{data:{error:n}}),n},Right:n=>{this._logger.warn(`UNSAFE: ${r?"Enabling":"Disabling"} intent queue bypass for session ${t}`),n._unsafeBypassIntentQueue(r)}})}};p_=tj([Et(),d_(0,Ye(un.DeviceSessionService)),d_(1,Ye(Sr.LoggerPublisherServiceFactory))],p_);function rj(e){return`[will send APDU] ~...> ${Jo(e,!1)}`}function nj(e){return`[exchange] <= ${Jo(e.data,!1)}${Jo(e.statusCode,!1)}`}const ij="apdu-exchange";function oj(e,t,r){const n=Jo(t,!1),i=`${Jo(r.data,!1)}${Jo(r.statusCode,!1)}`;return{message:nj(r),data:{type:ij,sessionId:e,apdu:n,response:i}}}const G0=1e3,lm=1e3,aj={isRefresherDisabled:!1,pollingInterval:1e3};var ur=(e=>(e.NEW_STATE="NEW_STATE",e.REFRESH_NEEDED="REFRESH_NEEDED",e.COMMAND_SUCCEEDED="COMMAND_SUCCEEDED",e.DEVICE_STATE_UPDATE_BUSY="DEVICE_STATE_UPDATE_BUSY",e.DEVICE_STATE_UPDATE_LOCKED="DEVICE_STATE_UPDATE_LOCKED",e.DEVICE_STATE_UPDATE_CONNECTED="DEVICE_STATE_UPDATE_CONNECTED",e.DEVICE_STATE_UPDATE_UNKNOWN="DEVICE_STATE_UPDATE_UNKNOWN",e))(ur||{});let sj=class{_eventEmitter=new Hl;listen(){return this._eventEmitter.asObservable()}dispatch(t){this._eventEmitter.next(t)}},lj=class{constructor(t,r){this.loggerModuleFactory=t,this.sessionEventDispatcher=r,this._logger=this.loggerModuleFactory("IntentQueueService")}_logger;_queue=[];_isProcessing=!1;_currentSubscription=null;enqueue(t){this._logger.debug("Enqueueing intent",{data:{type:t.type}});const r=new Hl,n={intent:t,subject:r,isCancelled:!1};this._queue.push(n);const i=()=>{this._logger.debug("Cancelling intent",{data:{type:t.type}}),n.isCancelled=!0,this._queue[0]===n&&this._currentSubscription?(this._currentSubscription.unsubscribe(),this._currentSubscription=null,r.complete(),this._queue.shift(),this._isProcessing=!1,this._processQueue()):(!this._isProcessing||this._queue[0]!==n)&&r.complete()};return this._isProcessing||this._processQueue(),{observable:r.asObservable().pipe(U3(()=>{this._logger.debug("Intent observable finalized",{data:{type:t.type}})})),cancel:i}}_processQueue(){if(this._isProcessing)return;if(this._queue.length===0){this.sessionEventDispatcher.dispatch({eventName:ur.NEW_STATE});return}this.sessionEventDispatcher.dispatch({eventName:ur.DEVICE_STATE_UPDATE_BUSY}),this._isProcessing=!0;const t=this._queue[0];if(t.isCancelled){this._logger.debug("Skipping cancelled intent",{data:{type:t.intent.type}}),t.subject.complete(),this._queue.shift(),this._isProcessing=!1,this._processQueue();return}this._logger.debug("Processing intent",{data:{type:t.intent.type}}),this._currentSubscription=t.intent.execute().subscribe({next:r=>{t.isCancelled||t.subject.next(r)},error:r=>{t.isCancelled||t.subject.error(r),this._onIntentComplete()},complete:()=>{t.isCancelled||t.subject.complete(),this._onIntentComplete()}})}_onIntentComplete(){this._logger.debug("Intent completed"),this._currentSubscription=null,this._queue.shift(),this._isProcessing=!1,this._processQueue()}},uj=class{constructor(t,r){this._refresher=r,this._logger=t("refresher-service")}_refresherBlockers=new Set;_logger;disableRefresher(t){const r=`${t}-${Fp()}`;this.addRefresherBlocker(r),this._logger.debug("Refresher disabled",{data:{blockerId:r,blockers:Array.from(this._refresherBlockers)}});let n=!1;return()=>{n||(n=!0,this.removeRefresherBlocker(r),this._logger.debug("Refresher re-enabled",{data:{blockerId:r,blockers:Array.from(this._refresherBlockers)}}))}}addRefresherBlocker(t){const r=this._refresherBlockers.size;this._refresherBlockers.add(t),r===0&&this._refresher.stop()}removeRefresherBlocker(t){const r=this._refresherBlockers.size;this._refresherBlockers.delete(t),r>0&&this._refresherBlockers.size===0&&this._refresher.start()}},cj=class{constructor(t,r,n,i){this.connectedDevice=r,this._sessionEventDispatcher=n,this._sendCommandFunction=i,this._logger=t("device-pinger"),this._subscription=this._sessionEventDispatcher.listen().subscribe(async o=>await this.mapEventAction(o))}_sendCommandFunction;_subscription;_logger;async ping(){try{return await this.mapDevicePingAction(this.connectedDevice.deviceModel.id)}catch(t){return this._logger.error("Error while pinging device",{data:{error:t}}),null}}mapEventAction=async t=>{switch(t.eventName){case ur.REFRESH_NEEDED:return await this.ping();default:return null}};async mapDevicePingAction(t){switch(t){case qt.NANO_S:{const r=async()=>{const o=await this._sendCommandFunction(new TE,am);return this._sendCommandFunction(new UN,am),o},n=new Promise(o=>{setTimeout(()=>o(null),G0*2+100)}),i=await Promise.race([r(),n]);return i?this._sessionEventDispatcher.dispatch({eventName:ur.COMMAND_SUCCEEDED,eventData:i}):this._sessionEventDispatcher.dispatch({eventName:ur.DEVICE_STATE_UPDATE_LOCKED}),i}default:{const r=await this._sendCommandFunction(new TE,am);return this._sessionEventDispatcher.dispatch({eventName:ur.COMMAND_SUCCEEDED,eventData:r}),r}}}unsubscribe(){this._subscription.unsubscribe()}},fj=class{constructor(t,r,n,i){this._sessionEventDispatcher=n,this._refresherOptions=r,this._logger=t("device-session-refresher"),this._connectedDeviceID=i.deviceModel.id}_refresherSubscription;_refresherOptions;_logger;_connectedDeviceID;startRefresher(){if(this._refresherOptions.isRefresherDisabled||this._refresherSubscription)return;const t=this.getValidPollingInterval(this._refresherOptions,this._logger),r=this._sessionEventDispatcher.listen().pipe($C(n=>n.eventName===ur.DEVICE_STATE_UPDATE_BUSY||n.eventName===ur.NEW_STATE),Da(n=>n.eventName===ur.DEVICE_STATE_UPDATE_BUSY),G3(!1),V3());this._refresherSubscription=j3(0,t).pipe(q3(r),IC(([n,i])=>{i&&this._logger.debug("Refresh skipped: device is busy")}),$C(([n,i])=>!i),IC(()=>this._sessionEventDispatcher.dispatch({eventName:ur.REFRESH_NEEDED}))).subscribe(),this._logger.info("Refresher started.")}stopRefresher(){this._refresherSubscription&&(this._refresherSubscription.unsubscribe(),this._refresherSubscription=void 0,this._logger.info("Refresher stopped."))}restartRefresher(){this.stopRefresher(),this.startRefresher(),this._logger.info("Refresher restarted.")}getValidPollingInterval=(t,r)=>{const{pollingInterval:n}=t;switch(this._connectedDeviceID){case qt.NANO_S:{const i=G0*2;return n!==void 0&&n<i?(r.warn(`Polling interval of ${n} is too low, setting to minimum as ${i}`),i):n??i}default:return n!==void 0&&n<lm?(r.warn(`Polling interval of ${n} is too low, setting to minimum as ${lm}`),lm):n??G0}}},dj=class{constructor(t,r,n,i,o){this._sessionEventDispatcher=r,this._connectedDevice=n,this._deviceState=i,this.setDeviceSessionState=o,this._subscription=this._sessionEventDispatcher.listen().subscribe(s=>this.mapEventAction(s)),this._logger=t("device-session-state-handler")}_subscription;_logger;_pendingDeviceStatus=po.BUSY;_updateDeviceState(t){const r=this._parseDeviceStatus(t);if(r){const{sessionStateType:n,deviceStatus:i,currentApp:o}=r,s=this._deviceState.getValue();s.sessionStateType===$l.Connected?this.setDeviceSessionState({sessionStateType:n,deviceStatus:i,deviceModelId:this._connectedDevice.deviceModel.id,currentApp:o,installedApps:[],isSecureConnectionAllowed:!1}):this.setDeviceSessionState({...s,sessionStateType:n,deviceStatus:i,deviceModelId:this._connectedDevice.deviceModel.id,currentApp:o})}}mapEventAction=t=>{const{eventName:r}=t;switch(r){case ur.COMMAND_SUCCEEDED:return this._updateDeviceState(t.eventData);case ur.DEVICE_STATE_UPDATE_BUSY:return this.setDeviceSessionState({...this._deviceState.getValue(),deviceStatus:po.BUSY});case ur.DEVICE_STATE_UPDATE_LOCKED:this._pendingDeviceStatus=po.LOCKED;return;case ur.DEVICE_STATE_UPDATE_CONNECTED:this._pendingDeviceStatus=po.CONNECTED;return;case ur.NEW_STATE:{const n=this._pendingDeviceStatus;return this._pendingDeviceStatus=po.BUSY,this.setDeviceSessionState({...this._deviceState.getValue(),deviceStatus:n})}case ur.DEVICE_STATE_UPDATE_UNKNOWN:return this.setDeviceSessionState({...this._deviceState.getValue(),deviceStatus:po.BUSY});case ur.REFRESH_NEEDED:return;default:{const n=r;throw new Error(`Unhandled context type ${n}`)}}};_parseDeviceStatus(t){return fN(t)?{sessionStateType:$l.ReadyWithoutSecureChannel,deviceStatus:po.CONNECTED,currentApp:{name:t.data.name,version:t.data.version}}:(this._logger.debug("Error while parsing APDU response",{data:{parsedResponse:t}}),null)}unsubscribe(){this._subscription.unsubscribe()}},pj=class{_id;_connectedDevice;_deviceState;_managerApiService;_secureChannelService;_logger;_loggerModuleFactory;_refresherOptions;_pinger;_deviceSessionRefresher;_refresherService;_intentQueueService;_sessionEventDispatcher=new sj;_bypassIntentQueue=!1;constructor({connectedDevice:t,id:r=Fp()},n,i,o,s,u=c=>new lj(n,c)){this._id=r,this._connectedDevice=t,this._loggerModuleFactory=n,this._logger=n("device-session"),this._managerApiService=i,this._intentQueueService=u(this._sessionEventDispatcher),this._secureChannelService=o,this._refresherOptions={...aj,...s},this._deviceState=new p3({sessionStateType:$l.Connected,deviceStatus:po.CONNECTED,deviceModelId:this._connectedDevice.deviceModel.id}),this._pinger=new cj(n,t,this._sessionEventDispatcher,(c,f)=>this.sendCommand(c,f)),this._deviceSessionRefresher=new fj(n,this._refresherOptions,this._sessionEventDispatcher,this._connectedDevice),new dj(n,this._sessionEventDispatcher,this._connectedDevice,this._deviceState,c=>this.setDeviceSessionState(c)),this._refresherService=new uj(n,{start:()=>this._deviceSessionRefresher.restartRefresher(),stop:()=>this._deviceSessionRefresher.stopRefresher()})}async initialiseSession(){try{this._refresherOptions.isRefresherDisabled?await this._pinger.ping():this._deviceSessionRefresher.startRefresher()}catch(t){throw this._logger.error("Error while initialising session",{data:{error:t}}),t}}get id(){return this._id}get connectedDevice(){return this._connectedDevice}get state(){return this._deviceState.asObservable()}getDeviceSessionState(){return this._deviceState.getValue()}setDeviceSessionState(t){this._deviceState.next(t)}sendApdu(t,r={isPolling:!1,triggersDisconnection:!1,abortTimeout:void 0}){return this._bypassIntentQueue?this._unsafeInternalSendApdu(t,r):this._internalSendApdu(t,r)}_internalSendApdu(t,r){const n=r.abortTimeout,i=Date.now(),{observable:o,cancel:s}=this._intentQueueService.enqueue({type:"send-apdu",execute:()=>Tl((async()=>{const c=Date.now()-i;return await this._unsafeInternalSendApdu(t,{isPolling:r.isPolling,triggersDisconnection:r.triggersDisconnection,abortTimeout:n?n-c:void 0})})())}),u=n?o.pipe(OC({each:n,with:()=>{throw s(),new X3}})):o;return RC(u)}async _unsafeInternalSendApdu(t,r={isPolling:!1,triggersDisconnection:!1,abortTimeout:void 0}){return this._logger.debug(rj(t)),(await this._connectedDevice.sendApdu(t,r.triggersDisconnection,r.abortTimeout)).ifRight(n=>{const{message:i,data:o}=oj(this._id,t,n);this._logger.debug(i,{data:o}),v1.isLockedDeviceResponse(n)?this._sessionEventDispatcher.dispatch({eventName:ur.DEVICE_STATE_UPDATE_LOCKED}):this._sessionEventDispatcher.dispatch({eventName:ur.DEVICE_STATE_UPDATE_CONNECTED})}).ifLeft(()=>{this._sessionEventDispatcher.dispatch({eventName:ur.DEVICE_STATE_UPDATE_UNKNOWN})})}sendCommand(t,r){return this._logger.debug(`[sendCommand] ${t.name}`),this._bypassIntentQueue?this._unsafeInternalSendCommand(t,r):this._internalSendCommand(t,r)}_internalSendCommand(t,r){const n=Date.now(),{observable:i,cancel:o}=this._intentQueueService.enqueue({type:"send-command",execute:()=>Tl((async()=>{const u=Date.now()-n;return await this._unsafeInternalSendCommand(t,r?r-u:void 0)})())}),s=r?i.pipe(OC({each:r,with:()=>{throw o(),new K3}})):i;return RC(s)}async _unsafeInternalSendCommand(t,r){const n=t.getApdu();return(await this._unsafeInternalSendApdu(n.getRawApdu(),{isPolling:!1,triggersDisconnection:t.triggersDisconnection??!1,abortTimeout:r})).caseOf({Left:i=>{throw this._logger.error("[sendCommand] error",{data:{err:i}}),i},Right:i=>{const o=t.parseResponse(i,this._connectedDevice.deviceModel.id);return this._logger.debug("[sendCommand] result",{data:{result:o}}),o}})}executeDeviceAction(t){return this._bypassIntentQueue?this._unsafeInternalExecuteDeviceAction(t):this._internalExecuteDeviceAction(t)}_internalExecuteDeviceAction(t){let r;const{observable:n,cancel:i}=this._intentQueueService.enqueue({type:"device-action",execute:()=>{const{observable:o,cancel:s}=this._unsafeInternalExecuteDeviceAction(t);return r=s,o}});return{observable:n,cancel:()=>{r?.(),i()}}}_unsafeInternalExecuteDeviceAction(t){const{observable:r,cancel:n}=t._execute({sendApdu:async i=>this._unsafeInternalSendApdu(i),sendCommand:async i=>this._unsafeInternalSendCommand(i),getDeviceModel:()=>this._connectedDevice.deviceModel,getDeviceSessionState:()=>this._deviceState.getValue(),getDeviceSessionStateObservable:()=>this.state,setDeviceSessionState:i=>(this.setDeviceSessionState(i),this._deviceState.getValue()),getManagerApiService:()=>this._managerApiService,getSecureChannelService:()=>this._secureChannelService,loggerFactory:this._loggerModuleFactory});return{observable:r,cancel:n}}close(){this._updateDeviceStatus(po.NOT_CONNECTED),this._deviceState.complete(),this._deviceSessionRefresher.stopRefresher(),this._pinger.unsubscribe()}disableRefresher(t){return this._refresherService.disableRefresher(t)}_unsafeBypassIntentQueue(t){this._bypassIntentQueue=t}_updateDeviceStatus(t){const r=this._deviceState.getValue();this._deviceState.next({...r,deviceStatus:t})}};const M1={SecureChannelService:Symbol.for("SecureChannelService"),SecureChannelDataSource:Symbol.for("SecureChannelDataSource"),DmkConfig:Symbol.for("SecureChannelDmkConfig")};var hj=(e,t,r,n)=>{for(var i=t,o=e.length-1,s;o>=0;o--)(s=e[o])&&(i=s(i)||i);return i},Cu=(e,t)=>(r,n)=>t(r,n,e);let h_=class{_transportService;_sessionService;_loggerFactory;_managerApi;_secureChannel;_logger;constructor(t,r,n,i,o){this._sessionService=r,this._transportService=t,this._loggerFactory=n,this._logger=n("ConnectUseCase"),this._managerApi=i,this._secureChannel=o}handleDeviceDisconnect(t){this._sessionService.getDeviceSessionsByDeviceId(t).ifRight(r=>{r.forEach(n=>{this._sessionService.removeDeviceSession(n.id),this._logger.info("Session removed",{data:{deviceId:t,sessionId:n.id}})})})}async execute({device:t,sessionRefresherOptions:r}){const n=this._transportService.getTransport(t.transport),i="sessionId"in t?t.sessionId:void 0;return pt.liftEither(n.toEither(new k1(new Error("Unknown transport")))).chain(async o=>o.connect({deviceId:t.id,onDisconnect:s=>this.handleDeviceDisconnect(s)})).ifLeft(o=>{this._logger.error("Error connecting to device")}).map(async o=>{const s=new pj({connectedDevice:o,id:i},this._loggerFactory,this._managerApi,this._secureChannel,r);return this._sessionService.addDeviceSession(s),await s.initialiseSession(),s.id}).caseOf({Left:o=>{throw o},Right:o=>o})}};h_=hj([Et(),Cu(0,Ye(Fa.TransportService)),Cu(1,Ye(un.DeviceSessionService)),Cu(2,Ye(Sr.LoggerPublisherServiceFactory)),Cu(3,Ye(Np.ManagerApiService)),Cu(4,Ye(M1.SecureChannelService))],h_);var gj=(e,t,r,n)=>{for(var i=t,o=e.length-1,s;o>=0;o--)(s=e[o])&&(i=s(i)||i);return i},um=(e,t)=>(r,n)=>t(r,n,e);let g_=class{_transportService;_sessionService;_logger;constructor(t,r,n){this._sessionService=r,this._transportService=t,this._logger=n("DisconnectUseCase")}async execute({sessionId:t}){return this._logger.debug("Disconnecting from device",{data:{test:this._sessionService.getDeviceSessions().map(r=>r.id)}}),pt(async({liftEither:r})=>{const n=await r(this._sessionService.getDeviceSessionById(t).ifLeft(s=>{this._logger.error("Device session not found",{data:{sessionId:t,error:s}})})),i=n.connectedDevice.transport,o=await r(this._transportService.getTransport(i).toEither(new k1(new Error("Unknown transport"))));n.close(),this._sessionService.removeDeviceSession(t),await o.disconnect({connectedDevice:n.connectedDevice})}).caseOf({Left:r=>{throw this._logger.error("Error disconnecting from device",{data:{error:r}}),r},Right:()=>{}})}};g_=gj([Et(),um(0,Ye(Fa.TransportService)),um(1,Ye(un.DeviceSessionService)),um(2,Ye(Sr.LoggerPublisherServiceFactory))],g_);let D1=class{id;sessionId;modelId;name;type;transport;constructor({transportConnectedDevice:{id:t,deviceModel:{id:r,productName:n},type:i,transport:o,name:s},sessionId:u}){this.id=t,this.sessionId=u,this.modelId=r,this.name=s??n,this.type=i,this.transport=o}};var vj=(e,t,r,n)=>{for(var i=t,o=e.length-1,s;o>=0;o--)(s=e[o])&&(i=s(i)||i);return i},v_=(e,t)=>(r,n)=>t(r,n,e);let m_=class{_sessionService;_logger;constructor(t,r){this._sessionService=t,this._logger=r("GetConnectedDeviceUseCase")}execute({sessionId:t}){return this._sessionService.getDeviceSessionById(t).caseOf({Right:r=>new D1({sessionId:r.id,transportConnectedDevice:r.connectedDevice}),Left:r=>{throw this._logger.error("Error getting session",{data:{error:r}}),r}})}};m_=vj([Et(),v_(0,Ye(un.DeviceSessionService)),v_(1,Ye(Sr.LoggerPublisherServiceFactory))],m_);var mj=(e,t,r,n)=>{for(var i=t,o=e.length-1,s;o>=0;o--)(s=e[o])&&(i=s(i)||i);return i},y_=(e,t)=>(r,n)=>t(r,n,e);let b_=class{_sessionService;_logger;constructor(t,r){this._sessionService=t,this._logger=r("ListConnectedDeviceUseCase")}execute(){return this._logger.info("Listing connected devices"),this._sessionService.getDeviceSessions().map(t=>new D1({transportConnectedDevice:t.connectedDevice,sessionId:t.id}))}};b_=mj([Et(),y_(0,Ye(un.DeviceSessionService)),y_(1,Ye(Sr.LoggerPublisherServiceFactory))],b_);var yj=(e,t,r,n)=>{for(var i=t,o=e.length-1,s;o>=0;o--)(s=e[o])&&(i=s(i)||i);return i},S_=(e,t)=>(r,n)=>t(r,n,e);let w_=class{_transports;_transportService;_logger;constructor(t,r){this._transports=t.getAllTransports(),this._transportService=t,this._logger=r("ListenToAvailableDevicesUseCase")}mapTransportDiscoveredDeviceToDiscoveredDevice(t){const r=new A$({id:t.id,model:t.deviceModel.id,name:t.deviceModel.productName});return{id:t.id,deviceModel:r,transport:t.transport,name:t.name||r.name,rssi:t.rssi}}execute({transport:t}={}){if(this._logger.info("Listening to available devices"),this._transports.length===0)return this._logger.warn("No transports available"),Tl([[]]);if(!t){this._logger.info("Discovering all available transports");const r=this._transports.map((n,i)=>n.listenToAvailableDevices().pipe(Da(o=>({index:i,arr:o}))));return z3(...r).pipe(W3((n,{index:i,arr:o})=>(n[i]=o,n),{}),Da(n=>Object.values(n).flat().map(this.mapTransportDiscoveredDeviceToDiscoveredDevice)))}return this._logger.info(`Discovering devices on transport ${t}`),this._transportService.getTransport(t).caseOf({Nothing:()=>(this._logger.error(`Transport ${t} not found`),a2([])),Just:r=>r.listenToAvailableDevices().pipe(Da(n=>n.map(this.mapTransportDiscoveredDeviceToDiscoveredDevice)))})}};w_=yj([Et(),S_(0,Ye(Fa.TransportService)),S_(1,Ye(Sr.LoggerPublisherServiceFactory))],w_);var bj=(e,t,r,n)=>{for(var i=t,o=e.length-1,s;o>=0;o--)(s=e[o])&&(i=s(i)||i);return i},x_=(e,t)=>(r,n)=>t(r,n,e);let E_=class{constructor(t,r){this._sessionService=t,this._logger=r("ListenToConnectedDeviceUseCase")}_logger;execute(){return this._logger.info("Observe connected devices"),this._sessionService.sessionsObs.pipe(Da(t=>new D1({transportConnectedDevice:t.connectedDevice,sessionId:t.id})))}};E_=bj([Et(),x_(0,Ye(un.DeviceSessionService)),x_(1,Ye(Sr.LoggerPublisherServiceFactory))],E_);var Sj=(e,t,r,n)=>{for(var i=t,o=e.length-1,s;o>=0;o--)(s=e[o])&&(i=s(i)||i);return i},cm=(e,t)=>(r,n)=>t(r,n,e);let C_=class{constructor(t,r,n){this.connectUseCase=t,this.disconnectUseCase=r,this._logger=n("ReconnectUseCase")}_logger;async execute({device:t,sessionRefresherOptions:r}){return this._logger.debug("Reconnecting device session",{data:{deviceId:t.id,transport:t.transport}}),await this.disconnectUseCase.execute({sessionId:t.sessionId}),this.connectUseCase.execute({device:t,sessionRefresherOptions:r})}};C_=Sj([Et(),cm(0,Ye(WC.ConnectUseCase)),cm(1,Ye(WC.DisconnectUseCase)),cm(2,Ye(Sr.LoggerPublisherServiceFactory))],C_);var wj=(e,t,r,n)=>{for(var i=t,o=e.length-1,s;o>=0;o--)(s=e[o])&&(i=s(i)||i);return i},xj=(e,t)=>(r,n)=>t(r,n,e);let __=class{constructor(t){this._transportService=t}mapDiscoveredDevice(t){const r=new A$({id:t.id,model:t.deviceModel.id,name:t.deviceModel.productName});return{id:t.id,deviceModel:r,transport:t.transport,name:t.name||r.name,rssi:t.rssi}}execute({transport:t}={}){if(!t){const r=this._transportService.getAllTransports();return a2(...r).pipe(A1(n=>n.startDiscovering().pipe(Da(i=>this.mapDiscoveredDevice(i)))))}return this._transportService.getTransport(t).caseOf({Just:r=>r.startDiscovering().pipe(Da(n=>this.mapDiscoveredDevice(n))),Nothing:()=>{throw new k1(new Error("Unknown transport"))}})}};__=wj([Et(),xj(0,Ye(Fa.TransportService))],__);var Ej=(e,t,r,n)=>{for(var i=t,o=e.length-1,s;o>=0;o--)(s=e[o])&&(i=s(i)||i);return i},R_=(e,t)=>(r,n)=>t(r,n,e);let O_=class{constructor(t,r){this.transportService=t,this._logger=r("StopDiscoveringUseCase")}_logger;async execute(){this._logger.debug("Stopping discovering devices");for(const t of this.transportService.getAllTransports())await t.stopDiscovering()}};O_=Ej([Et(),R_(0,Ye(Fa.TransportService)),R_(1,Ye(Sr.LoggerPublisherServiceFactory))],O_);var Mu=(e=>(e[e.Fatal=0]="Fatal",e[e.Error=1]="Error",e[e.Warning=2]="Warning",e[e.Info=3]="Info",e[e.Debug=4]="Debug",e))(Mu||{});let Cj=class{format(t){return Array.isArray(t)?t.map(r=>`[${r}]`).join(" "):`[${t}]`}};function q0(e,t){if(typeof e=="bigint")return e.toString();if(Array.isArray(e))return t.has(e)?"[Circular]":(t.add(e),e.map(r=>q0(r,t)));if(e!==null&&typeof e=="object"){if(t.has(e))return"[Circular]";t.add(e);const r={};for(const[n,i]of Object.entries(e))r[n]=q0(i,t);return r}return e}function _j(e){const t=new WeakSet;t.add(e);const r={};for(const[n,i]of Object.entries(e))r[n]=q0(i,t);return r}var Rj=(e,t,r,n)=>{for(var i=t,o=e.length-1,s;o>=0;o--)(s=e[o])&&(i=s(i)||i);return i};let T_=class{subscribers;tag;tagFormatter;constructor(t,r,n=new Cj){this.subscribers=t,this.tag=r,this.tagFormatter=n}_log(t,r,n){const i=n?.data?_j(n.data):void 0,o=n?.tag??this.tag,s=this.tagFormatter.format(o);this.subscribers.forEach(u=>{const c={timestamp:n?.timestamp??Date.now(),tag:s,data:i};u.log(t,r,c)})}info(t,r){this._log(Mu.Info,t,r)}warn(t,r){this._log(Mu.Warning,t,r)}debug(t,r){this._log(Mu.Debug,t,r)}error(t,r){this._log(Mu.Error,t,r)}};T_=Rj([Et()],T_);let ac=class extends Error{status;statusText;responseBody;isTimeout;cause;constructor(t){super(t.message),this.name="DmkNetworkClientError",this.status=t.status,this.statusText=t.statusText,this.responseBody=t.responseBody,this.isTimeout=t.isTimeout??!1,this.cause=t.cause}};const Oj="application/json";function Tj(e,t){if(!t)return e;const r=e.endsWith("/")?e.slice(0,-1):e,n=t.startsWith("/")?t:`/${t}`;return`${r}${n}`}function $j(e){const t=[];for(const[r,n]of Object.entries(e))n!=null&&t.push(`${encodeURIComponent(r)}=${encodeURIComponent(String(n))}`);return t.join("&")}function os(e){const{url:t,params:r,baseUrl:n}=e,i=/^[a-z][a-z0-9+.-]*:\/\//i.test(t)?t:n?Tj(n,t):t,o=r?$j(r):"";if(o.length===0)return i;const s=i.includes("?")?"&":"?";return`${i}${s}${o}`}function Ij(e,t){const r=t.toLowerCase();return Object.keys(e).some(n=>n.toLowerCase()===r)}function Aj(e){return!!(typeof e=="string"||e instanceof ArrayBuffer||ArrayBuffer.isView(e)||typeof Blob<"u"&&e instanceof Blob||typeof FormData<"u"&&e instanceof FormData||typeof URLSearchParams<"u"&&e instanceof URLSearchParams||typeof ReadableStream<"u"&&e instanceof ReadableStream)}function kj(e){const{method:t,body:r,defaultHeaders:n,perRequestHeaders:i}=e,o={...n,...i};return r===void 0||t==="GET"||t==="HEAD"?{body:void 0,headers:o}:Aj(r)?{body:r,headers:o}:(Ij(o,"content-type")||(o["Content-Type"]=Oj),{body:JSON.stringify(r),headers:o})}function Pj(e){const{timeoutMs:t}=e;if(!t||t<=0)return{signal:void 0,cleanup:()=>{}};const r=new AbortController,n=setTimeout(()=>{r.abort()},t);return{signal:r.signal,cleanup:()=>clearTimeout(n)}}async function Mj(e,t){switch(t){case"void":return;case"text":return await e.text();case"blob":return await e.blob();case"arrayBuffer":return await e.arrayBuffer();case"json":default:{const r=await e.text();if(r.length===0)return;try{return JSON.parse(r)}catch(n){throw new ac({message:"Failed to parse JSON response body",status:e.status,statusText:e.statusText,responseBody:r,cause:n})}}}}async function Dj(e){try{return await e.text()}catch{return}}function Lj(e){const{cause:t,timeoutMs:r}=e,n=!!(r&&r>0);if(t instanceof Error&&(t.name==="AbortError"||t.name==="TimeoutError")){const i=t.name==="TimeoutError"||n;return new ac({message:i?"Request timed out":"Request aborted",isTimeout:i,cause:t})}return new ac({message:t instanceof Error?t.message:"Network request failed",cause:t})}let p2=class{baseUrl;defaultHeaders;fetchImpl;constructor(t={}){this.baseUrl=t.baseUrl,this.defaultHeaders=t.headers??{},this.fetchImpl=t.fetch}getFetch(){return this.fetchImpl??globalThis.fetch.bind(globalThis)}get(t,r){return this.request({...r,method:"GET",url:t}).then(n=>n.data)}post(t,r,n){return this.request({...n,method:"POST",url:t,body:r}).then(i=>i.data)}put(t,r,n){return this.request({...n,method:"PUT",url:t,body:r}).then(i=>i.data)}patch(t,r,n){return this.request({...n,method:"PATCH",url:t,body:r}).then(i=>i.data)}delete(t,r){return this.request({...r,method:"DELETE",url:t}).then(n=>n.data)}head(t,r){return this.request({...r,method:"HEAD",url:t,responseType:"void"}).then(()=>{})}async request(t){const r=os({url:t.url,params:t.params,baseUrl:this.baseUrl}),{body:n,headers:i}=kj({method:t.method,body:t.body,defaultHeaders:this.defaultHeaders,perRequestHeaders:t.headers}),{signal:o,cleanup:s}=Pj({timeoutMs:t.timeoutMs}),u=t.throwOnHttpError??!0,c=t.responseType??"json";try{let f;try{f=await this.getFetch()(r,{method:t.method,headers:i,body:n,signal:o})}catch(p){throw Lj({cause:p,timeoutMs:t.timeoutMs})}if(!f.ok&&u){const p=await Dj(f);throw new ac({message:`HTTP error ${f.status} ${f.statusText}`.trim(),status:f.status,statusText:f.statusText,responseBody:p})}return{data:await Mj(f,c),status:f.status,statusText:f.statusText,headers:f.headers,ok:f.ok}}finally{s()}}};var Du=(e=>(e.currency="currency",e.plugin="plugin",e.tool="tool",e.swap="swap",e))(Du||{});const Fj=1,Nj="0";let lp=class{constructor(t){this.error=t,this.originalError=t}_tag="FetchError";originalError};var Lu=(e=>(e.currency="currency",e.plugin="plugin",e.tool="tool",e.swap="swap",e))(Lu||{}),jj=(e,t,r,n)=>{for(var i=t,o=e.length-1,s;o>=0;o--)(s=e[o])&&(i=s(i)||i);return i},zj=(e,t)=>(r,n)=>t(r,n,e);const Go=e=>e instanceof ac&&e.cause!==void 0?new lp(e.cause):new lp(e);let $_=class{http;_provider=Fj;_firmwareDistributionSalt=Nj;constructor({managerApiUrl:t,provider:r,firmwareDistributionSalt:n}){this.http=new p2({baseUrl:t}),this._provider=r,this._firmwareDistributionSalt=n}setProvider(t){this._provider===t||t<1||(this._provider=t)}getProvider(){return this._provider}getAppList(t){const{targetId:r,firmwareVersionName:n}=t;return pt(()=>this.http.get("/v2/apps/by-target",{params:{target_id:r,provider:this._provider,firmware_version_name:n}})).chain(i=>this.mapApplicationDtoToApplication(i)).mapLeft(Go)}getMcuList(){return pt(()=>this.http.get("/mcu_versions")).chain(t=>this.mapMcuDtoToMcu(t)).mapLeft(Go)}getDeviceVersion(t){const{targetId:r}=t;return pt(()=>this.http.get("/get_device_version",{params:{target_id:r,provider:this._provider}})).chain(n=>this.mapDeviceVersionDto(n)).mapLeft(Go)}getFirmwareVersion(t){const{deviceId:r,version:n}=t;return pt(()=>this.http.get("/get_firmware_version",{params:{device_version:r,version_name:n,provider:this._provider}})).chain(i=>this.mapFinalFirmwareDto(i)).mapLeft(Go)}getFirmwareVersionById(t){return pt(()=>this.http.get(`/firmware_final_versions/${t}`)).chain(r=>this.mapFinalFirmwareDto(r)).mapLeft(Go)}getOsuFirmwareVersion(t){const{deviceId:r,version:n}=t;return pt(()=>this.http.get("/get_osu_version",{params:{device_version:r,version_name:n,provider:this._provider}})).chain(i=>this.mapOsuFirmwareDto(i)).mapLeft(Go)}getLatestFirmwareVersion(t){const r="34.27.0",{currentFinalFirmwareId:n,deviceId:i}=t;return pt(()=>this.http.get("/get_latest_firmware",{params:{current_se_firmware_final_version:n,device_version:i,provider:this._provider,salt:this._firmwareDistributionSalt,livecommonversion:r}})).chain(o=>this.mapLatestFirmwareDto(o)).mapLeft(Go)}getAppsByHash(t){const{hashes:r}=t;return pt(()=>this.http.post("/v2/apps/hash",r)).chain(n=>this.mapNullableApplicationDtoToApplication(n)).mapLeft(Go)}getLanguagePackages(t){const{deviceId:r,currentFinalFirmwareId:n}=t;return pt(()=>this.http.get("/language-packages",{params:{device_version:r,current_se_firmware_final_version:n}})).chain(i=>this.mapLanguagesDtoToLanguages(i)).mapLeft(Go)}mapAppTypeDtoToAppType(t){if(t===null)return null;switch(t){case Lu.currency:return Du.currency;case Lu.plugin:return Du.plugin;case Lu.tool:return Du.tool;case Lu.swap:return Du.swap}}mapApplicationDtoToApplication(t){return pt(()=>Promise.resolve(t.map(r=>this.mapApplicationDto(r))))}mapNullableApplicationDtoToApplication(t){return pt(()=>Promise.resolve(t.map(r=>r===null?null:this.mapApplicationDto(r))))}mapApplicationDto(t){if(typeof t!="object"||typeof t.versionId!="number"||typeof t.versionName!="string"||t.versionDisplayName!==null&&typeof t.versionDisplayName!="string"||typeof t.version!="string"||t.currencyId!==null&&typeof t.currencyId!="string"||t.description!==null&&typeof t.description!="string"||t.applicationType!==null&&typeof t.applicationType!="string"||typeof t.dateModified!="string"||t.icon!==null&&typeof t.icon!="string"||t.authorName!==null&&typeof t.authorName!="string"||t.supportURL!==null&&typeof t.supportURL!="string"||t.contactURL!==null&&typeof t.contactURL!="string"||t.sourceURL!==null&&typeof t.sourceURL!="string"||t.compatibleWallets!==null&&typeof t.compatibleWallets!="string"||typeof t.hash!="string"||typeof t.perso!="string"||typeof t.firmware!="string"||typeof t.firmwareKey!="string"||typeof t.delete!="string"||typeof t.deleteKey!="string"||t.bytes!==null&&typeof t.bytes!="number"||t.warning!==null&&typeof t.warning!="string"||typeof t.isDevTools!="boolean"||t.category!==null&&typeof t.category!="number"||t.parent!==null&&typeof t.parent!="number"||t.parentName!==null&&typeof t.parentName!="string")throw new Error(`Incomplete application: ${JSON.stringify(t)}`);const{applicationType:r,hash:n,perso:i,firmware:o,firmwareKey:s,delete:u,deleteKey:c,...f}=t;return{...f,hash:n,perso:i,firmware:o,firmwareKey:s,delete:u,deleteKey:c,applicationType:this.mapAppTypeDtoToAppType(r)}}mapMcuDtoToMcu(t){return pt(()=>Promise.resolve(t.map(r=>{if(typeof r!="object"||typeof r.id!="number"||typeof r.name!="string")throw new Error(`Incomplete MCU version: ${JSON.stringify(r)}`);return{id:r.id,name:r.name}})))}mapDeviceVersionDto(t){return pt(()=>{if(typeof t!="object"||typeof t.id!="number")throw new Error(`Incomplete device version: ${JSON.stringify(t)}`);const r={id:t.id};return Promise.resolve(r)})}mapFinalFirmwareDto(t){return pt(()=>{if(typeof t!="object"||typeof t.id!="number"||typeof t.version!="string"||typeof t.perso!="string"||t.firmware!==null&&typeof t.firmware!="string"||t.firmware_key!==null&&typeof t.firmware_key!="string"||t.hash!==null&&typeof t.hash!="string"||t.bytes!==null&&typeof t.bytes!="number"||!Array.isArray(t.mcu_versions))throw new Error(`Incomplete final firmware: ${JSON.stringify(t)}`);const r={id:t.id,version:t.version,perso:t.perso,firmware:t.firmware,firmwareKey:t.firmware_key,hash:t.hash,bytes:t.bytes,mcuVersions:t.mcu_versions};return Promise.resolve(r)})}mapLatestFirmwareDto(t){return pt(()=>{if(t.result!=="success"||!t.se_firmware_osu_version)throw new Error(`Latest firmware could not be retrieved: ${t.result}`);const r=t.se_firmware_osu_version;return Promise.resolve(r)}).chain(r=>this.mapOsuFirmwareDto(r))}mapOsuFirmwareDto(t){return pt(()=>{if(typeof t!="object"||typeof t.id!="number"||typeof t.perso!="string"||typeof t.firmware!="string"||typeof t.firmware_key!="string"||t.hash!==null&&typeof t.hash!="string"||typeof t.next_se_firmware_final_version!="number")throw new Error(`Incomplete latest firmware: ${JSON.stringify(t)}`);const r={id:t.id,perso:t.perso,firmware:t.firmware,firmwareKey:t.firmware_key,hash:t.hash,nextFinalFirmware:t.next_se_firmware_final_version};return Promise.resolve(r)})}mapLanguagesDtoToLanguages(t){return pt(()=>Promise.resolve(t.map(r=>this.mapLanguageDto(r))))}mapLanguageDto(t){if(typeof t!="object"||typeof t.language!="string"||typeof t.languagePackageVersionId!="number"||typeof t.version!="string"||typeof t.language_package_id!="number"||typeof t.apdu_install_url!="string"||typeof t.apdu_uninstall_url!="string"||typeof t.bytes!="number"||typeof t.date_creation!="string"||typeof t.date_last_modified!="string")throw new Error(`Incomplete language version: ${JSON.stringify(t)}`);return{language:t.language,languagePackageVersionId:t.languagePackageVersionId,version:t.version,languagePackageId:t.language_package_id,apduInstallUrl:t.apdu_install_url,apduUninstallUrl:t.apdu_uninstall_url,bytes:t.bytes,dateCreation:t.date_creation,dateLastModified:t.date_last_modified}}};$_=jj([Et(),zj(0,Ye(Np.DmkConfig))],$_);var Bj=(e,t,r,n)=>{for(var i=t,o=e.length-1,s;o>=0;o--)(s=e[o])&&(i=s(i)||i);return i},Vj=(e,t)=>(r,n)=>t(r,n,e);let I_=class{constructor(t){this.dataSource=t}getAppList(t){const r={targetId:t.targetId.toString(),firmwareVersionName:t.seVersion};return this.dataSource.getAppList(r)}getDeviceVersion(t){const r={targetId:t.targetId.toString()};return this.dataSource.getDeviceVersion(r)}getFirmwareVersion(t,r){const n={version:t.seVersion,deviceId:r.id};return this.dataSource.getFirmwareVersion(n)}getOsuFirmwareVersion(t,r){const n={version:t.seVersion,deviceId:r.id};return this.dataSource.getOsuFirmwareVersion(n)}getLatestFirmwareVersion(t,r){const n={currentFinalFirmwareId:t.id,deviceId:r.id};return this.dataSource.getLatestFirmwareVersion(n)}getNextFirmwareVersion(t){return this.dataSource.getFirmwareVersionById(t.nextFinalFirmware)}getLanguagePackages(t,r){const n={deviceId:t.id,currentFinalFirmwareId:r.id};return this.dataSource.getLanguagePackages(n)}getMcuList(){return this.dataSource.getMcuList()}getAppsByHash(t){const r={hashes:t};return pt(async({fromPromise:n,throwE:i})=>{if(r.hashes.length===0)return[];try{return await n(this.dataSource.getAppsByHash(r))}catch(o){return o instanceof lp?i(o):i(new lp(o))}})}};I_=Bj([Et(),Vj(0,Ye(Np.ManagerApiDataSource))],I_);var Hj=(e,t,r,n)=>{for(var i=t,o=e.length-1,s;o>=0;o--)(s=e[o])&&(i=s(i)||i);return i},A_=(e,t)=>(r,n)=>t(r,n,e);let k_=class{constructor(t,r){this.sessionService=t,this.managerApiDataSource=r}execute(t){for(const r of this.sessionService.getDeviceSessions()){const n=r.getDeviceSessionState();n.sessionStateType!==$l.Connected&&r.setDeviceSessionState({...n,firmwareUpdateContext:void 0,installedApps:[],appsUpdates:void 0,catalog:void 0})}this.managerApiDataSource.setProvider(t)}};k_=Hj([Et(),A_(0,Ye(un.DeviceSessionService)),A_(1,Ye(Np.ManagerApiDataSource))],k_);var Uj=(e,t,r,n)=>{for(var i=t,o=e.length-1,s;o>=0;o--)(s=e[o])&&(i=s(i)||i);return i},Wj=(e,t)=>(r,n)=>t(r,n,e);let P_=class{webSocketBaseUrl;constructor({webSocketUrl:t}){this.webSocketBaseUrl=t}genuineCheck(t){const r=os({baseUrl:this.webSocketBaseUrl,url:"/genuine",params:t});return this._connectWebSocket(r)}installApp(t){const r=os({baseUrl:this.webSocketBaseUrl,url:"/install",params:t});return this._connectWebSocket(r)}listInstalledApps(t){const r=os({baseUrl:this.webSocketBaseUrl,url:"/apps/list",params:t});return this._connectWebSocket(r)}uninstallApp(t){const r=os({baseUrl:this.webSocketBaseUrl,url:"/install",params:t});return this._connectWebSocket(r)}updateFirmware(t){const r=os({baseUrl:this.webSocketBaseUrl,url:"/install",params:t});return this._connectWebSocket(r)}updateMcu(t){const r=os({baseUrl:this.webSocketBaseUrl,url:"/mcu",params:t});return this._connectWebSocket(r)}_connectWebSocket(t){try{return nr(new J3(t))}catch(r){return Ut(new i4(r))}}};P_=Uj([Et(),Wj(0,Ye(M1.DmkConfig))],P_);var Gj=(e,t,r,n)=>{for(var i=t,o=e.length-1,s;o>=0;o--)(s=e[o])&&(i=s(i)||i);return i},qj=(e,t)=>(r,n)=>t(r,n,e);let M_=class{constructor(t){this.dataSource=t}genuineCheck(t,r){const n={targetId:t.targetId.toString(),perso:r.perso};return this.dataSource.genuineCheck(n)}installApp(t,r){const{perso:n,firmware:i,firmwareKey:o,hash:s}=r,u={targetId:t.targetId.toString(),perso:n,firmware:i,firmwareKey:o,hash:s};return this.dataSource.installApp(u)}listInstalledApps(t,r){const n={targetId:t.targetId.toString(),perso:r.perso};return this.dataSource.listInstalledApps(n)}uninstallApp(t,r){const{perso:n,delete:i,deleteKey:o,hash:s}=r,u={targetId:t.targetId.toString(),perso:n,firmware:i,firmwareKey:o,hash:s};return this.dataSource.uninstallApp(u)}updateFirmware(t,r){const n={targetId:t.targetId.toString(),perso:r.perso,firmware:r.firmware,firmwareKey:r.firmwareKey};return this.dataSource.updateFirmware(n)}updateMcu(t,r){const n={targetId:t.targetId.toString(),version:r.version};return this.dataSource.updateMcu(n)}};M_=Gj([Et(),qj(0,Ye(M1.SecureChannelDataSource))],M_);var Xj=(e,t,r,n)=>{for(var i=t,o=e.length-1,s;o>=0;o--)(s=e[o])&&(i=s(i)||i);return i},D_=(e,t)=>(r,n)=>t(r,n,e);let L_=class{_sessionService;_logger;constructor(t,r){this._sessionService=t,this._logger=r("SendApduUseCase")}async execute({sessionId:t,apdu:r,abortTimeout:n,triggersDisconnection:i}){return this._sessionService.getDeviceSessionById(t).caseOf({Right:async o=>(await o.sendApdu(r,{abortTimeout:n,triggersDisconnection:i})).caseOf({Right:s=>s,Left:s=>{throw this._logger.error("Error sending APDU",{data:{sessionId:t,apdu:r,error:s}}),s}}),Left:o=>{throw this._logger.error("Error getting deviceSession",{data:{error:o}}),o}})}};L_=Xj([Et(),D_(0,Ye(un.DeviceSessionService)),D_(1,Ye(Sr.LoggerPublisherServiceFactory))],L_);var Kj=(e,t,r,n)=>{for(var i=t,o=e.length-1,s;o>=0;o--)(s=e[o])&&(i=s(i)||i);return i},Js=(e,t)=>(r,n)=>t(r,n,e);let F_=class{constructor(t,r,n,i,o,s){if(this._config=r,this._loggerModuleFactory=n,this._deviceModelDataSource=i,this._apduSenderServiceFactory=o,this._apduReceiverServiceFactory=s,this._logger=n("TransportService"),t.length===0)throw this._logger.warn("No transports provided, please check your configuration"),new Q3("No transports provided, please check your configuration");for(const u of t){const c=this.addTransport(u);if(c.isLeft())throw c.extract()}}_transports=new Map;_logger;addTransport(t){const r=t({deviceModelDataSource:this._deviceModelDataSource,loggerServiceFactory:this._loggerModuleFactory,config:this._config,apduSenderServiceFactory:this._apduSenderServiceFactory,apduReceiverServiceFactory:this._apduReceiverServiceFactory});return this.addTransportInternal(r)}addTransportInternal(t){return this.getTransport(t.getIdentifier()).isJust()?(this._logger.warn(`Transport ${t.getIdentifier()} already exists, please check your configuration`),Ut(new Y3(`Transport ${t.getIdentifier()} already exists, please check your configuration`))):(this._transports.set(t.getIdentifier(),t),nr(void 0))}getTransport(t){return En.fromNullable(this._transports.get(t))}getAllTransports(){return Array.from(this._transports.values())}closeConnection(t){this.getTransport(t.transport).map(r=>r.disconnect({connectedDevice:t}))}};F_=Kj([Et(),Js(0,Ye(Fa.TransportsInput)),Js(1,Ye(Fa.DmkConfig)),Js(2,Ye(Sr.LoggerPublisherServiceFactory)),Js(3,Ye(K4.DeviceModelDataSource)),Js(4,Ye(un.ApduSenderServiceFactory)),Js(5,Ye(un.ApduReceiverServiceFactory))],F_);const Yj={ADD_LOG:"addLog"};function Qj(e){return{startListeningCommand:()=>e.sendMessage(Qo.START_LISTENING_DEVICES,"{}"),stopListeningCommand:()=>e.sendMessage(Qo.STOP_LISTENING_DEVICES,"{}"),startDiscoveringCommand:()=>e.sendMessage(Qo.START_DISCOVERING,"{}"),stopDiscoveringCommand:()=>e.sendMessage(Qo.STOP_DISCOVERING,"{}"),connectDeviceCommand:(t,r)=>e.sendMessage(Qo.CONNECT_DEVICE,JSON.stringify({deviceId:t,sessionRefresherOptions:r}))}}function Jj(e){return{getProviderCommand:()=>e.sendMessage(Qo.GET_PROVIDER,"{}"),setProviderCommand:t=>e.sendMessage(Qo.SET_PROVIDER,JSON.stringify({provider:t}))}}let Zj=0;function ez(e){return{sendApduCommand:(t,r)=>{const n=`apdu-${++Zj}`,i=r.match(/.{1,2}/g)?.map(o=>parseInt(o,16))||[];return e.sendMessage(Qo.SEND_APDU,JSON.stringify({sessionId:t,apdu:i,requestId:n})),n}}}function tz(e){const{timestamp:t,tag:r,verbosity:n,message:i,payloadJSON:o}=JSON.parse(e);return{timestamp:t,tag:r,verbosity:n,message:i,payloadJSON:o,payload:JSON.parse(o)}}const rz="apdu-exchange";function nz(e){const t=e.payload;return typeof t!="object"||t===null||Array.isArray(t)||t.type!==rz||typeof t.apdu!="string"||typeof t.response!="string"?null:{sessionId:typeof t.sessionId=="string"?t.sessionId:void 0,apdu:t.apdu,response:t.response,timestamp:e.timestamp}}function iz(e,t){try{const{module:r}=JSON.parse(e);t(n=>new Set([...n,r]))}catch(r){console.error("Failed to parse moduleConnected payload",r)}}function oz(e,t,r,n){const i=tz(e);if(i!==null){if(t(o=>[...o,i]),n){const o=nz(i);o!==null&&r(s=>[...s,o])}return!0}return!1}function az(e,t){try{const r=JSON.parse(e);t(r)}catch(r){console.error("Failed to parse connectedDevicesUpdate payload",r)}}function sz(e,t){try{const{sessionId:r,state:n}=JSON.parse(e);t(i=>new Map(i).set(r,n))}catch(r){console.error("Failed to parse deviceSessionStateUpdate payload",r)}}function lz(e,t){try{const r=JSON.parse(e);t(r)}catch(r){console.error("Failed to parse discoveredDevicesUpdate payload",r)}}function uz(e,t){try{const{provider:r}=JSON.parse(e);t(r)}catch(r){console.error("Failed to parse providerValue payload",r)}}function cz(e,t){try{const r=JSON.parse(e);t(n=>new Map(n).set(r.requestId,r))}catch(r){console.error("Failed to parse apduResponse payload",r)}}function fz(e){const[t,r]=x.useState([]),[n,i]=x.useState([]),[o,s]=x.useState([]),[u,c]=x.useState(new Set),[f,p]=x.useState([]),[g,h]=x.useState(new Map),[m,y]=x.useState([]),[b,S]=x.useState(!1),[_,C]=x.useState(!1),[O,R]=x.useState(null),[T,$]=x.useState(new Map),[P,L]=x.useState([]),[z,B]=x.useState(!1),X=x.useRef(!1),Y=x.useMemo(()=>({...e,sendMessage:(W,ve)=>{e.sendMessage(W,ve),i(se=>[...se,{type:W,payload:ve}])}}),[e]);x.useEffect(()=>{const{unsubscribe:W}=e.listenToMessages((ve,se)=>{switch(r(Ee=>[...Ee,{type:ve,payload:se}]),ve){case tN:iz(se,c);break;case Eu.CONNECTED_DEVICES_UPDATE:az(se,p);break;case Eu.DEVICE_SESSION_STATE_UPDATE:sz(se,h);break;case Eu.DISCOVERED_DEVICES_UPDATE:lz(se,y);break;case Eu.PROVIDER_VALUE:uz(se,R);break;case Eu.APDU_RESPONSE:cz(se,$);break;case Yj.ADD_LOG:oz(se,s,L,X.current);break}});return W},[e]);const N=x.useMemo(()=>Qj(Y),[Y]),j=x.useMemo(()=>Jj(Y),[Y]),F=x.useMemo(()=>ez(Y),[Y]),q=x.useCallback(()=>{S(!0),y([]),N.startListeningCommand()},[N]),U=x.useCallback(()=>{S(!1),y([]),N.stopListeningCommand()},[N]),M=x.useCallback(()=>{C(!0),y([]),N.startDiscoveringCommand()},[N]),G=x.useCallback(()=>{C(!1),y([]),N.stopDiscoveringCommand()},[N]),K=x.useCallback(()=>{s([])},[]),D=x.useCallback(()=>{X.current=!0,B(!0)},[]),A=x.useCallback(()=>{X.current=!1,B(!1)},[]),J=x.useCallback(()=>{L([])},[]),Z=u.has(xE.LOGGER),ne=u.has(xE.DMK_INSPECTOR);return{receivedMessages:t,sentMessages:n,logs:o,connectedModules:u,connectedDevices:f,sessionStates:g,discoveredDevices:m,isListening:b,isActivelyDiscovering:_,isLoggerConnected:Z,isInspectorConnected:ne,providerValue:O,apduResponses:T,apduExchanges:P,isRecordingExchanges:z,sendMessage:Y.sendMessage,clearLogs:K,startRecordingExchanges:D,stopRecordingExchanges:A,clearRecordedExchanges:J,startListening:q,stopListening:U,startDiscovering:M,stopDiscovering:G,connectDevice:N.connectDeviceCommand,getProvider:j.getProviderCommand,setProvider:j.setProviderCommand,sendApdu:F.sendApduCommand}}const dz=ge.div`
|
|
525
|
+
Found @inject decorator at method "${f.toString()}" at class "${c.constructor.name}"`);Hu(c.constructor,Bd,Vd,MC(u(c),f))}})(e,t)(r,n,i)}catch(o){d4(r,n,i,o)}}}function im(e,t){return r=>{const n=t(r);return i=>(n(i),e(i))}}function Ye(e){return p4(f4(oc.singleInjection,e),l4)}(function(e){e[e.method=0]="method",e[e.parameter=1]="parameter",e[e.property=2]="property"})(Ra||(Ra={}));const DC="@inversifyjs/core/classIsInjectableFlagReflectKey",h4=[Array,BigInt,Boolean,Function,Number,Object,String];function g4(e){const t=P1(e,"design:paramtypes");t!==void 0&&Hu(e,Bd,Vd,(function(r){return n=>(r.forEach(((i,o)=>{var s;n.constructorArguments[o]!==void 0||(s=i,h4.includes(s))||(n.constructorArguments[o]=(function(u){return{isFromTypescriptParamType:!0,kind:oc.singleInjection,name:void 0,optional:!1,tags:new Map,value:u}})(i))})),n)})(t))}function Et(e){return t=>{(function(r){if(P1(r,DC)!==void 0)throw new La(bo.injectionDecoratorConflict,`Cannot apply @injectable decorator multiple times at class "${r.name}"`);o4(r,DC,!0)})(t),g4(t)}}var LC;(function(e){e[e.multipleInjection=0]="multipleInjection",e[e.singleInjection=1]="singleInjection"})(LC||(LC={}));var FC;(function(e){e[e.singleMandatory=0]="singleMandatory",e[e.singleOptional=1]="singleOptional",e[e.multipleMandatory=2]="multipleMandatory",e[e.multipleOptional=3]="multipleOptional",e[e.length=4]="length"})(FC||(FC={}));let v4=class{constructor(t,r,n,i,o){this.deviceModel=t,this.serviceUuid=r,this.writeUuid=n,this.writeCmdUuid=i,this.notifyUuid=o}},Qs=class{id;productName;usbProductId;bootloaderUsbProductId;usbOnly;memorySize;getBlockSize;masks;bluetoothSpec;constructor(t){this.id=t.id,this.productName=t.productName,this.usbProductId=t.usbProductId,this.bootloaderUsbProductId=t.bootloaderUsbProductId,this.usbOnly=t.usbOnly,this.memorySize=t.memorySize,this.getBlockSize=t.getBlockSize,this.masks=t.masks,this.bluetoothSpec=t.bluetoothSpec}};var m4=Object.defineProperty,y4=(e,t,r)=>t in e?m4(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,b4=(e,t,r,n)=>{for(var i=t,o=e.length-1,s;o>=0;o--)(s=e[o])&&(i=s(i)||i);return i},S4=(e,t,r)=>y4(e,t+"",r);let Oa=class{getAllDeviceModels(){return Object.values(Oa.deviceModelByIds)}getDeviceModel(t){return Oa.deviceModelByIds[t.id]}filterDeviceModels(t){return this.getAllDeviceModels().filter(r=>Object.entries(t).every(([n,i])=>r[n]===i))}getBluetoothServicesInfos(){return Object.values(Oa.deviceModelByIds).reduce((t,r)=>{const{bluetoothSpec:n}=r;return n?{...t,...n.reduce((i,o)=>({...i,[o.serviceUuid]:new v4(r,o.serviceUuid,o.writeUuid,o.writeCmdUuid,o.notifyUuid)}),{})}:t},{})}getBluetoothServices(){return Object.values(Oa.deviceModelByIds).map(t=>(t.bluetoothSpec||[]).map(r=>r.serviceUuid)).flat().filter(t=>!!t)}};S4(Oa,"deviceModelByIds",{[qt.NANO_S]:new Qs({id:qt.NANO_S,productName:"Ledger Nano S",usbProductId:16,bootloaderUsbProductId:1,usbOnly:!0,memorySize:320*1024,getBlockSize:e=>SC.lt(SC.coerce(e.firmwareVersion)??"","2.0.0")?4*1024:2*1024,masks:[823132160]}),[qt.NANO_SP]:new Qs({id:qt.NANO_SP,productName:"Ledger Nano S Plus",usbProductId:80,bootloaderUsbProductId:5,usbOnly:!0,memorySize:1533*1024,getBlockSize:()=>512,masks:[856686592]}),[qt.NANO_X]:new Qs({id:qt.NANO_X,productName:"Ledger Nano X",usbProductId:64,bootloaderUsbProductId:4,usbOnly:!1,memorySize:2*1024*1024,getBlockSize:()=>4*1024,masks:[855638016],bluetoothSpec:[{serviceUuid:"13d63400-2c97-0004-0000-4c6564676572",notifyUuid:"13d63400-2c97-0004-0001-4c6564676572",writeUuid:"13d63400-2c97-0004-0002-4c6564676572",writeCmdUuid:"13d63400-2c97-0004-0003-4c6564676572"}]}),[qt.STAX]:new Qs({id:qt.STAX,productName:"Ledger Stax",usbProductId:96,bootloaderUsbProductId:6,usbOnly:!1,memorySize:1533*1024,getBlockSize:()=>512,masks:[857735168],bluetoothSpec:[{serviceUuid:"13d63400-2c97-6004-0000-4c6564676572",notifyUuid:"13d63400-2c97-6004-0001-4c6564676572",writeUuid:"13d63400-2c97-6004-0002-4c6564676572",writeCmdUuid:"13d63400-2c97-6004-0003-4c6564676572"}]}),[qt.FLEX]:new Qs({id:qt.FLEX,productName:"Ledger Flex",usbProductId:112,bootloaderUsbProductId:7,usbOnly:!1,memorySize:1533*1024,getBlockSize:()=>512,masks:[858783744],bluetoothSpec:[{serviceUuid:"13d63400-2c97-3004-0000-4c6564676572",notifyUuid:"13d63400-2c97-3004-0001-4c6564676572",writeUuid:"13d63400-2c97-3004-0002-4c6564676572",writeCmdUuid:"13d63400-2c97-3004-0003-4c6564676572"}]}),[qt.APEX]:new Qs({id:qt.APEX,productName:"Ledger Nano Gen5",usbProductId:128,bootloaderUsbProductId:8,usbOnly:!1,memorySize:1533*1024,getBlockSize:()=>512,masks:[859832320],bluetoothSpec:[{serviceUuid:"13d63400-2c97-8004-0000-4c6564676572",notifyUuid:"13d63400-2c97-8004-0001-4c6564676572",writeUuid:"13d63400-2c97-8004-0002-4c6564676572",writeCmdUuid:"13d63400-2c97-8004-0003-4c6564676572"},{serviceUuid:"13d63400-2c97-9004-0000-4c6564676572",notifyUuid:"13d63400-2c97-9004-0001-4c6564676572",writeUuid:"13d63400-2c97-9004-0002-4c6564676572",writeCmdUuid:"13d63400-2c97-9004-0003-4c6564676572"}]})}),Oa=b4([Et()],Oa);let w4=class{statusCode;data;constructor({statusCode:t,data:r}){this.statusCode=t,this.data=r}};const x4=5,is=1,H0=2,pl=2,U0=2,Pr=[];for(let e=0;e<256;++e)Pr.push((e+256).toString(16).slice(1));function E4(e,t=0){return(Pr[e[t+0]]+Pr[e[t+1]]+Pr[e[t+2]]+Pr[e[t+3]]+"-"+Pr[e[t+4]]+Pr[e[t+5]]+"-"+Pr[e[t+6]]+Pr[e[t+7]]+"-"+Pr[e[t+8]]+Pr[e[t+9]]+"-"+Pr[e[t+10]]+Pr[e[t+11]]+Pr[e[t+12]]+Pr[e[t+13]]+Pr[e[t+14]]+Pr[e[t+15]]).toLowerCase()}let om;const C4=new Uint8Array(16);function _4(){if(!om){if(typeof crypto>"u"||!crypto.getRandomValues)throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");om=crypto.getRandomValues.bind(crypto)}return om(C4)}const R4=typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto),NC={randomUUID:R4};function Fp(e,t,r){if(NC.randomUUID&&!e)return NC.randomUUID();e=e||{};const n=e.random||(e.rng||_4)();return n[6]=n[6]&15|64,n[8]=n[8]&63|128,E4(n)}const ds={getLastBytesFrom(e,t){return e.slice(-t)},getFirstBytesFrom(e,t){return e.slice(0,t)},bytesToNumber(e){return e.reduce((t,r,n)=>t+r*Math.pow(256,e.length-1-n),0)},numberToByteArray(e,t){return new Uint8Array(t).map((r,n)=>e>>8*(t-1-n)&255)}},jC=2,am=800;let zC=class{_tag="FramerOverflowError";originalError;constructor(){this.originalError=new Error("Frame header length is greater than frame size")}},O4=class{_tag="FramerApduError";originalError;constructor(){this.originalError=new Error("Frame offset is greater than apdu length")}},BC=class{_tag="ReceiverApduError";originalError;constructor(t){this.originalError=new Error(t??"Unable to parse apdu")}},VC=class{_tag="DeviceSessionNotFound";originalError;constructor(t){this.originalError=t??new Error("Device session not found")}},c2=class{_header;_data;constructor({header:t,data:r}){this._header=t,this._data=r}toString(){return JSON.stringify({header:this._header.toString(),data:Jo(this._data)},null,2)}getRawData(){const t=this._header.getRawData(),r=new Uint8Array(t.length+this._data.length);return r.set(t,0),r.set(this._data,t.length),r}getHeader(){return this._header}getData(){return this._data}},f2=class{_uuid;_channel;_headTag;_index;_length;_dataLength;constructor({uuid:t,dataSize:r,index:n,headTag:i,length:o,channel:s}){this._uuid=t,this._dataLength=r,this._index=n,this._headTag=i,this._length=o,this._channel=s}getDataLength(){return this._dataLength.map(t=>ds.bytesToNumber(t))}setDataSize(t){return this._dataLength=t,this}getLength(){return this._length}toString(){return JSON.stringify({uuid:this._uuid.toString(),dataSize:this._dataLength.extract()?.toString(),index:this._index.toString(),headTag:this._headTag.toString(),length:this._length.toString(),channel:this._channel.extract()?.toString()})}getRawData(){return new Uint8Array([...this._channel.caseOf({Just:t=>[...t],Nothing:()=>[]}),...this._headTag,...this._index,...this._dataLength.caseOf({Just:t=>[...t],Nothing:()=>[]})])}};const Sr={LoggerPublisherServiceFactory:Symbol.for("LoggerPublisherServiceFactory")};var T4=(e,t,r,n)=>{for(var i=t,o=e.length-1,s;o>=0;o--)(s=e[o])&&(i=s(i)||i);return i},$4=(e,t)=>(r,n)=>t(r,n,e);let HC=class{_channel;_logger;_pendingFrames;constructor({channel:t=En.zero()},r){this._channel=t,this._logger=r("ApduReceiverService"),this._pendingFrames=[]}handleFrame(t){return this.getFrameFromBytes(t).map(r=>{if(this._pendingFrames.push(r),!this._pendingFrames[0])return jt;const n=this._pendingFrames[0].getHeader().getDataLength();return this.getCompleteFrame(n)})}getCompleteFrame(t){return t.chain(r=>{if(!this.isComplete(r))return this._logger.debug("frame is not complete, waiting for more"),jt;const n=ds.getFirstBytesFrom(this.concatFrames(this._pendingFrames),r),i=ds.getFirstBytesFrom(n,n.length-jC),o=ds.getLastBytesFrom(n,jC);return this._pendingFrames=[],Qr(new w4({data:i,statusCode:o}))})}getFrameFromBytes(t){const r=this._channel.caseOf({Just:()=>H0,Nothing:()=>0}),n=t.slice(r,r+is),i=t.slice(r+is,r+is+pl),o=i.reduce((h,m)=>h+m,0)===0;if(!o&&this._pendingFrames.length===0)return Ut(new BC);const s=r+is+pl,u=o?U0:0;if(t.length<r+is+pl+u)return Ut(new BC("Unable to parse header from apdu"));const c=o?Qr(t.slice(s,s+u)):jt,f=s+u,p=t.slice(f),g=new c2({header:new f2({uuid:Fp(),channel:this._channel,dataSize:c,headTag:n,index:i,length:r+is+pl+u}),data:p});return nr(g)}isComplete(t){return this._pendingFrames.reduce((r,n)=>r+n.getData().length,0)>=t}concatFrames(t){return t.reduce((r,n)=>Uint8Array.from([...r,...n.getData()]),new Uint8Array(0))}};HC=T4([Et(),$4(1,Ye(Sr.LoggerPublisherServiceFactory))],HC);var I4=(e,t,r,n)=>{for(var i=t,o=e.length-1,s;o>=0;o--)(s=e[o])&&(i=s(i)||i);return i},A4=(e,t)=>(r,n)=>t(r,n,e);let UC=class{_frameSize;_channel;_padding;_logger;constructor({frameSize:t,channel:r=En.zero(),padding:n=!1},i){this._frameSize=t,this._channel=r,this._padding=n,this._logger=i("DefaultApduSenderService")}getFrames(t){const r=[];let n=0,i=this.getFrameAtIndex(t,n);for(;i.isRight();)r.push(i.extract()),n+=1,i=this.getFrameAtIndex(t,n).mapLeft(o=>(o instanceof zC||this._logger.error("Error while parsing frame",{data:{error:o}}),o));return r}getFrameAtIndex(t,r){const n=this.getFrameHeaderFrom(r,t.length),i=r===0?0:r*this._frameSize-this.getHeaderSizeSumFrom(r);if(i>=t.length)return Ut(new zC);if(n.getLength()>this._frameSize)return Ut(new O4);const o=this._frameSize-n.getLength(),s=t.slice(i,i+this._frameSize-n.getLength()),u=this._padding?new Uint8Array(o).fill(0):new Uint8Array(s.length<o?s.length:o);u.set(s,0);const c=new c2({header:n,data:u});return nr(c)}getFrameHeaderFrom(t,r){const n=new f2({uuid:Fp(),channel:this._channel.map(i=>ds.getLastBytesFrom(i,H0)),headTag:new Uint8Array([x4]),index:ds.numberToByteArray(t,pl),length:this.getFrameHeaderSizeFromIndex(t),dataSize:En.zero()});return t===0&&n.setDataSize(En.of(ds.numberToByteArray(r,U0))),n}getHeaderSizeSumFrom(t){let r=this.getFrameHeaderSizeFromIndex(0),n=1;for(;n<t;)r+=this.getFrameHeaderSizeFromIndex(n),n+=1;return r}getFrameHeaderSizeFromIndex(t){return this._channel.caseOf({Just:()=>H0,Nothing:()=>0})+pl+is+(t===0?U0:0)}};UC=I4([Et(),A4(1,Ye(Sr.LoggerPublisherServiceFactory))],UC);const W0={LocalConfigDataSource:Symbol.for("LocalConfigDataSource"),RemoteConfigDataSource:Symbol.for("RemoteConfigDataSource"),ConfigService:Symbol.for("ConfigService")},un={ApduSenderServiceFactory:Symbol.for("ApduSenderServiceFactory"),ApduReceiverServiceFactory:Symbol.for("ApduReceiverServiceFactory"),DeviceSessionService:Symbol.for("DeviceSessionService")},WC={ConnectUseCase:Symbol.for("ConnectUseCase"),DisconnectUseCase:Symbol.for("DisconnectUseCase")},Np={ManagerApiService:Symbol.for("ManagerApiService"),ManagerApiDataSource:Symbol.for("ManagerApiDataSource"),DmkConfig:Symbol.for("ManagerApiDmkConfig")},Fa={DmkConfig:Symbol.for("TransportDmkConfig"),TransportService:Symbol.for("TransportService"),TransportsInput:Symbol.for("TransportsInput")};var k4=(e,t,r,n)=>{for(var i=t,o=e.length-1,s;o>=0;o--)(s=e[o])&&(i=s(i)||i);return i},GC=(e,t)=>(r,n)=>t(r,n,e);let qC=class{_sessionService;_logger;constructor(t,r){this._sessionService=t,this._logger=r("SendCommandUseCase")}async execute({sessionId:t,command:r,abortTimeout:n}){return this._sessionService.getDeviceSessionById(t).caseOf({Right:async i=>await i.sendCommand(r,n),Left:i=>{throw this._logger.error("Error getting session",{data:{error:i}}),i}})}};qC=k4([Et(),GC(0,Ye(un.DeviceSessionService)),GC(1,Ye(Sr.LoggerPublisherServiceFactory))],qC);var P4=(e,t,r,n)=>{for(var i=t,o=e.length-1,s;o>=0;o--)(s=e[o])&&(i=s(i)||i);return i};let XC=class{execute=vi.fn(()=>"stub")};XC=P4([Et()],XC);var M4=(e,t,r,n)=>{for(var i=t,o=e.length-1,s;o>=0;o--)(s=e[o])&&(i=s(i)||i);return i},KC=(e,t)=>(r,n)=>t(r,n,e);let YC=class{_sessionService;_logger;constructor(t,r){this._sessionService=t,this._logger=r("ExecuteDeviceActionUseCase")}execute({sessionId:t,deviceAction:r}){return this._sessionService.getDeviceSessionById(t).caseOf({Right:n=>n.executeDeviceAction(r),Left:n=>{throw this._logger.error("Error getting session",{data:{error:n}}),n}})}};YC=M4([Et(),KC(0,Ye(un.DeviceSessionService)),KC(1,Ye(Sr.LoggerPublisherServiceFactory))],YC);function D4(e){return typeof e=="object"&&e!==null&&"version"in e&&"name"in e&&typeof e.version=="string"&&typeof e.name=="string"}let QC=class{constructor(t){this.err=t,this.originalError=t}_tag="ApiCallError";originalError},L4=class{constructor(t){this.err=t,this.originalError=t}_tag="ParseResponseError";originalError},d2=class{constructor(t){this.err=t,this.originalError=t}_tag="JSONParseError";originalError},F4=class{constructor(t){this.err=t,this.originalError=t}_tag="ReadFileError";originalError};const N4="@ledgerhq/device-management-kit",j4="0.0.0-develop-20260702003423",JC={name:N4,version:j4};var z4=(e,t,r,n)=>{for(var i=t,o=e.length-1,s;o>=0;o--)(s=e[o])&&(i=s(i)||i);return i};const B4={name:JC.name,version:JC.version},V4=()=>JSON.stringify(B4);let ZC=class{getConfig(){return Cn.encase(()=>V4()).mapLeft(t=>new F4(t)).chain(t=>Cn.encase(()=>{const r=JSON.parse(t);if(D4(r))return r;throw new Error("Invalid config file")}).mapLeft(r=>new d2(r)))}};ZC=z4([Et()],ZC);var H4=(e,t,r,n)=>{for(var i=t,o=e.length-1,s;o>=0;o--)(s=e[o])&&(i=s(i)||i);return i};let e_=class{getConfig(){return Cn.of({name:"DeviceSDK",version:"0.0.0-stub.1"})}};e_=H4([Et()],e_);var U4=(e,t,r,n)=>{for(var i=t,o=e.length-1,s;o>=0;o--)(s=e[o])&&(i=s(i)||i);return i};let t_=class{async getConfig(){const t=await this._callApi();if(t.isLeft())return Ut(new QC(t.extract()));if(!t.extract().ok)return Ut(new QC(new Error("response not ok")));const r=await t.extract().json();return r.isLeft()?Ut(new d2):r.chain(n=>this._parseResponse(n)).map(n=>n)}_parseResponse(t){const{name:r,version:n}=t;return!r||!n?Ut(new L4):Cn.of({name:r,version:n})}_callApi(){return new Promise(t=>{t(Cn.of({ok:!0,json:async()=>new Promise(r=>{r(Cn.of({name:"DeviceSDK",version:"0.0.0-fake.1",yolo:"yolo"}))})}))})}};t_=U4([Et()],t_);var W4=(e,t,r,n)=>{for(var i=t,o=e.length-1,s;o>=0;o--)(s=e[o])&&(i=s(i)||i);return i};let r_=class{async getConfig(){return new Promise(t=>t(Cn.of({name:"DeviceSDK",version:"0.0.0-fake.2"})))}};r_=W4([Et()],r_);var G4=(e,t,r,n)=>{for(var i=t,o=e.length-1,s;o>=0;o--)(s=e[o])&&(i=s(i)||i);return i},sm=(e,t)=>(r,n)=>t(r,n,e);let n_=class{_local;_remote;_logger;constructor(t,r,n){this._local=t,this._remote=r,this._logger=n("config")}async getDmkConfig(){const t=this._local.getConfig().ifLeft(r=>{this._logger.error("Local config not available",{data:{error:r}})});if(t.isRight()){const r=t.extract();return this._logger.info("Local config available",{data:{config:r}}),r}return this._remote.getConfig().then(r=>r.mapLeft(n=>(this._logger.error("Local config available",{data:{error:n}}),{name:"DeadDmk",version:"0.0.0-dead.1"})).extract())}};n_=G4([Et(),sm(0,Ye(W0.LocalConfigDataSource)),sm(1,Ye(W0.RemoteConfigDataSource)),sm(2,Ye(Sr.LoggerPublisherServiceFactory))],n_);var q4=(e,t,r,n)=>{for(var i=t,o=e.length-1,s;o>=0;o--)(s=e[o])&&(i=s(i)||i);return i},X4=(e,t)=>(r,n)=>t(r,n,e);let i_=class{_configService;constructor(t){this._configService=t}async getDmkVersion(){return(await this._configService.getDmkConfig()).version}};i_=q4([Et(),X4(0,Ye(W0.ConfigService))],i_);const K4={DeviceModelDataSource:Symbol.for("DeviceModelDataSource")};var Y4=(e,t,r,n)=>{for(var i=t,o=e.length-1,s;o>=0;o--)(s=e[o])&&(i=s(i)||i);return i},o_=(e,t)=>(r,n)=>t(r,n,e);let a_=class{constructor(t,r){this._sessionService=t,this._logger=r("DisableDeviceSessionRefresherUseCase")}_logger;execute({sessionId:t,blockerId:r}){return this._sessionService.getDeviceSessionById(t).caseOf({Left:n=>{throw this._logger.error("Error getting device session",{data:{error:n}}),n},Right:n=>n.disableRefresher(r)})}};a_=Y4([Et(),o_(0,Ye(un.DeviceSessionService)),o_(1,Ye(Sr.LoggerPublisherServiceFactory))],a_);var Q4=(e,t,r,n)=>{for(var i=t,o=e.length-1,s;o>=0;o--)(s=e[o])&&(i=s(i)||i);return i},J4=(e,t)=>(r,n)=>t(r,n,e);let s_=class{_sessions;_sessionsSubject;_logger;constructor(t){this._sessions=[],this._sessionsSubject=new U$,this._logger=t("DeviceSessionService")}get sessionsObs(){return this._sessionsSubject.asObservable()}addDeviceSession(t){return this._sessions.find(r=>r.id===t.id)?(this._logger.warn("DeviceSession already exists",{data:{deviceSession:t}}),this):(this._sessions.push(t),this._sessionsSubject.next(t),this._logger.info("DeviceSession added",{data:{sessionId:t.id}}),this)}removeDeviceSession(t){const r=this._sessions.find(n=>n.id===t);return r?(r.close(),this._sessions=this._sessions.filter(n=>n.id!==t),this._logger.info("DeviceSession removed",{data:{sessionId:t}}),this):(this._logger.warn("DeviceSession not found",{data:{sessionId:t}}),this)}getDeviceSessionById(t){return En.fromNullable(this._sessions.find(r=>r.id===t)).toEither(new VC)}getDeviceSessionsByDeviceId(t){return En.fromPredicate(({length:r})=>r>0,this._sessions.filter(r=>r.connectedDevice.id===t)).toEither(new VC)}getDeviceSessions(){return this._sessions}};s_=Q4([Et(),J4(0,Ye(Sr.LoggerPublisherServiceFactory))],s_);var Z4=(e,t,r,n)=>{for(var i=t,o=e.length-1,s;o>=0;o--)(s=e[o])&&(i=s(i)||i);return i},l_=(e,t)=>(r,n)=>t(r,n,e);let u_=class{_sessionService;_transportService;constructor(t,r){this._sessionService=t,this._transportService=r}execute(){const t=this._sessionService.getDeviceSessions();for(const r of t)this._transportService.closeConnection(r.connectedDevice),this._sessionService.removeDeviceSession(r.id)}};u_=Z4([Et(),l_(0,Ye(un.DeviceSessionService)),l_(1,Ye(Fa.TransportService))],u_);var ej=(e,t,r,n)=>{for(var i=t,o=e.length-1,s;o>=0;o--)(s=e[o])&&(i=s(i)||i);return i},c_=(e,t)=>(r,n)=>t(r,n,e);let f_=class{_sessionService;_logger;constructor(t,r){this._sessionService=t,this._logger=r("GetDeviceSessionStateUseCase")}execute({sessionId:t}){return this._sessionService.getDeviceSessionById(t).caseOf({Left:r=>{throw this._logger.error("Error getting session device",{data:{error:r}}),r},Right:r=>r.state})}};f_=ej([Et(),c_(0,Ye(un.DeviceSessionService)),c_(1,Ye(Sr.LoggerPublisherServiceFactory))],f_);var tj=(e,t,r,n)=>{for(var i=t,o=e.length-1,s;o>=0;o--)(s=e[o])&&(i=s(i)||i);return i},d_=(e,t)=>(r,n)=>t(r,n,e);let p_=class{_sessionService;_logger;constructor(t,r){this._sessionService=t,this._logger=r("UnsafeBypassIntentQueueUseCase")}execute({sessionId:t,bypass:r}){this._sessionService.getDeviceSessionById(t).caseOf({Left:n=>{throw this._logger.error("Error getting session",{data:{error:n}}),n},Right:n=>{this._logger.warn(`UNSAFE: ${r?"Enabling":"Disabling"} intent queue bypass for session ${t}`),n._unsafeBypassIntentQueue(r)}})}};p_=tj([Et(),d_(0,Ye(un.DeviceSessionService)),d_(1,Ye(Sr.LoggerPublisherServiceFactory))],p_);function rj(e){return`[will send APDU] ~...> ${Jo(e,!1)}`}function nj(e){return`[exchange] <= ${Jo(e.data,!1)}${Jo(e.statusCode,!1)}`}const ij="apdu-exchange";function oj(e,t,r){const n=Jo(t,!1),i=`${Jo(r.data,!1)}${Jo(r.statusCode,!1)}`;return{message:nj(r),data:{type:ij,sessionId:e,apdu:n,response:i}}}const G0=1e3,lm=1e3,aj={isRefresherDisabled:!1,pollingInterval:1e3};var ur=(e=>(e.NEW_STATE="NEW_STATE",e.REFRESH_NEEDED="REFRESH_NEEDED",e.COMMAND_SUCCEEDED="COMMAND_SUCCEEDED",e.DEVICE_STATE_UPDATE_BUSY="DEVICE_STATE_UPDATE_BUSY",e.DEVICE_STATE_UPDATE_LOCKED="DEVICE_STATE_UPDATE_LOCKED",e.DEVICE_STATE_UPDATE_CONNECTED="DEVICE_STATE_UPDATE_CONNECTED",e.DEVICE_STATE_UPDATE_UNKNOWN="DEVICE_STATE_UPDATE_UNKNOWN",e))(ur||{});let sj=class{_eventEmitter=new Hl;listen(){return this._eventEmitter.asObservable()}dispatch(t){this._eventEmitter.next(t)}},lj=class{constructor(t,r){this.loggerModuleFactory=t,this.sessionEventDispatcher=r,this._logger=this.loggerModuleFactory("IntentQueueService")}_logger;_queue=[];_isProcessing=!1;_currentSubscription=null;enqueue(t){this._logger.debug("Enqueueing intent",{data:{type:t.type}});const r=new Hl,n={intent:t,subject:r,isCancelled:!1};this._queue.push(n);const i=()=>{this._logger.debug("Cancelling intent",{data:{type:t.type}}),n.isCancelled=!0,this._queue[0]===n&&this._currentSubscription?(this._currentSubscription.unsubscribe(),this._currentSubscription=null,r.complete(),this._queue.shift(),this._isProcessing=!1,this._processQueue()):(!this._isProcessing||this._queue[0]!==n)&&r.complete()};return this._isProcessing||this._processQueue(),{observable:r.asObservable().pipe(U3(()=>{this._logger.debug("Intent observable finalized",{data:{type:t.type}})})),cancel:i}}_processQueue(){if(this._isProcessing)return;if(this._queue.length===0){this.sessionEventDispatcher.dispatch({eventName:ur.NEW_STATE});return}this.sessionEventDispatcher.dispatch({eventName:ur.DEVICE_STATE_UPDATE_BUSY}),this._isProcessing=!0;const t=this._queue[0];if(t.isCancelled){this._logger.debug("Skipping cancelled intent",{data:{type:t.intent.type}}),t.subject.complete(),this._queue.shift(),this._isProcessing=!1,this._processQueue();return}this._logger.debug("Processing intent",{data:{type:t.intent.type}}),this._currentSubscription=t.intent.execute().subscribe({next:r=>{t.isCancelled||t.subject.next(r)},error:r=>{t.isCancelled||t.subject.error(r),this._onIntentComplete()},complete:()=>{t.isCancelled||t.subject.complete(),this._onIntentComplete()}})}_onIntentComplete(){this._logger.debug("Intent completed"),this._currentSubscription=null,this._queue.shift(),this._isProcessing=!1,this._processQueue()}},uj=class{constructor(t,r){this._refresher=r,this._logger=t("refresher-service")}_refresherBlockers=new Set;_logger;disableRefresher(t){const r=`${t}-${Fp()}`;this.addRefresherBlocker(r),this._logger.debug("Refresher disabled",{data:{blockerId:r,blockers:Array.from(this._refresherBlockers)}});let n=!1;return()=>{n||(n=!0,this.removeRefresherBlocker(r),this._logger.debug("Refresher re-enabled",{data:{blockerId:r,blockers:Array.from(this._refresherBlockers)}}))}}addRefresherBlocker(t){const r=this._refresherBlockers.size;this._refresherBlockers.add(t),r===0&&this._refresher.stop()}removeRefresherBlocker(t){const r=this._refresherBlockers.size;this._refresherBlockers.delete(t),r>0&&this._refresherBlockers.size===0&&this._refresher.start()}},cj=class{constructor(t,r,n,i){this.connectedDevice=r,this._sessionEventDispatcher=n,this._sendCommandFunction=i,this._logger=t("device-pinger"),this._subscription=this._sessionEventDispatcher.listen().subscribe(async o=>await this.mapEventAction(o))}_sendCommandFunction;_subscription;_logger;async ping(){try{return await this.mapDevicePingAction(this.connectedDevice.deviceModel.id)}catch(t){return this._logger.error("Error while pinging device",{data:{error:t}}),null}}mapEventAction=async t=>{switch(t.eventName){case ur.REFRESH_NEEDED:return await this.ping();default:return null}};async mapDevicePingAction(t){switch(t){case qt.NANO_S:{const r=async()=>{const o=await this._sendCommandFunction(new TE,am);return this._sendCommandFunction(new UN,am),o},n=new Promise(o=>{setTimeout(()=>o(null),G0*2+100)}),i=await Promise.race([r(),n]);return i?this._sessionEventDispatcher.dispatch({eventName:ur.COMMAND_SUCCEEDED,eventData:i}):this._sessionEventDispatcher.dispatch({eventName:ur.DEVICE_STATE_UPDATE_LOCKED}),i}default:{const r=await this._sendCommandFunction(new TE,am);return this._sessionEventDispatcher.dispatch({eventName:ur.COMMAND_SUCCEEDED,eventData:r}),r}}}unsubscribe(){this._subscription.unsubscribe()}},fj=class{constructor(t,r,n,i){this._sessionEventDispatcher=n,this._refresherOptions=r,this._logger=t("device-session-refresher"),this._connectedDeviceID=i.deviceModel.id}_refresherSubscription;_refresherOptions;_logger;_connectedDeviceID;startRefresher(){if(this._refresherOptions.isRefresherDisabled||this._refresherSubscription)return;const t=this.getValidPollingInterval(this._refresherOptions,this._logger),r=this._sessionEventDispatcher.listen().pipe($C(n=>n.eventName===ur.DEVICE_STATE_UPDATE_BUSY||n.eventName===ur.NEW_STATE),Da(n=>n.eventName===ur.DEVICE_STATE_UPDATE_BUSY),G3(!1),V3());this._refresherSubscription=j3(0,t).pipe(q3(r),IC(([n,i])=>{i&&this._logger.debug("Refresh skipped: device is busy")}),$C(([n,i])=>!i),IC(()=>this._sessionEventDispatcher.dispatch({eventName:ur.REFRESH_NEEDED}))).subscribe(),this._logger.info("Refresher started.")}stopRefresher(){this._refresherSubscription&&(this._refresherSubscription.unsubscribe(),this._refresherSubscription=void 0,this._logger.info("Refresher stopped."))}restartRefresher(){this.stopRefresher(),this.startRefresher(),this._logger.info("Refresher restarted.")}getValidPollingInterval=(t,r)=>{const{pollingInterval:n}=t;switch(this._connectedDeviceID){case qt.NANO_S:{const i=G0*2;return n!==void 0&&n<i?(r.warn(`Polling interval of ${n} is too low, setting to minimum as ${i}`),i):n??i}default:return n!==void 0&&n<lm?(r.warn(`Polling interval of ${n} is too low, setting to minimum as ${lm}`),lm):n??G0}}},dj=class{constructor(t,r,n,i,o){this._sessionEventDispatcher=r,this._connectedDevice=n,this._deviceState=i,this.setDeviceSessionState=o,this._subscription=this._sessionEventDispatcher.listen().subscribe(s=>this.mapEventAction(s)),this._logger=t("device-session-state-handler")}_subscription;_logger;_pendingDeviceStatus=po.BUSY;_updateDeviceState(t){const r=this._parseDeviceStatus(t);if(r){const{sessionStateType:n,deviceStatus:i,currentApp:o}=r,s=this._deviceState.getValue();s.sessionStateType===$l.Connected?this.setDeviceSessionState({sessionStateType:n,deviceStatus:i,deviceModelId:this._connectedDevice.deviceModel.id,currentApp:o,installedApps:[],isSecureConnectionAllowed:!1}):this.setDeviceSessionState({...s,sessionStateType:n,deviceStatus:i,deviceModelId:this._connectedDevice.deviceModel.id,currentApp:o})}}mapEventAction=t=>{const{eventName:r}=t;switch(r){case ur.COMMAND_SUCCEEDED:return this._updateDeviceState(t.eventData);case ur.DEVICE_STATE_UPDATE_BUSY:return this.setDeviceSessionState({...this._deviceState.getValue(),deviceStatus:po.BUSY});case ur.DEVICE_STATE_UPDATE_LOCKED:this._pendingDeviceStatus=po.LOCKED;return;case ur.DEVICE_STATE_UPDATE_CONNECTED:this._pendingDeviceStatus=po.CONNECTED;return;case ur.NEW_STATE:{const n=this._pendingDeviceStatus;return this._pendingDeviceStatus=po.BUSY,this.setDeviceSessionState({...this._deviceState.getValue(),deviceStatus:n})}case ur.DEVICE_STATE_UPDATE_UNKNOWN:return this.setDeviceSessionState({...this._deviceState.getValue(),deviceStatus:po.BUSY});case ur.REFRESH_NEEDED:return;default:{const n=r;throw new Error(`Unhandled context type ${n}`)}}};_parseDeviceStatus(t){return fN(t)?{sessionStateType:$l.ReadyWithoutSecureChannel,deviceStatus:po.CONNECTED,currentApp:{name:t.data.name,version:t.data.version}}:(this._logger.debug("Error while parsing APDU response",{data:{parsedResponse:t}}),null)}unsubscribe(){this._subscription.unsubscribe()}},pj=class{_id;_connectedDevice;_deviceState;_managerApiService;_secureChannelService;_logger;_loggerModuleFactory;_refresherOptions;_pinger;_deviceSessionRefresher;_refresherService;_intentQueueService;_sessionEventDispatcher=new sj;_bypassIntentQueue=!1;constructor({connectedDevice:t,id:r=Fp()},n,i,o,s,u=c=>new lj(n,c)){this._id=r,this._connectedDevice=t,this._loggerModuleFactory=n,this._logger=n("device-session"),this._managerApiService=i,this._intentQueueService=u(this._sessionEventDispatcher),this._secureChannelService=o,this._refresherOptions={...aj,...s},this._deviceState=new p3({sessionStateType:$l.Connected,deviceStatus:po.CONNECTED,deviceModelId:this._connectedDevice.deviceModel.id}),this._pinger=new cj(n,t,this._sessionEventDispatcher,(c,f)=>this.sendCommand(c,f)),this._deviceSessionRefresher=new fj(n,this._refresherOptions,this._sessionEventDispatcher,this._connectedDevice),new dj(n,this._sessionEventDispatcher,this._connectedDevice,this._deviceState,c=>this.setDeviceSessionState(c)),this._refresherService=new uj(n,{start:()=>this._deviceSessionRefresher.restartRefresher(),stop:()=>this._deviceSessionRefresher.stopRefresher()})}async initialiseSession(){try{this._refresherOptions.isRefresherDisabled?await this._pinger.ping():this._deviceSessionRefresher.startRefresher()}catch(t){throw this._logger.error("Error while initialising session",{data:{error:t}}),t}}get id(){return this._id}get connectedDevice(){return this._connectedDevice}get state(){return this._deviceState.asObservable()}getDeviceSessionState(){return this._deviceState.getValue()}setDeviceSessionState(t){this._deviceState.next(t)}sendApdu(t,r={isPolling:!1,triggersDisconnection:!1,abortTimeout:void 0}){return this._bypassIntentQueue?this._unsafeInternalSendApdu(t,r):this._internalSendApdu(t,r)}_internalSendApdu(t,r){const n=r.abortTimeout,i=Date.now(),{observable:o,cancel:s}=this._intentQueueService.enqueue({type:"send-apdu",execute:()=>Tl((async()=>{const c=Date.now()-i;return await this._unsafeInternalSendApdu(t,{isPolling:r.isPolling,triggersDisconnection:r.triggersDisconnection,abortTimeout:n?n-c:void 0})})())}),u=n?o.pipe(OC({each:n,with:()=>{throw s(),new X3}})):o;return RC(u)}async _unsafeInternalSendApdu(t,r={isPolling:!1,triggersDisconnection:!1,abortTimeout:void 0}){return this._logger.debug(rj(t)),(await this._connectedDevice.sendApdu(t,r.triggersDisconnection,r.abortTimeout)).ifRight(n=>{const{message:i,data:o}=oj(this._id,t,n);this._logger.debug(i,{data:o}),v1.isLockedDeviceResponse(n)?this._sessionEventDispatcher.dispatch({eventName:ur.DEVICE_STATE_UPDATE_LOCKED}):this._sessionEventDispatcher.dispatch({eventName:ur.DEVICE_STATE_UPDATE_CONNECTED})}).ifLeft(()=>{this._sessionEventDispatcher.dispatch({eventName:ur.DEVICE_STATE_UPDATE_UNKNOWN})})}sendCommand(t,r){return this._logger.debug(`[sendCommand] ${t.name}`),this._bypassIntentQueue?this._unsafeInternalSendCommand(t,r):this._internalSendCommand(t,r)}_internalSendCommand(t,r){const n=Date.now(),{observable:i,cancel:o}=this._intentQueueService.enqueue({type:"send-command",execute:()=>Tl((async()=>{const u=Date.now()-n;return await this._unsafeInternalSendCommand(t,r?r-u:void 0)})())}),s=r?i.pipe(OC({each:r,with:()=>{throw o(),new K3}})):i;return RC(s)}async _unsafeInternalSendCommand(t,r){const n=t.getApdu();return(await this._unsafeInternalSendApdu(n.getRawApdu(),{isPolling:!1,triggersDisconnection:t.triggersDisconnection??!1,abortTimeout:r})).caseOf({Left:i=>{throw this._logger.error("[sendCommand] error",{data:{err:i}}),i},Right:i=>{const o=t.parseResponse(i,this._connectedDevice.deviceModel.id);return this._logger.debug("[sendCommand] result",{data:{result:o}}),o}})}executeDeviceAction(t){return this._bypassIntentQueue?this._unsafeInternalExecuteDeviceAction(t):this._internalExecuteDeviceAction(t)}_internalExecuteDeviceAction(t){let r;const{observable:n,cancel:i}=this._intentQueueService.enqueue({type:"device-action",execute:()=>{const{observable:o,cancel:s}=this._unsafeInternalExecuteDeviceAction(t);return r=s,o}});return{observable:n,cancel:()=>{r?.(),i()}}}_unsafeInternalExecuteDeviceAction(t){const{observable:r,cancel:n}=t._execute({sendApdu:async i=>this._unsafeInternalSendApdu(i),sendCommand:async i=>this._unsafeInternalSendCommand(i),getDeviceModel:()=>this._connectedDevice.deviceModel,getDeviceSessionState:()=>this._deviceState.getValue(),getDeviceSessionStateObservable:()=>this.state,setDeviceSessionState:i=>(this.setDeviceSessionState(i),this._deviceState.getValue()),getManagerApiService:()=>this._managerApiService,getSecureChannelService:()=>this._secureChannelService,loggerFactory:this._loggerModuleFactory});return{observable:r,cancel:n}}close(){this._updateDeviceStatus(po.NOT_CONNECTED),this._deviceState.complete(),this._deviceSessionRefresher.stopRefresher(),this._pinger.unsubscribe()}disableRefresher(t){return this._refresherService.disableRefresher(t)}_unsafeBypassIntentQueue(t){this._bypassIntentQueue=t}_updateDeviceStatus(t){const r=this._deviceState.getValue();this._deviceState.next({...r,deviceStatus:t})}};const M1={SecureChannelService:Symbol.for("SecureChannelService"),SecureChannelDataSource:Symbol.for("SecureChannelDataSource"),DmkConfig:Symbol.for("SecureChannelDmkConfig")};var hj=(e,t,r,n)=>{for(var i=t,o=e.length-1,s;o>=0;o--)(s=e[o])&&(i=s(i)||i);return i},Cu=(e,t)=>(r,n)=>t(r,n,e);let h_=class{_transportService;_sessionService;_loggerFactory;_managerApi;_secureChannel;_logger;constructor(t,r,n,i,o){this._sessionService=r,this._transportService=t,this._loggerFactory=n,this._logger=n("ConnectUseCase"),this._managerApi=i,this._secureChannel=o}handleDeviceDisconnect(t){this._sessionService.getDeviceSessionsByDeviceId(t).ifRight(r=>{r.forEach(n=>{this._sessionService.removeDeviceSession(n.id),this._logger.info("Session removed",{data:{deviceId:t,sessionId:n.id}})})})}async execute({device:t,sessionRefresherOptions:r}){const n=this._transportService.getTransport(t.transport),i="sessionId"in t?t.sessionId:void 0;return pt.liftEither(n.toEither(new k1(new Error("Unknown transport")))).chain(async o=>o.connect({deviceId:t.id,onDisconnect:s=>this.handleDeviceDisconnect(s)})).ifLeft(o=>{this._logger.error("Error connecting to device")}).map(async o=>{const s=new pj({connectedDevice:o,id:i},this._loggerFactory,this._managerApi,this._secureChannel,r);return this._sessionService.addDeviceSession(s),await s.initialiseSession(),s.id}).caseOf({Left:o=>{throw o},Right:o=>o})}};h_=hj([Et(),Cu(0,Ye(Fa.TransportService)),Cu(1,Ye(un.DeviceSessionService)),Cu(2,Ye(Sr.LoggerPublisherServiceFactory)),Cu(3,Ye(Np.ManagerApiService)),Cu(4,Ye(M1.SecureChannelService))],h_);var gj=(e,t,r,n)=>{for(var i=t,o=e.length-1,s;o>=0;o--)(s=e[o])&&(i=s(i)||i);return i},um=(e,t)=>(r,n)=>t(r,n,e);let g_=class{_transportService;_sessionService;_logger;constructor(t,r,n){this._sessionService=r,this._transportService=t,this._logger=n("DisconnectUseCase")}async execute({sessionId:t}){return this._logger.debug("Disconnecting from device",{data:{test:this._sessionService.getDeviceSessions().map(r=>r.id)}}),pt(async({liftEither:r})=>{const n=await r(this._sessionService.getDeviceSessionById(t).ifLeft(s=>{this._logger.error("Device session not found",{data:{sessionId:t,error:s}})})),i=n.connectedDevice.transport,o=await r(this._transportService.getTransport(i).toEither(new k1(new Error("Unknown transport"))));n.close(),this._sessionService.removeDeviceSession(t),await o.disconnect({connectedDevice:n.connectedDevice})}).caseOf({Left:r=>{throw this._logger.error("Error disconnecting from device",{data:{error:r}}),r},Right:()=>{}})}};g_=gj([Et(),um(0,Ye(Fa.TransportService)),um(1,Ye(un.DeviceSessionService)),um(2,Ye(Sr.LoggerPublisherServiceFactory))],g_);let D1=class{id;sessionId;modelId;name;type;transport;constructor({transportConnectedDevice:{id:t,deviceModel:{id:r,productName:n},type:i,transport:o,name:s},sessionId:u}){this.id=t,this.sessionId=u,this.modelId=r,this.name=s??n,this.type=i,this.transport=o}};var vj=(e,t,r,n)=>{for(var i=t,o=e.length-1,s;o>=0;o--)(s=e[o])&&(i=s(i)||i);return i},v_=(e,t)=>(r,n)=>t(r,n,e);let m_=class{_sessionService;_logger;constructor(t,r){this._sessionService=t,this._logger=r("GetConnectedDeviceUseCase")}execute({sessionId:t}){return this._sessionService.getDeviceSessionById(t).caseOf({Right:r=>new D1({sessionId:r.id,transportConnectedDevice:r.connectedDevice}),Left:r=>{throw this._logger.error("Error getting session",{data:{error:r}}),r}})}};m_=vj([Et(),v_(0,Ye(un.DeviceSessionService)),v_(1,Ye(Sr.LoggerPublisherServiceFactory))],m_);var mj=(e,t,r,n)=>{for(var i=t,o=e.length-1,s;o>=0;o--)(s=e[o])&&(i=s(i)||i);return i},y_=(e,t)=>(r,n)=>t(r,n,e);let b_=class{_sessionService;_logger;constructor(t,r){this._sessionService=t,this._logger=r("ListConnectedDeviceUseCase")}execute(){return this._logger.info("Listing connected devices"),this._sessionService.getDeviceSessions().map(t=>new D1({transportConnectedDevice:t.connectedDevice,sessionId:t.id}))}};b_=mj([Et(),y_(0,Ye(un.DeviceSessionService)),y_(1,Ye(Sr.LoggerPublisherServiceFactory))],b_);var yj=(e,t,r,n)=>{for(var i=t,o=e.length-1,s;o>=0;o--)(s=e[o])&&(i=s(i)||i);return i},S_=(e,t)=>(r,n)=>t(r,n,e);let w_=class{_transports;_transportService;_logger;constructor(t,r){this._transports=t.getAllTransports(),this._transportService=t,this._logger=r("ListenToAvailableDevicesUseCase")}mapTransportDiscoveredDeviceToDiscoveredDevice(t){const r=new A$({id:t.id,model:t.deviceModel.id,name:t.deviceModel.productName});return{id:t.id,deviceModel:r,transport:t.transport,name:t.name||r.name,rssi:t.rssi}}execute({transport:t}={}){if(this._logger.info("Listening to available devices"),this._transports.length===0)return this._logger.warn("No transports available"),Tl([[]]);if(!t){this._logger.info("Discovering all available transports");const r=this._transports.map((n,i)=>n.listenToAvailableDevices().pipe(Da(o=>({index:i,arr:o}))));return z3(...r).pipe(W3((n,{index:i,arr:o})=>(n[i]=o,n),{}),Da(n=>Object.values(n).flat().map(this.mapTransportDiscoveredDeviceToDiscoveredDevice)))}return this._logger.info(`Discovering devices on transport ${t}`),this._transportService.getTransport(t).caseOf({Nothing:()=>(this._logger.error(`Transport ${t} not found`),a2([])),Just:r=>r.listenToAvailableDevices().pipe(Da(n=>n.map(this.mapTransportDiscoveredDeviceToDiscoveredDevice)))})}};w_=yj([Et(),S_(0,Ye(Fa.TransportService)),S_(1,Ye(Sr.LoggerPublisherServiceFactory))],w_);var bj=(e,t,r,n)=>{for(var i=t,o=e.length-1,s;o>=0;o--)(s=e[o])&&(i=s(i)||i);return i},x_=(e,t)=>(r,n)=>t(r,n,e);let E_=class{constructor(t,r){this._sessionService=t,this._logger=r("ListenToConnectedDeviceUseCase")}_logger;execute(){return this._logger.info("Observe connected devices"),this._sessionService.sessionsObs.pipe(Da(t=>new D1({transportConnectedDevice:t.connectedDevice,sessionId:t.id})))}};E_=bj([Et(),x_(0,Ye(un.DeviceSessionService)),x_(1,Ye(Sr.LoggerPublisherServiceFactory))],E_);var Sj=(e,t,r,n)=>{for(var i=t,o=e.length-1,s;o>=0;o--)(s=e[o])&&(i=s(i)||i);return i},cm=(e,t)=>(r,n)=>t(r,n,e);let C_=class{constructor(t,r,n){this.connectUseCase=t,this.disconnectUseCase=r,this._logger=n("ReconnectUseCase")}_logger;async execute({device:t,sessionRefresherOptions:r}){return this._logger.debug("Reconnecting device session",{data:{deviceId:t.id,transport:t.transport}}),await this.disconnectUseCase.execute({sessionId:t.sessionId}),this.connectUseCase.execute({device:t,sessionRefresherOptions:r})}};C_=Sj([Et(),cm(0,Ye(WC.ConnectUseCase)),cm(1,Ye(WC.DisconnectUseCase)),cm(2,Ye(Sr.LoggerPublisherServiceFactory))],C_);var wj=(e,t,r,n)=>{for(var i=t,o=e.length-1,s;o>=0;o--)(s=e[o])&&(i=s(i)||i);return i},xj=(e,t)=>(r,n)=>t(r,n,e);let __=class{constructor(t){this._transportService=t}mapDiscoveredDevice(t){const r=new A$({id:t.id,model:t.deviceModel.id,name:t.deviceModel.productName});return{id:t.id,deviceModel:r,transport:t.transport,name:t.name||r.name,rssi:t.rssi}}execute({transport:t}={}){if(!t){const r=this._transportService.getAllTransports();return a2(...r).pipe(A1(n=>n.startDiscovering().pipe(Da(i=>this.mapDiscoveredDevice(i)))))}return this._transportService.getTransport(t).caseOf({Just:r=>r.startDiscovering().pipe(Da(n=>this.mapDiscoveredDevice(n))),Nothing:()=>{throw new k1(new Error("Unknown transport"))}})}};__=wj([Et(),xj(0,Ye(Fa.TransportService))],__);var Ej=(e,t,r,n)=>{for(var i=t,o=e.length-1,s;o>=0;o--)(s=e[o])&&(i=s(i)||i);return i},R_=(e,t)=>(r,n)=>t(r,n,e);let O_=class{constructor(t,r){this.transportService=t,this._logger=r("StopDiscoveringUseCase")}_logger;async execute(){this._logger.debug("Stopping discovering devices");for(const t of this.transportService.getAllTransports())await t.stopDiscovering()}};O_=Ej([Et(),R_(0,Ye(Fa.TransportService)),R_(1,Ye(Sr.LoggerPublisherServiceFactory))],O_);var Mu=(e=>(e[e.Fatal=0]="Fatal",e[e.Error=1]="Error",e[e.Warning=2]="Warning",e[e.Info=3]="Info",e[e.Debug=4]="Debug",e))(Mu||{});let Cj=class{format(t){return Array.isArray(t)?t.map(r=>`[${r}]`).join(" "):`[${t}]`}};function q0(e,t){if(typeof e=="bigint")return e.toString();if(Array.isArray(e))return t.has(e)?"[Circular]":(t.add(e),e.map(r=>q0(r,t)));if(e!==null&&typeof e=="object"){if(t.has(e))return"[Circular]";t.add(e);const r={};for(const[n,i]of Object.entries(e))r[n]=q0(i,t);return r}return e}function _j(e){const t=new WeakSet;t.add(e);const r={};for(const[n,i]of Object.entries(e))r[n]=q0(i,t);return r}var Rj=(e,t,r,n)=>{for(var i=t,o=e.length-1,s;o>=0;o--)(s=e[o])&&(i=s(i)||i);return i};let T_=class{subscribers;tag;tagFormatter;constructor(t,r,n=new Cj){this.subscribers=t,this.tag=r,this.tagFormatter=n}_log(t,r,n){const i=n?.data?_j(n.data):void 0,o=n?.tag??this.tag,s=this.tagFormatter.format(o);this.subscribers.forEach(u=>{const c={timestamp:n?.timestamp??Date.now(),tag:s,data:i};u.log(t,r,c)})}info(t,r){this._log(Mu.Info,t,r)}warn(t,r){this._log(Mu.Warning,t,r)}debug(t,r){this._log(Mu.Debug,t,r)}error(t,r){this._log(Mu.Error,t,r)}};T_=Rj([Et()],T_);let ac=class extends Error{status;statusText;responseBody;isTimeout;cause;constructor(t){super(t.message),this.name="DmkNetworkClientError",this.status=t.status,this.statusText=t.statusText,this.responseBody=t.responseBody,this.isTimeout=t.isTimeout??!1,this.cause=t.cause}};const Oj="application/json";function Tj(e,t){if(!t)return e;const r=e.endsWith("/")?e.slice(0,-1):e,n=t.startsWith("/")?t:`/${t}`;return`${r}${n}`}function $j(e){const t=[];for(const[r,n]of Object.entries(e))n!=null&&t.push(`${encodeURIComponent(r)}=${encodeURIComponent(String(n))}`);return t.join("&")}function os(e){const{url:t,params:r,baseUrl:n}=e,i=/^[a-z][a-z0-9+.-]*:\/\//i.test(t)?t:n?Tj(n,t):t,o=r?$j(r):"";if(o.length===0)return i;const s=i.includes("?")?"&":"?";return`${i}${s}${o}`}function Ij(e,t){const r=t.toLowerCase();return Object.keys(e).some(n=>n.toLowerCase()===r)}function Aj(e){return!!(typeof e=="string"||e instanceof ArrayBuffer||ArrayBuffer.isView(e)||typeof Blob<"u"&&e instanceof Blob||typeof FormData<"u"&&e instanceof FormData||typeof URLSearchParams<"u"&&e instanceof URLSearchParams||typeof ReadableStream<"u"&&e instanceof ReadableStream)}function kj(e){const{method:t,body:r,defaultHeaders:n,perRequestHeaders:i}=e,o={...n,...i};return r===void 0||t==="GET"||t==="HEAD"?{body:void 0,headers:o}:Aj(r)?{body:r,headers:o}:(Ij(o,"content-type")||(o["Content-Type"]=Oj),{body:JSON.stringify(r),headers:o})}function Pj(e){const{timeoutMs:t}=e;if(!t||t<=0)return{signal:void 0,cleanup:()=>{}};const r=new AbortController,n=setTimeout(()=>{r.abort()},t);return{signal:r.signal,cleanup:()=>clearTimeout(n)}}async function Mj(e,t){switch(t){case"void":return;case"text":return await e.text();case"blob":return await e.blob();case"arrayBuffer":return await e.arrayBuffer();case"json":default:{const r=await e.text();if(r.length===0)return;try{return JSON.parse(r)}catch(n){throw new ac({message:"Failed to parse JSON response body",status:e.status,statusText:e.statusText,responseBody:r,cause:n})}}}}async function Dj(e){try{return await e.text()}catch{return}}function Lj(e){const{cause:t,timeoutMs:r}=e,n=!!(r&&r>0);if(t instanceof Error&&(t.name==="AbortError"||t.name==="TimeoutError")){const i=t.name==="TimeoutError"||n;return new ac({message:i?"Request timed out":"Request aborted",isTimeout:i,cause:t})}return new ac({message:t instanceof Error?t.message:"Network request failed",cause:t})}let p2=class{baseUrl;defaultHeaders;fetchImpl;constructor(t={}){this.baseUrl=t.baseUrl,this.defaultHeaders=t.headers??{},this.fetchImpl=t.fetch}getFetch(){return this.fetchImpl??globalThis.fetch.bind(globalThis)}get(t,r){return this.request({...r,method:"GET",url:t}).then(n=>n.data)}post(t,r,n){return this.request({...n,method:"POST",url:t,body:r}).then(i=>i.data)}put(t,r,n){return this.request({...n,method:"PUT",url:t,body:r}).then(i=>i.data)}patch(t,r,n){return this.request({...n,method:"PATCH",url:t,body:r}).then(i=>i.data)}delete(t,r){return this.request({...r,method:"DELETE",url:t}).then(n=>n.data)}head(t,r){return this.request({...r,method:"HEAD",url:t,responseType:"void"}).then(()=>{})}async request(t){const r=os({url:t.url,params:t.params,baseUrl:this.baseUrl}),{body:n,headers:i}=kj({method:t.method,body:t.body,defaultHeaders:this.defaultHeaders,perRequestHeaders:t.headers}),{signal:o,cleanup:s}=Pj({timeoutMs:t.timeoutMs}),u=t.throwOnHttpError??!0,c=t.responseType??"json";try{let f;try{f=await this.getFetch()(r,{method:t.method,headers:i,body:n,signal:o})}catch(p){throw Lj({cause:p,timeoutMs:t.timeoutMs})}if(!f.ok&&u){const p=await Dj(f);throw new ac({message:`HTTP error ${f.status} ${f.statusText}`.trim(),status:f.status,statusText:f.statusText,responseBody:p})}return{data:await Mj(f,c),status:f.status,statusText:f.statusText,headers:f.headers,ok:f.ok}}finally{s()}}};var Du=(e=>(e.currency="currency",e.plugin="plugin",e.tool="tool",e.swap="swap",e))(Du||{});const Fj=1,Nj="0";let lp=class{constructor(t){this.error=t,this.originalError=t}_tag="FetchError";originalError};var Lu=(e=>(e.currency="currency",e.plugin="plugin",e.tool="tool",e.swap="swap",e))(Lu||{}),jj=(e,t,r,n)=>{for(var i=t,o=e.length-1,s;o>=0;o--)(s=e[o])&&(i=s(i)||i);return i},zj=(e,t)=>(r,n)=>t(r,n,e);const Go=e=>e instanceof ac&&e.cause!==void 0?new lp(e.cause):new lp(e);let $_=class{http;_provider=Fj;_firmwareDistributionSalt=Nj;constructor({managerApiUrl:t,provider:r,firmwareDistributionSalt:n}){this.http=new p2({baseUrl:t}),this._provider=r,this._firmwareDistributionSalt=n}setProvider(t){this._provider===t||t<1||(this._provider=t)}getProvider(){return this._provider}getAppList(t){const{targetId:r,firmwareVersionName:n}=t;return pt(()=>this.http.get("/v2/apps/by-target",{params:{target_id:r,provider:this._provider,firmware_version_name:n}})).chain(i=>this.mapApplicationDtoToApplication(i)).mapLeft(Go)}getMcuList(){return pt(()=>this.http.get("/mcu_versions")).chain(t=>this.mapMcuDtoToMcu(t)).mapLeft(Go)}getDeviceVersion(t){const{targetId:r}=t;return pt(()=>this.http.get("/get_device_version",{params:{target_id:r,provider:this._provider}})).chain(n=>this.mapDeviceVersionDto(n)).mapLeft(Go)}getFirmwareVersion(t){const{deviceId:r,version:n}=t;return pt(()=>this.http.get("/get_firmware_version",{params:{device_version:r,version_name:n,provider:this._provider}})).chain(i=>this.mapFinalFirmwareDto(i)).mapLeft(Go)}getFirmwareVersionById(t){return pt(()=>this.http.get(`/firmware_final_versions/${t}`)).chain(r=>this.mapFinalFirmwareDto(r)).mapLeft(Go)}getOsuFirmwareVersion(t){const{deviceId:r,version:n}=t;return pt(()=>this.http.get("/get_osu_version",{params:{device_version:r,version_name:n,provider:this._provider}})).chain(i=>this.mapOsuFirmwareDto(i)).mapLeft(Go)}getLatestFirmwareVersion(t){const r="34.27.0",{currentFinalFirmwareId:n,deviceId:i}=t;return pt(()=>this.http.get("/get_latest_firmware",{params:{current_se_firmware_final_version:n,device_version:i,provider:this._provider,salt:this._firmwareDistributionSalt,livecommonversion:r}})).chain(o=>this.mapLatestFirmwareDto(o)).mapLeft(Go)}getAppsByHash(t){const{hashes:r}=t;return pt(()=>this.http.post("/v2/apps/hash",r)).chain(n=>this.mapNullableApplicationDtoToApplication(n)).mapLeft(Go)}getLanguagePackages(t){const{deviceId:r,currentFinalFirmwareId:n}=t;return pt(()=>this.http.get("/language-packages",{params:{device_version:r,current_se_firmware_final_version:n}})).chain(i=>this.mapLanguagesDtoToLanguages(i)).mapLeft(Go)}mapAppTypeDtoToAppType(t){if(t===null)return null;switch(t){case Lu.currency:return Du.currency;case Lu.plugin:return Du.plugin;case Lu.tool:return Du.tool;case Lu.swap:return Du.swap}}mapApplicationDtoToApplication(t){return pt(()=>Promise.resolve(t.map(r=>this.mapApplicationDto(r))))}mapNullableApplicationDtoToApplication(t){return pt(()=>Promise.resolve(t.map(r=>r===null?null:this.mapApplicationDto(r))))}mapApplicationDto(t){if(typeof t!="object"||typeof t.versionId!="number"||typeof t.versionName!="string"||t.versionDisplayName!==null&&typeof t.versionDisplayName!="string"||typeof t.version!="string"||t.currencyId!==null&&typeof t.currencyId!="string"||t.description!==null&&typeof t.description!="string"||t.applicationType!==null&&typeof t.applicationType!="string"||typeof t.dateModified!="string"||t.icon!==null&&typeof t.icon!="string"||t.authorName!==null&&typeof t.authorName!="string"||t.supportURL!==null&&typeof t.supportURL!="string"||t.contactURL!==null&&typeof t.contactURL!="string"||t.sourceURL!==null&&typeof t.sourceURL!="string"||t.compatibleWallets!==null&&typeof t.compatibleWallets!="string"||typeof t.hash!="string"||typeof t.perso!="string"||typeof t.firmware!="string"||typeof t.firmwareKey!="string"||typeof t.delete!="string"||typeof t.deleteKey!="string"||t.bytes!==null&&typeof t.bytes!="number"||t.warning!==null&&typeof t.warning!="string"||typeof t.isDevTools!="boolean"||t.category!==null&&typeof t.category!="number"||t.parent!==null&&typeof t.parent!="number"||t.parentName!==null&&typeof t.parentName!="string")throw new Error(`Incomplete application: ${JSON.stringify(t)}`);const{applicationType:r,hash:n,perso:i,firmware:o,firmwareKey:s,delete:u,deleteKey:c,...f}=t;return{...f,hash:n,perso:i,firmware:o,firmwareKey:s,delete:u,deleteKey:c,applicationType:this.mapAppTypeDtoToAppType(r)}}mapMcuDtoToMcu(t){return pt(()=>Promise.resolve(t.map(r=>{if(typeof r!="object"||typeof r.id!="number"||typeof r.name!="string")throw new Error(`Incomplete MCU version: ${JSON.stringify(r)}`);return{id:r.id,name:r.name}})))}mapDeviceVersionDto(t){return pt(()=>{if(typeof t!="object"||typeof t.id!="number")throw new Error(`Incomplete device version: ${JSON.stringify(t)}`);const r={id:t.id};return Promise.resolve(r)})}mapFinalFirmwareDto(t){return pt(()=>{if(typeof t!="object"||typeof t.id!="number"||typeof t.version!="string"||typeof t.perso!="string"||t.firmware!==null&&typeof t.firmware!="string"||t.firmware_key!==null&&typeof t.firmware_key!="string"||t.hash!==null&&typeof t.hash!="string"||t.bytes!==null&&typeof t.bytes!="number"||!Array.isArray(t.mcu_versions))throw new Error(`Incomplete final firmware: ${JSON.stringify(t)}`);const r={id:t.id,version:t.version,perso:t.perso,firmware:t.firmware,firmwareKey:t.firmware_key,hash:t.hash,bytes:t.bytes,mcuVersions:t.mcu_versions};return Promise.resolve(r)})}mapLatestFirmwareDto(t){return pt(()=>{if(t.result!=="success"||!t.se_firmware_osu_version)throw new Error(`Latest firmware could not be retrieved: ${t.result}`);const r=t.se_firmware_osu_version;return Promise.resolve(r)}).chain(r=>this.mapOsuFirmwareDto(r))}mapOsuFirmwareDto(t){return pt(()=>{if(typeof t!="object"||typeof t.id!="number"||typeof t.perso!="string"||typeof t.firmware!="string"||typeof t.firmware_key!="string"||t.hash!==null&&typeof t.hash!="string"||typeof t.next_se_firmware_final_version!="number")throw new Error(`Incomplete latest firmware: ${JSON.stringify(t)}`);const r={id:t.id,perso:t.perso,firmware:t.firmware,firmwareKey:t.firmware_key,hash:t.hash,nextFinalFirmware:t.next_se_firmware_final_version};return Promise.resolve(r)})}mapLanguagesDtoToLanguages(t){return pt(()=>Promise.resolve(t.map(r=>this.mapLanguageDto(r))))}mapLanguageDto(t){if(typeof t!="object"||typeof t.language!="string"||typeof t.languagePackageVersionId!="number"||typeof t.version!="string"||typeof t.language_package_id!="number"||typeof t.apdu_install_url!="string"||typeof t.apdu_uninstall_url!="string"||typeof t.bytes!="number"||typeof t.date_creation!="string"||typeof t.date_last_modified!="string")throw new Error(`Incomplete language version: ${JSON.stringify(t)}`);return{language:t.language,languagePackageVersionId:t.languagePackageVersionId,version:t.version,languagePackageId:t.language_package_id,apduInstallUrl:t.apdu_install_url,apduUninstallUrl:t.apdu_uninstall_url,bytes:t.bytes,dateCreation:t.date_creation,dateLastModified:t.date_last_modified}}};$_=jj([Et(),zj(0,Ye(Np.DmkConfig))],$_);var Bj=(e,t,r,n)=>{for(var i=t,o=e.length-1,s;o>=0;o--)(s=e[o])&&(i=s(i)||i);return i},Vj=(e,t)=>(r,n)=>t(r,n,e);let I_=class{constructor(t){this.dataSource=t}getAppList(t){const r={targetId:t.targetId.toString(),firmwareVersionName:t.seVersion};return this.dataSource.getAppList(r)}getDeviceVersion(t){const r={targetId:t.targetId.toString()};return this.dataSource.getDeviceVersion(r)}getFirmwareVersion(t,r){const n={version:t.seVersion,deviceId:r.id};return this.dataSource.getFirmwareVersion(n)}getOsuFirmwareVersion(t,r){const n={version:t.seVersion,deviceId:r.id};return this.dataSource.getOsuFirmwareVersion(n)}getLatestFirmwareVersion(t,r){const n={currentFinalFirmwareId:t.id,deviceId:r.id};return this.dataSource.getLatestFirmwareVersion(n)}getNextFirmwareVersion(t){return this.dataSource.getFirmwareVersionById(t.nextFinalFirmware)}getLanguagePackages(t,r){const n={deviceId:t.id,currentFinalFirmwareId:r.id};return this.dataSource.getLanguagePackages(n)}getMcuList(){return this.dataSource.getMcuList()}getAppsByHash(t){const r={hashes:t};return pt(async({fromPromise:n,throwE:i})=>{if(r.hashes.length===0)return[];try{return await n(this.dataSource.getAppsByHash(r))}catch(o){return o instanceof lp?i(o):i(new lp(o))}})}};I_=Bj([Et(),Vj(0,Ye(Np.ManagerApiDataSource))],I_);var Hj=(e,t,r,n)=>{for(var i=t,o=e.length-1,s;o>=0;o--)(s=e[o])&&(i=s(i)||i);return i},A_=(e,t)=>(r,n)=>t(r,n,e);let k_=class{constructor(t,r){this.sessionService=t,this.managerApiDataSource=r}execute(t){for(const r of this.sessionService.getDeviceSessions()){const n=r.getDeviceSessionState();n.sessionStateType!==$l.Connected&&r.setDeviceSessionState({...n,firmwareUpdateContext:void 0,installedApps:[],appsUpdates:void 0,catalog:void 0})}this.managerApiDataSource.setProvider(t)}};k_=Hj([Et(),A_(0,Ye(un.DeviceSessionService)),A_(1,Ye(Np.ManagerApiDataSource))],k_);var Uj=(e,t,r,n)=>{for(var i=t,o=e.length-1,s;o>=0;o--)(s=e[o])&&(i=s(i)||i);return i},Wj=(e,t)=>(r,n)=>t(r,n,e);let P_=class{webSocketBaseUrl;constructor({webSocketUrl:t}){this.webSocketBaseUrl=t}genuineCheck(t){const r=os({baseUrl:this.webSocketBaseUrl,url:"/genuine",params:t});return this._connectWebSocket(r)}installApp(t){const r=os({baseUrl:this.webSocketBaseUrl,url:"/install",params:t});return this._connectWebSocket(r)}listInstalledApps(t){const r=os({baseUrl:this.webSocketBaseUrl,url:"/apps/list",params:t});return this._connectWebSocket(r)}uninstallApp(t){const r=os({baseUrl:this.webSocketBaseUrl,url:"/install",params:t});return this._connectWebSocket(r)}updateFirmware(t){const r=os({baseUrl:this.webSocketBaseUrl,url:"/install",params:t});return this._connectWebSocket(r)}updateMcu(t){const r=os({baseUrl:this.webSocketBaseUrl,url:"/mcu",params:t});return this._connectWebSocket(r)}_connectWebSocket(t){try{return nr(new J3(t))}catch(r){return Ut(new i4(r))}}};P_=Uj([Et(),Wj(0,Ye(M1.DmkConfig))],P_);var Gj=(e,t,r,n)=>{for(var i=t,o=e.length-1,s;o>=0;o--)(s=e[o])&&(i=s(i)||i);return i},qj=(e,t)=>(r,n)=>t(r,n,e);let M_=class{constructor(t){this.dataSource=t}genuineCheck(t,r){const n={targetId:t.targetId.toString(),perso:r.perso};return this.dataSource.genuineCheck(n)}installApp(t,r){const{perso:n,firmware:i,firmwareKey:o,hash:s}=r,u={targetId:t.targetId.toString(),perso:n,firmware:i,firmwareKey:o,hash:s};return this.dataSource.installApp(u)}listInstalledApps(t,r){const n={targetId:t.targetId.toString(),perso:r.perso};return this.dataSource.listInstalledApps(n)}uninstallApp(t,r){const{perso:n,delete:i,deleteKey:o,hash:s}=r,u={targetId:t.targetId.toString(),perso:n,firmware:i,firmwareKey:o,hash:s};return this.dataSource.uninstallApp(u)}updateFirmware(t,r){const n={targetId:t.targetId.toString(),perso:r.perso,firmware:r.firmware,firmwareKey:r.firmwareKey};return this.dataSource.updateFirmware(n)}updateMcu(t,r){const n={targetId:t.targetId.toString(),version:r.version};return this.dataSource.updateMcu(n)}};M_=Gj([Et(),qj(0,Ye(M1.SecureChannelDataSource))],M_);var Xj=(e,t,r,n)=>{for(var i=t,o=e.length-1,s;o>=0;o--)(s=e[o])&&(i=s(i)||i);return i},D_=(e,t)=>(r,n)=>t(r,n,e);let L_=class{_sessionService;_logger;constructor(t,r){this._sessionService=t,this._logger=r("SendApduUseCase")}async execute({sessionId:t,apdu:r,abortTimeout:n,triggersDisconnection:i}){return this._sessionService.getDeviceSessionById(t).caseOf({Right:async o=>(await o.sendApdu(r,{abortTimeout:n,triggersDisconnection:i})).caseOf({Right:s=>s,Left:s=>{throw this._logger.error("Error sending APDU",{data:{sessionId:t,apdu:r,error:s}}),s}}),Left:o=>{throw this._logger.error("Error getting deviceSession",{data:{error:o}}),o}})}};L_=Xj([Et(),D_(0,Ye(un.DeviceSessionService)),D_(1,Ye(Sr.LoggerPublisherServiceFactory))],L_);var Kj=(e,t,r,n)=>{for(var i=t,o=e.length-1,s;o>=0;o--)(s=e[o])&&(i=s(i)||i);return i},Js=(e,t)=>(r,n)=>t(r,n,e);let F_=class{constructor(t,r,n,i,o,s){if(this._config=r,this._loggerModuleFactory=n,this._deviceModelDataSource=i,this._apduSenderServiceFactory=o,this._apduReceiverServiceFactory=s,this._logger=n("TransportService"),t.length===0)throw this._logger.warn("No transports provided, please check your configuration"),new Q3("No transports provided, please check your configuration");for(const u of t){const c=this.addTransport(u);if(c.isLeft())throw c.extract()}}_transports=new Map;_logger;addTransport(t){const r=t({deviceModelDataSource:this._deviceModelDataSource,loggerServiceFactory:this._loggerModuleFactory,config:this._config,apduSenderServiceFactory:this._apduSenderServiceFactory,apduReceiverServiceFactory:this._apduReceiverServiceFactory});return this.addTransportInternal(r)}addTransportInternal(t){return this.getTransport(t.getIdentifier()).isJust()?(this._logger.warn(`Transport ${t.getIdentifier()} already exists, please check your configuration`),Ut(new Y3(`Transport ${t.getIdentifier()} already exists, please check your configuration`))):(this._transports.set(t.getIdentifier(),t),nr(void 0))}getTransport(t){return En.fromNullable(this._transports.get(t))}getAllTransports(){return Array.from(this._transports.values())}closeConnection(t){this.getTransport(t.transport).map(r=>r.disconnect({connectedDevice:t}))}};F_=Kj([Et(),Js(0,Ye(Fa.TransportsInput)),Js(1,Ye(Fa.DmkConfig)),Js(2,Ye(Sr.LoggerPublisherServiceFactory)),Js(3,Ye(K4.DeviceModelDataSource)),Js(4,Ye(un.ApduSenderServiceFactory)),Js(5,Ye(un.ApduReceiverServiceFactory))],F_);const Yj={ADD_LOG:"addLog"};function Qj(e){return{startListeningCommand:()=>e.sendMessage(Qo.START_LISTENING_DEVICES,"{}"),stopListeningCommand:()=>e.sendMessage(Qo.STOP_LISTENING_DEVICES,"{}"),startDiscoveringCommand:()=>e.sendMessage(Qo.START_DISCOVERING,"{}"),stopDiscoveringCommand:()=>e.sendMessage(Qo.STOP_DISCOVERING,"{}"),connectDeviceCommand:(t,r)=>e.sendMessage(Qo.CONNECT_DEVICE,JSON.stringify({deviceId:t,sessionRefresherOptions:r}))}}function Jj(e){return{getProviderCommand:()=>e.sendMessage(Qo.GET_PROVIDER,"{}"),setProviderCommand:t=>e.sendMessage(Qo.SET_PROVIDER,JSON.stringify({provider:t}))}}let Zj=0;function ez(e){return{sendApduCommand:(t,r)=>{const n=`apdu-${++Zj}`,i=r.match(/.{1,2}/g)?.map(o=>parseInt(o,16))||[];return e.sendMessage(Qo.SEND_APDU,JSON.stringify({sessionId:t,apdu:i,requestId:n})),n}}}function tz(e){const{timestamp:t,tag:r,verbosity:n,message:i,payloadJSON:o}=JSON.parse(e);return{timestamp:t,tag:r,verbosity:n,message:i,payloadJSON:o,payload:JSON.parse(o)}}const rz="apdu-exchange";function nz(e){const t=e.payload;return typeof t!="object"||t===null||Array.isArray(t)||t.type!==rz||typeof t.apdu!="string"||typeof t.response!="string"?null:{sessionId:typeof t.sessionId=="string"?t.sessionId:void 0,apdu:t.apdu,response:t.response,timestamp:e.timestamp}}function iz(e,t){try{const{module:r}=JSON.parse(e);t(n=>new Set([...n,r]))}catch(r){console.error("Failed to parse moduleConnected payload",r)}}function oz(e,t,r,n){const i=tz(e);if(i!==null){if(t(o=>[...o,i]),n){const o=nz(i);o!==null&&r(s=>[...s,o])}return!0}return!1}function az(e,t){try{const r=JSON.parse(e);t(r)}catch(r){console.error("Failed to parse connectedDevicesUpdate payload",r)}}function sz(e,t){try{const{sessionId:r,state:n}=JSON.parse(e);t(i=>new Map(i).set(r,n))}catch(r){console.error("Failed to parse deviceSessionStateUpdate payload",r)}}function lz(e,t){try{const r=JSON.parse(e);t(r)}catch(r){console.error("Failed to parse discoveredDevicesUpdate payload",r)}}function uz(e,t){try{const{provider:r}=JSON.parse(e);t(r)}catch(r){console.error("Failed to parse providerValue payload",r)}}function cz(e,t){try{const r=JSON.parse(e);t(n=>new Map(n).set(r.requestId,r))}catch(r){console.error("Failed to parse apduResponse payload",r)}}function fz(e){const[t,r]=x.useState([]),[n,i]=x.useState([]),[o,s]=x.useState([]),[u,c]=x.useState(new Set),[f,p]=x.useState([]),[g,h]=x.useState(new Map),[m,y]=x.useState([]),[b,S]=x.useState(!1),[_,C]=x.useState(!1),[O,R]=x.useState(null),[T,$]=x.useState(new Map),[P,L]=x.useState([]),[z,B]=x.useState(!1),X=x.useRef(!1),Y=x.useMemo(()=>({...e,sendMessage:(W,ve)=>{e.sendMessage(W,ve),i(se=>[...se,{type:W,payload:ve}])}}),[e]);x.useEffect(()=>{const{unsubscribe:W}=e.listenToMessages((ve,se)=>{switch(r(Ee=>[...Ee,{type:ve,payload:se}]),ve){case tN:iz(se,c);break;case Eu.CONNECTED_DEVICES_UPDATE:az(se,p);break;case Eu.DEVICE_SESSION_STATE_UPDATE:sz(se,h);break;case Eu.DISCOVERED_DEVICES_UPDATE:lz(se,y);break;case Eu.PROVIDER_VALUE:uz(se,R);break;case Eu.APDU_RESPONSE:cz(se,$);break;case Yj.ADD_LOG:oz(se,s,L,X.current);break}});return W},[e]);const N=x.useMemo(()=>Qj(Y),[Y]),j=x.useMemo(()=>Jj(Y),[Y]),F=x.useMemo(()=>ez(Y),[Y]),q=x.useCallback(()=>{S(!0),y([]),N.startListeningCommand()},[N]),U=x.useCallback(()=>{S(!1),y([]),N.stopListeningCommand()},[N]),M=x.useCallback(()=>{C(!0),y([]),N.startDiscoveringCommand()},[N]),G=x.useCallback(()=>{C(!1),y([]),N.stopDiscoveringCommand()},[N]),K=x.useCallback(()=>{s([])},[]),D=x.useCallback(()=>{X.current=!0,B(!0)},[]),A=x.useCallback(()=>{X.current=!1,B(!1)},[]),J=x.useCallback(()=>{L([])},[]),Z=u.has(xE.LOGGER),ne=u.has(xE.DMK_INSPECTOR);return{receivedMessages:t,sentMessages:n,logs:o,connectedModules:u,connectedDevices:f,sessionStates:g,discoveredDevices:m,isListening:b,isActivelyDiscovering:_,isLoggerConnected:Z,isInspectorConnected:ne,providerValue:O,apduResponses:T,apduExchanges:P,isRecordingExchanges:z,sendMessage:Y.sendMessage,clearLogs:K,startRecordingExchanges:D,stopRecordingExchanges:A,clearRecordedExchanges:J,startListening:q,stopListening:U,startDiscovering:M,stopDiscovering:G,connectDevice:N.connectDeviceCommand,getProvider:j.getProviderCommand,setProvider:j.setProviderCommand,sendApdu:F.sendApduCommand}}const dz=ge.div`
|
|
526
526
|
display: flex;
|
|
527
527
|
flex-direction: column;
|
|
528
528
|
align-items: center;
|
package/dist/rozenite.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name":"@ledgerhq/device-management-kit-devtools-rozenite","version":"0.0.0-develop-
|
|
1
|
+
{"name":"@ledgerhq/device-management-kit-devtools-rozenite","version":"0.0.0-develop-20260702003423","description":"Inspect and debug your integration of the Device Management Kit","panels":[{"name":"DMK DevTools","source":"/index.html"}]}
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"dependencies": {
|
|
3
3
|
"@rozenite/plugin-bridge": "1.1.0",
|
|
4
4
|
"rxjs": "7.8.2",
|
|
5
|
-
"@ledgerhq/device-management-kit-devtools-ui": "0.0.0-develop-
|
|
5
|
+
"@ledgerhq/device-management-kit-devtools-ui": "0.0.0-develop-20260702003423"
|
|
6
6
|
},
|
|
7
7
|
"description": "Inspect and debug your integration of the Device Management Kit",
|
|
8
8
|
"devDependencies": {
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
"rozenite": "1.1.0",
|
|
16
16
|
"typescript": "5.9.2",
|
|
17
17
|
"vite": "7.1.6",
|
|
18
|
-
"@ledgerhq/device-management-kit-devtools-core": "0.0.0-develop-
|
|
18
|
+
"@ledgerhq/device-management-kit-devtools-core": "0.0.0-develop-20260702003423"
|
|
19
19
|
},
|
|
20
20
|
"files": [
|
|
21
21
|
"./dist"
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
"peerDependencies": {
|
|
28
28
|
"react": "*",
|
|
29
29
|
"react-native": "*",
|
|
30
|
-
"@ledgerhq/device-management-kit-devtools-core": "0.0.0-develop-
|
|
30
|
+
"@ledgerhq/device-management-kit-devtools-core": "0.0.0-develop-20260702003423"
|
|
31
31
|
},
|
|
32
32
|
"private": false,
|
|
33
33
|
"repository": {
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
},
|
|
37
37
|
"type": "module",
|
|
38
38
|
"types": "./dist/react-native.d.ts",
|
|
39
|
-
"version": "0.0.0-develop-
|
|
39
|
+
"version": "0.0.0-develop-20260702003423",
|
|
40
40
|
"scripts": {
|
|
41
41
|
"build": "rozenite build",
|
|
42
42
|
"dev": "rozenite dev"
|