@ledgerhq/device-contacts-kit 0.0.0-develop-20260827155839 → 0.0.0-develop-20260829001241

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 (286) hide show
  1. package/README.md +57 -2
  2. package/lib/cjs/api/ContactsManager.js +1 -1
  3. package/lib/cjs/api/ContactsManager.js.map +1 -1
  4. package/lib/cjs/api/app-binder/RegisterExternalAddressDeviceActionTypes.js +2 -0
  5. package/lib/cjs/api/app-binder/RegisterExternalAddressDeviceActionTypes.js.map +7 -0
  6. package/lib/cjs/api/app-binder/RenameContactDeviceActionTypes.js +2 -0
  7. package/lib/cjs/api/app-binder/RenameContactDeviceActionTypes.js.map +7 -0
  8. package/lib/cjs/api/index.js +1 -1
  9. package/lib/cjs/api/index.js.map +2 -2
  10. package/lib/cjs/api/model/RegisterExternalAddress.js +2 -0
  11. package/lib/cjs/api/model/RegisterExternalAddress.js.map +7 -0
  12. package/lib/cjs/api/model/RenameContact.js +2 -0
  13. package/lib/cjs/api/model/RenameContact.js.map +7 -0
  14. package/lib/cjs/internal/DefaultContactsManager.js +1 -1
  15. package/lib/cjs/internal/DefaultContactsManager.js.map +3 -3
  16. package/lib/cjs/internal/DefaultContactsManager.test.js +2 -0
  17. package/lib/cjs/internal/DefaultContactsManager.test.js.map +7 -0
  18. package/lib/cjs/internal/app-binder/ContactsAppBinder.js +1 -1
  19. package/lib/cjs/internal/app-binder/ContactsAppBinder.js.map +3 -3
  20. package/lib/cjs/internal/app-binder/command/RegisterIdentityCommand.js +2 -0
  21. package/lib/cjs/internal/app-binder/command/RegisterIdentityCommand.js.map +7 -0
  22. package/lib/cjs/internal/app-binder/command/RegisterIdentityCommand.test.js +2 -0
  23. package/lib/cjs/internal/app-binder/command/RegisterIdentityCommand.test.js.map +7 -0
  24. package/lib/cjs/internal/app-binder/command/RenameContactCommand.js +2 -0
  25. package/lib/cjs/internal/app-binder/command/RenameContactCommand.js.map +7 -0
  26. package/lib/cjs/internal/app-binder/command/RenameContactCommand.test.js +2 -0
  27. package/lib/cjs/internal/app-binder/command/RenameContactCommand.test.js.map +7 -0
  28. package/lib/cjs/internal/app-binder/device-action/RegisterExternalAddress/RegisterExternalAddressDeviceAction.js +2 -0
  29. package/lib/cjs/internal/app-binder/device-action/RegisterExternalAddress/RegisterExternalAddressDeviceAction.js.map +7 -0
  30. package/lib/cjs/internal/app-binder/device-action/RegisterExternalAddress/RegisterExternalAddressDeviceAction.test.js +2 -0
  31. package/lib/cjs/internal/app-binder/device-action/RegisterExternalAddress/RegisterExternalAddressDeviceAction.test.js.map +7 -0
  32. package/lib/cjs/internal/app-binder/device-action/RegisterExternalAddress/validateRegisterExternalAddressInput.js +2 -0
  33. package/lib/cjs/internal/app-binder/device-action/RegisterExternalAddress/validateRegisterExternalAddressInput.js.map +7 -0
  34. package/lib/cjs/internal/app-binder/device-action/RegisterExternalAddress/validateRegisterExternalAddressInput.test.js +2 -0
  35. package/lib/cjs/internal/app-binder/device-action/RegisterExternalAddress/validateRegisterExternalAddressInput.test.js.map +7 -0
  36. package/lib/cjs/internal/app-binder/device-action/RenameContact/RenameContactDeviceAction.js +2 -0
  37. package/lib/cjs/internal/app-binder/device-action/RenameContact/RenameContactDeviceAction.js.map +7 -0
  38. package/lib/cjs/internal/app-binder/device-action/RenameContact/RenameContactDeviceAction.test.js +2 -0
  39. package/lib/cjs/internal/app-binder/device-action/RenameContact/RenameContactDeviceAction.test.js.map +7 -0
  40. package/lib/cjs/internal/app-binder/device-action/RenameContact/validateRenameContactInput.js +2 -0
  41. package/lib/cjs/internal/app-binder/device-action/RenameContact/validateRenameContactInput.js.map +7 -0
  42. package/lib/cjs/internal/app-binder/device-action/RenameContact/validateRenameContactInput.test.js +2 -0
  43. package/lib/cjs/internal/app-binder/device-action/RenameContact/validateRenameContactInput.test.js.map +7 -0
  44. package/lib/cjs/internal/app-binder/device-action/__test-utils__/makeInternalApi.js +2 -0
  45. package/lib/cjs/internal/app-binder/device-action/__test-utils__/makeInternalApi.js.map +7 -0
  46. package/lib/cjs/internal/app-binder/device-action/__test-utils__/setupGoToDashboardDAMock.js +2 -0
  47. package/lib/cjs/internal/app-binder/device-action/__test-utils__/setupGoToDashboardDAMock.js.map +7 -0
  48. package/lib/cjs/internal/app-binder/device-action/__test-utils__/setupOpenAppDAMock.js +2 -0
  49. package/lib/cjs/internal/app-binder/device-action/__test-utils__/setupOpenAppDAMock.js.map +7 -0
  50. package/lib/cjs/internal/app-binder/device-action/__test-utils__/setupWaitForAppAndVersionDAMock.js +2 -0
  51. package/lib/cjs/internal/app-binder/device-action/__test-utils__/setupWaitForAppAndVersionDAMock.js.map +7 -0
  52. package/lib/cjs/internal/app-binder/device-action/__test-utils__/testDeviceActionStates.js +2 -0
  53. package/lib/cjs/internal/app-binder/device-action/__test-utils__/testDeviceActionStates.js.map +7 -0
  54. package/lib/cjs/internal/app-binder/isContactsSupportedForSession.js +1 -1
  55. package/lib/cjs/internal/app-binder/isContactsSupportedForSession.js.map +3 -3
  56. package/lib/cjs/internal/app-binder/isContactsSupportedForSession.test.js +1 -1
  57. package/lib/cjs/internal/app-binder/isContactsSupportedForSession.test.js.map +3 -3
  58. package/lib/cjs/internal/app-binder/model/contactsConstants.js +2 -0
  59. package/lib/cjs/internal/app-binder/model/contactsConstants.js.map +7 -0
  60. package/lib/cjs/internal/app-binder/model/contactsErrors.js +2 -0
  61. package/lib/cjs/internal/app-binder/model/contactsErrors.js.map +7 -0
  62. package/lib/cjs/internal/app-binder/model/contactsValidation.js +2 -0
  63. package/lib/cjs/internal/app-binder/model/contactsValidation.js.map +7 -0
  64. package/lib/cjs/internal/app-binder/model/contactsValidation.test.js +2 -0
  65. package/lib/cjs/internal/app-binder/model/contactsValidation.test.js.map +7 -0
  66. package/lib/cjs/internal/app-binder/services/contactsTlvSerializer.js +2 -0
  67. package/lib/cjs/internal/app-binder/services/contactsTlvSerializer.js.map +7 -0
  68. package/lib/cjs/internal/app-binder/services/contactsTlvSerializer.test.js +2 -0
  69. package/lib/cjs/internal/app-binder/services/contactsTlvSerializer.test.js.map +7 -0
  70. package/lib/cjs/internal/app-binder/services/sendFramedContactsPayload.js +2 -0
  71. package/lib/cjs/internal/app-binder/services/sendFramedContactsPayload.js.map +7 -0
  72. package/lib/cjs/internal/app-binder/services/sendFramedContactsPayload.test.js +2 -0
  73. package/lib/cjs/internal/app-binder/services/sendFramedContactsPayload.test.js.map +7 -0
  74. package/lib/cjs/internal/app-binder/task/SendRegisterIdentityTask.js +2 -0
  75. package/lib/cjs/internal/app-binder/task/SendRegisterIdentityTask.js.map +7 -0
  76. package/lib/cjs/internal/app-binder/task/SendRegisterIdentityTask.test.js +2 -0
  77. package/lib/cjs/internal/app-binder/task/SendRegisterIdentityTask.test.js.map +7 -0
  78. package/lib/cjs/internal/app-binder/task/SendRenameContactTask.js +2 -0
  79. package/lib/cjs/internal/app-binder/task/SendRenameContactTask.js.map +7 -0
  80. package/lib/cjs/internal/app-binder/task/SendRenameContactTask.test.js +2 -0
  81. package/lib/cjs/internal/app-binder/task/SendRenameContactTask.test.js.map +7 -0
  82. package/lib/cjs/internal/di.js +1 -1
  83. package/lib/cjs/internal/di.js.map +3 -3
  84. package/lib/cjs/internal/di.test.js +1 -1
  85. package/lib/cjs/internal/di.test.js.map +3 -3
  86. package/lib/cjs/internal/use-cases/RegisterExternalAddressUseCase.js +2 -0
  87. package/lib/cjs/internal/use-cases/RegisterExternalAddressUseCase.js.map +7 -0
  88. package/lib/cjs/internal/use-cases/RegisterExternalAddressUseCase.test.js +2 -0
  89. package/lib/cjs/internal/use-cases/RegisterExternalAddressUseCase.test.js.map +7 -0
  90. package/lib/cjs/internal/use-cases/RenameContactUseCase.js +2 -0
  91. package/lib/cjs/internal/use-cases/RenameContactUseCase.js.map +7 -0
  92. package/lib/cjs/internal/use-cases/RenameContactUseCase.test.js +2 -0
  93. package/lib/cjs/internal/use-cases/RenameContactUseCase.test.js.map +7 -0
  94. package/lib/cjs/internal/use-cases/di/useCaseModule.js +2 -0
  95. package/lib/cjs/internal/use-cases/di/useCaseModule.js.map +7 -0
  96. package/lib/cjs/internal/use-cases/di/useCaseTypes.js +2 -0
  97. package/lib/cjs/internal/use-cases/di/useCaseTypes.js.map +7 -0
  98. package/lib/cjs/package.json +2 -1
  99. package/lib/esm/api/app-binder/RegisterExternalAddressDeviceActionTypes.js +1 -0
  100. package/lib/esm/api/app-binder/RegisterExternalAddressDeviceActionTypes.js.map +7 -0
  101. package/lib/esm/api/app-binder/RenameContactDeviceActionTypes.js +1 -0
  102. package/lib/esm/api/app-binder/RenameContactDeviceActionTypes.js.map +7 -0
  103. package/lib/esm/api/index.js +1 -1
  104. package/lib/esm/api/index.js.map +2 -2
  105. package/lib/esm/api/model/RegisterExternalAddress.js +1 -0
  106. package/lib/esm/api/model/RegisterExternalAddress.js.map +7 -0
  107. package/lib/esm/api/model/RenameContact.js +1 -0
  108. package/lib/esm/api/model/RenameContact.js.map +7 -0
  109. package/lib/esm/internal/DefaultContactsManager.js +1 -1
  110. package/lib/esm/internal/DefaultContactsManager.js.map +3 -3
  111. package/lib/esm/internal/DefaultContactsManager.test.js +2 -0
  112. package/lib/esm/internal/DefaultContactsManager.test.js.map +7 -0
  113. package/lib/esm/internal/app-binder/ContactsAppBinder.js +1 -1
  114. package/lib/esm/internal/app-binder/ContactsAppBinder.js.map +3 -3
  115. package/lib/esm/internal/app-binder/command/RegisterIdentityCommand.js +2 -0
  116. package/lib/esm/internal/app-binder/command/RegisterIdentityCommand.js.map +7 -0
  117. package/lib/esm/internal/app-binder/command/RegisterIdentityCommand.test.js +2 -0
  118. package/lib/esm/internal/app-binder/command/RegisterIdentityCommand.test.js.map +7 -0
  119. package/lib/esm/internal/app-binder/command/RenameContactCommand.js +2 -0
  120. package/lib/esm/internal/app-binder/command/RenameContactCommand.js.map +7 -0
  121. package/lib/esm/internal/app-binder/command/RenameContactCommand.test.js +2 -0
  122. package/lib/esm/internal/app-binder/command/RenameContactCommand.test.js.map +7 -0
  123. package/lib/esm/internal/app-binder/device-action/RegisterExternalAddress/RegisterExternalAddressDeviceAction.js +2 -0
  124. package/lib/esm/internal/app-binder/device-action/RegisterExternalAddress/RegisterExternalAddressDeviceAction.js.map +7 -0
  125. package/lib/esm/internal/app-binder/device-action/RegisterExternalAddress/RegisterExternalAddressDeviceAction.test.js +2 -0
  126. package/lib/esm/internal/app-binder/device-action/RegisterExternalAddress/RegisterExternalAddressDeviceAction.test.js.map +7 -0
  127. package/lib/esm/internal/app-binder/device-action/RegisterExternalAddress/validateRegisterExternalAddressInput.js +2 -0
  128. package/lib/esm/internal/app-binder/device-action/RegisterExternalAddress/validateRegisterExternalAddressInput.js.map +7 -0
  129. package/lib/esm/internal/app-binder/device-action/RegisterExternalAddress/validateRegisterExternalAddressInput.test.js +2 -0
  130. package/lib/esm/internal/app-binder/device-action/RegisterExternalAddress/validateRegisterExternalAddressInput.test.js.map +7 -0
  131. package/lib/esm/internal/app-binder/device-action/RenameContact/RenameContactDeviceAction.js +2 -0
  132. package/lib/esm/internal/app-binder/device-action/RenameContact/RenameContactDeviceAction.js.map +7 -0
  133. package/lib/esm/internal/app-binder/device-action/RenameContact/RenameContactDeviceAction.test.js +2 -0
  134. package/lib/esm/internal/app-binder/device-action/RenameContact/RenameContactDeviceAction.test.js.map +7 -0
  135. package/lib/esm/internal/app-binder/device-action/RenameContact/validateRenameContactInput.js +2 -0
  136. package/lib/esm/internal/app-binder/device-action/RenameContact/validateRenameContactInput.js.map +7 -0
  137. package/lib/esm/internal/app-binder/device-action/RenameContact/validateRenameContactInput.test.js +2 -0
  138. package/lib/esm/internal/app-binder/device-action/RenameContact/validateRenameContactInput.test.js.map +7 -0
  139. package/lib/esm/internal/app-binder/device-action/__test-utils__/makeInternalApi.js +2 -0
  140. package/lib/esm/internal/app-binder/device-action/__test-utils__/makeInternalApi.js.map +7 -0
  141. package/lib/esm/internal/app-binder/device-action/__test-utils__/setupGoToDashboardDAMock.js +2 -0
  142. package/lib/esm/internal/app-binder/device-action/__test-utils__/setupGoToDashboardDAMock.js.map +7 -0
  143. package/lib/esm/internal/app-binder/device-action/__test-utils__/setupOpenAppDAMock.js +2 -0
  144. package/lib/esm/internal/app-binder/device-action/__test-utils__/setupOpenAppDAMock.js.map +7 -0
  145. package/lib/esm/internal/app-binder/device-action/__test-utils__/setupWaitForAppAndVersionDAMock.js +2 -0
  146. package/lib/esm/internal/app-binder/device-action/__test-utils__/setupWaitForAppAndVersionDAMock.js.map +7 -0
  147. package/lib/esm/internal/app-binder/device-action/__test-utils__/testDeviceActionStates.js +2 -0
  148. package/lib/esm/internal/app-binder/device-action/__test-utils__/testDeviceActionStates.js.map +7 -0
  149. package/lib/esm/internal/app-binder/isContactsSupportedForSession.js +1 -1
  150. package/lib/esm/internal/app-binder/isContactsSupportedForSession.js.map +3 -3
  151. package/lib/esm/internal/app-binder/isContactsSupportedForSession.test.js +1 -1
  152. package/lib/esm/internal/app-binder/isContactsSupportedForSession.test.js.map +3 -3
  153. package/lib/esm/internal/app-binder/model/contactsConstants.js +2 -0
  154. package/lib/esm/internal/app-binder/model/contactsConstants.js.map +7 -0
  155. package/lib/esm/internal/app-binder/model/contactsErrors.js +2 -0
  156. package/lib/esm/internal/app-binder/model/contactsErrors.js.map +7 -0
  157. package/lib/esm/internal/app-binder/model/contactsValidation.js +2 -0
  158. package/lib/esm/internal/app-binder/model/contactsValidation.js.map +7 -0
  159. package/lib/esm/internal/app-binder/model/contactsValidation.test.js +2 -0
  160. package/lib/esm/internal/app-binder/model/contactsValidation.test.js.map +7 -0
  161. package/lib/esm/internal/app-binder/services/contactsTlvSerializer.js +2 -0
  162. package/lib/esm/internal/app-binder/services/contactsTlvSerializer.js.map +7 -0
  163. package/lib/esm/internal/app-binder/services/contactsTlvSerializer.test.js +2 -0
  164. package/lib/esm/internal/app-binder/services/contactsTlvSerializer.test.js.map +7 -0
  165. package/lib/esm/internal/app-binder/services/sendFramedContactsPayload.js +2 -0
  166. package/lib/esm/internal/app-binder/services/sendFramedContactsPayload.js.map +7 -0
  167. package/lib/esm/internal/app-binder/services/sendFramedContactsPayload.test.js +2 -0
  168. package/lib/esm/internal/app-binder/services/sendFramedContactsPayload.test.js.map +7 -0
  169. package/lib/esm/internal/app-binder/task/SendRegisterIdentityTask.js +2 -0
  170. package/lib/esm/internal/app-binder/task/SendRegisterIdentityTask.js.map +7 -0
  171. package/lib/esm/internal/app-binder/task/SendRegisterIdentityTask.test.js +2 -0
  172. package/lib/esm/internal/app-binder/task/SendRegisterIdentityTask.test.js.map +7 -0
  173. package/lib/esm/internal/app-binder/task/SendRenameContactTask.js +2 -0
  174. package/lib/esm/internal/app-binder/task/SendRenameContactTask.js.map +7 -0
  175. package/lib/esm/internal/app-binder/task/SendRenameContactTask.test.js +2 -0
  176. package/lib/esm/internal/app-binder/task/SendRenameContactTask.test.js.map +7 -0
  177. package/lib/esm/internal/di.js +1 -1
  178. package/lib/esm/internal/di.js.map +3 -3
  179. package/lib/esm/internal/di.test.js +1 -1
  180. package/lib/esm/internal/di.test.js.map +3 -3
  181. package/lib/esm/internal/use-cases/RegisterExternalAddressUseCase.js +2 -0
  182. package/lib/esm/internal/use-cases/RegisterExternalAddressUseCase.js.map +7 -0
  183. package/lib/esm/internal/use-cases/RegisterExternalAddressUseCase.test.js +2 -0
  184. package/lib/esm/internal/use-cases/RegisterExternalAddressUseCase.test.js.map +7 -0
  185. package/lib/esm/internal/use-cases/RenameContactUseCase.js +2 -0
  186. package/lib/esm/internal/use-cases/RenameContactUseCase.js.map +7 -0
  187. package/lib/esm/internal/use-cases/RenameContactUseCase.test.js +2 -0
  188. package/lib/esm/internal/use-cases/RenameContactUseCase.test.js.map +7 -0
  189. package/lib/esm/internal/use-cases/di/useCaseModule.js +2 -0
  190. package/lib/esm/internal/use-cases/di/useCaseModule.js.map +7 -0
  191. package/lib/esm/internal/use-cases/di/useCaseTypes.js +2 -0
  192. package/lib/esm/internal/use-cases/di/useCaseTypes.js.map +7 -0
  193. package/lib/esm/package.json +2 -1
  194. package/lib/types/api/ContactsManager.d.ts +23 -5
  195. package/lib/types/api/ContactsManager.d.ts.map +1 -1
  196. package/lib/types/api/app-binder/RegisterExternalAddressDeviceActionTypes.d.ts +30 -0
  197. package/lib/types/api/app-binder/RegisterExternalAddressDeviceActionTypes.d.ts.map +1 -0
  198. package/lib/types/api/app-binder/RenameContactDeviceActionTypes.d.ts +25 -0
  199. package/lib/types/api/app-binder/RenameContactDeviceActionTypes.d.ts.map +1 -0
  200. package/lib/types/api/index.d.ts +4 -0
  201. package/lib/types/api/index.d.ts.map +1 -1
  202. package/lib/types/api/model/RegisterExternalAddress.d.ts +50 -0
  203. package/lib/types/api/model/RegisterExternalAddress.d.ts.map +1 -0
  204. package/lib/types/api/model/RenameContact.d.ts +39 -0
  205. package/lib/types/api/model/RenameContact.d.ts.map +1 -0
  206. package/lib/types/internal/DefaultContactsManager.d.ts +8 -2
  207. package/lib/types/internal/DefaultContactsManager.d.ts.map +1 -1
  208. package/lib/types/internal/DefaultContactsManager.test.d.ts +2 -0
  209. package/lib/types/internal/DefaultContactsManager.test.d.ts.map +1 -0
  210. package/lib/types/internal/app-binder/ContactsAppBinder.d.ts +7 -3
  211. package/lib/types/internal/app-binder/ContactsAppBinder.d.ts.map +1 -1
  212. package/lib/types/internal/app-binder/command/RegisterIdentityCommand.d.ts +30 -0
  213. package/lib/types/internal/app-binder/command/RegisterIdentityCommand.d.ts.map +1 -0
  214. package/lib/types/internal/app-binder/command/RegisterIdentityCommand.test.d.ts +2 -0
  215. package/lib/types/internal/app-binder/command/RegisterIdentityCommand.test.d.ts.map +1 -0
  216. package/lib/types/internal/app-binder/command/RenameContactCommand.d.ts +25 -0
  217. package/lib/types/internal/app-binder/command/RenameContactCommand.d.ts.map +1 -0
  218. package/lib/types/internal/app-binder/command/RenameContactCommand.test.d.ts +2 -0
  219. package/lib/types/internal/app-binder/command/RenameContactCommand.test.d.ts.map +1 -0
  220. package/lib/types/internal/app-binder/device-action/RegisterExternalAddress/RegisterExternalAddressDeviceAction.d.ts +14 -0
  221. package/lib/types/internal/app-binder/device-action/RegisterExternalAddress/RegisterExternalAddressDeviceAction.d.ts.map +1 -0
  222. package/lib/types/internal/app-binder/device-action/RegisterExternalAddress/RegisterExternalAddressDeviceAction.test.d.ts +2 -0
  223. package/lib/types/internal/app-binder/device-action/RegisterExternalAddress/RegisterExternalAddressDeviceAction.test.d.ts.map +1 -0
  224. package/lib/types/internal/app-binder/device-action/RegisterExternalAddress/validateRegisterExternalAddressInput.d.ts +12 -0
  225. package/lib/types/internal/app-binder/device-action/RegisterExternalAddress/validateRegisterExternalAddressInput.d.ts.map +1 -0
  226. package/lib/types/internal/app-binder/device-action/RegisterExternalAddress/validateRegisterExternalAddressInput.test.d.ts +2 -0
  227. package/lib/types/internal/app-binder/device-action/RegisterExternalAddress/validateRegisterExternalAddressInput.test.d.ts.map +1 -0
  228. package/lib/types/internal/app-binder/device-action/RenameContact/RenameContactDeviceAction.d.ts +13 -0
  229. package/lib/types/internal/app-binder/device-action/RenameContact/RenameContactDeviceAction.d.ts.map +1 -0
  230. package/lib/types/internal/app-binder/device-action/RenameContact/RenameContactDeviceAction.test.d.ts +2 -0
  231. package/lib/types/internal/app-binder/device-action/RenameContact/RenameContactDeviceAction.test.d.ts.map +1 -0
  232. package/lib/types/internal/app-binder/device-action/RenameContact/validateRenameContactInput.d.ts +12 -0
  233. package/lib/types/internal/app-binder/device-action/RenameContact/validateRenameContactInput.d.ts.map +1 -0
  234. package/lib/types/internal/app-binder/device-action/RenameContact/validateRenameContactInput.test.d.ts +2 -0
  235. package/lib/types/internal/app-binder/device-action/RenameContact/validateRenameContactInput.test.d.ts.map +1 -0
  236. package/lib/types/internal/app-binder/device-action/__test-utils__/makeInternalApi.d.ts +4 -0
  237. package/lib/types/internal/app-binder/device-action/__test-utils__/makeInternalApi.d.ts.map +1 -0
  238. package/lib/types/internal/app-binder/device-action/__test-utils__/setupGoToDashboardDAMock.d.ts +12 -0
  239. package/lib/types/internal/app-binder/device-action/__test-utils__/setupGoToDashboardDAMock.d.ts.map +1 -0
  240. package/lib/types/internal/app-binder/device-action/__test-utils__/setupOpenAppDAMock.d.ts +2 -0
  241. package/lib/types/internal/app-binder/device-action/__test-utils__/setupOpenAppDAMock.d.ts.map +1 -0
  242. package/lib/types/internal/app-binder/device-action/__test-utils__/setupWaitForAppAndVersionDAMock.d.ts +17 -0
  243. package/lib/types/internal/app-binder/device-action/__test-utils__/setupWaitForAppAndVersionDAMock.d.ts.map +1 -0
  244. package/lib/types/internal/app-binder/device-action/__test-utils__/testDeviceActionStates.d.ts +15 -0
  245. package/lib/types/internal/app-binder/device-action/__test-utils__/testDeviceActionStates.d.ts.map +1 -0
  246. package/lib/types/internal/app-binder/isContactsSupportedForSession.d.ts +31 -8
  247. package/lib/types/internal/app-binder/isContactsSupportedForSession.d.ts.map +1 -1
  248. package/lib/types/internal/app-binder/model/contactsConstants.d.ts +39 -0
  249. package/lib/types/internal/app-binder/model/contactsConstants.d.ts.map +1 -0
  250. package/lib/types/internal/app-binder/model/contactsErrors.d.ts +30 -0
  251. package/lib/types/internal/app-binder/model/contactsErrors.d.ts.map +1 -0
  252. package/lib/types/internal/app-binder/model/contactsValidation.d.ts +53 -0
  253. package/lib/types/internal/app-binder/model/contactsValidation.d.ts.map +1 -0
  254. package/lib/types/internal/app-binder/model/contactsValidation.test.d.ts +2 -0
  255. package/lib/types/internal/app-binder/model/contactsValidation.test.d.ts.map +1 -0
  256. package/lib/types/internal/app-binder/services/contactsTlvSerializer.d.ts +33 -0
  257. package/lib/types/internal/app-binder/services/contactsTlvSerializer.d.ts.map +1 -0
  258. package/lib/types/internal/app-binder/services/contactsTlvSerializer.test.d.ts +2 -0
  259. package/lib/types/internal/app-binder/services/contactsTlvSerializer.test.d.ts.map +1 -0
  260. package/lib/types/internal/app-binder/services/sendFramedContactsPayload.d.ts +14 -0
  261. package/lib/types/internal/app-binder/services/sendFramedContactsPayload.d.ts.map +1 -0
  262. package/lib/types/internal/app-binder/services/sendFramedContactsPayload.test.d.ts +2 -0
  263. package/lib/types/internal/app-binder/services/sendFramedContactsPayload.test.d.ts.map +1 -0
  264. package/lib/types/internal/app-binder/task/SendRegisterIdentityTask.d.ts +25 -0
  265. package/lib/types/internal/app-binder/task/SendRegisterIdentityTask.d.ts.map +1 -0
  266. package/lib/types/internal/app-binder/task/SendRegisterIdentityTask.test.d.ts +2 -0
  267. package/lib/types/internal/app-binder/task/SendRegisterIdentityTask.test.d.ts.map +1 -0
  268. package/lib/types/internal/app-binder/task/SendRenameContactTask.d.ts +20 -0
  269. package/lib/types/internal/app-binder/task/SendRenameContactTask.d.ts.map +1 -0
  270. package/lib/types/internal/app-binder/task/SendRenameContactTask.test.d.ts +2 -0
  271. package/lib/types/internal/app-binder/task/SendRenameContactTask.test.d.ts.map +1 -0
  272. package/lib/types/internal/di.d.ts.map +1 -1
  273. package/lib/types/internal/use-cases/RegisterExternalAddressUseCase.d.ts +17 -0
  274. package/lib/types/internal/use-cases/RegisterExternalAddressUseCase.d.ts.map +1 -0
  275. package/lib/types/internal/use-cases/RegisterExternalAddressUseCase.test.d.ts +2 -0
  276. package/lib/types/internal/use-cases/RegisterExternalAddressUseCase.test.d.ts.map +1 -0
  277. package/lib/types/internal/use-cases/RenameContactUseCase.d.ts +19 -0
  278. package/lib/types/internal/use-cases/RenameContactUseCase.d.ts.map +1 -0
  279. package/lib/types/internal/use-cases/RenameContactUseCase.test.d.ts +2 -0
  280. package/lib/types/internal/use-cases/RenameContactUseCase.test.d.ts.map +1 -0
  281. package/lib/types/internal/use-cases/di/useCaseModule.d.ts +3 -0
  282. package/lib/types/internal/use-cases/di/useCaseModule.d.ts.map +1 -0
  283. package/lib/types/internal/use-cases/di/useCaseTypes.d.ts +5 -0
  284. package/lib/types/internal/use-cases/di/useCaseTypes.d.ts.map +1 -0
  285. package/lib/types/tsconfig.prod.tsbuildinfo +1 -1
  286. package/package.json +7 -6
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/internal/app-binder/task/SendRenameContactTask.test.ts"],
4
+ "sourcesContent": ["// Validates that the TLV serializer + tag ordering + chunk framing produce the\n// expected wire bytes for the Rename Contact (EDIT CONTACT NAME) op. The framed\n// chunk = 2-byte BE total length + TLV. Tag order: STRUCT_TYPE, STRUCT_VERSION,\n// CONTACT_NAME (new), PREVIOUS_CONTACT_NAME (old), GROUP_HANDLE, DERIVATION_PATH,\n// HMAC_PROOF \u2014 with tags >= 0x80 (0xf0/0xf3/0xf6) encoded as the 2-byte DER form\n// [0x81, tag].\nimport {\n CommandResultFactory,\n type InternalApi,\n InvalidStatusWordError,\n} from \"@ledgerhq/device-management-kit\";\n\nimport { RenameContactCommand } from \"@internal/app-binder/command/RenameContactCommand\";\n\nimport { SendRenameContactTask } from \"./SendRenameContactTask\";\n\nfunction hexToBytes(hex: string): Uint8Array {\n const out = new Uint8Array(hex.length / 2);\n for (let i = 0; i < hex.length; i += 2) {\n out[i / 2] = parseInt(hex.slice(i, i + 2), 16);\n }\n return out;\n}\n\nconst GROUP_HANDLE = hexToBytes(\"cc\".repeat(64));\nconst HMAC_PROOF_IN = hexToBytes(\"dd\".repeat(32));\nconst HMAC_PROOF_OUT = hexToBytes(\"ee\".repeat(32));\n\n// Framed chunk = \"00 90\" (2-byte BE total TLV length = 144) + TLV:\n// 01 01 2e STRUCT_TYPE = EDIT_CONTACT_NAME (0x2e)\n// 02 01 01 STRUCT_VERSION = 1\n// 81 f0 03 \"Bob\" CONTACT_NAME (new), tag 0xf0 -> [81 f0]\n// 81 f3 05 \"Alice\" PREVIOUS_CONTACT_NAME (old), tag 0xf3 -> [81 f3]\n// 81 f6 40 <64x cc> GROUP_HANDLE, tag 0xf6 -> [81 f6]\n// 69 15 05 <5x path> DERIVATION_PATH (0x69), m/44'/60'/0'/0/0\n// 29 20 <32x dd> HMAC_PROOF\nconst DERIVATION_PATH_TLV = \"6915058000002c8000003c800000000000000000000000\";\nconst FRAMED_CHUNK = hexToBytes(\n \"0090\" +\n \"01012e\" +\n \"020101\" +\n \"81f003426f62\" +\n \"81f305416c696365\" +\n \"81f640\" +\n \"cc\".repeat(64) +\n DERIVATION_PATH_TLV +\n \"2920\" +\n \"dd\".repeat(32),\n);\n\nfunction makeApiMock(): InternalApi & {\n sendCommand: ReturnType<typeof vi.fn>;\n} {\n return { sendCommand: vi.fn() } as unknown as InternalApi & {\n sendCommand: ReturnType<typeof vi.fn>;\n };\n}\n\ndescribe(\"SendRenameContactTask\", () => {\n it(\"assembles the rename framed chunk and dispatches RenameContactCommand\", async () => {\n const api = makeApiMock();\n api.sendCommand.mockResolvedValueOnce(\n CommandResultFactory({ data: { hmacProof: HMAC_PROOF_OUT } }),\n );\n\n const result = await new SendRenameContactTask(api, {\n previousContactName: \"Alice\",\n newContactName: \"Bob\",\n groupHandle: GROUP_HANDLE,\n hmacProof: HMAC_PROOF_IN,\n }).run();\n\n expect(api.sendCommand.mock.calls).toHaveLength(1);\n expect(api.sendCommand.mock.calls[0]![0]).toStrictEqual(\n new RenameContactCommand({ data: FRAMED_CHUNK, p2: 0x00 }),\n );\n expect(result).toStrictEqual(\n CommandResultFactory({ data: { hmacProof: HMAC_PROOF_OUT } }),\n );\n });\n\n it(\"emits the DERIVATION_PATH tag immediately before HMAC_PROOF\", async () => {\n const api = makeApiMock();\n api.sendCommand.mockResolvedValueOnce(\n CommandResultFactory({ data: { hmacProof: HMAC_PROOF_OUT } }),\n );\n\n await new SendRenameContactTask(api, {\n previousContactName: \"Alice\",\n newContactName: \"Bob\",\n groupHandle: GROUP_HANDLE,\n hmacProof: HMAC_PROOF_IN,\n }).run();\n\n // The Ethereum app requires DERIVATION_PATH (0x69); it sits immediately\n // before HMAC_PROOF (0x29), matching Register Identity.\n const command = api.sendCommand.mock.calls[0]![0] as RenameContactCommand;\n const framedHex = Buffer.from(command.args.data).toString(\"hex\");\n expect(\n framedHex.endsWith(DERIVATION_PATH_TLV + \"2920\" + \"dd\".repeat(32)),\n ).toBe(true);\n });\n\n it(\"propagates command-level errors\", async () => {\n const api = makeApiMock();\n api.sendCommand.mockResolvedValueOnce(\n CommandResultFactory({\n error: new InvalidStatusWordError(\"user cancelled\"),\n }),\n );\n\n const result = await new SendRenameContactTask(api, {\n previousContactName: \"Alice\",\n newContactName: \"Bob\",\n groupHandle: GROUP_HANDLE,\n hmacProof: HMAC_PROOF_IN,\n }).run();\n\n expect(result).toStrictEqual(\n CommandResultFactory({\n error: new InvalidStatusWordError(\"user cancelled\"),\n }),\n );\n });\n\n it(\"returns InvalidStatusWordError when the final response carries no hmac_name\", async () => {\n const api = makeApiMock();\n api.sendCommand.mockResolvedValueOnce(CommandResultFactory({ data: {} }));\n\n const result = await new SendRenameContactTask(api, {\n previousContactName: \"Alice\",\n newContactName: \"Bob\",\n groupHandle: GROUP_HANDLE,\n hmacProof: HMAC_PROOF_IN,\n }).run();\n\n expect(result.status).not.toBe(undefined);\n if (\"error\" in result) {\n expect(result.error).toBeInstanceOf(InvalidStatusWordError);\n }\n });\n});\n"],
5
+ "mappings": "AAMA,OACE,wBAAAA,EAEA,0BAAAC,MACK,kCAEP,OAAS,wBAAAC,MAA4B,oDAErC,OAAS,yBAAAC,MAA6B,0BAEtC,SAASC,EAAWC,EAAyB,CAC3C,MAAMC,EAAM,IAAI,WAAWD,EAAI,OAAS,CAAC,EACzC,QAASE,EAAI,EAAGA,EAAIF,EAAI,OAAQE,GAAK,EACnCD,EAAIC,EAAI,CAAC,EAAI,SAASF,EAAI,MAAME,EAAGA,EAAI,CAAC,EAAG,EAAE,EAE/C,OAAOD,CACT,CAEA,MAAME,EAAeJ,EAAW,KAAK,OAAO,EAAE,CAAC,EACzCK,EAAgBL,EAAW,KAAK,OAAO,EAAE,CAAC,EAC1CM,EAAiBN,EAAW,KAAK,OAAO,EAAE,CAAC,EAU3CO,EAAsB,iDACtBC,EAAeR,EACnB,qDAME,KAAK,OAAO,EAAE,EACdO,EACA,OACA,KAAK,OAAO,EAAE,CAClB,EAEA,SAASE,GAEP,CACA,MAAO,CAAE,YAAa,GAAG,GAAG,CAAE,CAGhC,CAEA,SAAS,wBAAyB,IAAM,CACtC,GAAG,wEAAyE,SAAY,CACtF,MAAMC,EAAMD,EAAY,EACxBC,EAAI,YAAY,sBACdd,EAAqB,CAAE,KAAM,CAAE,UAAWU,CAAe,CAAE,CAAC,CAC9D,EAEA,MAAMK,EAAS,MAAM,IAAIZ,EAAsBW,EAAK,CAClD,oBAAqB,QACrB,eAAgB,MAChB,YAAaN,EACb,UAAWC,CACb,CAAC,EAAE,IAAI,EAEP,OAAOK,EAAI,YAAY,KAAK,KAAK,EAAE,aAAa,CAAC,EACjD,OAAOA,EAAI,YAAY,KAAK,MAAM,CAAC,EAAG,CAAC,CAAC,EAAE,cACxC,IAAIZ,EAAqB,CAAE,KAAMU,EAAc,GAAI,CAAK,CAAC,CAC3D,EACA,OAAOG,CAAM,EAAE,cACbf,EAAqB,CAAE,KAAM,CAAE,UAAWU,CAAe,CAAE,CAAC,CAC9D,CACF,CAAC,EAED,GAAG,8DAA+D,SAAY,CAC5E,MAAMI,EAAMD,EAAY,EACxBC,EAAI,YAAY,sBACdd,EAAqB,CAAE,KAAM,CAAE,UAAWU,CAAe,CAAE,CAAC,CAC9D,EAEA,MAAM,IAAIP,EAAsBW,EAAK,CACnC,oBAAqB,QACrB,eAAgB,MAChB,YAAaN,EACb,UAAWC,CACb,CAAC,EAAE,IAAI,EAIP,MAAMO,EAAUF,EAAI,YAAY,KAAK,MAAM,CAAC,EAAG,CAAC,EAC1CG,EAAY,OAAO,KAAKD,EAAQ,KAAK,IAAI,EAAE,SAAS,KAAK,EAC/D,OACEC,EAAU,SAASN,EAAsB,OAAS,KAAK,OAAO,EAAE,CAAC,CACnE,EAAE,KAAK,EAAI,CACb,CAAC,EAED,GAAG,kCAAmC,SAAY,CAChD,MAAMG,EAAMD,EAAY,EACxBC,EAAI,YAAY,sBACdd,EAAqB,CACnB,MAAO,IAAIC,EAAuB,gBAAgB,CACpD,CAAC,CACH,EAEA,MAAMc,EAAS,MAAM,IAAIZ,EAAsBW,EAAK,CAClD,oBAAqB,QACrB,eAAgB,MAChB,YAAaN,EACb,UAAWC,CACb,CAAC,EAAE,IAAI,EAEP,OAAOM,CAAM,EAAE,cACbf,EAAqB,CACnB,MAAO,IAAIC,EAAuB,gBAAgB,CACpD,CAAC,CACH,CACF,CAAC,EAED,GAAG,8EAA+E,SAAY,CAC5F,MAAMa,EAAMD,EAAY,EACxBC,EAAI,YAAY,sBAAsBd,EAAqB,CAAE,KAAM,CAAC,CAAE,CAAC,CAAC,EAExE,MAAMe,EAAS,MAAM,IAAIZ,EAAsBW,EAAK,CAClD,oBAAqB,QACrB,eAAgB,MAChB,YAAaN,EACb,UAAWC,CACb,CAAC,EAAE,IAAI,EAEP,OAAOM,EAAO,MAAM,EAAE,IAAI,KAAK,MAAS,EACpC,UAAWA,GACb,OAAOA,EAAO,KAAK,EAAE,eAAed,CAAsB,CAE9D,CAAC,CACH,CAAC",
6
+ "names": ["CommandResultFactory", "InvalidStatusWordError", "RenameContactCommand", "SendRenameContactTask", "hexToBytes", "hex", "out", "i", "GROUP_HANDLE", "HMAC_PROOF_IN", "HMAC_PROOF_OUT", "DERIVATION_PATH_TLV", "FRAMED_CHUNK", "makeApiMock", "api", "result", "command", "framedHex"]
7
+ }
@@ -1,2 +1,2 @@
1
- import{Container as a}from"inversify";import{appBinderModuleFactory as r}from"./app-binder/di/appBinderModule";import{externalTypes as n}from"./externalTypes";const d=({dmk:t,sessionId:o,appName:i})=>{const e=new a;return e.bind(n.Dmk).toConstantValue(t),e.bind(n.SessionId).toConstantValue(o),e.bind(n.AppName).toConstantValue(i),e.loadSync(r()),e};export{d as makeContainer};
1
+ import{Container as i}from"inversify";import{appBinderModuleFactory as r}from"./app-binder/di/appBinderModule";import{externalTypes as n}from"./externalTypes";import{useCaseModuleFactory as s}from"./use-cases/di/useCaseModule";const l=({dmk:o,sessionId:t,appName:a})=>{const e=new i;return e.bind(n.Dmk).toConstantValue(o),e.bind(n.SessionId).toConstantValue(t),e.bind(n.AppName).toConstantValue(a),e.loadSync(r()),e.loadSync(s()),e};export{l as makeContainer};
2
2
  //# sourceMappingURL=di.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/internal/di.ts"],
