@ledgerhq/device-mockserver-client 0.0.0-develop-20260702003423 → 0.0.0-develop-20260703002922

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.
@@ -52,5 +52,5 @@
52
52
  "watch:types": "concurrently \"tsc --watch -p tsconfig.prod.json\" \"tsc-alias --watch -p tsconfig.prod.json\""
53
53
  },
54
54
  "types": "lib/index.d.ts",
55
- "version": "0.0.0-develop-20260702003423"
55
+ "version": "0.0.0-develop-20260703002922"
56
56
  }
@@ -1,2 +1,2 @@
1
- "use strict";var n=Object.defineProperty;var y=Object.getOwnPropertyDescriptor;var C=Object.getOwnPropertyNames;var f=Object.prototype.hasOwnProperty;var x=(o,e)=>{for(var p in e)n(o,p,{get:e[p],enumerable:!0})},d=(o,e,p,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let t of C(e))!f.call(o,t)&&t!==p&&n(o,t,{get:()=>e[t],enumerable:!(i=y(e,t))||i.enumerable});return o};var l=o=>d(n({},"__esModule",{value:!0}),o);var k={};x(k,{MockClient:()=>r.MockClient,deviceConfigCodec:()=>c.deviceConfigCodec,mockConfigCodec:()=>s.mockConfigCodec,sessionExportCodec:()=>m.sessionExportCodec});module.exports=l(k);var r=require("./MockClient"),c=require("./model/Device"),s=require("./model/Mock"),m=require("./model/SessionExport");0&&(module.exports={MockClient,deviceConfigCodec,mockConfigCodec,sessionExportCodec});
1
+ "use strict";var c=Object.defineProperty;var C=Object.getOwnPropertyDescriptor;var y=Object.getOwnPropertyNames;var f=Object.prototype.hasOwnProperty;var d=(o,e)=>{for(var p in e)c(o,p,{get:e[p],enumerable:!0})},l=(o,e,p,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let t of y(e))!f.call(o,t)&&t!==p&&c(o,t,{get:()=>e[t],enumerable:!(i=C(e,t))||i.enumerable});return o};var x=o=>l(c({},"__esModule",{value:!0}),o);var a={};d(a,{MockClient:()=>r.MockClient,catalogAppCodec:()=>n.catalogAppCodec,deviceConfigCodec:()=>n.deviceConfigCodec,mockConfigCodec:()=>s.mockConfigCodec,sessionExportCodec:()=>m.sessionExportCodec});module.exports=x(a);var r=require("./MockClient"),n=require("./model/Device"),s=require("./model/Mock"),m=require("./model/SessionExport");0&&(module.exports={MockClient,catalogAppCodec,deviceConfigCodec,mockConfigCodec,sessionExportCodec});
2
2
  //# sourceMappingURL=index.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/index.ts"],
