@ledgerhq/device-management-kit 0.0.0-develop-20260707161641 → 0.0.0-develop-20260709002855

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 (94) hide show
  1. package/lib/cjs/package.json +1 -1
  2. package/lib/cjs/src/api/index.js +1 -1
  3. package/lib/cjs/src/api/index.js.map +3 -3
  4. package/lib/esm/package.json +1 -1
  5. package/lib/esm/src/api/index.js +1 -1
  6. package/lib/esm/src/api/index.js.map +3 -3
  7. package/lib/types/src/api/index.d.ts +0 -7
  8. package/lib/types/src/api/index.d.ts.map +1 -1
  9. package/lib/types/tsconfig.prod.tsbuildinfo +1 -1
  10. package/package.json +4 -4
  11. package/lib/cjs/src/api/command/os/BackupAppStorageCommand.js +0 -2
  12. package/lib/cjs/src/api/command/os/BackupAppStorageCommand.js.map +0 -7
  13. package/lib/cjs/src/api/command/os/BackupAppStorageCommand.test.js +0 -2
  14. package/lib/cjs/src/api/command/os/BackupAppStorageCommand.test.js.map +0 -7
  15. package/lib/cjs/src/api/command/os/CommitRestoreAppStorageCommand.js +0 -2
  16. package/lib/cjs/src/api/command/os/CommitRestoreAppStorageCommand.js.map +0 -7
  17. package/lib/cjs/src/api/command/os/CommitRestoreAppStorageCommand.test.js +0 -2
  18. package/lib/cjs/src/api/command/os/CommitRestoreAppStorageCommand.test.js.map +0 -7
  19. package/lib/cjs/src/api/command/os/GetAppStorageInfoCommand.js +0 -2
  20. package/lib/cjs/src/api/command/os/GetAppStorageInfoCommand.js.map +0 -7
  21. package/lib/cjs/src/api/command/os/GetAppStorageInfoCommand.test.js +0 -2
  22. package/lib/cjs/src/api/command/os/GetAppStorageInfoCommand.test.js.map +0 -7
  23. package/lib/cjs/src/api/command/os/InitRestoreAppStorageCommand.js +0 -2
  24. package/lib/cjs/src/api/command/os/InitRestoreAppStorageCommand.js.map +0 -7
  25. package/lib/cjs/src/api/command/os/InitRestoreAppStorageCommand.test.js +0 -2
  26. package/lib/cjs/src/api/command/os/InitRestoreAppStorageCommand.test.js.map +0 -7
  27. package/lib/cjs/src/api/command/os/RestoreAppStorageCommand.js +0 -2
  28. package/lib/cjs/src/api/command/os/RestoreAppStorageCommand.js.map +0 -7
  29. package/lib/cjs/src/api/command/os/RestoreAppStorageCommand.test.js +0 -2
  30. package/lib/cjs/src/api/command/os/RestoreAppStorageCommand.test.js.map +0 -7
  31. package/lib/cjs/src/api/device-action/task/BackupAppStorageTask.js +0 -2
  32. package/lib/cjs/src/api/device-action/task/BackupAppStorageTask.js.map +0 -7
  33. package/lib/cjs/src/api/device-action/task/BackupAppStorageTask.test.js +0 -2
  34. package/lib/cjs/src/api/device-action/task/BackupAppStorageTask.test.js.map +0 -7
  35. package/lib/cjs/src/api/device-action/task/RestoreAppStorageTask.js +0 -2
  36. package/lib/cjs/src/api/device-action/task/RestoreAppStorageTask.js.map +0 -7
  37. package/lib/cjs/src/api/device-action/task/RestoreAppStorageTask.test.js +0 -2
  38. package/lib/cjs/src/api/device-action/task/RestoreAppStorageTask.test.js.map +0 -7
  39. package/lib/esm/src/api/command/os/BackupAppStorageCommand.js +0 -2
  40. package/lib/esm/src/api/command/os/BackupAppStorageCommand.js.map +0 -7
  41. package/lib/esm/src/api/command/os/BackupAppStorageCommand.test.js +0 -2
  42. package/lib/esm/src/api/command/os/BackupAppStorageCommand.test.js.map +0 -7
  43. package/lib/esm/src/api/command/os/CommitRestoreAppStorageCommand.js +0 -2
  44. package/lib/esm/src/api/command/os/CommitRestoreAppStorageCommand.js.map +0 -7
  45. package/lib/esm/src/api/command/os/CommitRestoreAppStorageCommand.test.js +0 -2
  46. package/lib/esm/src/api/command/os/CommitRestoreAppStorageCommand.test.js.map +0 -7
  47. package/lib/esm/src/api/command/os/GetAppStorageInfoCommand.js +0 -2
  48. package/lib/esm/src/api/command/os/GetAppStorageInfoCommand.js.map +0 -7
  49. package/lib/esm/src/api/command/os/GetAppStorageInfoCommand.test.js +0 -2
  50. package/lib/esm/src/api/command/os/GetAppStorageInfoCommand.test.js.map +0 -7
  51. package/lib/esm/src/api/command/os/InitRestoreAppStorageCommand.js +0 -2
  52. package/lib/esm/src/api/command/os/InitRestoreAppStorageCommand.js.map +0 -7
  53. package/lib/esm/src/api/command/os/InitRestoreAppStorageCommand.test.js +0 -2
  54. package/lib/esm/src/api/command/os/InitRestoreAppStorageCommand.test.js.map +0 -7
  55. package/lib/esm/src/api/command/os/RestoreAppStorageCommand.js +0 -2
  56. package/lib/esm/src/api/command/os/RestoreAppStorageCommand.js.map +0 -7
  57. package/lib/esm/src/api/command/os/RestoreAppStorageCommand.test.js +0 -2
  58. package/lib/esm/src/api/command/os/RestoreAppStorageCommand.test.js.map +0 -7
  59. package/lib/esm/src/api/device-action/task/BackupAppStorageTask.js +0 -2
  60. package/lib/esm/src/api/device-action/task/BackupAppStorageTask.js.map +0 -7
  61. package/lib/esm/src/api/device-action/task/BackupAppStorageTask.test.js +0 -2
  62. package/lib/esm/src/api/device-action/task/BackupAppStorageTask.test.js.map +0 -7
  63. package/lib/esm/src/api/device-action/task/RestoreAppStorageTask.js +0 -2
  64. package/lib/esm/src/api/device-action/task/RestoreAppStorageTask.js.map +0 -7
  65. package/lib/esm/src/api/device-action/task/RestoreAppStorageTask.test.js +0 -2
  66. package/lib/esm/src/api/device-action/task/RestoreAppStorageTask.test.js.map +0 -7
  67. package/lib/types/src/api/command/os/BackupAppStorageCommand.d.ts +0 -23
  68. package/lib/types/src/api/command/os/BackupAppStorageCommand.d.ts.map +0 -1
  69. package/lib/types/src/api/command/os/BackupAppStorageCommand.test.d.ts +0 -2
  70. package/lib/types/src/api/command/os/BackupAppStorageCommand.test.d.ts.map +0 -1
  71. package/lib/types/src/api/command/os/CommitRestoreAppStorageCommand.d.ts +0 -19
  72. package/lib/types/src/api/command/os/CommitRestoreAppStorageCommand.d.ts.map +0 -1
  73. package/lib/types/src/api/command/os/CommitRestoreAppStorageCommand.test.d.ts +0 -2
  74. package/lib/types/src/api/command/os/CommitRestoreAppStorageCommand.test.d.ts.map +0 -1
  75. package/lib/types/src/api/command/os/GetAppStorageInfoCommand.d.ts +0 -31
  76. package/lib/types/src/api/command/os/GetAppStorageInfoCommand.d.ts.map +0 -1
  77. package/lib/types/src/api/command/os/GetAppStorageInfoCommand.test.d.ts +0 -2
  78. package/lib/types/src/api/command/os/GetAppStorageInfoCommand.test.d.ts.map +0 -1
  79. package/lib/types/src/api/command/os/InitRestoreAppStorageCommand.d.ts +0 -25
  80. package/lib/types/src/api/command/os/InitRestoreAppStorageCommand.d.ts.map +0 -1
  81. package/lib/types/src/api/command/os/InitRestoreAppStorageCommand.test.d.ts +0 -2
  82. package/lib/types/src/api/command/os/InitRestoreAppStorageCommand.test.d.ts.map +0 -1
  83. package/lib/types/src/api/command/os/RestoreAppStorageCommand.d.ts +0 -24
  84. package/lib/types/src/api/command/os/RestoreAppStorageCommand.d.ts.map +0 -1
  85. package/lib/types/src/api/command/os/RestoreAppStorageCommand.test.d.ts +0 -2
  86. package/lib/types/src/api/command/os/RestoreAppStorageCommand.test.d.ts.map +0 -1
  87. package/lib/types/src/api/device-action/task/BackupAppStorageTask.d.ts +0 -23
  88. package/lib/types/src/api/device-action/task/BackupAppStorageTask.d.ts.map +0 -1
  89. package/lib/types/src/api/device-action/task/BackupAppStorageTask.test.d.ts +0 -2
  90. package/lib/types/src/api/device-action/task/BackupAppStorageTask.test.d.ts.map +0 -1
  91. package/lib/types/src/api/device-action/task/RestoreAppStorageTask.d.ts +0 -17
  92. package/lib/types/src/api/device-action/task/RestoreAppStorageTask.d.ts.map +0 -1
  93. package/lib/types/src/api/device-action/task/RestoreAppStorageTask.test.d.ts +0 -2
  94. package/lib/types/src/api/device-action/task/RestoreAppStorageTask.test.d.ts.map +0 -1
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../../../src/api/command/os/CommitRestoreAppStorageCommand.test.ts"],
4
- "sourcesContent": ["import { isSuccessCommandResult } from \"@api/command/model/CommandResult\";\nimport { CommitRestoreAppStorageCommand } from \"@api/command/os/CommitRestoreAppStorageCommand\";\nimport { ApduResponse } from \"@api/device-session/ApduResponse\";\n\ndescribe(\"CommitRestoreAppStorageCommand\", () => {\n describe(\"Name\", () => {\n it(\"name should be 'CommitRestoreAppStorage'\", () => {\n // ARRANGE\n const command = new CommitRestoreAppStorageCommand();\n\n // ACT\n const name = command.name;\n\n // ASSERT\n expect(name).toBe(\"CommitRestoreAppStorage\");\n });\n });\n\n describe(\"Command\", () => {\n it(\"should return the correct APDU for committing an app storage restore\", () => {\n // ARRANGE\n const expectedApdu = Uint8Array.from([0xe0, 0x6e, 0x00, 0x00, 0x00]);\n\n // ACT\n const apdu = new CommitRestoreAppStorageCommand().getApdu();\n\n // ASSERT\n expect(apdu.getRawApdu()).toEqual(expectedApdu);\n });\n });\n\n describe(\"Success response\", () => {\n it(\"should return a success result\", () => {\n // ARRANGE\n const response = new ApduResponse({\n statusCode: Uint8Array.from([0x90, 0x00]),\n data: new Uint8Array([]),\n });\n\n // ACT\n const result = new CommitRestoreAppStorageCommand().parseResponse(\n response,\n );\n\n // ASSERT\n expect(isSuccessCommandResult(result)).toBe(true);\n expect(result).toEqual({\n data: undefined,\n status: \"SUCCESS\",\n });\n });\n });\n\n describe(\"Error response\", () => {\n it.each([\n {\n description: \"restore init has not been called\",\n statusCode: [0x51, 0x23],\n expectedMessage: \"Invalid context, restore init must be called first.\",\n },\n {\n description: \"crypto operation failed\",\n statusCode: [0x54, 0x19],\n expectedMessage: \"Internal error, crypto operation failed.\",\n },\n {\n description: \"backup authenticity verification failed\",\n statusCode: [0x54, 0x1b],\n expectedMessage: \"Failed to verify backup authenticity.\",\n },\n {\n description: \"device is in recovery mode\",\n statusCode: [0x66, 0x2f],\n expectedMessage: \"Invalid device state, recovery mode.\",\n },\n {\n description: \"restored app storage size is invalid\",\n statusCode: [0x67, 0x34],\n expectedMessage: \"Invalid size of the restored app storage.\",\n },\n {\n description:\n \"error code is not specific to CommitRestoreAppStorageCommand (global error)\",\n statusCode: [0x55, 0x15],\n expectedMessage: \"Device is locked.\",\n },\n ])(\n \"should return error when $description\",\n ({ statusCode, expectedMessage }) => {\n // ARRANGE\n const response = new ApduResponse({\n statusCode: Uint8Array.from(statusCode),\n data: new Uint8Array([]),\n });\n\n // ACT\n const result = new CommitRestoreAppStorageCommand().parseResponse(\n response,\n );\n\n // ASSERT\n expect(isSuccessCommandResult(result)).toBe(false);\n expect((result as unknown as { error: Error }).error.message).toBe(\n expectedMessage,\n );\n },\n );\n });\n});\n"],
5
- "mappings": "AAAA,OAAS,0BAAAA,MAA8B,mCACvC,OAAS,kCAAAC,MAAsC,iDAC/C,OAAS,gBAAAC,MAAoB,mCAE7B,SAAS,iCAAkC,IAAM,CAC/C,SAAS,OAAQ,IAAM,CACrB,GAAG,2CAA4C,IAAM,CAKnD,MAAMC,EAHU,IAAIF,EAA+B,EAG9B,KAGrB,OAAOE,CAAI,EAAE,KAAK,yBAAyB,CAC7C,CAAC,CACH,CAAC,EAED,SAAS,UAAW,IAAM,CACxB,GAAG,uEAAwE,IAAM,CAE/E,MAAMC,EAAe,WAAW,KAAK,CAAC,IAAM,IAAM,EAAM,EAAM,CAAI,CAAC,EAG7DC,EAAO,IAAIJ,EAA+B,EAAE,QAAQ,EAG1D,OAAOI,EAAK,WAAW,CAAC,EAAE,QAAQD,CAAY,CAChD,CAAC,CACH,CAAC,EAED,SAAS,mBAAoB,IAAM,CACjC,GAAG,iCAAkC,IAAM,CAEzC,MAAME,EAAW,IAAIJ,EAAa,CAChC,WAAY,WAAW,KAAK,CAAC,IAAM,CAAI,CAAC,EACxC,KAAM,IAAI,WAAW,CAAC,CAAC,CACzB,CAAC,EAGKK,EAAS,IAAIN,EAA+B,EAAE,cAClDK,CACF,EAGA,OAAON,EAAuBO,CAAM,CAAC,EAAE,KAAK,EAAI,EAChD,OAAOA,CAAM,EAAE,QAAQ,CACrB,KAAM,OACN,OAAQ,SACV,CAAC,CACH,CAAC,CACH,CAAC,EAED,SAAS,iBAAkB,IAAM,CAC/B,GAAG,KAAK,CACN,CACE,YAAa,mCACb,WAAY,CAAC,GAAM,EAAI,EACvB,gBAAiB,qDACnB,EACA,CACE,YAAa,0BACb,WAAY,CAAC,GAAM,EAAI,EACvB,gBAAiB,0CACnB,EACA,CACE,YAAa,0CACb,WAAY,CAAC,GAAM,EAAI,EACvB,gBAAiB,uCACnB,EACA,CACE,YAAa,6BACb,WAAY,CAAC,IAAM,EAAI,EACvB,gBAAiB,sCACnB,EACA,CACE,YAAa,uCACb,WAAY,CAAC,IAAM,EAAI,EACvB,gBAAiB,2CACnB,EACA,CACE,YACE,8EACF,WAAY,CAAC,GAAM,EAAI,EACvB,gBAAiB,mBACnB,CACF,CAAC,EACC,wCACA,CAAC,CAAE,WAAAC,EAAY,gBAAAC,CAAgB,IAAM,CAEnC,MAAMH,EAAW,IAAIJ,EAAa,CAChC,WAAY,WAAW,KAAKM,CAAU,EACtC,KAAM,IAAI,WAAW,CAAC,CAAC,CACzB,CAAC,EAGKD,EAAS,IAAIN,EAA+B,EAAE,cAClDK,CACF,EAGA,OAAON,EAAuBO,CAAM,CAAC,EAAE,KAAK,EAAK,EACjD,OAAQA,EAAuC,MAAM,OAAO,EAAE,KAC5DE,CACF,CACF,CACF,CACF,CAAC,CACH,CAAC",
6
- "names": ["isSuccessCommandResult", "CommitRestoreAppStorageCommand", "ApduResponse", "name", "expectedApdu", "apdu", "response", "result", "statusCode", "expectedMessage"]
7
- }
@@ -1,2 +0,0 @@
1
- import{ApduBuilder as C}from"../../apdu/utils/ApduBuilder";import{ApduParser as S}from"../../apdu/utils/ApduParser";import{InvalidStatusWordError as p}from"../../command/Errors";import{CommandResultFactory as t}from"../../command/model/CommandResult";import{isCommandErrorCode as l}from"../../command/utils/CommandErrors";import{CommandUtils as A}from"../../command/utils/CommandUtils";import{GlobalCommandErrorHandler as c}from"../../command/utils/GlobalCommandError";import{DeviceExchangeError as u}from"../../Error";const g={5123:{message:"Application not found."},"662f":{message:"Device is in recovery mode."},"670a":{message:"Invalid application name length, two chars minimum."}};class I extends u{constructor(e){super({tag:"GetAppStorageInfoCommandError",...e})}}class b{constructor(e){this.args=e}name="GetAppStorageInfo";header={cla:224,ins:106,p1:0,p2:0};getApdu(){const{appName:e}=this.args;return new C(this.header).addAsciiStringToData(e).build()}parseResponse(e){const r=new S(e);if(!A.isSuccessResponse(e)){const o=r.encodeToHexaString(e.statusCode);return l(o,g)?t({error:new I({...g[o],errorCode:o})}):t({error:c.handle(e)})}const a=r.extract32BitUInt();if(a===void 0)return t({error:new p("Failed to extract app storage size")});let s="",m=!1,i=!1,d="";if(a!==0){const o=r.extract32BitUInt();if(o===void 0)return t({error:new p("Failed to extract app storage version")});s=o.toString(16);const n=r.extract16BitUInt();if(n===void 0)return t({error:new p("Failed to extract app storage properties")});m=(n&1)===1,i=(n&2)===2,d=r.encodeToHexaString(r.extractFieldByLength(32))}return t({data:{storageSize:a,storageVersion:s,hasSettings:m,hasData:i,storageHash:d}})}}export{g as GET_APP_STORAGE_INFO_ERRORS,b as GetAppStorageInfoCommand,I as GetAppStorageInfoCommandError};
2
- //# sourceMappingURL=GetAppStorageInfoCommand.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../../../src/api/command/os/GetAppStorageInfoCommand.ts"],
4
- "sourcesContent": ["import { type Apdu } from \"@api/apdu/model/Apdu\";\nimport { ApduBuilder } from \"@api/apdu/utils/ApduBuilder\";\nimport { ApduParser } from \"@api/apdu/utils/ApduParser\";\nimport { type Command } from \"@api/command/Command\";\nimport { InvalidStatusWordError } from \"@api/command/Errors\";\nimport {\n type CommandResult,\n CommandResultFactory,\n} from \"@api/command/model/CommandResult\";\nimport { isCommandErrorCode } from \"@api/command/utils/CommandErrors\";\nimport { type CommandErrors } from \"@api/command/utils/CommandErrors\";\nimport { CommandUtils } from \"@api/command/utils/CommandUtils\";\nimport { GlobalCommandErrorHandler } from \"@api/command/utils/GlobalCommandError\";\nimport { type ApduResponse } from \"@api/device-session/ApduResponse\";\nimport { type CommandErrorArgs, DeviceExchangeError } from \"@api/Error\";\n\nexport type GetAppStorageInfoCommandArgs = {\n appName: string;\n};\n\nexport type GetAppStorageInfoCommandResponse = {\n storageSize: number;\n storageVersion: string;\n hasSettings: boolean;\n hasData: boolean;\n storageHash: string;\n};\n\nexport type GetAppStorageInfoCommandErrorCodes = \"5123\" | \"662f\" | \"670a\";\n\nexport const GET_APP_STORAGE_INFO_ERRORS: CommandErrors<GetAppStorageInfoCommandErrorCodes> =\n {\n \"5123\": { message: \"Application not found.\" },\n \"662f\": { message: \"Device is in recovery mode.\" },\n \"670a\": { message: \"Invalid application name length, two chars minimum.\" },\n };\n\nexport class GetAppStorageInfoCommandError extends DeviceExchangeError<GetAppStorageInfoCommandErrorCodes> {\n constructor(args: CommandErrorArgs<GetAppStorageInfoCommandErrorCodes>) {\n super({ tag: \"GetAppStorageInfoCommandError\", ...args });\n }\n}\n\nexport type GetAppStorageInfoCommandResult = CommandResult<\n GetAppStorageInfoCommandResponse,\n GetAppStorageInfoCommandErrorCodes\n>;\n\nexport class GetAppStorageInfoCommand\n implements\n Command<\n GetAppStorageInfoCommandResponse,\n GetAppStorageInfoCommandArgs,\n GetAppStorageInfoCommandErrorCodes\n >\n{\n readonly name = \"GetAppStorageInfo\";\n\n private readonly header = {\n cla: 0xe0,\n ins: 0x6a,\n p1: 0x00,\n p2: 0x00,\n };\n\n constructor(private readonly args: GetAppStorageInfoCommandArgs) {}\n\n getApdu(): Apdu {\n const { appName } = this.args;\n return new ApduBuilder(this.header).addAsciiStringToData(appName).build();\n }\n\n parseResponse(apduResponse: ApduResponse): GetAppStorageInfoCommandResult {\n const parser = new ApduParser(apduResponse);\n if (!CommandUtils.isSuccessResponse(apduResponse)) {\n const errorCode = parser.encodeToHexaString(apduResponse.statusCode);\n if (isCommandErrorCode(errorCode, GET_APP_STORAGE_INFO_ERRORS)) {\n return CommandResultFactory({\n error: new GetAppStorageInfoCommandError({\n ...GET_APP_STORAGE_INFO_ERRORS[errorCode],\n errorCode,\n }),\n });\n }\n return CommandResultFactory({\n error: GlobalCommandErrorHandler.handle(apduResponse),\n });\n }\n\n const appStorageSize = parser.extract32BitUInt();\n if (appStorageSize === undefined) {\n return CommandResultFactory({\n error: new InvalidStatusWordError(\"Failed to extract app storage size\"),\n });\n }\n\n let appStorageVersion = \"\";\n let hasAppStorageSettings = false;\n let hasAppStorageData = false;\n let hash = \"\";\n\n if (appStorageSize !== 0) {\n const appStorageVersionNumber = parser.extract32BitUInt();\n if (appStorageVersionNumber === undefined) {\n return CommandResultFactory({\n error: new InvalidStatusWordError(\n \"Failed to extract app storage version\",\n ),\n });\n }\n appStorageVersion = appStorageVersionNumber.toString(16);\n /**\n * The properties byte is a bitfield with the following structure:\n * - Bit 0: hasSettings\n * - Bit 1: hasData\n */\n const appStorageProperties = parser.extract16BitUInt();\n if (appStorageProperties === undefined) {\n return CommandResultFactory({\n error: new InvalidStatusWordError(\n \"Failed to extract app storage properties\",\n ),\n });\n }\n\n hasAppStorageSettings = (appStorageProperties & 1) === 1;\n hasAppStorageData = (appStorageProperties & 2) === 2;\n hash = parser.encodeToHexaString(parser.extractFieldByLength(0x20));\n }\n\n return CommandResultFactory({\n data: {\n storageSize: appStorageSize,\n storageVersion: appStorageVersion,\n hasSettings: hasAppStorageSettings,\n hasData: hasAppStorageData,\n storageHash: hash,\n },\n });\n }\n}\n"],
5
- "mappings": "AACA,OAAS,eAAAA,MAAmB,8BAC5B,OAAS,cAAAC,MAAkB,6BAE3B,OAAS,0BAAAC,MAA8B,sBACvC,OAEE,wBAAAC,MACK,mCACP,OAAS,sBAAAC,MAA0B,mCAEnC,OAAS,gBAAAC,MAAoB,kCAC7B,OAAS,6BAAAC,MAAiC,wCAE1C,OAAgC,uBAAAC,MAA2B,aAgBpD,MAAMC,EACX,CACE,KAAQ,CAAE,QAAS,wBAAyB,EAC5C,OAAQ,CAAE,QAAS,6BAA8B,EACjD,OAAQ,CAAE,QAAS,qDAAsD,CAC3E,EAEK,MAAMC,UAAsCF,CAAwD,CACzG,YAAYG,EAA4D,CACtE,MAAM,CAAE,IAAK,gCAAiC,GAAGA,CAAK,CAAC,CACzD,CACF,CAOO,MAAMC,CAOb,CAUE,YAA6BD,EAAoC,CAApC,UAAAA,CAAqC,CATzD,KAAO,oBAEC,OAAS,CACxB,IAAK,IACL,IAAK,IACL,GAAI,EACJ,GAAI,CACN,EAIA,SAAgB,CACd,KAAM,CAAE,QAAAE,CAAQ,EAAI,KAAK,KACzB,OAAO,IAAIZ,EAAY,KAAK,MAAM,EAAE,qBAAqBY,CAAO,EAAE,MAAM,CAC1E,CAEA,cAAcC,EAA4D,CACxE,MAAMC,EAAS,IAAIb,EAAWY,CAAY,EAC1C,GAAI,CAACR,EAAa,kBAAkBQ,CAAY,EAAG,CACjD,MAAME,EAAYD,EAAO,mBAAmBD,EAAa,UAAU,EACnE,OAAIT,EAAmBW,EAAWP,CAA2B,EACpDL,EAAqB,CAC1B,MAAO,IAAIM,EAA8B,CACvC,GAAGD,EAA4BO,CAAS,EACxC,UAAAA,CACF,CAAC,CACH,CAAC,EAEIZ,EAAqB,CAC1B,MAAOG,EAA0B,OAAOO,CAAY,CACtD,CAAC,CACH,CAEA,MAAMG,EAAiBF,EAAO,iBAAiB,EAC/C,GAAIE,IAAmB,OACrB,OAAOb,EAAqB,CAC1B,MAAO,IAAID,EAAuB,oCAAoC,CACxE,CAAC,EAGH,IAAIe,EAAoB,GACpBC,EAAwB,GACxBC,EAAoB,GACpBC,EAAO,GAEX,GAAIJ,IAAmB,EAAG,CACxB,MAAMK,EAA0BP,EAAO,iBAAiB,EACxD,GAAIO,IAA4B,OAC9B,OAAOlB,EAAqB,CAC1B,MAAO,IAAID,EACT,uCACF,CACF,CAAC,EAEHe,EAAoBI,EAAwB,SAAS,EAAE,EAMvD,MAAMC,EAAuBR,EAAO,iBAAiB,EACrD,GAAIQ,IAAyB,OAC3B,OAAOnB,EAAqB,CAC1B,MAAO,IAAID,EACT,0CACF,CACF,CAAC,EAGHgB,GAAyBI,EAAuB,KAAO,EACvDH,GAAqBG,EAAuB,KAAO,EACnDF,EAAON,EAAO,mBAAmBA,EAAO,qBAAqB,EAAI,CAAC,CACpE,CAEA,OAAOX,EAAqB,CAC1B,KAAM,CACJ,YAAaa,EACb,eAAgBC,EAChB,YAAaC,EACb,QAASC,EACT,YAAaC,CACf,CACF,CAAC,CACH,CACF",
6
- "names": ["ApduBuilder", "ApduParser", "InvalidStatusWordError", "CommandResultFactory", "isCommandErrorCode", "CommandUtils", "GlobalCommandErrorHandler", "DeviceExchangeError", "GET_APP_STORAGE_INFO_ERRORS", "GetAppStorageInfoCommandError", "args", "GetAppStorageInfoCommand", "appName", "apduResponse", "parser", "errorCode", "appStorageSize", "appStorageVersion", "hasAppStorageSettings", "hasAppStorageData", "hash", "appStorageVersionNumber", "appStorageProperties"]
7
- }
@@ -1,2 +0,0 @@
1
- import{InvalidStatusWordError as p}from"../../command/Errors";import{isSuccessCommandResult as s}from"../../command/model/CommandResult";import{GetAppStorageInfoCommand as o}from"../../command/os/GetAppStorageInfoCommand";import{ApduResponse as n}from"../../device-session/ApduResponse";describe("GetAppStorageInfoCommand",()=>{describe("Name",()=>{it("name should be 'GetAppStorageInfo'",()=>{const e=new o({appName:"MyApp"}).name;expect(e).toBe("GetAppStorageInfo")})}),describe("Command",()=>{it("should return the correct APDU for getting the app storage info",()=>{const t=Uint8Array.from([224,106,0,0,5,77,121,65,112,112]),e=new o({appName:"MyApp"}).getApdu();expect(e.getRawApdu()).toEqual(t)})}),describe("Success response",()=>{it("should return correct app storage info when app storage size is not 0",()=>{const t=Uint8Array.from([144,0]),e=new n({statusCode:t,data:Uint8Array.from([0,0,0,1,0,0,0,1,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1])}),r=new o({appName:"MyApp"}).parseResponse(e);expect(s(r)).toBe(!0),expect(r).toEqual({data:{storageSize:1,storageVersion:"1",hasSettings:!0,hasData:!0,storageHash:"0000000000000000000000000000000000000000000000000000000000000001"},status:"SUCCESS"})}),it("should return correct app storage info when app storage size is 0",()=>{const t=Uint8Array.from([144,0]),e=new n({statusCode:t,data:Uint8Array.from([0,0,0,0])}),r=new o({appName:"MyApp"}).parseResponse(e);expect(s(r)).toBe(!0),expect(r).toEqual({data:{storageSize:0,storageVersion:"",hasSettings:!1,hasData:!1,storageHash:""},status:"SUCCESS"})})}),describe("Error response",()=>{it.each([{description:"application is not found",statusCode:[81,35],expectedMessage:"Application not found."},{description:"device is in recovery mode",statusCode:[102,47],expectedMessage:"Device is in recovery mode."},{description:"application name length is invalid",statusCode:[103,10],expectedMessage:"Invalid application name length, two chars minimum."},{description:"error code is not specific to GetAppStorageInfoCommand (global error)",statusCode:[85,21],expectedMessage:"Device is locked."}])("should return error when $description",({statusCode:t,expectedMessage:e})=>{const r=new n({statusCode:Uint8Array.from(t),data:new Uint8Array([])}),a=new o({appName:"MyApp"}).parseResponse(r);expect(s(a)).toBe(!1),expect(a.error.message).toBe(e)}),it.each([{description:"app storage size extraction fails",data:new Uint8Array([]),expectedOriginalMessage:"Failed to extract app storage size"},{description:"app storage version extraction fails",data:Uint8Array.from([0,0,0,1]),expectedOriginalMessage:"Failed to extract app storage version"},{description:"app storage properties extraction fails",data:Uint8Array.from([0,0,0,1,0,0,0,1]),expectedOriginalMessage:"Failed to extract app storage properties"}])("should return error when $description",({data:t,expectedOriginalMessage:e})=>{const r=new n({statusCode:Uint8Array.from([144,0]),data:t}),a=new o({appName:"MyApp"}).parseResponse(r);expect(s(a)).toBe(!1),expect(a.error).toBeInstanceOf(p),expect(a.error.originalError?.message).toBe(e)})})});
2
- //# sourceMappingURL=GetAppStorageInfoCommand.test.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../../../src/api/command/os/GetAppStorageInfoCommand.test.ts"],
4
- "sourcesContent": ["import { InvalidStatusWordError } from \"@api/command/Errors\";\nimport { isSuccessCommandResult } from \"@api/command/model/CommandResult\";\nimport { GetAppStorageInfoCommand } from \"@api/command/os/GetAppStorageInfoCommand\";\nimport { ApduResponse } from \"@api/device-session/ApduResponse\";\n\ndescribe(\"GetAppStorageInfoCommand\", () => {\n describe(\"Name\", () => {\n it(\"name should be 'GetAppStorageInfo'\", () => {\n // ARRANGE\n const command = new GetAppStorageInfoCommand({ appName: \"MyApp\" });\n\n // ACT\n const name = command.name;\n\n // ASSERT\n expect(name).toBe(\"GetAppStorageInfo\");\n });\n });\n\n describe(\"Command\", () => {\n it(\"should return the correct APDU for getting the app storage info\", () => {\n // ARRANGE\n const expectedApdu = Uint8Array.from([\n 0xe0, 0x6a, 0x00, 0x00, 0x05, 0x4d, 0x79, 0x41, 0x70, 0x70,\n ]);\n\n // ACT\n const apdu = new GetAppStorageInfoCommand({ appName: \"MyApp\" }).getApdu();\n\n // ASSERT\n expect(apdu.getRawApdu()).toEqual(expectedApdu);\n });\n });\n\n describe(\"Success response\", () => {\n it(\"should return correct app storage info when app storage size is not 0\", () => {\n // ARRANGE\n const statusCode = Uint8Array.from([0x90, 0x00]);\n const response = new ApduResponse({\n statusCode,\n data: Uint8Array.from([\n // appStorageSize (32-bit BE) = 1\n 0x00, 0x00, 0x00, 0x01,\n // appStorageVersion (32-bit BE) = 1\n 0x00, 0x00, 0x00, 0x01,\n // appStorageProperties (16-bit BE) = 0x0003 (bits 0 and 1 set)\n 0x00, 0x03,\n // appStorageHash (32 bytes)\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,\n ]),\n });\n\n // ACT\n const result = new GetAppStorageInfoCommand({\n appName: \"MyApp\",\n }).parseResponse(response);\n\n // ASSERT\n expect(isSuccessCommandResult(result)).toBe(true);\n expect(result).toEqual({\n data: {\n storageSize: 1,\n storageVersion: \"1\",\n hasSettings: true,\n hasData: true,\n storageHash:\n \"0000000000000000000000000000000000000000000000000000000000000001\",\n },\n status: \"SUCCESS\",\n });\n });\n\n it(\"should return correct app storage info when app storage size is 0\", () => {\n // ARRANGE\n const statusCode = Uint8Array.from([0x90, 0x00]);\n const response = new ApduResponse({\n statusCode,\n data: Uint8Array.from([\n // appStorageSize (32-bit BE) = 0\n 0x00, 0x00, 0x00, 0x00,\n ]),\n });\n\n // ACT\n const result = new GetAppStorageInfoCommand({\n appName: \"MyApp\",\n }).parseResponse(response);\n\n // ASSERT\n expect(isSuccessCommandResult(result)).toBe(true);\n expect(result).toEqual({\n data: {\n storageSize: 0,\n storageVersion: \"\",\n hasSettings: false,\n hasData: false,\n storageHash: \"\",\n },\n status: \"SUCCESS\",\n });\n });\n });\n\n describe(\"Error response\", () => {\n it.each([\n {\n description: \"application is not found\",\n statusCode: [0x51, 0x23],\n expectedMessage: \"Application not found.\",\n },\n {\n description: \"device is in recovery mode\",\n statusCode: [0x66, 0x2f],\n expectedMessage: \"Device is in recovery mode.\",\n },\n {\n description: \"application name length is invalid\",\n statusCode: [0x67, 0x0a],\n expectedMessage: \"Invalid application name length, two chars minimum.\",\n },\n {\n description:\n \"error code is not specific to GetAppStorageInfoCommand (global error)\",\n statusCode: [0x55, 0x15],\n expectedMessage: \"Device is locked.\",\n },\n ])(\n \"should return error when $description\",\n ({ statusCode, expectedMessage }) => {\n // ARRANGE\n const response = new ApduResponse({\n statusCode: Uint8Array.from(statusCode),\n data: new Uint8Array([]),\n });\n\n // ACT\n const result = new GetAppStorageInfoCommand({\n appName: \"MyApp\",\n }).parseResponse(response);\n\n // ASSERT\n expect(isSuccessCommandResult(result)).toBe(false);\n expect((result as unknown as { error: Error }).error.message).toBe(\n expectedMessage,\n );\n },\n );\n\n it.each([\n {\n description: \"app storage size extraction fails\",\n data: new Uint8Array([]),\n expectedOriginalMessage: \"Failed to extract app storage size\",\n },\n {\n description: \"app storage version extraction fails\",\n data: Uint8Array.from([0x00, 0x00, 0x00, 0x01]),\n expectedOriginalMessage: \"Failed to extract app storage version\",\n },\n {\n description: \"app storage properties extraction fails\",\n data: Uint8Array.from([0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01]),\n expectedOriginalMessage: \"Failed to extract app storage properties\",\n },\n ])(\n \"should return error when $description\",\n ({ data, expectedOriginalMessage }) => {\n // ARRANGE\n const response = new ApduResponse({\n statusCode: Uint8Array.from([0x90, 0x00]),\n data,\n });\n\n // ACT\n const result = new GetAppStorageInfoCommand({\n appName: \"MyApp\",\n }).parseResponse(response);\n\n // ASSERT\n expect(isSuccessCommandResult(result)).toBe(false);\n expect(\n (result as unknown as { error: InvalidStatusWordError }).error,\n ).toBeInstanceOf(InvalidStatusWordError);\n expect(\n (result as unknown as { error: InvalidStatusWordError }).error\n .originalError?.message,\n ).toBe(expectedOriginalMessage);\n },\n );\n });\n});\n"],
5
- "mappings": "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",
6
- "names": ["InvalidStatusWordError", "isSuccessCommandResult", "GetAppStorageInfoCommand", "ApduResponse", "name", "expectedApdu", "apdu", "statusCode", "response", "result", "expectedMessage", "data", "expectedOriginalMessage"]
7
- }
@@ -1,2 +0,0 @@
1
- import{ApduBuilder as m}from"../../apdu/utils/ApduBuilder";import{ApduParser as s}from"../../apdu/utils/ApduParser";import{CommandResultFactory as t}from"../../command/model/CommandResult";import{isCommandErrorCode as p}from"../../command/utils/CommandErrors";import{CommandUtils as d}from"../../command/utils/CommandUtils";import{GlobalCommandErrorHandler as i}from"../../command/utils/GlobalCommandError";import{DeviceExchangeError as g}from"../../Error";const a={5123:{message:"Application not found."},"662f":{message:"Invalid device state, recovery mode."},5501:{message:"Invalid consent, user rejected."},5502:{message:"Invalid consent, pin is not set."},"670a":{message:"Invalid application name length, two chars minimum."},6733:{message:"Invalid backup length value."}};class C extends g{constructor(r){super({tag:"InitRestoreAppStorageCommandError",...r})}}class E{constructor(r){this.args=r}name="InitRestoreAppStorage";header={cla:224,ins:108,p1:0,p2:0};getApdu(){const{appName:r,appStorageDataLength:e}=this.args;return new m(this.header).add32BitUIntToData(e).addAsciiStringToData(r).build()}parseResponse(r){const e=new s(r);if(!d.isSuccessResponse(r)){const o=e.encodeToHexaString(r.statusCode);return p(o,a)?t({error:new C({...a[o],errorCode:o})}):t({error:i.handle(r)})}return t({data:void 0})}}export{a as INIT_RESTORE_APP_STORAGE_ERRORS,E as InitRestoreAppStorageCommand,C as InitRestoreAppStorageCommandError};
2
- //# sourceMappingURL=InitRestoreAppStorageCommand.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../../../src/api/command/os/InitRestoreAppStorageCommand.ts"],
4
- "sourcesContent": ["import { type Apdu } from \"@api/apdu/model/Apdu\";\nimport { ApduBuilder } from \"@api/apdu/utils/ApduBuilder\";\nimport { ApduParser } from \"@api/apdu/utils/ApduParser\";\nimport { type Command } from \"@api/command/Command\";\nimport {\n type CommandResult,\n CommandResultFactory,\n} from \"@api/command/model/CommandResult\";\nimport {\n type CommandErrors,\n isCommandErrorCode,\n} from \"@api/command/utils/CommandErrors\";\nimport { CommandUtils } from \"@api/command/utils/CommandUtils\";\nimport { GlobalCommandErrorHandler } from \"@api/command/utils/GlobalCommandError\";\nimport { type ApduResponse } from \"@api/device-session/ApduResponse\";\nimport { type CommandErrorArgs, DeviceExchangeError } from \"@api/Error\";\n\nexport type InitRestoreAppStorageCommandArgs = {\n appName: string;\n appStorageDataLength: number;\n};\n\nexport type InitRestoreAppStorageCommandErrorCodes =\n | \"5123\"\n | \"662f\"\n | \"5501\"\n | \"5502\"\n | \"670a\"\n | \"6733\";\n\nexport const INIT_RESTORE_APP_STORAGE_ERRORS: CommandErrors<InitRestoreAppStorageCommandErrorCodes> =\n {\n \"5123\": { message: \"Application not found.\" },\n \"662f\": { message: \"Invalid device state, recovery mode.\" },\n \"5501\": { message: \"Invalid consent, user rejected.\" },\n \"5502\": { message: \"Invalid consent, pin is not set.\" },\n \"670a\": { message: \"Invalid application name length, two chars minimum.\" },\n \"6733\": { message: \"Invalid backup length value.\" },\n };\n\nexport class InitRestoreAppStorageCommandError extends DeviceExchangeError<InitRestoreAppStorageCommandErrorCodes> {\n constructor(args: CommandErrorArgs<InitRestoreAppStorageCommandErrorCodes>) {\n super({ tag: \"InitRestoreAppStorageCommandError\", ...args });\n }\n}\n\nexport type InitRestoreAppStorageCommandResult = CommandResult<\n void,\n InitRestoreAppStorageCommandErrorCodes\n>;\n\nexport class InitRestoreAppStorageCommand\n implements\n Command<\n void,\n InitRestoreAppStorageCommandArgs,\n InitRestoreAppStorageCommandErrorCodes\n >\n{\n readonly name = \"InitRestoreAppStorage\";\n\n private readonly header = {\n cla: 0xe0,\n ins: 0x6c,\n p1: 0x00,\n p2: 0x00,\n };\n\n constructor(private readonly args: InitRestoreAppStorageCommandArgs) {}\n\n getApdu(): Apdu {\n const { appName, appStorageDataLength } = this.args;\n return new ApduBuilder(this.header)\n .add32BitUIntToData(appStorageDataLength)\n .addAsciiStringToData(appName)\n .build();\n }\n\n parseResponse(\n apduResponse: ApduResponse,\n ): InitRestoreAppStorageCommandResult {\n const parser = new ApduParser(apduResponse);\n if (!CommandUtils.isSuccessResponse(apduResponse)) {\n const errorCode = parser.encodeToHexaString(apduResponse.statusCode);\n if (isCommandErrorCode(errorCode, INIT_RESTORE_APP_STORAGE_ERRORS)) {\n return CommandResultFactory({\n error: new InitRestoreAppStorageCommandError({\n ...INIT_RESTORE_APP_STORAGE_ERRORS[errorCode],\n errorCode,\n }),\n });\n }\n return CommandResultFactory({\n error: GlobalCommandErrorHandler.handle(apduResponse),\n });\n }\n\n return CommandResultFactory({\n data: undefined,\n });\n }\n}\n"],
5
- "mappings": "AACA,OAAS,eAAAA,MAAmB,8BAC5B,OAAS,cAAAC,MAAkB,6BAE3B,OAEE,wBAAAC,MACK,mCACP,OAEE,sBAAAC,MACK,mCACP,OAAS,gBAAAC,MAAoB,kCAC7B,OAAS,6BAAAC,MAAiC,wCAE1C,OAAgC,uBAAAC,MAA2B,aAepD,MAAMC,EACX,CACE,KAAQ,CAAE,QAAS,wBAAyB,EAC5C,OAAQ,CAAE,QAAS,sCAAuC,EAC1D,KAAQ,CAAE,QAAS,iCAAkC,EACrD,KAAQ,CAAE,QAAS,kCAAmC,EACtD,OAAQ,CAAE,QAAS,qDAAsD,EACzE,KAAQ,CAAE,QAAS,8BAA+B,CACpD,EAEK,MAAMC,UAA0CF,CAA4D,CACjH,YAAYG,EAAgE,CAC1E,MAAM,CAAE,IAAK,oCAAqC,GAAGA,CAAK,CAAC,CAC7D,CACF,CAOO,MAAMC,CAOb,CAUE,YAA6BD,EAAwC,CAAxC,UAAAA,CAAyC,CAT7D,KAAO,wBAEC,OAAS,CACxB,IAAK,IACL,IAAK,IACL,GAAI,EACJ,GAAI,CACN,EAIA,SAAgB,CACd,KAAM,CAAE,QAAAE,EAAS,qBAAAC,CAAqB,EAAI,KAAK,KAC/C,OAAO,IAAIZ,EAAY,KAAK,MAAM,EAC/B,mBAAmBY,CAAoB,EACvC,qBAAqBD,CAAO,EAC5B,MAAM,CACX,CAEA,cACEE,EACoC,CACpC,MAAMC,EAAS,IAAIb,EAAWY,CAAY,EAC1C,GAAI,CAACT,EAAa,kBAAkBS,CAAY,EAAG,CACjD,MAAME,EAAYD,EAAO,mBAAmBD,EAAa,UAAU,EACnE,OAAIV,EAAmBY,EAAWR,CAA+B,EACxDL,EAAqB,CAC1B,MAAO,IAAIM,EAAkC,CAC3C,GAAGD,EAAgCQ,CAAS,EAC5C,UAAAA,CACF,CAAC,CACH,CAAC,EAEIb,EAAqB,CAC1B,MAAOG,EAA0B,OAAOQ,CAAY,CACtD,CAAC,CACH,CAEA,OAAOX,EAAqB,CAC1B,KAAM,MACR,CAAC,CACH,CACF",
6
- "names": ["ApduBuilder", "ApduParser", "CommandResultFactory", "isCommandErrorCode", "CommandUtils", "GlobalCommandErrorHandler", "DeviceExchangeError", "INIT_RESTORE_APP_STORAGE_ERRORS", "InitRestoreAppStorageCommandError", "args", "InitRestoreAppStorageCommand", "appName", "appStorageDataLength", "apduResponse", "parser", "errorCode"]
7
- }
@@ -1,2 +0,0 @@
1
- import{isSuccessCommandResult as o}from"../../command/model/CommandResult";import{InitRestoreAppStorageCommand as s}from"../../command/os/InitRestoreAppStorageCommand";import{ApduResponse as n}from"../../device-session/ApduResponse";describe("InitRestoreAppStorageCommand",()=>{describe("Name",()=>{it("name should be 'InitRestoreAppStorage'",()=>{const e=new s({appName:"MyApp",appStorageDataLength:10}).name;expect(e).toBe("InitRestoreAppStorage")})}),describe("Command",()=>{it("should return the correct APDU for initializing an app storage restore",()=>{const t=Uint8Array.from([224,108,0,0,9,0,0,0,10,77,121,65,112,112]),e=new s({appName:"MyApp",appStorageDataLength:10}).getApdu();expect(e.getRawApdu()).toEqual(t)})}),describe("Success response",()=>{it("should return a success result",()=>{const t=new n({statusCode:Uint8Array.from([144,0]),data:new Uint8Array([])}),e=new s({appName:"MyApp",appStorageDataLength:10}).parseResponse(t);expect(o(e)).toBe(!0),expect(e).toEqual({data:void 0,status:"SUCCESS"})})}),describe("Error response",()=>{it.each([{description:"application is not found",statusCode:[81,35],expectedMessage:"Application not found."},{description:"device is in recovery mode",statusCode:[102,47],expectedMessage:"Invalid device state, recovery mode."},{description:"user rejected the consent",statusCode:[85,1],expectedMessage:"Invalid consent, user rejected."},{description:"pin is not set",statusCode:[85,2],expectedMessage:"Invalid consent, pin is not set."},{description:"application name length is invalid",statusCode:[103,10],expectedMessage:"Invalid application name length, two chars minimum."},{description:"backup length value is invalid",statusCode:[103,51],expectedMessage:"Invalid backup length value."},{description:"error code is not specific to InitRestoreAppStorageCommand (global error)",statusCode:[85,21],expectedMessage:"Device is locked."}])("should return error when $description",({statusCode:t,expectedMessage:e})=>{const r=new n({statusCode:Uint8Array.from(t),data:new Uint8Array([])}),a=new s({appName:"MyApp",appStorageDataLength:10}).parseResponse(r);expect(o(a)).toBe(!1),expect(a.error.message).toBe(e)})})});
2
- //# sourceMappingURL=InitRestoreAppStorageCommand.test.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../../../src/api/command/os/InitRestoreAppStorageCommand.test.ts"],
4
- "sourcesContent": ["import { isSuccessCommandResult } from \"@api/command/model/CommandResult\";\nimport { InitRestoreAppStorageCommand } from \"@api/command/os/InitRestoreAppStorageCommand\";\nimport { ApduResponse } from \"@api/device-session/ApduResponse\";\n\ndescribe(\"InitRestoreAppStorageCommand\", () => {\n describe(\"Name\", () => {\n it(\"name should be 'InitRestoreAppStorage'\", () => {\n // ARRANGE\n const command = new InitRestoreAppStorageCommand({\n appName: \"MyApp\",\n appStorageDataLength: 10,\n });\n\n // ACT\n const name = command.name;\n\n // ASSERT\n expect(name).toBe(\"InitRestoreAppStorage\");\n });\n });\n\n describe(\"Command\", () => {\n it(\"should return the correct APDU for initializing an app storage restore\", () => {\n // ARRANGE\n const expectedApdu = Uint8Array.from([\n 0xe0, 0x6c, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x0a, 0x4d, 0x79, 0x41,\n 0x70, 0x70,\n ]);\n\n // ACT\n const apdu = new InitRestoreAppStorageCommand({\n appName: \"MyApp\",\n appStorageDataLength: 10,\n }).getApdu();\n\n // ASSERT\n expect(apdu.getRawApdu()).toEqual(expectedApdu);\n });\n });\n\n describe(\"Success response\", () => {\n it(\"should return a success result\", () => {\n // ARRANGE\n const response = new ApduResponse({\n statusCode: Uint8Array.from([0x90, 0x00]),\n data: new Uint8Array([]),\n });\n\n // ACT\n const result = new InitRestoreAppStorageCommand({\n appName: \"MyApp\",\n appStorageDataLength: 10,\n }).parseResponse(response);\n\n // ASSERT\n expect(isSuccessCommandResult(result)).toBe(true);\n expect(result).toEqual({\n data: undefined,\n status: \"SUCCESS\",\n });\n });\n });\n\n describe(\"Error response\", () => {\n it.each([\n {\n description: \"application is not found\",\n statusCode: [0x51, 0x23],\n expectedMessage: \"Application not found.\",\n },\n {\n description: \"device is in recovery mode\",\n statusCode: [0x66, 0x2f],\n expectedMessage: \"Invalid device state, recovery mode.\",\n },\n {\n description: \"user rejected the consent\",\n statusCode: [0x55, 0x01],\n expectedMessage: \"Invalid consent, user rejected.\",\n },\n {\n description: \"pin is not set\",\n statusCode: [0x55, 0x02],\n expectedMessage: \"Invalid consent, pin is not set.\",\n },\n {\n description: \"application name length is invalid\",\n statusCode: [0x67, 0x0a],\n expectedMessage: \"Invalid application name length, two chars minimum.\",\n },\n {\n description: \"backup length value is invalid\",\n statusCode: [0x67, 0x33],\n expectedMessage: \"Invalid backup length value.\",\n },\n {\n description:\n \"error code is not specific to InitRestoreAppStorageCommand (global error)\",\n statusCode: [0x55, 0x15],\n expectedMessage: \"Device is locked.\",\n },\n ])(\n \"should return error when $description\",\n ({ statusCode, expectedMessage }) => {\n // ARRANGE\n const response = new ApduResponse({\n statusCode: Uint8Array.from(statusCode),\n data: new Uint8Array([]),\n });\n\n // ACT\n const result = new InitRestoreAppStorageCommand({\n appName: \"MyApp\",\n appStorageDataLength: 10,\n }).parseResponse(response);\n\n // ASSERT\n expect(isSuccessCommandResult(result)).toBe(false);\n expect((result as unknown as { error: Error }).error.message).toBe(\n expectedMessage,\n );\n },\n );\n });\n});\n"],
5
- "mappings": "AAAA,OAAS,0BAAAA,MAA8B,mCACvC,OAAS,gCAAAC,MAAoC,+CAC7C,OAAS,gBAAAC,MAAoB,mCAE7B,SAAS,+BAAgC,IAAM,CAC7C,SAAS,OAAQ,IAAM,CACrB,GAAG,yCAA0C,IAAM,CAQjD,MAAMC,EANU,IAAIF,EAA6B,CAC/C,QAAS,QACT,qBAAsB,EACxB,CAAC,EAGoB,KAGrB,OAAOE,CAAI,EAAE,KAAK,uBAAuB,CAC3C,CAAC,CACH,CAAC,EAED,SAAS,UAAW,IAAM,CACxB,GAAG,yEAA0E,IAAM,CAEjF,MAAMC,EAAe,WAAW,KAAK,CACnC,IAAM,IAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,GAAM,GAAM,IAAM,GAClE,IAAM,GACR,CAAC,EAGKC,EAAO,IAAIJ,EAA6B,CAC5C,QAAS,QACT,qBAAsB,EACxB,CAAC,EAAE,QAAQ,EAGX,OAAOI,EAAK,WAAW,CAAC,EAAE,QAAQD,CAAY,CAChD,CAAC,CACH,CAAC,EAED,SAAS,mBAAoB,IAAM,CACjC,GAAG,iCAAkC,IAAM,CAEzC,MAAME,EAAW,IAAIJ,EAAa,CAChC,WAAY,WAAW,KAAK,CAAC,IAAM,CAAI,CAAC,EACxC,KAAM,IAAI,WAAW,CAAC,CAAC,CACzB,CAAC,EAGKK,EAAS,IAAIN,EAA6B,CAC9C,QAAS,QACT,qBAAsB,EACxB,CAAC,EAAE,cAAcK,CAAQ,EAGzB,OAAON,EAAuBO,CAAM,CAAC,EAAE,KAAK,EAAI,EAChD,OAAOA,CAAM,EAAE,QAAQ,CACrB,KAAM,OACN,OAAQ,SACV,CAAC,CACH,CAAC,CACH,CAAC,EAED,SAAS,iBAAkB,IAAM,CAC/B,GAAG,KAAK,CACN,CACE,YAAa,2BACb,WAAY,CAAC,GAAM,EAAI,EACvB,gBAAiB,wBACnB,EACA,CACE,YAAa,6BACb,WAAY,CAAC,IAAM,EAAI,EACvB,gBAAiB,sCACnB,EACA,CACE,YAAa,4BACb,WAAY,CAAC,GAAM,CAAI,EACvB,gBAAiB,iCACnB,EACA,CACE,YAAa,iBACb,WAAY,CAAC,GAAM,CAAI,EACvB,gBAAiB,kCACnB,EACA,CACE,YAAa,qCACb,WAAY,CAAC,IAAM,EAAI,EACvB,gBAAiB,qDACnB,EACA,CACE,YAAa,iCACb,WAAY,CAAC,IAAM,EAAI,EACvB,gBAAiB,8BACnB,EACA,CACE,YACE,4EACF,WAAY,CAAC,GAAM,EAAI,EACvB,gBAAiB,mBACnB,CACF,CAAC,EACC,wCACA,CAAC,CAAE,WAAAC,EAAY,gBAAAC,CAAgB,IAAM,CAEnC,MAAMH,EAAW,IAAIJ,EAAa,CAChC,WAAY,WAAW,KAAKM,CAAU,EACtC,KAAM,IAAI,WAAW,CAAC,CAAC,CACzB,CAAC,EAGKD,EAAS,IAAIN,EAA6B,CAC9C,QAAS,QACT,qBAAsB,EACxB,CAAC,EAAE,cAAcK,CAAQ,EAGzB,OAAON,EAAuBO,CAAM,CAAC,EAAE,KAAK,EAAK,EACjD,OAAQA,EAAuC,MAAM,OAAO,EAAE,KAC5DE,CACF,CACF,CACF,CACF,CAAC,CACH,CAAC",
6
- "names": ["isSuccessCommandResult", "InitRestoreAppStorageCommand", "ApduResponse", "name", "expectedApdu", "apdu", "response", "result", "statusCode", "expectedMessage"]
7
- }
@@ -1,2 +0,0 @@
1
- import{ApduBuilder as m}from"../../apdu/utils/ApduBuilder";import{ApduParser as p}from"../../apdu/utils/ApduParser";import{CommandResultFactory as o}from"../../command/model/CommandResult";import{isCommandErrorCode as d}from"../../command/utils/CommandErrors";import{CommandUtils as n}from"../../command/utils/CommandUtils";import{GlobalCommandErrorHandler as i}from"../../command/utils/GlobalCommandError";import{DeviceExchangeError as g}from"../../Error";const t={5123:{message:"Invalid context, Restore Init must be called first."},5419:{message:"Failed to generate AES key."},"541a":{message:"Failed to decrypt the app storage backup."},"662f":{message:"Invalid device state, recovery mode."},6643:{message:"Invalid restore state, restore already performed."},6734:{message:"Invalid chunk length."},"684a":{message:"Invalid backup, app storage header is not valid."}};class C extends g{constructor(e){super({tag:"RestoreAppStorageCommandError",...e})}}class f{constructor(e){this.args=e}name="RestoreAppStorage";header={cla:224,ins:109,p1:0,p2:0};getApdu(){const{chunkData:e}=this.args;return new m(this.header).addBufferToData(e).build()}parseResponse(e){const s=new p(e);if(!n.isSuccessResponse(e)){const r=s.encodeToHexaString(e.statusCode);return d(r,t)?o({error:new C({...t[r],errorCode:r})}):o({error:i.handle(e)})}return o({data:void 0})}}export{t as RESTORE_APP_STORAGE_ERRORS,f as RestoreAppStorageCommand,C as RestoreAppStorageCommandError};
2
- //# sourceMappingURL=RestoreAppStorageCommand.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../../../src/api/command/os/RestoreAppStorageCommand.ts"],
4
- "sourcesContent": ["import { type Apdu } from \"@api/apdu/model/Apdu\";\nimport { ApduBuilder } from \"@api/apdu/utils/ApduBuilder\";\nimport { ApduParser } from \"@api/apdu/utils/ApduParser\";\nimport { type Command } from \"@api/command/Command\";\nimport {\n type CommandResult,\n CommandResultFactory,\n} from \"@api/command/model/CommandResult\";\nimport {\n type CommandErrors,\n isCommandErrorCode,\n} from \"@api/command/utils/CommandErrors\";\nimport { CommandUtils } from \"@api/command/utils/CommandUtils\";\nimport { GlobalCommandErrorHandler } from \"@api/command/utils/GlobalCommandError\";\nimport { type ApduResponse } from \"@api/device-session/ApduResponse\";\nimport { type CommandErrorArgs, DeviceExchangeError } from \"@api/Error\";\n\nexport type RestoreAppStorageCommandArgs = {\n chunkData: Uint8Array;\n};\n\nexport type RestoreAppStorageCommandErrorCodes =\n | \"5123\"\n | \"5419\"\n | \"541a\"\n | \"662f\"\n | \"6643\"\n | \"6734\"\n | \"684a\";\n\nexport const RESTORE_APP_STORAGE_ERRORS: CommandErrors<RestoreAppStorageCommandErrorCodes> =\n {\n \"5123\": { message: \"Invalid context, Restore Init must be called first.\" },\n \"5419\": { message: \"Failed to generate AES key.\" },\n \"541a\": { message: \"Failed to decrypt the app storage backup.\" },\n \"662f\": { message: \"Invalid device state, recovery mode.\" },\n \"6643\": { message: \"Invalid restore state, restore already performed.\" },\n \"6734\": { message: \"Invalid chunk length.\" },\n \"684a\": { message: \"Invalid backup, app storage header is not valid.\" },\n };\n\nexport class RestoreAppStorageCommandError extends DeviceExchangeError<RestoreAppStorageCommandErrorCodes> {\n constructor(args: CommandErrorArgs<RestoreAppStorageCommandErrorCodes>) {\n super({ tag: \"RestoreAppStorageCommandError\", ...args });\n }\n}\n\nexport type RestoreAppStorageCommandResult = CommandResult<\n void,\n RestoreAppStorageCommandErrorCodes\n>;\n\nexport class RestoreAppStorageCommand\n implements\n Command<\n void,\n RestoreAppStorageCommandArgs,\n RestoreAppStorageCommandErrorCodes\n >\n{\n readonly name = \"RestoreAppStorage\";\n\n private readonly header = {\n cla: 0xe0,\n ins: 0x6d,\n p1: 0x00,\n p2: 0x00,\n };\n\n constructor(private readonly args: RestoreAppStorageCommandArgs) {}\n\n getApdu(): Apdu {\n const { chunkData } = this.args;\n return new ApduBuilder(this.header).addBufferToData(chunkData).build();\n }\n\n parseResponse(apduResponse: ApduResponse): RestoreAppStorageCommandResult {\n const parser = new ApduParser(apduResponse);\n if (!CommandUtils.isSuccessResponse(apduResponse)) {\n const errorCode = parser.encodeToHexaString(apduResponse.statusCode);\n if (isCommandErrorCode(errorCode, RESTORE_APP_STORAGE_ERRORS)) {\n return CommandResultFactory({\n error: new RestoreAppStorageCommandError({\n ...RESTORE_APP_STORAGE_ERRORS[errorCode],\n errorCode,\n }),\n });\n }\n return CommandResultFactory({\n error: GlobalCommandErrorHandler.handle(apduResponse),\n });\n }\n\n return CommandResultFactory({\n data: undefined,\n });\n }\n}\n"],
5
- "mappings": "AACA,OAAS,eAAAA,MAAmB,8BAC5B,OAAS,cAAAC,MAAkB,6BAE3B,OAEE,wBAAAC,MACK,mCACP,OAEE,sBAAAC,MACK,mCACP,OAAS,gBAAAC,MAAoB,kCAC7B,OAAS,6BAAAC,MAAiC,wCAE1C,OAAgC,uBAAAC,MAA2B,aAepD,MAAMC,EACX,CACE,KAAQ,CAAE,QAAS,qDAAsD,EACzE,KAAQ,CAAE,QAAS,6BAA8B,EACjD,OAAQ,CAAE,QAAS,2CAA4C,EAC/D,OAAQ,CAAE,QAAS,sCAAuC,EAC1D,KAAQ,CAAE,QAAS,mDAAoD,EACvE,KAAQ,CAAE,QAAS,uBAAwB,EAC3C,OAAQ,CAAE,QAAS,kDAAmD,CACxE,EAEK,MAAMC,UAAsCF,CAAwD,CACzG,YAAYG,EAA4D,CACtE,MAAM,CAAE,IAAK,gCAAiC,GAAGA,CAAK,CAAC,CACzD,CACF,CAOO,MAAMC,CAOb,CAUE,YAA6BD,EAAoC,CAApC,UAAAA,CAAqC,CATzD,KAAO,oBAEC,OAAS,CACxB,IAAK,IACL,IAAK,IACL,GAAI,EACJ,GAAI,CACN,EAIA,SAAgB,CACd,KAAM,CAAE,UAAAE,CAAU,EAAI,KAAK,KAC3B,OAAO,IAAIX,EAAY,KAAK,MAAM,EAAE,gBAAgBW,CAAS,EAAE,MAAM,CACvE,CAEA,cAAcC,EAA4D,CACxE,MAAMC,EAAS,IAAIZ,EAAWW,CAAY,EAC1C,GAAI,CAACR,EAAa,kBAAkBQ,CAAY,EAAG,CACjD,MAAME,EAAYD,EAAO,mBAAmBD,EAAa,UAAU,EACnE,OAAIT,EAAmBW,EAAWP,CAA0B,EACnDL,EAAqB,CAC1B,MAAO,IAAIM,EAA8B,CACvC,GAAGD,EAA2BO,CAAS,EACvC,UAAAA,CACF,CAAC,CACH,CAAC,EAEIZ,EAAqB,CAC1B,MAAOG,EAA0B,OAAOO,CAAY,CACtD,CAAC,CACH,CAEA,OAAOV,EAAqB,CAC1B,KAAM,MACR,CAAC,CACH,CACF",
6
- "names": ["ApduBuilder", "ApduParser", "CommandResultFactory", "isCommandErrorCode", "CommandUtils", "GlobalCommandErrorHandler", "DeviceExchangeError", "RESTORE_APP_STORAGE_ERRORS", "RestoreAppStorageCommandError", "args", "RestoreAppStorageCommand", "chunkData", "apduResponse", "parser", "errorCode"]
7
- }
@@ -1,2 +0,0 @@
1
- import{isSuccessCommandResult as o}from"../../command/model/CommandResult";import{RestoreAppStorageCommand as r}from"../../command/os/RestoreAppStorageCommand";import{ApduResponse as a}from"../../device-session/ApduResponse";describe("RestoreAppStorageCommand",()=>{describe("Name",()=>{it("name should be 'RestoreAppStorage'",()=>{const e=new r({chunkData:Uint8Array.from([1,2,3])}).name;expect(e).toBe("RestoreAppStorage")})}),describe("Command",()=>{it("should return the correct APDU for restoring an app storage chunk",()=>{const t=Uint8Array.from([224,109,0,0,3,1,2,3]),e=new r({chunkData:Uint8Array.from([1,2,3])}).getApdu();expect(e.getRawApdu()).toEqual(t)})}),describe("Success response",()=>{it("should return a success result",()=>{const t=new a({statusCode:Uint8Array.from([144,0]),data:new Uint8Array([])}),e=new r({chunkData:Uint8Array.from([1,2,3])}).parseResponse(t);expect(o(e)).toBe(!0),expect(e).toEqual({data:void 0,status:"SUCCESS"})})}),describe("Error response",()=>{it.each([{description:"restore init has not been called",statusCode:[81,35],expectedMessage:"Invalid context, Restore Init must be called first."},{description:"AES key generation failed",statusCode:[84,25],expectedMessage:"Failed to generate AES key."},{description:"decryption failed",statusCode:[84,26],expectedMessage:"Failed to decrypt the app storage backup."},{description:"device is in recovery mode",statusCode:[102,47],expectedMessage:"Invalid device state, recovery mode."},{description:"restore has already been performed",statusCode:[102,67],expectedMessage:"Invalid restore state, restore already performed."},{description:"chunk length is invalid",statusCode:[103,52],expectedMessage:"Invalid chunk length."},{description:"app storage header is invalid",statusCode:[104,74],expectedMessage:"Invalid backup, app storage header is not valid."},{description:"error code is not specific to RestoreAppStorageCommand (global error)",statusCode:[85,21],expectedMessage:"Device is locked."}])("should return error when $description",({statusCode:t,expectedMessage:e})=>{const n=new a({statusCode:Uint8Array.from(t),data:new Uint8Array([])}),s=new r({chunkData:Uint8Array.from([1,2,3])}).parseResponse(n);expect(o(s)).toBe(!1),expect(s.error.message).toBe(e)})})});
2
- //# sourceMappingURL=RestoreAppStorageCommand.test.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../../../src/api/command/os/RestoreAppStorageCommand.test.ts"],
4
- "sourcesContent": ["import { isSuccessCommandResult } from \"@api/command/model/CommandResult\";\nimport { RestoreAppStorageCommand } from \"@api/command/os/RestoreAppStorageCommand\";\nimport { ApduResponse } from \"@api/device-session/ApduResponse\";\n\ndescribe(\"RestoreAppStorageCommand\", () => {\n describe(\"Name\", () => {\n it(\"name should be 'RestoreAppStorage'\", () => {\n // ARRANGE\n const command = new RestoreAppStorageCommand({\n chunkData: Uint8Array.from([0x01, 0x02, 0x03]),\n });\n\n // ACT\n const name = command.name;\n\n // ASSERT\n expect(name).toBe(\"RestoreAppStorage\");\n });\n });\n\n describe(\"Command\", () => {\n it(\"should return the correct APDU for restoring an app storage chunk\", () => {\n // ARRANGE\n const expectedApdu = Uint8Array.from([\n 0xe0, 0x6d, 0x00, 0x00, 0x03, 0x01, 0x02, 0x03,\n ]);\n\n // ACT\n const apdu = new RestoreAppStorageCommand({\n chunkData: Uint8Array.from([0x01, 0x02, 0x03]),\n }).getApdu();\n\n // ASSERT\n expect(apdu.getRawApdu()).toEqual(expectedApdu);\n });\n });\n\n describe(\"Success response\", () => {\n it(\"should return a success result\", () => {\n // ARRANGE\n const response = new ApduResponse({\n statusCode: Uint8Array.from([0x90, 0x00]),\n data: new Uint8Array([]),\n });\n\n // ACT\n const result = new RestoreAppStorageCommand({\n chunkData: Uint8Array.from([0x01, 0x02, 0x03]),\n }).parseResponse(response);\n\n // ASSERT\n expect(isSuccessCommandResult(result)).toBe(true);\n expect(result).toEqual({\n data: undefined,\n status: \"SUCCESS\",\n });\n });\n });\n\n describe(\"Error response\", () => {\n it.each([\n {\n description: \"restore init has not been called\",\n statusCode: [0x51, 0x23],\n expectedMessage: \"Invalid context, Restore Init must be called first.\",\n },\n {\n description: \"AES key generation failed\",\n statusCode: [0x54, 0x19],\n expectedMessage: \"Failed to generate AES key.\",\n },\n {\n description: \"decryption failed\",\n statusCode: [0x54, 0x1a],\n expectedMessage: \"Failed to decrypt the app storage backup.\",\n },\n {\n description: \"device is in recovery mode\",\n statusCode: [0x66, 0x2f],\n expectedMessage: \"Invalid device state, recovery mode.\",\n },\n {\n description: \"restore has already been performed\",\n statusCode: [0x66, 0x43],\n expectedMessage: \"Invalid restore state, restore already performed.\",\n },\n {\n description: \"chunk length is invalid\",\n statusCode: [0x67, 0x34],\n expectedMessage: \"Invalid chunk length.\",\n },\n {\n description: \"app storage header is invalid\",\n statusCode: [0x68, 0x4a],\n expectedMessage: \"Invalid backup, app storage header is not valid.\",\n },\n {\n description:\n \"error code is not specific to RestoreAppStorageCommand (global error)\",\n statusCode: [0x55, 0x15],\n expectedMessage: \"Device is locked.\",\n },\n ])(\n \"should return error when $description\",\n ({ statusCode, expectedMessage }) => {\n // ARRANGE\n const response = new ApduResponse({\n statusCode: Uint8Array.from(statusCode),\n data: new Uint8Array([]),\n });\n\n // ACT\n const result = new RestoreAppStorageCommand({\n chunkData: Uint8Array.from([0x01, 0x02, 0x03]),\n }).parseResponse(response);\n\n // ASSERT\n expect(isSuccessCommandResult(result)).toBe(false);\n expect((result as unknown as { error: Error }).error.message).toBe(\n expectedMessage,\n );\n },\n );\n });\n});\n"],
5
- "mappings": "AAAA,OAAS,0BAAAA,MAA8B,mCACvC,OAAS,4BAAAC,MAAgC,2CACzC,OAAS,gBAAAC,MAAoB,mCAE7B,SAAS,2BAA4B,IAAM,CACzC,SAAS,OAAQ,IAAM,CACrB,GAAG,qCAAsC,IAAM,CAO7C,MAAMC,EALU,IAAIF,EAAyB,CAC3C,UAAW,WAAW,KAAK,CAAC,EAAM,EAAM,CAAI,CAAC,CAC/C,CAAC,EAGoB,KAGrB,OAAOE,CAAI,EAAE,KAAK,mBAAmB,CACvC,CAAC,CACH,CAAC,EAED,SAAS,UAAW,IAAM,CACxB,GAAG,oEAAqE,IAAM,CAE5E,MAAMC,EAAe,WAAW,KAAK,CACnC,IAAM,IAAM,EAAM,EAAM,EAAM,EAAM,EAAM,CAC5C,CAAC,EAGKC,EAAO,IAAIJ,EAAyB,CACxC,UAAW,WAAW,KAAK,CAAC,EAAM,EAAM,CAAI,CAAC,CAC/C,CAAC,EAAE,QAAQ,EAGX,OAAOI,EAAK,WAAW,CAAC,EAAE,QAAQD,CAAY,CAChD,CAAC,CACH,CAAC,EAED,SAAS,mBAAoB,IAAM,CACjC,GAAG,iCAAkC,IAAM,CAEzC,MAAME,EAAW,IAAIJ,EAAa,CAChC,WAAY,WAAW,KAAK,CAAC,IAAM,CAAI,CAAC,EACxC,KAAM,IAAI,WAAW,CAAC,CAAC,CACzB,CAAC,EAGKK,EAAS,IAAIN,EAAyB,CAC1C,UAAW,WAAW,KAAK,CAAC,EAAM,EAAM,CAAI,CAAC,CAC/C,CAAC,EAAE,cAAcK,CAAQ,EAGzB,OAAON,EAAuBO,CAAM,CAAC,EAAE,KAAK,EAAI,EAChD,OAAOA,CAAM,EAAE,QAAQ,CACrB,KAAM,OACN,OAAQ,SACV,CAAC,CACH,CAAC,CACH,CAAC,EAED,SAAS,iBAAkB,IAAM,CAC/B,GAAG,KAAK,CACN,CACE,YAAa,mCACb,WAAY,CAAC,GAAM,EAAI,EACvB,gBAAiB,qDACnB,EACA,CACE,YAAa,4BACb,WAAY,CAAC,GAAM,EAAI,EACvB,gBAAiB,6BACnB,EACA,CACE,YAAa,oBACb,WAAY,CAAC,GAAM,EAAI,EACvB,gBAAiB,2CACnB,EACA,CACE,YAAa,6BACb,WAAY,CAAC,IAAM,EAAI,EACvB,gBAAiB,sCACnB,EACA,CACE,YAAa,qCACb,WAAY,CAAC,IAAM,EAAI,EACvB,gBAAiB,mDACnB,EACA,CACE,YAAa,0BACb,WAAY,CAAC,IAAM,EAAI,EACvB,gBAAiB,uBACnB,EACA,CACE,YAAa,gCACb,WAAY,CAAC,IAAM,EAAI,EACvB,gBAAiB,kDACnB,EACA,CACE,YACE,wEACF,WAAY,CAAC,GAAM,EAAI,EACvB,gBAAiB,mBACnB,CACF,CAAC,EACC,wCACA,CAAC,CAAE,WAAAC,EAAY,gBAAAC,CAAgB,IAAM,CAEnC,MAAMH,EAAW,IAAIJ,EAAa,CAChC,WAAY,WAAW,KAAKM,CAAU,EACtC,KAAM,IAAI,WAAW,CAAC,CAAC,CACzB,CAAC,EAGKD,EAAS,IAAIN,EAAyB,CAC1C,UAAW,WAAW,KAAK,CAAC,EAAM,EAAM,CAAI,CAAC,CAC/C,CAAC,EAAE,cAAcK,CAAQ,EAGzB,OAAON,EAAuBO,CAAM,CAAC,EAAE,KAAK,EAAK,EACjD,OAAQA,EAAuC,MAAM,OAAO,EAAE,KAC5DE,CACF,CACF,CACF,CACF,CAAC,CACH,CAAC",
6
- "names": ["isSuccessCommandResult", "RestoreAppStorageCommand", "ApduResponse", "name", "expectedApdu", "apdu", "response", "result", "statusCode", "expectedMessage"]
7
- }
@@ -1,2 +0,0 @@
1
- import{isSuccessCommandResult as g}from"../../command/model/CommandResult";import{BackupAppStorageCommand as u}from"../../command/os/BackupAppStorageCommand";import{GetAppStorageInfoCommand as d}from"../../command/os/GetAppStorageInfoCommand";import{DmkResultFactory as o}from"../../model/DmkResult";import{bufferToHexaString as c}from"../../utils/HexaString";class y{constructor(t,r,p){this.args=t;this.api=r;this.logger=p}async run(){this.logger.debug("[run] Starting BackupAppStorageTask",{data:{appName:this.args.appName}});const{appName:t}=this.args,r=await this.api.sendCommand(new d({appName:t}));if(!g(r))return this.logger.debug("[run] Failed to get app storage info",{data:{error:r.error}}),o({error:r.error});const{storageSize:p}=r.data;let s=0,e=new Uint8Array(0);for(;s<p;){const a=await this.api.sendCommand(new u);if(!g(a))return this.logger.debug("[run] Failed to backup app storage",{data:{error:a.error}}),o({error:a.error});const{chunkData:m,chunkSize:i}=a.data;e=Uint8Array.from([...e,...m]),s+=i}const n=c(e);return this.logger.debug("[run] App storage data backed up successfully",{data:{appStorageData:n}}),o({data:{appStorageData:n}})}}export{y as BackupAppStorageTask};
2
- //# sourceMappingURL=BackupAppStorageTask.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../../../src/api/device-action/task/BackupAppStorageTask.ts"],
4
- "sourcesContent": ["import {\n type CommandErrorResult,\n isSuccessCommandResult,\n} from \"@api/command/model/CommandResult\";\nimport {\n BackupAppStorageCommand,\n type BackupAppStorageCommandErrorCodes,\n} from \"@api/command/os/BackupAppStorageCommand\";\nimport {\n GetAppStorageInfoCommand,\n type GetAppStorageInfoCommandErrorCodes,\n} from \"@api/command/os/GetAppStorageInfoCommand\";\nimport { type InternalApi } from \"@api/device-action/DeviceAction\";\nimport { type LoggerPublisherService } from \"@api/logger-publisher/service/LoggerPublisherService\";\nimport { type DmkResult, DmkResultFactory } from \"@api/model/DmkResult\";\nimport { bufferToHexaString, type HexaString } from \"@api/utils/HexaString\";\n\nexport type BackupAppStorageTaskArgs = {\n appName: string;\n};\n\nexport type BackupAppStorageTaskResponse = {\n appStorageData: HexaString;\n};\n\nexport type BackupAppStorageTaskErrorCodes =\n | GetAppStorageInfoCommandErrorCodes\n | BackupAppStorageCommandErrorCodes;\n\nexport type BackupAppStorageTaskError =\n | CommandErrorResult<GetAppStorageInfoCommandErrorCodes>[\"error\"]\n | CommandErrorResult<BackupAppStorageCommandErrorCodes>[\"error\"];\n\nexport class BackupAppStorageTask {\n constructor(\n private readonly args: BackupAppStorageTaskArgs,\n private readonly api: InternalApi,\n private readonly logger: LoggerPublisherService,\n ) {}\n\n public async run(): Promise<\n DmkResult<BackupAppStorageTaskResponse, BackupAppStorageTaskError>\n > {\n this.logger.debug(\"[run] Starting BackupAppStorageTask\", {\n data: {\n appName: this.args.appName,\n },\n });\n\n const { appName } = this.args;\n\n const getAppStorageInfo = await this.api.sendCommand(\n new GetAppStorageInfoCommand({\n appName,\n }),\n );\n\n if (!isSuccessCommandResult(getAppStorageInfo)) {\n this.logger.debug(\"[run] Failed to get app storage info\", {\n data: { error: getAppStorageInfo.error },\n });\n return DmkResultFactory({\n error: getAppStorageInfo.error,\n });\n }\n\n const { storageSize } = getAppStorageInfo.data;\n let offset = 0;\n let appStorageDataBytes = new Uint8Array(0);\n\n while (offset < storageSize) {\n const backupStorage = await this.api.sendCommand(\n new BackupAppStorageCommand(),\n );\n if (!isSuccessCommandResult(backupStorage)) {\n this.logger.debug(\"[run] Failed to backup app storage\", {\n data: { error: backupStorage.error },\n });\n return DmkResultFactory({\n error: backupStorage.error,\n });\n }\n\n const { chunkData, chunkSize } = backupStorage.data;\n appStorageDataBytes = Uint8Array.from([\n ...appStorageDataBytes,\n ...chunkData,\n ]);\n offset += chunkSize;\n }\n\n const appStorageData = bufferToHexaString(appStorageDataBytes);\n this.logger.debug(\"[run] App storage data backed up successfully\", {\n data: {\n appStorageData,\n },\n });\n\n return DmkResultFactory({\n data: {\n appStorageData,\n },\n });\n }\n}\n"],
5
- "mappings": "AAAA,OAEE,0BAAAA,MACK,mCACP,OACE,2BAAAC,MAEK,0CACP,OACE,4BAAAC,MAEK,2CAGP,OAAyB,oBAAAC,MAAwB,uBACjD,OAAS,sBAAAC,MAA2C,wBAkB7C,MAAMC,CAAqB,CAChC,YACmBC,EACAC,EACAC,EACjB,CAHiB,UAAAF,EACA,SAAAC,EACA,YAAAC,CAChB,CAEH,MAAa,KAEX,CACA,KAAK,OAAO,MAAM,sCAAuC,CACvD,KAAM,CACJ,QAAS,KAAK,KAAK,OACrB,CACF,CAAC,EAED,KAAM,CAAE,QAAAC,CAAQ,EAAI,KAAK,KAEnBC,EAAoB,MAAM,KAAK,IAAI,YACvC,IAAIR,EAAyB,CAC3B,QAAAO,CACF,CAAC,CACH,EAEA,GAAI,CAACT,EAAuBU,CAAiB,EAC3C,YAAK,OAAO,MAAM,uCAAwC,CACxD,KAAM,CAAE,MAAOA,EAAkB,KAAM,CACzC,CAAC,EACMP,EAAiB,CACtB,MAAOO,EAAkB,KAC3B,CAAC,EAGH,KAAM,CAAE,YAAAC,CAAY,EAAID,EAAkB,KAC1C,IAAIE,EAAS,EACTC,EAAsB,IAAI,WAAW,CAAC,EAE1C,KAAOD,EAASD,GAAa,CAC3B,MAAMG,EAAgB,MAAM,KAAK,IAAI,YACnC,IAAIb,CACN,EACA,GAAI,CAACD,EAAuBc,CAAa,EACvC,YAAK,OAAO,MAAM,qCAAsC,CACtD,KAAM,CAAE,MAAOA,EAAc,KAAM,CACrC,CAAC,EACMX,EAAiB,CACtB,MAAOW,EAAc,KACvB,CAAC,EAGH,KAAM,CAAE,UAAAC,EAAW,UAAAC,CAAU,EAAIF,EAAc,KAC/CD,EAAsB,WAAW,KAAK,CACpC,GAAGA,EACH,GAAGE,CACL,CAAC,EACDH,GAAUI,CACZ,CAEA,MAAMC,EAAiBb,EAAmBS,CAAmB,EAC7D,YAAK,OAAO,MAAM,gDAAiD,CACjE,KAAM,CACJ,eAAAI,CACF,CACF,CAAC,EAEMd,EAAiB,CACtB,KAAM,CACJ,eAAAc,CACF,CACF,CAAC,CACH,CACF",
6
- "names": ["isSuccessCommandResult", "BackupAppStorageCommand", "GetAppStorageInfoCommand", "DmkResultFactory", "bufferToHexaString", "BackupAppStorageTask", "args", "api", "logger", "appName", "getAppStorageInfo", "storageSize", "offset", "appStorageDataBytes", "backupStorage", "chunkData", "chunkSize", "appStorageData"]
7
- }
@@ -1,2 +0,0 @@
1
- import{BackupAppStorageCommandError as p}from"../../command/os/BackupAppStorageCommand";import{GetAppStorageInfoCommandError as c}from"../../command/os/GetAppStorageInfoCommand";import{BackupAppStorageTask as n}from"../../device-action/task/BackupAppStorageTask";import{CommandResultFactory as a,DmkResultFactory as i,isSuccessDmkResult as u}from"../../index";describe("BackupAppStorageTask",()=>{let o,t;const s=vi.fn();beforeEach(()=>{vi.clearAllMocks(),o={sendCommand:s},t={debug:vi.fn()}}),describe("Success",()=>{it("should backup app storage data successfully",async()=>{const r=new n({appName:"MyApp"},o,t);s.mockResolvedValueOnce(a({data:{storageSize:15}})).mockResolvedValueOnce(a({data:{chunkData:new Uint8Array([1,35,69,103,137]),chunkSize:5}})).mockResolvedValueOnce(a({data:{chunkData:new Uint8Array([10,11,12,13,14]),chunkSize:5}})).mockResolvedValueOnce(a({data:{chunkData:new Uint8Array([15,16,17,18,19]),chunkSize:5}}));const e=await r.run();expect(u(e)).toBe(!0),expect(e.data.appStorageData).toBe("0x01234567890a0b0c0d0e0f10111213")})}),describe("Error",()=>{it("should return error when getting app storage info fails",async()=>{const r=new n({appName:"MyApp"},o,t);s.mockResolvedValueOnce(a({error:new c({message:"Application not found.",errorCode:"5123"})}));const e=await r.run();expect(e).toStrictEqual(i({error:new c({message:"Application not found.",errorCode:"5123"})}))}),it("should return error when backing up app storage data fails",async()=>{const r=new n({appName:"MyApp"},o,t);s.mockResolvedValueOnce(a({data:{storageSize:100}})).mockResolvedValueOnce(a({error:new p({message:"Failed to backup app storage data.",errorCode:"541c"})}));const e=await r.run();expect(u(e)).toBe(!1),expect(e.error).toBeInstanceOf(p),expect(e.error.message).toBe("Failed to backup app storage data.")})})});
2
- //# sourceMappingURL=BackupAppStorageTask.test.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../../../src/api/device-action/task/BackupAppStorageTask.test.ts"],
4
- "sourcesContent": ["import { BackupAppStorageCommandError } from \"@api/command/os/BackupAppStorageCommand\";\nimport { GetAppStorageInfoCommandError } from \"@api/command/os/GetAppStorageInfoCommand\";\nimport { type InternalApi } from \"@api/device-action/DeviceAction\";\nimport {\n BackupAppStorageTask,\n type BackupAppStorageTaskResponse,\n} from \"@api/device-action/task/BackupAppStorageTask\";\nimport {\n CommandResultFactory,\n DmkResultFactory,\n isSuccessDmkResult,\n} from \"@api/index\";\nimport { type LoggerPublisherService } from \"@api/logger-publisher/service/LoggerPublisherService\";\n\ndescribe(\"BackupAppStorageTask\", () => {\n let api: InternalApi;\n let logger: LoggerPublisherService;\n const sendCommand = vi.fn();\n\n beforeEach(() => {\n vi.clearAllMocks();\n api = {\n sendCommand,\n } as unknown as InternalApi;\n logger = {\n debug: vi.fn(),\n } as unknown as LoggerPublisherService;\n });\n\n describe(\"Success\", () => {\n it(\"should backup app storage data successfully\", async () => {\n // ARRANGE\n const task = new BackupAppStorageTask(\n {\n appName: \"MyApp\",\n },\n api,\n logger,\n );\n\n sendCommand\n .mockResolvedValueOnce(\n CommandResultFactory({ data: { storageSize: 15 } }),\n )\n .mockResolvedValueOnce(\n CommandResultFactory({\n data: {\n chunkData: new Uint8Array([0x01, 0x23, 0x45, 0x67, 0x89]),\n chunkSize: 5,\n },\n }),\n )\n .mockResolvedValueOnce(\n CommandResultFactory({\n data: {\n chunkData: new Uint8Array([0x0a, 0x0b, 0x0c, 0x0d, 0x0e]),\n chunkSize: 5,\n },\n }),\n )\n .mockResolvedValueOnce(\n CommandResultFactory({\n data: {\n chunkData: new Uint8Array([0x0f, 0x10, 0x11, 0x12, 0x13]),\n chunkSize: 5,\n },\n }),\n );\n\n // ACT\n const result = await task.run();\n\n // ASSERT\n expect(isSuccessDmkResult(result)).toBe(true);\n expect(\n (result as { data: BackupAppStorageTaskResponse }).data.appStorageData,\n ).toBe(\"0x01234567890a0b0c0d0e0f10111213\");\n });\n });\n\n describe(\"Error\", () => {\n it(\"should return error when getting app storage info fails\", async () => {\n // ARRANGE\n const task = new BackupAppStorageTask(\n {\n appName: \"MyApp\",\n },\n api,\n logger,\n );\n\n sendCommand.mockResolvedValueOnce(\n CommandResultFactory({\n error: new GetAppStorageInfoCommandError({\n message: \"Application not found.\",\n errorCode: \"5123\",\n }),\n }),\n );\n\n // ACT\n const result = await task.run();\n\n // ASSERT\n expect(result).toStrictEqual(\n DmkResultFactory({\n error: new GetAppStorageInfoCommandError({\n message: \"Application not found.\",\n errorCode: \"5123\",\n }),\n }),\n );\n });\n\n it(\"should return error when backing up app storage data fails\", async () => {\n // ARRANGE\n const task = new BackupAppStorageTask(\n {\n appName: \"MyApp\",\n },\n api,\n logger,\n );\n\n sendCommand\n .mockResolvedValueOnce(\n CommandResultFactory({ data: { storageSize: 100 } }),\n )\n .mockResolvedValueOnce(\n CommandResultFactory({\n error: new BackupAppStorageCommandError({\n message: \"Failed to backup app storage data.\",\n errorCode: \"541c\",\n }),\n }),\n );\n\n // ACT\n const result = await task.run();\n\n // ASSERT\n expect(isSuccessDmkResult(result)).toBe(false);\n expect(\n (result as { error: BackupAppStorageCommandError }).error,\n ).toBeInstanceOf(BackupAppStorageCommandError);\n expect(\n (result as { error: BackupAppStorageCommandError }).error.message,\n ).toBe(\"Failed to backup app storage data.\");\n });\n });\n});\n"],
5
- "mappings": "AAAA,OAAS,gCAAAA,MAAoC,0CAC7C,OAAS,iCAAAC,MAAqC,2CAE9C,OACE,wBAAAC,MAEK,+CACP,OACE,wBAAAC,EACA,oBAAAC,EACA,sBAAAC,MACK,aAGP,SAAS,uBAAwB,IAAM,CACrC,IAAIC,EACAC,EACJ,MAAMC,EAAc,GAAG,GAAG,EAE1B,WAAW,IAAM,CACf,GAAG,cAAc,EACjBF,EAAM,CACJ,YAAAE,CACF,EACAD,EAAS,CACP,MAAO,GAAG,GAAG,CACf,CACF,CAAC,EAED,SAAS,UAAW,IAAM,CACxB,GAAG,8CAA+C,SAAY,CAE5D,MAAME,EAAO,IAAIP,EACf,CACE,QAAS,OACX,EACAI,EACAC,CACF,EAEAC,EACG,sBACCL,EAAqB,CAAE,KAAM,CAAE,YAAa,EAAG,CAAE,CAAC,CACpD,EACC,sBACCA,EAAqB,CACnB,KAAM,CACJ,UAAW,IAAI,WAAW,CAAC,EAAM,GAAM,GAAM,IAAM,GAAI,CAAC,EACxD,UAAW,CACb,CACF,CAAC,CACH,EACC,sBACCA,EAAqB,CACnB,KAAM,CACJ,UAAW,IAAI,WAAW,CAAC,GAAM,GAAM,GAAM,GAAM,EAAI,CAAC,EACxD,UAAW,CACb,CACF,CAAC,CACH,EACC,sBACCA,EAAqB,CACnB,KAAM,CACJ,UAAW,IAAI,WAAW,CAAC,GAAM,GAAM,GAAM,GAAM,EAAI,CAAC,EACxD,UAAW,CACb,CACF,CAAC,CACH,EAGF,MAAMO,EAAS,MAAMD,EAAK,IAAI,EAG9B,OAAOJ,EAAmBK,CAAM,CAAC,EAAE,KAAK,EAAI,EAC5C,OACGA,EAAkD,KAAK,cAC1D,EAAE,KAAK,kCAAkC,CAC3C,CAAC,CACH,CAAC,EAED,SAAS,QAAS,IAAM,CACtB,GAAG,0DAA2D,SAAY,CAExE,MAAMD,EAAO,IAAIP,EACf,CACE,QAAS,OACX,EACAI,EACAC,CACF,EAEAC,EAAY,sBACVL,EAAqB,CACnB,MAAO,IAAIF,EAA8B,CACvC,QAAS,yBACT,UAAW,MACb,CAAC,CACH,CAAC,CACH,EAGA,MAAMS,EAAS,MAAMD,EAAK,IAAI,EAG9B,OAAOC,CAAM,EAAE,cACbN,EAAiB,CACf,MAAO,IAAIH,EAA8B,CACvC,QAAS,yBACT,UAAW,MACb,CAAC,CACH,CAAC,CACH,CACF,CAAC,EAED,GAAG,6DAA8D,SAAY,CAE3E,MAAMQ,EAAO,IAAIP,EACf,CACE,QAAS,OACX,EACAI,EACAC,CACF,EAEAC,EACG,sBACCL,EAAqB,CAAE,KAAM,CAAE,YAAa,GAAI,CAAE,CAAC,CACrD,EACC,sBACCA,EAAqB,CACnB,MAAO,IAAIH,EAA6B,CACtC,QAAS,qCACT,UAAW,MACb,CAAC,CACH,CAAC,CACH,EAGF,MAAMU,EAAS,MAAMD,EAAK,IAAI,EAG9B,OAAOJ,EAAmBK,CAAM,CAAC,EAAE,KAAK,EAAK,EAC7C,OACGA,EAAmD,KACtD,EAAE,eAAeV,CAA4B,EAC7C,OACGU,EAAmD,MAAM,OAC5D,EAAE,KAAK,oCAAoC,CAC7C,CAAC,CACH,CAAC,CACH,CAAC",
6
- "names": ["BackupAppStorageCommandError", "GetAppStorageInfoCommandError", "BackupAppStorageTask", "CommandResultFactory", "DmkResultFactory", "isSuccessDmkResult", "api", "logger", "sendCommand", "task", "result"]
7
- }
@@ -1,2 +0,0 @@
1
- import{APDU_MAX_PAYLOAD as s}from"../../apdu/utils/ApduBuilder";import{isSuccessCommandResult as p}from"../../command/model/CommandResult";import{RestoreAppStorageCommand as g}from"../../command/os/RestoreAppStorageCommand";import{DmkResultFactory as a}from"../../model/DmkResult";class d{constructor(e,r,t){this.args=e;this.api=r;this.logger=t}async run(){const{appStorageData:e}=this.args;this.logger.debug("[run] Starting RestoreAppStorageTask",{data:{appStorageDataLength:e.length}});let r=0;for(;r<e.length;){const t=e.subarray(r,r+s),o=await this.api.sendCommand(new g({chunkData:t}));if(!p(o))return this.logger.debug("[run] Failed to restore app storage chunk",{data:{error:o.error}}),a({error:o.error});r+=t.length}return this.logger.debug("[run] App storage data restored successfully"),a({data:void 0})}}export{d as RestoreAppStorageTask};
2
- //# sourceMappingURL=RestoreAppStorageTask.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../../../src/api/device-action/task/RestoreAppStorageTask.ts"],
4
- "sourcesContent": ["import { APDU_MAX_PAYLOAD } from \"@api/apdu/utils/ApduBuilder\";\nimport {\n type CommandErrorResult,\n isSuccessCommandResult,\n} from \"@api/command/model/CommandResult\";\nimport {\n RestoreAppStorageCommand,\n type RestoreAppStorageCommandErrorCodes,\n} from \"@api/command/os/RestoreAppStorageCommand\";\nimport { type InternalApi } from \"@api/device-action/DeviceAction\";\nimport { type LoggerPublisherService } from \"@api/logger-publisher/service/LoggerPublisherService\";\nimport { type DmkResult, DmkResultFactory } from \"@api/model/DmkResult\";\n\nexport type RestoreAppStorageTaskArgs = {\n appStorageData: Uint8Array;\n};\n\nexport type RestoreAppStorageTaskError =\n CommandErrorResult<RestoreAppStorageCommandErrorCodes>[\"error\"];\n\nexport class RestoreAppStorageTask {\n constructor(\n private readonly args: RestoreAppStorageTaskArgs,\n private readonly api: InternalApi,\n private readonly logger: LoggerPublisherService,\n ) {}\n\n public async run(): Promise<DmkResult<void, RestoreAppStorageTaskError>> {\n const { appStorageData } = this.args;\n\n this.logger.debug(\"[run] Starting RestoreAppStorageTask\", {\n data: {\n appStorageDataLength: appStorageData.length,\n },\n });\n\n let offset = 0;\n\n while (offset < appStorageData.length) {\n const chunkData = appStorageData.subarray(\n offset,\n offset + APDU_MAX_PAYLOAD,\n );\n\n const restoreAppStorage = await this.api.sendCommand(\n new RestoreAppStorageCommand({ chunkData }),\n );\n\n if (!isSuccessCommandResult(restoreAppStorage)) {\n this.logger.debug(\"[run] Failed to restore app storage chunk\", {\n data: { error: restoreAppStorage.error },\n });\n return DmkResultFactory({\n error: restoreAppStorage.error,\n });\n }\n\n offset += chunkData.length;\n }\n\n this.logger.debug(\"[run] App storage data restored successfully\");\n\n return DmkResultFactory({\n data: undefined,\n });\n }\n}\n"],
5
- "mappings": "AAAA,OAAS,oBAAAA,MAAwB,8BACjC,OAEE,0BAAAC,MACK,mCACP,OACE,4BAAAC,MAEK,2CAGP,OAAyB,oBAAAC,MAAwB,uBAS1C,MAAMC,CAAsB,CACjC,YACmBC,EACAC,EACAC,EACjB,CAHiB,UAAAF,EACA,SAAAC,EACA,YAAAC,CAChB,CAEH,MAAa,KAA4D,CACvE,KAAM,CAAE,eAAAC,CAAe,EAAI,KAAK,KAEhC,KAAK,OAAO,MAAM,uCAAwC,CACxD,KAAM,CACJ,qBAAsBA,EAAe,MACvC,CACF,CAAC,EAED,IAAIC,EAAS,EAEb,KAAOA,EAASD,EAAe,QAAQ,CACrC,MAAME,EAAYF,EAAe,SAC/BC,EACAA,EAAST,CACX,EAEMW,EAAoB,MAAM,KAAK,IAAI,YACvC,IAAIT,EAAyB,CAAE,UAAAQ,CAAU,CAAC,CAC5C,EAEA,GAAI,CAACT,EAAuBU,CAAiB,EAC3C,YAAK,OAAO,MAAM,4CAA6C,CAC7D,KAAM,CAAE,MAAOA,EAAkB,KAAM,CACzC,CAAC,EACMR,EAAiB,CACtB,MAAOQ,EAAkB,KAC3B,CAAC,EAGHF,GAAUC,EAAU,MACtB,CAEA,YAAK,OAAO,MAAM,8CAA8C,EAEzDP,EAAiB,CACtB,KAAM,MACR,CAAC,CACH,CACF",
6
- "names": ["APDU_MAX_PAYLOAD", "isSuccessCommandResult", "RestoreAppStorageCommand", "DmkResultFactory", "RestoreAppStorageTask", "args", "api", "logger", "appStorageData", "offset", "chunkData", "restoreAppStorage"]
7
- }
@@ -1,2 +0,0 @@
1
- import{APDU_MAX_PAYLOAD as i}from"../../apdu/utils/ApduBuilder";import{RestoreAppStorageCommandError as p}from"../../command/os/RestoreAppStorageCommand";import{RestoreAppStorageTask as s}from"../../device-action/task/RestoreAppStorageTask";import{CommandResultFactory as c,DmkResultFactory as u,isSuccessDmkResult as l}from"../../index";describe("RestoreAppStorageTask",()=>{let o,r;const e=vi.fn();beforeEach(()=>{vi.clearAllMocks(),o={sendCommand:e},r={debug:vi.fn()}}),describe("Success",()=>{it("should send a single chunk when the data fits in one APDU",async()=>{const t=Uint8Array.from([1,2,3]),a=new s({appStorageData:t},o,r);e.mockResolvedValueOnce(c({data:void 0}));const n=await a.run();expect(l(n)).toBe(!0),expect(e).toHaveBeenCalledTimes(1),expect(e).toHaveBeenCalledWith(expect.objectContaining({args:{chunkData:t}}))}),it("should split the data into several chunks when it does not fit in a single APDU",async()=>{const t=new Uint8Array(i+45).map((m,d)=>d%256),a=new s({appStorageData:t},o,r);e.mockResolvedValueOnce(c({data:void 0})).mockResolvedValueOnce(c({data:void 0}));const n=await a.run();expect(l(n)).toBe(!0),expect(e).toHaveBeenCalledTimes(2),expect(e).toHaveBeenNthCalledWith(1,expect.objectContaining({args:{chunkData:t.slice(0,i)}})),expect(e).toHaveBeenNthCalledWith(2,expect.objectContaining({args:{chunkData:t.slice(i)}}))}),it("should not send any command when the data is empty",async()=>{const a=await new s({appStorageData:new Uint8Array(0)},o,r).run();expect(l(a)).toBe(!0),expect(e).not.toHaveBeenCalled()})}),describe("Error",()=>{it("should return error when restoring a chunk fails",async()=>{const t=Uint8Array.from([1,2,3]),a=new s({appStorageData:t},o,r);e.mockResolvedValueOnce(c({error:new p({message:"Failed to decrypt the app storage backup.",errorCode:"541a"})}));const n=await a.run();expect(n).toStrictEqual(u({error:new p({message:"Failed to decrypt the app storage backup.",errorCode:"541a"})}))}),it("should stop sending chunks as soon as one fails",async()=>{const t=new Uint8Array(i+10),a=new s({appStorageData:t},o,r);e.mockResolvedValueOnce(c({error:new p({message:"Invalid chunk length.",errorCode:"6734"})}));const n=await a.run();expect(l(n)).toBe(!1),expect(e).toHaveBeenCalledTimes(1)})})});
2
- //# sourceMappingURL=RestoreAppStorageTask.test.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../../../src/api/device-action/task/RestoreAppStorageTask.test.ts"],
4
- "sourcesContent": ["import { APDU_MAX_PAYLOAD } from \"@api/apdu/utils/ApduBuilder\";\nimport { RestoreAppStorageCommandError } from \"@api/command/os/RestoreAppStorageCommand\";\nimport { type InternalApi } from \"@api/device-action/DeviceAction\";\nimport { RestoreAppStorageTask } from \"@api/device-action/task/RestoreAppStorageTask\";\nimport {\n CommandResultFactory,\n DmkResultFactory,\n isSuccessDmkResult,\n} from \"@api/index\";\nimport { type LoggerPublisherService } from \"@api/logger-publisher/service/LoggerPublisherService\";\n\ndescribe(\"RestoreAppStorageTask\", () => {\n let api: InternalApi;\n let logger: LoggerPublisherService;\n const sendCommand = vi.fn();\n\n beforeEach(() => {\n vi.clearAllMocks();\n api = {\n sendCommand,\n } as unknown as InternalApi;\n logger = {\n debug: vi.fn(),\n } as unknown as LoggerPublisherService;\n });\n\n describe(\"Success\", () => {\n it(\"should send a single chunk when the data fits in one APDU\", async () => {\n // ARRANGE\n const appStorageData = Uint8Array.from([0x01, 0x02, 0x03]);\n const task = new RestoreAppStorageTask({ appStorageData }, api, logger);\n\n sendCommand.mockResolvedValueOnce(\n CommandResultFactory({ data: undefined }),\n );\n\n // ACT\n const result = await task.run();\n\n // ASSERT\n expect(isSuccessDmkResult(result)).toBe(true);\n expect(sendCommand).toHaveBeenCalledTimes(1);\n expect(sendCommand).toHaveBeenCalledWith(\n expect.objectContaining({\n args: { chunkData: appStorageData },\n }),\n );\n });\n\n it(\"should split the data into several chunks when it does not fit in a single APDU\", async () => {\n // ARRANGE\n const appStorageData = new Uint8Array(APDU_MAX_PAYLOAD + 45).map(\n (_, i) => i % 256,\n );\n const task = new RestoreAppStorageTask({ appStorageData }, api, logger);\n\n sendCommand\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }));\n\n // ACT\n const result = await task.run();\n\n // ASSERT\n expect(isSuccessDmkResult(result)).toBe(true);\n expect(sendCommand).toHaveBeenCalledTimes(2);\n expect(sendCommand).toHaveBeenNthCalledWith(\n 1,\n expect.objectContaining({\n args: { chunkData: appStorageData.slice(0, APDU_MAX_PAYLOAD) },\n }),\n );\n expect(sendCommand).toHaveBeenNthCalledWith(\n 2,\n expect.objectContaining({\n args: { chunkData: appStorageData.slice(APDU_MAX_PAYLOAD) },\n }),\n );\n });\n\n it(\"should not send any command when the data is empty\", async () => {\n // ARRANGE\n const task = new RestoreAppStorageTask(\n { appStorageData: new Uint8Array(0) },\n api,\n logger,\n );\n\n // ACT\n const result = await task.run();\n\n // ASSERT\n expect(isSuccessDmkResult(result)).toBe(true);\n expect(sendCommand).not.toHaveBeenCalled();\n });\n });\n\n describe(\"Error\", () => {\n it(\"should return error when restoring a chunk fails\", async () => {\n // ARRANGE\n const appStorageData = Uint8Array.from([0x01, 0x02, 0x03]);\n const task = new RestoreAppStorageTask({ appStorageData }, api, logger);\n\n sendCommand.mockResolvedValueOnce(\n CommandResultFactory({\n error: new RestoreAppStorageCommandError({\n message: \"Failed to decrypt the app storage backup.\",\n errorCode: \"541a\",\n }),\n }),\n );\n\n // ACT\n const result = await task.run();\n\n // ASSERT\n expect(result).toStrictEqual(\n DmkResultFactory({\n error: new RestoreAppStorageCommandError({\n message: \"Failed to decrypt the app storage backup.\",\n errorCode: \"541a\",\n }),\n }),\n );\n });\n\n it(\"should stop sending chunks as soon as one fails\", async () => {\n // ARRANGE\n const appStorageData = new Uint8Array(APDU_MAX_PAYLOAD + 10);\n const task = new RestoreAppStorageTask({ appStorageData }, api, logger);\n\n sendCommand.mockResolvedValueOnce(\n CommandResultFactory({\n error: new RestoreAppStorageCommandError({\n message: \"Invalid chunk length.\",\n errorCode: \"6734\",\n }),\n }),\n );\n\n // ACT\n const result = await task.run();\n\n // ASSERT\n expect(isSuccessDmkResult(result)).toBe(false);\n expect(sendCommand).toHaveBeenCalledTimes(1);\n });\n });\n});\n"],
5
- "mappings": "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",
6
- "names": ["APDU_MAX_PAYLOAD", "RestoreAppStorageCommandError", "RestoreAppStorageTask", "CommandResultFactory", "DmkResultFactory", "isSuccessDmkResult", "api", "logger", "sendCommand", "appStorageData", "task", "result", "_", "i"]
7
- }
@@ -1,23 +0,0 @@
1
- import { type Apdu } from "../../apdu/model/Apdu";
2
- import { type Command } from "../../command/Command";
3
- import { type CommandResult } from "../../command/model/CommandResult";
4
- import { type CommandErrors } from "../../command/utils/CommandErrors";
5
- import { type ApduResponse } from "../../device-session/ApduResponse";
6
- import { type CommandErrorArgs, DeviceExchangeError } from "../../Error";
7
- export type BackupAppStorageCommandResponse = {
8
- chunkData: Uint8Array;
9
- chunkSize: number;
10
- };
11
- export type BackupAppStorageCommandErrorCodes = "5123" | "5419" | "541a" | "541b" | "541c" | "622f" | "6642";
12
- export declare const BACKUP_APP_STORAGE_ERRORS: CommandErrors<BackupAppStorageCommandErrorCodes>;
13
- export declare class BackupAppStorageCommandError extends DeviceExchangeError<BackupAppStorageCommandErrorCodes> {
14
- constructor(args: CommandErrorArgs<BackupAppStorageCommandErrorCodes>);
15
- }
16
- export type BackupAppStorageCommandResult = CommandResult<BackupAppStorageCommandResponse, BackupAppStorageCommandErrorCodes>;
17
- export declare class BackupAppStorageCommand implements Command<BackupAppStorageCommandResponse, void, BackupAppStorageCommandErrorCodes> {
18
- readonly name = "BackupAppStorage";
19
- private readonly header;
20
- getApdu(): Apdu;
21
- parseResponse(apduResponse: ApduResponse): BackupAppStorageCommandResult;
22
- }
23
- //# sourceMappingURL=BackupAppStorageCommand.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"BackupAppStorageCommand.d.ts","sourceRoot":"","sources":["../../../../../../src/api/command/os/BackupAppStorageCommand.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAGjD,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAEpD,OAAO,EACL,KAAK,aAAa,EAEnB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EACL,KAAK,aAAa,EAEnB,MAAM,kCAAkC,CAAC;AAG1C,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,KAAK,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAExE,MAAM,MAAM,+BAA+B,GAAG;IAC5C,SAAS,EAAE,UAAU,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,iCAAiC,GACzC,MAAM,GACN,MAAM,GACN,MAAM,GACN,MAAM,GACN,MAAM,GACN,MAAM,GACN,MAAM,CAAC;AAEX,eAAO,MAAM,yBAAyB,EAAE,aAAa,CAAC,iCAAiC,CASpF,CAAC;AAEJ,qBAAa,4BAA6B,SAAQ,mBAAmB,CAAC,iCAAiC,CAAC;gBAC1F,IAAI,EAAE,gBAAgB,CAAC,iCAAiC,CAAC;CAGtE;AAED,MAAM,MAAM,6BAA6B,GAAG,aAAa,CACvD,+BAA+B,EAC/B,iCAAiC,CAClC,CAAC;AAEF,qBAAa,uBACX,YACE,OAAO,CACL,+BAA+B,EAC/B,IAAI,EACJ,iCAAiC,CAClC;IAEH,QAAQ,CAAC,IAAI,sBAAsB;IAEnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAKrB;IAEF,OAAO,IAAI,IAAI;IAIf,aAAa,CAAC,YAAY,EAAE,YAAY,GAAG,6BAA6B;CAqCzE"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=BackupAppStorageCommand.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"BackupAppStorageCommand.test.d.ts","sourceRoot":"","sources":["../../../../../../src/api/command/os/BackupAppStorageCommand.test.ts"],"names":[],"mappings":""}
@@ -1,19 +0,0 @@
1
- import { type Apdu } from "../../apdu/model/Apdu";
2
- import { type Command } from "../../command/Command";
3
- import { type CommandResult } from "../../command/model/CommandResult";
4
- import { type CommandErrors } from "../../command/utils/CommandErrors";
5
- import { type ApduResponse } from "../../device-session/ApduResponse";
6
- import { type CommandErrorArgs, DeviceExchangeError } from "../../Error";
7
- export type CommitRestoreAppStorageCommandErrorCodes = "5123" | "5419" | "541b" | "662f" | "6734";
8
- export declare const COMMIT_RESTORE_APP_STORAGE_ERRORS: CommandErrors<CommitRestoreAppStorageCommandErrorCodes>;
9
- export declare class CommitRestoreAppStorageCommandError extends DeviceExchangeError<CommitRestoreAppStorageCommandErrorCodes> {
10
- constructor(args: CommandErrorArgs<CommitRestoreAppStorageCommandErrorCodes>);
11
- }
12
- export type CommitRestoreAppStorageCommandResult = CommandResult<void, CommitRestoreAppStorageCommandErrorCodes>;
13
- export declare class CommitRestoreAppStorageCommand implements Command<void, void, CommitRestoreAppStorageCommandErrorCodes> {
14
- readonly name = "CommitRestoreAppStorage";
15
- private readonly header;
16
- getApdu(): Apdu;
17
- parseResponse(apduResponse: ApduResponse): CommitRestoreAppStorageCommandResult;
18
- }
19
- //# sourceMappingURL=CommitRestoreAppStorageCommand.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CommitRestoreAppStorageCommand.d.ts","sourceRoot":"","sources":["../../../../../../src/api/command/os/CommitRestoreAppStorageCommand.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAGjD,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EACL,KAAK,aAAa,EAEnB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EACL,KAAK,aAAa,EAEnB,MAAM,kCAAkC,CAAC;AAG1C,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,KAAK,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAExE,MAAM,MAAM,wCAAwC,GAChD,MAAM,GACN,MAAM,GACN,MAAM,GACN,MAAM,GACN,MAAM,CAAC;AAEX,eAAO,MAAM,iCAAiC,EAAE,aAAa,CAAC,wCAAwC,CAOnG,CAAC;AAEJ,qBAAa,mCAAoC,SAAQ,mBAAmB,CAAC,wCAAwC,CAAC;gBAElH,IAAI,EAAE,gBAAgB,CAAC,wCAAwC,CAAC;CAInE;AAED,MAAM,MAAM,oCAAoC,GAAG,aAAa,CAC9D,IAAI,EACJ,wCAAwC,CACzC,CAAC;AAEF,qBAAa,8BACX,YAAW,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,wCAAwC,CAAC;IAExE,QAAQ,CAAC,IAAI,6BAA6B;IAE1C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAKrB;IAEF,OAAO,IAAI,IAAI;IAIf,aAAa,CACX,YAAY,EAAE,YAAY,GACzB,oCAAoC;CAqBxC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=CommitRestoreAppStorageCommand.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CommitRestoreAppStorageCommand.test.d.ts","sourceRoot":"","sources":["../../../../../../src/api/command/os/CommitRestoreAppStorageCommand.test.ts"],"names":[],"mappings":""}
@@ -1,31 +0,0 @@
1
- import { type Apdu } from "../../apdu/model/Apdu";
2
- import { type Command } from "../../command/Command";
3
- import { type CommandResult } from "../../command/model/CommandResult";
4
- import { type CommandErrors } from "../../command/utils/CommandErrors";
5
- import { type ApduResponse } from "../../device-session/ApduResponse";
6
- import { type CommandErrorArgs, DeviceExchangeError } from "../../Error";
7
- export type GetAppStorageInfoCommandArgs = {
8
- appName: string;
9
- };
10
- export type GetAppStorageInfoCommandResponse = {
11
- storageSize: number;
12
- storageVersion: string;
13
- hasSettings: boolean;
14
- hasData: boolean;
15
- storageHash: string;
16
- };
17
- export type GetAppStorageInfoCommandErrorCodes = "5123" | "662f" | "670a";
18
- export declare const GET_APP_STORAGE_INFO_ERRORS: CommandErrors<GetAppStorageInfoCommandErrorCodes>;
19
- export declare class GetAppStorageInfoCommandError extends DeviceExchangeError<GetAppStorageInfoCommandErrorCodes> {
20
- constructor(args: CommandErrorArgs<GetAppStorageInfoCommandErrorCodes>);
21
- }
22
- export type GetAppStorageInfoCommandResult = CommandResult<GetAppStorageInfoCommandResponse, GetAppStorageInfoCommandErrorCodes>;
23
- export declare class GetAppStorageInfoCommand implements Command<GetAppStorageInfoCommandResponse, GetAppStorageInfoCommandArgs, GetAppStorageInfoCommandErrorCodes> {
24
- private readonly args;
25
- readonly name = "GetAppStorageInfo";
26
- private readonly header;
27
- constructor(args: GetAppStorageInfoCommandArgs);
28
- getApdu(): Apdu;
29
- parseResponse(apduResponse: ApduResponse): GetAppStorageInfoCommandResult;
30
- }
31
- //# sourceMappingURL=GetAppStorageInfoCommand.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"GetAppStorageInfoCommand.d.ts","sourceRoot":"","sources":["../../../../../../src/api/command/os/GetAppStorageInfoCommand.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAGjD,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAEpD,OAAO,EACL,KAAK,aAAa,EAEnB,MAAM,kCAAkC,CAAC;AAE1C,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,kCAAkC,CAAC;AAGtE,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,KAAK,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAExE,MAAM,MAAM,4BAA4B,GAAG;IACzC,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,gCAAgC,GAAG;IAC7C,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,OAAO,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,kCAAkC,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAE1E,eAAO,MAAM,2BAA2B,EAAE,aAAa,CAAC,kCAAkC,CAKvF,CAAC;AAEJ,qBAAa,6BAA8B,SAAQ,mBAAmB,CAAC,kCAAkC,CAAC;gBAC5F,IAAI,EAAE,gBAAgB,CAAC,kCAAkC,CAAC;CAGvE;AAED,MAAM,MAAM,8BAA8B,GAAG,aAAa,CACxD,gCAAgC,EAChC,kCAAkC,CACnC,CAAC;AAEF,qBAAa,wBACX,YACE,OAAO,CACL,gCAAgC,EAChC,4BAA4B,EAC5B,kCAAkC,CACnC;IAWS,OAAO,CAAC,QAAQ,CAAC,IAAI;IATjC,QAAQ,CAAC,IAAI,uBAAuB;IAEpC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAKrB;gBAE2B,IAAI,EAAE,4BAA4B;IAE/D,OAAO,IAAI,IAAI;IAKf,aAAa,CAAC,YAAY,EAAE,YAAY,GAAG,8BAA8B;CAoE1E"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=GetAppStorageInfoCommand.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"GetAppStorageInfoCommand.test.d.ts","sourceRoot":"","sources":["../../../../../../src/api/command/os/GetAppStorageInfoCommand.test.ts"],"names":[],"mappings":""}
@@ -1,25 +0,0 @@
1
- import { type Apdu } from "../../apdu/model/Apdu";
2
- import { type Command } from "../../command/Command";
3
- import { type CommandResult } from "../../command/model/CommandResult";
4
- import { type CommandErrors } from "../../command/utils/CommandErrors";
5
- import { type ApduResponse } from "../../device-session/ApduResponse";
6
- import { type CommandErrorArgs, DeviceExchangeError } from "../../Error";
7
- export type InitRestoreAppStorageCommandArgs = {
8
- appName: string;
9
- appStorageDataLength: number;
10
- };
11
- export type InitRestoreAppStorageCommandErrorCodes = "5123" | "662f" | "5501" | "5502" | "670a" | "6733";
12
- export declare const INIT_RESTORE_APP_STORAGE_ERRORS: CommandErrors<InitRestoreAppStorageCommandErrorCodes>;
13
- export declare class InitRestoreAppStorageCommandError extends DeviceExchangeError<InitRestoreAppStorageCommandErrorCodes> {
14
- constructor(args: CommandErrorArgs<InitRestoreAppStorageCommandErrorCodes>);
15
- }
16
- export type InitRestoreAppStorageCommandResult = CommandResult<void, InitRestoreAppStorageCommandErrorCodes>;
17
- export declare class InitRestoreAppStorageCommand implements Command<void, InitRestoreAppStorageCommandArgs, InitRestoreAppStorageCommandErrorCodes> {
18
- private readonly args;
19
- readonly name = "InitRestoreAppStorage";
20
- private readonly header;
21
- constructor(args: InitRestoreAppStorageCommandArgs);
22
- getApdu(): Apdu;
23
- parseResponse(apduResponse: ApduResponse): InitRestoreAppStorageCommandResult;
24
- }
25
- //# sourceMappingURL=InitRestoreAppStorageCommand.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"InitRestoreAppStorageCommand.d.ts","sourceRoot":"","sources":["../../../../../../src/api/command/os/InitRestoreAppStorageCommand.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAGjD,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EACL,KAAK,aAAa,EAEnB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EACL,KAAK,aAAa,EAEnB,MAAM,kCAAkC,CAAC;AAG1C,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,KAAK,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAExE,MAAM,MAAM,gCAAgC,GAAG;IAC7C,OAAO,EAAE,MAAM,CAAC;IAChB,oBAAoB,EAAE,MAAM,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,sCAAsC,GAC9C,MAAM,GACN,MAAM,GACN,MAAM,GACN,MAAM,GACN,MAAM,GACN,MAAM,CAAC;AAEX,eAAO,MAAM,+BAA+B,EAAE,aAAa,CAAC,sCAAsC,CAQ/F,CAAC;AAEJ,qBAAa,iCAAkC,SAAQ,mBAAmB,CAAC,sCAAsC,CAAC;gBACpG,IAAI,EAAE,gBAAgB,CAAC,sCAAsC,CAAC;CAG3E;AAED,MAAM,MAAM,kCAAkC,GAAG,aAAa,CAC5D,IAAI,EACJ,sCAAsC,CACvC,CAAC;AAEF,qBAAa,4BACX,YACE,OAAO,CACL,IAAI,EACJ,gCAAgC,EAChC,sCAAsC,CACvC;IAWS,OAAO,CAAC,QAAQ,CAAC,IAAI;IATjC,QAAQ,CAAC,IAAI,2BAA2B;IAExC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAKrB;gBAE2B,IAAI,EAAE,gCAAgC;IAEnE,OAAO,IAAI,IAAI;IAQf,aAAa,CACX,YAAY,EAAE,YAAY,GACzB,kCAAkC;CAqBtC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=InitRestoreAppStorageCommand.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"InitRestoreAppStorageCommand.test.d.ts","sourceRoot":"","sources":["../../../../../../src/api/command/os/InitRestoreAppStorageCommand.test.ts"],"names":[],"mappings":""}
@@ -1,24 +0,0 @@
1
- import { type Apdu } from "../../apdu/model/Apdu";
2
- import { type Command } from "../../command/Command";
3
- import { type CommandResult } from "../../command/model/CommandResult";
4
- import { type CommandErrors } from "../../command/utils/CommandErrors";
5
- import { type ApduResponse } from "../../device-session/ApduResponse";
6
- import { type CommandErrorArgs, DeviceExchangeError } from "../../Error";
7
- export type RestoreAppStorageCommandArgs = {
8
- chunkData: Uint8Array;
9
- };
10
- export type RestoreAppStorageCommandErrorCodes = "5123" | "5419" | "541a" | "662f" | "6643" | "6734" | "684a";
11
- export declare const RESTORE_APP_STORAGE_ERRORS: CommandErrors<RestoreAppStorageCommandErrorCodes>;
12
- export declare class RestoreAppStorageCommandError extends DeviceExchangeError<RestoreAppStorageCommandErrorCodes> {
13
- constructor(args: CommandErrorArgs<RestoreAppStorageCommandErrorCodes>);
14
- }
15
- export type RestoreAppStorageCommandResult = CommandResult<void, RestoreAppStorageCommandErrorCodes>;
16
- export declare class RestoreAppStorageCommand implements Command<void, RestoreAppStorageCommandArgs, RestoreAppStorageCommandErrorCodes> {
17
- private readonly args;
18
- readonly name = "RestoreAppStorage";
19
- private readonly header;
20
- constructor(args: RestoreAppStorageCommandArgs);
21
- getApdu(): Apdu;
22
- parseResponse(apduResponse: ApduResponse): RestoreAppStorageCommandResult;
23
- }
24
- //# sourceMappingURL=RestoreAppStorageCommand.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"RestoreAppStorageCommand.d.ts","sourceRoot":"","sources":["../../../../../../src/api/command/os/RestoreAppStorageCommand.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAGjD,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EACL,KAAK,aAAa,EAEnB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EACL,KAAK,aAAa,EAEnB,MAAM,kCAAkC,CAAC;AAG1C,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,KAAK,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAExE,MAAM,MAAM,4BAA4B,GAAG;IACzC,SAAS,EAAE,UAAU,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,kCAAkC,GAC1C,MAAM,GACN,MAAM,GACN,MAAM,GACN,MAAM,GACN,MAAM,GACN,MAAM,GACN,MAAM,CAAC;AAEX,eAAO,MAAM,0BAA0B,EAAE,aAAa,CAAC,kCAAkC,CAStF,CAAC;AAEJ,qBAAa,6BAA8B,SAAQ,mBAAmB,CAAC,kCAAkC,CAAC;gBAC5F,IAAI,EAAE,gBAAgB,CAAC,kCAAkC,CAAC;CAGvE;AAED,MAAM,MAAM,8BAA8B,GAAG,aAAa,CACxD,IAAI,EACJ,kCAAkC,CACnC,CAAC;AAEF,qBAAa,wBACX,YACE,OAAO,CACL,IAAI,EACJ,4BAA4B,EAC5B,kCAAkC,CACnC;IAWS,OAAO,CAAC,QAAQ,CAAC,IAAI;IATjC,QAAQ,CAAC,IAAI,uBAAuB;IAEpC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAKrB;gBAE2B,IAAI,EAAE,4BAA4B;IAE/D,OAAO,IAAI,IAAI;IAKf,aAAa,CAAC,YAAY,EAAE,YAAY,GAAG,8BAA8B;CAqB1E"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=RestoreAppStorageCommand.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"RestoreAppStorageCommand.test.d.ts","sourceRoot":"","sources":["../../../../../../src/api/command/os/RestoreAppStorageCommand.test.ts"],"names":[],"mappings":""}
@@ -1,23 +0,0 @@
1
- import { type CommandErrorResult } from "../../command/model/CommandResult";
2
- import { type BackupAppStorageCommandErrorCodes } from "../../command/os/BackupAppStorageCommand";
3
- import { type GetAppStorageInfoCommandErrorCodes } from "../../command/os/GetAppStorageInfoCommand";
4
- import { type InternalApi } from "../../device-action/DeviceAction";
5
- import { type LoggerPublisherService } from "../../logger-publisher/service/LoggerPublisherService";
6
- import { type DmkResult } from "../../model/DmkResult";
7
- import { type HexaString } from "../../utils/HexaString";
8
- export type BackupAppStorageTaskArgs = {
9
- appName: string;
10
- };
11
- export type BackupAppStorageTaskResponse = {
12
- appStorageData: HexaString;
13
- };
14
- export type BackupAppStorageTaskErrorCodes = GetAppStorageInfoCommandErrorCodes | BackupAppStorageCommandErrorCodes;
15
- export type BackupAppStorageTaskError = CommandErrorResult<GetAppStorageInfoCommandErrorCodes>["error"] | CommandErrorResult<BackupAppStorageCommandErrorCodes>["error"];
16
- export declare class BackupAppStorageTask {
17
- private readonly args;
18
- private readonly api;
19
- private readonly logger;
20
- constructor(args: BackupAppStorageTaskArgs, api: InternalApi, logger: LoggerPublisherService);
21
- run(): Promise<DmkResult<BackupAppStorageTaskResponse, BackupAppStorageTaskError>>;
22
- }
23
- //# sourceMappingURL=BackupAppStorageTask.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"BackupAppStorageTask.d.ts","sourceRoot":"","sources":["../../../../../../src/api/device-action/task/BackupAppStorageTask.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,kBAAkB,EAExB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAEL,KAAK,iCAAiC,EACvC,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAEL,KAAK,kCAAkC,EACxC,MAAM,0CAA0C,CAAC;AAClD,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,sDAAsD,CAAC;AACnG,OAAO,EAAE,KAAK,SAAS,EAAoB,MAAM,sBAAsB,CAAC;AACxE,OAAO,EAAsB,KAAK,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAE5E,MAAM,MAAM,wBAAwB,GAAG;IACrC,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,4BAA4B,GAAG;IACzC,cAAc,EAAE,UAAU,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,8BAA8B,GACtC,kCAAkC,GAClC,iCAAiC,CAAC;AAEtC,MAAM,MAAM,yBAAyB,GACjC,kBAAkB,CAAC,kCAAkC,CAAC,CAAC,OAAO,CAAC,GAC/D,kBAAkB,CAAC,iCAAiC,CAAC,CAAC,OAAO,CAAC,CAAC;AAEnE,qBAAa,oBAAoB;IAE7B,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAFN,IAAI,EAAE,wBAAwB,EAC9B,GAAG,EAAE,WAAW,EAChB,MAAM,EAAE,sBAAsB;IAGpC,GAAG,IAAI,OAAO,CACzB,SAAS,CAAC,4BAA4B,EAAE,yBAAyB,CAAC,CACnE;CA8DF"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=BackupAppStorageTask.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"BackupAppStorageTask.test.d.ts","sourceRoot":"","sources":["../../../../../../src/api/device-action/task/BackupAppStorageTask.test.ts"],"names":[],"mappings":""}