4
- "sourcesContent": ["import {\n type DeviceManagementKit,\n type DeviceSessionId,\n} from \"@ledgerhq/device-management-kit\";\nimport { Container } from \"inversify\";\n\nimport { appBinderModuleFactory } from \"@internal/app-binder/di/appBinderModule\";\nimport { externalTypes } from \"@internal/externalTypes\";\n\ntype MakeContainerProps = {\n dmk: DeviceManagementKit;\n sessionId: DeviceSessionId;\n appName: string;\n};\n\nexport const makeContainer = ({\n dmk,\n sessionId,\n appName,\n}: MakeContainerProps) => {\n const container = new Container();\n\n container.bind<DeviceManagementKit>(externalTypes.Dmk).toConstantValue(dmk);\n container\n .bind<DeviceSessionId>(externalTypes.SessionId)\n .toConstantValue(sessionId);\n container.bind<string>(externalTypes.AppName).toConstantValue(appName);\n\n container.loadSync(appBinderModuleFactory());\n\n return container;\n};\n"],
5
- "mappings": "AAIA,OAAS,aAAAA,MAAiB,YAE1B,OAAS,0BAAAC,MAA8B,0CACvC,OAAS,iBAAAC,MAAqB,0BAQvB,MAAMC,EAAgB,CAAC,CAC5B,IAAAC,EACA,UAAAC,EACA,QAAAC,CACF,IAA0B,CACxB,MAAMC,EAAY,IAAIP,EAEtB,OAAAO,EAAU,KAA0BL,EAAc,GAAG,EAAE,gBAAgBE,CAAG,EAC1EG,EACG,KAAsBL,EAAc,SAAS,EAC7C,gBAAgBG,CAAS,EAC5BE,EAAU,KAAaL,EAAc,OAAO,EAAE,gBAAgBI,CAAO,EAErEC,EAAU,SAASN,EAAuB,CAAC,EAEpCM,CACT",
6
- "names": ["Container", "appBinderModuleFactory", "externalTypes", "makeContainer", "dmk", "sessionId", "appName", "container"]
4
+ "sourcesContent": ["import {\n type DeviceManagementKit,\n type DeviceSessionId,\n} from \"@ledgerhq/device-management-kit\";\nimport { Container } from \"inversify\";\n\nimport { appBinderModuleFactory } from \"@internal/app-binder/di/appBinderModule\";\nimport { externalTypes } from \"@internal/externalTypes\";\nimport { useCaseModuleFactory } from \"@internal/use-cases/di/useCaseModule\";\n\ntype MakeContainerProps = {\n dmk: DeviceManagementKit;\n sessionId: DeviceSessionId;\n appName: string;\n};\n\nexport const makeContainer = ({\n dmk,\n sessionId,\n appName,\n}: MakeContainerProps) => {\n const container = new Container();\n\n container.bind<DeviceManagementKit>(externalTypes.Dmk).toConstantValue(dmk);\n container\n .bind<DeviceSessionId>(externalTypes.SessionId)\n .toConstantValue(sessionId);\n container.bind<string>(externalTypes.AppName).toConstantValue(appName);\n\n container.loadSync(appBinderModuleFactory());\n container.loadSync(useCaseModuleFactory());\n\n return container;\n};\n"],
5
+ "mappings": "AAIA,OAAS,aAAAA,MAAiB,YAE1B,OAAS,0BAAAC,MAA8B,0CACvC,OAAS,iBAAAC,MAAqB,0BAC9B,OAAS,wBAAAC,MAA4B,uCAQ9B,MAAMC,EAAgB,CAAC,CAC5B,IAAAC,EACA,UAAAC,EACA,QAAAC,CACF,IAA0B,CACxB,MAAMC,EAAY,IAAIR,EAEtB,OAAAQ,EAAU,KAA0BN,EAAc,GAAG,EAAE,gBAAgBG,CAAG,EAC1EG,EACG,KAAsBN,EAAc,SAAS,EAC7C,gBAAgBI,CAAS,EAC5BE,EAAU,KAAaN,EAAc,OAAO,EAAE,gBAAgBK,CAAO,EAErEC,EAAU,SAASP,EAAuB,CAAC,EAC3CO,EAAU,SAASL,EAAqB,CAAC,EAElCK,CACT",
6
+ "names": ["Container", "appBinderModuleFactory", "externalTypes", "useCaseModuleFactory", "makeContainer", "dmk", "sessionId", "appName", "container"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import{ContactsAppBinder as p}from"./app-binder/ContactsAppBinder";import{appBinderTypes as s}from"./app-binder/di/appBinderTypes";import{makeContainer as a}from"./di";import{externalTypes as t}from"./externalTypes";describe("makeContainer",()=>{const n={},o="session-id",i="Ethereum",e=a({dmk:n,sessionId:o,appName:i});it("binds dmk, sessionId and appName as external values",()=>{expect(e.get(t.Dmk)).toBe(n),expect(e.get(t.SessionId)).toBe(o),expect(e.get(t.AppName)).toBe(i)}),it("binds the ContactsAppBinder",()=>{expect(e.get(s.AppBinder)).toBeInstanceOf(p)})});
1
+ import{ContactsAppBinder as i}from"./app-binder/ContactsAppBinder";import{appBinderTypes as r}from"./app-binder/di/appBinderTypes";import{makeContainer as p}from"./di";import{externalTypes as t}from"./externalTypes";import{useCaseTypes as o}from"./use-cases/di/useCaseTypes";import{RegisterExternalAddressUseCase as m}from"./use-cases/RegisterExternalAddressUseCase";import{RenameContactUseCase as c}from"./use-cases/RenameContactUseCase";describe("makeContainer",()=>{const s={},n="session-id",a="Ethereum",e=p({dmk:s,sessionId:n,appName:a});it("binds dmk, sessionId and appName as external values",()=>{expect(e.get(t.Dmk)).toBe(s),expect(e.get(t.SessionId)).toBe(n),expect(e.get(t.AppName)).toBe(a)}),it("binds the ContactsAppBinder",()=>{expect(e.get(r.AppBinder)).toBeInstanceOf(i)}),it("binds the RegisterExternalAddressUseCase",()=>{expect(e.get(o.RegisterExternalAddressUseCase)).toBeInstanceOf(m)}),it("binds the RenameContactUseCase",()=>{expect(e.get(o.RenameContactUseCase)).toBeInstanceOf(c)})});
2
2
  //# sourceMappingURL=di.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/internal/di.test.ts"],
4
- "sourcesContent": ["import { type DeviceManagementKit } from \"@ledgerhq/device-management-kit\";\n\nimport { ContactsAppBinder } from \"@internal/app-binder/ContactsAppBinder\";\nimport { appBinderTypes } from \"@internal/app-binder/di/appBinderTypes\";\nimport { makeContainer } from \"@internal/di\";\nimport { externalTypes } from \"@internal/externalTypes\";\n\ndescribe(\"makeContainer\", () => {\n const dmk = {} as DeviceManagementKit;\n const sessionId = \"session-id\";\n const appName = \"Ethereum\";\n\n const container = makeContainer({ dmk, sessionId, appName });\n\n it(\"binds dmk, sessionId and appName as external values\", () => {\n expect(container.get(externalTypes.Dmk)).toBe(dmk);\n expect(container.get(externalTypes.SessionId)).toBe(sessionId);\n expect(container.get(externalTypes.AppName)).toBe(appName);\n });\n\n it(\"binds the ContactsAppBinder\", () => {\n expect(container.get(appBinderTypes.AppBinder)).toBeInstanceOf(\n ContactsAppBinder,\n );\n });\n});\n"],
5
- "mappings": "AAEA,OAAS,qBAAAA,MAAyB,yCAClC,OAAS,kBAAAC,MAAsB,yCAC/B,OAAS,iBAAAC,MAAqB,eAC9B,OAAS,iBAAAC,MAAqB,0BAE9B,SAAS,gBAAiB,IAAM,CAC9B,MAAMC,EAAM,CAAC,EACPC,EAAY,aACZC,EAAU,WAEVC,EAAYL,EAAc,CAAE,IAAAE,EAAK,UAAAC,EAAW,QAAAC,CAAQ,CAAC,EAE3D,GAAG,sDAAuD,IAAM,CAC9D,OAAOC,EAAU,IAAIJ,EAAc,GAAG,CAAC,EAAE,KAAKC,CAAG,EACjD,OAAOG,EAAU,IAAIJ,EAAc,SAAS,CAAC,EAAE,KAAKE,CAAS,EAC7D,OAAOE,EAAU,IAAIJ,EAAc,OAAO,CAAC,EAAE,KAAKG,CAAO,CAC3D,CAAC,EAED,GAAG,8BAA+B,IAAM,CACtC,OAAOC,EAAU,IAAIN,EAAe,SAAS,CAAC,EAAE,eAC9CD,CACF,CACF,CAAC,CACH,CAAC",
6
- "names": ["ContactsAppBinder", "appBinderTypes", "makeContainer", "externalTypes", "dmk", "sessionId", "appName", "container"]
4
+ "sourcesContent": ["import { type DeviceManagementKit } from \"@ledgerhq/device-management-kit\";\n\nimport { ContactsAppBinder } from \"@internal/app-binder/ContactsAppBinder\";\nimport { appBinderTypes } from \"@internal/app-binder/di/appBinderTypes\";\nimport { makeContainer } from \"@internal/di\";\nimport { externalTypes } from \"@internal/externalTypes\";\nimport { useCaseTypes } from \"@internal/use-cases/di/useCaseTypes\";\nimport { RegisterExternalAddressUseCase } from \"@internal/use-cases/RegisterExternalAddressUseCase\";\nimport { RenameContactUseCase } from \"@internal/use-cases/RenameContactUseCase\";\n\ndescribe(\"makeContainer\", () => {\n const dmk = {} as DeviceManagementKit;\n const sessionId = \"session-id\";\n const appName = \"Ethereum\";\n\n const container = makeContainer({ dmk, sessionId, appName });\n\n it(\"binds dmk, sessionId and appName as external values\", () => {\n expect(container.get(externalTypes.Dmk)).toBe(dmk);\n expect(container.get(externalTypes.SessionId)).toBe(sessionId);\n expect(container.get(externalTypes.AppName)).toBe(appName);\n });\n\n it(\"binds the ContactsAppBinder\", () => {\n expect(container.get(appBinderTypes.AppBinder)).toBeInstanceOf(\n ContactsAppBinder,\n );\n });\n\n it(\"binds the RegisterExternalAddressUseCase\", () => {\n expect(\n container.get(useCaseTypes.RegisterExternalAddressUseCase),\n ).toBeInstanceOf(RegisterExternalAddressUseCase);\n });\n\n it(\"binds the RenameContactUseCase\", () => {\n expect(container.get(useCaseTypes.RenameContactUseCase)).toBeInstanceOf(\n RenameContactUseCase,\n );\n });\n});\n"],
5
+ "mappings": "AAEA,OAAS,qBAAAA,MAAyB,yCAClC,OAAS,kBAAAC,MAAsB,yCAC/B,OAAS,iBAAAC,MAAqB,eAC9B,OAAS,iBAAAC,MAAqB,0BAC9B,OAAS,gBAAAC,MAAoB,sCAC7B,OAAS,kCAAAC,MAAsC,qDAC/C,OAAS,wBAAAC,MAA4B,2CAErC,SAAS,gBAAiB,IAAM,CAC9B,MAAMC,EAAM,CAAC,EACPC,EAAY,aACZC,EAAU,WAEVC,EAAYR,EAAc,CAAE,IAAAK,EAAK,UAAAC,EAAW,QAAAC,CAAQ,CAAC,EAE3D,GAAG,sDAAuD,IAAM,CAC9D,OAAOC,EAAU,IAAIP,EAAc,GAAG,CAAC,EAAE,KAAKI,CAAG,EACjD,OAAOG,EAAU,IAAIP,EAAc,SAAS,CAAC,EAAE,KAAKK,CAAS,EAC7D,OAAOE,EAAU,IAAIP,EAAc,OAAO,CAAC,EAAE,KAAKM,CAAO,CAC3D,CAAC,EAED,GAAG,8BAA+B,IAAM,CACtC,OAAOC,EAAU,IAAIT,EAAe,SAAS,CAAC,EAAE,eAC9CD,CACF,CACF,CAAC,EAED,GAAG,2CAA4C,IAAM,CACnD,OACEU,EAAU,IAAIN,EAAa,8BAA8B,CAC3D,EAAE,eAAeC,CAA8B,CACjD,CAAC,EAED,GAAG,iCAAkC,IAAM,CACzC,OAAOK,EAAU,IAAIN,EAAa,oBAAoB,CAAC,EAAE,eACvDE,CACF,CACF,CAAC,CACH,CAAC",
6
+ "names": ["ContactsAppBinder", "appBinderTypes", "makeContainer", "externalTypes", "useCaseTypes", "RegisterExternalAddressUseCase", "RenameContactUseCase", "dmk", "sessionId", "appName", "container"]
7
7
  }
