@ledgerhq/device-management-kit 1.3.0 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (95) hide show
  1. package/lib/cjs/package.json +1 -1
  2. package/lib/cjs/src/api/Error.js +1 -1
  3. package/lib/cjs/src/api/Error.js.map +3 -3
  4. package/lib/cjs/src/api/command/model/CommandResult.js +1 -1
  5. package/lib/cjs/src/api/command/model/CommandResult.js.map +2 -2
  6. package/lib/cjs/src/api/command/os/DeleteLanguagePackCommand.js +2 -0
  7. package/lib/cjs/src/api/command/os/DeleteLanguagePackCommand.js.map +7 -0
  8. package/lib/cjs/src/api/command/os/DeleteLanguagePackCommand.test.js +2 -0
  9. package/lib/cjs/src/api/command/os/DeleteLanguagePackCommand.test.js.map +7 -0
  10. package/lib/cjs/src/api/command/os/ListLanguagePackCommand.js.map +2 -2
  11. package/lib/cjs/src/api/device-action/os/Errors.js +1 -1
  12. package/lib/cjs/src/api/device-action/os/Errors.js.map +3 -3
  13. package/lib/cjs/src/api/device-action/os/InstallLanguagePackage/InstallLanguagePackageDeviceAction.js +2 -0
  14. package/lib/cjs/src/api/device-action/os/InstallLanguagePackage/InstallLanguagePackageDeviceAction.js.map +7 -0
  15. package/lib/cjs/src/api/device-action/os/InstallLanguagePackage/InstallLanguagePackageDeviceAction.test.js +2 -0
  16. package/lib/cjs/src/api/device-action/os/InstallLanguagePackage/InstallLanguagePackageDeviceAction.test.js.map +7 -0
  17. package/lib/cjs/src/api/device-action/os/InstallLanguagePackage/types.js +2 -0
  18. package/lib/cjs/src/api/device-action/os/InstallLanguagePackage/types.js.map +7 -0
  19. package/lib/cjs/src/api/device-action/task/InstallLanguagePackageTask.js +2 -0
  20. package/lib/cjs/src/api/device-action/task/InstallLanguagePackageTask.js.map +7 -0
  21. package/lib/cjs/src/api/device-action/task/InstallLanguagePackageTask.test.js +9 -0
  22. package/lib/cjs/src/api/device-action/task/InstallLanguagePackageTask.test.js.map +7 -0
  23. package/lib/cjs/src/api/index.js +1 -1
  24. package/lib/cjs/src/api/index.js.map +3 -3
  25. package/lib/cjs/src/api/network/DmkNetworkClient.js +1 -1
  26. package/lib/cjs/src/api/network/DmkNetworkClient.js.map +2 -2
  27. package/lib/cjs/src/api/network/DmkNetworkClient.test.js +1 -1
  28. package/lib/cjs/src/api/network/DmkNetworkClient.test.js.map +2 -2
  29. package/lib/cjs/src/api/network/DmkNetworkClientHelpers.js +1 -1
  30. package/lib/cjs/src/api/network/DmkNetworkClientHelpers.js.map +3 -3
  31. package/lib/cjs/src/api/network/DmkNetworkClientHelpers.test.js +1 -1
  32. package/lib/cjs/src/api/network/DmkNetworkClientHelpers.test.js.map +3 -3
  33. package/lib/cjs/src/api/types.js +1 -1
  34. package/lib/cjs/src/api/types.js.map +1 -1
  35. package/lib/esm/package.json +1 -1
  36. package/lib/esm/src/api/Error.js +1 -1
  37. package/lib/esm/src/api/Error.js.map +3 -3
  38. package/lib/esm/src/api/command/model/CommandResult.js.map +2 -2
  39. package/lib/esm/src/api/command/os/DeleteLanguagePackCommand.js +2 -0
  40. package/lib/esm/src/api/command/os/DeleteLanguagePackCommand.js.map +7 -0
  41. package/lib/esm/src/api/command/os/DeleteLanguagePackCommand.test.js +2 -0
  42. package/lib/esm/src/api/command/os/DeleteLanguagePackCommand.test.js.map +7 -0
  43. package/lib/esm/src/api/command/os/ListLanguagePackCommand.js.map +2 -2
  44. package/lib/esm/src/api/device-action/os/Errors.js +1 -1
  45. package/lib/esm/src/api/device-action/os/Errors.js.map +3 -3
  46. package/lib/esm/src/api/device-action/os/InstallLanguagePackage/InstallLanguagePackageDeviceAction.js +2 -0
  47. package/lib/esm/src/api/device-action/os/InstallLanguagePackage/InstallLanguagePackageDeviceAction.js.map +7 -0
  48. package/lib/esm/src/api/device-action/os/InstallLanguagePackage/InstallLanguagePackageDeviceAction.test.js +2 -0
  49. package/lib/esm/src/api/device-action/os/InstallLanguagePackage/InstallLanguagePackageDeviceAction.test.js.map +7 -0
  50. package/lib/esm/src/api/device-action/os/InstallLanguagePackage/types.js +2 -0
  51. package/lib/esm/src/api/device-action/os/InstallLanguagePackage/types.js.map +7 -0
  52. package/lib/esm/src/api/device-action/task/InstallLanguagePackageTask.js +2 -0
  53. package/lib/esm/src/api/device-action/task/InstallLanguagePackageTask.js.map +7 -0
  54. package/lib/esm/src/api/device-action/task/InstallLanguagePackageTask.test.js +9 -0
  55. package/lib/esm/src/api/device-action/task/InstallLanguagePackageTask.test.js.map +7 -0
  56. package/lib/esm/src/api/index.js +1 -1
  57. package/lib/esm/src/api/index.js.map +3 -3
  58. package/lib/esm/src/api/network/DmkNetworkClient.js +1 -1
  59. package/lib/esm/src/api/network/DmkNetworkClient.js.map +2 -2
  60. package/lib/esm/src/api/network/DmkNetworkClient.test.js +1 -1
  61. package/lib/esm/src/api/network/DmkNetworkClient.test.js.map +2 -2
  62. package/lib/esm/src/api/network/DmkNetworkClientHelpers.js +1 -1
  63. package/lib/esm/src/api/network/DmkNetworkClientHelpers.js.map +3 -3
  64. package/lib/esm/src/api/network/DmkNetworkClientHelpers.test.js +1 -1
  65. package/lib/esm/src/api/network/DmkNetworkClientHelpers.test.js.map +3 -3
  66. package/lib/types/src/api/Error.d.ts +5 -0
  67. package/lib/types/src/api/Error.d.ts.map +1 -1
  68. package/lib/types/src/api/command/model/CommandResult.d.ts +2 -2
  69. package/lib/types/src/api/command/model/CommandResult.d.ts.map +1 -1
  70. package/lib/types/src/api/command/os/DeleteLanguagePackCommand.d.ts +24 -0
  71. package/lib/types/src/api/command/os/DeleteLanguagePackCommand.d.ts.map +1 -0
  72. package/lib/types/src/api/command/os/DeleteLanguagePackCommand.test.d.ts +2 -0
  73. package/lib/types/src/api/command/os/DeleteLanguagePackCommand.test.d.ts.map +1 -0
  74. package/lib/types/src/api/command/os/ListLanguagePackCommand.d.ts +1 -1
  75. package/lib/types/src/api/command/os/ListLanguagePackCommand.d.ts.map +1 -1
  76. package/lib/types/src/api/device-action/os/Errors.d.ts +20 -0
  77. package/lib/types/src/api/device-action/os/Errors.d.ts.map +1 -1
  78. package/lib/types/src/api/device-action/os/InstallLanguagePackage/InstallLanguagePackageDeviceAction.d.ts +23 -0
  79. package/lib/types/src/api/device-action/os/InstallLanguagePackage/InstallLanguagePackageDeviceAction.d.ts.map +1 -0
  80. package/lib/types/src/api/device-action/os/InstallLanguagePackage/InstallLanguagePackageDeviceAction.test.d.ts +2 -0
  81. package/lib/types/src/api/device-action/os/InstallLanguagePackage/InstallLanguagePackageDeviceAction.test.d.ts.map +1 -0
  82. package/lib/types/src/api/device-action/os/InstallLanguagePackage/types.d.ts +27 -0
  83. package/lib/types/src/api/device-action/os/InstallLanguagePackage/types.d.ts.map +1 -0
  84. package/lib/types/src/api/device-action/task/InstallLanguagePackageTask.d.ts +19 -0
  85. package/lib/types/src/api/device-action/task/InstallLanguagePackageTask.d.ts.map +1 -0
  86. package/lib/types/src/api/device-action/task/InstallLanguagePackageTask.test.d.ts +2 -0
  87. package/lib/types/src/api/device-action/task/InstallLanguagePackageTask.test.d.ts.map +1 -0
  88. package/lib/types/src/api/index.d.ts +4 -1
  89. package/lib/types/src/api/index.d.ts.map +1 -1
  90. package/lib/types/src/api/network/DmkNetworkClientHelpers.d.ts +21 -0
  91. package/lib/types/src/api/network/DmkNetworkClientHelpers.d.ts.map +1 -1
  92. package/lib/types/src/api/types.d.ts +1 -0
  93. package/lib/types/src/api/types.d.ts.map +1 -1
  94. package/lib/types/tsconfig.prod.tsbuildinfo +1 -1
  95. package/package.json +4 -4
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../../src/api/device-action/os/InstallLanguagePackage/types.ts"],
4
+ "sourcesContent": ["import { type DeviceActionState } from \"@api/device-action/model/DeviceActionState\";\nimport { type UserInteractionRequired } from \"@api/device-action/model/UserInteractionRequired\";\nimport {\n type DeleteLanguagePackDAError,\n type MissingLanguagePackageDAError,\n type MissingLanguagePackagesForOSDAError,\n type OutOfMemoryDAError,\n type RefusedByUserDAError,\n type UnknownDAError,\n} from \"@api/device-action/os/Errors\";\nimport {\n type GetDeviceMetadataDAError,\n type GetDeviceMetadataDAIntermediateValue,\n} from \"@api/device-action/os/GetDeviceMetadata/types\";\nimport { type GoToDashboardDAInput } from \"@api/device-action/os/GoToDashboard/types\";\n\nexport type Language =\n | \"french\"\n | \"english\"\n | \"spanish\"\n | \"brazilian\"\n | \"german\"\n | \"russian\"\n | \"turkish\"\n | \"thai\";\n\nexport const installLanguagePackageDAStateStep = Object.freeze({\n DEVICE_READY: \"os.installLanguagePackage.steps.deviceReady\",\n GET_DEVICE_METADATA: \"os.installLanguagePackage.steps.getDeviceMetadata\",\n DELETE_CURRENT_LANGUAGE_PACK:\n \"os.installLanguagePackage.steps.deleteCurrentLanguagePack\",\n INSTALL_LANGUAGE_PACK: \"os.installLanguagePackage.steps.installLanguagePack\",\n} as const);\n\nexport type InstallLanguagePackageDAInput = GoToDashboardDAInput & {\n readonly language: Language;\n};\n\nexport type InstallLanguagePackageDAOutput = undefined;\n\nexport type InstallLanguagePackageDAGetDeviceMetadataIntermediateValue = Omit<\n GetDeviceMetadataDAIntermediateValue,\n \"step\"\n> & {\n readonly step: typeof installLanguagePackageDAStateStep.GET_DEVICE_METADATA;\n};\n\nexport type InstallLanguagePackageDAIntermediateValue =\n | GetDeviceMetadataDAIntermediateValue\n | InstallLanguagePackageDAGetDeviceMetadataIntermediateValue\n | {\n readonly requiredUserInteraction: UserInteractionRequired.None;\n readonly step: Exclude<\n (typeof installLanguagePackageDAStateStep)[keyof typeof installLanguagePackageDAStateStep],\n typeof installLanguagePackageDAStateStep.GET_DEVICE_METADATA\n >;\n readonly progress?: number;\n };\n\nexport type InstallLanguagePackageDAError =\n | GetDeviceMetadataDAError\n | MissingLanguagePackagesForOSDAError\n | MissingLanguagePackageDAError\n | DeleteLanguagePackDAError\n | RefusedByUserDAError // from InstallLanguagePackageTask\n | OutOfMemoryDAError // from InstallLanguagePackageTask\n | UnknownDAError; // from InstallLanguagePackageTask (network error, invalid APDU, etc.)\n\nexport type InstallLanguagePackageDAState = DeviceActionState<\n InstallLanguagePackageDAOutput,\n InstallLanguagePackageDAError,\n InstallLanguagePackageDAIntermediateValue\n>;\n"],
5
+ "mappings": "AA0BO,MAAMA,EAAoC,OAAO,OAAO,CAC7D,aAAc,8CACd,oBAAqB,oDACrB,6BACE,4DACF,sBAAuB,qDACzB,CAAU",
6
+ "names": ["installLanguagePackageDAStateStep"]
7
+ }
@@ -0,0 +1,2 @@
1
+ import{Observable as p}from"rxjs";import{CommandUtils as i}from"../../command/utils/CommandUtils";import{NetworkDAError as u,OutOfMemoryDAError as f,RefusedByUserDAError as d,UnknownDAError as o}from"../../device-action/os/Errors";import{bufferToHexaString as m,hexaStringToBuffer as w}from"../../utils/HexaString";class x{constructor(a,c){this.api=a;this.args=c}run(){return new p(a=>{(async()=>{let t;try{const e=await fetch(this.args.apduInstallUrl);if(!e.ok)throw new Error(`HTTP ${e.status} ${e.statusText}`);t=await e.text()}catch(e){throw new u(`Failed to fetch APDUs: ${e instanceof Error?e.message:String(e)}`)}const n=t.split(/\r?\n/).filter(Boolean);if(typeof t!="string"||n.length===0)throw new o(`Language pack install script contains no APDUs: ${this.args.apduInstallUrl}`);for(let e=0;e<n.length;e++){const g=n[e],s=w(g);if(s===null||s.length<5)throw new o(`Invalid APDU data: ${g}`);const l=(await this.api.sendApdu(s)).caseOf({Left:r=>new o(`Device communication error: ${String(r)}`),Right:r=>i.isRefusedByUser(r)?new d("Language install refused on device."):i.isOutOfMemory(r)?new f("Not enough space for language pack."):i.isSuccessResponse(r)?null:new o(`Unexpected device response: ${m(r.statusCode)}`)});if(l)throw l;a.next({type:"progress",progress:(e+1)/n.length})}})().then(()=>a.complete(),t=>a.error(t))})}}export{x as InstallLanguagePackageTask};
2
+ //# sourceMappingURL=InstallLanguagePackageTask.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../src/api/device-action/task/InstallLanguagePackageTask.ts"],
4
+ "sourcesContent": ["import { Observable } from \"rxjs\";\n\nimport { CommandUtils } from \"@api/command/utils/CommandUtils\";\nimport type { InternalApi } from \"@api/device-action/DeviceAction\";\nimport {\n NetworkDAError,\n OutOfMemoryDAError,\n RefusedByUserDAError,\n UnknownDAError,\n} from \"@api/device-action/os/Errors\";\nimport type { InstallLanguagePackageDAError } from \"@api/device-action/os/InstallLanguagePackage/types\";\nimport { bufferToHexaString, hexaStringToBuffer } from \"@api/utils/HexaString\";\n\nexport type InstallLanguagePackageTaskArgs = {\n apduInstallUrl: string;\n};\n\nexport type InstallLanguagePackageTaskError = Extract<\n InstallLanguagePackageDAError,\n RefusedByUserDAError | OutOfMemoryDAError | UnknownDAError\n>;\n\nexport type InstallLanguagePackageEvent = {\n type: \"progress\";\n progress: number;\n};\n\nexport class InstallLanguagePackageTask {\n constructor(\n private readonly api: InternalApi,\n private readonly args: InstallLanguagePackageTaskArgs,\n ) {}\n\n run(): Observable<InstallLanguagePackageEvent> {\n return new Observable((subscriber) => {\n const execute = async () => {\n let rawApdus: string;\n try {\n const response = await fetch(this.args.apduInstallUrl);\n if (!response.ok) {\n throw new Error(`HTTP ${response.status} ${response.statusText}`);\n }\n rawApdus = await response.text();\n } catch (error) {\n throw new NetworkDAError(\n `Failed to fetch APDUs: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n\n const apdus = rawApdus.split(/\\r?\\n/).filter(Boolean);\n if (typeof rawApdus !== \"string\" || apdus.length === 0) {\n throw new UnknownDAError(\n `Language pack install script contains no APDUs: ${this.args.apduInstallUrl}`,\n );\n }\n\n for (let i = 0; i < apdus.length; i++) {\n const apduHex = apdus[i]!;\n const apdu = hexaStringToBuffer(apduHex);\n if (apdu === null || apdu.length < 5) {\n throw new UnknownDAError(`Invalid APDU data: ${apduHex}`);\n }\n\n const response = await this.api.sendApdu(apdu);\n\n const error = response.caseOf({\n Left: (err) =>\n new UnknownDAError(`Device communication error: ${String(err)}`),\n Right: (apduResponse) => {\n if (CommandUtils.isRefusedByUser(apduResponse)) {\n return new RefusedByUserDAError(\n \"Language install refused on device.\",\n );\n }\n if (CommandUtils.isOutOfMemory(apduResponse)) {\n return new OutOfMemoryDAError(\n \"Not enough space for language pack.\",\n );\n }\n if (!CommandUtils.isSuccessResponse(apduResponse)) {\n return new UnknownDAError(\n `Unexpected device response: ${bufferToHexaString(\n apduResponse.statusCode,\n )}`,\n );\n }\n return null;\n },\n });\n\n if (error) {\n throw error;\n }\n\n subscriber.next({\n type: \"progress\",\n progress: (i + 1) / apdus.length,\n });\n }\n };\n\n execute().then(\n () => subscriber.complete(),\n (err) => subscriber.error(err),\n );\n });\n }\n}\n"],
5
+ "mappings": "AAAA,OAAS,cAAAA,MAAkB,OAE3B,OAAS,gBAAAC,MAAoB,kCAE7B,OACE,kBAAAC,EACA,sBAAAC,EACA,wBAAAC,EACA,kBAAAC,MACK,+BAEP,OAAS,sBAAAC,EAAoB,sBAAAC,MAA0B,wBAgBhD,MAAMC,CAA2B,CACtC,YACmBC,EACAC,EACjB,CAFiB,SAAAD,EACA,UAAAC,CAChB,CAEH,KAA+C,CAC7C,OAAO,IAAIV,EAAYW,GAAe,EACpB,SAAY,CAC1B,IAAIC,EACJ,GAAI,CACF,MAAMC,EAAW,MAAM,MAAM,KAAK,KAAK,cAAc,EACrD,GAAI,CAACA,EAAS,GACZ,MAAM,IAAI,MAAM,QAAQA,EAAS,MAAM,IAAIA,EAAS,UAAU,EAAE,EAElED,EAAW,MAAMC,EAAS,KAAK,CACjC,OAASC,EAAO,CACd,MAAM,IAAIZ,EACR,0BAA0BY,aAAiB,MAAQA,EAAM,QAAU,OAAOA,CAAK,CAAC,EAClF,CACF,CAEA,MAAMC,EAAQH,EAAS,MAAM,OAAO,EAAE,OAAO,OAAO,EACpD,GAAI,OAAOA,GAAa,UAAYG,EAAM,SAAW,EACnD,MAAM,IAAIV,EACR,mDAAmD,KAAK,KAAK,cAAc,EAC7E,EAGF,QAASW,EAAI,EAAGA,EAAID,EAAM,OAAQC,IAAK,CACrC,MAAMC,EAAUF,EAAMC,CAAC,EACjBE,EAAOX,EAAmBU,CAAO,EACvC,GAAIC,IAAS,MAAQA,EAAK,OAAS,EACjC,MAAM,IAAIb,EAAe,sBAAsBY,CAAO,EAAE,EAK1D,MAAMH,GAFW,MAAM,KAAK,IAAI,SAASI,CAAI,GAEtB,OAAO,CAC5B,KAAOC,GACL,IAAId,EAAe,+BAA+B,OAAOc,CAAG,CAAC,EAAE,EACjE,MAAQC,GACFnB,EAAa,gBAAgBmB,CAAY,EACpC,IAAIhB,EACT,qCACF,EAEEH,EAAa,cAAcmB,CAAY,EAClC,IAAIjB,EACT,qCACF,EAEGF,EAAa,kBAAkBmB,CAAY,EAOzC,KANE,IAAIf,EACT,+BAA+BC,EAC7Bc,EAAa,UACf,CAAC,EACH,CAIN,CAAC,EAED,GAAIN,EACF,MAAMA,EAGRH,EAAW,KAAK,CACd,KAAM,WACN,UAAWK,EAAI,GAAKD,EAAM,MAC5B,CAAC,CACH,CACF,GAEQ,EAAE,KACR,IAAMJ,EAAW,SAAS,EACzBQ,GAAQR,EAAW,MAAMQ,CAAG,CAC/B,CACF,CAAC,CACH,CACF",
6
+ "names": ["Observable", "CommandUtils", "NetworkDAError", "OutOfMemoryDAError", "RefusedByUserDAError", "UnknownDAError", "bufferToHexaString", "hexaStringToBuffer", "InstallLanguagePackageTask", "api", "args", "subscriber", "rawApdus", "response", "error", "apdus", "i", "apduHex", "apdu", "err", "apduResponse"]
7
+ }
@@ -0,0 +1,9 @@
1
+ import{Left as g,Right as o}from"purify-ts";import{lastValueFrom as l,toArray as p}from"rxjs";import{NetworkDAError as y,OutOfMemoryDAError as x,RefusedByUserDAError as d,UnknownDAError as i}from"../../device-action/os/Errors";import{ApduResponse as O}from"../../device-session/ApduResponse";import{InstallLanguagePackageTask as a}from"./InstallLanguagePackageTask";describe("InstallLanguagePackageTask",()=>{let t;const s=vi.fn(),c=new Uint8Array([144,0]),u=new Uint8Array([85,1]),m=new Uint8Array([106,132]),h=new Uint8Array([103,0]);function n(e){return new O({statusCode:e,data:new Uint8Array})}beforeEach(()=>{vi.clearAllMocks(),t={sendApdu:s}}),afterEach(()=>{vi.restoreAllMocks()}),describe("success",()=>{it("should send all APDUs and emit progress events",async()=>{vi.spyOn(globalThis,"fetch").mockResolvedValueOnce(new Response(`e0c4000000
2
+ e0c4010000
3
+ e0c4020000`)),s.mockResolvedValueOnce(o(n(c))).mockResolvedValueOnce(o(n(c))).mockResolvedValueOnce(o(n(c)));const e=new a(t,{apduInstallUrl:"https://example.com/install"}),r=await l(e.run().pipe(p()));expect(globalThis.fetch).toHaveBeenCalledWith("https://example.com/install"),expect(s).toHaveBeenCalledTimes(3),expect(r).toEqual([{type:"progress",progress:1/3},{type:"progress",progress:2/3},{type:"progress",progress:1}])}),it("should handle a single APDU",async()=>{vi.spyOn(globalThis,"fetch").mockResolvedValueOnce(new Response("e0c4000000")),s.mockResolvedValueOnce(o(n(c)));const e=new a(t,{apduInstallUrl:"https://example.com/install"}),r=await l(e.run().pipe(p()));expect(s).toHaveBeenCalledTimes(1),expect(r).toEqual([{type:"progress",progress:1}])}),it("should skip empty lines in APDU data",async()=>{vi.spyOn(globalThis,"fetch").mockResolvedValueOnce(new Response(`e0c4000000
4
+
5
+ e0c4010000
6
+ `)),s.mockResolvedValueOnce(o(n(c))).mockResolvedValueOnce(o(n(c)));const e=new a(t,{apduInstallUrl:"https://example.com/install"}),r=await l(e.run().pipe(p()));expect(s).toHaveBeenCalledTimes(2),expect(r).toEqual([{type:"progress",progress:.5},{type:"progress",progress:1}])}),it("should handle Windows-style line endings",async()=>{vi.spyOn(globalThis,"fetch").mockResolvedValueOnce(new Response(`e0c4000000\r
7
+ e0c4010000`)),s.mockResolvedValueOnce(o(n(c))).mockResolvedValueOnce(o(n(c)));const e=new a(t,{apduInstallUrl:"https://example.com/install"}),r=await l(e.run().pipe(p()));expect(s).toHaveBeenCalledTimes(2),expect(r).toEqual([{type:"progress",progress:.5},{type:"progress",progress:1}])})}),describe("error",()=>{it("should throw NetworkDAError when fetching APDUs fails",async()=>{vi.spyOn(globalThis,"fetch").mockRejectedValueOnce(new Error("Network timeout"));const e=new a(t,{apduInstallUrl:"https://example.com/install"});await expect(l(e.run())).rejects.toEqual(new y("Failed to fetch APDUs: Network timeout")),expect(s).not.toHaveBeenCalled()}),it("should throw UnknownDAError for invalid APDU hex data",async()=>{vi.spyOn(globalThis,"fetch").mockResolvedValueOnce(new Response("ZZZZ"));const e=new a(t,{apduInstallUrl:"https://example.com/install"});await expect(l(e.run())).rejects.toEqual(new i("Invalid APDU data: ZZZZ")),expect(s).not.toHaveBeenCalled()}),it("should throw UnknownDAError for too-short APDU data",async()=>{vi.spyOn(globalThis,"fetch").mockResolvedValueOnce(new Response("e0c4"));const e=new a(t,{apduInstallUrl:"https://example.com/install"});await expect(l(e.run())).rejects.toEqual(new i("Invalid APDU data: e0c4")),expect(s).not.toHaveBeenCalled()}),it("should throw UnknownDAError on device communication error (Left)",async()=>{vi.spyOn(globalThis,"fetch").mockResolvedValueOnce(new Response("e0c4000000")),s.mockResolvedValueOnce(g(new Error("Transport error")));const e=new a(t,{apduInstallUrl:"https://example.com/install"});await expect(l(e.run())).rejects.toEqual(new i("Device communication error: Error: Transport error"))}),it("should throw RefusedByUserDAError when device refuses",async()=>{vi.spyOn(globalThis,"fetch").mockResolvedValueOnce(new Response("e0c4000000")),s.mockResolvedValueOnce(o(n(u)));const e=new a(t,{apduInstallUrl:"https://example.com/install"});await expect(l(e.run())).rejects.toEqual(new d("Language install refused on device."))}),it("should throw OutOfMemoryDAError when device is out of memory",async()=>{vi.spyOn(globalThis,"fetch").mockResolvedValueOnce(new Response("e0c4000000")),s.mockResolvedValueOnce(o(n(m)));const e=new a(t,{apduInstallUrl:"https://example.com/install"});await expect(l(e.run())).rejects.toEqual(new x("Not enough space for language pack."))}),it("should throw UnknownDAError for unexpected device response status",async()=>{vi.spyOn(globalThis,"fetch").mockResolvedValueOnce(new Response("e0c4000000")),s.mockResolvedValueOnce(o(n(h)));const e=new a(t,{apduInstallUrl:"https://example.com/install"});await expect(l(e.run())).rejects.toEqual(new i("Unexpected device response: 0x6700"))}),it("should error on second APDU after first succeeds",async()=>{vi.spyOn(globalThis,"fetch").mockResolvedValueOnce(new Response(`e0c4000000
8
+ e0c4010000`)),s.mockResolvedValueOnce(o(n(c))).mockResolvedValueOnce(o(n(u)));const e=new a(t,{apduInstallUrl:"https://example.com/install"}),r=[];await expect(new Promise((w,v)=>{e.run().subscribe({next:k=>r.push(k),error:v,complete:w})})).rejects.toEqual(new d("Language install refused on device.")),expect(r).toEqual([{type:"progress",progress:.5}])})})});
9
+ //# sourceMappingURL=InstallLanguagePackageTask.test.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../src/api/device-action/task/InstallLanguagePackageTask.test.ts"],
4
+ "sourcesContent": ["import { Left, Right } from \"purify-ts\";\nimport { lastValueFrom, toArray } from \"rxjs\";\n\nimport type { InternalApi } from \"@api/device-action/DeviceAction\";\nimport {\n NetworkDAError,\n OutOfMemoryDAError,\n RefusedByUserDAError,\n UnknownDAError,\n} from \"@api/device-action/os/Errors\";\nimport { ApduResponse } from \"@api/device-session/ApduResponse\";\n\nimport { InstallLanguagePackageTask } from \"./InstallLanguagePackageTask\";\n\ndescribe(\"InstallLanguagePackageTask\", () => {\n let api: InternalApi;\n const sendApdu = vi.fn();\n\n const SUCCESS_STATUS = new Uint8Array([0x90, 0x00]);\n const REFUSED_STATUS = new Uint8Array([0x55, 0x01]);\n const OUT_OF_MEMORY_STATUS = new Uint8Array([0x6a, 0x84]);\n const UNKNOWN_ERROR_STATUS = new Uint8Array([0x67, 0x00]);\n\n function makeApduResponse(statusCode: Uint8Array) {\n return new ApduResponse({ statusCode, data: new Uint8Array() });\n }\n\n beforeEach(() => {\n vi.clearAllMocks();\n api = { sendApdu } as unknown as InternalApi;\n });\n\n afterEach(() => {\n vi.restoreAllMocks();\n });\n\n describe(\"success\", () => {\n it(\"should send all APDUs and emit progress events\", async () => {\n vi.spyOn(globalThis, \"fetch\").mockResolvedValueOnce(\n new Response(\"e0c4000000\\ne0c4010000\\ne0c4020000\"),\n );\n sendApdu\n .mockResolvedValueOnce(Right(makeApduResponse(SUCCESS_STATUS)))\n .mockResolvedValueOnce(Right(makeApduResponse(SUCCESS_STATUS)))\n .mockResolvedValueOnce(Right(makeApduResponse(SUCCESS_STATUS)));\n\n const task = new InstallLanguagePackageTask(api, {\n apduInstallUrl: \"https://example.com/install\",\n });\n\n const events = await lastValueFrom(task.run().pipe(toArray()));\n\n expect(globalThis.fetch).toHaveBeenCalledWith(\n \"https://example.com/install\",\n );\n expect(sendApdu).toHaveBeenCalledTimes(3);\n expect(events).toEqual([\n { type: \"progress\", progress: 1 / 3 },\n { type: \"progress\", progress: 2 / 3 },\n { type: \"progress\", progress: 1 },\n ]);\n });\n\n it(\"should handle a single APDU\", async () => {\n vi.spyOn(globalThis, \"fetch\").mockResolvedValueOnce(\n new Response(\"e0c4000000\"),\n );\n sendApdu.mockResolvedValueOnce(Right(makeApduResponse(SUCCESS_STATUS)));\n\n const task = new InstallLanguagePackageTask(api, {\n apduInstallUrl: \"https://example.com/install\",\n });\n\n const events = await lastValueFrom(task.run().pipe(toArray()));\n\n expect(sendApdu).toHaveBeenCalledTimes(1);\n expect(events).toEqual([{ type: \"progress\", progress: 1 }]);\n });\n\n it(\"should skip empty lines in APDU data\", async () => {\n vi.spyOn(globalThis, \"fetch\").mockResolvedValueOnce(\n new Response(\"e0c4000000\\n\\ne0c4010000\\n\"),\n );\n sendApdu\n .mockResolvedValueOnce(Right(makeApduResponse(SUCCESS_STATUS)))\n .mockResolvedValueOnce(Right(makeApduResponse(SUCCESS_STATUS)));\n\n const task = new InstallLanguagePackageTask(api, {\n apduInstallUrl: \"https://example.com/install\",\n });\n\n const events = await lastValueFrom(task.run().pipe(toArray()));\n\n expect(sendApdu).toHaveBeenCalledTimes(2);\n expect(events).toEqual([\n { type: \"progress\", progress: 0.5 },\n { type: \"progress\", progress: 1 },\n ]);\n });\n\n it(\"should handle Windows-style line endings\", async () => {\n vi.spyOn(globalThis, \"fetch\").mockResolvedValueOnce(\n new Response(\"e0c4000000\\r\\ne0c4010000\"),\n );\n sendApdu\n .mockResolvedValueOnce(Right(makeApduResponse(SUCCESS_STATUS)))\n .mockResolvedValueOnce(Right(makeApduResponse(SUCCESS_STATUS)));\n\n const task = new InstallLanguagePackageTask(api, {\n apduInstallUrl: \"https://example.com/install\",\n });\n\n const events = await lastValueFrom(task.run().pipe(toArray()));\n\n expect(sendApdu).toHaveBeenCalledTimes(2);\n expect(events).toEqual([\n { type: \"progress\", progress: 0.5 },\n { type: \"progress\", progress: 1 },\n ]);\n });\n });\n\n describe(\"error\", () => {\n it(\"should throw NetworkDAError when fetching APDUs fails\", async () => {\n vi.spyOn(globalThis, \"fetch\").mockRejectedValueOnce(\n new Error(\"Network timeout\"),\n );\n\n const task = new InstallLanguagePackageTask(api, {\n apduInstallUrl: \"https://example.com/install\",\n });\n\n await expect(lastValueFrom(task.run())).rejects.toEqual(\n new NetworkDAError(\"Failed to fetch APDUs: Network timeout\"),\n );\n expect(sendApdu).not.toHaveBeenCalled();\n });\n\n it(\"should throw UnknownDAError for invalid APDU hex data\", async () => {\n vi.spyOn(globalThis, \"fetch\").mockResolvedValueOnce(new Response(\"ZZZZ\"));\n\n const task = new InstallLanguagePackageTask(api, {\n apduInstallUrl: \"https://example.com/install\",\n });\n\n await expect(lastValueFrom(task.run())).rejects.toEqual(\n new UnknownDAError(\"Invalid APDU data: ZZZZ\"),\n );\n expect(sendApdu).not.toHaveBeenCalled();\n });\n\n it(\"should throw UnknownDAError for too-short APDU data\", async () => {\n vi.spyOn(globalThis, \"fetch\").mockResolvedValueOnce(new Response(\"e0c4\"));\n\n const task = new InstallLanguagePackageTask(api, {\n apduInstallUrl: \"https://example.com/install\",\n });\n\n await expect(lastValueFrom(task.run())).rejects.toEqual(\n new UnknownDAError(\"Invalid APDU data: e0c4\"),\n );\n expect(sendApdu).not.toHaveBeenCalled();\n });\n\n it(\"should throw UnknownDAError on device communication error (Left)\", async () => {\n vi.spyOn(globalThis, \"fetch\").mockResolvedValueOnce(\n new Response(\"e0c4000000\"),\n );\n sendApdu.mockResolvedValueOnce(Left(new Error(\"Transport error\")));\n\n const task = new InstallLanguagePackageTask(api, {\n apduInstallUrl: \"https://example.com/install\",\n });\n\n await expect(lastValueFrom(task.run())).rejects.toEqual(\n new UnknownDAError(\n \"Device communication error: Error: Transport error\",\n ),\n );\n });\n\n it(\"should throw RefusedByUserDAError when device refuses\", async () => {\n vi.spyOn(globalThis, \"fetch\").mockResolvedValueOnce(\n new Response(\"e0c4000000\"),\n );\n sendApdu.mockResolvedValueOnce(Right(makeApduResponse(REFUSED_STATUS)));\n\n const task = new InstallLanguagePackageTask(api, {\n apduInstallUrl: \"https://example.com/install\",\n });\n\n await expect(lastValueFrom(task.run())).rejects.toEqual(\n new RefusedByUserDAError(\"Language install refused on device.\"),\n );\n });\n\n it(\"should throw OutOfMemoryDAError when device is out of memory\", async () => {\n vi.spyOn(globalThis, \"fetch\").mockResolvedValueOnce(\n new Response(\"e0c4000000\"),\n );\n sendApdu.mockResolvedValueOnce(\n Right(makeApduResponse(OUT_OF_MEMORY_STATUS)),\n );\n\n const task = new InstallLanguagePackageTask(api, {\n apduInstallUrl: \"https://example.com/install\",\n });\n\n await expect(lastValueFrom(task.run())).rejects.toEqual(\n new OutOfMemoryDAError(\"Not enough space for language pack.\"),\n );\n });\n\n it(\"should throw UnknownDAError for unexpected device response status\", async () => {\n vi.spyOn(globalThis, \"fetch\").mockResolvedValueOnce(\n new Response(\"e0c4000000\"),\n );\n sendApdu.mockResolvedValueOnce(\n Right(makeApduResponse(UNKNOWN_ERROR_STATUS)),\n );\n\n const task = new InstallLanguagePackageTask(api, {\n apduInstallUrl: \"https://example.com/install\",\n });\n\n await expect(lastValueFrom(task.run())).rejects.toEqual(\n new UnknownDAError(\"Unexpected device response: 0x6700\"),\n );\n });\n\n it(\"should error on second APDU after first succeeds\", async () => {\n vi.spyOn(globalThis, \"fetch\").mockResolvedValueOnce(\n new Response(\"e0c4000000\\ne0c4010000\"),\n );\n sendApdu\n .mockResolvedValueOnce(Right(makeApduResponse(SUCCESS_STATUS)))\n .mockResolvedValueOnce(Right(makeApduResponse(REFUSED_STATUS)));\n\n const task = new InstallLanguagePackageTask(api, {\n apduInstallUrl: \"https://example.com/install\",\n });\n\n const events: Array<{ type: string; progress: number }> = [];\n await expect(\n new Promise<void>((resolve, reject) => {\n task.run().subscribe({\n next: (event) => events.push(event),\n error: reject,\n complete: resolve,\n });\n }),\n ).rejects.toEqual(\n new RefusedByUserDAError(\"Language install refused on device.\"),\n );\n expect(events).toEqual([{ type: \"progress\", progress: 0.5 }]);\n });\n });\n});\n"],
5
+ "mappings": "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",
6
+ "names": ["Left", "Right", "lastValueFrom", "toArray", "NetworkDAError", "OutOfMemoryDAError", "RefusedByUserDAError", "UnknownDAError", "ApduResponse", "InstallLanguagePackageTask", "api", "sendApdu", "SUCCESS_STATUS", "REFUSED_STATUS", "OUT_OF_MEMORY_STATUS", "UNKNOWN_ERROR_STATUS", "makeApduResponse", "statusCode", "task", "events", "resolve", "reject", "event"]
7
+ }
@@ -1,2 +1,2 @@
1
- import{Apdu as r}from"./apdu/model/Apdu";import{APDU_MAX_PAYLOAD as p,ApduBuilder as a}from"./apdu/utils/ApduBuilder";import{ApduParser as n}from"./apdu/utils/ApduParser";export*from"./apdu/utils/AppBuilderError";import{ByteArrayBuilder as f}from"./apdu/utils/ByteArrayBuilder";import{ByteArrayParser as d}from"./apdu/utils/ByteArrayParser";import{InvalidResponseFormatError as x,InvalidStatusWordError as D}from"./command/Errors";import{CommandResultFactory as l,CommandResultStatus as y,isSuccessCommandResult as S}from"./command/model/CommandResult";import{BackupStorageCommand as g}from"./command/os/BackupStorageCommand";import{CloseAppCommand as R}from"./command/os/CloseAppCommand";import{GetAppAndVersionCommand as E}from"./command/os/GetAppAndVersionCommand";import{GetAppStorageInfoCommand as I}from"./command/os/GetAppStorageInfoCommand";import{GetBackgroundImageSizeCommand as L,GetBackgroundImageSizeCommandError as T}from"./command/os/GetBackgroundImageSizeCommand";import{BatteryStatusType as b,GetBatteryStatusCommand as h}from"./command/os/GetBatteryStatusCommand";import{GetOsVersionCommand as U}from"./command/os/GetOsVersionCommand";import{ListAppsCommand as _}from"./command/os/ListAppsCommand";import{LoadCertificateCommand as V}from"./command/os/LoadCertificateCommand";import{OpenAppCommand as N}from"./command/os/OpenAppCommand";import{isCommandErrorCode as z}from"./command/utils/CommandErrors";import{CommandUtils as q}from"./command/utils/CommandUtils";import{GLOBAL_ERRORS as X,GlobalCommandError as Q,GlobalCommandErrorHandler as Y}from"./command/utils/GlobalCommandError";import{DeviceModel as J,DeviceModelId as Z,LEDGER_VENDOR_ID as $}from"./device/DeviceModel";import{DeviceStatus as oe}from"./device/DeviceStatus";import{DeviceActionStatus as te}from"./device-action/model/DeviceActionState";import{UserInteractionRequired as ae}from"./device-action/model/UserInteractionRequired";import{CallTaskInAppDeviceAction as ne}from"./device-action/os/CallTaskInAppDeviceAction/CallTaskInAppDeviceAction";import{DEFAULT_UNLOCK_TIMEOUT_MS as se}from"./device-action/os/Const";import{AppAlreadyInstalledDAError as ce,DeviceLockedError as de,DeviceNotOnboardedError as Ae,OutOfMemoryDAError as xe,RefusedByUserDAError as De,UnknownDAError as ue,UnsupportedFirmwareDAError as le}from"./device-action/os/Errors";import{GetDeviceMetadataDeviceAction as Se}from"./device-action/os/GetDeviceMetadata/GetDeviceMetadataDeviceAction";import{GetDeviceStatusDeviceAction as ge}from"./device-action/os/GetDeviceStatus/GetDeviceStatusDeviceAction";import{GoToDashboardDeviceAction as Re}from"./device-action/os/GoToDashboard/GoToDashboardDeviceAction";import{InstallOrUpdateAppsDeviceAction as Ee}from"./device-action/os/InstallOrUpdateApps/InstallOrUpdateAppsDeviceAction";import{ListAppsDeviceAction as Ie}from"./device-action/os/ListApps/ListAppsDeviceAction";import{ListAppsWithMetadataDeviceAction as Le}from"./device-action/os/ListAppsWithMetadata/ListAppsWithMetadataDeviceAction";import{OpenAppDeviceAction as Oe}from"./device-action/os/OpenAppDeviceAction/OpenAppDeviceAction";import{OpenAppWithDependenciesDeviceAction as he}from"./device-action/os/OpenAppWithDependencies/OpenAppWithDependenciesDeviceAction";import{SendCommandInAppDeviceAction as Ue}from"./device-action/os/SendCommandInAppDeviceAction/SendCommandInAppDeviceAction";import{BackupAppStorageTask as _e}from"./device-action/task/BackupAppStorageTask";import{GetApplicationsMetadataTaskError as Ve,InvalidGetFirmwareMetadataResponseError as we}from"./device-action/task/Errors";import{XStateDeviceAction as Ke}from"./device-action/xstate-utils/XStateDeviceAction";import{StaticDeviceModelDataSource as We}from"./device-model/data/StaticDeviceModelDataSource";import{BleDeviceInfos as He}from"./device-model/model/BleDeviceInfos";import{TransportDeviceModel as Qe}from"./device-model/model/DeviceModel";import{ApduResponse as je}from"./device-session/ApduResponse";export*from"./device-session/data/FramerConst";import{DeviceSessionStateType as $e}from"./device-session/DeviceSessionState";import{DmkResultFactory as oo,DmkResultStatus as ro,isSuccessDmkResult as to}from"./model/DmkResult";import{GenuineCheckDeviceAction as ao}from"./secure-channel/device-action/GenuineCheck/GenuineCheckDeviceAction";import{InstallAppDeviceAction as no}from"./secure-channel/device-action/InstallApp/InstallAppDeviceAction";import{ListInstalledAppsDeviceAction as so}from"./secure-channel/device-action/ListInstalledApps/ListInstalledAppsDeviceAction";import{UninstallAppDeviceAction as co}from"./secure-channel/device-action/UninstallApp/UninstallAppDeviceAction";import{DMK_STORAGE_PREFIX_KEY as xo}from"./storage/KeyValueStorage";import{SecureChannelError as uo}from"../internal/secure-channel/model/Errors";import{defaultApduReceiverServiceStubBuilder as yo}from"./device-session/service/DefaultApduReceiverService.stub";import{defaultApduSenderServiceStubBuilder as Co}from"./device-session/service/DefaultApduSenderService.stub";import{FramerUtils as vo}from"./device-session/utils/FramerUtils";import{DeviceManagementKit as Go}from"./DeviceManagementKit";import{DeviceManagementKitBuilder as ko}from"./DeviceManagementKitBuilder";export*from"./Error";import{noopLogger as Lo,noopLoggerFactory as To}from"./logger-publisher/utils/noopLoggerFactory";import{LogLevel as bo}from"./logger-subscriber/model/LogLevel";import{ConsoleLogger as Mo}from"./logger-subscriber/service/ConsoleLogger";import{DefaultLogTagFormatter as Fo}from"./logger-subscriber/service/DefaultLogTagFormatter";import{WebLogsExporterLogger as Po}from"./logger-subscriber/service/WebLogsExporterLogger";import{DmkNetworkClient as wo}from"./network/DmkNetworkClient";import{DmkNetworkClientError as Ko}from"./network/DmkNetworkClientError";import{ConnectedDevice as Wo}from"./transport/model/ConnectedDevice";import{DeviceConnectionStateMachine as Ho}from"./transport/model/DeviceConnectionStateMachine";export*from"./transport/model/Errors";import{TransportConnectedDevice as Yo}from"./transport/model/TransportConnectedDevice";import{connectedDeviceStubBuilder as Jo}from"./transport/model/TransportConnectedDevice.stub";export*from"./types";import{formatApduReceivedLog as er,formatApduSentLog as or}from"./utils/apduLogs";import{ApplicationChecker as tr}from"./utils/ApplicationChecker";import{base64StringToBuffer as ar,bufferToBase64String as mr,isBase64String as nr}from"./utils/Base64String";import{bufferToHexaString as sr,hexaStringToBuffer as fr,isHexaString as cr}from"./utils/HexaString";export{p as APDU_MAX_PAYLOAD,r as Apdu,a as ApduBuilder,n as ApduParser,je as ApduResponse,ce as AppAlreadyInstalledDAError,tr as ApplicationChecker,_e as BackupAppStorageTask,g as BackupStorageCommand,b as BatteryStatusType,He as BleDeviceInfos,f as ByteArrayBuilder,d as ByteArrayParser,ne as CallTaskInAppDeviceAction,R as CloseAppCommand,l as CommandResultFactory,y as CommandResultStatus,q as CommandUtils,Wo as ConnectedDevice,Mo as ConsoleLogger,se as DEFAULT_UNLOCK_TIMEOUT_MS,xo as DMK_STORAGE_PREFIX_KEY,Fo as DefaultLogTagFormatter,te as DeviceActionStatus,Ho as DeviceConnectionStateMachine,de as DeviceLockedError,Go as DeviceManagementKit,ko as DeviceManagementKitBuilder,J as DeviceModel,Z as DeviceModelId,Ae as DeviceNotOnboardedError,$e as DeviceSessionStateType,oe as DeviceStatus,wo as DmkNetworkClient,Ko as DmkNetworkClientError,oo as DmkResultFactory,ro as DmkResultStatus,vo as FramerUtils,X as GLOBAL_ERRORS,ao as GenuineCheckDeviceAction,E as GetAppAndVersionCommand,I as GetAppStorageInfoCommand,Ve as GetApplicationsMetadataTaskError,L as GetBackgroundImageSizeCommand,T as GetBackgroundImageSizeCommandError,h as GetBatteryStatusCommand,Se as GetDeviceMetadataDeviceAction,ge as GetDeviceStatusDeviceAction,U as GetOsVersionCommand,Q as GlobalCommandError,Y as GlobalCommandErrorHandler,Re as GoToDashboardDeviceAction,no as InstallAppDeviceAction,Ee as InstallOrUpdateAppsDeviceAction,we as InvalidGetFirmwareMetadataResponseError,x as InvalidResponseFormatError,D as InvalidStatusWordError,$ as LEDGER_VENDOR_ID,_ as ListAppsCommand,Ie as ListAppsDeviceAction,Le as ListAppsWithMetadataDeviceAction,so as ListInstalledAppsDeviceAction,V as LoadCertificateCommand,bo as LogLevel,N as OpenAppCommand,Oe as OpenAppDeviceAction,he as OpenAppWithDependenciesDeviceAction,xe as OutOfMemoryDAError,De as RefusedByUserDAError,uo as SecureChannelError,Ue as SendCommandInAppDeviceAction,We as StaticDeviceModelDataSource,Yo as TransportConnectedDevice,Qe as TransportDeviceModel,co as UninstallAppDeviceAction,ue as UnknownDAError,le as UnsupportedFirmwareDAError,ae as UserInteractionRequired,Po as WebLogsExporterLogger,Ke as XStateDeviceAction,ar as base64StringToBuffer,mr as bufferToBase64String,sr as bufferToHexaString,Jo as connectedDeviceStubBuilder,yo as defaultApduReceiverServiceStubBuilder,Co as defaultApduSenderServiceStubBuilder,er as formatApduReceivedLog,or as formatApduSentLog,fr as hexaStringToBuffer,nr as isBase64String,z as isCommandErrorCode,cr as isHexaString,S as isSuccessCommandResult,to as isSuccessDmkResult,Lo as noopLogger,To as noopLoggerFactory};
1
+ import{Apdu as r}from"./apdu/model/Apdu";import{APDU_MAX_PAYLOAD as p,ApduBuilder as a}from"./apdu/utils/ApduBuilder";import{ApduParser as n}from"./apdu/utils/ApduParser";export*from"./apdu/utils/AppBuilderError";import{ByteArrayBuilder as c}from"./apdu/utils/ByteArrayBuilder";import{ByteArrayParser as f}from"./apdu/utils/ByteArrayParser";import{InvalidResponseFormatError as u,InvalidStatusWordError as x}from"./command/Errors";import{CommandResultFactory as g,CommandResultStatus as l,isSuccessCommandResult as y}from"./command/model/CommandResult";import{BackupStorageCommand as S}from"./command/os/BackupStorageCommand";import{CloseAppCommand as L}from"./command/os/CloseAppCommand";import{DeleteLanguagePackCommand as R,DeleteLanguagePackCommandError as E}from"./command/os/DeleteLanguagePackCommand";import{GetAppAndVersionCommand as I}from"./command/os/GetAppAndVersionCommand";import{GetAppStorageInfoCommand as T}from"./command/os/GetAppStorageInfoCommand";import{GetBackgroundImageSizeCommand as O,GetBackgroundImageSizeCommandError as b}from"./command/os/GetBackgroundImageSizeCommand";import{BatteryStatusType as M,GetBatteryStatusCommand as U}from"./command/os/GetBatteryStatusCommand";import{GetOsVersionCommand as _}from"./command/os/GetOsVersionCommand";import{ListAppsCommand as w}from"./command/os/ListAppsCommand";import{ListLanguagePackCommand as K,ListLanguagePackCommandError as z}from"./command/os/ListLanguagePackCommand";import{LoadCertificateCommand as q}from"./command/os/LoadCertificateCommand";import{OpenAppCommand as X}from"./command/os/OpenAppCommand";import{isCommandErrorCode as Y}from"./command/utils/CommandErrors";import{CommandUtils as J}from"./command/utils/CommandUtils";import{GLOBAL_ERRORS as $,GlobalCommandError as ee,GlobalCommandErrorHandler as oe}from"./command/utils/GlobalCommandError";import{DeviceModel as te,DeviceModelId as pe,LEDGER_VENDOR_ID as ae}from"./device/DeviceModel";import{DeviceStatus as ne}from"./device/DeviceStatus";import{DeviceActionStatus as se}from"./device-action/model/DeviceActionState";import{UserInteractionRequired as de}from"./device-action/model/UserInteractionRequired";import{CallTaskInAppDeviceAction as Ae}from"./device-action/os/CallTaskInAppDeviceAction/CallTaskInAppDeviceAction";import{DEFAULT_UNLOCK_TIMEOUT_MS as xe}from"./device-action/os/Const";import{AppAlreadyInstalledDAError as ge,DeleteLanguagePackDAError as le,DeviceLockedError as ye,DeviceNotOnboardedError as Ce,OutOfMemoryDAError as Se,RefusedByUserDAError as ve,UnknownDAError as Le,UnsupportedFirmwareDAError as ke}from"./device-action/os/Errors";import{GetDeviceMetadataDeviceAction as Ee}from"./device-action/os/GetDeviceMetadata/GetDeviceMetadataDeviceAction";import{GetDeviceStatusDeviceAction as Ie}from"./device-action/os/GetDeviceStatus/GetDeviceStatusDeviceAction";import{GoToDashboardDeviceAction as Te}from"./device-action/os/GoToDashboard/GoToDashboardDeviceAction";import{InstallLanguagePackageDeviceAction as Oe}from"./device-action/os/InstallLanguagePackage/InstallLanguagePackageDeviceAction";import{InstallOrUpdateAppsDeviceAction as he}from"./device-action/os/InstallOrUpdateApps/InstallOrUpdateAppsDeviceAction";import{ListAppsDeviceAction as Ue}from"./device-action/os/ListApps/ListAppsDeviceAction";import{ListAppsWithMetadataDeviceAction as _e}from"./device-action/os/ListAppsWithMetadata/ListAppsWithMetadataDeviceAction";import{OpenAppDeviceAction as we}from"./device-action/os/OpenAppDeviceAction/OpenAppDeviceAction";import{OpenAppWithDependenciesDeviceAction as Ke}from"./device-action/os/OpenAppWithDependencies/OpenAppWithDependenciesDeviceAction";import{SendCommandInAppDeviceAction as We}from"./device-action/os/SendCommandInAppDeviceAction/SendCommandInAppDeviceAction";import{BackupAppStorageTask as He}from"./device-action/task/BackupAppStorageTask";import{GetApplicationsMetadataTaskError as Qe,InvalidGetFirmwareMetadataResponseError as Ye}from"./device-action/task/Errors";import{XStateDeviceAction as Je}from"./device-action/xstate-utils/XStateDeviceAction";import{StaticDeviceModelDataSource as $e}from"./device-model/data/StaticDeviceModelDataSource";import{BleDeviceInfos as oo}from"./device-model/model/BleDeviceInfos";import{TransportDeviceModel as to}from"./device-model/model/DeviceModel";import{ApduResponse as ao}from"./device-session/ApduResponse";export*from"./device-session/data/FramerConst";import{DeviceSessionStateType as io}from"./device-session/DeviceSessionState";import{DmkResultFactory as co,DmkResultStatus as fo,isSuccessDmkResult as Ao}from"./model/DmkResult";import{GenuineCheckDeviceAction as xo}from"./secure-channel/device-action/GenuineCheck/GenuineCheckDeviceAction";import{InstallAppDeviceAction as go}from"./secure-channel/device-action/InstallApp/InstallAppDeviceAction";import{ListInstalledAppsDeviceAction as yo}from"./secure-channel/device-action/ListInstalledApps/ListInstalledAppsDeviceAction";import{UninstallAppDeviceAction as So}from"./secure-channel/device-action/UninstallApp/UninstallAppDeviceAction";import{DMK_STORAGE_PREFIX_KEY as Lo}from"./storage/KeyValueStorage";import{SecureChannelError as Ro}from"../internal/secure-channel/model/Errors";import{defaultApduReceiverServiceStubBuilder as Go}from"./device-session/service/DefaultApduReceiverService.stub";import{defaultApduSenderServiceStubBuilder as Bo}from"./device-session/service/DefaultApduSenderService.stub";import{FramerUtils as Po}from"./device-session/utils/FramerUtils";import{DeviceManagementKit as bo}from"./DeviceManagementKit";import{DeviceManagementKitBuilder as Mo}from"./DeviceManagementKitBuilder";export*from"./Error";import{noopLogger as _o,noopLoggerFactory as Vo}from"./logger-publisher/utils/noopLoggerFactory";import{LogLevel as No}from"./logger-subscriber/model/LogLevel";import{ConsoleLogger as zo}from"./logger-subscriber/service/ConsoleLogger";import{DefaultLogTagFormatter as qo}from"./logger-subscriber/service/DefaultLogTagFormatter";import{WebLogsExporterLogger as Xo}from"./logger-subscriber/service/WebLogsExporterLogger";import{DmkNetworkClient as Yo}from"./network/DmkNetworkClient";import{DmkNetworkClientError as Jo}from"./network/DmkNetworkClientError";import{ConnectedDevice as $o}from"./transport/model/ConnectedDevice";import{DeviceConnectionStateMachine as or}from"./transport/model/DeviceConnectionStateMachine";export*from"./transport/model/Errors";import{TransportConnectedDevice as pr}from"./transport/model/TransportConnectedDevice";import{connectedDeviceStubBuilder as mr}from"./transport/model/TransportConnectedDevice.stub";export*from"./types";import{formatApduReceivedLog as sr,formatApduSentLog as cr}from"./utils/apduLogs";import{ApplicationChecker as fr}from"./utils/ApplicationChecker";import{base64StringToBuffer as ur,bufferToBase64String as xr,isBase64String as Dr}from"./utils/Base64String";import{bufferToHexaString as lr,hexaStringToBuffer as yr,isHexaString as Cr}from"./utils/HexaString";export{p as APDU_MAX_PAYLOAD,r as Apdu,a as ApduBuilder,n as ApduParser,ao as ApduResponse,ge as AppAlreadyInstalledDAError,fr as ApplicationChecker,He as BackupAppStorageTask,S as BackupStorageCommand,M as BatteryStatusType,oo as BleDeviceInfos,c as ByteArrayBuilder,f as ByteArrayParser,Ae as CallTaskInAppDeviceAction,L as CloseAppCommand,g as CommandResultFactory,l as CommandResultStatus,J as CommandUtils,$o as ConnectedDevice,zo as ConsoleLogger,xe as DEFAULT_UNLOCK_TIMEOUT_MS,Lo as DMK_STORAGE_PREFIX_KEY,qo as DefaultLogTagFormatter,R as DeleteLanguagePackCommand,E as DeleteLanguagePackCommandError,le as DeleteLanguagePackDAError,se as DeviceActionStatus,or as DeviceConnectionStateMachine,ye as DeviceLockedError,bo as DeviceManagementKit,Mo as DeviceManagementKitBuilder,te as DeviceModel,pe as DeviceModelId,Ce as DeviceNotOnboardedError,io as DeviceSessionStateType,ne as DeviceStatus,Yo as DmkNetworkClient,Jo as DmkNetworkClientError,co as DmkResultFactory,fo as DmkResultStatus,Po as FramerUtils,$ as GLOBAL_ERRORS,xo as GenuineCheckDeviceAction,I as GetAppAndVersionCommand,T as GetAppStorageInfoCommand,Qe as GetApplicationsMetadataTaskError,O as GetBackgroundImageSizeCommand,b as GetBackgroundImageSizeCommandError,U as GetBatteryStatusCommand,Ee as GetDeviceMetadataDeviceAction,Ie as GetDeviceStatusDeviceAction,_ as GetOsVersionCommand,ee as GlobalCommandError,oe as GlobalCommandErrorHandler,Te as GoToDashboardDeviceAction,go as InstallAppDeviceAction,Oe as InstallLanguagePackageDeviceAction,he as InstallOrUpdateAppsDeviceAction,Ye as InvalidGetFirmwareMetadataResponseError,u as InvalidResponseFormatError,x as InvalidStatusWordError,ae as LEDGER_VENDOR_ID,w as ListAppsCommand,Ue as ListAppsDeviceAction,_e as ListAppsWithMetadataDeviceAction,yo as ListInstalledAppsDeviceAction,K as ListLanguagePackCommand,z as ListLanguagePackCommandError,q as LoadCertificateCommand,No as LogLevel,X as OpenAppCommand,we as OpenAppDeviceAction,Ke as OpenAppWithDependenciesDeviceAction,Se as OutOfMemoryDAError,ve as RefusedByUserDAError,Ro as SecureChannelError,We as SendCommandInAppDeviceAction,$e as StaticDeviceModelDataSource,pr as TransportConnectedDevice,to as TransportDeviceModel,So as UninstallAppDeviceAction,Le as UnknownDAError,ke as UnsupportedFirmwareDAError,de as UserInteractionRequired,Xo as WebLogsExporterLogger,Je as XStateDeviceAction,ur as base64StringToBuffer,xr as bufferToBase64String,lr as bufferToHexaString,mr as connectedDeviceStubBuilder,Go as defaultApduReceiverServiceStubBuilder,Bo as defaultApduSenderServiceStubBuilder,sr as formatApduReceivedLog,cr as formatApduSentLog,yr as hexaStringToBuffer,Dr as isBase64String,Y as isCommandErrorCode,Cr as isHexaString,y as isSuccessCommandResult,Ao as isSuccessDmkResult,_o as noopLogger,Vo as noopLoggerFactory};
2
2
  //# sourceMappingURL=index.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/api/index.ts"],
