@ledgerhq/device-signer-kit-solana 0.0.0-transactionInspector-resolutionObj-20250916153045 → 0.0.0-verify-safe-address-20251016105127

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 (132) hide show
  1. package/README.md +110 -24
  2. package/lib/cjs/api/SignerSolana.js +1 -1
  3. package/lib/cjs/api/SignerSolana.js.map +1 -1
  4. package/lib/cjs/api/SolanaTools.js +1 -1
  5. package/lib/cjs/api/SolanaTools.js.map +1 -1
  6. package/lib/cjs/api/app-binder/SignMessageDeviceActionTypes.js.map +1 -1
  7. package/lib/cjs/api/app-binder/SignTransactionDeviceActionTypes.js.map +1 -1
  8. package/lib/cjs/api/index.js +1 -1
  9. package/lib/cjs/api/index.js.map +1 -1
  10. package/lib/cjs/api/model/SolanaTransactionOptionalConfig.js +2 -0
  11. package/lib/cjs/api/model/SolanaTransactionOptionalConfig.js.map +7 -0
  12. package/lib/cjs/internal/DefaultSignerSolana.js +1 -1
  13. package/lib/cjs/internal/DefaultSignerSolana.js.map +3 -3
  14. package/lib/cjs/internal/app-binder/SolanaAppBinder.js +1 -1
  15. package/lib/cjs/internal/app-binder/SolanaAppBinder.js.map +2 -2
  16. package/lib/cjs/internal/app-binder/SolanaAppBinder.test.js +1 -1
  17. package/lib/cjs/internal/app-binder/SolanaAppBinder.test.js.map +2 -2
  18. package/lib/cjs/internal/app-binder/command/GetPubKeyCommand.js +1 -1
  19. package/lib/cjs/internal/app-binder/command/GetPubKeyCommand.js.map +3 -3
  20. package/lib/cjs/internal/app-binder/command/SignOffChainMessageCommand.js +1 -1
  21. package/lib/cjs/internal/app-binder/command/SignOffChainMessageCommand.js.map +3 -3
  22. package/lib/cjs/internal/app-binder/command/SignOffChainMessageCommand.test.js +1 -1
  23. package/lib/cjs/internal/app-binder/command/SignOffChainMessageCommand.test.js.map +3 -3
  24. package/lib/cjs/internal/app-binder/device-action/SignTransactionDeviceAction.js +1 -1
  25. package/lib/cjs/internal/app-binder/device-action/SignTransactionDeviceAction.js.map +2 -2
  26. package/lib/cjs/internal/app-binder/device-action/SignTransactionDeviceAction.test.js +1 -1
  27. package/lib/cjs/internal/app-binder/device-action/SignTransactionDeviceAction.test.js.map +2 -2
  28. package/lib/cjs/internal/app-binder/services/GenerateSolanaTransaction.test.js.map +3 -3
  29. package/lib/cjs/internal/app-binder/services/TransactionInspector.js +1 -1
  30. package/lib/cjs/internal/app-binder/services/TransactionInspector.js.map +3 -3
  31. package/lib/cjs/internal/app-binder/services/TransactionInspector.test.js +2 -0
  32. package/lib/cjs/internal/app-binder/services/TransactionInspector.test.js.map +7 -0
  33. package/lib/cjs/internal/app-binder/services/bs58Encoder.js +2 -0
  34. package/lib/cjs/internal/app-binder/services/bs58Encoder.js.map +7 -0
  35. package/lib/cjs/internal/app-binder/services/utils/transactionDecoders.js +1 -1
  36. package/lib/cjs/internal/app-binder/services/utils/transactionDecoders.js.map +3 -3
  37. package/lib/cjs/internal/app-binder/task/BuildTransactionContextTask.js +1 -1
  38. package/lib/cjs/internal/app-binder/task/BuildTransactionContextTask.js.map +1 -1
  39. package/lib/cjs/internal/app-binder/task/BuildTransactionContextTask.test.js +1 -1
  40. package/lib/cjs/internal/app-binder/task/BuildTransactionContextTask.test.js.map +2 -2
  41. package/lib/cjs/internal/app-binder/task/SendSignMessageTask.js +1 -1
  42. package/lib/cjs/internal/app-binder/task/SendSignMessageTask.js.map +3 -3
  43. package/lib/cjs/internal/app-binder/task/SendSignMessageTask.test.js +1 -1
  44. package/lib/cjs/internal/app-binder/task/SendSignMessageTask.test.js.map +3 -3
  45. package/lib/cjs/internal/use-cases/transaction/SignTransactionUseCase.js +1 -1
  46. package/lib/cjs/internal/use-cases/transaction/SignTransactionUseCase.js.map +3 -3
  47. package/lib/cjs/internal/use-cases/transaction/SignTransactionUseCase.test.js +1 -1
  48. package/lib/cjs/internal/use-cases/transaction/SignTransactionUseCase.test.js.map +2 -2
  49. package/lib/cjs/package.json +1 -1
  50. package/lib/esm/api/index.js +1 -1
  51. package/lib/esm/api/index.js.map +1 -1
  52. package/lib/esm/api/model/SolanaTransactionOptionalConfig.js +1 -0
  53. package/lib/esm/internal/DefaultSignerSolana.js.map +3 -3
  54. package/lib/esm/internal/app-binder/SolanaAppBinder.js +1 -1
  55. package/lib/esm/internal/app-binder/SolanaAppBinder.js.map +2 -2
  56. package/lib/esm/internal/app-binder/SolanaAppBinder.test.js +1 -1
  57. package/lib/esm/internal/app-binder/SolanaAppBinder.test.js.map +2 -2
  58. package/lib/esm/internal/app-binder/command/GetPubKeyCommand.js +1 -1
  59. package/lib/esm/internal/app-binder/command/GetPubKeyCommand.js.map +3 -3
  60. package/lib/esm/internal/app-binder/command/SignOffChainMessageCommand.js +1 -1
  61. package/lib/esm/internal/app-binder/command/SignOffChainMessageCommand.js.map +3 -3
  62. package/lib/esm/internal/app-binder/command/SignOffChainMessageCommand.test.js +1 -1
  63. package/lib/esm/internal/app-binder/command/SignOffChainMessageCommand.test.js.map +3 -3
  64. package/lib/esm/internal/app-binder/device-action/SignTransactionDeviceAction.js +1 -1
  65. package/lib/esm/internal/app-binder/device-action/SignTransactionDeviceAction.js.map +2 -2
  66. package/lib/esm/internal/app-binder/device-action/SignTransactionDeviceAction.test.js +1 -1
  67. package/lib/esm/internal/app-binder/device-action/SignTransactionDeviceAction.test.js.map +2 -2
  68. package/lib/esm/internal/app-binder/services/GenerateSolanaTransaction.test.js.map +3 -3
  69. package/lib/esm/internal/app-binder/services/TransactionInspector.js +1 -1
  70. package/lib/esm/internal/app-binder/services/TransactionInspector.js.map +3 -3
  71. package/lib/esm/internal/app-binder/services/TransactionInspector.test.js +2 -0
  72. package/lib/esm/internal/app-binder/services/TransactionInspector.test.js.map +7 -0
  73. package/lib/esm/internal/app-binder/services/bs58Encoder.js +2 -0
  74. package/lib/esm/internal/app-binder/services/bs58Encoder.js.map +7 -0
  75. package/lib/esm/internal/app-binder/services/utils/transactionDecoders.js +1 -1
  76. package/lib/esm/internal/app-binder/services/utils/transactionDecoders.js.map +3 -3
  77. package/lib/esm/internal/app-binder/task/BuildTransactionContextTask.js +1 -1
  78. package/lib/esm/internal/app-binder/task/BuildTransactionContextTask.js.map +1 -1
  79. package/lib/esm/internal/app-binder/task/BuildTransactionContextTask.test.js +1 -1
  80. package/lib/esm/internal/app-binder/task/BuildTransactionContextTask.test.js.map +2 -2
  81. package/lib/esm/internal/app-binder/task/SendSignMessageTask.js +1 -1
  82. package/lib/esm/internal/app-binder/task/SendSignMessageTask.js.map +3 -3
  83. package/lib/esm/internal/app-binder/task/SendSignMessageTask.test.js +1 -1
  84. package/lib/esm/internal/app-binder/task/SendSignMessageTask.test.js.map +3 -3
  85. package/lib/esm/internal/use-cases/transaction/SignTransactionUseCase.js +1 -1
  86. package/lib/esm/internal/use-cases/transaction/SignTransactionUseCase.js.map +3 -3
  87. package/lib/esm/internal/use-cases/transaction/SignTransactionUseCase.test.js +1 -1
  88. package/lib/esm/internal/use-cases/transaction/SignTransactionUseCase.test.js.map +2 -2
  89. package/lib/esm/package.json +1 -1
  90. package/lib/types/api/SignerSolana.d.ts +2 -3
  91. package/lib/types/api/SignerSolana.d.ts.map +1 -1
  92. package/lib/types/api/SolanaTools.d.ts +1 -2
  93. package/lib/types/api/SolanaTools.d.ts.map +1 -1
  94. package/lib/types/api/app-binder/SignMessageDeviceActionTypes.d.ts +3 -2
  95. package/lib/types/api/app-binder/SignMessageDeviceActionTypes.d.ts.map +1 -1
  96. package/lib/types/api/app-binder/SignTransactionDeviceActionTypes.d.ts +2 -3
  97. package/lib/types/api/app-binder/SignTransactionDeviceActionTypes.d.ts.map +1 -1
  98. package/lib/types/api/index.d.ts +1 -1
  99. package/lib/types/api/index.d.ts.map +1 -1
  100. package/lib/types/api/model/SolanaTransactionOptionalConfig.d.ts +7 -0
  101. package/lib/types/api/model/SolanaTransactionOptionalConfig.d.ts.map +1 -0
  102. package/lib/types/internal/DefaultSignerSolana.d.ts +290 -2
  103. package/lib/types/internal/DefaultSignerSolana.d.ts.map +1 -1
  104. package/lib/types/internal/app-binder/SolanaAppBinder.d.ts +2 -3
  105. package/lib/types/internal/app-binder/SolanaAppBinder.d.ts.map +1 -1
  106. package/lib/types/internal/app-binder/command/GetPubKeyCommand.d.ts +3 -1
  107. package/lib/types/internal/app-binder/command/GetPubKeyCommand.d.ts.map +1 -1
  108. package/lib/types/internal/app-binder/command/SignOffChainMessageCommand.d.ts +6 -3
  109. package/lib/types/internal/app-binder/command/SignOffChainMessageCommand.d.ts.map +1 -1
  110. package/lib/types/internal/app-binder/device-action/SignTransactionDeviceAction.d.ts +1 -0
  111. package/lib/types/internal/app-binder/device-action/SignTransactionDeviceAction.d.ts.map +1 -1
  112. package/lib/types/internal/app-binder/services/TransactionInspector.d.ts +10 -5
  113. package/lib/types/internal/app-binder/services/TransactionInspector.d.ts.map +1 -1
  114. package/lib/types/internal/app-binder/services/TransactionInspector.test.d.ts +2 -0
  115. package/lib/types/internal/app-binder/services/TransactionInspector.test.d.ts.map +1 -0
  116. package/lib/types/internal/app-binder/services/bs58Encoder.d.ts +9 -0
  117. package/lib/types/internal/app-binder/services/bs58Encoder.d.ts.map +1 -0
  118. package/lib/types/internal/app-binder/services/utils/transactionDecoders.d.ts.map +1 -1
  119. package/lib/types/internal/app-binder/task/BuildTransactionContextTask.d.ts +2 -2
  120. package/lib/types/internal/app-binder/task/BuildTransactionContextTask.d.ts.map +1 -1
  121. package/lib/types/internal/app-binder/task/SendSignMessageTask.d.ts +5 -3
  122. package/lib/types/internal/app-binder/task/SendSignMessageTask.d.ts.map +1 -1
  123. package/lib/types/internal/use-cases/transaction/SignTransactionUseCase.d.ts +2 -4
  124. package/lib/types/internal/use-cases/transaction/SignTransactionUseCase.d.ts.map +1 -1
  125. package/lib/types/tsconfig.prod.tsbuildinfo +1 -1
  126. package/package.json +5 -5
  127. package/lib/cjs/api/model/TransactionOptions.js +0 -2
  128. package/lib/cjs/api/model/TransactionOptions.js.map +0 -7
  129. package/lib/esm/api/model/TransactionOptions.js +0 -1
  130. package/lib/types/api/model/TransactionOptions.d.ts +0 -8
  131. package/lib/types/api/model/TransactionOptions.d.ts.map +0 -1
  132. /package/lib/esm/api/model/{TransactionOptions.js.map → SolanaTransactionOptionalConfig.js.map} +0 -0