4
- "sourcesContent": ["export type { MockClientOptions } from \"./MockClient\";\nexport { MockClient } from \"./MockClient\";\nexport type { AuthResponse, ConnectionState } from \"./model/Auth\";\nexport type { CommandResponse } from \"./model/CommandResponse\";\nexport {\n type Device,\n type DeviceApp,\n type DeviceConfig,\n deviceConfigCodec,\n type DeviceConnectivityType,\n} from \"./model/Device\";\nexport { type Mock, type MockConfig, mockConfigCodec } from \"./model/Mock\";\nexport type { Session } from \"./model/Session\";\nexport { type SessionExport, sessionExportCodec } from \"./model/SessionExport\";\nexport type { SpeculosInstance } from \"./model/Speculos\";\n"],
5
- "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,0KAAAE,EAAAF,GACA,IAAAG,EAA2B,wBAG3BC,EAMO,0BACPC,EAA4D,wBAE5DC,EAAuD",
4
+ "sourcesContent": ["export type { MockClientOptions } from \"./MockClient\";\nexport { MockClient } from \"./MockClient\";\nexport type { AuthResponse, ConnectionState } from \"./model/Auth\";\nexport type { CommandResponse } from \"./model/CommandResponse\";\nexport {\n type CatalogApp,\n catalogAppCodec,\n type Device,\n type DeviceApp,\n type DeviceConfig,\n deviceConfigCodec,\n type DeviceConnectivityType,\n} from \"./model/Device\";\nexport { type Mock, type MockConfig, mockConfigCodec } from \"./model/Mock\";\nexport type { Session } from \"./model/Session\";\nexport { type SessionExport, sessionExportCodec } from \"./model/SessionExport\";\nexport type { SpeculosInstance } from \"./model/Speculos\";\n"],
5
+ "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,gNAAAE,EAAAF,GACA,IAAAG,EAA2B,wBAG3BC,EAQO,0BACPC,EAA4D,wBAE5DC,EAAuD",
6
6
  "names": ["src_exports", "__export", "__toCommonJS", "import_MockClient", "import_Device", "import_Mock", "import_SessionExport"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var t=Object.defineProperty;var s=Object.getOwnPropertyDescriptor;var y=Object.getOwnPropertyNames;var d=Object.prototype.hasOwnProperty;var m=(o,n)=>{for(var i in n)t(o,i,{get:n[i],enumerable:!0})},v=(o,n,i,c)=>{if(n&&typeof n=="object"||typeof n=="function")for(let r of y(n))!d.call(o,r)&&r!==i&&t(o,r,{get:()=>n[r],enumerable:!(c=s(n,r))||c.enumerable});return o};var l=o=>v(t({},"__esModule",{value:!0}),o);var _={};m(_,{deviceAppCodec:()=>a,deviceCodec:()=>f,deviceConfigCodec:()=>g});module.exports=l(_);var e=require("purify-ts"),p=require("./Mock");const a=e.Codec.interface({name:e.string,version:e.string}),f=e.Codec.interface({id:e.string,name:e.string,device_type:e.string,connectivity_type:e.string,firmware_version:(0,e.optional)(e.string),apps:(0,e.optional)((0,e.array)(a)),masks:(0,e.optional)((0,e.array)(e.number)),connected:(0,e.optional)(e.boolean)}),g=e.Codec.interface({name:(0,e.optional)(e.string),device_type:(0,e.optional)(e.string),connectivity_type:(0,e.optional)(e.string),firmware_version:(0,e.optional)(e.string),apps:(0,e.optional)((0,e.array)(a)),masks:(0,e.optional)((0,e.array)(e.number)),mocks:(0,e.optional)((0,e.array)(p.mockConfigCodec))});0&&(module.exports={deviceAppCodec,deviceCodec,deviceConfigCodec});
1
+ "use strict";var i=Object.defineProperty;var d=Object.getOwnPropertyDescriptor;var y=Object.getOwnPropertyNames;var l=Object.prototype.hasOwnProperty;var g=(o,n)=>{for(var a in n)i(o,a,{get:n[a],enumerable:!0})},m=(o,n,a,c)=>{if(n&&typeof n=="object"||typeof n=="function")for(let r of y(n))!l.call(o,r)&&r!==a&&i(o,r,{get:()=>n[r],enumerable:!(c=d(n,r))||c.enumerable});return o};var v=o=>m(i({},"__esModule",{value:!0}),o);var _={};g(_,{catalogAppCodec:()=>p,deviceAppCodec:()=>t,deviceCodec:()=>f,deviceConfigCodec:()=>C});module.exports=v(_);var e=require("purify-ts"),s=require("./Mock");const t=e.Codec.interface({name:e.string,version:e.string,hash:(0,e.optional)(e.string)}),p=e.Codec.interface({hash:e.string,name:e.string,version:e.string}),f=e.Codec.interface({id:e.string,name:e.string,device_type:e.string,connectivity_type:e.string,firmware_version:(0,e.optional)(e.string),apps:(0,e.optional)((0,e.array)(t)),masks:(0,e.optional)((0,e.array)(e.number)),connected:(0,e.optional)(e.boolean)}),C=e.Codec.interface({name:(0,e.optional)(e.string),device_type:(0,e.optional)(e.string),connectivity_type:(0,e.optional)(e.string),firmware_version:(0,e.optional)(e.string),apps:(0,e.optional)((0,e.array)(t)),masks:(0,e.optional)((0,e.array)(e.number)),mocks:(0,e.optional)((0,e.array)(s.mockConfigCodec)),catalog:(0,e.optional)((0,e.array)(p))});0&&(module.exports={catalogAppCodec,deviceAppCodec,deviceCodec,deviceConfigCodec});
2
2
  //# sourceMappingURL=Device.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/model/Device.ts"],
4
- "sourcesContent": ["import { array, boolean, Codec, number, optional, string } from \"purify-ts\";\n\nimport { type MockConfig, mockConfigCodec } from \"./Mock\";\n\nexport type DeviceConnectivityType = \"USB\" | \"BLE\";\n\nexport interface DeviceApp {\n readonly name: string;\n readonly version: string;\n}\n\nexport const deviceAppCodec = Codec.interface({\n name: string,\n version: string,\n});\n\n/**\n * A mocked device attached to a session.\n *\n * The device exposes rich metadata (firmware\n * version, installed applications, memory masks) so DMK can build a realistic\n * device session.\n */\nexport interface Device {\n readonly id: string;\n readonly name: string;\n /** DeviceModelId enum value, e.g. \"nanoX\", \"stax\", \"flex\". */\n readonly device_type: string;\n readonly connectivity_type: string;\n readonly firmware_version?: string;\n readonly apps?: DeviceApp[];\n readonly masks?: number[];\n readonly connected?: boolean;\n}\n\nexport const deviceCodec = Codec.interface({\n id: string,\n name: string,\n device_type: string,\n connectivity_type: string,\n firmware_version: optional(string),\n apps: optional(array(deviceAppCodec)),\n masks: optional(array(number)),\n connected: optional(boolean),\n});\n\n/**\n * Payload used to attach (POST /devices) or edit (PATCH /devices/:id) a device.\n */\nexport interface DeviceConfig {\n readonly name?: string;\n readonly device_type?: string;\n readonly connectivity_type?: string;\n readonly firmware_version?: string;\n readonly apps?: DeviceApp[];\n readonly masks?: number[];\n /** Device-scoped APDU mocks, used when attaching (POST) or importing a device. */\n readonly mocks?: MockConfig[];\n}\n\nexport const deviceConfigCodec = Codec.interface({\n name: optional(string),\n device_type: optional(string),\n connectivity_type: optional(string),\n firmware_version: optional(string),\n apps: optional(array(deviceAppCodec)),\n masks: optional(array(number)),\n mocks: optional(array(mockConfigCodec)),\n});\n"],
5
- "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,oBAAAE,EAAA,gBAAAC,EAAA,sBAAAC,IAAA,eAAAC,EAAAL,GAAA,IAAAM,EAAgE,qBAEhEC,EAAiD,kBAS1C,MAAML,EAAiB,QAAM,UAAU,CAC5C,KAAM,SACN,QAAS,QACX,CAAC,EAqBYC,EAAc,QAAM,UAAU,CACzC,GAAI,SACJ,KAAM,SACN,YAAa,SACb,kBAAmB,SACnB,oBAAkB,YAAS,QAAM,EACjC,QAAM,eAAS,SAAMD,CAAc,CAAC,EACpC,SAAO,eAAS,SAAM,QAAM,CAAC,EAC7B,aAAW,YAAS,SAAO,CAC7B,CAAC,EAgBYE,EAAoB,QAAM,UAAU,CAC/C,QAAM,YAAS,QAAM,EACrB,eAAa,YAAS,QAAM,EAC5B,qBAAmB,YAAS,QAAM,EAClC,oBAAkB,YAAS,QAAM,EACjC,QAAM,eAAS,SAAMF,CAAc,CAAC,EACpC,SAAO,eAAS,SAAM,QAAM,CAAC,EAC7B,SAAO,eAAS,SAAM,iBAAe,CAAC,CACxC,CAAC",
6
- "names": ["Device_exports", "__export", "deviceAppCodec", "deviceCodec", "deviceConfigCodec", "__toCommonJS", "import_purify_ts", "import_Mock"]
4
+ "sourcesContent": ["import { array, boolean, Codec, number, optional, string } from \"purify-ts\";\n\nimport { type MockConfig, mockConfigCodec } from \"./Mock\";\n\nexport type DeviceConnectivityType = \"USB\" | \"BLE\";\n\nexport interface DeviceApp {\n readonly name: string;\n readonly version: string;\n readonly hash?: string;\n}\n\nexport const deviceAppCodec = Codec.interface({\n name: string,\n version: string,\n hash: optional(string),\n});\n\n/**\n * An installable app known to the mock \"app store\", keyed by its install\n * `hash`. The secure-channel install flow resolves the hash sent by DMK to one\n * of these entries to learn which app is being installed.\n */\nexport interface CatalogApp {\n readonly hash: string;\n readonly name: string;\n readonly version: string;\n}\n\nexport const catalogAppCodec = Codec.interface({\n hash: string,\n name: string,\n version: string,\n});\n\n/**\n * A mocked device attached to a session.\n *\n * The device exposes rich metadata (firmware\n * version, installed applications, memory masks) so DMK can build a realistic\n * device session.\n */\nexport interface Device {\n readonly id: string;\n readonly name: string;\n /** DeviceModelId enum value, e.g. \"nanoX\", \"stax\", \"flex\". */\n readonly device_type: string;\n readonly connectivity_type: string;\n readonly firmware_version?: string;\n readonly apps?: DeviceApp[];\n readonly masks?: number[];\n readonly connected?: boolean;\n}\n\nexport const deviceCodec = Codec.interface({\n id: string,\n name: string,\n device_type: string,\n connectivity_type: string,\n firmware_version: optional(string),\n apps: optional(array(deviceAppCodec)),\n masks: optional(array(number)),\n connected: optional(boolean),\n});\n\n/**\n * Payload used to attach (POST /devices) or edit (PATCH /devices/:id) a device.\n */\nexport interface DeviceConfig {\n readonly name?: string;\n readonly device_type?: string;\n readonly connectivity_type?: string;\n readonly firmware_version?: string;\n readonly apps?: DeviceApp[];\n readonly masks?: number[];\n /** Device-scoped APDU mocks, used when attaching (POST) or importing a device. */\n readonly mocks?: MockConfig[];\n /** Installable apps the mock \"app store\" can resolve from an install hash. */\n readonly catalog?: CatalogApp[];\n}\n\nexport const deviceConfigCodec = Codec.interface({\n name: optional(string),\n device_type: optional(string),\n connectivity_type: optional(string),\n firmware_version: optional(string),\n apps: optional(array(deviceAppCodec)),\n masks: optional(array(number)),\n mocks: optional(array(mockConfigCodec)),\n catalog: optional(array(catalogAppCodec)),\n});\n"],
5
+ "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,qBAAAE,EAAA,mBAAAC,EAAA,gBAAAC,EAAA,sBAAAC,IAAA,eAAAC,EAAAN,GAAA,IAAAO,EAAgE,qBAEhEC,EAAiD,kBAU1C,MAAML,EAAiB,QAAM,UAAU,CAC5C,KAAM,SACN,QAAS,SACT,QAAM,YAAS,QAAM,CACvB,CAAC,EAaYD,EAAkB,QAAM,UAAU,CAC7C,KAAM,SACN,KAAM,SACN,QAAS,QACX,CAAC,EAqBYE,EAAc,QAAM,UAAU,CACzC,GAAI,SACJ,KAAM,SACN,YAAa,SACb,kBAAmB,SACnB,oBAAkB,YAAS,QAAM,EACjC,QAAM,eAAS,SAAMD,CAAc,CAAC,EACpC,SAAO,eAAS,SAAM,QAAM,CAAC,EAC7B,aAAW,YAAS,SAAO,CAC7B,CAAC,EAkBYE,EAAoB,QAAM,UAAU,CAC/C,QAAM,YAAS,QAAM,EACrB,eAAa,YAAS,QAAM,EAC5B,qBAAmB,YAAS,QAAM,EAClC,oBAAkB,YAAS,QAAM,EACjC,QAAM,eAAS,SAAMF,CAAc,CAAC,EACpC,SAAO,eAAS,SAAM,QAAM,CAAC,EAC7B,SAAO,eAAS,SAAM,iBAAe,CAAC,EACtC,WAAS,eAAS,SAAMD,CAAe,CAAC,CAC1C,CAAC",
6
+ "names": ["Device_exports", "__export", "catalogAppCodec", "deviceAppCodec", "deviceCodec", "deviceConfigCodec", "__toCommonJS", "import_purify_ts", "import_Mock"]
7
7
  }