@@ -0,0 +1,2 @@
1
+ var c=Object.defineProperty;var s=Object.getOwnPropertyDescriptor;var m=(e,r,n,p)=>{for(var t=p>1?void 0:p?s(r,n):r,o=e.length-1,d;o>=0;o--)(d=e[o])&&(t=(p?d(r,n,t):d(t))||t);return p&&t&&c(r,n,t),t},a=(e,r)=>(n,p)=>r(n,p,e);import{inject as u,injectable as A}from"inversify";import{appBinderTypes as y}from"../app-binder/di/appBinderTypes";let i=class{constructor(r){this.appBinder=r}execute(r){return this.appBinder.registerExternalAddress(r)}};i=m([A(),a(0,u(y.AppBinder))],i);export{i as RegisterExternalAddressUseCase};
2
+ //# sourceMappingURL=RegisterExternalAddressUseCase.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/internal/use-cases/RegisterExternalAddressUseCase.ts"],
4
+ "sourcesContent": ["import { inject, injectable } from \"inversify\";\n\nimport { type RegisterExternalAddressDAReturnType } from \"@api/app-binder/RegisterExternalAddressDeviceActionTypes\";\nimport { type RegisterExternalAddressInput } from \"@api/model/RegisterExternalAddress\";\nimport { ContactsAppBinder } from \"@internal/app-binder/ContactsAppBinder\";\nimport { appBinderTypes } from \"@internal/app-binder/di/appBinderTypes\";\n\n/**\n * Delegates to `ContactsAppBinder`, which uses its injected `dmk`, `sessionId`,\n * and `appName` to construct and execute the `RegisterExternalAddressDeviceAction`.\n *\n * Caller-input validation is intentionally NOT done here: the public API returns\n * a device action, so validation lives inside the device action and surfaces as\n * a typed terminal error state on the observable rather than a synchronous throw.\n */\n@injectable()\nexport class RegisterExternalAddressUseCase {\n constructor(\n @inject(appBinderTypes.AppBinder)\n private readonly appBinder: ContactsAppBinder,\n ) {}\n\n execute(\n input: RegisterExternalAddressInput,\n ): RegisterExternalAddressDAReturnType {\n return this.appBinder.registerExternalAddress(input);\n }\n}\n"],
5
+ "mappings": "iOAAA,OAAS,UAAAA,EAAQ,cAAAC,MAAkB,YAKnC,OAAS,kBAAAC,MAAsB,yCAWxB,IAAMC,EAAN,KAAqC,CAC1C,YAEmBC,EACjB,CADiB,eAAAA,CAChB,CAEH,QACEC,EACqC,CACrC,OAAO,KAAK,UAAU,wBAAwBA,CAAK,CACrD,CACF,EAXaF,EAANG,EAAA,CADNC,EAAW,EAGPC,EAAA,EAAAC,EAAOC,EAAe,SAAS,IAFvBP",
6
+ "names": ["inject", "injectable", "appBinderTypes", "RegisterExternalAddressUseCase", "appBinder", "input", "__decorateClass", "injectable", "__decorateParam", "inject", "appBinderTypes"]
7
+ }
@@ -0,0 +1,2 @@
1
+ import{RegisterExternalAddressUseCase as a}from"./RegisterExternalAddressUseCase";function r(){const e=vi.fn().mockReturnValue("DA_RETURN"),t={registerExternalAddress:e};return{useCase:new a(t),registerExternalAddress:e}}const s={contactName:"Alice",scope:"Eth main",identifier:new Uint8Array(20).fill(17),blockchainFamily:"ethereum",chainId:1n};describe("RegisterExternalAddressUseCase",()=>{it("delegates to the app binder",()=>{const{useCase:e,registerExternalAddress:t}=r(),n=e.execute(s);expect(t).toHaveBeenCalledWith(s),expect(n).toBe("DA_RETURN")}),it("does not validate \u2014 invalid input is forwarded, not thrown",()=>{const{useCase:e,registerExternalAddress:t}=r(),n={...s,contactName:""};expect(()=>e.execute(n)).not.toThrow(),expect(t).toHaveBeenCalledWith(n)})});
2
+ //# sourceMappingURL=RegisterExternalAddressUseCase.test.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/internal/use-cases/RegisterExternalAddressUseCase.test.ts"],
4
+ "sourcesContent": ["import { type RegisterExternalAddressInput } from \"@api/model/RegisterExternalAddress\";\nimport { type ContactsAppBinder } from \"@internal/app-binder/ContactsAppBinder\";\n\nimport { RegisterExternalAddressUseCase } from \"./RegisterExternalAddressUseCase\";\n\nfunction makeUseCase() {\n const registerExternalAddress = vi.fn().mockReturnValue(\"DA_RETURN\");\n const appBinder = { registerExternalAddress } as unknown as ContactsAppBinder;\n return {\n useCase: new RegisterExternalAddressUseCase(appBinder),\n registerExternalAddress,\n };\n}\n\nconst VALID_INPUT: RegisterExternalAddressInput = {\n contactName: \"Alice\",\n scope: \"Eth main\",\n identifier: new Uint8Array(20).fill(0x11),\n blockchainFamily: \"ethereum\",\n chainId: 1n,\n};\n\ndescribe(\"RegisterExternalAddressUseCase\", () => {\n it(\"delegates to the app binder\", () => {\n const { useCase, registerExternalAddress } = makeUseCase();\n\n const result = useCase.execute(VALID_INPUT);\n\n expect(registerExternalAddress).toHaveBeenCalledWith(VALID_INPUT);\n expect(result).toBe(\"DA_RETURN\");\n });\n\n it(\"does not validate \u2014 invalid input is forwarded, not thrown\", () => {\n // Validation now lives in the device action and surfaces as a typed DA\n // error state; the use case must never throw for bad input.\n const { useCase, registerExternalAddress } = makeUseCase();\n\n const invalidInput = { ...VALID_INPUT, contactName: \"\" };\n expect(() => useCase.execute(invalidInput)).not.toThrow();\n expect(registerExternalAddress).toHaveBeenCalledWith(invalidInput);\n });\n});\n"],
5
+ "mappings": "AAGA,OAAS,kCAAAA,MAAsC,mCAE/C,SAASC,GAAc,CACrB,MAAMC,EAA0B,GAAG,GAAG,EAAE,gBAAgB,WAAW,EAC7DC,EAAY,CAAE,wBAAAD,CAAwB,EAC5C,MAAO,CACL,QAAS,IAAIF,EAA+BG,CAAS,EACrD,wBAAAD,CACF,CACF,CAEA,MAAME,EAA4C,CAChD,YAAa,QACb,MAAO,WACP,WAAY,IAAI,WAAW,EAAE,EAAE,KAAK,EAAI,EACxC,iBAAkB,WAClB,QAAS,EACX,EAEA,SAAS,iCAAkC,IAAM,CAC/C,GAAG,8BAA+B,IAAM,CACtC,KAAM,CAAE,QAAAC,EAAS,wBAAAH,CAAwB,EAAID,EAAY,EAEnDK,EAASD,EAAQ,QAAQD,CAAW,EAE1C,OAAOF,CAAuB,EAAE,qBAAqBE,CAAW,EAChE,OAAOE,CAAM,EAAE,KAAK,WAAW,CACjC,CAAC,EAED,GAAG,kEAA8D,IAAM,CAGrE,KAAM,CAAE,QAAAD,EAAS,wBAAAH,CAAwB,EAAID,EAAY,EAEnDM,EAAe,CAAE,GAAGH,EAAa,YAAa,EAAG,EACvD,OAAO,IAAMC,EAAQ,QAAQE,CAAY,CAAC,EAAE,IAAI,QAAQ,EACxD,OAAOL,CAAuB,EAAE,qBAAqBK,CAAY,CACnE,CAAC,CACH,CAAC",
6
+ "names": ["RegisterExternalAddressUseCase", "makeUseCase", "registerExternalAddress", "appBinder", "VALID_INPUT", "useCase", "result", "invalidInput"]
7
+ }
@@ -0,0 +1,2 @@
1
+ var d=Object.defineProperty;var u=Object.getOwnPropertyDescriptor;var a=(e,t,n,r)=>{for(var p=r>1?void 0:r?u(t,n):t,i=e.length-1,m;i>=0;i--)(m=e[i])&&(p=(r?m(t,n,p):m(p))||p);return r&&p&&d(t,n,p),p},c=(e,t)=>(n,r)=>t(n,r,e);import{inject as y,injectable as B}from"inversify";import{appBinderTypes as f}from"../app-binder/di/appBinderTypes";let o=class{constructor(t){this.appBinder=t}execute(t){return this.appBinder.renameContact(t)}};o=a([B(),c(0,y(f.AppBinder))],o);export{o as RenameContactUseCase};
2
+ //# sourceMappingURL=RenameContactUseCase.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/internal/use-cases/RenameContactUseCase.ts"],
4
+ "sourcesContent": ["import { inject, injectable } from \"inversify\";\n\nimport { type RenameContactDAReturnType } from \"@api/app-binder/RenameContactDeviceActionTypes\";\nimport { type RenameContactInput } from \"@api/model/RenameContact\";\nimport { ContactsAppBinder } from \"@internal/app-binder/ContactsAppBinder\";\nimport { appBinderTypes } from \"@internal/app-binder/di/appBinderTypes\";\n\n/**\n * Delegates to `ContactsAppBinder`, which uses its injected `dmk` and\n * `sessionId` to construct and execute the `RenameContactDeviceAction`. The\n * injected `appName` is not used: rename is a dashboard operation served by the\n * device OS, not the embedded app.\n *\n * Caller-input validation is intentionally NOT done here: the public API returns\n * a device action, so validation lives inside the device action and surfaces as\n * a typed terminal error state on the observable rather than a synchronous throw.\n */\n@injectable()\nexport class RenameContactUseCase {\n constructor(\n @inject(appBinderTypes.AppBinder)\n private readonly appBinder: ContactsAppBinder,\n ) {}\n\n execute(input: RenameContactInput): RenameContactDAReturnType {\n return this.appBinder.renameContact(input);\n }\n}\n"],
5
+ "mappings": "iOAAA,OAAS,UAAAA,EAAQ,cAAAC,MAAkB,YAKnC,OAAS,kBAAAC,MAAsB,yCAaxB,IAAMC,EAAN,KAA2B,CAChC,YAEmBC,EACjB,CADiB,eAAAA,CAChB,CAEH,QAAQC,EAAsD,CAC5D,OAAO,KAAK,UAAU,cAAcA,CAAK,CAC3C,CACF,EATaF,EAANG,EAAA,CADNC,EAAW,EAGPC,EAAA,EAAAC,EAAOC,EAAe,SAAS,IAFvBP",
6
+ "names": ["inject", "injectable", "appBinderTypes", "RenameContactUseCase", "appBinder", "input", "__decorateClass", "injectable", "__decorateParam", "inject", "appBinderTypes"]
7
+ }
@@ -0,0 +1,2 @@
1
+ import{RenameContactUseCase as c}from"./RenameContactUseCase";function o(){const e=vi.fn().mockReturnValue("DA_RETURN"),t={renameContact:e};return{useCase:new c(t),renameContact:e}}const a={previousContactName:"Alice",newContactName:"Bob",groupHandle:new Uint8Array(64).fill(204),hmacProof:new Uint8Array(32).fill(221)};describe("RenameContactUseCase",()=>{it("delegates to the app binder",()=>{const{useCase:e,renameContact:t}=o(),n=e.execute(a);expect(t).toHaveBeenCalledWith(a),expect(n).toBe("DA_RETURN")}),it("does not validate \u2014 invalid input is forwarded, not thrown",()=>{const{useCase:e,renameContact:t}=o(),n={...a,newContactName:""};expect(()=>e.execute(n)).not.toThrow(),expect(t).toHaveBeenCalledWith(n)})});
2
+ //# sourceMappingURL=RenameContactUseCase.test.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/internal/use-cases/RenameContactUseCase.test.ts"],
4
+ "sourcesContent": ["import { type RenameContactInput } from \"@api/model/RenameContact\";\nimport { type ContactsAppBinder } from \"@internal/app-binder/ContactsAppBinder\";\n\nimport { RenameContactUseCase } from \"./RenameContactUseCase\";\n\nfunction makeUseCase() {\n const renameContact = vi.fn().mockReturnValue(\"DA_RETURN\");\n const appBinder = { renameContact } as unknown as ContactsAppBinder;\n return {\n useCase: new RenameContactUseCase(appBinder),\n renameContact,\n };\n}\n\nconst VALID_INPUT: RenameContactInput = {\n previousContactName: \"Alice\",\n newContactName: \"Bob\",\n groupHandle: new Uint8Array(64).fill(0xcc),\n hmacProof: new Uint8Array(32).fill(0xdd),\n};\n\ndescribe(\"RenameContactUseCase\", () => {\n it(\"delegates to the app binder\", () => {\n const { useCase, renameContact } = makeUseCase();\n\n const result = useCase.execute(VALID_INPUT);\n\n expect(renameContact).toHaveBeenCalledWith(VALID_INPUT);\n expect(result).toBe(\"DA_RETURN\");\n });\n\n it(\"does not validate \u2014 invalid input is forwarded, not thrown\", () => {\n // Validation lives in the device action and surfaces as a typed DA error\n // state; the use case must never throw for bad input.\n const { useCase, renameContact } = makeUseCase();\n\n const invalidInput = { ...VALID_INPUT, newContactName: \"\" };\n expect(() => useCase.execute(invalidInput)).not.toThrow();\n expect(renameContact).toHaveBeenCalledWith(invalidInput);\n });\n});\n"],
5
+ "mappings": "AAGA,OAAS,wBAAAA,MAA4B,yBAErC,SAASC,GAAc,CACrB,MAAMC,EAAgB,GAAG,GAAG,EAAE,gBAAgB,WAAW,EACnDC,EAAY,CAAE,cAAAD,CAAc,EAClC,MAAO,CACL,QAAS,IAAIF,EAAqBG,CAAS,EAC3C,cAAAD,CACF,CACF,CAEA,MAAME,EAAkC,CACtC,oBAAqB,QACrB,eAAgB,MAChB,YAAa,IAAI,WAAW,EAAE,EAAE,KAAK,GAAI,EACzC,UAAW,IAAI,WAAW,EAAE,EAAE,KAAK,GAAI,CACzC,EAEA,SAAS,uBAAwB,IAAM,CACrC,GAAG,8BAA+B,IAAM,CACtC,KAAM,CAAE,QAAAC,EAAS,cAAAH,CAAc,EAAID,EAAY,EAEzCK,EAASD,EAAQ,QAAQD,CAAW,EAE1C,OAAOF,CAAa,EAAE,qBAAqBE,CAAW,EACtD,OAAOE,CAAM,EAAE,KAAK,WAAW,CACjC,CAAC,EAED,GAAG,kEAA8D,IAAM,CAGrE,KAAM,CAAE,QAAAD,EAAS,cAAAH,CAAc,EAAID,EAAY,EAEzCM,EAAe,CAAE,GAAGH,EAAa,eAAgB,EAAG,EAC1D,OAAO,IAAMC,EAAQ,QAAQE,CAAY,CAAC,EAAE,IAAI,QAAQ,EACxD,OAAOL,CAAa,EAAE,qBAAqBK,CAAY,CACzD,CAAC,CACH,CAAC",
6
+ "names": ["RenameContactUseCase", "makeUseCase", "renameContact", "appBinder", "VALID_INPUT", "useCase", "result", "invalidInput"]
7
+ }
@@ -0,0 +1,2 @@
1
+ import{ContainerModule as o}from"inversify";import{RegisterExternalAddressUseCase as t}from"../../use-cases/RegisterExternalAddressUseCase";import{RenameContactUseCase as r}from"../../use-cases/RenameContactUseCase";import{useCaseTypes as s}from"./useCaseTypes";const i=()=>new o(({bind:e})=>{e(s.RegisterExternalAddressUseCase).to(t),e(s.RenameContactUseCase).to(r)});export{i as useCaseModuleFactory};
2
+ //# sourceMappingURL=useCaseModule.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/internal/use-cases/di/useCaseModule.ts"],
4
+ "sourcesContent": ["import { ContainerModule } from \"inversify\";\n\nimport { RegisterExternalAddressUseCase } from \"@internal/use-cases/RegisterExternalAddressUseCase\";\nimport { RenameContactUseCase } from \"@internal/use-cases/RenameContactUseCase\";\n\nimport { useCaseTypes } from \"./useCaseTypes\";\n\nexport const useCaseModuleFactory = () =>\n new ContainerModule(({ bind }) => {\n bind(useCaseTypes.RegisterExternalAddressUseCase).to(\n RegisterExternalAddressUseCase,\n );\n bind(useCaseTypes.RenameContactUseCase).to(RenameContactUseCase);\n });\n"],
5
+ "mappings": "AAAA,OAAS,mBAAAA,MAAuB,YAEhC,OAAS,kCAAAC,MAAsC,qDAC/C,OAAS,wBAAAC,MAA4B,2CAErC,OAAS,gBAAAC,MAAoB,iBAEtB,MAAMC,EAAuB,IAClC,IAAIJ,EAAgB,CAAC,CAAE,KAAAK,CAAK,IAAM,CAChCA,EAAKF,EAAa,8BAA8B,EAAE,GAChDF,CACF,EACAI,EAAKF,EAAa,oBAAoB,EAAE,GAAGD,CAAoB,CACjE,CAAC",
6
+ "names": ["ContainerModule", "RegisterExternalAddressUseCase", "RenameContactUseCase", "useCaseTypes", "useCaseModuleFactory", "bind"]
7
+ }
@@ -0,0 +1,2 @@
1
+ const e={RegisterExternalAddressUseCase:Symbol.for("RegisterExternalAddressUseCase"),RenameContactUseCase:Symbol.for("RenameContactUseCase")};export{e as useCaseTypes};
2
+ //# sourceMappingURL=useCaseTypes.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/internal/use-cases/di/useCaseTypes.ts"],
4
+ "sourcesContent": ["export const useCaseTypes = {\n RegisterExternalAddressUseCase: Symbol.for(\"RegisterExternalAddressUseCase\"),\n RenameContactUseCase: Symbol.for(\"RenameContactUseCase\"),\n} as const;\n"],
5
+ "mappings": "AAAO,MAAMA,EAAe,CAC1B,+BAAgC,OAAO,IAAI,gCAAgC,EAC3E,qBAAsB,OAAO,IAAI,sBAAsB,CACzD",
6
+ "names": ["useCaseTypes"]
7
+ }
@@ -1,5 +1,6 @@
1
1
  {
2
2
  "dependencies": {
3
+ "@ledgerhq/signer-utils": "workspace:*",
3
4
  "inversify": "catalog:",
4
5
  "purify-ts": "catalog:",
5
6
  "reflect-metadata": "catalog:",
@@ -57,5 +58,5 @@
57
58
  "watch:builds": "pnpm ldmk-tool watch --entryPoints src/index.ts,src/**/*.ts --tsconfig tsconfig.prod.json",
58
59
  "watch:types": "concurrently \"tsc --watch -p tsconfig.prod.json\" \"tsc-alias --watch -p tsconfig.prod.json\""
59
60
  },
60
- "version": "0.0.0-develop-20260827155839"
61
+ "version": "0.0.0-develop-20260829001241"
61
62
  }