@@ -1,2 +1,2 @@
1
- import{APDU_MAX_PAYLOAD as f,ByteArrayBuilder as m,CommandResultFactory as r,InvalidStatusWordError as i}from"@ledgerhq/device-management-kit";import{DerivationPathUtils as g}from"@ledgerhq/signer-utils";import l from"bs58";import{GetPubKeyCommand as p}from"../../app-binder/command/GetPubKeyCommand";import{SignOffChainMessageCommand as c}from"../../app-binder/command/SignOffChainMessageCommand";const y=65535;class U{constructor(e,t){this.api=e;this.args=t}async run(){const{sendingData:e,derivationPath:t}=this.args;if(e.length===0)return r({error:new i("Message cannot be empty")});if(e.length>y)return r({error:new i(`Message too long: ${e.length} bytes (max is 65535)`)});const d=g.splitPath(t),o=await this.api.sendCommand(new p({derivationPath:t,checkOnDevice:!1}));if(!("data"in o))return r({error:new i("Error getting public key from device")});const s=l.decode(o.data),a=this._buildFullMessage(e,s),n=this._buildApduCommand(a,d);return n.length>f?r({error:new i("The APDU command exceeds the maximum allowable size (255 bytes)")}):this.api.sendCommand(new c({message:n}))}_buildFullMessage(e,t){return new m().add8BitUIntToData(255).addAsciiStringToData("solana offchain").add8BitUIntToData(0).addBufferToData(new Uint8Array(32)).add8BitUIntToData(0).add8BitUIntToData(1).addBufferToData(t).add8BitUIntToData(e.length&255).add8BitUIntToData(e.length>>8&255).addBufferToData(e).build()}_buildApduCommand(e,t){const s=t.length*4,a=new m(e.length+1+1+s);return a.add8BitUIntToData(1),a.add8BitUIntToData(t.length),t.forEach(n=>{const u=new Uint8Array(4);new DataView(u.buffer).setUint32(0,n,!1),a.addBufferToData(u)}),a.addBufferToData(e),a.build()}}export{y as MAX_MESSAGE_LENGTH,U as SendSignMessageTask};
1
+ import{APDU_MAX_PAYLOAD as m,ByteArrayBuilder as f,CommandResultFactory as r,InvalidStatusWordError as o}from"@ledgerhq/device-management-kit";import{DerivationPathUtils as g}from"@ledgerhq/signer-utils";import{GetPubKeyCommand as l}from"../../app-binder/command/GetPubKeyCommand";import{SignOffChainMessageCommand as p}from"../../app-binder/command/SignOffChainMessageCommand";import{DefaultBs58Encoder as c}from"../../app-binder/services/bs58Encoder";const y=65535;class B{constructor(e,t,i=c){this.api=e;this.args=t;this.bs58Encoder=i}async run(){const{sendingData:e,derivationPath:t}=this.args;if(e.length===0)return r({error:new o("Message cannot be empty")});if(e.length>y)return r({error:new o(`Message too long: ${e.length} bytes (max is 65535)`)});const i=g.splitPath(t),s=await this.api.sendCommand(new l({derivationPath:t,checkOnDevice:!1}));if(!("data"in s))return r({error:new o("Error getting public key from device")});const d=this.bs58Encoder.decode(s.data),n=this._buildFullMessage(e,d),a=this._buildApduCommand(n,i);return a.length>m?r({error:new o("The APDU command exceeds the maximum allowable size (255 bytes)")}):this.api.sendCommand(new p({message:a}))}_buildFullMessage(e,t){return new f().add8BitUIntToData(255).addAsciiStringToData("solana offchain").add8BitUIntToData(0).addBufferToData(new Uint8Array(32)).add8BitUIntToData(0).add8BitUIntToData(1).addBufferToData(t).add8BitUIntToData(e.length&255).add8BitUIntToData(e.length>>8&255).addBufferToData(e).build()}_buildApduCommand(e,t){const d=t.length*4,n=new f(e.length+1+1+d);return n.add8BitUIntToData(1),n.add8BitUIntToData(t.length),t.forEach(a=>{const u=new Uint8Array(4);new DataView(u.buffer).setUint32(0,a,!1),n.addBufferToData(u)}),n.addBufferToData(e),n.build()}}export{y as MAX_MESSAGE_LENGTH,B as SendSignMessageTask};
2
2
  //# sourceMappingURL=SendSignMessageTask.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/internal/app-binder/task/SendSignMessageTask.ts"],