@@ -52,5 +52,5 @@
52
52
  "watch:types": "concurrently \"tsc --watch -p tsconfig.prod.json\" \"tsc-alias --watch -p tsconfig.prod.json\""
53
53
  },
54
54
  "types": "lib/index.d.ts",
55
- "version": "0.0.0-develop-20260702003423"
55
+ "version": "0.0.0-develop-20260703002922"
56
56
  }
@@ -1,2 +1,2 @@
1
- import{MockClient as t}from"./MockClient";import{deviceConfigCodec as n}from"./model/Device";import{mockConfigCodec as r}from"./model/Mock";import{sessionExportCodec as s}from"./model/SessionExport";export{t as MockClient,n as deviceConfigCodec,r as mockConfigCodec,s as sessionExportCodec};
1
+ import{MockClient as t}from"./MockClient";import{catalogAppCodec as n,deviceConfigCodec as c}from"./model/Device";import{mockConfigCodec as r}from"./model/Mock";import{sessionExportCodec as m}from"./model/SessionExport";export{t as MockClient,n as catalogAppCodec,c as deviceConfigCodec,r as mockConfigCodec,m as sessionExportCodec};
2
2
  //# sourceMappingURL=index.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/index.ts"],
4
- "sourcesContent": ["export type { MockClientOptions } from \"./MockClient\";\nexport { MockClient } from \"./MockClient\";\nexport type { AuthResponse, ConnectionState } from \"./model/Auth\";\nexport type { CommandResponse } from \"./model/CommandResponse\";\nexport {\n type Device,\n type DeviceApp,\n type DeviceConfig,\n deviceConfigCodec,\n type DeviceConnectivityType,\n} from \"./model/Device\";\nexport { type Mock, type MockConfig, mockConfigCodec } from \"./model/Mock\";\nexport type { Session } from \"./model/Session\";\nexport { type SessionExport, sessionExportCodec } from \"./model/SessionExport\";\nexport type { SpeculosInstance } from \"./model/Speculos\";\n"],
5
- "mappings": "AACA,OAAS,cAAAA,MAAkB,eAG3B,OAIE,qBAAAC,MAEK,iBACP,OAAqC,mBAAAC,MAAuB,eAE5D,OAA6B,sBAAAC,MAA0B",
6
- "names": ["MockClient", "deviceConfigCodec", "mockConfigCodec", "sessionExportCodec"]
4
+ "sourcesContent": ["export type { MockClientOptions } from \"./MockClient\";\nexport { MockClient } from \"./MockClient\";\nexport type { AuthResponse, ConnectionState } from \"./model/Auth\";\nexport type { CommandResponse } from \"./model/CommandResponse\";\nexport {\n type CatalogApp,\n catalogAppCodec,\n type Device,\n type DeviceApp,\n type DeviceConfig,\n deviceConfigCodec,\n type DeviceConnectivityType,\n} from \"./model/Device\";\nexport { type Mock, type MockConfig, mockConfigCodec } from \"./model/Mock\";\nexport type { Session } from \"./model/Session\";\nexport { type SessionExport, sessionExportCodec } from \"./model/SessionExport\";\nexport type { SpeculosInstance } from \"./model/Speculos\";\n"],
5
+ "mappings": "AACA,OAAS,cAAAA,MAAkB,eAG3B,OAEE,mBAAAC,EAIA,qBAAAC,MAEK,iBACP,OAAqC,mBAAAC,MAAuB,eAE5D,OAA6B,sBAAAC,MAA0B",
6
+ "names": ["MockClient", "catalogAppCodec", "deviceConfigCodec", "mockConfigCodec", "sessionExportCodec"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import{array as o,boolean as a,Codec as r,number as i,optional as e,string as n}from"purify-ts";import{mockConfigCodec as c}from"./Mock";const t=r.interface({name:n,version:n}),y=r.interface({id:n,name:n,device_type:n,connectivity_type:n,firmware_version:e(n),apps:e(o(t)),masks:e(o(i)),connected:e(a)}),d=r.interface({name:e(n),device_type:e(n),connectivity_type:e(n),firmware_version:e(n),apps:e(o(t)),masks:e(o(i)),mocks:e(o(c))});export{t as deviceAppCodec,y as deviceCodec,d as deviceConfigCodec};
1
+ import{array as o,boolean as t,Codec as r,number as a,optional as n,string as e}from"purify-ts";import{mockConfigCodec as c}from"./Mock";const i=r.interface({name:e,version:e,hash:n(e)}),s=r.interface({hash:e,name:e,version:e}),y=r.interface({id:e,name:e,device_type:e,connectivity_type:e,firmware_version:n(e),apps:n(o(i)),masks:n(o(a)),connected:n(t)}),l=r.interface({name:n(e),device_type:n(e),connectivity_type:n(e),firmware_version:n(e),apps:n(o(i)),masks:n(o(a)),mocks:n(o(c)),catalog:n(o(s))});export{s as catalogAppCodec,i as deviceAppCodec,y as deviceCodec,l as deviceConfigCodec};
2
2
  //# sourceMappingURL=Device.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/model/Device.ts"],
4
- "sourcesContent": ["import { array, boolean, Codec, number, optional, string } from \"purify-ts\";\n\nimport { type MockConfig, mockConfigCodec } from \"./Mock\";\n\nexport type DeviceConnectivityType = \"USB\" | \"BLE\";\n\nexport interface DeviceApp {\n readonly name: string;\n readonly version: string;\n}\n\nexport const deviceAppCodec = Codec.interface({\n name: string,\n version: string,\n});\n\n/**\n * A mocked device attached to a session.\n *\n * The device exposes rich metadata (firmware\n * version, installed applications, memory masks) so DMK can build a realistic\n * device session.\n */\nexport interface Device {\n readonly id: string;\n readonly name: string;\n /** DeviceModelId enum value, e.g. \"nanoX\", \"stax\", \"flex\". */\n readonly device_type: string;\n readonly connectivity_type: string;\n readonly firmware_version?: string;\n readonly apps?: DeviceApp[];\n readonly masks?: number[];\n readonly connected?: boolean;\n}\n\nexport const deviceCodec = Codec.interface({\n id: string,\n name: string,\n device_type: string,\n connectivity_type: string,\n firmware_version: optional(string),\n apps: optional(array(deviceAppCodec)),\n masks: optional(array(number)),\n connected: optional(boolean),\n});\n\n/**\n * Payload used to attach (POST /devices) or edit (PATCH /devices/:id) a device.\n */\nexport interface DeviceConfig {\n readonly name?: string;\n readonly device_type?: string;\n readonly connectivity_type?: string;\n readonly firmware_version?: string;\n readonly apps?: DeviceApp[];\n readonly masks?: number[];\n /** Device-scoped APDU mocks, used when attaching (POST) or importing a device. */\n readonly mocks?: MockConfig[];\n}\n\nexport const deviceConfigCodec = Codec.interface({\n name: optional(string),\n device_type: optional(string),\n connectivity_type: optional(string),\n firmware_version: optional(string),\n apps: optional(array(deviceAppCodec)),\n masks: optional(array(number)),\n mocks: optional(array(mockConfigCodec)),\n});\n"],
5
- "mappings": "AAAA,OAAS,SAAAA,EAAO,WAAAC,EAAS,SAAAC,EAAO,UAAAC,EAAQ,YAAAC,EAAU,UAAAC,MAAc,YAEhE,OAA0B,mBAAAC,MAAuB,SAS1C,MAAMC,EAAiBL,EAAM,UAAU,CAC5C,KAAMG,EACN,QAASA,CACX,CAAC,EAqBYG,EAAcN,EAAM,UAAU,CACzC,GAAIG,EACJ,KAAMA,EACN,YAAaA,EACb,kBAAmBA,EACnB,iBAAkBD,EAASC,CAAM,EACjC,KAAMD,EAASJ,EAAMO,CAAc,CAAC,EACpC,MAAOH,EAASJ,EAAMG,CAAM,CAAC,EAC7B,UAAWC,EAASH,CAAO,CAC7B,CAAC,EAgBYQ,EAAoBP,EAAM,UAAU,CAC/C,KAAME,EAASC,CAAM,EACrB,YAAaD,EAASC,CAAM,EAC5B,kBAAmBD,EAASC,CAAM,EAClC,iBAAkBD,EAASC,CAAM,EACjC,KAAMD,EAASJ,EAAMO,CAAc,CAAC,EACpC,MAAOH,EAASJ,EAAMG,CAAM,CAAC,EAC7B,MAAOC,EAASJ,EAAMM,CAAe,CAAC,CACxC,CAAC",
6
- "names": ["array", "boolean", "Codec", "number", "optional", "string", "mockConfigCodec", "deviceAppCodec", "deviceCodec", "deviceConfigCodec"]
4
+ "sourcesContent": ["import { array, boolean, Codec, number, optional, string } from \"purify-ts\";\n\nimport { type MockConfig, mockConfigCodec } from \"./Mock\";\n\nexport type DeviceConnectivityType = \"USB\" | \"BLE\";\n\nexport interface DeviceApp {\n readonly name: string;\n readonly version: string;\n readonly hash?: string;\n}\n\nexport const deviceAppCodec = Codec.interface({\n name: string,\n version: string,\n hash: optional(string),\n});\n\n/**\n * An installable app known to the mock \"app store\", keyed by its install\n * `hash`. The secure-channel install flow resolves the hash sent by DMK to one\n * of these entries to learn which app is being installed.\n */\nexport interface CatalogApp {\n readonly hash: string;\n readonly name: string;\n readonly version: string;\n}\n\nexport const catalogAppCodec = Codec.interface({\n hash: string,\n name: string,\n version: string,\n});\n\n/**\n * A mocked device attached to a session.\n *\n * The device exposes rich metadata (firmware\n * version, installed applications, memory masks) so DMK can build a realistic\n * device session.\n */\nexport interface Device {\n readonly id: string;\n readonly name: string;\n /** DeviceModelId enum value, e.g. \"nanoX\", \"stax\", \"flex\". */\n readonly device_type: string;\n readonly connectivity_type: string;\n readonly firmware_version?: string;\n readonly apps?: DeviceApp[];\n readonly masks?: number[];\n readonly connected?: boolean;\n}\n\nexport const deviceCodec = Codec.interface({\n id: string,\n name: string,\n device_type: string,\n connectivity_type: string,\n firmware_version: optional(string),\n apps: optional(array(deviceAppCodec)),\n masks: optional(array(number)),\n connected: optional(boolean),\n});\n\n/**\n * Payload used to attach (POST /devices) or edit (PATCH /devices/:id) a device.\n */\nexport interface DeviceConfig {\n readonly name?: string;\n readonly device_type?: string;\n readonly connectivity_type?: string;\n readonly firmware_version?: string;\n readonly apps?: DeviceApp[];\n readonly masks?: number[];\n /** Device-scoped APDU mocks, used when attaching (POST) or importing a device. */\n readonly mocks?: MockConfig[];\n /** Installable apps the mock \"app store\" can resolve from an install hash. */\n readonly catalog?: CatalogApp[];\n}\n\nexport const deviceConfigCodec = Codec.interface({\n name: optional(string),\n device_type: optional(string),\n connectivity_type: optional(string),\n firmware_version: optional(string),\n apps: optional(array(deviceAppCodec)),\n masks: optional(array(number)),\n mocks: optional(array(mockConfigCodec)),\n catalog: optional(array(catalogAppCodec)),\n});\n"],
5
+ "mappings": "AAAA,OAAS,SAAAA,EAAO,WAAAC,EAAS,SAAAC,EAAO,UAAAC,EAAQ,YAAAC,EAAU,UAAAC,MAAc,YAEhE,OAA0B,mBAAAC,MAAuB,SAU1C,MAAMC,EAAiBL,EAAM,UAAU,CAC5C,KAAMG,EACN,QAASA,EACT,KAAMD,EAASC,CAAM,CACvB,CAAC,EAaYG,EAAkBN,EAAM,UAAU,CAC7C,KAAMG,EACN,KAAMA,EACN,QAASA,CACX,CAAC,EAqBYI,EAAcP,EAAM,UAAU,CACzC,GAAIG,EACJ,KAAMA,EACN,YAAaA,EACb,kBAAmBA,EACnB,iBAAkBD,EAASC,CAAM,EACjC,KAAMD,EAASJ,EAAMO,CAAc,CAAC,EACpC,MAAOH,EAASJ,EAAMG,CAAM,CAAC,EAC7B,UAAWC,EAASH,CAAO,CAC7B,CAAC,EAkBYS,EAAoBR,EAAM,UAAU,CAC/C,KAAME,EAASC,CAAM,EACrB,YAAaD,EAASC,CAAM,EAC5B,kBAAmBD,EAASC,CAAM,EAClC,iBAAkBD,EAASC,CAAM,EACjC,KAAMD,EAASJ,EAAMO,CAAc,CAAC,EACpC,MAAOH,EAASJ,EAAMG,CAAM,CAAC,EAC7B,MAAOC,EAASJ,EAAMM,CAAe,CAAC,EACtC,QAASF,EAASJ,EAAMQ,CAAe,CAAC,CAC1C,CAAC",
6
+ "names": ["array", "boolean", "Codec", "number", "optional", "string", "mockConfigCodec", "deviceAppCodec", "catalogAppCodec", "deviceCodec", "deviceConfigCodec"]
7
7
  }