@@ -1,3 +1,7 @@
1
+ import { type RegisterExternalAddressDAReturnType } from "./app-binder/RegisterExternalAddressDeviceActionTypes";
2
+ import { type RenameContactDAReturnType } from "./app-binder/RenameContactDeviceActionTypes";
3
+ import { type RegisterExternalAddressInput } from "./model/RegisterExternalAddress";
4
+ import { type RenameContactInput } from "./model/RenameContact";
1
5
  /**
2
6
  * Public, stateless Contacts (Address Book) manager.
3
7
  *
@@ -5,12 +9,26 @@
5
9
  * operation, and returning the device output (including proof material). It
6
10
  * does not store anything, own the address book, or handle persistence; the
7
11
  * host is responsible for that.
8
- *
9
- * Concrete management operations (Register Identity, Edit Contact Name, Edit
10
- * Identifier, Edit Scope, Register Ledger Account, Edit Ledger Account) are
11
- * added by their dedicated implementation tickets. This interface is
12
- * intentionally empty until then.
13
12
  */
14
13
  export interface ContactsManager {
14
+ /**
15
+ * Register an external address on the device — either creating a new contact
16
+ * group or adding the address to an existing one (via
17
+ * `input.existingContactGroup`). Opens the embedded app by default (pass
18
+ * `skipOpenApp: true` to skip only the open-app step; the version guard still
19
+ * runs), checks the Contacts version requirements, then runs REGISTER
20
+ * IDENTITY. Returns the device-issued group handle and proofs to persist.
21
+ */
22
+ registerExternalAddress(input: RegisterExternalAddressInput): RegisterExternalAddressDAReturnType;
23
+ /**
24
+ * Rename an existing contact group (EDIT CONTACT NAME). This is a
25
+ * blockchain-agnostic dashboard operation served by the device OS: it always
26
+ * navigates to the dashboard first (never opens an app), checks the Contacts
27
+ * minimum OS version, then rotates the group's name proof. Pass the current
28
+ * `previousContactName`, the `newContactName`, the group's `groupHandle`, and
29
+ * the existing `hmacProof`; returns the replacement group-level `hmacProof` to
30
+ * persist.
31
+ */
32
+ renameContact(input: RenameContactInput): RenameContactDAReturnType;
15
33
  }