4
- "sourcesContent": ["import {\n APDU_MAX_PAYLOAD,\n ByteArrayBuilder,\n type CommandResult,\n CommandResultFactory,\n type InternalApi,\n InvalidStatusWordError,\n} from \"@ledgerhq/device-management-kit\";\nimport { DerivationPathUtils } from \"@ledgerhq/signer-utils\";\nimport bs58 from \"bs58\";\n\nimport { type Signature } from \"@api/index\";\nimport { GetPubKeyCommand } from \"@internal/app-binder/command/GetPubKeyCommand\";\nimport { SignOffChainMessageCommand } from \"@internal/app-binder/command/SignOffChainMessageCommand\";\nimport { type SolanaAppErrorCodes } from \"@internal/app-binder/command/utils/SolanaApplicationErrors\";\n\nexport type SendSignMessageTaskArgs = {\n sendingData: Uint8Array;\n derivationPath: string;\n};\n\nexport type SendSignMessageTaskRunFunctionReturn = Promise<\n CommandResult<Signature, SolanaAppErrorCodes>\n>;\n\nexport const MAX_MESSAGE_LENGTH = 0xffff;\n\nexport class SendSignMessageTask {\n constructor(\n private api: InternalApi,\n private args: SendSignMessageTaskArgs,\n ) {}\n\n async run(): SendSignMessageTaskRunFunctionReturn {\n const { sendingData, derivationPath } = this.args;\n\n if (sendingData.length === 0) {\n return CommandResultFactory({\n error: new InvalidStatusWordError(\"Message cannot be empty\"),\n });\n }\n\n if (sendingData.length > MAX_MESSAGE_LENGTH) {\n return CommandResultFactory({\n error: new InvalidStatusWordError(\n `Message too long: ${sendingData.length} bytes (max is 65535)`,\n ),\n });\n }\n\n const pathIndexes = DerivationPathUtils.splitPath(derivationPath);\n\n const pubkeyResult = await this.api.sendCommand(\n new GetPubKeyCommand({ derivationPath, checkOnDevice: false }),\n );\n\n if (!(\"data\" in pubkeyResult)) {\n return CommandResultFactory({\n error: new InvalidStatusWordError(\n \"Error getting public key from device\",\n ),\n });\n }\n\n const signerPubkey = bs58.decode(pubkeyResult.data);\n const fullMessage = this._buildFullMessage(sendingData, signerPubkey);\n const commandBuffer = this._buildApduCommand(fullMessage, pathIndexes);\n\n if (commandBuffer.length > APDU_MAX_PAYLOAD) {\n return CommandResultFactory({\n error: new InvalidStatusWordError(\n \"The APDU command exceeds the maximum allowable size (255 bytes)\",\n ),\n });\n }\n\n return this.api.sendCommand(\n new SignOffChainMessageCommand({ message: commandBuffer }),\n );\n }\n\n /**\n * builds the serialised off-chain message header and body\n */\n private _buildFullMessage(\n sendingData: Uint8Array,\n signerPubkey: Uint8Array,\n ): Uint8Array {\n return (\n new ByteArrayBuilder()\n // 0xFF + prefix\n .add8BitUIntToData(0xff)\n .addAsciiStringToData(\"solana offchain\")\n // version = 0\n .add8BitUIntToData(0)\n // domain = 32 zeros\n .addBufferToData(new Uint8Array(32))\n // format = 0\n .add8BitUIntToData(0)\n // signer count = 1\n .add8BitUIntToData(1)\n // signer pubkey (32 bytes)\n .addBufferToData(signerPubkey)\n // message length (2 bytes, little endian)\n .add8BitUIntToData(sendingData.length & 0xff)\n .add8BitUIntToData((sendingData.length >> 8) & 0xff)\n // message body\n .addBufferToData(sendingData)\n .build()\n );\n }\n\n /**\n * builds the APDU command to send to the device\n */\n private _buildApduCommand(\n fullMessage: Uint8Array,\n paths: number[],\n ): Uint8Array {\n const numberOfSigners = 1;\n const derivationCount = 1;\n const pathBytes = paths.length * 4;\n const builder = new ByteArrayBuilder(\n fullMessage.length + numberOfSigners + derivationCount + pathBytes,\n );\n\n // number of signers\n builder.add8BitUIntToData(numberOfSigners);\n // number of BIP32 derivations\n builder.add8BitUIntToData(paths.length);\n // each derivation index\n paths.forEach((idx) => {\n const buf = new Uint8Array(4);\n new DataView(buf.buffer).setUint32(0, idx, false);\n builder.addBufferToData(buf);\n });\n // serialised off-chain message\n builder.addBufferToData(fullMessage);\n\n return builder.build();\n }\n}\n"],
5
- "mappings": "AAAA,OACE,oBAAAA,EACA,oBAAAC,EAEA,wBAAAC,EAEA,0BAAAC,MACK,kCACP,OAAS,uBAAAC,MAA2B,yBACpC,OAAOC,MAAU,OAGjB,OAAS,oBAAAC,MAAwB,gDACjC,OAAS,8BAAAC,MAAkC,0DAYpC,MAAMC,EAAqB,MAE3B,MAAMC,CAAoB,CAC/B,YACUC,EACAC,EACR,CAFQ,SAAAD,EACA,UAAAC,CACP,CAEH,MAAM,KAA4C,CAChD,KAAM,CAAE,YAAAC,EAAa,eAAAC,CAAe,EAAI,KAAK,KAE7C,GAAID,EAAY,SAAW,EACzB,OAAOV,EAAqB,CAC1B,MAAO,IAAIC,EAAuB,yBAAyB,CAC7D,CAAC,EAGH,GAAIS,EAAY,OAASJ,EACvB,OAAON,EAAqB,CAC1B,MAAO,IAAIC,EACT,qBAAqBS,EAAY,MAAM,uBACzC,CACF,CAAC,EAGH,MAAME,EAAcV,EAAoB,UAAUS,CAAc,EAE1DE,EAAe,MAAM,KAAK,IAAI,YAClC,IAAIT,EAAiB,CAAE,eAAAO,EAAgB,cAAe,EAAM,CAAC,CAC/D,EAEA,GAAI,EAAE,SAAUE,GACd,OAAOb,EAAqB,CAC1B,MAAO,IAAIC,EACT,sCACF,CACF,CAAC,EAGH,MAAMa,EAAeX,EAAK,OAAOU,EAAa,IAAI,EAC5CE,EAAc,KAAK,kBAAkBL,EAAaI,CAAY,EAC9DE,EAAgB,KAAK,kBAAkBD,EAAaH,CAAW,EAErE,OAAII,EAAc,OAASlB,EAClBE,EAAqB,CAC1B,MAAO,IAAIC,EACT,iEACF,CACF,CAAC,EAGI,KAAK,IAAI,YACd,IAAII,EAA2B,CAAE,QAASW,CAAc,CAAC,CAC3D,CACF,CAKQ,kBACNN,EACAI,EACY,CACZ,OACE,IAAIf,EAAiB,EAElB,kBAAkB,GAAI,EACtB,qBAAqB,iBAAiB,EAEtC,kBAAkB,CAAC,EAEnB,gBAAgB,IAAI,WAAW,EAAE,CAAC,EAElC,kBAAkB,CAAC,EAEnB,kBAAkB,CAAC,EAEnB,gBAAgBe,CAAY,EAE5B,kBAAkBJ,EAAY,OAAS,GAAI,EAC3C,kBAAmBA,EAAY,QAAU,EAAK,GAAI,EAElD,gBAAgBA,CAAW,EAC3B,MAAM,CAEb,CAKQ,kBACNK,EACAE,EACY,CAGZ,MAAMC,EAAYD,EAAM,OAAS,EAC3BE,EAAU,IAAIpB,EAClBgB,EAAY,OAAS,EAAkB,EAAkBG,CAC3D,EAGA,OAAAC,EAAQ,kBAAkB,CAAe,EAEzCA,EAAQ,kBAAkBF,EAAM,MAAM,EAEtCA,EAAM,QAASG,GAAQ,CACrB,MAAMC,EAAM,IAAI,WAAW,CAAC,EAC5B,IAAI,SAASA,EAAI,MAAM,EAAE,UAAU,EAAGD,EAAK,EAAK,EAChDD,EAAQ,gBAAgBE,CAAG,CAC7B,CAAC,EAEDF,EAAQ,gBAAgBJ,CAAW,EAE5BI,EAAQ,MAAM,CACvB,CACF",
6
- "names": ["APDU_MAX_PAYLOAD", "ByteArrayBuilder", "CommandResultFactory", "InvalidStatusWordError", "DerivationPathUtils", "bs58", "GetPubKeyCommand", "SignOffChainMessageCommand", "MAX_MESSAGE_LENGTH", "SendSignMessageTask", "api", "args", "sendingData", "derivationPath", "pathIndexes", "pubkeyResult", "signerPubkey", "fullMessage", "commandBuffer", "paths", "pathBytes", "builder", "idx", "buf"]
4
+ "sourcesContent": ["import {\n APDU_MAX_PAYLOAD,\n ByteArrayBuilder,\n type CommandResult,\n CommandResultFactory,\n type InternalApi,\n InvalidStatusWordError,\n} from \"@ledgerhq/device-management-kit\";\nimport { DerivationPathUtils } from \"@ledgerhq/signer-utils\";\n\nimport { GetPubKeyCommand } from \"@internal/app-binder/command/GetPubKeyCommand\";\nimport {\n SignOffChainMessageCommand,\n type SignOffChainMessageCommandResponse,\n} from \"@internal/app-binder/command/SignOffChainMessageCommand\";\nimport { type SolanaAppErrorCodes } from \"@internal/app-binder/command/utils/SolanaApplicationErrors\";\nimport {\n type Bs58Encoder,\n DefaultBs58Encoder,\n} from \"@internal/app-binder/services/bs58Encoder\";\n\nexport type SendSignMessageTaskArgs = {\n sendingData: Uint8Array;\n derivationPath: string;\n};\n\nexport type SendSignMessageTaskRunFunctionReturn = Promise<\n CommandResult<SignOffChainMessageCommandResponse, SolanaAppErrorCodes>\n>;\n\nexport const MAX_MESSAGE_LENGTH = 0xffff;\n\nexport class SendSignMessageTask {\n constructor(\n private api: InternalApi,\n private args: SendSignMessageTaskArgs,\n private readonly bs58Encoder: Bs58Encoder = DefaultBs58Encoder,\n ) {}\n\n async run(): SendSignMessageTaskRunFunctionReturn {\n const { sendingData, derivationPath } = this.args;\n\n if (sendingData.length === 0) {\n return CommandResultFactory({\n error: new InvalidStatusWordError(\"Message cannot be empty\"),\n });\n }\n\n if (sendingData.length > MAX_MESSAGE_LENGTH) {\n return CommandResultFactory({\n error: new InvalidStatusWordError(\n `Message too long: ${sendingData.length} bytes (max is 65535)`,\n ),\n });\n }\n\n const pathIndexes = DerivationPathUtils.splitPath(derivationPath);\n\n const pubkeyResult = await this.api.sendCommand(\n new GetPubKeyCommand({ derivationPath, checkOnDevice: false }),\n );\n\n if (!(\"data\" in pubkeyResult)) {\n return CommandResultFactory({\n error: new InvalidStatusWordError(\n \"Error getting public key from device\",\n ),\n });\n }\n\n const signerPubkey = this.bs58Encoder.decode(pubkeyResult.data);\n const fullMessage = this._buildFullMessage(sendingData, signerPubkey);\n const commandBuffer = this._buildApduCommand(fullMessage, pathIndexes);\n\n if (commandBuffer.length > APDU_MAX_PAYLOAD) {\n return CommandResultFactory({\n error: new InvalidStatusWordError(\n \"The APDU command exceeds the maximum allowable size (255 bytes)\",\n ),\n });\n }\n\n return this.api.sendCommand(\n new SignOffChainMessageCommand({ message: commandBuffer }),\n );\n }\n\n /**\n * builds the serialised off-chain message header and body\n */\n private _buildFullMessage(\n sendingData: Uint8Array,\n signerPubkey: Uint8Array,\n ): Uint8Array {\n return (\n new ByteArrayBuilder()\n // 0xFF + prefix\n .add8BitUIntToData(0xff)\n .addAsciiStringToData(\"solana offchain\")\n // version = 0\n .add8BitUIntToData(0)\n // domain = 32 zeros\n .addBufferToData(new Uint8Array(32))\n // format = 0\n .add8BitUIntToData(0)\n // signer count = 1\n .add8BitUIntToData(1)\n // signer pubkey (32 bytes)\n .addBufferToData(signerPubkey)\n // message length (2 bytes, little endian)\n .add8BitUIntToData(sendingData.length & 0xff)\n .add8BitUIntToData((sendingData.length >> 8) & 0xff)\n // message body\n .addBufferToData(sendingData)\n .build()\n );\n }\n\n /**\n * builds the APDU command to send to the device\n */\n private _buildApduCommand(\n fullMessage: Uint8Array,\n paths: number[],\n ): Uint8Array {\n const numberOfSigners = 1;\n const derivationCount = 1;\n const pathBytes = paths.length * 4;\n const builder = new ByteArrayBuilder(\n fullMessage.length + numberOfSigners + derivationCount + pathBytes,\n );\n\n // number of signers\n builder.add8BitUIntToData(numberOfSigners);\n // number of BIP32 derivations\n builder.add8BitUIntToData(paths.length);\n // each derivation index\n paths.forEach((idx) => {\n const buf = new Uint8Array(4);\n new DataView(buf.buffer).setUint32(0, idx, false);\n builder.addBufferToData(buf);\n });\n // serialised off-chain message\n builder.addBufferToData(fullMessage);\n\n return builder.build();\n }\n}\n"],
5
+ "mappings": "AAAA,OACE,oBAAAA,EACA,oBAAAC,EAEA,wBAAAC,EAEA,0BAAAC,MACK,kCACP,OAAS,uBAAAC,MAA2B,yBAEpC,OAAS,oBAAAC,MAAwB,gDACjC,OACE,8BAAAC,MAEK,0DAEP,OAEE,sBAAAC,MACK,4CAWA,MAAMC,EAAqB,MAE3B,MAAMC,CAAoB,CAC/B,YACUC,EACAC,EACSC,EAA2BL,EAC5C,CAHQ,SAAAG,EACA,UAAAC,EACS,iBAAAC,CAChB,CAEH,MAAM,KAA4C,CAChD,KAAM,CAAE,YAAAC,EAAa,eAAAC,CAAe,EAAI,KAAK,KAE7C,GAAID,EAAY,SAAW,EACzB,OAAOX,EAAqB,CAC1B,MAAO,IAAIC,EAAuB,yBAAyB,CAC7D,CAAC,EAGH,GAAIU,EAAY,OAASL,EACvB,OAAON,EAAqB,CAC1B,MAAO,IAAIC,EACT,qBAAqBU,EAAY,MAAM,uBACzC,CACF,CAAC,EAGH,MAAME,EAAcX,EAAoB,UAAUU,CAAc,EAE1DE,EAAe,MAAM,KAAK,IAAI,YAClC,IAAIX,EAAiB,CAAE,eAAAS,EAAgB,cAAe,EAAM,CAAC,CAC/D,EAEA,GAAI,EAAE,SAAUE,GACd,OAAOd,EAAqB,CAC1B,MAAO,IAAIC,EACT,sCACF,CACF,CAAC,EAGH,MAAMc,EAAe,KAAK,YAAY,OAAOD,EAAa,IAAI,EACxDE,EAAc,KAAK,kBAAkBL,EAAaI,CAAY,EAC9DE,EAAgB,KAAK,kBAAkBD,EAAaH,CAAW,EAErE,OAAII,EAAc,OAASnB,EAClBE,EAAqB,CAC1B,MAAO,IAAIC,EACT,iEACF,CACF,CAAC,EAGI,KAAK,IAAI,YACd,IAAIG,EAA2B,CAAE,QAASa,CAAc,CAAC,CAC3D,CACF,CAKQ,kBACNN,EACAI,EACY,CACZ,OACE,IAAIhB,EAAiB,EAElB,kBAAkB,GAAI,EACtB,qBAAqB,iBAAiB,EAEtC,kBAAkB,CAAC,EAEnB,gBAAgB,IAAI,WAAW,EAAE,CAAC,EAElC,kBAAkB,CAAC,EAEnB,kBAAkB,CAAC,EAEnB,gBAAgBgB,CAAY,EAE5B,kBAAkBJ,EAAY,OAAS,GAAI,EAC3C,kBAAmBA,EAAY,QAAU,EAAK,GAAI,EAElD,gBAAgBA,CAAW,EAC3B,MAAM,CAEb,CAKQ,kBACNK,EACAE,EACY,CAGZ,MAAMC,EAAYD,EAAM,OAAS,EAC3BE,EAAU,IAAIrB,EAClBiB,EAAY,OAAS,EAAkB,EAAkBG,CAC3D,EAGA,OAAAC,EAAQ,kBAAkB,CAAe,EAEzCA,EAAQ,kBAAkBF,EAAM,MAAM,EAEtCA,EAAM,QAASG,GAAQ,CACrB,MAAMC,EAAM,IAAI,WAAW,CAAC,EAC5B,IAAI,SAASA,EAAI,MAAM,EAAE,UAAU,EAAGD,EAAK,EAAK,EAChDD,EAAQ,gBAAgBE,CAAG,CAC7B,CAAC,EAEDF,EAAQ,gBAAgBJ,CAAW,EAE5BI,EAAQ,MAAM,CACvB,CACF",
6
+ "names": ["APDU_MAX_PAYLOAD", "ByteArrayBuilder", "CommandResultFactory", "InvalidStatusWordError", "DerivationPathUtils", "GetPubKeyCommand", "SignOffChainMessageCommand", "DefaultBs58Encoder", "MAX_MESSAGE_LENGTH", "SendSignMessageTask", "api", "args", "bs58Encoder", "sendingData", "derivationPath", "pathIndexes", "pubkeyResult", "signerPubkey", "fullMessage", "commandBuffer", "paths", "pathBytes", "builder", "idx", "buf"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import{CommandResultFactory as o,InvalidStatusWordError as c}from"@ledgerhq/device-management-kit";import x from"bs58";import{makeDeviceActionInternalApiMock as h}from"../../app-binder/device-action/__test-utils__/makeInternalApi";import{MAX_MESSAGE_LENGTH as w,SendSignMessageTask as t}from"../../app-binder/task/SendSignMessageTask";const r="44'/501'/0'/0'",u=new Uint8Array(32).fill(0),m=x.encode(u),i=new Uint8Array([240,202,204,26]);describe("SendSignMessageTask",()=>{const e=h();beforeEach(()=>{vi.resetAllMocks()}),describe("run()",()=>{it("should error on empty message before any device call",async()=>{const a={derivationPath:r,sendingData:new Uint8Array([])},n=await new t(e,a).run();expect(e.sendCommand).toHaveBeenCalledTimes(0),expect(n.error).toEqual(new c("Message cannot be empty"))}),it("should return error if GET_PUBKEY fails",async()=>{e.sendCommand.mockResolvedValueOnce(o({error:new c("pubkey error")}));const a={derivationPath:r,sendingData:i},n=await new t(e,a).run();expect(e.sendCommand).toHaveBeenCalledTimes(1),expect(n.error).toEqual(new c("Error getting public key from device"))}),it("should return error if SignOffChainMessageCommand fails",async()=>{e.sendCommand.mockResolvedValueOnce(o({data:m})).mockResolvedValueOnce(o({error:new c("no signature returned")}));const a={derivationPath:r,sendingData:i},n=await new t(e,a).run();expect(e.sendCommand).toHaveBeenCalledTimes(2),expect(n.error).toEqual(new c("no signature returned"))}),it("should return success when signing succeeds",async()=>{const a=new Uint8Array([240,202,204,26]);e.sendCommand.mockResolvedValueOnce(o({data:m})).mockResolvedValueOnce(o({data:a}));const n={derivationPath:r,sendingData:i},s=await new t(e,n).run();expect(e.sendCommand).toHaveBeenCalledTimes(2),expect(s.data).toEqual(a)}),it("should reject invalid derivation path",async()=>{const a={derivationPath:"not/a/path",sendingData:i};await expect(new t(e,a).run()).rejects.toThrow()}),it("should correctly build APDU command lengths",()=>{const a=new t(e,{derivationPath:r,sendingData:i}),n=a._buildFullMessage(i,u),s=[-2147483604,-2147483147,-2147483648,0],l=a._buildApduCommand(n,s),d=2+s.length*4+n.length;expect(l.length).toBe(d)}),it("should handle maximum allowed message length",async()=>{const l=new Uint8Array(152).fill(1),d=new Uint8Array([240,202,204,26]);e.sendCommand.mockResolvedValueOnce(o({data:m})).mockResolvedValueOnce(o({data:d}));const g=await new t(e,{derivationPath:r,sendingData:l}).run();expect(e.sendCommand).toHaveBeenCalledTimes(2),expect(g.data).toEqual(d)}),it("should error on message exceeding 16-bit length (65535)",async()=>{const a=new Uint8Array(w+1).fill(170),n={derivationPath:r,sendingData:a},s=await new t(e,n).run();expect(e.sendCommand).toHaveBeenCalledTimes(0),expect(s.error).toEqual(new c(`Message too long: ${a.length} bytes (max is 65535)`))})})});
1
+ import{CommandResultFactory as o,InvalidStatusWordError as c}from"@ledgerhq/device-management-kit";import{makeDeviceActionInternalApiMock as x}from"../../app-binder/device-action/__test-utils__/makeInternalApi";import{DefaultBs58Encoder as h}from"../../app-binder/services/bs58Encoder";import{MAX_MESSAGE_LENGTH as w,SendSignMessageTask as t}from"../../app-binder/task/SendSignMessageTask";const r="44'/501'/0'/0'",u=new Uint8Array(32).fill(0),m=h.encode(u),d=new Uint8Array([240,202,204,26]);describe("SendSignMessageTask",()=>{const e=x();beforeEach(()=>{vi.resetAllMocks()}),describe("run()",()=>{it("should error on empty message before any device call",async()=>{const a={derivationPath:r,sendingData:new Uint8Array([])},n=await new t(e,a).run();expect(e.sendCommand).toHaveBeenCalledTimes(0),expect(n.error).toEqual(new c("Message cannot be empty"))}),it("should return error if GET_PUBKEY fails",async()=>{e.sendCommand.mockResolvedValueOnce(o({error:new c("pubkey error")}));const a={derivationPath:r,sendingData:d},n=await new t(e,a).run();expect(e.sendCommand).toHaveBeenCalledTimes(1),expect(n.error).toEqual(new c("Error getting public key from device"))}),it("should return error if SignOffChainMessageCommand fails",async()=>{e.sendCommand.mockResolvedValueOnce(o({data:m})).mockResolvedValueOnce(o({error:new c("no signature returned")}));const a={derivationPath:r,sendingData:d},n=await new t(e,a).run();expect(e.sendCommand).toHaveBeenCalledTimes(2),expect(n.error).toEqual(new c("no signature returned"))}),it("should return success when signing succeeds",async()=>{const a=new Uint8Array([240,202,204,26]);e.sendCommand.mockResolvedValueOnce(o({data:m})).mockResolvedValueOnce(o({data:a}));const n={derivationPath:r,sendingData:d},s=await new t(e,n).run();expect(e.sendCommand).toHaveBeenCalledTimes(2),expect(s.data).toEqual(a)}),it("should reject invalid derivation path",async()=>{const a={derivationPath:"not/a/path",sendingData:d};await expect(new t(e,a).run()).rejects.toThrow()}),it("should correctly build APDU command lengths",()=>{const a=new t(e,{derivationPath:r,sendingData:d}),n=a._buildFullMessage(d,u),s=[-2147483604,-2147483147,-2147483648,0],l=a._buildApduCommand(n,s),i=2+s.length*4+n.length;expect(l.length).toBe(i)}),it("should handle maximum allowed message length",async()=>{const l=new Uint8Array(152).fill(1),i=new Uint8Array([240,202,204,26]);e.sendCommand.mockResolvedValueOnce(o({data:m})).mockResolvedValueOnce(o({data:i}));const g=await new t(e,{derivationPath:r,sendingData:l}).run();expect(e.sendCommand).toHaveBeenCalledTimes(2),expect(g.data).toEqual(i)}),it("should error on message exceeding 16-bit length (65535)",async()=>{const a=new Uint8Array(w+1).fill(170),n={derivationPath:r,sendingData:a},s=await new t(e,n).run();expect(e.sendCommand).toHaveBeenCalledTimes(0),expect(s.error).toEqual(new c(`Message too long: ${a.length} bytes (max is 65535)`))})})});
2
2
  //# sourceMappingURL=SendSignMessageTask.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/internal/app-binder/task/SendSignMessageTask.test.ts"],
4
- "sourcesContent": ["/* eslint-disable @typescript-eslint/no-unsafe-call */\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport {\n CommandResultFactory,\n InvalidStatusWordError,\n} from \"@ledgerhq/device-management-kit\";\nimport bs58 from \"bs58\";\n\nimport { makeDeviceActionInternalApiMock } from \"@internal/app-binder/device-action/__test-utils__/makeInternalApi\";\nimport {\n MAX_MESSAGE_LENGTH,\n SendSignMessageTask,\n} from \"@internal/app-binder/task/SendSignMessageTask\";\n\nconst DERIVATION_PATH = \"44'/501'/0'/0'\";\nconst PUBKEY = new Uint8Array(32).fill(0x00);\nconst PUBKEY_BASE58 = bs58.encode(PUBKEY);\nconst MESSAGE = new Uint8Array([0xf0, 0xca, 0xcc, 0x1a]);\n\ndescribe(\"SendSignMessageTask\", () => {\n const apiMock = makeDeviceActionInternalApiMock();\n\n beforeEach(() => {\n vi.resetAllMocks();\n });\n\n describe(\"run()\", () => {\n it(\"should error on empty message before any device call\", async () => {\n // given\n const args = {\n derivationPath: DERIVATION_PATH,\n sendingData: new Uint8Array([]),\n };\n\n // when\n const result = await new SendSignMessageTask(apiMock, args).run();\n\n // then\n expect(apiMock.sendCommand).toHaveBeenCalledTimes(0);\n expect((result as any).error).toEqual(\n new InvalidStatusWordError(\"Message cannot be empty\"),\n );\n });\n\n it(\"should return error if GET_PUBKEY fails\", async () => {\n // given\n apiMock.sendCommand.mockResolvedValueOnce(\n CommandResultFactory({\n error: new InvalidStatusWordError(\"pubkey error\"),\n }),\n );\n const args = {\n derivationPath: DERIVATION_PATH,\n sendingData: MESSAGE,\n };\n\n // when\n const result = await new SendSignMessageTask(apiMock, args).run();\n\n // then\n expect(apiMock.sendCommand).toHaveBeenCalledTimes(1);\n expect((result as any).error).toEqual(\n new InvalidStatusWordError(\"Error getting public key from device\"),\n );\n });\n\n it(\"should return error if SignOffChainMessageCommand fails\", async () => {\n // given\n apiMock.sendCommand\n .mockResolvedValueOnce(CommandResultFactory({ data: PUBKEY_BASE58 }))\n .mockResolvedValueOnce(\n CommandResultFactory({\n error: new InvalidStatusWordError(\"no signature returned\"),\n }),\n );\n const args = {\n derivationPath: DERIVATION_PATH,\n sendingData: MESSAGE,\n };\n\n // when\n const result = await new SendSignMessageTask(apiMock, args).run();\n\n // then\n expect(apiMock.sendCommand).toHaveBeenCalledTimes(2);\n expect((result as any).error).toEqual(\n new InvalidStatusWordError(\"no signature returned\"),\n );\n });\n\n it(\"should return success when signing succeeds\", async () => {\n // given\n const mockSig = new Uint8Array([0xf0, 0xca, 0xcc, 0x1a]);\n apiMock.sendCommand\n .mockResolvedValueOnce(CommandResultFactory({ data: PUBKEY_BASE58 }))\n .mockResolvedValueOnce(CommandResultFactory({ data: mockSig }));\n const args = {\n derivationPath: DERIVATION_PATH,\n sendingData: MESSAGE,\n };\n\n // when\n const result = await new SendSignMessageTask(apiMock, args).run();\n\n // then\n expect(apiMock.sendCommand).toHaveBeenCalledTimes(2);\n expect((result as any).data).toEqual(mockSig);\n });\n\n it(\"should reject invalid derivation path\", async () => {\n const args = {\n derivationPath: \"not/a/path\",\n sendingData: MESSAGE,\n };\n await expect(\n new SendSignMessageTask(apiMock, args).run(),\n ).rejects.toThrow();\n });\n\n it(\"should correctly build APDU command lengths\", () => {\n // given\n const task: any = new SendSignMessageTask(apiMock, {\n derivationPath: DERIVATION_PATH,\n sendingData: MESSAGE,\n });\n\n // when\n const fullMsg = task._buildFullMessage(MESSAGE, PUBKEY);\n const paths = [44 | 0x80000000, 501 | 0x80000000, 0 | 0x80000000, 0];\n const apdu = task._buildApduCommand(fullMsg, paths);\n const expectedLen = 1 + 1 + paths.length * 4 + fullMsg.length;\n\n // then\n expect(apdu.length).toBe(expectedLen);\n });\n\n it(\"should handle maximum allowed message length\", async () => {\n // given\n const headerAPDU = 1 + 1 + 4 * 4;\n const fullMsgHeader = 1 + 15 + 1 + 32 + 1 + 1 + 32 + 2;\n const maxBody = 255 - headerAPDU - fullMsgHeader;\n const bigMsg = new Uint8Array(maxBody).fill(0x01);\n const mockSig = new Uint8Array([0xf0, 0xca, 0xcc, 0x1a]);\n apiMock.sendCommand\n .mockResolvedValueOnce(CommandResultFactory({ data: PUBKEY_BASE58 }))\n .mockResolvedValueOnce(CommandResultFactory({ data: mockSig }));\n\n // when\n const result = await new SendSignMessageTask(apiMock, {\n derivationPath: DERIVATION_PATH,\n sendingData: bigMsg,\n }).run();\n\n // then\n expect(apiMock.sendCommand).toHaveBeenCalledTimes(2);\n expect((result as any).data).toEqual(mockSig);\n });\n\n it(\"should error on message exceeding 16-bit length (65535)\", async () => {\n // given\n const tooBig = new Uint8Array(MAX_MESSAGE_LENGTH + 1).fill(0xaa);\n const args = {\n derivationPath: DERIVATION_PATH,\n sendingData: tooBig,\n };\n\n // when\n const result = await new SendSignMessageTask(apiMock, args).run();\n\n // then\n expect(apiMock.sendCommand).toHaveBeenCalledTimes(0);\n expect((result as any).error).toEqual(\n new InvalidStatusWordError(\n `Message too long: ${tooBig.length} bytes (max is 65535)`,\n ),\n );\n });\n });\n});\n"],
5
- "mappings": "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",
6
- "names": ["CommandResultFactory", "InvalidStatusWordError", "bs58", "makeDeviceActionInternalApiMock", "MAX_MESSAGE_LENGTH", "SendSignMessageTask", "DERIVATION_PATH", "PUBKEY", "PUBKEY_BASE58", "MESSAGE", "apiMock", "args", "result", "mockSig", "task", "fullMsg", "paths", "apdu", "expectedLen", "bigMsg", "tooBig"]
4
+ "sourcesContent": ["/* eslint-disable @typescript-eslint/no-unsafe-call */\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport {\n CommandResultFactory,\n InvalidStatusWordError,\n} from \"@ledgerhq/device-management-kit\";\n\nimport { makeDeviceActionInternalApiMock } from \"@internal/app-binder/device-action/__test-utils__/makeInternalApi\";\nimport { DefaultBs58Encoder } from \"@internal/app-binder/services/bs58Encoder\";\nimport {\n MAX_MESSAGE_LENGTH,\n SendSignMessageTask,\n} from \"@internal/app-binder/task/SendSignMessageTask\";\n\nconst DERIVATION_PATH = \"44'/501'/0'/0'\";\nconst PUBKEY = new Uint8Array(32).fill(0x00);\nconst PUBKEY_BASE58 = DefaultBs58Encoder.encode(PUBKEY);\nconst MESSAGE = new Uint8Array([0xf0, 0xca, 0xcc, 0x1a]);\n\ndescribe(\"SendSignMessageTask\", () => {\n const apiMock = makeDeviceActionInternalApiMock();\n\n beforeEach(() => {\n vi.resetAllMocks();\n });\n\n describe(\"run()\", () => {\n it(\"should error on empty message before any device call\", async () => {\n // given\n const args = {\n derivationPath: DERIVATION_PATH,\n sendingData: new Uint8Array([]),\n };\n\n // when\n const result = await new SendSignMessageTask(apiMock, args).run();\n\n // then\n expect(apiMock.sendCommand).toHaveBeenCalledTimes(0);\n expect((result as any).error).toEqual(\n new InvalidStatusWordError(\"Message cannot be empty\"),\n );\n });\n\n it(\"should return error if GET_PUBKEY fails\", async () => {\n // given\n apiMock.sendCommand.mockResolvedValueOnce(\n CommandResultFactory({\n error: new InvalidStatusWordError(\"pubkey error\"),\n }),\n );\n const args = {\n derivationPath: DERIVATION_PATH,\n sendingData: MESSAGE,\n };\n\n // when\n const result = await new SendSignMessageTask(apiMock, args).run();\n\n // then\n expect(apiMock.sendCommand).toHaveBeenCalledTimes(1);\n expect((result as any).error).toEqual(\n new InvalidStatusWordError(\"Error getting public key from device\"),\n );\n });\n\n it(\"should return error if SignOffChainMessageCommand fails\", async () => {\n // given\n apiMock.sendCommand\n .mockResolvedValueOnce(CommandResultFactory({ data: PUBKEY_BASE58 }))\n .mockResolvedValueOnce(\n CommandResultFactory({\n error: new InvalidStatusWordError(\"no signature returned\"),\n }),\n );\n const args = {\n derivationPath: DERIVATION_PATH,\n sendingData: MESSAGE,\n };\n\n // when\n const result = await new SendSignMessageTask(apiMock, args).run();\n\n // then\n expect(apiMock.sendCommand).toHaveBeenCalledTimes(2);\n expect((result as any).error).toEqual(\n new InvalidStatusWordError(\"no signature returned\"),\n );\n });\n\n it(\"should return success when signing succeeds\", async () => {\n // given\n const mockSig = new Uint8Array([0xf0, 0xca, 0xcc, 0x1a]);\n apiMock.sendCommand\n .mockResolvedValueOnce(CommandResultFactory({ data: PUBKEY_BASE58 }))\n .mockResolvedValueOnce(CommandResultFactory({ data: mockSig }));\n const args = {\n derivationPath: DERIVATION_PATH,\n sendingData: MESSAGE,\n };\n\n // when\n const result = await new SendSignMessageTask(apiMock, args).run();\n\n // then\n expect(apiMock.sendCommand).toHaveBeenCalledTimes(2);\n expect((result as any).data).toEqual(mockSig);\n });\n\n it(\"should reject invalid derivation path\", async () => {\n const args = {\n derivationPath: \"not/a/path\",\n sendingData: MESSAGE,\n };\n await expect(\n new SendSignMessageTask(apiMock, args).run(),\n ).rejects.toThrow();\n });\n\n it(\"should correctly build APDU command lengths\", () => {\n // given\n const task: any = new SendSignMessageTask(apiMock, {\n derivationPath: DERIVATION_PATH,\n sendingData: MESSAGE,\n });\n\n // when\n const fullMsg = task._buildFullMessage(MESSAGE, PUBKEY);\n const paths = [44 | 0x80000000, 501 | 0x80000000, 0 | 0x80000000, 0];\n const apdu = task._buildApduCommand(fullMsg, paths);\n const expectedLen = 1 + 1 + paths.length * 4 + fullMsg.length;\n\n // then\n expect(apdu.length).toBe(expectedLen);\n });\n\n it(\"should handle maximum allowed message length\", async () => {\n // given\n const headerAPDU = 1 + 1 + 4 * 4;\n const fullMsgHeader = 1 + 15 + 1 + 32 + 1 + 1 + 32 + 2;\n const maxBody = 255 - headerAPDU - fullMsgHeader;\n const bigMsg = new Uint8Array(maxBody).fill(0x01);\n const mockSig = new Uint8Array([0xf0, 0xca, 0xcc, 0x1a]);\n apiMock.sendCommand\n .mockResolvedValueOnce(CommandResultFactory({ data: PUBKEY_BASE58 }))\n .mockResolvedValueOnce(CommandResultFactory({ data: mockSig }));\n\n // when\n const result = await new SendSignMessageTask(apiMock, {\n derivationPath: DERIVATION_PATH,\n sendingData: bigMsg,\n }).run();\n\n // then\n expect(apiMock.sendCommand).toHaveBeenCalledTimes(2);\n expect((result as any).data).toEqual(mockSig);\n });\n\n it(\"should error on message exceeding 16-bit length (65535)\", async () => {\n // given\n const tooBig = new Uint8Array(MAX_MESSAGE_LENGTH + 1).fill(0xaa);\n const args = {\n derivationPath: DERIVATION_PATH,\n sendingData: tooBig,\n };\n\n // when\n const result = await new SendSignMessageTask(apiMock, args).run();\n\n // then\n expect(apiMock.sendCommand).toHaveBeenCalledTimes(0);\n expect((result as any).error).toEqual(\n new InvalidStatusWordError(\n `Message too long: ${tooBig.length} bytes (max is 65535)`,\n ),\n );\n });\n });\n});\n"],
5
+ "mappings": "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",
6
+ "names": ["CommandResultFactory", "InvalidStatusWordError", "makeDeviceActionInternalApiMock", "DefaultBs58Encoder", "MAX_MESSAGE_LENGTH", "SendSignMessageTask", "DERIVATION_PATH", "PUBKEY", "PUBKEY_BASE58", "MESSAGE", "apiMock", "args", "result", "mockSig", "task", "fullMsg", "paths", "apdu", "expectedLen", "bigMsg", "tooBig"]
7
7
  }