@@ -2,7 +2,7 @@ export type { MockClientOptions } from "./MockClient";
2
2
  export { MockClient } from "./MockClient";
3
3
  export type { AuthResponse, ConnectionState } from "./model/Auth";
4
4
  export type { CommandResponse } from "./model/CommandResponse";
5
- export { type Device, type DeviceApp, type DeviceConfig, deviceConfigCodec, type DeviceConnectivityType, } from "./model/Device";
5
+ export { type CatalogApp, catalogAppCodec, type Device, type DeviceApp, type DeviceConfig, deviceConfigCodec, type DeviceConnectivityType, } from "./model/Device";
6
6
  export { type Mock, type MockConfig, mockConfigCodec } from "./model/Mock";
7
7
  export type { Session } from "./model/Session";
8
8
  export { type SessionExport, sessionExportCodec } from "./model/SessionExport";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAClE,YAAY,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EACL,KAAK,MAAM,EACX,KAAK,SAAS,EACd,KAAK,YAAY,EACjB,iBAAiB,EACjB,KAAK,sBAAsB,GAC5B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,KAAK,IAAI,EAAE,KAAK,UAAU,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC3E,YAAY,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,KAAK,aAAa,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC/E,YAAY,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAClE,YAAY,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EACL,KAAK,UAAU,EACf,eAAe,EACf,KAAK,MAAM,EACX,KAAK,SAAS,EACd,KAAK,YAAY,EACjB,iBAAiB,EACjB,KAAK,sBAAsB,GAC5B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,KAAK,IAAI,EAAE,KAAK,UAAU,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC3E,YAAY,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,KAAK,aAAa,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC/E,YAAY,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC"}