16
34
  //# sourceMappingURL=ContactsManager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ContactsManager.d.ts","sourceRoot":"","sources":["../../../src/api/ContactsManager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,MAAM,WAAW,eAAe;CAAG"}
1
+ {"version":3,"file":"ContactsManager.d.ts","sourceRoot":"","sources":["../../../src/api/ContactsManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,mCAAmC,EAAE,MAAM,0DAA0D,CAAC;AACpH,OAAO,EAAE,KAAK,yBAAyB,EAAE,MAAM,gDAAgD,CAAC;AAChG,OAAO,EAAE,KAAK,4BAA4B,EAAE,MAAM,oCAAoC,CAAC;AACvF,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAEnE;;;;;;;GAOG;AACH,MAAM,WAAW,eAAe;IAC9B;;;;;;;OAOG;IACH,uBAAuB,CACrB,KAAK,EAAE,4BAA4B,GAClC,mCAAmC,CAAC;IAEvC;;;;;;;;OAQG;IACH,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,yBAAyB,CAAC;CACrE"}
@@ -0,0 +1,30 @@
1
+ import { type CommandErrorResult, type DeviceActionState, type ExecuteDeviceActionReturnType, type OpenAppDAError, type OpenAppDARequiredInteraction, type UserInteractionRequired } from "@ledgerhq/device-management-kit";
2
+ import { type RegisterExternalAddressInput, type RegisterExternalAddressOutput } from "../model/RegisterExternalAddress";
3
+ import { type ContactsErrorCodes, type ContactsVersionRequirementError } from "../../internal/app-binder/model/contactsErrors";
4
+ import { type ContactsValidationError } from "../../internal/app-binder/model/contactsValidation";
5
+ /** Machine input: the public input plus the injected embedded-app name. */
6
+ export type RegisterExternalAddressDAInput = RegisterExternalAddressInput & {
7
+ readonly appName: string;
8
+ };
9
+ export type RegisterExternalAddressDAOutput = RegisterExternalAddressOutput;
10
+ export type RegisterExternalAddressDAError = OpenAppDAError | ContactsValidationError | ContactsVersionRequirementError | CommandErrorResult<ContactsErrorCodes>["error"];
11
+ export type RegisterExternalAddressDARequiredInteraction = OpenAppDARequiredInteraction | UserInteractionRequired.RegisterWallet;
12
+ export type RegisterExternalAddressDAIntermediateValue = {
13
+ readonly requiredUserInteraction: RegisterExternalAddressDARequiredInteraction;
14
+ };
15
+ export type RegisterExternalAddressDAState = DeviceActionState<RegisterExternalAddressDAOutput, RegisterExternalAddressDAError, RegisterExternalAddressDAIntermediateValue>;
16
+ export type RegisterExternalAddressDAInternalState = {
17
+ readonly error: RegisterExternalAddressDAError | null;
18
+ /** The running app read freshly by WaitForAppAndVersion, for the version guard. */
19
+ readonly appAndVersion: {
20
+ readonly name: string;
21
+ readonly version: string;
22
+ } | null;
23
+ readonly proofs: {
24
+ readonly groupHandle: Uint8Array;
25
+ readonly hmacProof: Uint8Array;
26
+ readonly hmacRest: Uint8Array;
27
+ } | null;
28
+ };
29
+ export type RegisterExternalAddressDAReturnType = ExecuteDeviceActionReturnType<RegisterExternalAddressDAOutput, RegisterExternalAddressDAError, RegisterExternalAddressDAIntermediateValue>;
30
+ //# sourceMappingURL=RegisterExternalAddressDeviceActionTypes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RegisterExternalAddressDeviceActionTypes.d.ts","sourceRoot":"","sources":["../../../../src/api/app-binder/RegisterExternalAddressDeviceActionTypes.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,6BAA6B,EAClC,KAAK,cAAc,EACnB,KAAK,4BAA4B,EACjC,KAAK,uBAAuB,EAC7B,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EACL,KAAK,4BAA4B,EACjC,KAAK,6BAA6B,EACnC,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,+BAA+B,EACrC,MAAM,2CAA2C,CAAC;AACnD,OAAO,EAAE,KAAK,uBAAuB,EAAE,MAAM,+CAA+C,CAAC;AAE7F,2EAA2E;AAC3E,MAAM,MAAM,8BAA8B,GAAG,4BAA4B,GAAG;IAC1E,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,+BAA+B,GAAG,6BAA6B,CAAC;AAE5E,MAAM,MAAM,8BAA8B,GACtC,cAAc,GACd,uBAAuB,GACvB,+BAA+B,GAC/B,kBAAkB,CAAC,kBAAkB,CAAC,CAAC,OAAO,CAAC,CAAC;AAEpD,MAAM,MAAM,4CAA4C,GACpD,4BAA4B,GAC5B,uBAAuB,CAAC,cAAc,CAAC;AAE3C,MAAM,MAAM,0CAA0C,GAAG;IACvD,QAAQ,CAAC,uBAAuB,EAAE,4CAA4C,CAAC;CAChF,CAAC;AAEF,MAAM,MAAM,8BAA8B,GAAG,iBAAiB,CAC5D,+BAA+B,EAC/B,8BAA8B,EAC9B,0CAA0C,CAC3C,CAAC;AAEF,MAAM,MAAM,sCAAsC,GAAG;IACnD,QAAQ,CAAC,KAAK,EAAE,8BAA8B,GAAG,IAAI,CAAC;IACtD,mFAAmF;IACnF,QAAQ,CAAC,aAAa,EAAE;QACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;KAC1B,GAAG,IAAI,CAAC;IACT,QAAQ,CAAC,MAAM,EAAE;QACf,QAAQ,CAAC,WAAW,EAAE,UAAU,CAAC;QACjC,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAC;QAC/B,QAAQ,CAAC,QAAQ,EAAE,UAAU,CAAC;KAC/B,GAAG,IAAI,CAAC;CACV,CAAC;AAEF,MAAM,MAAM,mCAAmC,GAAG,6BAA6B,CAC7E,+BAA+B,EAC/B,8BAA8B,EAC9B,0CAA0C,CAC3C,CAAC"}
@@ -0,0 +1,25 @@
1
+ import { type CommandErrorResult, type DeviceActionState, type ExecuteDeviceActionReturnType, type GoToDashboardDAError, type GoToDashboardDARequiredInteraction, type UserInteractionRequired } from "@ledgerhq/device-management-kit";
2
+ import { type RenameContactInput, type RenameContactOutput } from "../model/RenameContact";
3
+ import { type ContactsErrorCodes, type ContactsVersionRequirementError } from "../../internal/app-binder/model/contactsErrors";
4
+ import { type ContactsValidationError } from "../../internal/app-binder/model/contactsValidation";
5
+ /**
6
+ * Rename is a dashboard operation, so the machine input is exactly the public
7
+ * input — no embedded-app name is injected (the OS serves the command; there is
8
+ * no app to open).
9
+ */
10
+ export type RenameContactDAInput = RenameContactInput;
11
+ export type RenameContactDAOutput = RenameContactOutput;
12
+ export type RenameContactDAError = GoToDashboardDAError | ContactsValidationError | ContactsVersionRequirementError | CommandErrorResult<ContactsErrorCodes>["error"];
13
+ export type RenameContactDARequiredInteraction = GoToDashboardDARequiredInteraction | UserInteractionRequired.RegisterWallet;
14
+ export type RenameContactDAIntermediateValue = {
15
+ readonly requiredUserInteraction: RenameContactDARequiredInteraction;
16
+ };
17
+ export type RenameContactDAState = DeviceActionState<RenameContactDAOutput, RenameContactDAError, RenameContactDAIntermediateValue>;
18
+ export type RenameContactDAInternalState = {
19
+ readonly error: RenameContactDAError | null;
20
+ readonly proof: {
21
+ readonly hmacProof: Uint8Array;
22
+ } | null;
23
+ };
24
+ export type RenameContactDAReturnType = ExecuteDeviceActionReturnType<RenameContactDAOutput, RenameContactDAError, RenameContactDAIntermediateValue>;
25
+ //# sourceMappingURL=RenameContactDeviceActionTypes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RenameContactDeviceActionTypes.d.ts","sourceRoot":"","sources":["../../../../src/api/app-binder/RenameContactDeviceActionTypes.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,6BAA6B,EAClC,KAAK,oBAAoB,EACzB,KAAK,kCAAkC,EACvC,KAAK,uBAAuB,EAC7B,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACzB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,+BAA+B,EACrC,MAAM,2CAA2C,CAAC;AACnD,OAAO,EAAE,KAAK,uBAAuB,EAAE,MAAM,+CAA+C,CAAC;AAE7F;;;;GAIG;AACH,MAAM,MAAM,oBAAoB,GAAG,kBAAkB,CAAC;AAEtD,MAAM,MAAM,qBAAqB,GAAG,mBAAmB,CAAC;AAExD,MAAM,MAAM,oBAAoB,GAC5B,oBAAoB,GACpB,uBAAuB,GACvB,+BAA+B,GAC/B,kBAAkB,CAAC,kBAAkB,CAAC,CAAC,OAAO,CAAC,CAAC;AAEpD,MAAM,MAAM,kCAAkC,GAC1C,kCAAkC,GAClC,uBAAuB,CAAC,cAAc,CAAC;AAE3C,MAAM,MAAM,gCAAgC,GAAG;IAC7C,QAAQ,CAAC,uBAAuB,EAAE,kCAAkC,CAAC;CACtE,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG,iBAAiB,CAClD,qBAAqB,EACrB,oBAAoB,EACpB,gCAAgC,CACjC,CAAC;AAEF,MAAM,MAAM,4BAA4B,GAAG;IACzC,QAAQ,CAAC,KAAK,EAAE,oBAAoB,GAAG,IAAI,CAAC;IAC5C,QAAQ,CAAC,KAAK,EAAE;QACd,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAC;KAChC,GAAG,IAAI,CAAC;CACV,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG,6BAA6B,CACnE,qBAAqB,EACrB,oBAAoB,EACpB,gCAAgC,CACjC,CAAC"}
@@ -1,4 +1,8 @@
1
+ export { type RegisterExternalAddressDAError, type RegisterExternalAddressDAInput, type RegisterExternalAddressDAIntermediateValue, type RegisterExternalAddressDAOutput, type RegisterExternalAddressDARequiredInteraction, type RegisterExternalAddressDAReturnType, type RegisterExternalAddressDAState, } from "./app-binder/RegisterExternalAddressDeviceActionTypes";
2
+ export { type RenameContactDAError, type RenameContactDAInput, type RenameContactDAIntermediateValue, type RenameContactDAOutput, type RenameContactDARequiredInteraction, type RenameContactDAReturnType, type RenameContactDAState, } from "./app-binder/RenameContactDeviceActionTypes";
1
3
  export { type ContactsManager } from "./ContactsManager";
2
4
  export { ContactsManagerBuilder } from "./ContactsManagerBuilder";
3
5
  export { CONTACTS_VERSION_REQUIREMENTS, type ContactsModelRequirement, type ContactsModelSupport, type ContactsModelUnsupported, type ContactsSupportQuery, type ContactsVersionRequirements, ETHEREUM_APP_NAME, isContactsSupported, isVersionAtLeast, resolveContactsVersionRequirements, } from "./model/ContactsVersionRequirements";
6
+ export { type ExistingContactGroup, type RegisterExternalAddressInput, type RegisterExternalAddressMode, type RegisterExternalAddressOutput, } from "./model/RegisterExternalAddress";
7
+ export { type RenameContactInput, type RenameContactOutput, } from "./model/RenameContact";
4
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/api/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EACL,6BAA6B,EAC7B,KAAK,wBAAwB,EAC7B,KAAK,oBAAoB,EACzB,KAAK,wBAAwB,EAC7B,KAAK,oBAAoB,EACzB,KAAK,2BAA2B,EAChC,iBAAiB,EACjB,mBAAmB,EACnB,gBAAgB,EAChB,kCAAkC,GACnC,MAAM,wCAAwC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/api/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,8BAA8B,EACnC,KAAK,8BAA8B,EACnC,KAAK,0CAA0C,EAC/C,KAAK,+BAA+B,EACpC,KAAK,4CAA4C,EACjD,KAAK,mCAAmC,EACxC,KAAK,8BAA8B,GACpC,MAAM,0DAA0D,CAAC;AAClE,OAAO,EACL,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,EACzB,KAAK,gCAAgC,EACrC,KAAK,qBAAqB,EAC1B,KAAK,kCAAkC,EACvC,KAAK,yBAAyB,EAC9B,KAAK,oBAAoB,GAC1B,MAAM,gDAAgD,CAAC;AACxD,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EACL,6BAA6B,EAC7B,KAAK,wBAAwB,EAC7B,KAAK,oBAAoB,EACzB,KAAK,wBAAwB,EAC7B,KAAK,oBAAoB,EACzB,KAAK,2BAA2B,EAChC,iBAAiB,EACjB,mBAAmB,EACnB,gBAAgB,EAChB,kCAAkC,GACnC,MAAM,wCAAwC,CAAC;AAChD,OAAO,EACL,KAAK,oBAAoB,EACzB,KAAK,4BAA4B,EACjC,KAAK,2BAA2B,EAChC,KAAK,6BAA6B,GACnC,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,GACzB,MAAM,0BAA0B,CAAC"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Public input/output types for `ContactsManager.registerExternalAddress`.
3
+ *
4
+ * Proof material (`groupHandle`, `hmacProof`, `hmacRest`) is returned as raw
5
+ * bytes; the host owns persistence and address-book state. `derivationPath` is
6
+ * intentionally absent — the kit owns a single internal value for external
7
+ * addresses and does not expose it.
8
+ */
9
+ /** The existing contact group to extend, when adding an address to it. */
10
+ export type ExistingContactGroup = {
11
+ /** 64-byte group handle returned by the group's first Register Identity. */
12
+ readonly groupHandle: Uint8Array;
13
+ /** 32-byte name proof (device `hmac_name`) bound to that group. */
14
+ readonly hmacProof: Uint8Array;
15
+ };
16
+ export type RegisterExternalAddressInput = {
17
+ readonly contactName: string;
18
+ readonly scope: string;
19
+ /** Chain address bytes (20 bytes for Ethereum). */
20
+ readonly identifier: Uint8Array;
21
+ /** Blockchain family name, e.g. "ethereum" (v1 supports Ethereum only). */
22
+ readonly blockchainFamily: string;
23
+ readonly chainId?: bigint;
24
+ /**
25
+ * Set to add the address to an existing contact group. Omit to create a new
26
+ * contact group.
27
+ */
28
+ readonly existingContactGroup?: ExistingContactGroup;
29
+ /**
30
+ * When `true`, the open-app step is skipped (the caller guarantees the app is
31
+ * already open). The app-version guard still runs.
32
+ */
33
+ readonly skipOpenApp?: boolean;
34
+ };
35
+ export type RegisterExternalAddressMode = "newContactGroup" | "existingContactGroup";
36
+ export type RegisterExternalAddressOutput = {
37
+ /** Whether a new contact group was created or an existing one was extended. */
38
+ readonly mode: RegisterExternalAddressMode;
39
+ /** Echoed input, needed by the host to persist the returned proof material. */
40
+ readonly contactName: string;
41
+ readonly scope: string;
42
+ readonly identifier: Uint8Array;
43
+ readonly blockchainFamily: string;
44
+ readonly chainId?: bigint;
45
+ /** Device-issued proof material. */
46
+ readonly groupHandle: Uint8Array;
47
+ readonly hmacProof: Uint8Array;
48
+ readonly hmacRest: Uint8Array;
49
+ };
50
+ //# sourceMappingURL=RegisterExternalAddress.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RegisterExternalAddress.d.ts","sourceRoot":"","sources":["../../../../src/api/model/RegisterExternalAddress.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,0EAA0E;AAC1E,MAAM,MAAM,oBAAoB,GAAG;IACjC,4EAA4E;IAC5E,QAAQ,CAAC,WAAW,EAAE,UAAU,CAAC;IACjC,mEAAmE;IACnE,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,4BAA4B,GAAG;IACzC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,mDAAmD;IACnD,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC,2EAA2E;IAC3E,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B;;;OAGG;IACH,QAAQ,CAAC,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;IACrD;;;OAGG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,2BAA2B,GACnC,iBAAiB,GACjB,sBAAsB,CAAC;AAE3B,MAAM,MAAM,6BAA6B,GAAG;IAC1C,+EAA+E;IAC/E,QAAQ,CAAC,IAAI,EAAE,2BAA2B,CAAC;IAC3C,+EAA+E;IAC/E,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,oCAAoC;IACpC,QAAQ,CAAC,WAAW,EAAE,UAAU,CAAC;IACjC,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE,UAAU,CAAC;CAC/B,CAAC"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Public input/output types for `ContactsManager.renameContact`.
3
+ *
4
+ * Rename (EDIT CONTACT NAME) is a blockchain-agnostic OS/dashboard operation:
5
+ * it rotates the contact-level `hmacProof` (the device's `hmac_name`) and
6
+ * returns the fresh proof. The per-entry `hmacRest` values are untouched — they
7
+ * bind scope/identifier/family/chainId, never the name — so only the group's
8
+ * name proof needs re-persisting.
9
+ *
10
+ * Proof material (`groupHandle`, `hmacProof`) is passed and returned as raw
11
+ * bytes; the host owns persistence and address-book state. `derivationPath` is
12
+ * kit-internal and not exposed: the Ethereum app requires a path on the wire
13
+ * (a default m/44'/60'/0'/0/0 is sent), but the rename itself is name-only.
14
+ */
15
+ export type RenameContactInput = {
16
+ /** The contact's current name, proven to the device via `hmacProof`. */
17
+ readonly previousContactName: string;
18
+ /** The new name to assign to the contact group. */
19
+ readonly newContactName: string;
20
+ /** 64-byte group handle returned by the group's Register Identity. */
21
+ readonly groupHandle: Uint8Array;
22
+ /**
23
+ * The existing 32-byte name proof (device `hmac_name`) bound to the current
24
+ * name — passed back so the device can verify continuity before approving the
25
+ * rename. Replaced by the returned `hmacProof` on success.
26
+ */
27
+ readonly hmacProof: Uint8Array;
28
+ };
29
+ export type RenameContactOutput = {
30
+ /** Echoed previous name, for the host to locate the entry it is replacing. */
31
+ readonly previousContactName: string;
32
+ /** The new name now bound to the contact group. */
33
+ readonly contactName: string;
34
+ /** Echoed group handle, unchanged by the rename. */
35
+ readonly groupHandle: Uint8Array;
36
+ /** The replacement group-level name proof (rotated `hmac_name`) to persist. */
37
+ readonly hmacProof: Uint8Array;
38
+ };
39
+ //# sourceMappingURL=RenameContact.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RenameContact.d.ts","sourceRoot":"","sources":["../../../../src/api/model/RenameContact.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,wEAAwE;IACxE,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,mDAAmD;IACnD,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,sEAAsE;IACtE,QAAQ,CAAC,WAAW,EAAE,UAAU,CAAC;IACjC;;;;OAIG;IACH,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,8EAA8E;IAC9E,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,mDAAmD;IACnD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,oDAAoD;IACpD,QAAQ,CAAC,WAAW,EAAE,UAAU,CAAC;IACjC,+EAA+E;IAC/E,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAC;CAChC,CAAC"}
@@ -1,6 +1,10 @@
1
1
  import { type DeviceManagementKit, type DeviceSessionId } from "@ledgerhq/device-management-kit";
2
2
  import { type Container } from "inversify";
3
+ import { type RegisterExternalAddressDAReturnType } from "../api/app-binder/RegisterExternalAddressDeviceActionTypes";
4
+ import { type RenameContactDAReturnType } from "../api/app-binder/RenameContactDeviceActionTypes";
3
5
  import { type ContactsManager } from "../api/ContactsManager";
6
+ import { type RegisterExternalAddressInput } from "../api/model/RegisterExternalAddress";
7
+ import { type RenameContactInput } from "../api/model/RenameContact";
4
8
  type DefaultContactsManagerConstructorArgs = {
5
9
  dmk: DeviceManagementKit;
6
10
  sessionId: DeviceSessionId;
@@ -9,9 +13,11 @@ type DefaultContactsManagerConstructorArgs = {
9
13
  export declare class DefaultContactsManager implements ContactsManager {
10
14
  private readonly _container;
11
15
  constructor({ dmk, sessionId, appName, }: DefaultContactsManagerConstructorArgs);
16
+ registerExternalAddress(input: RegisterExternalAddressInput): RegisterExternalAddressDAReturnType;
17
+ renameContact(input: RenameContactInput): RenameContactDAReturnType;
12
18
  /**
13
- * Exposes the DI container so operation methods (added by their dedicated
14
- * tickets) can resolve their `UseCase`. Not part of the public API.
19
+ * Exposes the DI container so future operation methods can resolve their
20
+ * `UseCase`. Not part of the public API.
15
21
  */
16
22
  protected get container(): Container;
17
23
  }
@@ -1 +1 @@
1
- {"version":3,"file":"DefaultContactsManager.d.ts","sourceRoot":"","sources":["../../../src/internal/DefaultContactsManager.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,eAAe,EACrB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,WAAW,CAAC;AAE3C,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAG5D,KAAK,qCAAqC,GAAG;IAC3C,GAAG,EAAE,mBAAmB,CAAC;IACzB,SAAS,EAAE,eAAe,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,qBAAa,sBAAuB,YAAW,eAAe;IAC5D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAY;gBAE3B,EACV,GAAG,EACH,SAAS,EACT,OAAO,GACR,EAAE,qCAAqC;IAIxC;;;OAGG;IACH,SAAS,KAAK,SAAS,IAAI,SAAS,CAEnC;CACF"}
1
+ {"version":3,"file":"DefaultContactsManager.d.ts","sourceRoot":"","sources":["../../../src/internal/DefaultContactsManager.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,eAAe,EACrB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,WAAW,CAAC;AAE3C,OAAO,EAAE,KAAK,mCAAmC,EAAE,MAAM,0DAA0D,CAAC;AACpH,OAAO,EAAE,KAAK,yBAAyB,EAAE,MAAM,gDAAgD,CAAC;AAChG,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,KAAK,4BAA4B,EAAE,MAAM,oCAAoC,CAAC;AACvF,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAMnE,KAAK,qCAAqC,GAAG;IAC3C,GAAG,EAAE,mBAAmB,CAAC;IACzB,SAAS,EAAE,eAAe,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,qBAAa,sBAAuB,YAAW,eAAe;IAC5D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAY;gBAE3B,EACV,GAAG,EACH,SAAS,EACT,OAAO,GACR,EAAE,qCAAqC;IAIxC,uBAAuB,CACrB,KAAK,EAAE,4BAA4B,GAClC,mCAAmC;IAQtC,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,yBAAyB;IAMnE;;;OAGG;IACH,SAAS,KAAK,SAAS,IAAI,SAAS,CAEnC;CACF"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=DefaultContactsManager.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DefaultContactsManager.test.d.ts","sourceRoot":"","sources":["../../../src/internal/DefaultContactsManager.test.ts"],"names":[],"mappings":""}
@@ -1,14 +1,18 @@
1
1
  import { type DeviceManagementKit, type DeviceSessionId } from "@ledgerhq/device-management-kit";
2
+ import { type RegisterExternalAddressDAReturnType } from "../../api/app-binder/RegisterExternalAddressDeviceActionTypes";
3
+ import { type RenameContactDAReturnType } from "../../api/app-binder/RenameContactDeviceActionTypes";
4
+ import { type RegisterExternalAddressInput } from "../../api/model/RegisterExternalAddress";
5
+ import { type RenameContactInput } from "../../api/model/RenameContact";
2
6
  /**
3
7
  * Constructs and executes Contacts `DeviceAction`s using the injected `dmk`,
4
- * `sessionId`, and `appName`. Operation methods (one per Address Book
5
- * management command) are added by their dedicated implementation tickets and
6
- * consume these members.
8
+ * `sessionId`, and `appName`. Each Address Book operation gets one method here.
7
9
  */
8
10
  export declare class ContactsAppBinder {
9
11
  protected readonly dmk: DeviceManagementKit;
10
12
  protected readonly sessionId: DeviceSessionId;
11
13
  protected readonly appName: string;
12
14
  constructor(dmk: DeviceManagementKit, sessionId: DeviceSessionId, appName: string);
15
+ registerExternalAddress(input: RegisterExternalAddressInput): RegisterExternalAddressDAReturnType;
16
+ renameContact(input: RenameContactInput): RenameContactDAReturnType;
13
17
  }
14
18
  //# sourceMappingURL=ContactsAppBinder.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ContactsAppBinder.d.ts","sourceRoot":"","sources":["../../../../src/internal/app-binder/ContactsAppBinder.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,eAAe,EACrB,MAAM,iCAAiC,CAAC;AAKzC;;;;;GAKG;AACH,qBACa,iBAAiB;IAG1B,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,mBAAmB;IAE3C,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,eAAe;IAE7C,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM;gBAJf,GAAG,EAAE,mBAAmB,EAExB,SAAS,EAAE,eAAe,EAE1B,OAAO,EAAE,MAAM;CAErC"}
1
+ {"version":3,"file":"ContactsAppBinder.d.ts","sourceRoot":"","sources":["../../../../src/internal/app-binder/ContactsAppBinder.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,eAAe,EACrB,MAAM,iCAAiC,CAAC;AAGzC,OAAO,EAAE,KAAK,mCAAmC,EAAE,MAAM,0DAA0D,CAAC;AACpH,OAAO,EAAE,KAAK,yBAAyB,EAAE,MAAM,gDAAgD,CAAC;AAChG,OAAO,EAAE,KAAK,4BAA4B,EAAE,MAAM,oCAAoC,CAAC;AACvF,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAKnE;;;GAGG;AACH,qBACa,iBAAiB;IAG1B,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,mBAAmB;IAE3C,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,eAAe;IAE7C,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM;gBAJf,GAAG,EAAE,mBAAmB,EAExB,SAAS,EAAE,eAAe,EAE1B,OAAO,EAAE,MAAM;IAGpC,uBAAuB,CACrB,KAAK,EAAE,4BAA4B,GAClC,mCAAmC;IAStC,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,yBAAyB;CAQpE"}
@@ -0,0 +1,30 @@
1
+ import { type Apdu, type ApduResponse, type Command, type CommandResult } from "@ledgerhq/device-management-kit";
2
+ import { type ContactsErrorCodes } from "../../app-binder/model/contactsErrors";
3
+ export type RegisterIdentityCommandArgs = {
4
+ /** One framed chunk built by sendFramedContactsPayload. */
5
+ readonly data: Uint8Array;
6
+ /** 0x00 for the first/only chunk, 0x80 for continuation chunks. */
7
+ readonly p2: number;
8
+ };
9
+ export type RegisterIdentityCommandResponse = {
10
+ /**
11
+ * Present only on the final chunk — the device returns struct_type(0x2d) +
12
+ * group_handle(64) + hmac_proof(32) + hmac_rest(32) there. Intermediate
13
+ * chunks return SW=0x9000 with no data.
14
+ *
15
+ * `hmacProof` is the device's HMAC_PROOF (binds the contact name);
16
+ * `hmacRest` is the HMAC_REST (binds scope + identifier + family).
17
+ */
18
+ readonly groupHandle?: Uint8Array;
19
+ readonly hmacProof?: Uint8Array;
20
+ readonly hmacRest?: Uint8Array;
21
+ };
22
+ export declare class RegisterIdentityCommand implements Command<RegisterIdentityCommandResponse, RegisterIdentityCommandArgs, ContactsErrorCodes> {
23
+ readonly name = "registerIdentity";
24
+ readonly args: RegisterIdentityCommandArgs;
25
+ private readonly errorHelper;
26
+ constructor(args: RegisterIdentityCommandArgs);
27
+ getApdu(): Apdu;
28
+ parseResponse(response: ApduResponse): CommandResult<RegisterIdentityCommandResponse, ContactsErrorCodes>;
29
+ }
30
+ //# sourceMappingURL=RegisterIdentityCommand.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RegisterIdentityCommand.d.ts","sourceRoot":"","sources":["../../../../../src/internal/app-binder/command/RegisterIdentityCommand.ts"],"names":[],"mappings":"AAQA,OAAO,EACL,KAAK,IAAI,EAGT,KAAK,YAAY,EACjB,KAAK,OAAO,EACZ,KAAK,aAAa,EAGnB,MAAM,iCAAiC,CAAC;AAYzC,OAAO,EAGL,KAAK,kBAAkB,EACxB,MAAM,2CAA2C,CAAC;AAEnD,MAAM,MAAM,2BAA2B,GAAG;IACxC,2DAA2D;IAC3D,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,mEAAmE;IACnE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,+BAA+B,GAAG;IAC5C;;;;;;;OAOG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,UAAU,CAAC;IAClC,QAAQ,CAAC,SAAS,CAAC,EAAE,UAAU,CAAC;IAChC,QAAQ,CAAC,QAAQ,CAAC,EAAE,UAAU,CAAC;CAChC,CAAC;AAkBF,qBAAa,uBACX,YACE,OAAO,CACL,+BAA+B,EAC/B,2BAA2B,EAC3B,kBAAkB,CACnB;IAEH,QAAQ,CAAC,IAAI,sBAAsB;IACnC,QAAQ,CAAC,IAAI,EAAE,2BAA2B,CAAC;IAC3C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAGwB;gBAExC,IAAI,EAAE,2BAA2B;IAI7C,OAAO,IAAI,IAAI;IAWf,aAAa,CACX,QAAQ,EAAE,YAAY,GACrB,aAAa,CAAC,+BAA+B,EAAE,kBAAkB,CAAC;CAoDtE"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=RegisterIdentityCommand.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RegisterIdentityCommand.test.d.ts","sourceRoot":"","sources":["../../../../../src/internal/app-binder/command/RegisterIdentityCommand.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,25 @@
1
+ import { type Apdu, type ApduResponse, type Command, type CommandResult } from "@ledgerhq/device-management-kit";
2
+ import { type ContactsErrorCodes } from "../../app-binder/model/contactsErrors";
3
+ export type RenameContactCommandArgs = {
4
+ /** One framed chunk built by sendFramedContactsPayload. */
5
+ readonly data: Uint8Array;
6
+ /** 0x00 for the first/only chunk, 0x80 for continuation chunks. */
7
+ readonly p2: number;
8
+ };
9
+ export type RenameContactCommandResponse = {
10
+ /**
11
+ * Present only on the final chunk — the device returns struct_type(0x2e) +
12
+ * rotated hmac_name(32) there. Intermediate chunks return SW=0x9000 with no
13
+ * data. This is the replacement group-level name proof.
14
+ */
15
+ readonly hmacProof?: Uint8Array;
16
+ };
17
+ export declare class RenameContactCommand implements Command<RenameContactCommandResponse, RenameContactCommandArgs, ContactsErrorCodes> {
18
+ readonly name = "renameContact";
19
+ readonly args: RenameContactCommandArgs;
20
+ private readonly errorHelper;
21
+ constructor(args: RenameContactCommandArgs);
22
+ getApdu(): Apdu;
23
+ parseResponse(response: ApduResponse): CommandResult<RenameContactCommandResponse, ContactsErrorCodes>;
24
+ }
25
+ //# sourceMappingURL=RenameContactCommand.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RenameContactCommand.d.ts","sourceRoot":"","sources":["../../../../../src/internal/app-binder/command/RenameContactCommand.ts"],"names":[],"mappings":"AAcA,OAAO,EACL,KAAK,IAAI,EAGT,KAAK,YAAY,EACjB,KAAK,OAAO,EACZ,KAAK,aAAa,EAGnB,MAAM,iCAAiC,CAAC;AAUzC,OAAO,EAGL,KAAK,kBAAkB,EACxB,MAAM,2CAA2C,CAAC;AAGnD,MAAM,MAAM,wBAAwB,GAAG;IACrC,2DAA2D;IAC3D,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,mEAAmE;IACnE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,4BAA4B,GAAG;IACzC;;;;OAIG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,UAAU,CAAC;CACjC,CAAC;AAkBF,qBAAa,oBACX,YACE,OAAO,CACL,4BAA4B,EAC5B,wBAAwB,EACxB,kBAAkB,CACnB;IAEH,QAAQ,CAAC,IAAI,mBAAmB;IAChC,QAAQ,CAAC,IAAI,EAAE,wBAAwB,CAAC;IACxC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAGwB;gBAExC,IAAI,EAAE,wBAAwB;IAI1C,OAAO,IAAI,IAAI;IAWf,aAAa,CACX,QAAQ,EAAE,YAAY,GACrB,aAAa,CAAC,4BAA4B,EAAE,kBAAkB,CAAC;CAoCnE"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=RenameContactCommand.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RenameContactCommand.test.d.ts","sourceRoot":"","sources":["../../../../../src/internal/app-binder/command/RenameContactCommand.test.ts"],"names":[],"mappings":""}