@@ -1,2 +1,2 @@
1
- var c=Object.defineProperty;var l=Object.getOwnPropertyDescriptor;var m=(t,p,r,o)=>{for(var n=o>1?void 0:o?l(p,r):p,e=t.length-1,a;e>=0;e--)(a=t[e])&&(n=(o?a(p,r,n):a(n))||n);return o&&n&&c(p,r,n),n},s=(t,p)=>(r,o)=>p(r,o,t);import{inject as u,injectable as A}from"inversify";import{appBinderTypes as f}from"../../app-binder/di/appBinderTypes";let i=class{constructor(p){this.appBinder=p}execute(p,r,o,n){return this.appBinder.signTransaction({derivationPath:p,transaction:r,resolutionContext:o,skipOpenApp:n?.skipOpenApp??!1})}};i=m([A(),s(0,u(f.AppBinder))],i);export{i as SignTransactionUseCase};
1
+ var f=Object.defineProperty;var l=Object.getOwnPropertyDescriptor;var m=(p,r,o,n)=>{for(var i=n>1?void 0:n?l(r,o):r,a=p.length-1,e;a>=0;a--)(e=p[a])&&(i=(n?e(r,o,i):e(i))||i);return n&&i&&f(r,o,i),i},c=(p,r)=>(o,n)=>r(o,n,p);import{inject as T,injectable as d}from"inversify";import{appBinderTypes as B}from"../../app-binder/di/appBinderTypes";let t=class{constructor(r){this.appBinder=r}execute(r,o,n){return this.appBinder.signTransaction({derivationPath:r,transaction:o,solanaTransactionOptionalConfig:n})}};t=m([d(),c(0,T(B.AppBinder))],t);export{t as SignTransactionUseCase};
2
2
  //# sourceMappingURL=SignTransactionUseCase.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/internal/use-cases/transaction/SignTransactionUseCase.ts"],