4
- "sourcesContent": ["\"use strict\";\n\nexport { Apdu } from \"@api/apdu/model/Apdu\";\nexport { APDU_MAX_PAYLOAD, ApduBuilder } from \"@api/apdu/utils/ApduBuilder\";\nexport { ApduParser } from \"@api/apdu/utils/ApduParser\";\nexport * from \"@api/apdu/utils/AppBuilderError\";\nexport { ByteArrayBuilder } from \"@api/apdu/utils/ByteArrayBuilder\";\nexport { ByteArrayParser } from \"@api/apdu/utils/ByteArrayParser\";\nexport { type Command } from \"@api/command/Command\";\nexport {\n InvalidResponseFormatError,\n InvalidStatusWordError,\n} from \"@api/command/Errors\";\nexport {\n CommandResultFactory,\n CommandResultStatus,\n isSuccessCommandResult,\n} from \"@api/command/model/CommandResult\";\nexport {\n BackupStorageCommand,\n type BackupStorageCommandErrorCodes,\n type BackupStorageCommandResponse,\n type BackupStorageCommandResult,\n} from \"@api/command/os/BackupStorageCommand\";\nexport { CloseAppCommand } from \"@api/command/os/CloseAppCommand\";\nexport {\n GetAppAndVersionCommand,\n type GetAppAndVersionResponse,\n} from \"@api/command/os/GetAppAndVersionCommand\";\nexport {\n GetAppStorageInfoCommand,\n type GetAppStorageInfoCommandArgs,\n type GetAppStorageInfoCommandErrorCodes,\n type GetAppStorageInfoCommandResponse,\n type GetAppStorageInfoCommandResult,\n} from \"@api/command/os/GetAppStorageInfoCommand\";\nexport {\n GetBackgroundImageSizeCommand,\n GetBackgroundImageSizeCommandError,\n type GetBackgroundImageSizeCommandResult,\n type GetBackgroundImageSizeErrorCodes,\n type GetBackgroundImageSizeResponse,\n} from \"@api/command/os/GetBackgroundImageSizeCommand\";\nexport {\n BatteryStatusType,\n type GetBatteryStatusArgs,\n GetBatteryStatusCommand,\n type GetBatteryStatusResponse,\n} from \"@api/command/os/GetBatteryStatusCommand\";\nexport {\n GetOsVersionCommand,\n type GetOsVersionResponse,\n} from \"@api/command/os/GetOsVersionCommand\";\nexport {\n type ListAppsArgs,\n ListAppsCommand,\n type ListAppsErrorCodes,\n type ListAppsResponse,\n} from \"@api/command/os/ListAppsCommand\";\nexport {\n type LoadCertificateArgs,\n LoadCertificateCommand,\n type LoadCertificateErrorCodes,\n} from \"@api/command/os/LoadCertificateCommand\";\nexport {\n type OpenAppArgs,\n OpenAppCommand,\n} from \"@api/command/os/OpenAppCommand\";\nexport { isCommandErrorCode } from \"@api/command/utils/CommandErrors\";\nexport { CommandUtils } from \"@api/command/utils/CommandUtils\";\nexport {\n GLOBAL_ERRORS,\n GlobalCommandError,\n GlobalCommandErrorHandler,\n} from \"@api/command/utils/GlobalCommandError\";\nexport {\n DeviceModel,\n DeviceModelId,\n LEDGER_VENDOR_ID,\n} from \"@api/device/DeviceModel\";\nexport { DeviceStatus } from \"@api/device/DeviceStatus\";\nexport { type InternalApi } from \"@api/device-action/DeviceAction\";\nexport {\n type DeviceActionState,\n DeviceActionStatus,\n} from \"@api/device-action/model/DeviceActionState\";\nexport { UserInteractionRequired } from \"@api/device-action/model/UserInteractionRequired\";\nexport { CallTaskInAppDeviceAction } from \"@api/device-action/os/CallTaskInAppDeviceAction/CallTaskInAppDeviceAction\";\nexport { DEFAULT_UNLOCK_TIMEOUT_MS } from \"@api/device-action/os/Const\";\nexport {\n AppAlreadyInstalledDAError,\n DeviceLockedError,\n DeviceNotOnboardedError,\n OutOfMemoryDAError,\n RefusedByUserDAError,\n UnknownDAError,\n UnsupportedFirmwareDAError,\n} from \"@api/device-action/os/Errors\";\nexport { GetDeviceMetadataDeviceAction } from \"@api/device-action/os/GetDeviceMetadata/GetDeviceMetadataDeviceAction\";\nexport { GetDeviceStatusDeviceAction } from \"@api/device-action/os/GetDeviceStatus/GetDeviceStatusDeviceAction\";\nexport { GoToDashboardDeviceAction } from \"@api/device-action/os/GoToDashboard/GoToDashboardDeviceAction\";\nexport type {\n GoToDashboardDAError,\n GoToDashboardDAInput,\n GoToDashboardDAIntermediateValue,\n GoToDashboardDAOutput,\n GoToDashboardDARequiredInteraction,\n GoToDashboardDAState,\n} from \"@api/device-action/os/GoToDashboard/types\";\nexport { InstallOrUpdateAppsDeviceAction } from \"@api/device-action/os/InstallOrUpdateApps/InstallOrUpdateAppsDeviceAction\";\nexport { ListAppsDeviceAction } from \"@api/device-action/os/ListApps/ListAppsDeviceAction\";\nexport { ListAppsWithMetadataDeviceAction } from \"@api/device-action/os/ListAppsWithMetadata/ListAppsWithMetadataDeviceAction\";\nexport { OpenAppDeviceAction } from \"@api/device-action/os/OpenAppDeviceAction/OpenAppDeviceAction\";\nexport { OpenAppWithDependenciesDeviceAction } from \"@api/device-action/os/OpenAppWithDependencies/OpenAppWithDependenciesDeviceAction\";\nexport { SendCommandInAppDeviceAction } from \"@api/device-action/os/SendCommandInAppDeviceAction/SendCommandInAppDeviceAction\";\nexport { BackupAppStorageTask } from \"@api/device-action/task/BackupAppStorageTask\";\nexport {\n GetApplicationsMetadataTaskError,\n InvalidGetFirmwareMetadataResponseError,\n} from \"@api/device-action/task/Errors\";\nexport {\n type DeviceActionStateMachine,\n XStateDeviceAction,\n} from \"@api/device-action/xstate-utils/XStateDeviceAction\";\nexport { StaticDeviceModelDataSource } from \"@api/device-model/data/StaticDeviceModelDataSource\";\nexport { BleDeviceInfos } from \"@api/device-model/model/BleDeviceInfos\";\nexport { TransportDeviceModel } from \"@api/device-model/model/DeviceModel\";\nexport { ApduResponse } from \"@api/device-session/ApduResponse\";\nexport * from \"@api/device-session/data/FramerConst\";\nexport {\n type DeviceSessionState,\n DeviceSessionStateType,\n} from \"@api/device-session/DeviceSessionState\";\nexport {\n DmkResultFactory,\n DmkResultStatus,\n isSuccessDmkResult,\n} from \"@api/model/DmkResult\";\nexport { GenuineCheckDeviceAction } from \"@api/secure-channel/device-action/GenuineCheck/GenuineCheckDeviceAction\";\nexport { InstallAppDeviceAction } from \"@api/secure-channel/device-action/InstallApp/InstallAppDeviceAction\";\nexport { ListInstalledAppsDeviceAction } from \"@api/secure-channel/device-action/ListInstalledApps/ListInstalledAppsDeviceAction\";\nexport type { InstalledApp } from \"@api/secure-channel/device-action/ListInstalledApps/types\";\nexport { UninstallAppDeviceAction } from \"@api/secure-channel/device-action/UninstallApp/UninstallAppDeviceAction\";\nexport {\n DMK_STORAGE_PREFIX_KEY,\n type KeyValueStorage,\n} from \"@api/storage/KeyValueStorage\";\nexport { SecureChannelError } from \"@internal/secure-channel/model/Errors\";\n// TODO: remove from exported\nexport { defaultApduReceiverServiceStubBuilder } from \"@api/device-session/service/DefaultApduReceiverService.stub\";\nexport { defaultApduSenderServiceStubBuilder } from \"@api/device-session/service/DefaultApduSenderService.stub\";\nexport { FramerUtils } from \"@api/device-session/utils/FramerUtils\";\nexport { DeviceManagementKit } from \"@api/DeviceManagementKit\";\nexport { DeviceManagementKitBuilder } from \"@api/DeviceManagementKitBuilder\";\nexport * from \"@api/Error\";\nexport {\n noopLogger,\n noopLoggerFactory,\n} from \"@api/logger-publisher/utils/noopLoggerFactory\";\nexport { LogLevel } from \"@api/logger-subscriber/model/LogLevel\";\nexport { ConsoleLogger } from \"@api/logger-subscriber/service/ConsoleLogger\";\nexport { DefaultLogTagFormatter } from \"@api/logger-subscriber/service/DefaultLogTagFormatter\";\nexport { type LogTagFormatter } from \"@api/logger-subscriber/service/LogTagFormatter\";\nexport { WebLogsExporterLogger } from \"@api/logger-subscriber/service/WebLogsExporterLogger\";\nexport {\n DmkNetworkClient,\n type DmkNetworkClientOptions,\n type DmkNetworkResponse,\n type DmkQueryParams,\n type DmkQueryParamValue,\n type DmkRequestConfig,\n type DmkResponseType,\n} from \"@api/network/DmkNetworkClient\";\nexport { DmkNetworkClientError } from \"@api/network/DmkNetworkClientError\";\nexport { ConnectedDevice } from \"@api/transport/model/ConnectedDevice\";\nexport {\n DeviceConnectionStateMachine,\n type DeviceConnectionStateMachineParams,\n} from \"@api/transport/model/DeviceConnectionStateMachine\";\nexport * from \"@api/transport/model/Errors\";\nexport { TransportConnectedDevice } from \"@api/transport/model/TransportConnectedDevice\";\nexport { connectedDeviceStubBuilder } from \"@api/transport/model/TransportConnectedDevice.stub\";\nexport * from \"@api/types\";\nexport { formatApduReceivedLog, formatApduSentLog } from \"@api/utils/apduLogs\";\nexport { ApplicationChecker } from \"@api/utils/ApplicationChecker\";\nexport {\n type AppConfig,\n type ApplicationResolver,\n type ResolvedApp,\n} from \"@api/utils/ApplicationResolver\";\nexport {\n base64StringToBuffer,\n bufferToBase64String,\n isBase64String,\n} from \"@api/utils/Base64String\";\nexport {\n bufferToHexaString,\n hexaStringToBuffer,\n isHexaString,\n} from \"@api/utils/HexaString\";\n"],
5
- "mappings": "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",
6
- "names": ["Apdu", "APDU_MAX_PAYLOAD", "ApduBuilder", "ApduParser", "ByteArrayBuilder", "ByteArrayParser", "InvalidResponseFormatError", "InvalidStatusWordError", "CommandResultFactory", "CommandResultStatus", "isSuccessCommandResult", "BackupStorageCommand", "CloseAppCommand", "GetAppAndVersionCommand", "GetAppStorageInfoCommand", "GetBackgroundImageSizeCommand", "GetBackgroundImageSizeCommandError", "BatteryStatusType", "GetBatteryStatusCommand", "GetOsVersionCommand", "ListAppsCommand", "LoadCertificateCommand", "OpenAppCommand", "isCommandErrorCode", "CommandUtils", "GLOBAL_ERRORS", "GlobalCommandError", "GlobalCommandErrorHandler", "DeviceModel", "DeviceModelId", "LEDGER_VENDOR_ID", "DeviceStatus", "DeviceActionStatus", "UserInteractionRequired", "CallTaskInAppDeviceAction", "DEFAULT_UNLOCK_TIMEOUT_MS", "AppAlreadyInstalledDAError", "DeviceLockedError", "DeviceNotOnboardedError", "OutOfMemoryDAError", "RefusedByUserDAError", "UnknownDAError", "UnsupportedFirmwareDAError", "GetDeviceMetadataDeviceAction", "GetDeviceStatusDeviceAction", "GoToDashboardDeviceAction", "InstallOrUpdateAppsDeviceAction", "ListAppsDeviceAction", "ListAppsWithMetadataDeviceAction", "OpenAppDeviceAction", "OpenAppWithDependenciesDeviceAction", "SendCommandInAppDeviceAction", "BackupAppStorageTask", "GetApplicationsMetadataTaskError", "InvalidGetFirmwareMetadataResponseError", "XStateDeviceAction", "StaticDeviceModelDataSource", "BleDeviceInfos", "TransportDeviceModel", "ApduResponse", "DeviceSessionStateType", "DmkResultFactory", "DmkResultStatus", "isSuccessDmkResult", "GenuineCheckDeviceAction", "InstallAppDeviceAction", "ListInstalledAppsDeviceAction", "UninstallAppDeviceAction", "DMK_STORAGE_PREFIX_KEY", "SecureChannelError", "defaultApduReceiverServiceStubBuilder", "defaultApduSenderServiceStubBuilder", "FramerUtils", "DeviceManagementKit", "DeviceManagementKitBuilder", "noopLogger", "noopLoggerFactory", "LogLevel", "ConsoleLogger", "DefaultLogTagFormatter", "WebLogsExporterLogger", "DmkNetworkClient", "DmkNetworkClientError", "ConnectedDevice", "DeviceConnectionStateMachine", "TransportConnectedDevice", "connectedDeviceStubBuilder", "formatApduReceivedLog", "formatApduSentLog", "ApplicationChecker", "base64StringToBuffer", "bufferToBase64String", "isBase64String", "bufferToHexaString", "hexaStringToBuffer", "isHexaString"]
4
+ "sourcesContent": ["\"use strict\";\n\nexport { Apdu } from \"@api/apdu/model/Apdu\";\nexport { APDU_MAX_PAYLOAD, ApduBuilder } from \"@api/apdu/utils/ApduBuilder\";\nexport { ApduParser } from \"@api/apdu/utils/ApduParser\";\nexport * from \"@api/apdu/utils/AppBuilderError\";\nexport { ByteArrayBuilder } from \"@api/apdu/utils/ByteArrayBuilder\";\nexport { ByteArrayParser } from \"@api/apdu/utils/ByteArrayParser\";\nexport { type Command } from \"@api/command/Command\";\nexport {\n InvalidResponseFormatError,\n InvalidStatusWordError,\n} from \"@api/command/Errors\";\nexport {\n CommandResultFactory,\n CommandResultStatus,\n isSuccessCommandResult,\n} from \"@api/command/model/CommandResult\";\nexport {\n BackupStorageCommand,\n type BackupStorageCommandErrorCodes,\n type BackupStorageCommandResponse,\n type BackupStorageCommandResult,\n} from \"@api/command/os/BackupStorageCommand\";\nexport { CloseAppCommand } from \"@api/command/os/CloseAppCommand\";\nexport {\n DeleteLanguagePackCommand,\n type DeleteLanguagePackCommandArgs,\n DeleteLanguagePackCommandError,\n type DeleteLanguagePackCommandResult,\n type DeleteLanguagePackErrorCodes,\n} from \"@api/command/os/DeleteLanguagePackCommand\";\nexport {\n GetAppAndVersionCommand,\n type GetAppAndVersionResponse,\n} from \"@api/command/os/GetAppAndVersionCommand\";\nexport {\n GetAppStorageInfoCommand,\n type GetAppStorageInfoCommandArgs,\n type GetAppStorageInfoCommandErrorCodes,\n type GetAppStorageInfoCommandResponse,\n type GetAppStorageInfoCommandResult,\n} from \"@api/command/os/GetAppStorageInfoCommand\";\nexport {\n GetBackgroundImageSizeCommand,\n GetBackgroundImageSizeCommandError,\n type GetBackgroundImageSizeCommandResult,\n type GetBackgroundImageSizeErrorCodes,\n type GetBackgroundImageSizeResponse,\n} from \"@api/command/os/GetBackgroundImageSizeCommand\";\nexport {\n BatteryStatusType,\n type GetBatteryStatusArgs,\n GetBatteryStatusCommand,\n type GetBatteryStatusResponse,\n} from \"@api/command/os/GetBatteryStatusCommand\";\nexport {\n GetOsVersionCommand,\n type GetOsVersionResponse,\n} from \"@api/command/os/GetOsVersionCommand\";\nexport {\n type ListAppsArgs,\n ListAppsCommand,\n type ListAppsErrorCodes,\n type ListAppsResponse,\n} from \"@api/command/os/ListAppsCommand\";\nexport {\n ListLanguagePackCommand,\n type ListLanguagePackCommandArgs,\n ListLanguagePackCommandError,\n type ListLanguagePackCommandResult,\n type ListLanguagePackErrorCodes,\n type ListLanguagePackResponse,\n} from \"@api/command/os/ListLanguagePackCommand\";\nexport {\n type LoadCertificateArgs,\n LoadCertificateCommand,\n type LoadCertificateErrorCodes,\n} from \"@api/command/os/LoadCertificateCommand\";\nexport {\n type OpenAppArgs,\n OpenAppCommand,\n} from \"@api/command/os/OpenAppCommand\";\nexport { isCommandErrorCode } from \"@api/command/utils/CommandErrors\";\nexport { CommandUtils } from \"@api/command/utils/CommandUtils\";\nexport {\n GLOBAL_ERRORS,\n GlobalCommandError,\n GlobalCommandErrorHandler,\n} from \"@api/command/utils/GlobalCommandError\";\nexport {\n DeviceModel,\n DeviceModelId,\n LEDGER_VENDOR_ID,\n} from \"@api/device/DeviceModel\";\nexport { DeviceStatus } from \"@api/device/DeviceStatus\";\nexport { type InternalApi } from \"@api/device-action/DeviceAction\";\nexport {\n type DeviceActionState,\n DeviceActionStatus,\n} from \"@api/device-action/model/DeviceActionState\";\nexport { UserInteractionRequired } from \"@api/device-action/model/UserInteractionRequired\";\nexport { CallTaskInAppDeviceAction } from \"@api/device-action/os/CallTaskInAppDeviceAction/CallTaskInAppDeviceAction\";\nexport { DEFAULT_UNLOCK_TIMEOUT_MS } from \"@api/device-action/os/Const\";\nexport {\n AppAlreadyInstalledDAError,\n DeleteLanguagePackDAError,\n DeviceLockedError,\n DeviceNotOnboardedError,\n OutOfMemoryDAError,\n RefusedByUserDAError,\n UnknownDAError,\n UnsupportedFirmwareDAError,\n} from \"@api/device-action/os/Errors\";\nexport { GetDeviceMetadataDeviceAction } from \"@api/device-action/os/GetDeviceMetadata/GetDeviceMetadataDeviceAction\";\nexport { GetDeviceStatusDeviceAction } from \"@api/device-action/os/GetDeviceStatus/GetDeviceStatusDeviceAction\";\nexport { GoToDashboardDeviceAction } from \"@api/device-action/os/GoToDashboard/GoToDashboardDeviceAction\";\nexport type {\n GoToDashboardDAError,\n GoToDashboardDAInput,\n GoToDashboardDAIntermediateValue,\n GoToDashboardDAOutput,\n GoToDashboardDARequiredInteraction,\n GoToDashboardDAState,\n} from \"@api/device-action/os/GoToDashboard/types\";\nexport { InstallLanguagePackageDeviceAction } from \"@api/device-action/os/InstallLanguagePackage/InstallLanguagePackageDeviceAction\";\nexport { InstallOrUpdateAppsDeviceAction } from \"@api/device-action/os/InstallOrUpdateApps/InstallOrUpdateAppsDeviceAction\";\nexport { ListAppsDeviceAction } from \"@api/device-action/os/ListApps/ListAppsDeviceAction\";\nexport { ListAppsWithMetadataDeviceAction } from \"@api/device-action/os/ListAppsWithMetadata/ListAppsWithMetadataDeviceAction\";\nexport { OpenAppDeviceAction } from \"@api/device-action/os/OpenAppDeviceAction/OpenAppDeviceAction\";\nexport { OpenAppWithDependenciesDeviceAction } from \"@api/device-action/os/OpenAppWithDependencies/OpenAppWithDependenciesDeviceAction\";\nexport { SendCommandInAppDeviceAction } from \"@api/device-action/os/SendCommandInAppDeviceAction/SendCommandInAppDeviceAction\";\nexport { BackupAppStorageTask } from \"@api/device-action/task/BackupAppStorageTask\";\nexport {\n GetApplicationsMetadataTaskError,\n InvalidGetFirmwareMetadataResponseError,\n} from \"@api/device-action/task/Errors\";\nexport {\n type DeviceActionStateMachine,\n XStateDeviceAction,\n} from \"@api/device-action/xstate-utils/XStateDeviceAction\";\nexport { StaticDeviceModelDataSource } from \"@api/device-model/data/StaticDeviceModelDataSource\";\nexport { BleDeviceInfos } from \"@api/device-model/model/BleDeviceInfos\";\nexport { TransportDeviceModel } from \"@api/device-model/model/DeviceModel\";\nexport { ApduResponse } from \"@api/device-session/ApduResponse\";\nexport * from \"@api/device-session/data/FramerConst\";\nexport {\n type DeviceSessionState,\n DeviceSessionStateType,\n} from \"@api/device-session/DeviceSessionState\";\nexport {\n DmkResultFactory,\n DmkResultStatus,\n isSuccessDmkResult,\n} from \"@api/model/DmkResult\";\nexport { GenuineCheckDeviceAction } from \"@api/secure-channel/device-action/GenuineCheck/GenuineCheckDeviceAction\";\nexport { InstallAppDeviceAction } from \"@api/secure-channel/device-action/InstallApp/InstallAppDeviceAction\";\nexport { ListInstalledAppsDeviceAction } from \"@api/secure-channel/device-action/ListInstalledApps/ListInstalledAppsDeviceAction\";\nexport type { InstalledApp } from \"@api/secure-channel/device-action/ListInstalledApps/types\";\nexport { UninstallAppDeviceAction } from \"@api/secure-channel/device-action/UninstallApp/UninstallAppDeviceAction\";\nexport {\n DMK_STORAGE_PREFIX_KEY,\n type KeyValueStorage,\n} from \"@api/storage/KeyValueStorage\";\nexport { SecureChannelError } from \"@internal/secure-channel/model/Errors\";\n// TODO: remove from exported\nexport { defaultApduReceiverServiceStubBuilder } from \"@api/device-session/service/DefaultApduReceiverService.stub\";\nexport { defaultApduSenderServiceStubBuilder } from \"@api/device-session/service/DefaultApduSenderService.stub\";\nexport { FramerUtils } from \"@api/device-session/utils/FramerUtils\";\nexport { DeviceManagementKit } from \"@api/DeviceManagementKit\";\nexport { DeviceManagementKitBuilder } from \"@api/DeviceManagementKitBuilder\";\nexport * from \"@api/Error\";\nexport {\n noopLogger,\n noopLoggerFactory,\n} from \"@api/logger-publisher/utils/noopLoggerFactory\";\nexport { LogLevel } from \"@api/logger-subscriber/model/LogLevel\";\nexport { ConsoleLogger } from \"@api/logger-subscriber/service/ConsoleLogger\";\nexport { DefaultLogTagFormatter } from \"@api/logger-subscriber/service/DefaultLogTagFormatter\";\nexport { type LogTagFormatter } from \"@api/logger-subscriber/service/LogTagFormatter\";\nexport { WebLogsExporterLogger } from \"@api/logger-subscriber/service/WebLogsExporterLogger\";\nexport {\n DmkNetworkClient,\n type DmkNetworkClientOptions,\n type DmkNetworkResponse,\n type DmkQueryParams,\n type DmkQueryParamValue,\n type DmkRequestConfig,\n type DmkResponseType,\n} from \"@api/network/DmkNetworkClient\";\nexport { DmkNetworkClientError } from \"@api/network/DmkNetworkClientError\";\nexport { ConnectedDevice } from \"@api/transport/model/ConnectedDevice\";\nexport {\n DeviceConnectionStateMachine,\n type DeviceConnectionStateMachineParams,\n} from \"@api/transport/model/DeviceConnectionStateMachine\";\nexport * from \"@api/transport/model/Errors\";\nexport { TransportConnectedDevice } from \"@api/transport/model/TransportConnectedDevice\";\nexport { connectedDeviceStubBuilder } from \"@api/transport/model/TransportConnectedDevice.stub\";\nexport * from \"@api/types\";\nexport { formatApduReceivedLog, formatApduSentLog } from \"@api/utils/apduLogs\";\nexport { ApplicationChecker } from \"@api/utils/ApplicationChecker\";\nexport {\n type AppConfig,\n type ApplicationResolver,\n type ResolvedApp,\n} from \"@api/utils/ApplicationResolver\";\nexport {\n base64StringToBuffer,\n bufferToBase64String,\n isBase64String,\n} from \"@api/utils/Base64String\";\nexport {\n bufferToHexaString,\n hexaStringToBuffer,\n isHexaString,\n} from \"@api/utils/HexaString\";\n"],
5
+ "mappings": "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",
6
+ "names": ["Apdu", "APDU_MAX_PAYLOAD", "ApduBuilder", "ApduParser", "ByteArrayBuilder", "ByteArrayParser", "InvalidResponseFormatError", "InvalidStatusWordError", "CommandResultFactory", "CommandResultStatus", "isSuccessCommandResult", "BackupStorageCommand", "CloseAppCommand", "DeleteLanguagePackCommand", "DeleteLanguagePackCommandError", "GetAppAndVersionCommand", "GetAppStorageInfoCommand", "GetBackgroundImageSizeCommand", "GetBackgroundImageSizeCommandError", "BatteryStatusType", "GetBatteryStatusCommand", "GetOsVersionCommand", "ListAppsCommand", "ListLanguagePackCommand", "ListLanguagePackCommandError", "LoadCertificateCommand", "OpenAppCommand", "isCommandErrorCode", "CommandUtils", "GLOBAL_ERRORS", "GlobalCommandError", "GlobalCommandErrorHandler", "DeviceModel", "DeviceModelId", "LEDGER_VENDOR_ID", "DeviceStatus", "DeviceActionStatus", "UserInteractionRequired", "CallTaskInAppDeviceAction", "DEFAULT_UNLOCK_TIMEOUT_MS", "AppAlreadyInstalledDAError", "DeleteLanguagePackDAError", "DeviceLockedError", "DeviceNotOnboardedError", "OutOfMemoryDAError", "RefusedByUserDAError", "UnknownDAError", "UnsupportedFirmwareDAError", "GetDeviceMetadataDeviceAction", "GetDeviceStatusDeviceAction", "GoToDashboardDeviceAction", "InstallLanguagePackageDeviceAction", "InstallOrUpdateAppsDeviceAction", "ListAppsDeviceAction", "ListAppsWithMetadataDeviceAction", "OpenAppDeviceAction", "OpenAppWithDependenciesDeviceAction", "SendCommandInAppDeviceAction", "BackupAppStorageTask", "GetApplicationsMetadataTaskError", "InvalidGetFirmwareMetadataResponseError", "XStateDeviceAction", "StaticDeviceModelDataSource", "BleDeviceInfos", "TransportDeviceModel", "ApduResponse", "DeviceSessionStateType", "DmkResultFactory", "DmkResultStatus", "isSuccessDmkResult", "GenuineCheckDeviceAction", "InstallAppDeviceAction", "ListInstalledAppsDeviceAction", "UninstallAppDeviceAction", "DMK_STORAGE_PREFIX_KEY", "SecureChannelError", "defaultApduReceiverServiceStubBuilder", "defaultApduSenderServiceStubBuilder", "FramerUtils", "DeviceManagementKit", "DeviceManagementKitBuilder", "noopLogger", "noopLoggerFactory", "LogLevel", "ConsoleLogger", "DefaultLogTagFormatter", "WebLogsExporterLogger", "DmkNetworkClient", "DmkNetworkClientError", "ConnectedDevice", "DeviceConnectionStateMachine", "TransportConnectedDevice", "connectedDeviceStubBuilder", "formatApduReceivedLog", "formatApduSentLog", "ApplicationChecker", "base64StringToBuffer", "bufferToBase64String", "isBase64String", "bufferToHexaString", "hexaStringToBuffer", "isHexaString"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import{DmkNetworkClientError as p}from"./DmkNetworkClientError";import{buildBodyAndHeaders as m,buildSignal as d,buildUrl as h,parseBody as l,safeReadText as k,wrapFetchError as y}from"./DmkNetworkClientHelpers";class D{baseUrl;defaultHeaders;fetchImpl;constructor(e={}){this.baseUrl=e.baseUrl,this.defaultHeaders=e.headers??{},this.fetchImpl=e.fetch}getFetch(){return this.fetchImpl??globalThis.fetch.bind(globalThis)}get(e,t){return this.request({...t,method:"GET",url:e}).then(r=>r.data)}post(e,t,r){return this.request({...r,method:"POST",url:e,body:t}).then(n=>n.data)}put(e,t,r){return this.request({...r,method:"PUT",url:e,body:t}).then(n=>n.data)}patch(e,t,r){return this.request({...r,method:"PATCH",url:e,body:t}).then(n=>n.data)}delete(e,t){return this.request({...t,method:"DELETE",url:e}).then(r=>r.data)}head(e,t){return this.request({...t,method:"HEAD",url:e,responseType:"void"}).then(()=>{})}async request(e){const t=h({url:e.url,params:e.params,baseUrl:this.baseUrl}),{body:r,headers:n}=m({method:e.method,body:e.body,defaultHeaders:this.defaultHeaders,perRequestHeaders:e.headers}),a=d({timeoutMs:e.timeoutMs,externalSignal:e.signal}),u=e.throwOnHttpError??!0,i=e.responseType??"json";let s;try{s=await this.getFetch()(t,{method:e.method,headers:n,body:r,signal:a})}catch(o){throw y({cause:o,externalSignal:e.signal,timeoutMs:e.timeoutMs})}if(!s.ok&&u){const o=await k(s);throw new p({message:`HTTP error ${s.status} ${s.statusText}`.trim(),status:s.status,statusText:s.statusText,responseBody:o})}return{data:await l(s,i),status:s.status,statusText:s.statusText,headers:s.headers,ok:s.ok}}}export{D as DmkNetworkClient};
1
+ import{DmkNetworkClientError as p}from"./DmkNetworkClientError";import{buildBodyAndHeaders as m,buildSignal as d,buildUrl as h,parseBody as l,safeReadText as k,wrapFetchError as y}from"./DmkNetworkClientHelpers";class D{baseUrl;defaultHeaders;fetchImpl;constructor(e={}){this.baseUrl=e.baseUrl,this.defaultHeaders=e.headers??{},this.fetchImpl=e.fetch}getFetch(){return this.fetchImpl??globalThis.fetch.bind(globalThis)}get(e,t){return this.request({...t,method:"GET",url:e}).then(r=>r.data)}post(e,t,r){return this.request({...r,method:"POST",url:e,body:t}).then(n=>n.data)}put(e,t,r){return this.request({...r,method:"PUT",url:e,body:t}).then(n=>n.data)}patch(e,t,r){return this.request({...r,method:"PATCH",url:e,body:t}).then(n=>n.data)}delete(e,t){return this.request({...t,method:"DELETE",url:e}).then(r=>r.data)}head(e,t){return this.request({...t,method:"HEAD",url:e,responseType:"void"}).then(()=>{})}async request(e){const t=h({url:e.url,params:e.params,baseUrl:this.baseUrl}),{body:r,headers:n}=m({method:e.method,body:e.body,defaultHeaders:this.defaultHeaders,perRequestHeaders:e.headers}),a=d({timeoutMs:e.timeoutMs,externalSignal:e.signal}),u=e.throwOnHttpError??!0,i=e.responseType??"json";let s;try{s=await this.getFetch()(t.toString(),{method:e.method,headers:n,body:r,signal:a})}catch(o){throw y({cause:o,externalSignal:e.signal,timeoutMs:e.timeoutMs})}if(!s.ok&&u){const o=await k(s);throw new p({message:`HTTP error ${s.status} ${s.statusText}`.trim(),status:s.status,statusText:s.statusText,responseBody:o})}return{data:await l(s,i),status:s.status,statusText:s.statusText,headers:s.headers,ok:s.ok}}}export{D as DmkNetworkClient};
2
2
  //# sourceMappingURL=DmkNetworkClient.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/api/network/DmkNetworkClient.ts"],
4
- "sourcesContent": ["import { DmkNetworkClientError } from \"./DmkNetworkClientError\";\nimport {\n buildBodyAndHeaders,\n buildSignal,\n buildUrl,\n type DmkQueryParams,\n type DmkResponseType,\n parseBody,\n safeReadText,\n wrapFetchError,\n} from \"./DmkNetworkClientHelpers\";\n\nexport type { DmkQueryParamValue } from \"./DmkNetworkClientHelpers\";\nexport type { DmkQueryParams, DmkResponseType };\n\n/**\n * Per-request configuration. Everything is optional \u2014 sensible defaults are\n * applied by the client.\n */\nexport type DmkRequestConfig = {\n /** Query params merged into the URL. `null`/`undefined` entries are skipped. */\n params?: DmkQueryParams;\n /** Per-request headers merged on top of the client's default headers. */\n headers?: Record<string, string>;\n /**\n * Per-request timeout in milliseconds. When unset (or `0`), the request\n * has no timeout.\n */\n timeoutMs?: number;\n /**\n * External abort signal. Composed with the internal timeout signal, so\n * either one firing will abort the request.\n */\n signal?: AbortSignal;\n /**\n * How to parse the response body. Defaults to `\"json\"`, except for `head`\n * which always resolves to `void`.\n */\n responseType?: DmkResponseType;\n /**\n * When `true` (default), non-2xx responses throw {@link DmkNetworkClientError}.\n * Set to `false` to resolve normally and inspect {@link DmkNetworkResponse}\n * via {@link DmkNetworkClient.request}.\n */\n throwOnHttpError?: boolean;\n};\n\n/**\n * Full response envelope returned by {@link DmkNetworkClient.request}.\n * The simple method helpers (`get`, `post`, \u2026) unwrap to `data` directly.\n *\n * `data` is intentionally typed as `unknown`: network payloads are untrusted\n * input, so callers must narrow it with a type guard or runtime validator\n * (e.g. the existing DTO mappers) before use.\n */\nexport type DmkNetworkResponse = {\n data: unknown;\n status: number;\n statusText: string;\n headers: Headers;\n ok: boolean;\n};\n\nexport type DmkNetworkClientOptions = {\n /** Base URL prepended to relative request URLs. */\n baseUrl?: string;\n /** Default headers merged into every request. */\n headers?: Record<string, string>;\n /** Injection point for tests. Defaults to `globalThis.fetch`. */\n fetch?: typeof fetch;\n};\n\ntype InternalRequestConfig = DmkRequestConfig & {\n method: string;\n url: string;\n body?: unknown;\n};\n\n/**\n * Minimal axios-like wrapper over `fetch`. Handles:\n *\n * - URL composition (base URL + relative path + query params from an object)\n * - Automatic JSON body encoding and `Content-Type` header\n * - Default and per-request headers merging\n * - Request timeout via `AbortSignal.timeout`, composable with a caller signal\n * - Automatic `response.ok` check with a typed {@link DmkNetworkClientError}\n * - Typed JSON / text / blob / arrayBuffer response parsing\n *\n * Use the high-level helpers ({@link DmkNetworkClient.get}, {@link DmkNetworkClient.post},\n * \u2026) for 95% of calls and {@link DmkNetworkClient.request} when you need the\n * full response envelope (status, headers).\n */\nexport class DmkNetworkClient {\n private readonly baseUrl?: string;\n private readonly defaultHeaders: Record<string, string>;\n private readonly fetchImpl?: typeof fetch;\n\n constructor(options: DmkNetworkClientOptions = {}) {\n this.baseUrl = options.baseUrl;\n this.defaultHeaders = options.headers ?? {};\n this.fetchImpl = options.fetch;\n }\n\n private getFetch(): typeof fetch {\n // Resolve `fetch` at call time so that spies installed on `globalThis.fetch`\n // after the client was constructed are still honored.\n return this.fetchImpl ?? globalThis.fetch.bind(globalThis);\n }\n\n public get(url: string, config?: DmkRequestConfig): Promise<unknown> {\n return this.request({ ...config, method: \"GET\", url }).then(\n (res) => res.data,\n );\n }\n\n public post(\n url: string,\n body?: unknown,\n config?: DmkRequestConfig,\n ): Promise<unknown> {\n return this.request({ ...config, method: \"POST\", url, body }).then(\n (res) => res.data,\n );\n }\n\n public put(\n url: string,\n body?: unknown,\n config?: DmkRequestConfig,\n ): Promise<unknown> {\n return this.request({ ...config, method: \"PUT\", url, body }).then(\n (res) => res.data,\n );\n }\n\n public patch(\n url: string,\n body?: unknown,\n config?: DmkRequestConfig,\n ): Promise<unknown> {\n return this.request({ ...config, method: \"PATCH\", url, body }).then(\n (res) => res.data,\n );\n }\n\n public delete(url: string, config?: DmkRequestConfig): Promise<unknown> {\n return this.request({ ...config, method: \"DELETE\", url }).then(\n (res) => res.data,\n );\n }\n\n public head(url: string, config?: DmkRequestConfig): Promise<void> {\n return this.request({\n ...config,\n method: \"HEAD\",\n url,\n responseType: \"void\",\n }).then(() => undefined);\n }\n\n /**\n * Escape hatch returning the full response envelope (status, headers, data).\n * Most callers should prefer {@link get}, {@link post}, etc.\n *\n * `data` is `unknown` by design; validate it with a type guard before use.\n */\n public async request(\n config: InternalRequestConfig,\n ): Promise<DmkNetworkResponse> {\n const url = buildUrl({\n url: config.url,\n params: config.params,\n baseUrl: this.baseUrl,\n });\n const { body, headers } = buildBodyAndHeaders({\n method: config.method,\n body: config.body,\n defaultHeaders: this.defaultHeaders,\n perRequestHeaders: config.headers,\n });\n const signal = buildSignal({\n timeoutMs: config.timeoutMs,\n externalSignal: config.signal,\n });\n const throwOnHttpError = config.throwOnHttpError ?? true;\n const responseType: DmkResponseType = config.responseType ?? \"json\";\n\n let response: Response;\n try {\n response = await this.getFetch()(url, {\n method: config.method,\n headers,\n body,\n signal,\n });\n } catch (cause) {\n throw wrapFetchError({\n cause,\n externalSignal: config.signal,\n timeoutMs: config.timeoutMs,\n });\n }\n\n if (!response.ok && throwOnHttpError) {\n const responseBody = await safeReadText(response);\n throw new DmkNetworkClientError({\n message: `HTTP error ${response.status} ${response.statusText}`.trim(),\n status: response.status,\n statusText: response.statusText,\n responseBody,\n });\n }\n\n const data = await parseBody(response, responseType);\n\n return {\n data,\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n ok: response.ok,\n };\n }\n}\n"],
5
- "mappings": "AAAA,OAAS,yBAAAA,MAA6B,0BACtC,OACE,uBAAAC,EACA,eAAAC,EACA,YAAAC,EAGA,aAAAC,EACA,gBAAAC,EACA,kBAAAC,MACK,4BAkFA,MAAMC,CAAiB,CACX,QACA,eACA,UAEjB,YAAYC,EAAmC,CAAC,EAAG,CACjD,KAAK,QAAUA,EAAQ,QACvB,KAAK,eAAiBA,EAAQ,SAAW,CAAC,EAC1C,KAAK,UAAYA,EAAQ,KAC3B,CAEQ,UAAyB,CAG/B,OAAO,KAAK,WAAa,WAAW,MAAM,KAAK,UAAU,CAC3D,CAEO,IAAIC,EAAaC,EAA6C,CACnE,OAAO,KAAK,QAAQ,CAAE,GAAGA,EAAQ,OAAQ,MAAO,IAAAD,CAAI,CAAC,EAAE,KACpDE,GAAQA,EAAI,IACf,CACF,CAEO,KACLF,EACAG,EACAF,EACkB,CAClB,OAAO,KAAK,QAAQ,CAAE,GAAGA,EAAQ,OAAQ,OAAQ,IAAAD,EAAK,KAAAG,CAAK,CAAC,EAAE,KAC3DD,GAAQA,EAAI,IACf,CACF,CAEO,IACLF,EACAG,EACAF,EACkB,CAClB,OAAO,KAAK,QAAQ,CAAE,GAAGA,EAAQ,OAAQ,MAAO,IAAAD,EAAK,KAAAG,CAAK,CAAC,EAAE,KAC1DD,GAAQA,EAAI,IACf,CACF,CAEO,MACLF,EACAG,EACAF,EACkB,CAClB,OAAO,KAAK,QAAQ,CAAE,GAAGA,EAAQ,OAAQ,QAAS,IAAAD,EAAK,KAAAG,CAAK,CAAC,EAAE,KAC5DD,GAAQA,EAAI,IACf,CACF,CAEO,OAAOF,EAAaC,EAA6C,CACtE,OAAO,KAAK,QAAQ,CAAE,GAAGA,EAAQ,OAAQ,SAAU,IAAAD,CAAI,CAAC,EAAE,KACvDE,GAAQA,EAAI,IACf,CACF,CAEO,KAAKF,EAAaC,EAA0C,CACjE,OAAO,KAAK,QAAQ,CAClB,GAAGA,EACH,OAAQ,OACR,IAAAD,EACA,aAAc,MAChB,CAAC,EAAE,KAAK,IAAG,EAAY,CACzB,CAQA,MAAa,QACXC,EAC6B,CAC7B,MAAMD,EAAMN,EAAS,CACnB,IAAKO,EAAO,IACZ,OAAQA,EAAO,OACf,QAAS,KAAK,OAChB,CAAC,EACK,CAAE,KAAAE,EAAM,QAAAC,CAAQ,EAAIZ,EAAoB,CAC5C,OAAQS,EAAO,OACf,KAAMA,EAAO,KACb,eAAgB,KAAK,eACrB,kBAAmBA,EAAO,OAC5B,CAAC,EACKI,EAASZ,EAAY,CACzB,UAAWQ,EAAO,UAClB,eAAgBA,EAAO,MACzB,CAAC,EACKK,EAAmBL,EAAO,kBAAoB,GAC9CM,EAAgCN,EAAO,cAAgB,OAE7D,IAAIO,EACJ,GAAI,CACFA,EAAW,MAAM,KAAK,SAAS,EAAER,EAAK,CACpC,OAAQC,EAAO,OACf,QAAAG,EACA,KAAAD,EACA,OAAAE,CACF,CAAC,CACH,OAASI,EAAO,CACd,MAAMZ,EAAe,CACnB,MAAAY,EACA,eAAgBR,EAAO,OACvB,UAAWA,EAAO,SACpB,CAAC,CACH,CAEA,GAAI,CAACO,EAAS,IAAMF,EAAkB,CACpC,MAAMI,EAAe,MAAMd,EAAaY,CAAQ,EAChD,MAAM,IAAIjB,EAAsB,CAC9B,QAAS,cAAciB,EAAS,MAAM,IAAIA,EAAS,UAAU,GAAG,KAAK,EACrE,OAAQA,EAAS,OACjB,WAAYA,EAAS,WACrB,aAAAE,CACF,CAAC,CACH,CAIA,MAAO,CACL,KAHW,MAAMf,EAAUa,EAAUD,CAAY,EAIjD,OAAQC,EAAS,OACjB,WAAYA,EAAS,WACrB,QAASA,EAAS,QAClB,GAAIA,EAAS,EACf,CACF,CACF",
4
+ "sourcesContent": ["import { DmkNetworkClientError } from \"./DmkNetworkClientError\";\nimport {\n buildBodyAndHeaders,\n buildSignal,\n buildUrl,\n type DmkQueryParams,\n type DmkResponseType,\n parseBody,\n safeReadText,\n wrapFetchError,\n} from \"./DmkNetworkClientHelpers\";\n\nexport type { DmkQueryParamValue } from \"./DmkNetworkClientHelpers\";\nexport type { DmkQueryParams, DmkResponseType };\n\n/**\n * Per-request configuration. Everything is optional \u2014 sensible defaults are\n * applied by the client.\n */\nexport type DmkRequestConfig = {\n /** Query params merged into the URL. `null`/`undefined` entries are skipped. */\n params?: DmkQueryParams;\n /** Per-request headers merged on top of the client's default headers. */\n headers?: Record<string, string>;\n /**\n * Per-request timeout in milliseconds. When unset (or `0`), the request\n * has no timeout.\n */\n timeoutMs?: number;\n /**\n * External abort signal. Composed with the internal timeout signal, so\n * either one firing will abort the request.\n */\n signal?: AbortSignal;\n /**\n * How to parse the response body. Defaults to `\"json\"`, except for `head`\n * which always resolves to `void`.\n */\n responseType?: DmkResponseType;\n /**\n * When `true` (default), non-2xx responses throw {@link DmkNetworkClientError}.\n * Set to `false` to resolve normally and inspect {@link DmkNetworkResponse}\n * via {@link DmkNetworkClient.request}.\n */\n throwOnHttpError?: boolean;\n};\n\n/**\n * Full response envelope returned by {@link DmkNetworkClient.request}.\n * The simple method helpers (`get`, `post`, \u2026) unwrap to `data` directly.\n *\n * `data` is intentionally typed as `unknown`: network payloads are untrusted\n * input, so callers must narrow it with a type guard or runtime validator\n * (e.g. the existing DTO mappers) before use.\n */\nexport type DmkNetworkResponse = {\n data: unknown;\n status: number;\n statusText: string;\n headers: Headers;\n ok: boolean;\n};\n\nexport type DmkNetworkClientOptions = {\n /** Base URL prepended to relative request URLs. */\n baseUrl?: string;\n /** Default headers merged into every request. */\n headers?: Record<string, string>;\n /** Injection point for tests. Defaults to `globalThis.fetch`. */\n fetch?: typeof fetch;\n};\n\ntype InternalRequestConfig = DmkRequestConfig & {\n method: string;\n url: string;\n body?: unknown;\n};\n\n/**\n * Minimal axios-like wrapper over `fetch`. Handles:\n *\n * - URL composition (base URL + relative path + query params from an object)\n * - Automatic JSON body encoding and `Content-Type` header\n * - Default and per-request headers merging\n * - Request timeout via `AbortSignal.timeout`, composable with a caller signal\n * - Automatic `response.ok` check with a typed {@link DmkNetworkClientError}\n * - Typed JSON / text / blob / arrayBuffer response parsing\n *\n * Use the high-level helpers ({@link DmkNetworkClient.get}, {@link DmkNetworkClient.post},\n * \u2026) for 95% of calls and {@link DmkNetworkClient.request} when you need the\n * full response envelope (status, headers).\n */\nexport class DmkNetworkClient {\n private readonly baseUrl?: string;\n private readonly defaultHeaders: Record<string, string>;\n private readonly fetchImpl?: typeof fetch;\n\n constructor(options: DmkNetworkClientOptions = {}) {\n this.baseUrl = options.baseUrl;\n this.defaultHeaders = options.headers ?? {};\n this.fetchImpl = options.fetch;\n }\n\n private getFetch(): typeof fetch {\n // Resolve `fetch` at call time so that spies installed on `globalThis.fetch`\n // after the client was constructed are still honored.\n return this.fetchImpl ?? globalThis.fetch.bind(globalThis);\n }\n\n public get(url: string, config?: DmkRequestConfig): Promise<unknown> {\n return this.request({ ...config, method: \"GET\", url }).then(\n (res) => res.data,\n );\n }\n\n public post(\n url: string,\n body?: unknown,\n config?: DmkRequestConfig,\n ): Promise<unknown> {\n return this.request({ ...config, method: \"POST\", url, body }).then(\n (res) => res.data,\n );\n }\n\n public put(\n url: string,\n body?: unknown,\n config?: DmkRequestConfig,\n ): Promise<unknown> {\n return this.request({ ...config, method: \"PUT\", url, body }).then(\n (res) => res.data,\n );\n }\n\n public patch(\n url: string,\n body?: unknown,\n config?: DmkRequestConfig,\n ): Promise<unknown> {\n return this.request({ ...config, method: \"PATCH\", url, body }).then(\n (res) => res.data,\n );\n }\n\n public delete(url: string, config?: DmkRequestConfig): Promise<unknown> {\n return this.request({ ...config, method: \"DELETE\", url }).then(\n (res) => res.data,\n );\n }\n\n public head(url: string, config?: DmkRequestConfig): Promise<void> {\n return this.request({\n ...config,\n method: \"HEAD\",\n url,\n responseType: \"void\",\n }).then(() => undefined);\n }\n\n /**\n * Escape hatch returning the full response envelope (status, headers, data).\n * Most callers should prefer {@link get}, {@link post}, etc.\n *\n * `data` is `unknown` by design; validate it with a type guard before use.\n */\n public async request(\n config: InternalRequestConfig,\n ): Promise<DmkNetworkResponse> {\n const url = buildUrl({\n url: config.url,\n params: config.params,\n baseUrl: this.baseUrl,\n });\n const { body, headers } = buildBodyAndHeaders({\n method: config.method,\n body: config.body,\n defaultHeaders: this.defaultHeaders,\n perRequestHeaders: config.headers,\n });\n const signal = buildSignal({\n timeoutMs: config.timeoutMs,\n externalSignal: config.signal,\n });\n const throwOnHttpError = config.throwOnHttpError ?? true;\n const responseType: DmkResponseType = config.responseType ?? \"json\";\n\n let response: Response;\n try {\n response = await this.getFetch()(url.toString(), {\n method: config.method,\n headers,\n body,\n signal,\n });\n } catch (cause) {\n throw wrapFetchError({\n cause,\n externalSignal: config.signal,\n timeoutMs: config.timeoutMs,\n });\n }\n\n if (!response.ok && throwOnHttpError) {\n const responseBody = await safeReadText(response);\n throw new DmkNetworkClientError({\n message: `HTTP error ${response.status} ${response.statusText}`.trim(),\n status: response.status,\n statusText: response.statusText,\n responseBody,\n });\n }\n\n const data = await parseBody(response, responseType);\n\n return {\n data,\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n ok: response.ok,\n };\n }\n}\n"],
5
+ "mappings": "AAAA,OAAS,yBAAAA,MAA6B,0BACtC,OACE,uBAAAC,EACA,eAAAC,EACA,YAAAC,EAGA,aAAAC,EACA,gBAAAC,EACA,kBAAAC,MACK,4BAkFA,MAAMC,CAAiB,CACX,QACA,eACA,UAEjB,YAAYC,EAAmC,CAAC,EAAG,CACjD,KAAK,QAAUA,EAAQ,QACvB,KAAK,eAAiBA,EAAQ,SAAW,CAAC,EAC1C,KAAK,UAAYA,EAAQ,KAC3B,CAEQ,UAAyB,CAG/B,OAAO,KAAK,WAAa,WAAW,MAAM,KAAK,UAAU,CAC3D,CAEO,IAAIC,EAAaC,EAA6C,CACnE,OAAO,KAAK,QAAQ,CAAE,GAAGA,EAAQ,OAAQ,MAAO,IAAAD,CAAI,CAAC,EAAE,KACpDE,GAAQA,EAAI,IACf,CACF,CAEO,KACLF,EACAG,EACAF,EACkB,CAClB,OAAO,KAAK,QAAQ,CAAE,GAAGA,EAAQ,OAAQ,OAAQ,IAAAD,EAAK,KAAAG,CAAK,CAAC,EAAE,KAC3DD,GAAQA,EAAI,IACf,CACF,CAEO,IACLF,EACAG,EACAF,EACkB,CAClB,OAAO,KAAK,QAAQ,CAAE,GAAGA,EAAQ,OAAQ,MAAO,IAAAD,EAAK,KAAAG,CAAK,CAAC,EAAE,KAC1DD,GAAQA,EAAI,IACf,CACF,CAEO,MACLF,EACAG,EACAF,EACkB,CAClB,OAAO,KAAK,QAAQ,CAAE,GAAGA,EAAQ,OAAQ,QAAS,IAAAD,EAAK,KAAAG,CAAK,CAAC,EAAE,KAC5DD,GAAQA,EAAI,IACf,CACF,CAEO,OAAOF,EAAaC,EAA6C,CACtE,OAAO,KAAK,QAAQ,CAAE,GAAGA,EAAQ,OAAQ,SAAU,IAAAD,CAAI,CAAC,EAAE,KACvDE,GAAQA,EAAI,IACf,CACF,CAEO,KAAKF,EAAaC,EAA0C,CACjE,OAAO,KAAK,QAAQ,CAClB,GAAGA,EACH,OAAQ,OACR,IAAAD,EACA,aAAc,MAChB,CAAC,EAAE,KAAK,IAAG,EAAY,CACzB,CAQA,MAAa,QACXC,EAC6B,CAC7B,MAAMD,EAAMN,EAAS,CACnB,IAAKO,EAAO,IACZ,OAAQA,EAAO,OACf,QAAS,KAAK,OAChB,CAAC,EACK,CAAE,KAAAE,EAAM,QAAAC,CAAQ,EAAIZ,EAAoB,CAC5C,OAAQS,EAAO,OACf,KAAMA,EAAO,KACb,eAAgB,KAAK,eACrB,kBAAmBA,EAAO,OAC5B,CAAC,EACKI,EAASZ,EAAY,CACzB,UAAWQ,EAAO,UAClB,eAAgBA,EAAO,MACzB,CAAC,EACKK,EAAmBL,EAAO,kBAAoB,GAC9CM,EAAgCN,EAAO,cAAgB,OAE7D,IAAIO,EACJ,GAAI,CACFA,EAAW,MAAM,KAAK,SAAS,EAAER,EAAI,SAAS,EAAG,CAC/C,OAAQC,EAAO,OACf,QAAAG,EACA,KAAAD,EACA,OAAAE,CACF,CAAC,CACH,OAASI,EAAO,CACd,MAAMZ,EAAe,CACnB,MAAAY,EACA,eAAgBR,EAAO,OACvB,UAAWA,EAAO,SACpB,CAAC,CACH,CAEA,GAAI,CAACO,EAAS,IAAMF,EAAkB,CACpC,MAAMI,EAAe,MAAMd,EAAaY,CAAQ,EAChD,MAAM,IAAIjB,EAAsB,CAC9B,QAAS,cAAciB,EAAS,MAAM,IAAIA,EAAS,UAAU,GAAG,KAAK,EACrE,OAAQA,EAAS,OACjB,WAAYA,EAAS,WACrB,aAAAE,CACF,CAAC,CACH,CAIA,MAAO,CACL,KAHW,MAAMf,EAAUa,EAAUD,CAAY,EAIjD,OAAQC,EAAS,OACjB,WAAYA,EAAS,WACrB,QAASA,EAAS,QAClB,GAAIA,EAAS,EACf,CACF,CACF",
6
6
  "names": ["DmkNetworkClientError", "buildBodyAndHeaders", "buildSignal", "buildUrl", "parseBody", "safeReadText", "wrapFetchError", "DmkNetworkClient", "options", "url", "config", "res", "body", "headers", "signal", "throwOnHttpError", "responseType", "response", "cause", "responseBody"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import{DmkNetworkClient as s}from"./DmkNetworkClient";import{DmkNetworkClientError as i}from"./DmkNetworkClientError";describe("DmkNetworkClient",()=>{const c=(e,o={})=>new Response(JSON.stringify(e),{status:200,headers:{"Content-Type":"application/json"},...o});describe("URL composition",()=>{it("should send requests to an absolute URL as-is",async()=>{const e=vi.fn().mockResolvedValue(c({ok:!0}));await new s({fetch:e}).get("https://api.example.com/items");const[t]=e.mock.calls[0];expect(t).toBeInstanceOf(URL),expect(t.toString()).toBe("https://api.example.com/items")}),it("should prepend baseUrl to relative paths with slash normalization",async()=>{const e=vi.fn().mockImplementation(()=>Promise.resolve(c({ok:!0}))),o=new s({baseUrl:"https://api.example.com/",fetch:e});await o.get("/items"),await o.get("items"),expect(e.mock.calls[0][0].toString()).toBe("https://api.example.com/items"),expect(e.mock.calls[1][0].toString()).toBe("https://api.example.com/items")}),it("should set URL search params from the config",async()=>{const e=vi.fn().mockResolvedValue(c({ok:!0}));await new s({fetch:e}).get("https://api.example.com/items",{params:{chain:1,contract:"0xabc",active:!0,skip:null,alsoSkip:void 0}});const t=e.mock.calls[0][0];expect(t.searchParams.get("chain")).toBe("1"),expect(t.searchParams.get("contract")).toBe("0xabc"),expect(t.searchParams.get("active")).toBe("true"),expect(t.searchParams.has("skip")).toBe(!1),expect(t.searchParams.has("alsoSkip")).toBe(!1)})}),describe("headers",()=>{it("should merge default and per-request headers",async()=>{const e=vi.fn().mockResolvedValue(c({ok:!0}));await new s({fetch:e,headers:{"X-Default":"default","X-Shared":"from-default"}}).get("https://api.example.com/items",{headers:{"X-Shared":"overridden","X-Per-Request":"per"}});const t=e.mock.calls[0][1];expect(t.headers).toMatchObject({"X-Default":"default","X-Shared":"overridden","X-Per-Request":"per"})})}),describe("body handling",()=>{it("should JSON-stringify plain-object bodies and set Content-Type",async()=>{const e=vi.fn().mockResolvedValue(c({ok:!0}));await new s({fetch:e}).post("https://api.example.com/items",{foo:"bar"});const t=e.mock.calls[0][1];expect(t.method).toBe("POST"),expect(t.body).toBe(JSON.stringify({foo:"bar"})),expect(t.headers).toMatchObject({"Content-Type":"application/json"})}),it("should not override an explicit Content-Type header",async()=>{const e=vi.fn().mockResolvedValue(c({ok:!0}));await new s({fetch:e}).post("https://api.example.com/items",{foo:"bar"},{headers:{"content-type":"application/vnd.custom+json"}});const t=e.mock.calls[0][1];expect(t.headers).toMatchObject({"content-type":"application/vnd.custom+json"})}),it("should pass raw BodyInit values through unchanged",async()=>{const e=vi.fn().mockResolvedValue(c({ok:!0})),o=new s({fetch:e}),t=new FormData;t.set("field","value"),await o.post("https://api.example.com/items",t);const n=e.mock.calls[0][1];expect(n.body).toBe(t),expect(n.headers).not.toMatchObject({"Content-Type":"application/json"})}),it("should not send a body on GET or HEAD",async()=>{const e=vi.fn().mockImplementation(()=>Promise.resolve(c({ok:!0}))),o=new s({fetch:e});await o.get("https://api.example.com/items"),await o.head("https://api.example.com/items"),expect(e.mock.calls[0][1]).toMatchObject({body:void 0}),expect(e.mock.calls[1][1]).toMatchObject({body:void 0})})}),describe("response parsing",()=>{it("should return the parsed JSON body by default",async()=>{const e=vi.fn().mockResolvedValue(c({hello:"world"})),t=await new s({fetch:e}).get("https://api.example.com/items");expect(t).toEqual({hello:"world"})}),it("should return text when responseType is 'text'",async()=>{const e=vi.fn().mockResolvedValue(new Response("plain-body",{status:200})),t=await new s({fetch:e}).get("https://api.example.com/items",{responseType:"text"});expect(t).toBe("plain-body")}),it("should resolve HEAD to void without reading the body",async()=>{const e=vi.fn().mockResolvedValue(new Response(null,{status:200})),t=await new s({fetch:e}).head("https://api.example.com/items");expect(t).toBeUndefined()}),it("should resolve empty JSON body to undefined",async()=>{const e=vi.fn().mockResolvedValue(new Response(null,{status:204})),t=await new s({fetch:e}).get("https://api.example.com/items");expect(t).toBeUndefined()}),it("should throw a DmkNetworkClientError on malformed JSON",async()=>{const e=vi.fn().mockResolvedValue(new Response("not-json",{status:200})),o=new s({fetch:e});await expect(o.get("https://api.example.com/items")).rejects.toBeInstanceOf(i)})}),describe("error handling",()=>{it("should throw DmkNetworkClientError with status on non-2xx responses",async()=>{const e=vi.fn().mockResolvedValue(new Response("boom",{status:500,statusText:"Server Error"})),t=await new s({fetch:e}).get("https://api.example.com/items").catch(a=>a);expect(t).toBeInstanceOf(i);const n=t;expect(n.status).toBe(500),expect(n.statusText).toBe("Server Error"),expect(n.responseBody).toBe("boom"),expect(n.isTimeout).toBe(!1),expect(n.isAbort).toBe(!1)}),it("should not throw when throwOnHttpError is disabled",async()=>{const e=vi.fn().mockResolvedValue(new Response("boom",{status:500})),t=await new s({fetch:e}).request({method:"GET",url:"https://api.example.com/items",responseType:"text",throwOnHttpError:!1});expect(t.status).toBe(500),expect(t.ok).toBe(!1),expect(t.data).toBe("boom")}),it("should wrap generic fetch failures into DmkNetworkClientError",async()=>{const e=new TypeError("network down"),o=vi.fn().mockRejectedValue(e),n=await new s({fetch:o}).get("https://api.example.com/items").catch(a=>a);expect(n).toBeInstanceOf(i),expect(n.cause).toBe(e)})}),describe("timeout",()=>{it("should pass an AbortSignal when timeoutMs is configured",async()=>{const e=vi.fn().mockResolvedValue(c({ok:!0}));await new s({fetch:e}).get("https://api.example.com/items",{timeoutMs:1e3});const t=e.mock.calls[0][1];expect(t.signal).toBeInstanceOf(AbortSignal)}),it("should not pass a signal when no timeout and no external signal are set",async()=>{const e=vi.fn().mockResolvedValue(c({ok:!0}));await new s({fetch:e}).get("https://api.example.com/items");const t=e.mock.calls[0][1];expect(t.signal).toBeUndefined()}),it("should mark the error as a timeout when fetch rejects with TimeoutError",async()=>{const e=new Error("The operation was aborted");e.name="TimeoutError";const o=vi.fn().mockRejectedValue(e),n=await new s({fetch:o}).get("https://api.example.com/items",{timeoutMs:10}).catch(a=>a);expect(n).toBeInstanceOf(i),expect(n.isTimeout).toBe(!0),expect(n.isAbort).toBe(!1)}),it("should mark the error as an abort when the caller signal is aborted",async()=>{const e=new AbortController;e.abort();const o=new Error("aborted");o.name="AbortError";const t=vi.fn().mockRejectedValue(o),a=await new s({fetch:t}).get("https://api.example.com/items",{signal:e.signal}).catch(r=>r);expect(a).toBeInstanceOf(i),expect(a.isAbort).toBe(!0),expect(a.isTimeout).toBe(!1)})}),describe("request envelope",()=>{it("should expose full response metadata via request()",async()=>{const e=vi.fn().mockResolvedValue(new Response(JSON.stringify({hello:"world"}),{status:201,statusText:"Created",headers:{"X-Custom":"1","Content-Type":"application/json"}})),t=await new s({fetch:e}).request({method:"GET",url:"https://api.example.com/items"});expect(t.status).toBe(201),expect(t.statusText).toBe("Created"),expect(t.ok).toBe(!0),expect(t.data).toEqual({hello:"world"}),expect(t.headers.get("X-Custom")).toBe("1")})})});
1
+ import{DmkNetworkClient as n}from"./DmkNetworkClient";import{DmkNetworkClientError as i}from"./DmkNetworkClientError";describe("DmkNetworkClient",()=>{const c=(e,o={})=>new Response(JSON.stringify(e),{status:200,headers:{"Content-Type":"application/json"},...o});describe("URL composition",()=>{it("should send requests to an absolute URL as-is",async()=>{const e=vi.fn().mockResolvedValue(c({ok:!0}));await new n({fetch:e}).get("https://api.example.com/items");const[t]=e.mock.calls[0];expect(typeof t).toBe("string"),expect(t).toBe("https://api.example.com/items")}),it("should prepend baseUrl to relative paths with slash normalization",async()=>{const e=vi.fn().mockImplementation(()=>Promise.resolve(c({ok:!0}))),o=new n({baseUrl:"https://api.example.com/",fetch:e});await o.get("/items"),await o.get("items"),expect(e.mock.calls[0][0]).toBe("https://api.example.com/items"),expect(e.mock.calls[1][0]).toBe("https://api.example.com/items")}),it("should set URL search params from the config",async()=>{const e=vi.fn().mockResolvedValue(c({ok:!0}));await new n({fetch:e}).get("https://api.example.com/items",{params:{chain:1,contract:"0xabc",active:!0,skip:null,alsoSkip:void 0}});const t=e.mock.calls[0][0];expect(typeof t).toBe("string");const s=new URL(t);expect(s.searchParams.get("chain")).toBe("1"),expect(s.searchParams.get("contract")).toBe("0xabc"),expect(s.searchParams.get("active")).toBe("true"),expect(s.searchParams.has("skip")).toBe(!1),expect(s.searchParams.has("alsoSkip")).toBe(!1)})}),describe("headers",()=>{it("should merge default and per-request headers",async()=>{const e=vi.fn().mockResolvedValue(c({ok:!0}));await new n({fetch:e,headers:{"X-Default":"default","X-Shared":"from-default"}}).get("https://api.example.com/items",{headers:{"X-Shared":"overridden","X-Per-Request":"per"}});const t=e.mock.calls[0][1];expect(t.headers).toMatchObject({"X-Default":"default","X-Shared":"overridden","X-Per-Request":"per"})})}),describe("body handling",()=>{it("should JSON-stringify plain-object bodies and set Content-Type",async()=>{const e=vi.fn().mockResolvedValue(c({ok:!0}));await new n({fetch:e}).post("https://api.example.com/items",{foo:"bar"});const t=e.mock.calls[0][1];expect(t.method).toBe("POST"),expect(t.body).toBe(JSON.stringify({foo:"bar"})),expect(t.headers).toMatchObject({"Content-Type":"application/json"})}),it("should not override an explicit Content-Type header",async()=>{const e=vi.fn().mockResolvedValue(c({ok:!0}));await new n({fetch:e}).post("https://api.example.com/items",{foo:"bar"},{headers:{"content-type":"application/vnd.custom+json"}});const t=e.mock.calls[0][1];expect(t.headers).toMatchObject({"content-type":"application/vnd.custom+json"})}),it("should pass raw BodyInit values through unchanged",async()=>{const e=vi.fn().mockResolvedValue(c({ok:!0})),o=new n({fetch:e}),t=new FormData;t.set("field","value"),await o.post("https://api.example.com/items",t);const s=e.mock.calls[0][1];expect(s.body).toBe(t),expect(s.headers).not.toMatchObject({"Content-Type":"application/json"})}),it("should not send a body on GET or HEAD",async()=>{const e=vi.fn().mockImplementation(()=>Promise.resolve(c({ok:!0}))),o=new n({fetch:e});await o.get("https://api.example.com/items"),await o.head("https://api.example.com/items"),expect(e.mock.calls[0][1]).toMatchObject({body:void 0}),expect(e.mock.calls[1][1]).toMatchObject({body:void 0})})}),describe("response parsing",()=>{it("should return the parsed JSON body by default",async()=>{const e=vi.fn().mockResolvedValue(c({hello:"world"})),t=await new n({fetch:e}).get("https://api.example.com/items");expect(t).toEqual({hello:"world"})}),it("should return text when responseType is 'text'",async()=>{const e=vi.fn().mockResolvedValue(new Response("plain-body",{status:200})),t=await new n({fetch:e}).get("https://api.example.com/items",{responseType:"text"});expect(t).toBe("plain-body")}),it("should resolve HEAD to void without reading the body",async()=>{const e=vi.fn().mockResolvedValue(new Response(null,{status:200})),t=await new n({fetch:e}).head("https://api.example.com/items");expect(t).toBeUndefined()}),it("should resolve empty JSON body to undefined",async()=>{const e=vi.fn().mockResolvedValue(new Response(null,{status:204})),t=await new n({fetch:e}).get("https://api.example.com/items");expect(t).toBeUndefined()}),it("should throw a DmkNetworkClientError on malformed JSON",async()=>{const e=vi.fn().mockResolvedValue(new Response("not-json",{status:200})),o=new n({fetch:e});await expect(o.get("https://api.example.com/items")).rejects.toBeInstanceOf(i)})}),describe("error handling",()=>{it("should throw DmkNetworkClientError with status on non-2xx responses",async()=>{const e=vi.fn().mockResolvedValue(new Response("boom",{status:500,statusText:"Server Error"})),t=await new n({fetch:e}).get("https://api.example.com/items").catch(a=>a);expect(t).toBeInstanceOf(i);const s=t;expect(s.status).toBe(500),expect(s.statusText).toBe("Server Error"),expect(s.responseBody).toBe("boom"),expect(s.isTimeout).toBe(!1),expect(s.isAbort).toBe(!1)}),it("should not throw when throwOnHttpError is disabled",async()=>{const e=vi.fn().mockResolvedValue(new Response("boom",{status:500})),t=await new n({fetch:e}).request({method:"GET",url:"https://api.example.com/items",responseType:"text",throwOnHttpError:!1});expect(t.status).toBe(500),expect(t.ok).toBe(!1),expect(t.data).toBe("boom")}),it("should wrap generic fetch failures into DmkNetworkClientError",async()=>{const e=new TypeError("network down"),o=vi.fn().mockRejectedValue(e),s=await new n({fetch:o}).get("https://api.example.com/items").catch(a=>a);expect(s).toBeInstanceOf(i),expect(s.cause).toBe(e)})}),describe("timeout",()=>{it("should pass an AbortSignal when timeoutMs is configured",async()=>{const e=vi.fn().mockResolvedValue(c({ok:!0}));await new n({fetch:e}).get("https://api.example.com/items",{timeoutMs:1e3});const t=e.mock.calls[0][1];expect(t.signal).toBeInstanceOf(AbortSignal)}),it("should not pass a signal when no timeout and no external signal are set",async()=>{const e=vi.fn().mockResolvedValue(c({ok:!0}));await new n({fetch:e}).get("https://api.example.com/items");const t=e.mock.calls[0][1];expect(t.signal).toBeUndefined()}),it("should mark the error as a timeout when fetch rejects with TimeoutError",async()=>{const e=new Error("The operation was aborted");e.name="TimeoutError";const o=vi.fn().mockRejectedValue(e),s=await new n({fetch:o}).get("https://api.example.com/items",{timeoutMs:10}).catch(a=>a);expect(s).toBeInstanceOf(i),expect(s.isTimeout).toBe(!0),expect(s.isAbort).toBe(!1)}),it("should mark the error as an abort when the caller signal is aborted",async()=>{const e=new AbortController;e.abort();const o=new Error("aborted");o.name="AbortError";const t=vi.fn().mockRejectedValue(o),a=await new n({fetch:t}).get("https://api.example.com/items",{signal:e.signal}).catch(r=>r);expect(a).toBeInstanceOf(i),expect(a.isAbort).toBe(!0),expect(a.isTimeout).toBe(!1)})}),describe("request envelope",()=>{it("should expose full response metadata via request()",async()=>{const e=vi.fn().mockResolvedValue(new Response(JSON.stringify({hello:"world"}),{status:201,statusText:"Created",headers:{"X-Custom":"1","Content-Type":"application/json"}})),t=await new n({fetch:e}).request({method:"GET",url:"https://api.example.com/items"});expect(t.status).toBe(201),expect(t.statusText).toBe("Created"),expect(t.ok).toBe(!0),expect(t.data).toEqual({hello:"world"}),expect(t.headers.get("X-Custom")).toBe("1")})})});
2
2
  //# sourceMappingURL=DmkNetworkClient.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/api/network/DmkNetworkClient.test.ts"],
4
- "sourcesContent": ["import { DmkNetworkClient } from \"./DmkNetworkClient\";\nimport { DmkNetworkClientError } from \"./DmkNetworkClientError\";\n\ndescribe(\"DmkNetworkClient\", () => {\n const jsonResponse = (body: unknown, init: ResponseInit = {}) =>\n new Response(JSON.stringify(body), {\n status: 200,\n headers: { \"Content-Type\": \"application/json\" },\n ...init,\n });\n\n describe(\"URL composition\", () => {\n it(\"should send requests to an absolute URL as-is\", async () => {\n const fetchMock = vi.fn().mockResolvedValue(jsonResponse({ ok: true }));\n const client = new DmkNetworkClient({ fetch: fetchMock });\n\n await client.get(\"https://api.example.com/items\");\n\n const [calledUrl] = fetchMock.mock.calls[0]!;\n expect(calledUrl).toBeInstanceOf(URL);\n expect((calledUrl as URL).toString()).toBe(\n \"https://api.example.com/items\",\n );\n });\n\n it(\"should prepend baseUrl to relative paths with slash normalization\", async () => {\n const fetchMock = vi\n .fn()\n .mockImplementation(() => Promise.resolve(jsonResponse({ ok: true })));\n const client = new DmkNetworkClient({\n baseUrl: \"https://api.example.com/\",\n fetch: fetchMock,\n });\n\n await client.get(\"/items\");\n await client.get(\"items\");\n\n expect((fetchMock.mock.calls[0]![0] as URL).toString()).toBe(\n \"https://api.example.com/items\",\n );\n expect((fetchMock.mock.calls[1]![0] as URL).toString()).toBe(\n \"https://api.example.com/items\",\n );\n });\n\n it(\"should set URL search params from the config\", async () => {\n const fetchMock = vi.fn().mockResolvedValue(jsonResponse({ ok: true }));\n const client = new DmkNetworkClient({ fetch: fetchMock });\n\n await client.get(\"https://api.example.com/items\", {\n params: {\n chain: 1,\n contract: \"0xabc\",\n active: true,\n skip: null,\n alsoSkip: undefined,\n },\n });\n\n const url = fetchMock.mock.calls[0]![0] as URL;\n expect(url.searchParams.get(\"chain\")).toBe(\"1\");\n expect(url.searchParams.get(\"contract\")).toBe(\"0xabc\");\n expect(url.searchParams.get(\"active\")).toBe(\"true\");\n expect(url.searchParams.has(\"skip\")).toBe(false);\n expect(url.searchParams.has(\"alsoSkip\")).toBe(false);\n });\n });\n\n describe(\"headers\", () => {\n it(\"should merge default and per-request headers\", async () => {\n const fetchMock = vi.fn().mockResolvedValue(jsonResponse({ ok: true }));\n const client = new DmkNetworkClient({\n fetch: fetchMock,\n headers: { \"X-Default\": \"default\", \"X-Shared\": \"from-default\" },\n });\n\n await client.get(\"https://api.example.com/items\", {\n headers: { \"X-Shared\": \"overridden\", \"X-Per-Request\": \"per\" },\n });\n\n const init = fetchMock.mock.calls[0]![1] as RequestInit;\n expect(init.headers).toMatchObject({\n \"X-Default\": \"default\",\n \"X-Shared\": \"overridden\",\n \"X-Per-Request\": \"per\",\n });\n });\n });\n\n describe(\"body handling\", () => {\n it(\"should JSON-stringify plain-object bodies and set Content-Type\", async () => {\n const fetchMock = vi.fn().mockResolvedValue(jsonResponse({ ok: true }));\n const client = new DmkNetworkClient({ fetch: fetchMock });\n\n await client.post(\"https://api.example.com/items\", { foo: \"bar\" });\n\n const init = fetchMock.mock.calls[0]![1] as RequestInit;\n expect(init.method).toBe(\"POST\");\n expect(init.body).toBe(JSON.stringify({ foo: \"bar\" }));\n expect(init.headers).toMatchObject({\n \"Content-Type\": \"application/json\",\n });\n });\n\n it(\"should not override an explicit Content-Type header\", async () => {\n const fetchMock = vi.fn().mockResolvedValue(jsonResponse({ ok: true }));\n const client = new DmkNetworkClient({ fetch: fetchMock });\n\n await client.post(\n \"https://api.example.com/items\",\n { foo: \"bar\" },\n { headers: { \"content-type\": \"application/vnd.custom+json\" } },\n );\n\n const init = fetchMock.mock.calls[0]![1] as RequestInit;\n expect(init.headers).toMatchObject({\n \"content-type\": \"application/vnd.custom+json\",\n });\n });\n\n it(\"should pass raw BodyInit values through unchanged\", async () => {\n const fetchMock = vi.fn().mockResolvedValue(jsonResponse({ ok: true }));\n const client = new DmkNetworkClient({ fetch: fetchMock });\n const formData = new FormData();\n formData.set(\"field\", \"value\");\n\n await client.post(\"https://api.example.com/items\", formData);\n\n const init = fetchMock.mock.calls[0]![1] as RequestInit;\n expect(init.body).toBe(formData);\n expect(init.headers).not.toMatchObject({\n \"Content-Type\": \"application/json\",\n });\n });\n\n it(\"should not send a body on GET or HEAD\", async () => {\n const fetchMock = vi\n .fn()\n .mockImplementation(() => Promise.resolve(jsonResponse({ ok: true })));\n const client = new DmkNetworkClient({ fetch: fetchMock });\n\n await client.get(\"https://api.example.com/items\");\n await client.head(\"https://api.example.com/items\");\n\n expect(fetchMock.mock.calls[0]![1]).toMatchObject({ body: undefined });\n expect(fetchMock.mock.calls[1]![1]).toMatchObject({ body: undefined });\n });\n });\n\n describe(\"response parsing\", () => {\n it(\"should return the parsed JSON body by default\", async () => {\n const fetchMock = vi\n .fn()\n .mockResolvedValue(jsonResponse({ hello: \"world\" }));\n const client = new DmkNetworkClient({ fetch: fetchMock });\n\n const result = await client.get(\"https://api.example.com/items\");\n\n expect(result).toEqual({ hello: \"world\" });\n });\n\n it(\"should return text when responseType is 'text'\", async () => {\n const fetchMock = vi\n .fn()\n .mockResolvedValue(new Response(\"plain-body\", { status: 200 }));\n const client = new DmkNetworkClient({ fetch: fetchMock });\n\n const result = await client.get(\"https://api.example.com/items\", {\n responseType: \"text\",\n });\n\n expect(result).toBe(\"plain-body\");\n });\n\n it(\"should resolve HEAD to void without reading the body\", async () => {\n const fetchMock = vi\n .fn()\n .mockResolvedValue(new Response(null, { status: 200 }));\n const client = new DmkNetworkClient({ fetch: fetchMock });\n\n const result = await client.head(\"https://api.example.com/items\");\n\n expect(result).toBeUndefined();\n });\n\n it(\"should resolve empty JSON body to undefined\", async () => {\n const fetchMock = vi\n .fn()\n .mockResolvedValue(new Response(null, { status: 204 }));\n const client = new DmkNetworkClient({ fetch: fetchMock });\n\n const result = await client.get(\"https://api.example.com/items\");\n\n expect(result).toBeUndefined();\n });\n\n it(\"should throw a DmkNetworkClientError on malformed JSON\", async () => {\n const fetchMock = vi\n .fn()\n .mockResolvedValue(new Response(\"not-json\", { status: 200 }));\n const client = new DmkNetworkClient({ fetch: fetchMock });\n\n await expect(\n client.get(\"https://api.example.com/items\"),\n ).rejects.toBeInstanceOf(DmkNetworkClientError);\n });\n });\n\n describe(\"error handling\", () => {\n it(\"should throw DmkNetworkClientError with status on non-2xx responses\", async () => {\n const fetchMock = vi.fn().mockResolvedValue(\n new Response(\"boom\", {\n status: 500,\n statusText: \"Server Error\",\n }),\n );\n const client = new DmkNetworkClient({ fetch: fetchMock });\n\n const error = await client\n .get(\"https://api.example.com/items\")\n .catch((e: unknown) => e);\n\n expect(error).toBeInstanceOf(DmkNetworkClientError);\n const dmkError = error as DmkNetworkClientError;\n expect(dmkError.status).toBe(500);\n expect(dmkError.statusText).toBe(\"Server Error\");\n expect(dmkError.responseBody).toBe(\"boom\");\n expect(dmkError.isTimeout).toBe(false);\n expect(dmkError.isAbort).toBe(false);\n });\n\n it(\"should not throw when throwOnHttpError is disabled\", async () => {\n const fetchMock = vi\n .fn()\n .mockResolvedValue(new Response(\"boom\", { status: 500 }));\n const client = new DmkNetworkClient({ fetch: fetchMock });\n\n const response = await client.request({\n method: \"GET\",\n url: \"https://api.example.com/items\",\n responseType: \"text\",\n throwOnHttpError: false,\n });\n\n expect(response.status).toBe(500);\n expect(response.ok).toBe(false);\n expect(response.data).toBe(\"boom\");\n });\n\n it(\"should wrap generic fetch failures into DmkNetworkClientError\", async () => {\n const cause = new TypeError(\"network down\");\n const fetchMock = vi.fn().mockRejectedValue(cause);\n const client = new DmkNetworkClient({ fetch: fetchMock });\n\n const error = await client\n .get(\"https://api.example.com/items\")\n .catch((e: unknown) => e);\n\n expect(error).toBeInstanceOf(DmkNetworkClientError);\n expect((error as DmkNetworkClientError).cause).toBe(cause);\n });\n });\n\n describe(\"timeout\", () => {\n it(\"should pass an AbortSignal when timeoutMs is configured\", async () => {\n const fetchMock = vi.fn().mockResolvedValue(jsonResponse({ ok: true }));\n const client = new DmkNetworkClient({ fetch: fetchMock });\n\n await client.get(\"https://api.example.com/items\", { timeoutMs: 1000 });\n\n const init = fetchMock.mock.calls[0]![1] as RequestInit;\n expect(init.signal).toBeInstanceOf(AbortSignal);\n });\n\n it(\"should not pass a signal when no timeout and no external signal are set\", async () => {\n const fetchMock = vi.fn().mockResolvedValue(jsonResponse({ ok: true }));\n const client = new DmkNetworkClient({ fetch: fetchMock });\n\n await client.get(\"https://api.example.com/items\");\n\n const init = fetchMock.mock.calls[0]![1] as RequestInit;\n expect(init.signal).toBeUndefined();\n });\n\n it(\"should mark the error as a timeout when fetch rejects with TimeoutError\", async () => {\n const timeoutError = new Error(\"The operation was aborted\");\n timeoutError.name = \"TimeoutError\";\n const fetchMock = vi.fn().mockRejectedValue(timeoutError);\n const client = new DmkNetworkClient({ fetch: fetchMock });\n\n const error = await client\n .get(\"https://api.example.com/items\", { timeoutMs: 10 })\n .catch((e: unknown) => e);\n\n expect(error).toBeInstanceOf(DmkNetworkClientError);\n expect((error as DmkNetworkClientError).isTimeout).toBe(true);\n expect((error as DmkNetworkClientError).isAbort).toBe(false);\n });\n\n it(\"should mark the error as an abort when the caller signal is aborted\", async () => {\n const abortController = new AbortController();\n abortController.abort();\n const abortError = new Error(\"aborted\");\n abortError.name = \"AbortError\";\n const fetchMock = vi.fn().mockRejectedValue(abortError);\n const client = new DmkNetworkClient({ fetch: fetchMock });\n\n const error = await client\n .get(\"https://api.example.com/items\", {\n signal: abortController.signal,\n })\n .catch((e: unknown) => e);\n\n expect(error).toBeInstanceOf(DmkNetworkClientError);\n expect((error as DmkNetworkClientError).isAbort).toBe(true);\n expect((error as DmkNetworkClientError).isTimeout).toBe(false);\n });\n });\n\n describe(\"request envelope\", () => {\n it(\"should expose full response metadata via request()\", async () => {\n const fetchMock = vi.fn().mockResolvedValue(\n new Response(JSON.stringify({ hello: \"world\" }), {\n status: 201,\n statusText: \"Created\",\n headers: { \"X-Custom\": \"1\", \"Content-Type\": \"application/json\" },\n }),\n );\n const client = new DmkNetworkClient({ fetch: fetchMock });\n\n const response = await client.request({\n method: \"GET\",\n url: \"https://api.example.com/items\",\n });\n\n expect(response.status).toBe(201);\n expect(response.statusText).toBe(\"Created\");\n expect(response.ok).toBe(true);\n expect(response.data).toEqual({ hello: \"world\" });\n expect(response.headers.get(\"X-Custom\")).toBe(\"1\");\n });\n });\n});\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { DmkNetworkClient } from \"./DmkNetworkClient\";\nimport { DmkNetworkClientError } from \"./DmkNetworkClientError\";\n\ndescribe(\"DmkNetworkClient\", () => {\n const jsonResponse = (body: unknown, init: ResponseInit = {}) =>\n new Response(JSON.stringify(body), {\n status: 200,\n headers: { \"Content-Type\": \"application/json\" },\n ...init,\n });\n\n describe(\"URL composition\", () => {\n it(\"should send requests to an absolute URL as-is\", async () => {\n const fetchMock = vi.fn().mockResolvedValue(jsonResponse({ ok: true }));\n const client = new DmkNetworkClient({ fetch: fetchMock });\n\n await client.get(\"https://api.example.com/items\");\n\n const [calledUrl] = fetchMock.mock.calls[0]!;\n expect(typeof calledUrl).toBe(\"string\");\n expect(calledUrl).toBe(\"https://api.example.com/items\");\n });\n\n it(\"should prepend baseUrl to relative paths with slash normalization\", async () => {\n const fetchMock = vi\n .fn()\n .mockImplementation(() => Promise.resolve(jsonResponse({ ok: true })));\n const client = new DmkNetworkClient({\n baseUrl: \"https://api.example.com/\",\n fetch: fetchMock,\n });\n\n await client.get(\"/items\");\n await client.get(\"items\");\n\n expect(fetchMock.mock.calls[0]![0]).toBe(\"https://api.example.com/items\");\n expect(fetchMock.mock.calls[1]![0]).toBe(\"https://api.example.com/items\");\n });\n\n it(\"should set URL search params from the config\", async () => {\n const fetchMock = vi.fn().mockResolvedValue(jsonResponse({ ok: true }));\n const client = new DmkNetworkClient({ fetch: fetchMock });\n\n await client.get(\"https://api.example.com/items\", {\n params: {\n chain: 1,\n contract: \"0xabc\",\n active: true,\n skip: null,\n alsoSkip: undefined,\n },\n });\n\n const calledUrl = fetchMock.mock.calls[0]![0] as string;\n expect(typeof calledUrl).toBe(\"string\");\n const url = new URL(calledUrl);\n expect(url.searchParams.get(\"chain\")).toBe(\"1\");\n expect(url.searchParams.get(\"contract\")).toBe(\"0xabc\");\n expect(url.searchParams.get(\"active\")).toBe(\"true\");\n expect(url.searchParams.has(\"skip\")).toBe(false);\n expect(url.searchParams.has(\"alsoSkip\")).toBe(false);\n });\n });\n\n describe(\"headers\", () => {\n it(\"should merge default and per-request headers\", async () => {\n const fetchMock = vi.fn().mockResolvedValue(jsonResponse({ ok: true }));\n const client = new DmkNetworkClient({\n fetch: fetchMock,\n headers: { \"X-Default\": \"default\", \"X-Shared\": \"from-default\" },\n });\n\n await client.get(\"https://api.example.com/items\", {\n headers: { \"X-Shared\": \"overridden\", \"X-Per-Request\": \"per\" },\n });\n\n const init = fetchMock.mock.calls[0]![1] as RequestInit;\n expect(init.headers).toMatchObject({\n \"X-Default\": \"default\",\n \"X-Shared\": \"overridden\",\n \"X-Per-Request\": \"per\",\n });\n });\n });\n\n describe(\"body handling\", () => {\n it(\"should JSON-stringify plain-object bodies and set Content-Type\", async () => {\n const fetchMock = vi.fn().mockResolvedValue(jsonResponse({ ok: true }));\n const client = new DmkNetworkClient({ fetch: fetchMock });\n\n await client.post(\"https://api.example.com/items\", { foo: \"bar\" });\n\n const init = fetchMock.mock.calls[0]![1] as RequestInit;\n expect(init.method).toBe(\"POST\");\n expect(init.body).toBe(JSON.stringify({ foo: \"bar\" }));\n expect(init.headers).toMatchObject({\n \"Content-Type\": \"application/json\",\n });\n });\n\n it(\"should not override an explicit Content-Type header\", async () => {\n const fetchMock = vi.fn().mockResolvedValue(jsonResponse({ ok: true }));\n const client = new DmkNetworkClient({ fetch: fetchMock });\n\n await client.post(\n \"https://api.example.com/items\",\n { foo: \"bar\" },\n { headers: { \"content-type\": \"application/vnd.custom+json\" } },\n );\n\n const init = fetchMock.mock.calls[0]![1] as RequestInit;\n expect(init.headers).toMatchObject({\n \"content-type\": \"application/vnd.custom+json\",\n });\n });\n\n it(\"should pass raw BodyInit values through unchanged\", async () => {\n const fetchMock = vi.fn().mockResolvedValue(jsonResponse({ ok: true }));\n const client = new DmkNetworkClient({ fetch: fetchMock });\n const formData = new FormData();\n formData.set(\"field\", \"value\");\n\n await client.post(\"https://api.example.com/items\", formData);\n\n const init = fetchMock.mock.calls[0]![1] as RequestInit;\n expect(init.body).toBe(formData);\n expect(init.headers).not.toMatchObject({\n \"Content-Type\": \"application/json\",\n });\n });\n\n it(\"should not send a body on GET or HEAD\", async () => {\n const fetchMock = vi\n .fn()\n .mockImplementation(() => Promise.resolve(jsonResponse({ ok: true })));\n const client = new DmkNetworkClient({ fetch: fetchMock });\n\n await client.get(\"https://api.example.com/items\");\n await client.head(\"https://api.example.com/items\");\n\n expect(fetchMock.mock.calls[0]![1]).toMatchObject({ body: undefined });\n expect(fetchMock.mock.calls[1]![1]).toMatchObject({ body: undefined });\n });\n });\n\n describe(\"response parsing\", () => {\n it(\"should return the parsed JSON body by default\", async () => {\n const fetchMock = vi\n .fn()\n .mockResolvedValue(jsonResponse({ hello: \"world\" }));\n const client = new DmkNetworkClient({ fetch: fetchMock });\n\n const result = await client.get(\"https://api.example.com/items\");\n\n expect(result).toEqual({ hello: \"world\" });\n });\n\n it(\"should return text when responseType is 'text'\", async () => {\n const fetchMock = vi\n .fn()\n .mockResolvedValue(new Response(\"plain-body\", { status: 200 }));\n const client = new DmkNetworkClient({ fetch: fetchMock });\n\n const result = await client.get(\"https://api.example.com/items\", {\n responseType: \"text\",\n });\n\n expect(result).toBe(\"plain-body\");\n });\n\n it(\"should resolve HEAD to void without reading the body\", async () => {\n const fetchMock = vi\n .fn()\n .mockResolvedValue(new Response(null, { status: 200 }));\n const client = new DmkNetworkClient({ fetch: fetchMock });\n\n const result = await client.head(\"https://api.example.com/items\");\n\n expect(result).toBeUndefined();\n });\n\n it(\"should resolve empty JSON body to undefined\", async () => {\n const fetchMock = vi\n .fn()\n .mockResolvedValue(new Response(null, { status: 204 }));\n const client = new DmkNetworkClient({ fetch: fetchMock });\n\n const result = await client.get(\"https://api.example.com/items\");\n\n expect(result).toBeUndefined();\n });\n\n it(\"should throw a DmkNetworkClientError on malformed JSON\", async () => {\n const fetchMock = vi\n .fn()\n .mockResolvedValue(new Response(\"not-json\", { status: 200 }));\n const client = new DmkNetworkClient({ fetch: fetchMock });\n\n await expect(\n client.get(\"https://api.example.com/items\"),\n ).rejects.toBeInstanceOf(DmkNetworkClientError);\n });\n });\n\n describe(\"error handling\", () => {\n it(\"should throw DmkNetworkClientError with status on non-2xx responses\", async () => {\n const fetchMock = vi.fn().mockResolvedValue(\n new Response(\"boom\", {\n status: 500,\n statusText: \"Server Error\",\n }),\n );\n const client = new DmkNetworkClient({ fetch: fetchMock });\n\n const error = await client\n .get(\"https://api.example.com/items\")\n .catch((e: unknown) => e);\n\n expect(error).toBeInstanceOf(DmkNetworkClientError);\n const dmkError = error as DmkNetworkClientError;\n expect(dmkError.status).toBe(500);\n expect(dmkError.statusText).toBe(\"Server Error\");\n expect(dmkError.responseBody).toBe(\"boom\");\n expect(dmkError.isTimeout).toBe(false);\n expect(dmkError.isAbort).toBe(false);\n });\n\n it(\"should not throw when throwOnHttpError is disabled\", async () => {\n const fetchMock = vi\n .fn()\n .mockResolvedValue(new Response(\"boom\", { status: 500 }));\n const client = new DmkNetworkClient({ fetch: fetchMock });\n\n const response = await client.request({\n method: \"GET\",\n url: \"https://api.example.com/items\",\n responseType: \"text\",\n throwOnHttpError: false,\n });\n\n expect(response.status).toBe(500);\n expect(response.ok).toBe(false);\n expect(response.data).toBe(\"boom\");\n });\n\n it(\"should wrap generic fetch failures into DmkNetworkClientError\", async () => {\n const cause = new TypeError(\"network down\");\n const fetchMock = vi.fn().mockRejectedValue(cause);\n const client = new DmkNetworkClient({ fetch: fetchMock });\n\n const error = await client\n .get(\"https://api.example.com/items\")\n .catch((e: unknown) => e);\n\n expect(error).toBeInstanceOf(DmkNetworkClientError);\n expect((error as DmkNetworkClientError).cause).toBe(cause);\n });\n });\n\n describe(\"timeout\", () => {\n it(\"should pass an AbortSignal when timeoutMs is configured\", async () => {\n const fetchMock = vi.fn().mockResolvedValue(jsonResponse({ ok: true }));\n const client = new DmkNetworkClient({ fetch: fetchMock });\n\n await client.get(\"https://api.example.com/items\", { timeoutMs: 1000 });\n\n const init = fetchMock.mock.calls[0]![1] as RequestInit;\n expect(init.signal).toBeInstanceOf(AbortSignal);\n });\n\n it(\"should not pass a signal when no timeout and no external signal are set\", async () => {\n const fetchMock = vi.fn().mockResolvedValue(jsonResponse({ ok: true }));\n const client = new DmkNetworkClient({ fetch: fetchMock });\n\n await client.get(\"https://api.example.com/items\");\n\n const init = fetchMock.mock.calls[0]![1] as RequestInit;\n expect(init.signal).toBeUndefined();\n });\n\n it(\"should mark the error as a timeout when fetch rejects with TimeoutError\", async () => {\n const timeoutError = new Error(\"The operation was aborted\");\n timeoutError.name = \"TimeoutError\";\n const fetchMock = vi.fn().mockRejectedValue(timeoutError);\n const client = new DmkNetworkClient({ fetch: fetchMock });\n\n const error = await client\n .get(\"https://api.example.com/items\", { timeoutMs: 10 })\n .catch((e: unknown) => e);\n\n expect(error).toBeInstanceOf(DmkNetworkClientError);\n expect((error as DmkNetworkClientError).isTimeout).toBe(true);\n expect((error as DmkNetworkClientError).isAbort).toBe(false);\n });\n\n it(\"should mark the error as an abort when the caller signal is aborted\", async () => {\n const abortController = new AbortController();\n abortController.abort();\n const abortError = new Error(\"aborted\");\n abortError.name = \"AbortError\";\n const fetchMock = vi.fn().mockRejectedValue(abortError);\n const client = new DmkNetworkClient({ fetch: fetchMock });\n\n const error = await client\n .get(\"https://api.example.com/items\", {\n signal: abortController.signal,\n })\n .catch((e: unknown) => e);\n\n expect(error).toBeInstanceOf(DmkNetworkClientError);\n expect((error as DmkNetworkClientError).isAbort).toBe(true);\n expect((error as DmkNetworkClientError).isTimeout).toBe(false);\n });\n });\n\n describe(\"request envelope\", () => {\n it(\"should expose full response metadata via request()\", async () => {\n const fetchMock = vi.fn().mockResolvedValue(\n new Response(JSON.stringify({ hello: \"world\" }), {\n status: 201,\n statusText: \"Created\",\n headers: { \"X-Custom\": \"1\", \"Content-Type\": \"application/json\" },\n }),\n );\n const client = new DmkNetworkClient({ fetch: fetchMock });\n\n const response = await client.request({\n method: \"GET\",\n url: \"https://api.example.com/items\",\n });\n\n expect(response.status).toBe(201);\n expect(response.statusText).toBe(\"Created\");\n expect(response.ok).toBe(true);\n expect(response.data).toEqual({ hello: \"world\" });\n expect(response.headers.get(\"X-Custom\")).toBe(\"1\");\n });\n });\n});\n"],
5
+ "mappings": "AAAA,OAAS,oBAAAA,MAAwB,qBACjC,OAAS,yBAAAC,MAA6B,0BAEtC,SAAS,mBAAoB,IAAM,CACjC,MAAMC,EAAe,CAACC,EAAeC,EAAqB,CAAC,IACzD,IAAI,SAAS,KAAK,UAAUD,CAAI,EAAG,CACjC,OAAQ,IACR,QAAS,CAAE,eAAgB,kBAAmB,EAC9C,GAAGC,CACL,CAAC,EAEH,SAAS,kBAAmB,IAAM,CAChC,GAAG,gDAAiD,SAAY,CAC9D,MAAMC,EAAY,GAAG,GAAG,EAAE,kBAAkBH,EAAa,CAAE,GAAI,EAAK,CAAC,CAAC,EAGtE,MAFe,IAAIF,EAAiB,CAAE,MAAOK,CAAU,CAAC,EAE3C,IAAI,+BAA+B,EAEhD,KAAM,CAACC,CAAS,EAAID,EAAU,KAAK,MAAM,CAAC,EAC1C,OAAO,OAAOC,CAAS,EAAE,KAAK,QAAQ,EACtC,OAAOA,CAAS,EAAE,KAAK,+BAA+B,CACxD,CAAC,EAED,GAAG,oEAAqE,SAAY,CAClF,MAAMD,EAAY,GACf,GAAG,EACH,mBAAmB,IAAM,QAAQ,QAAQH,EAAa,CAAE,GAAI,EAAK,CAAC,CAAC,CAAC,EACjEK,EAAS,IAAIP,EAAiB,CAClC,QAAS,2BACT,MAAOK,CACT,CAAC,EAED,MAAME,EAAO,IAAI,QAAQ,EACzB,MAAMA,EAAO,IAAI,OAAO,EAExB,OAAOF,EAAU,KAAK,MAAM,CAAC,EAAG,CAAC,CAAC,EAAE,KAAK,+BAA+B,EACxE,OAAOA,EAAU,KAAK,MAAM,CAAC,EAAG,CAAC,CAAC,EAAE,KAAK,+BAA+B,CAC1E,CAAC,EAED,GAAG,+CAAgD,SAAY,CAC7D,MAAMA,EAAY,GAAG,GAAG,EAAE,kBAAkBH,EAAa,CAAE,GAAI,EAAK,CAAC,CAAC,EAGtE,MAFe,IAAIF,EAAiB,CAAE,MAAOK,CAAU,CAAC,EAE3C,IAAI,gCAAiC,CAChD,OAAQ,CACN,MAAO,EACP,SAAU,QACV,OAAQ,GACR,KAAM,KACN,SAAU,MACZ,CACF,CAAC,EAED,MAAMC,EAAYD,EAAU,KAAK,MAAM,CAAC,EAAG,CAAC,EAC5C,OAAO,OAAOC,CAAS,EAAE,KAAK,QAAQ,EACtC,MAAME,EAAM,IAAI,IAAIF,CAAS,EAC7B,OAAOE,EAAI,aAAa,IAAI,OAAO,CAAC,EAAE,KAAK,GAAG,EAC9C,OAAOA,EAAI,aAAa,IAAI,UAAU,CAAC,EAAE,KAAK,OAAO,EACrD,OAAOA,EAAI,aAAa,IAAI,QAAQ,CAAC,EAAE,KAAK,MAAM,EAClD,OAAOA,EAAI,aAAa,IAAI,MAAM,CAAC,EAAE,KAAK,EAAK,EAC/C,OAAOA,EAAI,aAAa,IAAI,UAAU,CAAC,EAAE,KAAK,EAAK,CACrD,CAAC,CACH,CAAC,EAED,SAAS,UAAW,IAAM,CACxB,GAAG,+CAAgD,SAAY,CAC7D,MAAMH,EAAY,GAAG,GAAG,EAAE,kBAAkBH,EAAa,CAAE,GAAI,EAAK,CAAC,CAAC,EAMtE,MALe,IAAIF,EAAiB,CAClC,MAAOK,EACP,QAAS,CAAE,YAAa,UAAW,WAAY,cAAe,CAChE,CAAC,EAEY,IAAI,gCAAiC,CAChD,QAAS,CAAE,WAAY,aAAc,gBAAiB,KAAM,CAC9D,CAAC,EAED,MAAMD,EAAOC,EAAU,KAAK,MAAM,CAAC,EAAG,CAAC,EACvC,OAAOD,EAAK,OAAO,EAAE,cAAc,CACjC,YAAa,UACb,WAAY,aACZ,gBAAiB,KACnB,CAAC,CACH,CAAC,CACH,CAAC,EAED,SAAS,gBAAiB,IAAM,CAC9B,GAAG,iEAAkE,SAAY,CAC/E,MAAMC,EAAY,GAAG,GAAG,EAAE,kBAAkBH,EAAa,CAAE,GAAI,EAAK,CAAC,CAAC,EAGtE,MAFe,IAAIF,EAAiB,CAAE,MAAOK,CAAU,CAAC,EAE3C,KAAK,gCAAiC,CAAE,IAAK,KAAM,CAAC,EAEjE,MAAMD,EAAOC,EAAU,KAAK,MAAM,CAAC,EAAG,CAAC,EACvC,OAAOD,EAAK,MAAM,EAAE,KAAK,MAAM,EAC/B,OAAOA,EAAK,IAAI,EAAE,KAAK,KAAK,UAAU,CAAE,IAAK,KAAM,CAAC,CAAC,EACrD,OAAOA,EAAK,OAAO,EAAE,cAAc,CACjC,eAAgB,kBAClB,CAAC,CACH,CAAC,EAED,GAAG,sDAAuD,SAAY,CACpE,MAAMC,EAAY,GAAG,GAAG,EAAE,kBAAkBH,EAAa,CAAE,GAAI,EAAK,CAAC,CAAC,EAGtE,MAFe,IAAIF,EAAiB,CAAE,MAAOK,CAAU,CAAC,EAE3C,KACX,gCACA,CAAE,IAAK,KAAM,EACb,CAAE,QAAS,CAAE,eAAgB,6BAA8B,CAAE,CAC/D,EAEA,MAAMD,EAAOC,EAAU,KAAK,MAAM,CAAC,EAAG,CAAC,EACvC,OAAOD,EAAK,OAAO,EAAE,cAAc,CACjC,eAAgB,6BAClB,CAAC,CACH,CAAC,EAED,GAAG,oDAAqD,SAAY,CAClE,MAAMC,EAAY,GAAG,GAAG,EAAE,kBAAkBH,EAAa,CAAE,GAAI,EAAK,CAAC,CAAC,EAChEK,EAAS,IAAIP,EAAiB,CAAE,MAAOK,CAAU,CAAC,EAClDI,EAAW,IAAI,SACrBA,EAAS,IAAI,QAAS,OAAO,EAE7B,MAAMF,EAAO,KAAK,gCAAiCE,CAAQ,EAE3D,MAAML,EAAOC,EAAU,KAAK,MAAM,CAAC,EAAG,CAAC,EACvC,OAAOD,EAAK,IAAI,EAAE,KAAKK,CAAQ,EAC/B,OAAOL,EAAK,OAAO,EAAE,IAAI,cAAc,CACrC,eAAgB,kBAClB,CAAC,CACH,CAAC,EAED,GAAG,wCAAyC,SAAY,CACtD,MAAMC,EAAY,GACf,GAAG,EACH,mBAAmB,IAAM,QAAQ,QAAQH,EAAa,CAAE,GAAI,EAAK,CAAC,CAAC,CAAC,EACjEK,EAAS,IAAIP,EAAiB,CAAE,MAAOK,CAAU,CAAC,EAExD,MAAME,EAAO,IAAI,+BAA+B,EAChD,MAAMA,EAAO,KAAK,+BAA+B,EAEjD,OAAOF,EAAU,KAAK,MAAM,CAAC,EAAG,CAAC,CAAC,EAAE,cAAc,CAAE,KAAM,MAAU,CAAC,EACrE,OAAOA,EAAU,KAAK,MAAM,CAAC,EAAG,CAAC,CAAC,EAAE,cAAc,CAAE,KAAM,MAAU,CAAC,CACvE,CAAC,CACH,CAAC,EAED,SAAS,mBAAoB,IAAM,CACjC,GAAG,gDAAiD,SAAY,CAC9D,MAAMA,EAAY,GACf,GAAG,EACH,kBAAkBH,EAAa,CAAE,MAAO,OAAQ,CAAC,CAAC,EAG/CQ,EAAS,MAFA,IAAIV,EAAiB,CAAE,MAAOK,CAAU,CAAC,EAE5B,IAAI,+BAA+B,EAE/D,OAAOK,CAAM,EAAE,QAAQ,CAAE,MAAO,OAAQ,CAAC,CAC3C,CAAC,EAED,GAAG,iDAAkD,SAAY,CAC/D,MAAML,EAAY,GACf,GAAG,EACH,kBAAkB,IAAI,SAAS,aAAc,CAAE,OAAQ,GAAI,CAAC,CAAC,EAG1DK,EAAS,MAFA,IAAIV,EAAiB,CAAE,MAAOK,CAAU,CAAC,EAE5B,IAAI,gCAAiC,CAC/D,aAAc,MAChB,CAAC,EAED,OAAOK,CAAM,EAAE,KAAK,YAAY,CAClC,CAAC,EAED,GAAG,uDAAwD,SAAY,CACrE,MAAML,EAAY,GACf,GAAG,EACH,kBAAkB,IAAI,SAAS,KAAM,CAAE,OAAQ,GAAI,CAAC,CAAC,EAGlDK,EAAS,MAFA,IAAIV,EAAiB,CAAE,MAAOK,CAAU,CAAC,EAE5B,KAAK,+BAA+B,EAEhE,OAAOK,CAAM,EAAE,cAAc,CAC/B,CAAC,EAED,GAAG,8CAA+C,SAAY,CAC5D,MAAML,EAAY,GACf,GAAG,EACH,kBAAkB,IAAI,SAAS,KAAM,CAAE,OAAQ,GAAI,CAAC,CAAC,EAGlDK,EAAS,MAFA,IAAIV,EAAiB,CAAE,MAAOK,CAAU,CAAC,EAE5B,IAAI,+BAA+B,EAE/D,OAAOK,CAAM,EAAE,cAAc,CAC/B,CAAC,EAED,GAAG,yDAA0D,SAAY,CACvE,MAAML,EAAY,GACf,GAAG,EACH,kBAAkB,IAAI,SAAS,WAAY,CAAE,OAAQ,GAAI,CAAC,CAAC,EACxDE,EAAS,IAAIP,EAAiB,CAAE,MAAOK,CAAU,CAAC,EAExD,MAAM,OACJE,EAAO,IAAI,+BAA+B,CAC5C,EAAE,QAAQ,eAAeN,CAAqB,CAChD,CAAC,CACH,CAAC,EAED,SAAS,iBAAkB,IAAM,CAC/B,GAAG,sEAAuE,SAAY,CACpF,MAAMI,EAAY,GAAG,GAAG,EAAE,kBACxB,IAAI,SAAS,OAAQ,CACnB,OAAQ,IACR,WAAY,cACd,CAAC,CACH,EAGMM,EAAQ,MAFC,IAAIX,EAAiB,CAAE,MAAOK,CAAU,CAAC,EAGrD,IAAI,+BAA+B,EACnC,MAAOO,GAAeA,CAAC,EAE1B,OAAOD,CAAK,EAAE,eAAeV,CAAqB,EAClD,MAAMY,EAAWF,EACjB,OAAOE,EAAS,MAAM,EAAE,KAAK,GAAG,EAChC,OAAOA,EAAS,UAAU,EAAE,KAAK,cAAc,EAC/C,OAAOA,EAAS,YAAY,EAAE,KAAK,MAAM,EACzC,OAAOA,EAAS,SAAS,EAAE,KAAK,EAAK,EACrC,OAAOA,EAAS,OAAO,EAAE,KAAK,EAAK,CACrC,CAAC,EAED,GAAG,qDAAsD,SAAY,CACnE,MAAMR,EAAY,GACf,GAAG,EACH,kBAAkB,IAAI,SAAS,OAAQ,CAAE,OAAQ,GAAI,CAAC,CAAC,EAGpDS,EAAW,MAFF,IAAId,EAAiB,CAAE,MAAOK,CAAU,CAAC,EAE1B,QAAQ,CACpC,OAAQ,MACR,IAAK,gCACL,aAAc,OACd,iBAAkB,EACpB,CAAC,EAED,OAAOS,EAAS,MAAM,EAAE,KAAK,GAAG,EAChC,OAAOA,EAAS,EAAE,EAAE,KAAK,EAAK,EAC9B,OAAOA,EAAS,IAAI,EAAE,KAAK,MAAM,CACnC,CAAC,EAED,GAAG,gEAAiE,SAAY,CAC9E,MAAMC,EAAQ,IAAI,UAAU,cAAc,EACpCV,EAAY,GAAG,GAAG,EAAE,kBAAkBU,CAAK,EAG3CJ,EAAQ,MAFC,IAAIX,EAAiB,CAAE,MAAOK,CAAU,CAAC,EAGrD,IAAI,+BAA+B,EACnC,MAAOO,GAAeA,CAAC,EAE1B,OAAOD,CAAK,EAAE,eAAeV,CAAqB,EAClD,OAAQU,EAAgC,KAAK,EAAE,KAAKI,CAAK,CAC3D,CAAC,CACH,CAAC,EAED,SAAS,UAAW,IAAM,CACxB,GAAG,0DAA2D,SAAY,CACxE,MAAMV,EAAY,GAAG,GAAG,EAAE,kBAAkBH,EAAa,CAAE,GAAI,EAAK,CAAC,CAAC,EAGtE,MAFe,IAAIF,EAAiB,CAAE,MAAOK,CAAU,CAAC,EAE3C,IAAI,gCAAiC,CAAE,UAAW,GAAK,CAAC,EAErE,MAAMD,EAAOC,EAAU,KAAK,MAAM,CAAC,EAAG,CAAC,EACvC,OAAOD,EAAK,MAAM,EAAE,eAAe,WAAW,CAChD,CAAC,EAED,GAAG,0EAA2E,SAAY,CACxF,MAAMC,EAAY,GAAG,GAAG,EAAE,kBAAkBH,EAAa,CAAE,GAAI,EAAK,CAAC,CAAC,EAGtE,MAFe,IAAIF,EAAiB,CAAE,MAAOK,CAAU,CAAC,EAE3C,IAAI,+BAA+B,EAEhD,MAAMD,EAAOC,EAAU,KAAK,MAAM,CAAC,EAAG,CAAC,EACvC,OAAOD,EAAK,MAAM,EAAE,cAAc,CACpC,CAAC,EAED,GAAG,0EAA2E,SAAY,CACxF,MAAMY,EAAe,IAAI,MAAM,2BAA2B,EAC1DA,EAAa,KAAO,eACpB,MAAMX,EAAY,GAAG,GAAG,EAAE,kBAAkBW,CAAY,EAGlDL,EAAQ,MAFC,IAAIX,EAAiB,CAAE,MAAOK,CAAU,CAAC,EAGrD,IAAI,gCAAiC,CAAE,UAAW,EAAG,CAAC,EACtD,MAAOO,GAAeA,CAAC,EAE1B,OAAOD,CAAK,EAAE,eAAeV,CAAqB,EAClD,OAAQU,EAAgC,SAAS,EAAE,KAAK,EAAI,EAC5D,OAAQA,EAAgC,OAAO,EAAE,KAAK,EAAK,CAC7D,CAAC,EAED,GAAG,sEAAuE,SAAY,CACpF,MAAMM,EAAkB,IAAI,gBAC5BA,EAAgB,MAAM,EACtB,MAAMC,EAAa,IAAI,MAAM,SAAS,EACtCA,EAAW,KAAO,aAClB,MAAMb,EAAY,GAAG,GAAG,EAAE,kBAAkBa,CAAU,EAGhDP,EAAQ,MAFC,IAAIX,EAAiB,CAAE,MAAOK,CAAU,CAAC,EAGrD,IAAI,gCAAiC,CACpC,OAAQY,EAAgB,MAC1B,CAAC,EACA,MAAOL,GAAeA,CAAC,EAE1B,OAAOD,CAAK,EAAE,eAAeV,CAAqB,EAClD,OAAQU,EAAgC,OAAO,EAAE,KAAK,EAAI,EAC1D,OAAQA,EAAgC,SAAS,EAAE,KAAK,EAAK,CAC/D,CAAC,CACH,CAAC,EAED,SAAS,mBAAoB,IAAM,CACjC,GAAG,qDAAsD,SAAY,CACnE,MAAMN,EAAY,GAAG,GAAG,EAAE,kBACxB,IAAI,SAAS,KAAK,UAAU,CAAE,MAAO,OAAQ,CAAC,EAAG,CAC/C,OAAQ,IACR,WAAY,UACZ,QAAS,CAAE,WAAY,IAAK,eAAgB,kBAAmB,CACjE,CAAC,CACH,EAGMS,EAAW,MAFF,IAAId,EAAiB,CAAE,MAAOK,CAAU,CAAC,EAE1B,QAAQ,CACpC,OAAQ,MACR,IAAK,+BACP,CAAC,EAED,OAAOS,EAAS,MAAM,EAAE,KAAK,GAAG,EAChC,OAAOA,EAAS,UAAU,EAAE,KAAK,SAAS,EAC1C,OAAOA,EAAS,EAAE,EAAE,KAAK,EAAI,EAC7B,OAAOA,EAAS,IAAI,EAAE,QAAQ,CAAE,MAAO,OAAQ,CAAC,EAChD,OAAOA,EAAS,QAAQ,IAAI,UAAU,CAAC,EAAE,KAAK,GAAG,CACnD,CAAC,CACH,CAAC,CACH,CAAC",
6
6
  "names": ["DmkNetworkClient", "DmkNetworkClientError", "jsonResponse", "body", "init", "fetchMock", "calledUrl", "client", "url", "formData", "result", "error", "e", "dmkError", "response", "cause", "timeoutError", "abortController", "abortError"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import{DmkNetworkClientError as u}from"./DmkNetworkClientError";const d="application/json";function c(e,t){if(!t)return e;const r=e.endsWith("/")?e.slice(0,-1):e,n=t.startsWith("/")?t:`/${t}`;return`${r}${n}`}function g(e){const{url:t,params:r,baseUrl:n}=e,o=/^[a-z][a-z0-9+.-]*:\/\//i.test(t)?new URL(t):n?new URL(c(n,t)):new URL(t);if(r)for(const[a,s]of Object.entries(r))s!=null&&o.searchParams.set(a,String(s));return o}function f(e,t){const r=t.toLowerCase();return Object.keys(e).some(n=>n.toLowerCase()===r)}function l(e){return typeof e=="string"||e instanceof ArrayBuffer||e instanceof Blob||e instanceof FormData||e instanceof URLSearchParams||e instanceof ReadableStream||ArrayBuffer.isView(e)}function y(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}:l(r)?{body:r,headers:o}:(f(o,"content-type")||(o["Content-Type"]=d),{body:JSON.stringify(r),headers:o})}function b(e){const{timeoutMs:t,externalSignal:r}=e,n=t&&t>0?AbortSignal.timeout(t):void 0;return n&&r?AbortSignal.any([r,n]):n??r}async function p(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 u({message:"Failed to parse JSON response body",status:e.status,statusText:e.statusText,responseBody:r,cause:n})}}}}async function x(e){try{return await e.text()}catch{return}}function w(e){const{cause:t,externalSignal:r,timeoutMs:n}=e,i=!!(n&&n>0);if(t instanceof Error&&(t.name==="AbortError"||t.name==="TimeoutError")){const a=r?.aborted??!1,s=!a&&(t.name==="TimeoutError"||i);return new u({message:s?"Request timed out":"Request aborted",isTimeout:s,isAbort:a,cause:t})}return new u({message:t instanceof Error?t.message:"Network request failed",cause:t})}export{d as JSON_CONTENT_TYPE,y as buildBodyAndHeaders,b as buildSignal,g as buildUrl,f as hasHeader,l as isRawBody,c as joinPath,p as parseBody,x as safeReadText,w as wrapFetchError};
1
+ import{DmkNetworkClientError as u}from"./DmkNetworkClientError";const d="application/json";function f(e,t){if(!t)return e;const r=e.endsWith("/")?e.slice(0,-1):e,n=t.startsWith("/")?t:`/${t}`;return`${r}${n}`}function c(e){const t=[];for(const[r,n]of Object.entries(e))n!=null&&t.push(`${encodeURIComponent(r)}=${encodeURIComponent(String(n))}`);return t.join("&")}function p(e){const{url:t,params:r,baseUrl:n}=e,o=/^[a-z][a-z0-9+.-]*:\/\//i.test(t)?t:n?f(n,t):t,i=r?c(r):"";if(i.length===0)return new URL(o);const a=o.includes("?")?"&":"?";return new URL(`${o}${a}${i}`)}function l(e,t){const r=t.toLowerCase();return Object.keys(e).some(n=>n.toLowerCase()===r)}function m(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 y(e){const{method:t,body:r,defaultHeaders:n,perRequestHeaders:s}=e,o={...n,...s};return r===void 0||t==="GET"||t==="HEAD"?{body:void 0,headers:o}:m(r)?{body:r,headers:o}:(l(o,"content-type")||(o["Content-Type"]=d),{body:JSON.stringify(r),headers:o})}function b(e){const{timeoutMs:t,externalSignal:r}=e,n=t&&t>0?AbortSignal.timeout(t):void 0;return n&&r?AbortSignal.any([r,n]):n??r}async function x(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 u({message:"Failed to parse JSON response body",status:e.status,statusText:e.statusText,responseBody:r,cause:n})}}}}async function w(e){try{return await e.text()}catch{return}}function R(e){const{cause:t,externalSignal:r,timeoutMs:n}=e,s=!!(n&&n>0);if(t instanceof Error&&(t.name==="AbortError"||t.name==="TimeoutError")){const i=r?.aborted??!1,a=!i&&(t.name==="TimeoutError"||s);return new u({message:a?"Request timed out":"Request aborted",isTimeout:a,isAbort:i,cause:t})}return new u({message:t instanceof Error?t.message:"Network request failed",cause:t})}export{d as JSON_CONTENT_TYPE,y as buildBodyAndHeaders,b as buildSignal,p as buildUrl,l as hasHeader,m as isRawBody,f as joinPath,x as parseBody,w as safeReadText,R as wrapFetchError};
2
2
  //# sourceMappingURL=DmkNetworkClientHelpers.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/api/network/DmkNetworkClientHelpers.ts"],
4
- "sourcesContent": ["import { DmkNetworkClientError } from \"./DmkNetworkClientError\";\n\nexport type DmkQueryParamValue = string | number | boolean | null | undefined;\n\nexport type DmkQueryParams = Record<string, DmkQueryParamValue>;\n\nexport type DmkResponseType = \"json\" | \"text\" | \"blob\" | \"arrayBuffer\" | \"void\";\n\nexport const JSON_CONTENT_TYPE = \"application/json\";\n\n/**\n * Joins a base URL with a relative path, normalizing surrounding slashes so\n * that exactly one `/` appears between them.\n */\nexport function joinPath(base: string, path: string): string {\n if (!path) return base;\n const trimmedBase = base.endsWith(\"/\") ? base.slice(0, -1) : base;\n const trimmedPath = path.startsWith(\"/\") ? path : `/${path}`;\n return `${trimmedBase}${trimmedPath}`;\n}\n\n/**\n * Builds the final request URL from an input URL (absolute or relative), an\n * optional base URL, and optional query params. `null`/`undefined` param\n * values are skipped.\n */\nexport function buildUrl(args: {\n url: string;\n params?: DmkQueryParams;\n baseUrl?: string;\n}): URL {\n const { url, params, baseUrl } = args;\n const isAbsolute = /^[a-z][a-z0-9+.-]*:\\/\\//i.test(url);\n const fullUrl = isAbsolute\n ? new URL(url)\n : baseUrl\n ? new URL(joinPath(baseUrl, url))\n : new URL(url);\n\n if (params) {\n for (const [key, value] of Object.entries(params)) {\n if (value !== null && value !== undefined) {\n fullUrl.searchParams.set(key, String(value));\n }\n }\n }\n\n return fullUrl;\n}\n\n/**\n * Case-insensitive lookup for a header name in a plain record.\n */\nexport function hasHeader(\n headers: Record<string, string>,\n name: string,\n): boolean {\n const lower = name.toLowerCase();\n return Object.keys(headers).some((k) => k.toLowerCase() === lower);\n}\n\n/**\n * Returns `true` when the value is already a `BodyInit` accepted by `fetch`\n * and should be passed through without JSON serialization.\n */\nexport function isRawBody(body: unknown): body is BodyInit {\n return (\n typeof body === \"string\" ||\n body instanceof ArrayBuffer ||\n body instanceof Blob ||\n body instanceof FormData ||\n body instanceof URLSearchParams ||\n body instanceof ReadableStream ||\n ArrayBuffer.isView(body)\n );\n}\n\n/**\n * Computes the final request body and merged headers. Plain-object bodies are\n * JSON-serialized and the `Content-Type` header is set (unless the caller\n * already provided one). Raw `BodyInit` values pass through unchanged.\n */\nexport function buildBodyAndHeaders(args: {\n method: string;\n body: unknown;\n defaultHeaders: Record<string, string>;\n perRequestHeaders?: Record<string, string>;\n}): { body?: BodyInit; headers: Record<string, string> } {\n const { method, body, defaultHeaders, perRequestHeaders } = args;\n const headers: Record<string, string> = {\n ...defaultHeaders,\n ...perRequestHeaders,\n };\n\n if (body === undefined || method === \"GET\" || method === \"HEAD\") {\n return { body: undefined, headers };\n }\n\n if (isRawBody(body)) {\n return { body, headers };\n }\n\n if (!hasHeader(headers, \"content-type\")) {\n headers[\"Content-Type\"] = JSON_CONTENT_TYPE;\n }\n return { body: JSON.stringify(body), headers };\n}\n\n/**\n * Composes the effective abort signal for a request. If both a timeout and an\n * external signal are present, they are merged via `AbortSignal.any` so that\n * either one firing aborts the request.\n */\nexport function buildSignal(args: {\n timeoutMs: number | undefined;\n externalSignal: AbortSignal | undefined;\n}): AbortSignal | undefined {\n const { timeoutMs, externalSignal } = args;\n const timeoutSignal =\n timeoutMs && timeoutMs > 0 ? AbortSignal.timeout(timeoutMs) : undefined;\n\n if (timeoutSignal && externalSignal) {\n return AbortSignal.any([externalSignal, timeoutSignal]);\n }\n return timeoutSignal ?? externalSignal;\n}\n\n/**\n * Parses the response body according to the requested {@link DmkResponseType}.\n * Empty JSON bodies resolve to `undefined`; malformed JSON throws a\n * {@link DmkNetworkClientError}.\n */\nexport async function parseBody(\n response: Response,\n responseType: DmkResponseType,\n): Promise<unknown> {\n switch (responseType) {\n case \"void\":\n return undefined;\n case \"text\":\n return await response.text();\n case \"blob\":\n return await response.blob();\n case \"arrayBuffer\":\n return await response.arrayBuffer();\n case \"json\":\n default: {\n const text = await response.text();\n if (text.length === 0) {\n return undefined;\n }\n try {\n return JSON.parse(text);\n } catch (cause) {\n throw new DmkNetworkClientError({\n message: \"Failed to parse JSON response body\",\n status: response.status,\n statusText: response.statusText,\n responseBody: text,\n cause,\n });\n }\n }\n }\n}\n\n/**\n * Reads the response body as text, swallowing any error so callers can use it\n * for best-effort diagnostics (e.g. building an error payload).\n */\nexport async function safeReadText(\n response: Response,\n): Promise<string | undefined> {\n try {\n return await response.text();\n } catch {\n return undefined;\n }\n}\n\n/**\n * Wraps a `fetch` rejection into a typed {@link DmkNetworkClientError},\n * discriminating between external aborts, timeouts and generic failures.\n */\nexport function wrapFetchError(args: {\n cause: unknown;\n externalSignal: AbortSignal | undefined;\n timeoutMs: number | undefined;\n}): DmkNetworkClientError {\n const { cause, externalSignal, timeoutMs } = args;\n const hasTimeout = Boolean(timeoutMs && timeoutMs > 0);\n const isAbortError =\n cause instanceof Error &&\n (cause.name === \"AbortError\" || cause.name === \"TimeoutError\");\n\n if (isAbortError) {\n const externallyAborted = externalSignal?.aborted ?? false;\n const timedOut =\n !externallyAborted && (cause.name === \"TimeoutError\" || hasTimeout);\n return new DmkNetworkClientError({\n message: timedOut ? `Request timed out` : \"Request aborted\",\n isTimeout: timedOut,\n isAbort: externallyAborted,\n cause,\n });\n }\n\n return new DmkNetworkClientError({\n message: cause instanceof Error ? cause.message : \"Network request failed\",\n cause,\n });\n}\n"],
5
- "mappings": "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",
6
- "names": ["DmkNetworkClientError", "JSON_CONTENT_TYPE", "joinPath", "base", "path", "trimmedBase", "trimmedPath", "buildUrl", "args", "url", "params", "baseUrl", "fullUrl", "key", "value", "hasHeader", "headers", "name", "lower", "k", "isRawBody", "body", "buildBodyAndHeaders", "method", "defaultHeaders", "perRequestHeaders", "buildSignal", "timeoutMs", "externalSignal", "timeoutSignal", "parseBody", "response", "responseType", "text", "cause", "safeReadText", "wrapFetchError", "hasTimeout", "externallyAborted", "timedOut"]
4
+ "sourcesContent": ["import { DmkNetworkClientError } from \"./DmkNetworkClientError\";\n\nexport type DmkQueryParamValue = string | number | boolean | null | undefined;\n\nexport type DmkQueryParams = Record<string, DmkQueryParamValue>;\n\nexport type DmkResponseType = \"json\" | \"text\" | \"blob\" | \"arrayBuffer\" | \"void\";\n\nexport const JSON_CONTENT_TYPE = \"application/json\";\n\n/**\n * Joins a base URL with a relative path, normalizing surrounding slashes so\n * that exactly one `/` appears between them.\n */\nexport function joinPath(base: string, path: string): string {\n if (!path) return base;\n const trimmedBase = base.endsWith(\"/\") ? base.slice(0, -1) : base;\n const trimmedPath = path.startsWith(\"/\") ? path : `/${path}`;\n return `${trimmedBase}${trimmedPath}`;\n}\n\n/**\n * Serializes a {@link DmkQueryParams} object into a percent-encoded\n * (RFC 3986) query string (without the leading `?`). `null`/`undefined`\n * entries are skipped.\n *\n * Note: this is not strictly `application/x-www-form-urlencoded` \u2014 spaces\n * are encoded as `%20` (via `encodeURIComponent`) rather than `+`. Any\n * RFC 3986-compliant server will decode both forms identically.\n *\n * Implemented manually rather than via `URLSearchParams` so it works on\n * runtimes where `URLSearchParams.set` is not implemented (e.g. some\n * React Native versions).\n */\nfunction serializeParams(params: DmkQueryParams): string {\n const parts: string[] = [];\n for (const [key, value] of Object.entries(params)) {\n if (value === null || value === undefined) continue;\n parts.push(\n `${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`,\n );\n }\n return parts.join(\"&\");\n}\n\n/**\n * Builds the final request URL from an input URL (absolute or relative), an\n * optional base URL, and optional query params. `null`/`undefined` param\n * values are skipped.\n *\n * Query params are serialized manually (see {@link serializeParams}) instead\n * of via `URL.searchParams`, because some runtimes (notably React Native)\n * ship a `URLSearchParams` whose mutation methods (`set`, `append`, \u2026) are\n * not implemented.\n *\n * @remarks\n * Fragments (`#...`) in the input URL are not supported when `params` is\n * provided: the query string is concatenated after the fragment, so it ends\n * up parsed as part of `.hash` rather than `.search`. Callers should strip\n * or avoid fragments on URLs passed to this function.\n *\n * @remarks\n * If `url` already contains a query string, `params` are appended to it.\n * Keys present in both the existing query string and `params` are not merged:\n * both occurrences will appear in the final URL. Callers relying on override\n * semantics should pre-merge their parameters.\n */\nexport function buildUrl(args: {\n url: string;\n params?: DmkQueryParams;\n baseUrl?: string;\n}): URL {\n const { url, params, baseUrl } = args;\n const isAbsolute = /^[a-z][a-z0-9+.-]*:\\/\\//i.test(url);\n const composed = isAbsolute ? url : baseUrl ? joinPath(baseUrl, url) : url;\n\n const query = params ? serializeParams(params) : \"\";\n if (query.length === 0) {\n return new URL(composed);\n }\n\n const separator = composed.includes(\"?\") ? \"&\" : \"?\";\n return new URL(`${composed}${separator}${query}`);\n}\n\n/**\n * Case-insensitive lookup for a header name in a plain record.\n */\nexport function hasHeader(\n headers: Record<string, string>,\n name: string,\n): boolean {\n const lower = name.toLowerCase();\n return Object.keys(headers).some((k) => k.toLowerCase() === lower);\n}\n\n/**\n * Returns `true` when the value is already a `BodyInit` accepted by `fetch`\n * and should be passed through without JSON serialization.\n *\n * Each Web-global `instanceof` check is guarded with a `typeof` test so the\n * function is safe on runtimes (e.g. some React Native versions) where\n * `Blob`, `FormData`, `URLSearchParams` or `ReadableStream` are not defined.\n */\nexport function isRawBody(body: unknown): body is BodyInit {\n if (typeof body === \"string\") return true;\n if (body instanceof ArrayBuffer) return true;\n if (ArrayBuffer.isView(body)) return true;\n if (typeof Blob !== \"undefined\" && body instanceof Blob) return true;\n if (typeof FormData !== \"undefined\" && body instanceof FormData) return true;\n if (typeof URLSearchParams !== \"undefined\" && body instanceof URLSearchParams)\n return true;\n if (typeof ReadableStream !== \"undefined\" && body instanceof ReadableStream)\n return true;\n return false;\n}\n\n/**\n * Computes the final request body and merged headers. Plain-object bodies are\n * JSON-serialized and the `Content-Type` header is set (unless the caller\n * already provided one). Raw `BodyInit` values pass through unchanged.\n */\nexport function buildBodyAndHeaders(args: {\n method: string;\n body: unknown;\n defaultHeaders: Record<string, string>;\n perRequestHeaders?: Record<string, string>;\n}): { body?: BodyInit; headers: Record<string, string> } {\n const { method, body, defaultHeaders, perRequestHeaders } = args;\n const headers: Record<string, string> = {\n ...defaultHeaders,\n ...perRequestHeaders,\n };\n\n if (body === undefined || method === \"GET\" || method === \"HEAD\") {\n return { body: undefined, headers };\n }\n\n if (isRawBody(body)) {\n return { body, headers };\n }\n\n if (!hasHeader(headers, \"content-type\")) {\n headers[\"Content-Type\"] = JSON_CONTENT_TYPE;\n }\n return { body: JSON.stringify(body), headers };\n}\n\n/**\n * Composes the effective abort signal for a request. If both a timeout and an\n * external signal are present, they are merged via `AbortSignal.any` so that\n * either one firing aborts the request.\n */\nexport function buildSignal(args: {\n timeoutMs: number | undefined;\n externalSignal: AbortSignal | undefined;\n}): AbortSignal | undefined {\n const { timeoutMs, externalSignal } = args;\n const timeoutSignal =\n timeoutMs && timeoutMs > 0 ? AbortSignal.timeout(timeoutMs) : undefined;\n\n if (timeoutSignal && externalSignal) {\n return AbortSignal.any([externalSignal, timeoutSignal]);\n }\n return timeoutSignal ?? externalSignal;\n}\n\n/**\n * Parses the response body according to the requested {@link DmkResponseType}.\n * Empty JSON bodies resolve to `undefined`; malformed JSON throws a\n * {@link DmkNetworkClientError}.\n */\nexport async function parseBody(\n response: Response,\n responseType: DmkResponseType,\n): Promise<unknown> {\n switch (responseType) {\n case \"void\":\n return undefined;\n case \"text\":\n return await response.text();\n case \"blob\":\n return await response.blob();\n case \"arrayBuffer\":\n return await response.arrayBuffer();\n case \"json\":\n default: {\n const text = await response.text();\n if (text.length === 0) {\n return undefined;\n }\n try {\n return JSON.parse(text);\n } catch (cause) {\n throw new DmkNetworkClientError({\n message: \"Failed to parse JSON response body\",\n status: response.status,\n statusText: response.statusText,\n responseBody: text,\n cause,\n });\n }\n }\n }\n}\n\n/**\n * Reads the response body as text, swallowing any error so callers can use it\n * for best-effort diagnostics (e.g. building an error payload).\n */\nexport async function safeReadText(\n response: Response,\n): Promise<string | undefined> {\n try {\n return await response.text();\n } catch {\n return undefined;\n }\n}\n\n/**\n * Wraps a `fetch` rejection into a typed {@link DmkNetworkClientError},\n * discriminating between external aborts, timeouts and generic failures.\n */\nexport function wrapFetchError(args: {\n cause: unknown;\n externalSignal: AbortSignal | undefined;\n timeoutMs: number | undefined;\n}): DmkNetworkClientError {\n const { cause, externalSignal, timeoutMs } = args;\n const hasTimeout = Boolean(timeoutMs && timeoutMs > 0);\n const isAbortError =\n cause instanceof Error &&\n (cause.name === \"AbortError\" || cause.name === \"TimeoutError\");\n\n if (isAbortError) {\n const externallyAborted = externalSignal?.aborted ?? false;\n const timedOut =\n !externallyAborted && (cause.name === \"TimeoutError\" || hasTimeout);\n return new DmkNetworkClientError({\n message: timedOut ? `Request timed out` : \"Request aborted\",\n isTimeout: timedOut,\n isAbort: externallyAborted,\n cause,\n });\n }\n\n return new DmkNetworkClientError({\n message: cause instanceof Error ? cause.message : \"Network request failed\",\n cause,\n });\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["DmkNetworkClientError", "JSON_CONTENT_TYPE", "joinPath", "base", "path", "trimmedBase", "trimmedPath", "serializeParams", "params", "parts", "key", "value", "buildUrl", "args", "url", "baseUrl", "composed", "query", "separator", "hasHeader", "headers", "name", "lower", "k", "isRawBody", "body", "buildBodyAndHeaders", "method", "defaultHeaders", "perRequestHeaders", "buildSignal", "timeoutMs", "externalSignal", "timeoutSignal", "parseBody", "response", "responseType", "text", "cause", "safeReadText", "wrapFetchError", "hasTimeout", "externallyAborted", "timedOut"]
7
7
  }