@@ -29,6 +29,7 @@ export declare const connectionStateCodec: Codec<{
29
29
  apps: {
30
30
  name: string;
31
31
  version: string;
32
+ hash: string | undefined;
32
33
  }[] | undefined;
33
34
  masks: number[] | undefined;
34
35
  connected: boolean | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"Auth.d.ts","sourceRoot":"","sources":["../../../../src/model/Auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,KAAK,EAAkB,MAAM,WAAW,CAAC;AAE3D,OAAO,EAAE,KAAK,MAAM,EAAe,MAAM,UAAU,CAAC;AAEpD;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,eAAO,MAAM,iBAAiB;;;EAG5B,CAAC;AAEH;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;CAC7B;AAED,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;EAG/B,CAAC"}
1
+ {"version":3,"file":"Auth.d.ts","sourceRoot":"","sources":["../../../../src/model/Auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,KAAK,EAAkB,MAAM,WAAW,CAAC;AAE3D,OAAO,EAAE,KAAK,MAAM,EAAe,MAAM,UAAU,CAAC;AAEpD;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,eAAO,MAAM,iBAAiB;;;EAG5B,CAAC;AAEH;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;CAC7B;AAED,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;EAG/B,CAAC"}
@@ -4,10 +4,27 @@ export type DeviceConnectivityType = "USB" | "BLE";
4
4
  export interface DeviceApp {
5
5
  readonly name: string;
6
6
  readonly version: string;
7
+ readonly hash?: string;
7
8
  }
8
9
  export declare const deviceAppCodec: Codec<{
9
10
  name: string;
10
11
  version: string;
12
+ hash: string | undefined;
13
+ }>;
14
+ /**
15
+ * An installable app known to the mock "app store", keyed by its install
16
+ * `hash`. The secure-channel install flow resolves the hash sent by DMK to one
17
+ * of these entries to learn which app is being installed.
18
+ */
19
+ export interface CatalogApp {
20
+ readonly hash: string;
21
+ readonly name: string;
22
+ readonly version: string;
23
+ }
24
+ export declare const catalogAppCodec: Codec<{
25
+ hash: string;
26
+ name: string;
27
+ version: string;
11
28
  }>;
12
29
  /**
13
30
  * A mocked device attached to a session.
@@ -36,6 +53,7 @@ export declare const deviceCodec: Codec<{
36
53
  apps: {
37
54
  name: string;
38
55
  version: string;
56
+ hash: string | undefined;
39
57
  }[] | undefined;
40
58
  masks: number[] | undefined;
41
59
  connected: boolean | undefined;
@@ -52,6 +70,8 @@ export interface DeviceConfig {
52
70
  readonly masks?: number[];
53
71
  /** Device-scoped APDU mocks, used when attaching (POST) or importing a device. */
54
72
  readonly mocks?: MockConfig[];
73
+ /** Installable apps the mock "app store" can resolve from an install hash. */
74
+ readonly catalog?: CatalogApp[];
55
75
  }
56
76
  export declare const deviceConfigCodec: Codec<{
57
77
  name: string | undefined;
@@ -61,6 +81,7 @@ export declare const deviceConfigCodec: Codec<{
61
81
  apps: {
62
82
  name: string;
63
83
  version: string;
84
+ hash: string | undefined;
64
85
  }[] | undefined;
65
86
  masks: number[] | undefined;
66
87
  mocks: {
@@ -68,5 +89,10 @@ export declare const deviceConfigCodec: Codec<{
68
89
  response: string | undefined;
69
90
  responses: string[] | undefined;
70
91
  }[] | undefined;
92
+ catalog: {
93
+ hash: string;
94
+ name: string;
95
+ version: string;
96
+ }[] | undefined;
71
97
  }>;
72
98
  //# sourceMappingURL=Device.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Device.d.ts","sourceRoot":"","sources":["../../../../src/model/Device.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,EAA4B,MAAM,WAAW,CAAC;AAE5E,OAAO,EAAE,KAAK,UAAU,EAAmB,MAAM,QAAQ,CAAC;AAE1D,MAAM,MAAM,sBAAsB,GAAG,KAAK,GAAG,KAAK,CAAC;AAEnD,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,eAAO,MAAM,cAAc;;;EAGzB,CAAC;AAEH;;;;;;GAMG;AACH,MAAM,WAAW,MAAM;IACrB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,8DAA8D;IAC9D,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,CAAC;IAC5B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,eAAO,MAAM,WAAW;;;;;;;;;;;;EAStB,CAAC;AAEH;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,CAAC;IAC5B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,kFAAkF;IAClF,QAAQ,CAAC,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC;CAC/B;AAED,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;EAQ5B,CAAC"}
1
+ {"version":3,"file":"Device.d.ts","sourceRoot":"","sources":["../../../../src/model/Device.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,EAA4B,MAAM,WAAW,CAAC;AAE5E,OAAO,EAAE,KAAK,UAAU,EAAmB,MAAM,QAAQ,CAAC;AAE1D,MAAM,MAAM,sBAAsB,GAAG,KAAK,GAAG,KAAK,CAAC;AAEnD,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,eAAO,MAAM,cAAc;;;;EAIzB,CAAC;AAEH;;;;GAIG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,eAAO,MAAM,eAAe;;;;EAI1B,CAAC;AAEH;;;;;;GAMG;AACH,MAAM,WAAW,MAAM;IACrB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,8DAA8D;IAC9D,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,CAAC;IAC5B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,eAAO,MAAM,WAAW;;;;;;;;;;;;;EAStB,CAAC;AAEH;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,CAAC;IAC5B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,kFAAkF;IAClF,QAAQ,CAAC,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC;IAC9B,8EAA8E;IAC9E,QAAQ,CAAC,OAAO,CAAC,EAAE,UAAU,EAAE,CAAC;CACjC;AAED,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;EAS5B,CAAC"}
@@ -24,6 +24,7 @@ export declare const sessionCodec: Codec<{
24
24
  apps: {
25
25
  name: string;
26
26
  version: string;
27
+ hash: string | undefined;
27
28
  }[] | undefined;
28
29
  masks: number[] | undefined;
29
30
  connected: boolean | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"Session.d.ts","sourceRoot":"","sources":["../../../../src/model/Session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,KAAK,EAAkB,MAAM,WAAW,CAAC;AAEzD,OAAO,EAAE,KAAK,MAAM,EAAe,MAAM,UAAU,CAAC;AAEpD;;;;GAIG;AACH,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;EAKvB,CAAC"}
1
+ {"version":3,"file":"Session.d.ts","sourceRoot":"","sources":["../../../../src/model/Session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,KAAK,EAAkB,MAAM,WAAW,CAAC;AAEzD,OAAO,EAAE,KAAK,MAAM,EAAe,MAAM,UAAU,CAAC;AAEpD;;;;GAIG;AACH,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;EAKvB,CAAC"}
@@ -20,6 +20,7 @@ export declare const sessionExportCodec: Codec<{
20
20
  apps: {
21
21
  name: string;
22
22
  version: string;
23
+ hash: string | undefined;
23
24
  }[] | undefined;
24
25
  masks: number[] | undefined;
25
26
  mocks: {
@@ -27,6 +28,11 @@ export declare const sessionExportCodec: Codec<{
27
28
  response: string | undefined;
28
29
  responses: string[] | undefined;
29
30
  }[] | undefined;
31
+ catalog: {
32
+ hash: string;
33
+ name: string;
34
+ version: string;
35
+ }[] | undefined;
30
36
  }[];
31
37
  }>;
32
38
  //# sourceMappingURL=SessionExport.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SessionExport.d.ts","sourceRoot":"","sources":["../../../../src/model/SessionExport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,KAAK,EAAE,MAAM,WAAW,CAAC;AAEzC,OAAO,EAAE,KAAK,YAAY,EAAqB,MAAM,UAAU,CAAC;AAEhE;;;;;;;GAOG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,OAAO,EAAE,YAAY,EAAE,CAAC;CAClC;AAED,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;EAE7B,CAAC"}
1
+ {"version":3,"file":"SessionExport.d.ts","sourceRoot":"","sources":["../../../../src/model/SessionExport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,KAAK,EAAE,MAAM,WAAW,CAAC;AAEzC,OAAO,EAAE,KAAK,YAAY,EAAqB,MAAM,UAAU,CAAC;AAEhE;;;;;;;GAOG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,OAAO,EAAE,YAAY,EAAE,CAAC;CAClC;AAED,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;EAE7B,CAAC"}