4
- "sourcesContent": ["import { inject, injectable } from \"inversify\";\n\nimport { SignTransactionDAReturnType } from \"@api/app-binder/SignTransactionDeviceActionTypes\";\nimport { Transaction } from \"@api/model/Transaction\";\nimport { TransactionResolutionContext } from \"@api/model/TransactionResolutionContext\";\nimport { appBinderTypes } from \"@internal/app-binder/di/appBinderTypes\";\nimport { SolanaAppBinder } from \"@internal/app-binder/SolanaAppBinder\";\n\n@injectable()\nexport class SignTransactionUseCase {\n constructor(\n @inject(appBinderTypes.AppBinder) private appBinder: SolanaAppBinder,\n ) {}\n\n execute(\n derivationPath: string,\n transaction: Transaction,\n resolutionContext?: TransactionResolutionContext,\n options?: {\n skipOpenApp?: boolean;\n },\n ): SignTransactionDAReturnType {\n return this.appBinder.signTransaction({\n derivationPath,\n transaction,\n resolutionContext: resolutionContext,\n skipOpenApp: options?.skipOpenApp ?? false,\n });\n }\n}\n"],
5
- "mappings": "iOAAA,OAAS,UAAAA,EAAQ,cAAAC,MAAkB,YAKnC,OAAS,kBAAAC,MAAsB,yCAIxB,IAAMC,EAAN,KAA6B,CAClC,YAC4CC,EAC1C,CAD0C,eAAAA,CACzC,CAEH,QACEC,EACAC,EACAC,EACAC,EAG6B,CAC7B,OAAO,KAAK,UAAU,gBAAgB,CACpC,eAAAH,EACA,YAAAC,EACA,kBAAmBC,EACnB,YAAaC,GAAS,aAAe,EACvC,CAAC,CACH,CACF,EApBaL,EAANM,EAAA,CADNC,EAAW,EAGPC,EAAA,EAAAC,EAAOC,EAAe,SAAS,IAFvBV",
6
- "names": ["inject", "injectable", "appBinderTypes", "SignTransactionUseCase", "appBinder", "derivationPath", "transaction", "resolutionContext", "options", "__decorateClass", "injectable", "__decorateParam", "inject", "appBinderTypes"]
4
+ "sourcesContent": ["import { inject, injectable } from \"inversify\";\n\nimport { SignTransactionDAReturnType } from \"@api/app-binder/SignTransactionDeviceActionTypes\";\nimport { SolanaTransactionOptionalConfig } from \"@api/model/SolanaTransactionOptionalConfig\";\nimport { Transaction } from \"@api/model/Transaction\";\nimport { appBinderTypes } from \"@internal/app-binder/di/appBinderTypes\";\nimport { SolanaAppBinder } from \"@internal/app-binder/SolanaAppBinder\";\n\n@injectable()\nexport class SignTransactionUseCase {\n constructor(\n @inject(appBinderTypes.AppBinder) private appBinder: SolanaAppBinder,\n ) {}\n\n execute(\n derivationPath: string,\n transaction: Transaction,\n solanaTransactionOptionalConfig?: SolanaTransactionOptionalConfig,\n ): SignTransactionDAReturnType {\n return this.appBinder.signTransaction({\n derivationPath,\n transaction,\n solanaTransactionOptionalConfig,\n });\n }\n}\n"],
5
+ "mappings": "iOAAA,OAAS,UAAAA,EAAQ,cAAAC,MAAkB,YAKnC,OAAS,kBAAAC,MAAsB,yCAIxB,IAAMC,EAAN,KAA6B,CAClC,YAC4CC,EAC1C,CAD0C,eAAAA,CACzC,CAEH,QACEC,EACAC,EACAC,EAC6B,CAC7B,OAAO,KAAK,UAAU,gBAAgB,CACpC,eAAAF,EACA,YAAAC,EACA,gCAAAC,CACF,CAAC,CACH,CACF,EAhBaJ,EAANK,EAAA,CADNC,EAAW,EAGPC,EAAA,EAAAC,EAAOC,EAAe,SAAS,IAFvBT",
6
+ "names": ["inject", "injectable", "appBinderTypes", "SignTransactionUseCase", "appBinder", "derivationPath", "transaction", "solanaTransactionOptionalConfig", "__decorateClass", "injectable", "__decorateParam", "inject", "appBinderTypes"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import{SignTransactionUseCase as o}from"./SignTransactionUseCase";describe("GetAppConfigurationUseCase",()=>{const e=vi.fn(),i={signTransaction:e};let t;beforeEach(()=>{vi.clearAllMocks(),t=new o(i)}),it("should return the config from the appBinder's getAppConfiguration method",()=>{e.mockReturnValue(new Uint8Array([66]));const n=t.execute("44'/501'/0'/0'",new Uint8Array([1,2,3,4]));expect(e).toHaveBeenCalledWith({derivationPath:"44'/501'/0'/0'",transaction:new Uint8Array([1,2,3,4]),skipOpenApp:!1,options:void 0}),expect(n).toEqual(new Uint8Array([66]))}),it("should forward skipOpenApp and TransactionOptions to appBinder.signTransaction",()=>{const n="44'/501'/1'/2'",a=new Uint8Array([170,187]),s={skipOpenApp:!0,tokenAddress:"someToken",createATA:{address:"someAddress",mintAddress:"mint"}};t.execute(n,a,void 0,s),expect(e).toHaveBeenCalledWith({derivationPath:n,transaction:a,skipOpenApp:!0})})});
1
+ import{SignTransactionUseCase as s}from"./SignTransactionUseCase";describe("GetAppConfigurationUseCase",()=>{const n=vi.fn(),i={signTransaction:n};let t;beforeEach(()=>{vi.clearAllMocks(),t=new s(i)}),it("should return the config from the appBinder's getAppConfiguration method",()=>{n.mockReturnValue(new Uint8Array([66]));const e=t.execute("44'/501'/0'/0'",new Uint8Array([1,2,3,4]));expect(n).toHaveBeenCalledWith({derivationPath:"44'/501'/0'/0'",transaction:new Uint8Array([1,2,3,4]),solanaTransactionOptionalConfig:void 0}),expect(e).toEqual(new Uint8Array([66]))}),it("should forward skipOpenApp and TransactionResolutionContext to appBinder.signTransaction",()=>{const e="44'/501'/1'/2'",a=new Uint8Array([170,187]),o={skipOpenApp:!0,transactionResolutionContext:{tokenAddress:"someToken",createATA:{address:"someAddress",mintAddress:"someMint"}}};t.execute(e,a,o),expect(n).toHaveBeenCalledWith({derivationPath:e,transaction:a,solanaTransactionOptionalConfig:o})})});
2
2
  //# sourceMappingURL=SignTransactionUseCase.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/internal/use-cases/transaction/SignTransactionUseCase.test.ts"],
4
- "sourcesContent": ["import { type SolanaAppBinder } from \"@internal/app-binder/SolanaAppBinder\";\n\nimport { SignTransactionUseCase } from \"./SignTransactionUseCase\";\n\ndescribe(\"GetAppConfigurationUseCase\", () => {\n const signTransactionMock = vi.fn();\n const appBinderMock = {\n signTransaction: signTransactionMock,\n } as unknown as SolanaAppBinder;\n let useCase: SignTransactionUseCase;\n\n beforeEach(() => {\n vi.clearAllMocks();\n useCase = new SignTransactionUseCase(appBinderMock);\n });\n\n it(\"should return the config from the appBinder's getAppConfiguration method\", () => {\n // GIVEN\n signTransactionMock.mockReturnValue(new Uint8Array([0x042]));\n\n // WHEN\n const result = useCase.execute(\n \"44'/501'/0'/0'\",\n new Uint8Array([0x01, 0x02, 0x03, 0x04]),\n );\n\n // THEN\n expect(signTransactionMock).toHaveBeenCalledWith({\n derivationPath: \"44'/501'/0'/0'\",\n transaction: new Uint8Array([0x01, 0x02, 0x03, 0x04]),\n skipOpenApp: false,\n options: undefined,\n });\n expect(result).toEqual(new Uint8Array([0x042]));\n });\n\n it(\"should forward skipOpenApp and TransactionOptions to appBinder.signTransaction\", () => {\n // GIVEN\n const derivationPath = \"44'/501'/1'/2'\";\n const tx = new Uint8Array([0xaa, 0xbb]);\n const opts = {\n skipOpenApp: true,\n tokenAddress: \"someToken\",\n createATA: { address: \"someAddress\", mintAddress: \"mint\" },\n };\n\n // WHEN\n useCase.execute(derivationPath, tx, undefined, opts);\n\n // THEN\n expect(signTransactionMock).toHaveBeenCalledWith({\n derivationPath,\n transaction: tx,\n skipOpenApp: true,\n });\n });\n});\n"],
5
- "mappings": "AAEA,OAAS,0BAAAA,MAA8B,2BAEvC,SAAS,6BAA8B,IAAM,CAC3C,MAAMC,EAAsB,GAAG,GAAG,EAC5BC,EAAgB,CACpB,gBAAiBD,CACnB,EACA,IAAIE,EAEJ,WAAW,IAAM,CACf,GAAG,cAAc,EACjBA,EAAU,IAAIH,EAAuBE,CAAa,CACpD,CAAC,EAED,GAAG,2EAA4E,IAAM,CAEnFD,EAAoB,gBAAgB,IAAI,WAAW,CAAC,EAAK,CAAC,CAAC,EAG3D,MAAMG,EAASD,EAAQ,QACrB,iBACA,IAAI,WAAW,CAAC,EAAM,EAAM,EAAM,CAAI,CAAC,CACzC,EAGA,OAAOF,CAAmB,EAAE,qBAAqB,CAC/C,eAAgB,iBAChB,YAAa,IAAI,WAAW,CAAC,EAAM,EAAM,EAAM,CAAI,CAAC,EACpD,YAAa,GACb,QAAS,MACX,CAAC,EACD,OAAOG,CAAM,EAAE,QAAQ,IAAI,WAAW,CAAC,EAAK,CAAC,CAAC,CAChD,CAAC,EAED,GAAG,iFAAkF,IAAM,CAEzF,MAAMC,EAAiB,iBACjBC,EAAK,IAAI,WAAW,CAAC,IAAM,GAAI,CAAC,EAChCC,EAAO,CACX,YAAa,GACb,aAAc,YACd,UAAW,CAAE,QAAS,cAAe,YAAa,MAAO,CAC3D,EAGAJ,EAAQ,QAAQE,EAAgBC,EAAI,OAAWC,CAAI,EAGnD,OAAON,CAAmB,EAAE,qBAAqB,CAC/C,eAAAI,EACA,YAAaC,EACb,YAAa,EACf,CAAC,CACH,CAAC,CACH,CAAC",
4
+ "sourcesContent": ["import { type SolanaAppBinder } from \"@internal/app-binder/SolanaAppBinder\";\n\nimport { SignTransactionUseCase } from \"./SignTransactionUseCase\";\n\ndescribe(\"GetAppConfigurationUseCase\", () => {\n const signTransactionMock = vi.fn();\n const appBinderMock = {\n signTransaction: signTransactionMock,\n } as unknown as SolanaAppBinder;\n let useCase: SignTransactionUseCase;\n\n beforeEach(() => {\n vi.clearAllMocks();\n useCase = new SignTransactionUseCase(appBinderMock);\n });\n\n it(\"should return the config from the appBinder's getAppConfiguration method\", () => {\n // GIVEN\n signTransactionMock.mockReturnValue(new Uint8Array([0x042]));\n\n // WHEN\n const result = useCase.execute(\n \"44'/501'/0'/0'\",\n new Uint8Array([0x01, 0x02, 0x03, 0x04]),\n );\n\n // THEN\n expect(signTransactionMock).toHaveBeenCalledWith({\n derivationPath: \"44'/501'/0'/0'\",\n transaction: new Uint8Array([0x01, 0x02, 0x03, 0x04]),\n solanaTransactionOptionalConfig: undefined,\n });\n expect(result).toEqual(new Uint8Array([0x042]));\n });\n\n it(\"should forward skipOpenApp and TransactionResolutionContext to appBinder.signTransaction\", () => {\n // GIVEN\n const derivationPath = \"44'/501'/1'/2'\";\n const tx = new Uint8Array([0xaa, 0xbb]);\n const opts = {\n skipOpenApp: true,\n transactionResolutionContext: {\n tokenAddress: \"someToken\",\n createATA: { address: \"someAddress\", mintAddress: \"someMint\" },\n },\n };\n\n // WHEN\n useCase.execute(derivationPath, tx, opts);\n\n // THEN\n expect(signTransactionMock).toHaveBeenCalledWith({\n derivationPath,\n transaction: tx,\n solanaTransactionOptionalConfig: opts,\n });\n });\n});\n"],
5
+ "mappings": "AAEA,OAAS,0BAAAA,MAA8B,2BAEvC,SAAS,6BAA8B,IAAM,CAC3C,MAAMC,EAAsB,GAAG,GAAG,EAC5BC,EAAgB,CACpB,gBAAiBD,CACnB,EACA,IAAIE,EAEJ,WAAW,IAAM,CACf,GAAG,cAAc,EACjBA,EAAU,IAAIH,EAAuBE,CAAa,CACpD,CAAC,EAED,GAAG,2EAA4E,IAAM,CAEnFD,EAAoB,gBAAgB,IAAI,WAAW,CAAC,EAAK,CAAC,CAAC,EAG3D,MAAMG,EAASD,EAAQ,QACrB,iBACA,IAAI,WAAW,CAAC,EAAM,EAAM,EAAM,CAAI,CAAC,CACzC,EAGA,OAAOF,CAAmB,EAAE,qBAAqB,CAC/C,eAAgB,iBAChB,YAAa,IAAI,WAAW,CAAC,EAAM,EAAM,EAAM,CAAI,CAAC,EACpD,gCAAiC,MACnC,CAAC,EACD,OAAOG,CAAM,EAAE,QAAQ,IAAI,WAAW,CAAC,EAAK,CAAC,CAAC,CAChD,CAAC,EAED,GAAG,2FAA4F,IAAM,CAEnG,MAAMC,EAAiB,iBACjBC,EAAK,IAAI,WAAW,CAAC,IAAM,GAAI,CAAC,EAChCC,EAAO,CACX,YAAa,GACb,6BAA8B,CAC5B,aAAc,YACd,UAAW,CAAE,QAAS,cAAe,YAAa,UAAW,CAC/D,CACF,EAGAJ,EAAQ,QAAQE,EAAgBC,EAAIC,CAAI,EAGxC,OAAON,CAAmB,EAAE,qBAAqB,CAC/C,eAAAI,EACA,YAAaC,EACb,gCAAiCC,CACnC,CAAC,CACH,CAAC,CACH,CAAC",
6
6
  "names": ["SignTransactionUseCase", "signTransactionMock", "appBinderMock", "useCase", "result", "derivationPath", "tx", "opts"]
7
7
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ledgerhq/device-signer-kit-solana",
3
- "version": "1.2.0",
3
+ "version": "1.3.0",
4
4
  "private": false,
5
5
  "license": "Apache-2.0",
6
6
  "exports": {
@@ -5,10 +5,9 @@ import { type SignTransactionDAReturnType } from "./app-binder/SignTransactionDe
5
5
  import { type AddressOptions } from "./model/AddressOption";
6
6
  import { type MessageOptions } from "./model/MessageOptions";
7
7
  import { type Transaction } from "./model/Transaction";
8
- import { type TransactionOptions } from "./model/TransactionOptions";
9
- import { type TransactionResolutionContext } from "./model/TransactionResolutionContext";
8
+ import { type SolanaTransactionOptionalConfig } from "./model/SolanaTransactionOptionalConfig";
10
9
  export interface SignerSolana {
11
- signTransaction: (derivationPath: string, transaction: Transaction, resolutionContext?: TransactionResolutionContext, options?: TransactionOptions) => SignTransactionDAReturnType;
10
+ signTransaction: (derivationPath: string, transaction: Transaction, solanaTransactionOptionalConfig?: SolanaTransactionOptionalConfig) => SignTransactionDAReturnType;
12
11
  signMessage: (derivationPath: string, message: string, options?: MessageOptions) => SignMessageDAReturnType;
13
12
  getAddress: (derivationPath: string, options?: AddressOptions) => GetAddressDAReturnType;
14
13
  getAppConfiguration: () => GetAppConfigurationDAReturnType;
@@ -1 +1 @@
1
- {"version":3,"file":"SignerSolana.d.ts","sourceRoot":"","sources":["../../../src/api/SignerSolana.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,6CAA6C,CAAC;AAC1F,OAAO,EAAE,KAAK,+BAA+B,EAAE,MAAM,sDAAsD,CAAC;AAC5G,OAAO,EAAE,KAAK,uBAAuB,EAAE,MAAM,8CAA8C,CAAC;AAC5F,OAAO,EAAE,KAAK,2BAA2B,EAAE,MAAM,kDAAkD,CAAC;AACpG,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACxE,OAAO,EAAE,KAAK,4BAA4B,EAAE,MAAM,yCAAyC,CAAC;AAE5F,MAAM,WAAW,YAAY;IAC3B,eAAe,EAAE,CACf,cAAc,EAAE,MAAM,EACtB,WAAW,EAAE,WAAW,EACxB,iBAAiB,CAAC,EAAE,4BAA4B,EAChD,OAAO,CAAC,EAAE,kBAAkB,KACzB,2BAA2B,CAAC;IAEjC,WAAW,EAAE,CACX,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,cAAc,KACrB,uBAAuB,CAAC;IAE7B,UAAU,EAAE,CACV,cAAc,EAAE,MAAM,EACtB,OAAO,CAAC,EAAE,cAAc,KACrB,sBAAsB,CAAC;IAE5B,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;CAC5D"}
1
+ {"version":3,"file":"SignerSolana.d.ts","sourceRoot":"","sources":["../../../src/api/SignerSolana.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,6CAA6C,CAAC;AAC1F,OAAO,EAAE,KAAK,+BAA+B,EAAE,MAAM,sDAAsD,CAAC;AAC5G,OAAO,EAAE,KAAK,uBAAuB,EAAE,MAAM,8CAA8C,CAAC;AAC5F,OAAO,EAAE,KAAK,2BAA2B,EAAE,MAAM,kDAAkD,CAAC;AACpG,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAE1D,OAAO,EAAE,KAAK,+BAA+B,EAAE,MAAM,yCAAyC,CAAC;AAE/F,MAAM,WAAW,YAAY;IAC3B,eAAe,EAAE,CACf,cAAc,EAAE,MAAM,EACtB,WAAW,EAAE,WAAW,EACxB,+BAA+B,CAAC,EAAE,+BAA+B,KAC9D,2BAA2B,CAAC;IAEjC,WAAW,EAAE,CACX,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,cAAc,KACrB,uBAAuB,CAAC;IAE7B,UAAU,EAAE,CACV,cAAc,EAAE,MAAM,EACtB,OAAO,CAAC,EAAE,cAAc,KACrB,sBAAsB,CAAC;IAE5B,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;CAC5D"}
@@ -2,9 +2,8 @@ import { type GenerateTransactionDAReturnType } from "./app-binder/GenerateTrans
2
2
  import { type GetAddressDAReturnType } from "./app-binder/GetAddressDeviceActionTypes";
3
3
  import { type GetAppConfigurationDAReturnType } from "./app-binder/GetAppConfigurationDeviceActionTypes";
4
4
  import { type AddressOptions } from "./model/AddressOption";
5
- import { type TransactionOptions } from "./model/TransactionOptions";
6
5
  export interface SolanaTools {
7
- generateTransaction: (derivationPath: string, options?: TransactionOptions) => GenerateTransactionDAReturnType;
6
+ generateTransaction: (derivationPath: string) => GenerateTransactionDAReturnType;
8
7
  getAddress: (derivationPath: string, options?: AddressOptions) => GetAddressDAReturnType;
9
8
  getAppConfiguration: () => GetAppConfigurationDAReturnType;
10
9
  }
@@ -1 +1 @@
1
- {"version":3,"file":"SolanaTools.d.ts","sourceRoot":"","sources":["../../../src/api/SolanaTools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,+BAA+B,EAAE,MAAM,sDAAsD,CAAC;AAC5G,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,6CAA6C,CAAC;AAC1F,OAAO,EAAE,KAAK,+BAA+B,EAAE,MAAM,sDAAsD,CAAC;AAC5G,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAExE,MAAM,WAAW,WAAW;IAC1B,mBAAmB,EAAE,CACnB,cAAc,EAAE,MAAM,EACtB,OAAO,CAAC,EAAE,kBAAkB,KACzB,+BAA+B,CAAC;IAErC,UAAU,EAAE,CACV,cAAc,EAAE,MAAM,EACtB,OAAO,CAAC,EAAE,cAAc,KACrB,sBAAsB,CAAC;IAE5B,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;CAC5D"}
1
+ {"version":3,"file":"SolanaTools.d.ts","sourceRoot":"","sources":["../../../src/api/SolanaTools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,+BAA+B,EAAE,MAAM,sDAAsD,CAAC;AAC5G,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,6CAA6C,CAAC;AAC1F,OAAO,EAAE,KAAK,+BAA+B,EAAE,MAAM,sDAAsD,CAAC;AAC5G,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE/D,MAAM,WAAW,WAAW;IAC1B,mBAAmB,EAAE,CACnB,cAAc,EAAE,MAAM,KACnB,+BAA+B,CAAC;IAErC,UAAU,EAAE,CACV,cAAc,EAAE,MAAM,EACtB,OAAO,CAAC,EAAE,cAAc,KACrB,sBAAsB,CAAC;IAE5B,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;CAC5D"}
@@ -1,7 +1,8 @@
1
1
  import { type ExecuteDeviceActionReturnType, type OpenAppDAError, type OpenAppDARequiredInteraction, type SendCommandInAppDAError, type UserInteractionRequired } from "@ledgerhq/device-management-kit";
2
- import { type Signature } from "../model/Signature";
3
2
  import { type SolanaAppErrorCodes } from "../../internal/app-binder/command/utils/SolanaApplicationErrors";
4
- export type SignMessageDAOutput = Signature;
3
+ export type SignMessageDAOutput = {
4
+ signature: string;
5
+ };
5
6
  export type SignMessageDAError = OpenAppDAError | SendCommandInAppDAError<SolanaAppErrorCodes>;
6
7
  type SignMessageDARequiredInteraction = OpenAppDARequiredInteraction | UserInteractionRequired.SignPersonalMessage;
7
8
  export type SignMessageDAIntermediateValue = {
@@ -1 +1 @@
1
- {"version":3,"file":"SignMessageDeviceActionTypes.d.ts","sourceRoot":"","sources":["../../../../src/api/app-binder/SignMessageDeviceActionTypes.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,6BAA6B,EAClC,KAAK,cAAc,EACnB,KAAK,4BAA4B,EACjC,KAAK,uBAAuB,EAC5B,KAAK,uBAAuB,EAC7B,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,4DAA4D,CAAC;AAEtG,MAAM,MAAM,mBAAmB,GAAG,SAAS,CAAC;AAE5C,MAAM,MAAM,kBAAkB,GAC1B,cAAc,GACd,uBAAuB,CAAC,mBAAmB,CAAC,CAAC;AAEjD,KAAK,gCAAgC,GACjC,4BAA4B,GAC5B,uBAAuB,CAAC,mBAAmB,CAAC;AAEhD,MAAM,MAAM,8BAA8B,GAAG;IAC3C,uBAAuB,EAAE,gCAAgC,CAAC;CAC3D,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG,6BAA6B,CACjE,mBAAmB,EACnB,kBAAkB,EAClB,8BAA8B,CAC/B,CAAC"}
1
+ {"version":3,"file":"SignMessageDeviceActionTypes.d.ts","sourceRoot":"","sources":["../../../../src/api/app-binder/SignMessageDeviceActionTypes.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,6BAA6B,EAClC,KAAK,cAAc,EACnB,KAAK,4BAA4B,EACjC,KAAK,uBAAuB,EAC5B,KAAK,uBAAuB,EAC7B,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,4DAA4D,CAAC;AAEtG,MAAM,MAAM,mBAAmB,GAAG;IAChC,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAC1B,cAAc,GACd,uBAAuB,CAAC,mBAAmB,CAAC,CAAC;AAEjD,KAAK,gCAAgC,GACjC,4BAA4B,GAC5B,uBAAuB,CAAC,mBAAmB,CAAC;AAEhD,MAAM,MAAM,8BAA8B,GAAG;IAC3C,uBAAuB,EAAE,gCAAgC,CAAC;CAC3D,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG,6BAA6B,CACjE,mBAAmB,EACnB,kBAAkB,EAClB,8BAA8B,CAC/B,CAAC"}
@@ -3,16 +3,15 @@ import { type SolanaTransactionContextResultSuccess } from "@ledgerhq/context-mo
3
3
  import { type DeviceActionState, type ExecuteDeviceActionReturnType, type OpenAppDAError, type OpenAppDARequiredInteraction, type SendCommandInAppDAError, type UserInteractionRequired } from "@ledgerhq/device-management-kit";
4
4
  import { type AppConfiguration } from "../model/AppConfiguration";
5
5
  import { type Signature } from "../model/Signature";
6
+ import { type SolanaTransactionOptionalConfig } from "../model/SolanaTransactionOptionalConfig";
6
7
  import { type Transaction } from "../model/Transaction";
7
- import { type TransactionResolutionContext } from "../model/TransactionResolutionContext";
8
8
  import { type SolanaAppErrorCodes } from "../../internal/app-binder/command/utils/SolanaApplicationErrors";
9
9
  import { type TxInspectorResult } from "../../internal/app-binder/services/TransactionInspector";
10
10
  export type SignTransactionDAOutput = Signature;
11
11
  export type SignTransactionDAInput = {
12
12
  readonly derivationPath: string;
13
13
  readonly transaction: Transaction;
14
- readonly resolutionContext?: TransactionResolutionContext;
15
- readonly skipOpenApp: boolean;
14
+ readonly transactionOptions?: SolanaTransactionOptionalConfig;
16
15
  readonly contextModule: ContextModule;
17
16
  };
18
17
  export type SignTransactionDAError = OpenAppDAError | SendCommandInAppDAError<SolanaAppErrorCodes>;
@@ -1 +1 @@
1
- {"version":3,"file":"SignTransactionDeviceActionTypes.d.ts","sourceRoot":"","sources":["../../../../src/api/app-binder/SignTransactionDeviceActionTypes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,KAAK,qCAAqC,EAAE,MAAM,kEAAkE,CAAC;AAC9H,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,6BAA6B,EAClC,KAAK,cAAc,EACnB,KAAK,4BAA4B,EACjC,KAAK,uBAAuB,EAC5B,KAAK,uBAAuB,EAC7B,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,KAAK,4BAA4B,EAAE,MAAM,yCAAyC,CAAC;AAC5F,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,4DAA4D,CAAC;AACtG,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,oDAAoD,CAAC;AAE5F,MAAM,MAAM,uBAAuB,GAAG,SAAS,CAAC;AAEhD,MAAM,MAAM,sBAAsB,GAAG;IACnC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAClC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,4BAA4B,CAAC;IAC1D,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;CACvC,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAC9B,cAAc,GACd,uBAAuB,CAAC,mBAAmB,CAAC,CAAC;AAEjD,KAAK,oCAAoC,GACrC,uBAAuB,GACvB,4BAA4B,CAAC;AAEjC,MAAM,MAAM,kCAAkC,GAAG;IAC/C,uBAAuB,EAAE,oCAAoC,CAAC;CAC/D,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG,iBAAiB,CACpD,uBAAuB,EACvB,sBAAsB,EACtB,kCAAkC,CACnC,CAAC;AAEF,MAAM,MAAM,8BAA8B,GAAG;IAC3C,QAAQ,CAAC,KAAK,EAAE,sBAAsB,GAAG,IAAI,CAAC;IAC9C,QAAQ,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI,CAAC;IACrC,QAAQ,CAAC,SAAS,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAC5C,QAAQ,CAAC,wBAAwB,EAAE,qCAAqC,GAAG,IAAI,CAAC;IAChF,QAAQ,CAAC,eAAe,EAAE,iBAAiB,GAAG,IAAI,CAAC;CACpD,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG,6BAA6B,CACrE,uBAAuB,EACvB,sBAAsB,EACtB,kCAAkC,CACnC,CAAC"}
1
+ {"version":3,"file":"SignTransactionDeviceActionTypes.d.ts","sourceRoot":"","sources":["../../../../src/api/app-binder/SignTransactionDeviceActionTypes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,KAAK,qCAAqC,EAAE,MAAM,kEAAkE,CAAC;AAC9H,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,6BAA6B,EAClC,KAAK,cAAc,EACnB,KAAK,4BAA4B,EACjC,KAAK,uBAAuB,EAC5B,KAAK,uBAAuB,EAC7B,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,KAAK,+BAA+B,EAAE,MAAM,4CAA4C,CAAC;AAClG,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,4DAA4D,CAAC;AACtG,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,oDAAoD,CAAC;AAE5F,MAAM,MAAM,uBAAuB,GAAG,SAAS,CAAC;AAEhD,MAAM,MAAM,sBAAsB,GAAG;IACnC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAClC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,+BAA+B,CAAC;IAC9D,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;CACvC,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAC9B,cAAc,GACd,uBAAuB,CAAC,mBAAmB,CAAC,CAAC;AAEjD,KAAK,oCAAoC,GACrC,uBAAuB,GACvB,4BAA4B,CAAC;AAEjC,MAAM,MAAM,kCAAkC,GAAG;IAC/C,uBAAuB,EAAE,oCAAoC,CAAC;CAC/D,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG,iBAAiB,CACpD,uBAAuB,EACvB,sBAAsB,EACtB,kCAAkC,CACnC,CAAC;AAEF,MAAM,MAAM,8BAA8B,GAAG;IAC3C,QAAQ,CAAC,KAAK,EAAE,sBAAsB,GAAG,IAAI,CAAC;IAC9C,QAAQ,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI,CAAC;IACrC,QAAQ,CAAC,SAAS,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAC5C,QAAQ,CAAC,wBAAwB,EAAE,qCAAqC,GAAG,IAAI,CAAC;IAChF,QAAQ,CAAC,eAAe,EAAE,iBAAiB,GAAG,IAAI,CAAC;CACpD,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG,6BAA6B,CACrE,uBAAuB,EACvB,sBAAsB,EACtB,kCAAkC,CACnC,CAAC"}
@@ -4,8 +4,8 @@ export type { GetAppConfigurationDAError, GetAppConfigurationDAIntermediateValue
4
4
  export type { SignMessageDAError, SignMessageDAIntermediateValue, SignMessageDAOutput, } from "./app-binder/SignMessageDeviceActionTypes";
5
5
  export type { SignTransactionDAError, SignTransactionDAIntermediateValue, SignTransactionDAOutput, SignTransactionDAReturnType, } from "./app-binder/SignTransactionDeviceActionTypes";
6
6
  export type { Signature } from "./model/Signature";
7
+ export type { SolanaTransactionOptionalConfig } from "./model/SolanaTransactionOptionalConfig";
7
8
  export type { Transaction } from "./model/Transaction";
8
- export type { TransactionOptions } from "./model/TransactionOptions";
9
9
  export type { SignerSolana } from "./SignerSolana";
10
10
  export { SignerSolanaBuilder } from "./SignerSolanaBuilder";
11
11
  export type { SolanaTools } from "./SolanaTools";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/api/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,0BAA0B,EAC1B,sCAAsC,EACtC,2BAA2B,EAC3B,+BAA+B,GAChC,MAAM,sDAAsD,CAAC;AAC9D,YAAY,EACV,iBAAiB,EACjB,6BAA6B,EAC7B,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,6CAA6C,CAAC;AACrD,YAAY,EACV,0BAA0B,EAC1B,sCAAsC,EACtC,2BAA2B,GAC5B,MAAM,sDAAsD,CAAC;AAC9D,YAAY,EACV,kBAAkB,EAClB,8BAA8B,EAC9B,mBAAmB,GACpB,MAAM,8CAA8C,CAAC;AACtD,YAAY,EACV,sBAAsB,EACtB,kCAAkC,EAClC,uBAAuB,EACvB,2BAA2B,GAC5B,MAAM,kDAAkD,CAAC;AAC1D,YAAY,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,YAAY,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,YAAY,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACxE,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,YAAY,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/api/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,0BAA0B,EAC1B,sCAAsC,EACtC,2BAA2B,EAC3B,+BAA+B,GAChC,MAAM,sDAAsD,CAAC;AAC9D,YAAY,EACV,iBAAiB,EACjB,6BAA6B,EAC7B,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,6CAA6C,CAAC;AACrD,YAAY,EACV,0BAA0B,EAC1B,sCAAsC,EACtC,2BAA2B,GAC5B,MAAM,sDAAsD,CAAC;AAC9D,YAAY,EACV,kBAAkB,EAClB,8BAA8B,EAC9B,mBAAmB,GACpB,MAAM,8CAA8C,CAAC;AACtD,YAAY,EACV,sBAAsB,EACtB,kCAAkC,EAClC,uBAAuB,EACvB,2BAA2B,GAC5B,MAAM,kDAAkD,CAAC;AAC1D,YAAY,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,YAAY,EAAE,+BAA+B,EAAE,MAAM,4CAA4C,CAAC;AAClG,YAAY,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,YAAY,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { type TransactionResolutionContext } from "./TransactionResolutionContext";
2
+ export type SolanaTransactionOptionalConfig = {
3
+ transactionResolutionContext?: TransactionResolutionContext;
4
+ solanaRPCURL?: string;
5
+ skipOpenApp?: boolean;
6
+ };
7
+ //# sourceMappingURL=SolanaTransactionOptionalConfig.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SolanaTransactionOptionalConfig.d.ts","sourceRoot":"","sources":["../../../../src/api/model/SolanaTransactionOptionalConfig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,4BAA4B,EAAE,MAAM,gCAAgC,CAAC;AAEnF,MAAM,MAAM,+BAA+B,GAAG;IAC5C,4BAA4B,CAAC,EAAE,4BAA4B,CAAC;IAC5D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,CAAC"}