@icure/api 5.0.4 → 5.0.7

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 (1711) hide show
  1. package/.editorconfig +11 -0
  2. package/.eslintrc.js +31 -0
  3. package/.github/workflows/build.yml +0 -0
  4. package/.prettierrc +5 -0
  5. package/CHANGELOG.md +112 -0
  6. package/Dockerfile +25 -0
  7. package/LICENSE +7 -0
  8. package/README.md +75 -0
  9. package/apidocs/.swagger-codegen-ignore +23 -0
  10. package/ci/cloudbuild.yaml +16 -0
  11. package/{icc-api → dist/icc-api}/api/IccAccesslogApi.d.ts +0 -0
  12. package/{icc-api → dist/icc-api}/api/IccAccesslogApi.js +0 -0
  13. package/{icc-api → dist/icc-api}/api/IccAccesslogApi.js.map +0 -0
  14. package/{icc-api → dist/icc-api}/api/IccAgendaApi.d.ts +0 -0
  15. package/{icc-api → dist/icc-api}/api/IccAgendaApi.js +0 -0
  16. package/{icc-api → dist/icc-api}/api/IccAgendaApi.js.map +0 -0
  17. package/{icc-api → dist/icc-api}/api/IccAnonymousAccessApi.d.ts +0 -0
  18. package/{icc-api → dist/icc-api}/api/IccAnonymousAccessApi.js +0 -0
  19. package/{icc-api → dist/icc-api}/api/IccAnonymousAccessApi.js.map +0 -0
  20. package/{icc-api → dist/icc-api}/api/IccApplicationsettingsApi.d.ts +0 -0
  21. package/{icc-api → dist/icc-api}/api/IccApplicationsettingsApi.js +0 -0
  22. package/{icc-api → dist/icc-api}/api/IccApplicationsettingsApi.js.map +0 -0
  23. package/{icc-api → dist/icc-api}/api/IccArticleApi.d.ts +0 -0
  24. package/{icc-api → dist/icc-api}/api/IccArticleApi.js +0 -0
  25. package/{icc-api → dist/icc-api}/api/IccArticleApi.js.map +0 -0
  26. package/dist/icc-api/api/IccAuthApi.d.ts +51 -0
  27. package/dist/icc-api/api/IccAuthApi.js +101 -0
  28. package/dist/icc-api/api/IccAuthApi.js.map +1 -0
  29. package/{icc-api → dist/icc-api}/api/IccBeefactApi.d.ts +0 -0
  30. package/{icc-api → dist/icc-api}/api/IccBeefactApi.js +0 -0
  31. package/{icc-api → dist/icc-api}/api/IccBeefactApi.js.map +0 -0
  32. package/{icc-api → dist/icc-api}/api/IccBekmehrApi.d.ts +0 -0
  33. package/{icc-api → dist/icc-api}/api/IccBekmehrApi.js +0 -0
  34. package/{icc-api → dist/icc-api}/api/IccBekmehrApi.js.map +0 -0
  35. package/{icc-api → dist/icc-api}/api/IccBemikronoApi.d.ts +0 -0
  36. package/{icc-api → dist/icc-api}/api/IccBemikronoApi.js +0 -0
  37. package/{icc-api → dist/icc-api}/api/IccBemikronoApi.js.map +0 -0
  38. package/{icc-api → dist/icc-api}/api/IccBeresultexportApi.d.ts +0 -0
  39. package/{icc-api → dist/icc-api}/api/IccBeresultexportApi.js +0 -0
  40. package/{icc-api → dist/icc-api}/api/IccBeresultexportApi.js.map +0 -0
  41. package/{icc-api → dist/icc-api}/api/IccBeresultimportApi.d.ts +0 -0
  42. package/{icc-api → dist/icc-api}/api/IccBeresultimportApi.js +0 -0
  43. package/{icc-api → dist/icc-api}/api/IccBeresultimportApi.js.map +0 -0
  44. package/{icc-api → dist/icc-api}/api/IccBesamv2Api.d.ts +0 -0
  45. package/{icc-api → dist/icc-api}/api/IccBesamv2Api.js +0 -0
  46. package/{icc-api → dist/icc-api}/api/IccBesamv2Api.js.map +0 -0
  47. package/{icc-api → dist/icc-api}/api/IccCalendarItemApi.d.ts +0 -0
  48. package/{icc-api → dist/icc-api}/api/IccCalendarItemApi.js +0 -0
  49. package/{icc-api → dist/icc-api}/api/IccCalendarItemApi.js.map +0 -0
  50. package/{icc-api → dist/icc-api}/api/IccCalendarItemTypeApi.d.ts +0 -0
  51. package/{icc-api → dist/icc-api}/api/IccCalendarItemTypeApi.js +0 -0
  52. package/{icc-api → dist/icc-api}/api/IccCalendarItemTypeApi.js.map +0 -0
  53. package/{icc-api → dist/icc-api}/api/IccClassificationApi.d.ts +0 -0
  54. package/{icc-api → dist/icc-api}/api/IccClassificationApi.js +0 -0
  55. package/{icc-api → dist/icc-api}/api/IccClassificationApi.js.map +0 -0
  56. package/{icc-api → dist/icc-api}/api/IccClassificationTemplateApi.d.ts +0 -0
  57. package/{icc-api → dist/icc-api}/api/IccClassificationTemplateApi.js +0 -0
  58. package/{icc-api → dist/icc-api}/api/IccClassificationTemplateApi.js.map +0 -0
  59. package/{icc-api → dist/icc-api}/api/IccCodeApi.d.ts +0 -0
  60. package/{icc-api → dist/icc-api}/api/IccCodeApi.js +0 -0
  61. package/{icc-api → dist/icc-api}/api/IccCodeApi.js.map +0 -0
  62. package/{icc-api → dist/icc-api}/api/IccContactApi.d.ts +0 -0
  63. package/{icc-api → dist/icc-api}/api/IccContactApi.js +0 -0
  64. package/{icc-api → dist/icc-api}/api/IccContactApi.js.map +0 -0
  65. package/{icc-api → dist/icc-api}/api/IccDeviceApi.d.ts +0 -0
  66. package/{icc-api → dist/icc-api}/api/IccDeviceApi.js +0 -0
  67. package/{icc-api → dist/icc-api}/api/IccDeviceApi.js.map +0 -0
  68. package/{icc-api → dist/icc-api}/api/IccDoctemplateApi.d.ts +0 -0
  69. package/{icc-api → dist/icc-api}/api/IccDoctemplateApi.js +0 -0
  70. package/{icc-api → dist/icc-api}/api/IccDoctemplateApi.js.map +0 -0
  71. package/{icc-api → dist/icc-api}/api/IccDocumentApi.d.ts +0 -0
  72. package/{icc-api → dist/icc-api}/api/IccDocumentApi.js +0 -0
  73. package/{icc-api → dist/icc-api}/api/IccDocumentApi.js.map +0 -0
  74. package/{icc-api → dist/icc-api}/api/IccDocumentTemplateApi.d.ts +0 -0
  75. package/{icc-api → dist/icc-api}/api/IccDocumentTemplateApi.js +0 -0
  76. package/{icc-api → dist/icc-api}/api/IccDocumentTemplateApi.js.map +0 -0
  77. package/{icc-api → dist/icc-api}/api/IccEntityrefApi.d.ts +0 -0
  78. package/{icc-api → dist/icc-api}/api/IccEntityrefApi.js +0 -0
  79. package/{icc-api → dist/icc-api}/api/IccEntityrefApi.js.map +0 -0
  80. package/{icc-api → dist/icc-api}/api/IccEntitytemplateApi.d.ts +0 -0
  81. package/{icc-api → dist/icc-api}/api/IccEntitytemplateApi.js +0 -0
  82. package/{icc-api → dist/icc-api}/api/IccEntitytemplateApi.js.map +0 -0
  83. package/{icc-api → dist/icc-api}/api/IccFormApi.d.ts +0 -0
  84. package/{icc-api → dist/icc-api}/api/IccFormApi.js +0 -0
  85. package/{icc-api → dist/icc-api}/api/IccFormApi.js.map +0 -0
  86. package/{icc-api → dist/icc-api}/api/IccFrontendmigrationApi.d.ts +0 -0
  87. package/{icc-api → dist/icc-api}/api/IccFrontendmigrationApi.js +0 -0
  88. package/{icc-api → dist/icc-api}/api/IccFrontendmigrationApi.js.map +0 -0
  89. package/{icc-api → dist/icc-api}/api/IccGroupApi.d.ts +0 -0
  90. package/{icc-api → dist/icc-api}/api/IccGroupApi.js +0 -0
  91. package/{icc-api → dist/icc-api}/api/IccGroupApi.js.map +0 -0
  92. package/{icc-api → dist/icc-api}/api/IccHcpartyApi.d.ts +0 -0
  93. package/{icc-api → dist/icc-api}/api/IccHcpartyApi.js +0 -0
  94. package/{icc-api → dist/icc-api}/api/IccHcpartyApi.js.map +0 -0
  95. package/{icc-api → dist/icc-api}/api/IccHelementApi.d.ts +0 -0
  96. package/{icc-api → dist/icc-api}/api/IccHelementApi.js +0 -0
  97. package/{icc-api → dist/icc-api}/api/IccHelementApi.js.map +0 -0
  98. package/{icc-api → dist/icc-api}/api/IccIcureApi.d.ts +0 -0
  99. package/{icc-api → dist/icc-api}/api/IccIcureApi.js +0 -0
  100. package/{icc-api → dist/icc-api}/api/IccIcureApi.js.map +0 -0
  101. package/{icc-api → dist/icc-api}/api/IccInsuranceApi.d.ts +0 -0
  102. package/{icc-api → dist/icc-api}/api/IccInsuranceApi.js +0 -0
  103. package/{icc-api → dist/icc-api}/api/IccInsuranceApi.js.map +0 -0
  104. package/{icc-api → dist/icc-api}/api/IccInvoiceApi.d.ts +0 -0
  105. package/{icc-api → dist/icc-api}/api/IccInvoiceApi.js +0 -0
  106. package/{icc-api → dist/icc-api}/api/IccInvoiceApi.js.map +0 -0
  107. package/{icc-api → dist/icc-api}/api/IccKeywordApi.d.ts +0 -0
  108. package/{icc-api → dist/icc-api}/api/IccKeywordApi.js +0 -0
  109. package/{icc-api → dist/icc-api}/api/IccKeywordApi.js.map +0 -0
  110. package/{icc-api → dist/icc-api}/api/IccMaintenanceTaskApi.d.ts +0 -0
  111. package/{icc-api → dist/icc-api}/api/IccMaintenanceTaskApi.js +0 -0
  112. package/{icc-api → dist/icc-api}/api/IccMaintenanceTaskApi.js.map +0 -0
  113. package/{icc-api → dist/icc-api}/api/IccMedexApi.d.ts +0 -0
  114. package/{icc-api → dist/icc-api}/api/IccMedexApi.js +0 -0
  115. package/{icc-api → dist/icc-api}/api/IccMedexApi.js.map +0 -0
  116. package/{icc-api → dist/icc-api}/api/IccMedicallocationApi.d.ts +0 -0
  117. package/{icc-api → dist/icc-api}/api/IccMedicallocationApi.js +0 -0
  118. package/{icc-api → dist/icc-api}/api/IccMedicallocationApi.js.map +0 -0
  119. package/{icc-api → dist/icc-api}/api/IccMessageApi.d.ts +0 -0
  120. package/{icc-api → dist/icc-api}/api/IccMessageApi.js +0 -0
  121. package/{icc-api → dist/icc-api}/api/IccMessageApi.js.map +0 -0
  122. package/{icc-api → dist/icc-api}/api/IccPatientApi.d.ts +0 -0
  123. package/{icc-api → dist/icc-api}/api/IccPatientApi.js +0 -0
  124. package/{icc-api → dist/icc-api}/api/IccPatientApi.js.map +0 -0
  125. package/{icc-api → dist/icc-api}/api/IccPermissionApi.d.ts +0 -0
  126. package/{icc-api → dist/icc-api}/api/IccPermissionApi.js +0 -0
  127. package/{icc-api → dist/icc-api}/api/IccPermissionApi.js.map +0 -0
  128. package/{icc-api → dist/icc-api}/api/IccPlaceApi.d.ts +0 -0
  129. package/{icc-api → dist/icc-api}/api/IccPlaceApi.js +0 -0
  130. package/{icc-api → dist/icc-api}/api/IccPlaceApi.js.map +0 -0
  131. package/{icc-api → dist/icc-api}/api/IccPubsubApi.d.ts +0 -0
  132. package/{icc-api → dist/icc-api}/api/IccPubsubApi.js +0 -0
  133. package/{icc-api → dist/icc-api}/api/IccPubsubApi.js.map +0 -0
  134. package/{icc-api → dist/icc-api}/api/IccReceiptApi.d.ts +0 -0
  135. package/{icc-api → dist/icc-api}/api/IccReceiptApi.js +0 -0
  136. package/{icc-api → dist/icc-api}/api/IccReceiptApi.js.map +0 -0
  137. package/{icc-api → dist/icc-api}/api/IccReplicationApi.d.ts +0 -0
  138. package/{icc-api → dist/icc-api}/api/IccReplicationApi.js +0 -0
  139. package/{icc-api → dist/icc-api}/api/IccReplicationApi.js.map +0 -0
  140. package/{icc-api → dist/icc-api}/api/IccTarificationApi.d.ts +0 -0
  141. package/{icc-api → dist/icc-api}/api/IccTarificationApi.js +0 -0
  142. package/{icc-api → dist/icc-api}/api/IccTarificationApi.js.map +0 -0
  143. package/{icc-api → dist/icc-api}/api/IccTimeTableApi.d.ts +0 -0
  144. package/{icc-api → dist/icc-api}/api/IccTimeTableApi.js +0 -0
  145. package/{icc-api → dist/icc-api}/api/IccTimeTableApi.js.map +0 -0
  146. package/{icc-api → dist/icc-api}/api/IccTmpApi.d.ts +0 -0
  147. package/{icc-api → dist/icc-api}/api/IccTmpApi.js +0 -0
  148. package/{icc-api → dist/icc-api}/api/IccTmpApi.js.map +0 -0
  149. package/{icc-api → dist/icc-api}/api/IccUserApi.d.ts +0 -0
  150. package/{icc-api → dist/icc-api}/api/IccUserApi.js +0 -0
  151. package/{icc-api → dist/icc-api}/api/IccUserApi.js.map +0 -0
  152. package/{icc-api → dist/icc-api}/api/XHR.d.ts +0 -0
  153. package/{icc-api → dist/icc-api}/api/XHR.js +0 -0
  154. package/{icc-api → dist/icc-api}/api/XHR.js.map +0 -0
  155. package/{icc-api → dist/icc-api}/iccApi.d.ts +0 -0
  156. package/{icc-api → dist/icc-api}/iccApi.js +0 -0
  157. package/{icc-api → dist/icc-api}/iccApi.js.map +0 -0
  158. package/{icc-api → dist/icc-api}/index.d.ts +0 -0
  159. package/{icc-api → dist/icc-api}/index.js +0 -0
  160. package/{icc-api → dist/icc-api}/index.js.map +0 -0
  161. package/{icc-api → dist/icc-api}/model/AbstractFilterCode.d.ts +0 -0
  162. package/{icc-api → dist/icc-api}/model/AbstractFilterCode.js +0 -0
  163. package/{icc-api → dist/icc-api}/model/AbstractFilterCode.js.map +0 -0
  164. package/{icc-api → dist/icc-api}/model/AbstractFilterContact.d.ts +0 -0
  165. package/{icc-api → dist/icc-api}/model/AbstractFilterContact.js +0 -0
  166. package/{icc-api → dist/icc-api}/model/AbstractFilterContact.js.map +0 -0
  167. package/{icc-api → dist/icc-api}/model/AbstractFilterDevice.d.ts +0 -0
  168. package/{icc-api → dist/icc-api}/model/AbstractFilterDevice.js +0 -0
  169. package/{icc-api → dist/icc-api}/model/AbstractFilterDevice.js.map +0 -0
  170. package/{icc-api → dist/icc-api}/model/AbstractFilterHealthElement.d.ts +0 -0
  171. package/{icc-api → dist/icc-api}/model/AbstractFilterHealthElement.js +0 -0
  172. package/{icc-api → dist/icc-api}/model/AbstractFilterHealthElement.js.map +0 -0
  173. package/{icc-api → dist/icc-api}/model/AbstractFilterHealthcareParty.d.ts +0 -0
  174. package/{icc-api → dist/icc-api}/model/AbstractFilterHealthcareParty.js +0 -0
  175. package/{icc-api → dist/icc-api}/model/AbstractFilterHealthcareParty.js.map +0 -0
  176. package/{icc-api → dist/icc-api}/model/AbstractFilterInvoice.d.ts +0 -0
  177. package/{icc-api → dist/icc-api}/model/AbstractFilterInvoice.js +0 -0
  178. package/{icc-api → dist/icc-api}/model/AbstractFilterInvoice.js.map +0 -0
  179. package/{icc-api → dist/icc-api}/model/AbstractFilterMaintenanceTask.d.ts +0 -0
  180. package/{icc-api → dist/icc-api}/model/AbstractFilterMaintenanceTask.js +0 -0
  181. package/{icc-api → dist/icc-api}/model/AbstractFilterMaintenanceTask.js.map +0 -0
  182. package/{icc-api → dist/icc-api}/model/AbstractFilterPatient.d.ts +0 -0
  183. package/{icc-api → dist/icc-api}/model/AbstractFilterPatient.js +0 -0
  184. package/{icc-api → dist/icc-api}/model/AbstractFilterPatient.js.map +0 -0
  185. package/{icc-api → dist/icc-api}/model/AbstractFilterService.d.ts +0 -0
  186. package/{icc-api → dist/icc-api}/model/AbstractFilterService.js +0 -0
  187. package/{icc-api → dist/icc-api}/model/AbstractFilterService.js.map +0 -0
  188. package/{icc-api → dist/icc-api}/model/AbstractFilterUser.d.ts +0 -0
  189. package/{icc-api → dist/icc-api}/model/AbstractFilterUser.js +0 -0
  190. package/{icc-api → dist/icc-api}/model/AbstractFilterUser.js.map +0 -0
  191. package/{icc-api → dist/icc-api}/model/AccessLog.d.ts +0 -0
  192. package/{icc-api → dist/icc-api}/model/AccessLog.js +0 -0
  193. package/{icc-api → dist/icc-api}/model/AccessLog.js.map +0 -0
  194. package/{icc-api → dist/icc-api}/model/AddedDocument.d.ts +0 -0
  195. package/{icc-api → dist/icc-api}/model/AddedDocument.js +0 -0
  196. package/{icc-api → dist/icc-api}/model/AddedDocument.js.map +0 -0
  197. package/{icc-api → dist/icc-api}/model/Address.d.ts +0 -0
  198. package/{icc-api → dist/icc-api}/model/Address.js +0 -0
  199. package/{icc-api → dist/icc-api}/model/Address.js.map +0 -0
  200. package/{icc-api → dist/icc-api}/model/AdministrationQuantity.d.ts +0 -0
  201. package/{icc-api → dist/icc-api}/model/AdministrationQuantity.js +0 -0
  202. package/{icc-api → dist/icc-api}/model/AdministrationQuantity.js.map +0 -0
  203. package/{icc-api → dist/icc-api}/model/Agenda.d.ts +0 -0
  204. package/{icc-api → dist/icc-api}/model/Agenda.js +0 -0
  205. package/{icc-api → dist/icc-api}/model/Agenda.js.map +0 -0
  206. package/{icc-api → dist/icc-api}/model/AgreementAppendix.d.ts +0 -0
  207. package/{icc-api → dist/icc-api}/model/AgreementAppendix.js +0 -0
  208. package/{icc-api → dist/icc-api}/model/AgreementAppendix.js.map +0 -0
  209. package/{icc-api → dist/icc-api}/model/Amp.d.ts +0 -0
  210. package/{icc-api → dist/icc-api}/model/Amp.js +0 -0
  211. package/{icc-api → dist/icc-api}/model/Amp.js.map +0 -0
  212. package/{icc-api → dist/icc-api}/model/AmpComponent.d.ts +0 -0
  213. package/{icc-api → dist/icc-api}/model/AmpComponent.js +0 -0
  214. package/{icc-api → dist/icc-api}/model/AmpComponent.js.map +0 -0
  215. package/{icc-api → dist/icc-api}/model/Ampp.d.ts +0 -0
  216. package/{icc-api → dist/icc-api}/model/Ampp.js +0 -0
  217. package/{icc-api → dist/icc-api}/model/Ampp.js.map +0 -0
  218. package/{icc-api → dist/icc-api}/model/AmppComponent.d.ts +0 -0
  219. package/{icc-api → dist/icc-api}/model/AmppComponent.js +0 -0
  220. package/{icc-api → dist/icc-api}/model/AmppComponent.js.map +0 -0
  221. package/{icc-api → dist/icc-api}/model/Annotation.d.ts +0 -0
  222. package/{icc-api → dist/icc-api}/model/Annotation.js +0 -0
  223. package/{icc-api → dist/icc-api}/model/Annotation.js.map +0 -0
  224. package/{icc-api → dist/icc-api}/model/ApplicationSettings.d.ts +0 -0
  225. package/{icc-api → dist/icc-api}/model/ApplicationSettings.js +0 -0
  226. package/{icc-api → dist/icc-api}/model/ApplicationSettings.js.map +0 -0
  227. package/{icc-api → dist/icc-api}/model/Appointment.d.ts +0 -0
  228. package/{icc-api → dist/icc-api}/model/Appointment.js +0 -0
  229. package/{icc-api → dist/icc-api}/model/Appointment.js.map +0 -0
  230. package/{icc-api → dist/icc-api}/model/AppointmentImport.d.ts +0 -0
  231. package/{icc-api → dist/icc-api}/model/AppointmentImport.js +0 -0
  232. package/{icc-api → dist/icc-api}/model/AppointmentImport.js.map +0 -0
  233. package/{icc-api → dist/icc-api}/model/AppointmentTypeAndPlace.d.ts +0 -0
  234. package/{icc-api → dist/icc-api}/model/AppointmentTypeAndPlace.js +0 -0
  235. package/{icc-api → dist/icc-api}/model/AppointmentTypeAndPlace.js.map +0 -0
  236. package/{icc-api → dist/icc-api}/model/Article.d.ts +0 -0
  237. package/{icc-api → dist/icc-api}/model/Article.js +0 -0
  238. package/{icc-api → dist/icc-api}/model/Article.js.map +0 -0
  239. package/{icc-api → dist/icc-api}/model/Atc.d.ts +0 -0
  240. package/{icc-api → dist/icc-api}/model/Atc.js +0 -0
  241. package/{icc-api → dist/icc-api}/model/Atc.js.map +0 -0
  242. package/{icc-api → dist/icc-api}/model/Attachment.d.ts +0 -0
  243. package/{icc-api → dist/icc-api}/model/Attachment.js +0 -0
  244. package/{icc-api → dist/icc-api}/model/Attachment.js.map +0 -0
  245. package/{icc-api → dist/icc-api}/model/AuthenticationResponse.d.ts +0 -0
  246. package/{icc-api → dist/icc-api}/model/AuthenticationResponse.js +0 -0
  247. package/{icc-api → dist/icc-api}/model/AuthenticationResponse.js.map +0 -0
  248. package/{icc-api → dist/icc-api}/model/AuthenticationToken.d.ts +0 -0
  249. package/{icc-api → dist/icc-api}/model/AuthenticationToken.js +0 -0
  250. package/{icc-api → dist/icc-api}/model/AuthenticationToken.js.map +0 -0
  251. package/{icc-api → dist/icc-api}/model/Basic.d.ts +0 -0
  252. package/{icc-api → dist/icc-api}/model/Basic.js +0 -0
  253. package/{icc-api → dist/icc-api}/model/Basic.js.map +0 -0
  254. package/{icc-api → dist/icc-api}/model/Body.d.ts +0 -0
  255. package/{icc-api → dist/icc-api}/model/Body.js +0 -0
  256. package/{icc-api → dist/icc-api}/model/Body.js.map +0 -0
  257. package/{icc-api → dist/icc-api}/model/Body1.d.ts +0 -0
  258. package/{icc-api → dist/icc-api}/model/Body1.js +0 -0
  259. package/{icc-api → dist/icc-api}/model/Body1.js.map +0 -0
  260. package/{icc-api → dist/icc-api}/model/Body2.d.ts +0 -0
  261. package/{icc-api → dist/icc-api}/model/Body2.js +0 -0
  262. package/{icc-api → dist/icc-api}/model/Body2.js.map +0 -0
  263. package/{icc-api → dist/icc-api}/model/Body3.d.ts +0 -0
  264. package/{icc-api → dist/icc-api}/model/Body3.js +0 -0
  265. package/{icc-api → dist/icc-api}/model/Body3.js.map +0 -0
  266. package/{icc-api → dist/icc-api}/model/ByteArray.d.ts +0 -0
  267. package/{icc-api → dist/icc-api}/model/ByteArray.js +0 -0
  268. package/{icc-api → dist/icc-api}/model/ByteArray.js.map +0 -0
  269. package/{icc-api → dist/icc-api}/model/CalendarItem.d.ts +0 -0
  270. package/{icc-api → dist/icc-api}/model/CalendarItem.js +0 -0
  271. package/{icc-api → dist/icc-api}/model/CalendarItem.js.map +0 -0
  272. package/{icc-api → dist/icc-api}/model/CalendarItemTag.d.ts +0 -0
  273. package/{icc-api → dist/icc-api}/model/CalendarItemTag.js +0 -0
  274. package/{icc-api → dist/icc-api}/model/CalendarItemTag.js.map +0 -0
  275. package/{icc-api → dist/icc-api}/model/CalendarItemType.d.ts +0 -0
  276. package/{icc-api → dist/icc-api}/model/CalendarItemType.js +0 -0
  277. package/{icc-api → dist/icc-api}/model/CalendarItemType.js.map +0 -0
  278. package/{icc-api → dist/icc-api}/model/CareTeamMember.d.ts +0 -0
  279. package/{icc-api → dist/icc-api}/model/CareTeamMember.js +0 -0
  280. package/{icc-api → dist/icc-api}/model/CareTeamMember.js.map +0 -0
  281. package/{icc-api → dist/icc-api}/model/CareTeamMembership.d.ts +0 -0
  282. package/{icc-api → dist/icc-api}/model/CareTeamMembership.js +0 -0
  283. package/{icc-api → dist/icc-api}/model/CareTeamMembership.js.map +0 -0
  284. package/{icc-api → dist/icc-api}/model/CheckSMFPatientResult.d.ts +0 -0
  285. package/{icc-api → dist/icc-api}/model/CheckSMFPatientResult.js +0 -0
  286. package/{icc-api → dist/icc-api}/model/CheckSMFPatientResult.js.map +0 -0
  287. package/{icc-api → dist/icc-api}/model/Classification.d.ts +0 -0
  288. package/{icc-api → dist/icc-api}/model/Classification.js +0 -0
  289. package/{icc-api → dist/icc-api}/model/Classification.js.map +0 -0
  290. package/{icc-api → dist/icc-api}/model/ClassificationTemplate.d.ts +0 -0
  291. package/{icc-api → dist/icc-api}/model/ClassificationTemplate.js +0 -0
  292. package/{icc-api → dist/icc-api}/model/ClassificationTemplate.js.map +0 -0
  293. package/{icc-api → dist/icc-api}/model/Code.d.ts +0 -0
  294. package/{icc-api → dist/icc-api}/model/Code.js +0 -0
  295. package/{icc-api → dist/icc-api}/model/Code.js.map +0 -0
  296. package/{icc-api → dist/icc-api}/model/CodeStub.d.ts +0 -0
  297. package/{icc-api → dist/icc-api}/model/CodeStub.js +0 -0
  298. package/{icc-api → dist/icc-api}/model/CodeStub.js.map +0 -0
  299. package/{icc-api → dist/icc-api}/model/CodeType.d.ts +0 -0
  300. package/{icc-api → dist/icc-api}/model/CodeType.js +0 -0
  301. package/{icc-api → dist/icc-api}/model/CodeType.js.map +0 -0
  302. package/{icc-api → dist/icc-api}/model/CommentedClassification.d.ts +0 -0
  303. package/{icc-api → dist/icc-api}/model/CommentedClassification.js +0 -0
  304. package/{icc-api → dist/icc-api}/model/CommentedClassification.js.map +0 -0
  305. package/{icc-api → dist/icc-api}/model/Commercialization.d.ts +0 -0
  306. package/{icc-api → dist/icc-api}/model/Commercialization.js +0 -0
  307. package/{icc-api → dist/icc-api}/model/Commercialization.js.map +0 -0
  308. package/{icc-api → dist/icc-api}/model/Company.d.ts +0 -0
  309. package/{icc-api → dist/icc-api}/model/Company.js +0 -0
  310. package/{icc-api → dist/icc-api}/model/Company.js.map +0 -0
  311. package/{icc-api → dist/icc-api}/model/Contact.d.ts +0 -0
  312. package/{icc-api → dist/icc-api}/model/Contact.js +0 -0
  313. package/{icc-api → dist/icc-api}/model/Contact.js.map +0 -0
  314. package/{icc-api → dist/icc-api}/model/Content.d.ts +0 -0
  315. package/{icc-api → dist/icc-api}/model/Content.js +0 -0
  316. package/{icc-api → dist/icc-api}/model/Content.js.map +0 -0
  317. package/{icc-api → dist/icc-api}/model/Copayment.d.ts +0 -0
  318. package/{icc-api → dist/icc-api}/model/Copayment.js +0 -0
  319. package/{icc-api → dist/icc-api}/model/Copayment.js.map +0 -0
  320. package/{icc-api → dist/icc-api}/model/Data.d.ts +0 -0
  321. package/{icc-api → dist/icc-api}/model/Data.js +0 -0
  322. package/{icc-api → dist/icc-api}/model/Data.js.map +0 -0
  323. package/{icc-api → dist/icc-api}/model/DataOwnerRegistrationSuccess.d.ts +0 -0
  324. package/{icc-api → dist/icc-api}/model/DataOwnerRegistrationSuccess.js +0 -0
  325. package/{icc-api → dist/icc-api}/model/DataOwnerRegistrationSuccess.js.map +0 -0
  326. package/{icc-api → dist/icc-api}/model/DatabaseInfo.d.ts +0 -0
  327. package/{icc-api → dist/icc-api}/model/DatabaseInfo.js +0 -0
  328. package/{icc-api → dist/icc-api}/model/DatabaseInfo.js.map +0 -0
  329. package/{icc-api → dist/icc-api}/model/DatabaseInitialisation.d.ts +0 -0
  330. package/{icc-api → dist/icc-api}/model/DatabaseInitialisation.js +0 -0
  331. package/{icc-api → dist/icc-api}/model/DatabaseInitialisation.js.map +0 -0
  332. package/{icc-api → dist/icc-api}/model/DatabaseSynchronization.d.ts +0 -0
  333. package/{icc-api → dist/icc-api}/model/DatabaseSynchronization.js +0 -0
  334. package/{icc-api → dist/icc-api}/model/DatabaseSynchronization.js.map +0 -0
  335. package/{icc-api → dist/icc-api}/model/Delegation.d.ts +0 -0
  336. package/{icc-api → dist/icc-api}/model/Delegation.js +0 -0
  337. package/{icc-api → dist/icc-api}/model/Delegation.js.map +0 -0
  338. package/{icc-api → dist/icc-api}/model/Device.d.ts +0 -0
  339. package/{icc-api → dist/icc-api}/model/Device.js +0 -0
  340. package/{icc-api → dist/icc-api}/model/Device.js.map +0 -0
  341. package/{icc-api → dist/icc-api}/model/DeviceType.d.ts +0 -0
  342. package/{icc-api → dist/icc-api}/model/DeviceType.js +0 -0
  343. package/{icc-api → dist/icc-api}/model/DeviceType.js.map +0 -0
  344. package/{icc-api → dist/icc-api}/model/DiaryNoteExportInfo.d.ts +0 -0
  345. package/{icc-api → dist/icc-api}/model/DiaryNoteExportInfo.js +0 -0
  346. package/{icc-api → dist/icc-api}/model/DiaryNoteExportInfo.js.map +0 -0
  347. package/{icc-api → dist/icc-api}/model/Dmpp.d.ts +0 -0
  348. package/{icc-api → dist/icc-api}/model/Dmpp.js +0 -0
  349. package/{icc-api → dist/icc-api}/model/Dmpp.js.map +0 -0
  350. package/{icc-api → dist/icc-api}/model/DocIdentifier.d.ts +0 -0
  351. package/{icc-api → dist/icc-api}/model/DocIdentifier.js +0 -0
  352. package/{icc-api → dist/icc-api}/model/DocIdentifier.js.map +0 -0
  353. package/{icc-api → dist/icc-api}/model/Document.d.ts +0 -0
  354. package/{icc-api → dist/icc-api}/model/Document.js +0 -0
  355. package/{icc-api → dist/icc-api}/model/Document.js.map +0 -0
  356. package/{icc-api → dist/icc-api}/model/DocumentGroup.d.ts +0 -0
  357. package/{icc-api → dist/icc-api}/model/DocumentGroup.js +0 -0
  358. package/{icc-api → dist/icc-api}/model/DocumentGroup.js.map +0 -0
  359. package/{icc-api → dist/icc-api}/model/DocumentTemplate.d.ts +0 -0
  360. package/{icc-api → dist/icc-api}/model/DocumentTemplate.js +0 -0
  361. package/{icc-api → dist/icc-api}/model/DocumentTemplate.js.map +0 -0
  362. package/{icc-api → dist/icc-api}/model/Duration.d.ts +0 -0
  363. package/{icc-api → dist/icc-api}/model/Duration.js +0 -0
  364. package/{icc-api → dist/icc-api}/model/Duration.js.map +0 -0
  365. package/{icc-api → dist/icc-api}/model/EIDItem.d.ts +0 -0
  366. package/{icc-api → dist/icc-api}/model/EIDItem.js +0 -0
  367. package/{icc-api → dist/icc-api}/model/EIDItem.js.map +0 -0
  368. package/{icc-api → dist/icc-api}/model/Editor.d.ts +0 -0
  369. package/{icc-api → dist/icc-api}/model/Editor.js +0 -0
  370. package/{icc-api → dist/icc-api}/model/Editor.js.map +0 -0
  371. package/{icc-api → dist/icc-api}/model/EfactInvoice.d.ts +0 -0
  372. package/{icc-api → dist/icc-api}/model/EfactInvoice.js +0 -0
  373. package/{icc-api → dist/icc-api}/model/EfactInvoice.js.map +0 -0
  374. package/{icc-api → dist/icc-api}/model/EmailOrSmsMessage.d.ts +0 -0
  375. package/{icc-api → dist/icc-api}/model/EmailOrSmsMessage.js +0 -0
  376. package/{icc-api → dist/icc-api}/model/EmailOrSmsMessage.js.map +0 -0
  377. package/{icc-api → dist/icc-api}/model/EmailTemplate.d.ts +0 -0
  378. package/{icc-api → dist/icc-api}/model/EmailTemplate.js +0 -0
  379. package/{icc-api → dist/icc-api}/model/EmailTemplate.js.map +0 -0
  380. package/{icc-api → dist/icc-api}/model/Employer.d.ts +0 -0
  381. package/{icc-api → dist/icc-api}/model/Employer.js +0 -0
  382. package/{icc-api → dist/icc-api}/model/Employer.js.map +0 -0
  383. package/{icc-api → dist/icc-api}/model/EmploymentInfo.d.ts +0 -0
  384. package/{icc-api → dist/icc-api}/model/EmploymentInfo.js +0 -0
  385. package/{icc-api → dist/icc-api}/model/EmploymentInfo.js.map +0 -0
  386. package/{icc-api → dist/icc-api}/model/EntityReference.d.ts +0 -0
  387. package/{icc-api → dist/icc-api}/model/EntityReference.js +0 -0
  388. package/{icc-api → dist/icc-api}/model/EntityReference.js.map +0 -0
  389. package/{icc-api → dist/icc-api}/model/EntityTemplate.d.ts +0 -0
  390. package/{icc-api → dist/icc-api}/model/EntityTemplate.js +0 -0
  391. package/{icc-api → dist/icc-api}/model/EntityTemplate.js.map +0 -0
  392. package/{icc-api → dist/icc-api}/model/Episode.d.ts +0 -0
  393. package/{icc-api → dist/icc-api}/model/Episode.js +0 -0
  394. package/{icc-api → dist/icc-api}/model/Episode.js.map +0 -0
  395. package/{icc-api → dist/icc-api}/model/FilterChainCode.d.ts +0 -0
  396. package/{icc-api → dist/icc-api}/model/FilterChainCode.js +0 -0
  397. package/{icc-api → dist/icc-api}/model/FilterChainCode.js.map +0 -0
  398. package/{icc-api → dist/icc-api}/model/FilterChainContact.d.ts +0 -0
  399. package/{icc-api → dist/icc-api}/model/FilterChainContact.js +0 -0
  400. package/{icc-api → dist/icc-api}/model/FilterChainContact.js.map +0 -0
  401. package/{icc-api → dist/icc-api}/model/FilterChainDevice.d.ts +0 -0
  402. package/{icc-api → dist/icc-api}/model/FilterChainDevice.js +0 -0
  403. package/{icc-api → dist/icc-api}/model/FilterChainDevice.js.map +0 -0
  404. package/{icc-api → dist/icc-api}/model/FilterChainHealthElement.d.ts +0 -0
  405. package/{icc-api → dist/icc-api}/model/FilterChainHealthElement.js +0 -0
  406. package/{icc-api → dist/icc-api}/model/FilterChainHealthElement.js.map +0 -0
  407. package/{icc-api → dist/icc-api}/model/FilterChainHealthcareParty.d.ts +0 -0
  408. package/{icc-api → dist/icc-api}/model/FilterChainHealthcareParty.js +0 -0
  409. package/{icc-api → dist/icc-api}/model/FilterChainHealthcareParty.js.map +0 -0
  410. package/{icc-api → dist/icc-api}/model/FilterChainInvoice.d.ts +0 -0
  411. package/{icc-api → dist/icc-api}/model/FilterChainInvoice.js +0 -0
  412. package/{icc-api → dist/icc-api}/model/FilterChainInvoice.js.map +0 -0
  413. package/{icc-api → dist/icc-api}/model/FilterChainMaintenanceTask.d.ts +0 -0
  414. package/{icc-api → dist/icc-api}/model/FilterChainMaintenanceTask.js +0 -0
  415. package/{icc-api → dist/icc-api}/model/FilterChainMaintenanceTask.js.map +0 -0
  416. package/{icc-api → dist/icc-api}/model/FilterChainPatient.d.ts +0 -0
  417. package/{icc-api → dist/icc-api}/model/FilterChainPatient.js +0 -0
  418. package/{icc-api → dist/icc-api}/model/FilterChainPatient.js.map +0 -0
  419. package/{icc-api → dist/icc-api}/model/FilterChainService.d.ts +0 -0
  420. package/{icc-api → dist/icc-api}/model/FilterChainService.js +0 -0
  421. package/{icc-api → dist/icc-api}/model/FilterChainService.js.map +0 -0
  422. package/{icc-api → dist/icc-api}/model/FilterChainUser.d.ts +0 -0
  423. package/{icc-api → dist/icc-api}/model/FilterChainUser.js +0 -0
  424. package/{icc-api → dist/icc-api}/model/FilterChainUser.js.map +0 -0
  425. package/{icc-api → dist/icc-api}/model/FinancialInstitutionInformation.d.ts +0 -0
  426. package/{icc-api → dist/icc-api}/model/FinancialInstitutionInformation.js +0 -0
  427. package/{icc-api → dist/icc-api}/model/FinancialInstitutionInformation.js.map +0 -0
  428. package/{icc-api → dist/icc-api}/model/FlatRateTarification.d.ts +0 -0
  429. package/{icc-api → dist/icc-api}/model/FlatRateTarification.js +0 -0
  430. package/{icc-api → dist/icc-api}/model/FlatRateTarification.js.map +0 -0
  431. package/{icc-api → dist/icc-api}/model/FlowItem.d.ts +0 -0
  432. package/{icc-api → dist/icc-api}/model/FlowItem.js +0 -0
  433. package/{icc-api → dist/icc-api}/model/FlowItem.js.map +0 -0
  434. package/{icc-api → dist/icc-api}/model/Form.d.ts +0 -0
  435. package/{icc-api → dist/icc-api}/model/Form.js +0 -0
  436. package/{icc-api → dist/icc-api}/model/Form.js.map +0 -0
  437. package/{icc-api → dist/icc-api}/model/FormColumn.d.ts +0 -0
  438. package/{icc-api → dist/icc-api}/model/FormColumn.js +0 -0
  439. package/{icc-api → dist/icc-api}/model/FormColumn.js.map +0 -0
  440. package/{icc-api → dist/icc-api}/model/FormDataOption.d.ts +0 -0
  441. package/{icc-api → dist/icc-api}/model/FormDataOption.js +0 -0
  442. package/{icc-api → dist/icc-api}/model/FormDataOption.js.map +0 -0
  443. package/{icc-api → dist/icc-api}/model/FormLayout.d.ts +0 -0
  444. package/{icc-api → dist/icc-api}/model/FormLayout.js +0 -0
  445. package/{icc-api → dist/icc-api}/model/FormLayout.js.map +0 -0
  446. package/{icc-api → dist/icc-api}/model/FormLayoutData.d.ts +0 -0
  447. package/{icc-api → dist/icc-api}/model/FormLayoutData.js +0 -0
  448. package/{icc-api → dist/icc-api}/model/FormLayoutData.js.map +0 -0
  449. package/{icc-api → dist/icc-api}/model/FormPlanning.d.ts +0 -0
  450. package/{icc-api → dist/icc-api}/model/FormPlanning.js +0 -0
  451. package/{icc-api → dist/icc-api}/model/FormPlanning.js.map +0 -0
  452. package/{icc-api → dist/icc-api}/model/FormSection.d.ts +0 -0
  453. package/{icc-api → dist/icc-api}/model/FormSection.js +0 -0
  454. package/{icc-api → dist/icc-api}/model/FormSection.js.map +0 -0
  455. package/{icc-api → dist/icc-api}/model/FormTemplate.d.ts +0 -0
  456. package/{icc-api → dist/icc-api}/model/FormTemplate.js +0 -0
  457. package/{icc-api → dist/icc-api}/model/FormTemplate.js.map +0 -0
  458. package/{icc-api → dist/icc-api}/model/FormTemplateLayout.d.ts +0 -0
  459. package/{icc-api → dist/icc-api}/model/FormTemplateLayout.js +0 -0
  460. package/{icc-api → dist/icc-api}/model/FormTemplateLayout.js.map +0 -0
  461. package/{icc-api → dist/icc-api}/model/Formula.d.ts +0 -0
  462. package/{icc-api → dist/icc-api}/model/Formula.js +0 -0
  463. package/{icc-api → dist/icc-api}/model/Formula.js.map +0 -0
  464. package/{icc-api → dist/icc-api}/model/FrontEndMigration.d.ts +0 -0
  465. package/{icc-api → dist/icc-api}/model/FrontEndMigration.js +0 -0
  466. package/{icc-api → dist/icc-api}/model/FrontEndMigration.js.map +0 -0
  467. package/{icc-api → dist/icc-api}/model/Group.d.ts +0 -0
  468. package/{icc-api → dist/icc-api}/model/Group.js +0 -0
  469. package/{icc-api → dist/icc-api}/model/Group.js.map +0 -0
  470. package/{icc-api → dist/icc-api}/model/GroupDatabasesInfo.d.ts +0 -0
  471. package/{icc-api → dist/icc-api}/model/GroupDatabasesInfo.js +0 -0
  472. package/{icc-api → dist/icc-api}/model/GroupDatabasesInfo.js.map +0 -0
  473. package/{icc-api → dist/icc-api}/model/GuiCode.d.ts +0 -0
  474. package/{icc-api → dist/icc-api}/model/GuiCode.js +0 -0
  475. package/{icc-api → dist/icc-api}/model/GuiCode.js.map +0 -0
  476. package/{icc-api → dist/icc-api}/model/GuiCodeType.d.ts +0 -0
  477. package/{icc-api → dist/icc-api}/model/GuiCodeType.js +0 -0
  478. package/{icc-api → dist/icc-api}/model/GuiCodeType.js.map +0 -0
  479. package/{icc-api → dist/icc-api}/model/HealthElement.d.ts +0 -0
  480. package/{icc-api → dist/icc-api}/model/HealthElement.js +0 -0
  481. package/{icc-api → dist/icc-api}/model/HealthElement.js.map +0 -0
  482. package/{icc-api → dist/icc-api}/model/HealthcareParty.d.ts +0 -0
  483. package/{icc-api → dist/icc-api}/model/HealthcareParty.js +0 -0
  484. package/{icc-api → dist/icc-api}/model/HealthcareParty.js.map +0 -0
  485. package/{icc-api → dist/icc-api}/model/HealthcarePartyHistoryStatus.d.ts +0 -0
  486. package/{icc-api → dist/icc-api}/model/HealthcarePartyHistoryStatus.js +0 -0
  487. package/{icc-api → dist/icc-api}/model/HealthcarePartyHistoryStatus.js.map +0 -0
  488. package/{icc-api → dist/icc-api}/model/IcureStub.d.ts +0 -0
  489. package/{icc-api → dist/icc-api}/model/IcureStub.js +0 -0
  490. package/{icc-api → dist/icc-api}/model/IcureStub.js.map +0 -0
  491. package/{icc-api → dist/icc-api}/model/IdWithRev.d.ts +0 -0
  492. package/{icc-api → dist/icc-api}/model/IdWithRev.js +0 -0
  493. package/{icc-api → dist/icc-api}/model/IdWithRev.js.map +0 -0
  494. package/{icc-api → dist/icc-api}/model/Identifier.d.ts +0 -0
  495. package/{icc-api → dist/icc-api}/model/Identifier.js +0 -0
  496. package/{icc-api → dist/icc-api}/model/Identifier.js.map +0 -0
  497. package/{icc-api → dist/icc-api}/model/IdentityDocumentReader.d.ts +0 -0
  498. package/{icc-api → dist/icc-api}/model/IdentityDocumentReader.js +0 -0
  499. package/{icc-api → dist/icc-api}/model/IdentityDocumentReader.js.map +0 -0
  500. package/{icc-api → dist/icc-api}/model/ImportMapping.d.ts +0 -0
  501. package/{icc-api → dist/icc-api}/model/ImportMapping.js +0 -0
  502. package/{icc-api → dist/icc-api}/model/ImportMapping.js.map +0 -0
  503. package/{icc-api → dist/icc-api}/model/ImportResult.d.ts +0 -0
  504. package/{icc-api → dist/icc-api}/model/ImportResult.js +0 -0
  505. package/{icc-api → dist/icc-api}/model/ImportResult.js.map +0 -0
  506. package/{icc-api → dist/icc-api}/model/IncapacityExportInfo.d.ts +0 -0
  507. package/{icc-api → dist/icc-api}/model/IncapacityExportInfo.js +0 -0
  508. package/{icc-api → dist/icc-api}/model/IncapacityExportInfo.js.map +0 -0
  509. package/{icc-api → dist/icc-api}/model/IndexedIdentifier.d.ts +0 -0
  510. package/{icc-api → dist/icc-api}/model/IndexedIdentifier.js +0 -0
  511. package/{icc-api → dist/icc-api}/model/IndexedIdentifier.js.map +0 -0
  512. package/{icc-api → dist/icc-api}/model/IndexingInfo.d.ts +0 -0
  513. package/{icc-api → dist/icc-api}/model/IndexingInfo.js +0 -0
  514. package/{icc-api → dist/icc-api}/model/IndexingInfo.js.map +0 -0
  515. package/{icc-api → dist/icc-api}/model/Ingredient.d.ts +0 -0
  516. package/{icc-api → dist/icc-api}/model/Ingredient.js +0 -0
  517. package/{icc-api → dist/icc-api}/model/Ingredient.js.map +0 -0
  518. package/{icc-api → dist/icc-api}/model/Insurability.d.ts +0 -0
  519. package/{icc-api → dist/icc-api}/model/Insurability.js +0 -0
  520. package/{icc-api → dist/icc-api}/model/Insurability.js.map +0 -0
  521. package/{icc-api → dist/icc-api}/model/Insurance.d.ts +0 -0
  522. package/{icc-api → dist/icc-api}/model/Insurance.js +0 -0
  523. package/{icc-api → dist/icc-api}/model/Insurance.js.map +0 -0
  524. package/{icc-api → dist/icc-api}/model/Invoice.d.ts +0 -0
  525. package/{icc-api → dist/icc-api}/model/Invoice.js +0 -0
  526. package/{icc-api → dist/icc-api}/model/Invoice.js.map +0 -0
  527. package/{icc-api → dist/icc-api}/model/InvoiceItem.d.ts +0 -0
  528. package/{icc-api → dist/icc-api}/model/InvoiceItem.js +0 -0
  529. package/{icc-api → dist/icc-api}/model/InvoiceItem.js.map +0 -0
  530. package/{icc-api → dist/icc-api}/model/InvoiceSender.d.ts +0 -0
  531. package/{icc-api → dist/icc-api}/model/InvoiceSender.js +0 -0
  532. package/{icc-api → dist/icc-api}/model/InvoiceSender.js.map +0 -0
  533. package/{icc-api → dist/icc-api}/model/InvoicesBatch.d.ts +0 -0
  534. package/{icc-api → dist/icc-api}/model/InvoicesBatch.js +0 -0
  535. package/{icc-api → dist/icc-api}/model/InvoicesBatch.js.map +0 -0
  536. package/{icc-api → dist/icc-api}/model/InvoicingCode.d.ts +0 -0
  537. package/{icc-api → dist/icc-api}/model/InvoicingCode.js +0 -0
  538. package/{icc-api → dist/icc-api}/model/InvoicingCode.js.map +0 -0
  539. package/{icc-api → dist/icc-api}/model/Keyword.d.ts +0 -0
  540. package/{icc-api → dist/icc-api}/model/Keyword.js +0 -0
  541. package/{icc-api → dist/icc-api}/model/Keyword.js.map +0 -0
  542. package/{icc-api → dist/icc-api}/model/KeywordSubword.d.ts +0 -0
  543. package/{icc-api → dist/icc-api}/model/KeywordSubword.js +0 -0
  544. package/{icc-api → dist/icc-api}/model/KeywordSubword.js.map +0 -0
  545. package/{icc-api → dist/icc-api}/model/LabelledOccurence.d.ts +0 -0
  546. package/{icc-api → dist/icc-api}/model/LabelledOccurence.js +0 -0
  547. package/{icc-api → dist/icc-api}/model/LabelledOccurence.js.map +0 -0
  548. package/{icc-api → dist/icc-api}/model/LetterValue.d.ts +0 -0
  549. package/{icc-api → dist/icc-api}/model/LetterValue.js +0 -0
  550. package/{icc-api → dist/icc-api}/model/LetterValue.js.map +0 -0
  551. package/{icc-api → dist/icc-api}/model/ListOfIds.d.ts +0 -0
  552. package/{icc-api → dist/icc-api}/model/ListOfIds.js +0 -0
  553. package/{icc-api → dist/icc-api}/model/ListOfIds.js.map +0 -0
  554. package/{icc-api → dist/icc-api}/model/ListOfProperties.d.ts +0 -0
  555. package/{icc-api → dist/icc-api}/model/ListOfProperties.js +0 -0
  556. package/{icc-api → dist/icc-api}/model/ListOfProperties.js.map +0 -0
  557. package/{icc-api → dist/icc-api}/model/LoginCredentials.d.ts +0 -0
  558. package/{icc-api → dist/icc-api}/model/LoginCredentials.js +0 -0
  559. package/{icc-api → dist/icc-api}/model/LoginCredentials.js.map +0 -0
  560. package/{icc-api → dist/icc-api}/model/MaintenanceTask.d.ts +0 -0
  561. package/{icc-api → dist/icc-api}/model/MaintenanceTask.js +0 -0
  562. package/{icc-api → dist/icc-api}/model/MaintenanceTask.js.map +0 -0
  563. package/{icc-api → dist/icc-api}/model/MapOfIds.d.ts +0 -0
  564. package/{icc-api → dist/icc-api}/model/MapOfIds.js +0 -0
  565. package/{icc-api → dist/icc-api}/model/MapOfIds.js.map +0 -0
  566. package/{icc-api → dist/icc-api}/model/Measure.d.ts +0 -0
  567. package/{icc-api → dist/icc-api}/model/Measure.js +0 -0
  568. package/{icc-api → dist/icc-api}/model/Measure.js.map +0 -0
  569. package/{icc-api → dist/icc-api}/model/MedexInfo.d.ts +0 -0
  570. package/{icc-api → dist/icc-api}/model/MedexInfo.js +0 -0
  571. package/{icc-api → dist/icc-api}/model/MedexInfo.js.map +0 -0
  572. package/{icc-api → dist/icc-api}/model/MedicalHouseContract.d.ts +0 -0
  573. package/{icc-api → dist/icc-api}/model/MedicalHouseContract.js +0 -0
  574. package/{icc-api → dist/icc-api}/model/MedicalHouseContract.js.map +0 -0
  575. package/{icc-api → dist/icc-api}/model/MedicalLocation.d.ts +0 -0
  576. package/{icc-api → dist/icc-api}/model/MedicalLocation.js +0 -0
  577. package/{icc-api → dist/icc-api}/model/MedicalLocation.js.map +0 -0
  578. package/{icc-api → dist/icc-api}/model/Medication.d.ts +0 -0
  579. package/{icc-api → dist/icc-api}/model/Medication.js +0 -0
  580. package/{icc-api → dist/icc-api}/model/Medication.js.map +0 -0
  581. package/{icc-api → dist/icc-api}/model/MedicationSchemeExportInfo.d.ts +0 -0
  582. package/{icc-api → dist/icc-api}/model/MedicationSchemeExportInfo.js +0 -0
  583. package/{icc-api → dist/icc-api}/model/MedicationSchemeExportInfo.js.map +0 -0
  584. package/{icc-api → dist/icc-api}/model/Medicinalproduct.d.ts +0 -0
  585. package/{icc-api → dist/icc-api}/model/Medicinalproduct.js +0 -0
  586. package/{icc-api → dist/icc-api}/model/Medicinalproduct.js.map +0 -0
  587. package/{icc-api → dist/icc-api}/model/Message.d.ts +0 -0
  588. package/{icc-api → dist/icc-api}/model/Message.js +0 -0
  589. package/{icc-api → dist/icc-api}/model/Message.js.map +0 -0
  590. package/{icc-api → dist/icc-api}/model/MessageReadStatus.d.ts +0 -0
  591. package/{icc-api → dist/icc-api}/model/MessageReadStatus.js +0 -0
  592. package/{icc-api → dist/icc-api}/model/MessageReadStatus.js.map +0 -0
  593. package/{icc-api → dist/icc-api}/model/MessageWithBatch.d.ts +0 -0
  594. package/{icc-api → dist/icc-api}/model/MessageWithBatch.js +0 -0
  595. package/{icc-api → dist/icc-api}/model/MessageWithBatch.js.map +0 -0
  596. package/{icc-api → dist/icc-api}/model/MessagesReadStatusUpdate.d.ts +0 -0
  597. package/{icc-api → dist/icc-api}/model/MessagesReadStatusUpdate.js +0 -0
  598. package/{icc-api → dist/icc-api}/model/MessagesReadStatusUpdate.js.map +0 -0
  599. package/{icc-api → dist/icc-api}/model/MikronoAppointmentTypeRest.d.ts +0 -0
  600. package/{icc-api → dist/icc-api}/model/MikronoAppointmentTypeRest.js +0 -0
  601. package/{icc-api → dist/icc-api}/model/MikronoAppointmentTypeRest.js.map +0 -0
  602. package/{icc-api → dist/icc-api}/model/MikronoCredentials.d.ts +0 -0
  603. package/{icc-api → dist/icc-api}/model/MikronoCredentials.js +0 -0
  604. package/{icc-api → dist/icc-api}/model/MikronoCredentials.js.map +0 -0
  605. package/{icc-api → dist/icc-api}/model/MimeAttachment.d.ts +0 -0
  606. package/{icc-api → dist/icc-api}/model/MimeAttachment.js +0 -0
  607. package/{icc-api → dist/icc-api}/model/MimeAttachment.js.map +0 -0
  608. package/{icc-api → dist/icc-api}/model/ModelHelper.d.ts +0 -0
  609. package/{icc-api → dist/icc-api}/model/ModelHelper.js +0 -0
  610. package/{icc-api → dist/icc-api}/model/ModelHelper.js.map +0 -0
  611. package/{icc-api → dist/icc-api}/model/Nmp.d.ts +0 -0
  612. package/{icc-api → dist/icc-api}/model/Nmp.js +0 -0
  613. package/{icc-api → dist/icc-api}/model/Nmp.js.map +0 -0
  614. package/{icc-api → dist/icc-api}/model/NoGenericPrescriptionReason.d.ts +0 -0
  615. package/{icc-api → dist/icc-api}/model/NoGenericPrescriptionReason.js +0 -0
  616. package/{icc-api → dist/icc-api}/model/NoGenericPrescriptionReason.js.map +0 -0
  617. package/{icc-api → dist/icc-api}/model/NoSwitchReason.d.ts +0 -0
  618. package/{icc-api → dist/icc-api}/model/NoSwitchReason.js +0 -0
  619. package/{icc-api → dist/icc-api}/model/NoSwitchReason.js.map +0 -0
  620. package/{icc-api → dist/icc-api}/model/NumeratorRange.d.ts +0 -0
  621. package/{icc-api → dist/icc-api}/model/NumeratorRange.js +0 -0
  622. package/{icc-api → dist/icc-api}/model/NumeratorRange.js.map +0 -0
  623. package/{icc-api → dist/icc-api}/model/PackagingType.d.ts +0 -0
  624. package/{icc-api → dist/icc-api}/model/PackagingType.js +0 -0
  625. package/{icc-api → dist/icc-api}/model/PackagingType.js.map +0 -0
  626. package/{icc-api → dist/icc-api}/model/PaginatedDocumentKeyIdPairObject.d.ts +0 -0
  627. package/{icc-api → dist/icc-api}/model/PaginatedDocumentKeyIdPairObject.js +0 -0
  628. package/{icc-api → dist/icc-api}/model/PaginatedDocumentKeyIdPairObject.js.map +0 -0
  629. package/{icc-api → dist/icc-api}/model/PaginatedListAccessLog.d.ts +0 -0
  630. package/{icc-api → dist/icc-api}/model/PaginatedListAccessLog.js +0 -0
  631. package/{icc-api → dist/icc-api}/model/PaginatedListAccessLog.js.map +0 -0
  632. package/{icc-api → dist/icc-api}/model/PaginatedListAmp.d.ts +0 -0
  633. package/{icc-api → dist/icc-api}/model/PaginatedListAmp.js +0 -0
  634. package/{icc-api → dist/icc-api}/model/PaginatedListAmp.js.map +0 -0
  635. package/{icc-api → dist/icc-api}/model/PaginatedListClassification.d.ts +0 -0
  636. package/{icc-api → dist/icc-api}/model/PaginatedListClassification.js +0 -0
  637. package/{icc-api → dist/icc-api}/model/PaginatedListClassification.js.map +0 -0
  638. package/{icc-api → dist/icc-api}/model/PaginatedListClassificationTemplate.d.ts +0 -0
  639. package/{icc-api → dist/icc-api}/model/PaginatedListClassificationTemplate.js +0 -0
  640. package/{icc-api → dist/icc-api}/model/PaginatedListClassificationTemplate.js.map +0 -0
  641. package/{icc-api → dist/icc-api}/model/PaginatedListCode.d.ts +0 -0
  642. package/{icc-api → dist/icc-api}/model/PaginatedListCode.js +0 -0
  643. package/{icc-api → dist/icc-api}/model/PaginatedListCode.js.map +0 -0
  644. package/{icc-api → dist/icc-api}/model/PaginatedListContact.d.ts +0 -0
  645. package/{icc-api → dist/icc-api}/model/PaginatedListContact.js +0 -0
  646. package/{icc-api → dist/icc-api}/model/PaginatedListContact.js.map +0 -0
  647. package/{icc-api → dist/icc-api}/model/PaginatedListDevice.d.ts +0 -0
  648. package/{icc-api → dist/icc-api}/model/PaginatedListDevice.js +0 -0
  649. package/{icc-api → dist/icc-api}/model/PaginatedListDevice.js.map +0 -0
  650. package/{icc-api → dist/icc-api}/model/PaginatedListDocument.d.ts +0 -0
  651. package/{icc-api → dist/icc-api}/model/PaginatedListDocument.js +0 -0
  652. package/{icc-api → dist/icc-api}/model/PaginatedListDocument.js.map +0 -0
  653. package/{icc-api → dist/icc-api}/model/PaginatedListEntityTemplate.d.ts +0 -0
  654. package/{icc-api → dist/icc-api}/model/PaginatedListEntityTemplate.js +0 -0
  655. package/{icc-api → dist/icc-api}/model/PaginatedListEntityTemplate.js.map +0 -0
  656. package/{icc-api → dist/icc-api}/model/PaginatedListForm.d.ts +0 -0
  657. package/{icc-api → dist/icc-api}/model/PaginatedListForm.js +0 -0
  658. package/{icc-api → dist/icc-api}/model/PaginatedListForm.js.map +0 -0
  659. package/{icc-api → dist/icc-api}/model/PaginatedListGroup.d.ts +0 -0
  660. package/{icc-api → dist/icc-api}/model/PaginatedListGroup.js +0 -0
  661. package/{icc-api → dist/icc-api}/model/PaginatedListGroup.js.map +0 -0
  662. package/{icc-api → dist/icc-api}/model/PaginatedListHealthElement.d.ts +0 -0
  663. package/{icc-api → dist/icc-api}/model/PaginatedListHealthElement.js +0 -0
  664. package/{icc-api → dist/icc-api}/model/PaginatedListHealthElement.js.map +0 -0
  665. package/{icc-api → dist/icc-api}/model/PaginatedListHealthcareParty.d.ts +0 -0
  666. package/{icc-api → dist/icc-api}/model/PaginatedListHealthcareParty.js +0 -0
  667. package/{icc-api → dist/icc-api}/model/PaginatedListHealthcareParty.js.map +0 -0
  668. package/{icc-api → dist/icc-api}/model/PaginatedListInvoice.d.ts +0 -0
  669. package/{icc-api → dist/icc-api}/model/PaginatedListInvoice.js +0 -0
  670. package/{icc-api → dist/icc-api}/model/PaginatedListInvoice.js.map +0 -0
  671. package/{icc-api → dist/icc-api}/model/PaginatedListMaintenanceTask.d.ts +0 -0
  672. package/{icc-api → dist/icc-api}/model/PaginatedListMaintenanceTask.js +0 -0
  673. package/{icc-api → dist/icc-api}/model/PaginatedListMaintenanceTask.js.map +0 -0
  674. package/{icc-api → dist/icc-api}/model/PaginatedListMessage.d.ts +0 -0
  675. package/{icc-api → dist/icc-api}/model/PaginatedListMessage.js +0 -0
  676. package/{icc-api → dist/icc-api}/model/PaginatedListMessage.js.map +0 -0
  677. package/{icc-api → dist/icc-api}/model/PaginatedListNmp.d.ts +0 -0
  678. package/{icc-api → dist/icc-api}/model/PaginatedListNmp.js +0 -0
  679. package/{icc-api → dist/icc-api}/model/PaginatedListNmp.js.map +0 -0
  680. package/{icc-api → dist/icc-api}/model/PaginatedListPatient.d.ts +0 -0
  681. package/{icc-api → dist/icc-api}/model/PaginatedListPatient.js +0 -0
  682. package/{icc-api → dist/icc-api}/model/PaginatedListPatient.js.map +0 -0
  683. package/{icc-api → dist/icc-api}/model/PaginatedListService.d.ts +0 -0
  684. package/{icc-api → dist/icc-api}/model/PaginatedListService.js +0 -0
  685. package/{icc-api → dist/icc-api}/model/PaginatedListService.js.map +0 -0
  686. package/{icc-api → dist/icc-api}/model/PaginatedListString.d.ts +0 -0
  687. package/{icc-api → dist/icc-api}/model/PaginatedListString.js +0 -0
  688. package/{icc-api → dist/icc-api}/model/PaginatedListString.js.map +0 -0
  689. package/{icc-api → dist/icc-api}/model/PaginatedListTarification.d.ts +0 -0
  690. package/{icc-api → dist/icc-api}/model/PaginatedListTarification.js +0 -0
  691. package/{icc-api → dist/icc-api}/model/PaginatedListTarification.js.map +0 -0
  692. package/{icc-api → dist/icc-api}/model/PaginatedListUser.d.ts +0 -0
  693. package/{icc-api → dist/icc-api}/model/PaginatedListUser.js +0 -0
  694. package/{icc-api → dist/icc-api}/model/PaginatedListUser.js.map +0 -0
  695. package/{icc-api → dist/icc-api}/model/PaginatedListVmp.d.ts +0 -0
  696. package/{icc-api → dist/icc-api}/model/PaginatedListVmp.js +0 -0
  697. package/{icc-api → dist/icc-api}/model/PaginatedListVmp.js.map +0 -0
  698. package/{icc-api → dist/icc-api}/model/PaginatedListVmpGroup.d.ts +0 -0
  699. package/{icc-api → dist/icc-api}/model/PaginatedListVmpGroup.js +0 -0
  700. package/{icc-api → dist/icc-api}/model/PaginatedListVmpGroup.js.map +0 -0
  701. package/{icc-api → dist/icc-api}/model/Paragraph.d.ts +0 -0
  702. package/{icc-api → dist/icc-api}/model/Paragraph.js +0 -0
  703. package/{icc-api → dist/icc-api}/model/Paragraph.js.map +0 -0
  704. package/{icc-api → dist/icc-api}/model/ParagraphAgreement.d.ts +0 -0
  705. package/{icc-api → dist/icc-api}/model/ParagraphAgreement.js +0 -0
  706. package/{icc-api → dist/icc-api}/model/ParagraphAgreement.js.map +0 -0
  707. package/{icc-api → dist/icc-api}/model/Partnership.d.ts +0 -0
  708. package/{icc-api → dist/icc-api}/model/Partnership.js +0 -0
  709. package/{icc-api → dist/icc-api}/model/Partnership.js.map +0 -0
  710. package/{icc-api → dist/icc-api}/model/Patient.d.ts +0 -0
  711. package/{icc-api → dist/icc-api}/model/Patient.js +0 -0
  712. package/{icc-api → dist/icc-api}/model/Patient.js.map +0 -0
  713. package/{icc-api → dist/icc-api}/model/PatientByHcPartyGenderEducationProfession.d.ts +0 -0
  714. package/{icc-api → dist/icc-api}/model/PatientByHcPartyGenderEducationProfession.js +0 -0
  715. package/{icc-api → dist/icc-api}/model/PatientByHcPartyGenderEducationProfession.js.map +0 -0
  716. package/{icc-api → dist/icc-api}/model/PatientHealthCareParty.d.ts +0 -0
  717. package/{icc-api → dist/icc-api}/model/PatientHealthCareParty.js +0 -0
  718. package/{icc-api → dist/icc-api}/model/PatientHealthCareParty.js.map +0 -0
  719. package/{icc-api → dist/icc-api}/model/PatientRegistrationSuccess.d.ts +0 -0
  720. package/{icc-api → dist/icc-api}/model/PatientRegistrationSuccess.js +0 -0
  721. package/{icc-api → dist/icc-api}/model/PatientRegistrationSuccess.js.map +0 -0
  722. package/{icc-api → dist/icc-api}/model/Payment.d.ts +0 -0
  723. package/{icc-api → dist/icc-api}/model/Payment.js +0 -0
  724. package/{icc-api → dist/icc-api}/model/Payment.js.map +0 -0
  725. package/{icc-api → dist/icc-api}/model/Periodicity.d.ts +0 -0
  726. package/{icc-api → dist/icc-api}/model/Periodicity.js +0 -0
  727. package/{icc-api → dist/icc-api}/model/Periodicity.js.map +0 -0
  728. package/{icc-api → dist/icc-api}/model/Permission.d.ts +0 -0
  729. package/{icc-api → dist/icc-api}/model/Permission.js +0 -0
  730. package/{icc-api → dist/icc-api}/model/Permission.js.map +0 -0
  731. package/{icc-api → dist/icc-api}/model/PermissionCriterion.d.ts +0 -0
  732. package/{icc-api → dist/icc-api}/model/PermissionCriterion.js +0 -0
  733. package/{icc-api → dist/icc-api}/model/PermissionCriterion.js.map +0 -0
  734. package/{icc-api → dist/icc-api}/model/PermissionItem.d.ts +0 -0
  735. package/{icc-api → dist/icc-api}/model/PermissionItem.js +0 -0
  736. package/{icc-api → dist/icc-api}/model/PermissionItem.js.map +0 -0
  737. package/{icc-api → dist/icc-api}/model/PersonName.d.ts +0 -0
  738. package/{icc-api → dist/icc-api}/model/PersonName.js +0 -0
  739. package/{icc-api → dist/icc-api}/model/PersonName.js.map +0 -0
  740. package/{icc-api → dist/icc-api}/model/PharmaceuticalForm.d.ts +0 -0
  741. package/{icc-api → dist/icc-api}/model/PharmaceuticalForm.js +0 -0
  742. package/{icc-api → dist/icc-api}/model/PharmaceuticalForm.js.map +0 -0
  743. package/{icc-api → dist/icc-api}/model/PharmaceuticalFormStub.d.ts +0 -0
  744. package/{icc-api → dist/icc-api}/model/PharmaceuticalFormStub.js +0 -0
  745. package/{icc-api → dist/icc-api}/model/PharmaceuticalFormStub.js.map +0 -0
  746. package/{icc-api → dist/icc-api}/model/Place.d.ts +0 -0
  747. package/{icc-api → dist/icc-api}/model/Place.js +0 -0
  748. package/{icc-api → dist/icc-api}/model/Place.js.map +0 -0
  749. package/{icc-api → dist/icc-api}/model/PlanOfAction.d.ts +0 -0
  750. package/{icc-api → dist/icc-api}/model/PlanOfAction.js +0 -0
  751. package/{icc-api → dist/icc-api}/model/PlanOfAction.js.map +0 -0
  752. package/{icc-api → dist/icc-api}/model/Predicate.d.ts +0 -0
  753. package/{icc-api → dist/icc-api}/model/Predicate.js +0 -0
  754. package/{icc-api → dist/icc-api}/model/Predicate.js.map +0 -0
  755. package/{icc-api → dist/icc-api}/model/Pricing.d.ts +0 -0
  756. package/{icc-api → dist/icc-api}/model/Pricing.js +0 -0
  757. package/{icc-api → dist/icc-api}/model/Pricing.js.map +0 -0
  758. package/{icc-api → dist/icc-api}/model/PropertyStub.d.ts +0 -0
  759. package/{icc-api → dist/icc-api}/model/PropertyStub.js +0 -0
  760. package/{icc-api → dist/icc-api}/model/PropertyStub.js.map +0 -0
  761. package/{icc-api → dist/icc-api}/model/PropertyTypeStub.d.ts +0 -0
  762. package/{icc-api → dist/icc-api}/model/PropertyTypeStub.js +0 -0
  763. package/{icc-api → dist/icc-api}/model/PropertyTypeStub.js.map +0 -0
  764. package/{icc-api → dist/icc-api}/model/PublicKey.d.ts +0 -0
  765. package/{icc-api → dist/icc-api}/model/PublicKey.js +0 -0
  766. package/{icc-api → dist/icc-api}/model/PublicKey.js.map +0 -0
  767. package/{icc-api → dist/icc-api}/model/Quantity.d.ts +0 -0
  768. package/{icc-api → dist/icc-api}/model/Quantity.js +0 -0
  769. package/{icc-api → dist/icc-api}/model/Quantity.js.map +0 -0
  770. package/{icc-api → dist/icc-api}/model/Receipt.d.ts +0 -0
  771. package/{icc-api → dist/icc-api}/model/Receipt.js +0 -0
  772. package/{icc-api → dist/icc-api}/model/Receipt.js.map +0 -0
  773. package/{icc-api → dist/icc-api}/model/ReferralPeriod.d.ts +0 -0
  774. package/{icc-api → dist/icc-api}/model/ReferralPeriod.js +0 -0
  775. package/{icc-api → dist/icc-api}/model/ReferralPeriod.js.map +0 -0
  776. package/{icc-api → dist/icc-api}/model/RegimenItem.d.ts +0 -0
  777. package/{icc-api → dist/icc-api}/model/RegimenItem.js +0 -0
  778. package/{icc-api → dist/icc-api}/model/RegimenItem.js.map +0 -0
  779. package/{icc-api → dist/icc-api}/model/RegistrationInformation.d.ts +0 -0
  780. package/{icc-api → dist/icc-api}/model/RegistrationInformation.js +0 -0
  781. package/{icc-api → dist/icc-api}/model/RegistrationInformation.js.map +0 -0
  782. package/{icc-api → dist/icc-api}/model/RegistrationSuccess.d.ts +0 -0
  783. package/{icc-api → dist/icc-api}/model/RegistrationSuccess.js +0 -0
  784. package/{icc-api → dist/icc-api}/model/RegistrationSuccess.js.map +0 -0
  785. package/{icc-api → dist/icc-api}/model/Reimbursement.d.ts +0 -0
  786. package/{icc-api → dist/icc-api}/model/Reimbursement.js +0 -0
  787. package/{icc-api → dist/icc-api}/model/Reimbursement.js.map +0 -0
  788. package/{icc-api → dist/icc-api}/model/ReimbursementCriterion.d.ts +0 -0
  789. package/{icc-api → dist/icc-api}/model/ReimbursementCriterion.js +0 -0
  790. package/{icc-api → dist/icc-api}/model/ReimbursementCriterion.js.map +0 -0
  791. package/{icc-api → dist/icc-api}/model/Remote.d.ts +0 -0
  792. package/{icc-api → dist/icc-api}/model/Remote.js +0 -0
  793. package/{icc-api → dist/icc-api}/model/Remote.js.map +0 -0
  794. package/{icc-api → dist/icc-api}/model/RemoteAuthentication.d.ts +0 -0
  795. package/{icc-api → dist/icc-api}/model/RemoteAuthentication.js +0 -0
  796. package/{icc-api → dist/icc-api}/model/RemoteAuthentication.js.map +0 -0
  797. package/{icc-api → dist/icc-api}/model/Renewal.d.ts +0 -0
  798. package/{icc-api → dist/icc-api}/model/Renewal.js +0 -0
  799. package/{icc-api → dist/icc-api}/model/Renewal.js.map +0 -0
  800. package/{icc-api → dist/icc-api}/model/ReplicateCommand.d.ts +0 -0
  801. package/{icc-api → dist/icc-api}/model/ReplicateCommand.js +0 -0
  802. package/{icc-api → dist/icc-api}/model/ReplicateCommand.js.map +0 -0
  803. package/{icc-api → dist/icc-api}/model/Replication.d.ts +0 -0
  804. package/{icc-api → dist/icc-api}/model/Replication.js +0 -0
  805. package/{icc-api → dist/icc-api}/model/Replication.js.map +0 -0
  806. package/{icc-api → dist/icc-api}/model/ReplicationInfo.d.ts +0 -0
  807. package/{icc-api → dist/icc-api}/model/ReplicationInfo.js +0 -0
  808. package/{icc-api → dist/icc-api}/model/ReplicationInfo.js.map +0 -0
  809. package/{icc-api → dist/icc-api}/model/ReplicationStats.d.ts +0 -0
  810. package/{icc-api → dist/icc-api}/model/ReplicationStats.js +0 -0
  811. package/{icc-api → dist/icc-api}/model/ReplicationStats.js.map +0 -0
  812. package/{icc-api → dist/icc-api}/model/ReplicatorDocument.d.ts +0 -0
  813. package/{icc-api → dist/icc-api}/model/ReplicatorDocument.js +0 -0
  814. package/{icc-api → dist/icc-api}/model/ReplicatorDocument.js.map +0 -0
  815. package/{icc-api → dist/icc-api}/model/ReplicatorResponse.d.ts +0 -0
  816. package/{icc-api → dist/icc-api}/model/ReplicatorResponse.js +0 -0
  817. package/{icc-api → dist/icc-api}/model/ReplicatorResponse.js.map +0 -0
  818. package/{icc-api → dist/icc-api}/model/ResultInfo.d.ts +0 -0
  819. package/{icc-api → dist/icc-api}/model/ResultInfo.js +0 -0
  820. package/{icc-api → dist/icc-api}/model/ResultInfo.js.map +0 -0
  821. package/{icc-api → dist/icc-api}/model/RevisionInfo.d.ts +0 -0
  822. package/{icc-api → dist/icc-api}/model/RevisionInfo.js +0 -0
  823. package/{icc-api → dist/icc-api}/model/RevisionInfo.js.map +0 -0
  824. package/{icc-api → dist/icc-api}/model/Right.d.ts +0 -0
  825. package/{icc-api → dist/icc-api}/model/Right.js +0 -0
  826. package/{icc-api → dist/icc-api}/model/Right.js.map +0 -0
  827. package/{icc-api → dist/icc-api}/model/RouteOfAdministration.d.ts +0 -0
  828. package/{icc-api → dist/icc-api}/model/RouteOfAdministration.js +0 -0
  829. package/{icc-api → dist/icc-api}/model/RouteOfAdministration.js.map +0 -0
  830. package/{icc-api → dist/icc-api}/model/SamText.d.ts +0 -0
  831. package/{icc-api → dist/icc-api}/model/SamText.js +0 -0
  832. package/{icc-api → dist/icc-api}/model/SamText.js.map +0 -0
  833. package/{icc-api → dist/icc-api}/model/SamVersion.d.ts +0 -0
  834. package/{icc-api → dist/icc-api}/model/SamVersion.js +0 -0
  835. package/{icc-api → dist/icc-api}/model/SamVersion.js.map +0 -0
  836. package/{icc-api → dist/icc-api}/model/SchoolingInfo.d.ts +0 -0
  837. package/{icc-api → dist/icc-api}/model/SchoolingInfo.js +0 -0
  838. package/{icc-api → dist/icc-api}/model/SchoolingInfo.js.map +0 -0
  839. package/{icc-api → dist/icc-api}/model/Section.d.ts +0 -0
  840. package/{icc-api → dist/icc-api}/model/Section.js +0 -0
  841. package/{icc-api → dist/icc-api}/model/Section.js.map +0 -0
  842. package/{icc-api → dist/icc-api}/model/Service.d.ts +0 -0
  843. package/{icc-api → dist/icc-api}/model/Service.js +0 -0
  844. package/{icc-api → dist/icc-api}/model/Service.js.map +0 -0
  845. package/{icc-api → dist/icc-api}/model/ServiceLink.d.ts +0 -0
  846. package/{icc-api → dist/icc-api}/model/ServiceLink.js +0 -0
  847. package/{icc-api → dist/icc-api}/model/ServiceLink.js.map +0 -0
  848. package/{icc-api → dist/icc-api}/model/SoftwareMedicalFileExport.d.ts +0 -0
  849. package/{icc-api → dist/icc-api}/model/SoftwareMedicalFileExport.js +0 -0
  850. package/{icc-api → dist/icc-api}/model/SoftwareMedicalFileExport.js.map +0 -0
  851. package/{icc-api → dist/icc-api}/model/StandardSubstance.d.ts +0 -0
  852. package/{icc-api → dist/icc-api}/model/StandardSubstance.js +0 -0
  853. package/{icc-api → dist/icc-api}/model/StandardSubstance.js.map +0 -0
  854. package/{icc-api → dist/icc-api}/model/StrengthRange.d.ts +0 -0
  855. package/{icc-api → dist/icc-api}/model/StrengthRange.js +0 -0
  856. package/{icc-api → dist/icc-api}/model/StrengthRange.js.map +0 -0
  857. package/{icc-api → dist/icc-api}/model/StructureElement.d.ts +0 -0
  858. package/{icc-api → dist/icc-api}/model/StructureElement.js +0 -0
  859. package/{icc-api → dist/icc-api}/model/StructureElement.js.map +0 -0
  860. package/{icc-api → dist/icc-api}/model/SubContact.d.ts +0 -0
  861. package/{icc-api → dist/icc-api}/model/SubContact.js +0 -0
  862. package/{icc-api → dist/icc-api}/model/SubContact.js.map +0 -0
  863. package/{icc-api → dist/icc-api}/model/Substance.d.ts +0 -0
  864. package/{icc-api → dist/icc-api}/model/Substance.js +0 -0
  865. package/{icc-api → dist/icc-api}/model/Substance.js.map +0 -0
  866. package/{icc-api → dist/icc-api}/model/SubstanceStub.d.ts +0 -0
  867. package/{icc-api → dist/icc-api}/model/SubstanceStub.js +0 -0
  868. package/{icc-api → dist/icc-api}/model/SubstanceStub.js.map +0 -0
  869. package/{icc-api → dist/icc-api}/model/Substanceproduct.d.ts +0 -0
  870. package/{icc-api → dist/icc-api}/model/Substanceproduct.js +0 -0
  871. package/{icc-api → dist/icc-api}/model/Substanceproduct.js.map +0 -0
  872. package/{icc-api → dist/icc-api}/model/Suggest.d.ts +0 -0
  873. package/{icc-api → dist/icc-api}/model/Suggest.js +0 -0
  874. package/{icc-api → dist/icc-api}/model/Suggest.js.map +0 -0
  875. package/{icc-api → dist/icc-api}/model/SumehrContent.d.ts +0 -0
  876. package/{icc-api → dist/icc-api}/model/SumehrContent.js +0 -0
  877. package/{icc-api → dist/icc-api}/model/SumehrContent.js.map +0 -0
  878. package/{icc-api → dist/icc-api}/model/SumehrExportInfo.d.ts +0 -0
  879. package/{icc-api → dist/icc-api}/model/SumehrExportInfo.js +0 -0
  880. package/{icc-api → dist/icc-api}/model/SumehrExportInfo.js.map +0 -0
  881. package/{icc-api → dist/icc-api}/model/SumehrValidity.d.ts +0 -0
  882. package/{icc-api → dist/icc-api}/model/SumehrValidity.js +0 -0
  883. package/{icc-api → dist/icc-api}/model/SumehrValidity.js.map +0 -0
  884. package/{icc-api → dist/icc-api}/model/SupplyProblem.d.ts +0 -0
  885. package/{icc-api → dist/icc-api}/model/SupplyProblem.js +0 -0
  886. package/{icc-api → dist/icc-api}/model/SupplyProblem.js.map +0 -0
  887. package/{icc-api → dist/icc-api}/model/Suspension.d.ts +0 -0
  888. package/{icc-api → dist/icc-api}/model/Suspension.js +0 -0
  889. package/{icc-api → dist/icc-api}/model/Suspension.js.map +0 -0
  890. package/{icc-api → dist/icc-api}/model/Tag.d.ts +0 -0
  891. package/{icc-api → dist/icc-api}/model/Tag.js +0 -0
  892. package/{icc-api → dist/icc-api}/model/Tag.js.map +0 -0
  893. package/{icc-api → dist/icc-api}/model/Tarification.d.ts +0 -0
  894. package/{icc-api → dist/icc-api}/model/Tarification.js +0 -0
  895. package/{icc-api → dist/icc-api}/model/Tarification.js.map +0 -0
  896. package/{icc-api → dist/icc-api}/model/Telecom.d.ts +0 -0
  897. package/{icc-api → dist/icc-api}/model/Telecom.js +0 -0
  898. package/{icc-api → dist/icc-api}/model/Telecom.js.map +0 -0
  899. package/{icc-api → dist/icc-api}/model/TimeSeries.d.ts +0 -0
  900. package/{icc-api → dist/icc-api}/model/TimeSeries.js +0 -0
  901. package/{icc-api → dist/icc-api}/model/TimeSeries.js.map +0 -0
  902. package/{icc-api → dist/icc-api}/model/TimeTable.d.ts +0 -0
  903. package/{icc-api → dist/icc-api}/model/TimeTable.js +0 -0
  904. package/{icc-api → dist/icc-api}/model/TimeTable.js.map +0 -0
  905. package/{icc-api → dist/icc-api}/model/TimeTableHour.d.ts +0 -0
  906. package/{icc-api → dist/icc-api}/model/TimeTableHour.js +0 -0
  907. package/{icc-api → dist/icc-api}/model/TimeTableHour.js.map +0 -0
  908. package/{icc-api → dist/icc-api}/model/TimeTableItem.d.ts +0 -0
  909. package/{icc-api → dist/icc-api}/model/TimeTableItem.js +0 -0
  910. package/{icc-api → dist/icc-api}/model/TimeTableItem.js.map +0 -0
  911. package/{icc-api → dist/icc-api}/model/TokenWithGroup.d.ts +0 -0
  912. package/{icc-api → dist/icc-api}/model/TokenWithGroup.js +0 -0
  913. package/{icc-api → dist/icc-api}/model/TokenWithGroup.js.map +0 -0
  914. package/{icc-api → dist/icc-api}/model/TypedValueObject.d.ts +0 -0
  915. package/{icc-api → dist/icc-api}/model/TypedValueObject.js +0 -0
  916. package/{icc-api → dist/icc-api}/model/TypedValueObject.js.map +0 -0
  917. package/{icc-api → dist/icc-api}/model/Unit.d.ts +0 -0
  918. package/{icc-api → dist/icc-api}/model/Unit.js +0 -0
  919. package/{icc-api → dist/icc-api}/model/Unit.js.map +0 -0
  920. package/{icc-api → dist/icc-api}/model/User.d.ts +0 -0
  921. package/{icc-api → dist/icc-api}/model/User.js +0 -0
  922. package/{icc-api → dist/icc-api}/model/User.js.map +0 -0
  923. package/{icc-api → dist/icc-api}/model/UserAndHealthcareParty.d.ts +0 -0
  924. package/{icc-api → dist/icc-api}/model/UserAndHealthcareParty.js +0 -0
  925. package/{icc-api → dist/icc-api}/model/UserAndHealthcareParty.js.map +0 -0
  926. package/{icc-api → dist/icc-api}/model/UserGroup.d.ts +0 -0
  927. package/{icc-api → dist/icc-api}/model/UserGroup.js +0 -0
  928. package/{icc-api → dist/icc-api}/model/UserGroup.js.map +0 -0
  929. package/{icc-api → dist/icc-api}/model/Valorisation.d.ts +0 -0
  930. package/{icc-api → dist/icc-api}/model/Valorisation.js +0 -0
  931. package/{icc-api → dist/icc-api}/model/Valorisation.js.map +0 -0
  932. package/{icc-api → dist/icc-api}/model/Verse.d.ts +0 -0
  933. package/{icc-api → dist/icc-api}/model/Verse.js +0 -0
  934. package/{icc-api → dist/icc-api}/model/Verse.js.map +0 -0
  935. package/{icc-api → dist/icc-api}/model/VirtualForm.d.ts +0 -0
  936. package/{icc-api → dist/icc-api}/model/VirtualForm.js +0 -0
  937. package/{icc-api → dist/icc-api}/model/VirtualForm.js.map +0 -0
  938. package/{icc-api → dist/icc-api}/model/VirtualIngredient.d.ts +0 -0
  939. package/{icc-api → dist/icc-api}/model/VirtualIngredient.js +0 -0
  940. package/{icc-api → dist/icc-api}/model/VirtualIngredient.js.map +0 -0
  941. package/{icc-api → dist/icc-api}/model/Vmp.d.ts +0 -0
  942. package/{icc-api → dist/icc-api}/model/Vmp.js +0 -0
  943. package/{icc-api → dist/icc-api}/model/Vmp.js.map +0 -0
  944. package/{icc-api → dist/icc-api}/model/VmpComponent.d.ts +0 -0
  945. package/{icc-api → dist/icc-api}/model/VmpComponent.js +0 -0
  946. package/{icc-api → dist/icc-api}/model/VmpComponent.js.map +0 -0
  947. package/{icc-api → dist/icc-api}/model/VmpGroup.d.ts +0 -0
  948. package/{icc-api → dist/icc-api}/model/VmpGroup.js +0 -0
  949. package/{icc-api → dist/icc-api}/model/VmpGroup.js.map +0 -0
  950. package/{icc-api → dist/icc-api}/model/VmpGroupStub.d.ts +0 -0
  951. package/{icc-api → dist/icc-api}/model/VmpGroupStub.js +0 -0
  952. package/{icc-api → dist/icc-api}/model/VmpGroupStub.js.map +0 -0
  953. package/{icc-api → dist/icc-api}/model/VmpStub.d.ts +0 -0
  954. package/{icc-api → dist/icc-api}/model/VmpStub.js +0 -0
  955. package/{icc-api → dist/icc-api}/model/VmpStub.js.map +0 -0
  956. package/{icc-api → dist/icc-api}/model/Vtm.d.ts +0 -0
  957. package/{icc-api → dist/icc-api}/model/Vtm.js +0 -0
  958. package/{icc-api → dist/icc-api}/model/Vtm.js.map +0 -0
  959. package/{icc-api → dist/icc-api}/model/Wada.d.ts +0 -0
  960. package/{icc-api → dist/icc-api}/model/Wada.js +0 -0
  961. package/{icc-api → dist/icc-api}/model/Wada.js.map +0 -0
  962. package/{icc-api → dist/icc-api}/model/WebSession.d.ts +0 -0
  963. package/{icc-api → dist/icc-api}/model/WebSession.js +0 -0
  964. package/{icc-api → dist/icc-api}/model/WebSession.js.map +0 -0
  965. package/{icc-api → dist/icc-api}/model/WebSessionMaxIdleTime.d.ts +0 -0
  966. package/{icc-api → dist/icc-api}/model/WebSessionMaxIdleTime.js +0 -0
  967. package/{icc-api → dist/icc-api}/model/WebSessionMaxIdleTime.js.map +0 -0
  968. package/{icc-api → dist/icc-api}/model/WebSessionMaxIdleTimeUnits.d.ts +0 -0
  969. package/{icc-api → dist/icc-api}/model/WebSessionMaxIdleTimeUnits.js +0 -0
  970. package/{icc-api → dist/icc-api}/model/WebSessionMaxIdleTimeUnits.js.map +0 -0
  971. package/{icc-api → dist/icc-api}/model/Weekday.d.ts +0 -0
  972. package/{icc-api → dist/icc-api}/model/Weekday.js +0 -0
  973. package/{icc-api → dist/icc-api}/model/Weekday.js.map +0 -0
  974. package/{icc-api → dist/icc-api}/model/models.d.ts +0 -0
  975. package/{icc-api → dist/icc-api}/model/models.js +0 -0
  976. package/{icc-api → dist/icc-api}/model/models.js.map +0 -0
  977. package/{icc-x-api → dist/icc-x-api}/crypto/AES.d.ts +0 -0
  978. package/{icc-x-api → dist/icc-x-api}/crypto/AES.js +0 -0
  979. package/{icc-x-api → dist/icc-x-api}/crypto/AES.js.map +0 -0
  980. package/{icc-x-api → dist/icc-x-api}/crypto/RSA.d.ts +0 -0
  981. package/{icc-x-api → dist/icc-x-api}/crypto/RSA.js +0 -0
  982. package/{icc-x-api → dist/icc-x-api}/crypto/RSA.js.map +0 -0
  983. package/{icc-x-api → dist/icc-x-api}/crypto/shamir.d.ts +0 -0
  984. package/dist/icc-x-api/crypto/shamir.js +280 -0
  985. package/dist/icc-x-api/crypto/shamir.js.map +1 -0
  986. package/{icc-x-api → dist/icc-x-api}/filters/AllCodesFilter.d.ts +0 -0
  987. package/{icc-x-api → dist/icc-x-api}/filters/AllCodesFilter.js +0 -0
  988. package/{icc-x-api → dist/icc-x-api}/filters/AllCodesFilter.js.map +0 -0
  989. package/{icc-x-api → dist/icc-x-api}/filters/AllDevicesFilter.d.ts +0 -0
  990. package/{icc-x-api → dist/icc-x-api}/filters/AllDevicesFilter.js +0 -0
  991. package/{icc-x-api → dist/icc-x-api}/filters/AllDevicesFilter.js.map +0 -0
  992. package/{icc-x-api → dist/icc-x-api}/filters/AllHealthcarePartiesFilter.d.ts +0 -0
  993. package/{icc-x-api → dist/icc-x-api}/filters/AllHealthcarePartiesFilter.js +0 -0
  994. package/{icc-x-api → dist/icc-x-api}/filters/AllHealthcarePartiesFilter.js.map +0 -0
  995. package/{icc-x-api → dist/icc-x-api}/filters/AllUsersFilter.d.ts +0 -0
  996. package/{icc-x-api → dist/icc-x-api}/filters/AllUsersFilter.js +0 -0
  997. package/{icc-x-api → dist/icc-x-api}/filters/AllUsersFilter.js.map +0 -0
  998. package/{icc-x-api → dist/icc-x-api}/filters/CodeByIdsFilter.d.ts +0 -0
  999. package/{icc-x-api → dist/icc-x-api}/filters/CodeByIdsFilter.js +0 -0
  1000. package/{icc-x-api → dist/icc-x-api}/filters/CodeByIdsFilter.js.map +0 -0
  1001. package/{icc-x-api → dist/icc-x-api}/filters/CodeByRegionTypeLabelLanguageFilter.d.ts +0 -0
  1002. package/{icc-x-api → dist/icc-x-api}/filters/CodeByRegionTypeLabelLanguageFilter.js +0 -0
  1003. package/{icc-x-api → dist/icc-x-api}/filters/CodeByRegionTypeLabelLanguageFilter.js.map +0 -0
  1004. package/dist/icc-x-api/filters/CodeIdsByTypeCodeVersionIntervalFilter.d.ts +23 -0
  1005. package/dist/icc-x-api/filters/CodeIdsByTypeCodeVersionIntervalFilter.js +24 -0
  1006. package/dist/icc-x-api/filters/CodeIdsByTypeCodeVersionIntervalFilter.js.map +1 -0
  1007. package/{icc-x-api → dist/icc-x-api}/filters/ComplementFilter.d.ts +0 -0
  1008. package/{icc-x-api → dist/icc-x-api}/filters/ComplementFilter.js +0 -0
  1009. package/{icc-x-api → dist/icc-x-api}/filters/ComplementFilter.js.map +0 -0
  1010. package/{icc-x-api → dist/icc-x-api}/filters/ConstantFilter.d.ts +0 -0
  1011. package/{icc-x-api → dist/icc-x-api}/filters/ConstantFilter.js +0 -0
  1012. package/{icc-x-api → dist/icc-x-api}/filters/ConstantFilter.js.map +0 -0
  1013. package/{icc-x-api → dist/icc-x-api}/filters/ContactByHcPartyFilter.d.ts +0 -0
  1014. package/{icc-x-api → dist/icc-x-api}/filters/ContactByHcPartyFilter.js +0 -0
  1015. package/{icc-x-api → dist/icc-x-api}/filters/ContactByHcPartyFilter.js.map +0 -0
  1016. package/{icc-x-api → dist/icc-x-api}/filters/ContactByHcPartyPatientTagCodeDateFilter.d.ts +0 -0
  1017. package/{icc-x-api → dist/icc-x-api}/filters/ContactByHcPartyPatientTagCodeDateFilter.js +0 -0
  1018. package/{icc-x-api → dist/icc-x-api}/filters/ContactByHcPartyPatientTagCodeDateFilter.js.map +0 -0
  1019. package/{icc-x-api → dist/icc-x-api}/filters/ContactByHcPartyTagCodeDateFilter.d.ts +0 -0
  1020. package/{icc-x-api → dist/icc-x-api}/filters/ContactByHcPartyTagCodeDateFilter.js +0 -0
  1021. package/{icc-x-api → dist/icc-x-api}/filters/ContactByHcPartyTagCodeDateFilter.js.map +0 -0
  1022. package/{icc-x-api → dist/icc-x-api}/filters/ContactByServiceIdsFilter.d.ts +0 -0
  1023. package/{icc-x-api → dist/icc-x-api}/filters/ContactByServiceIdsFilter.js +0 -0
  1024. package/{icc-x-api → dist/icc-x-api}/filters/ContactByServiceIdsFilter.js.map +0 -0
  1025. package/{icc-x-api → dist/icc-x-api}/filters/DeviceByHcPartyFilter.d.ts +0 -0
  1026. package/{icc-x-api → dist/icc-x-api}/filters/DeviceByHcPartyFilter.js +0 -0
  1027. package/{icc-x-api → dist/icc-x-api}/filters/DeviceByHcPartyFilter.js.map +0 -0
  1028. package/{icc-x-api → dist/icc-x-api}/filters/DeviceByIdsFilter.d.ts +0 -0
  1029. package/{icc-x-api → dist/icc-x-api}/filters/DeviceByIdsFilter.js +0 -0
  1030. package/{icc-x-api → dist/icc-x-api}/filters/DeviceByIdsFilter.js.map +0 -0
  1031. package/{icc-x-api → dist/icc-x-api}/filters/HealthElementByHcPartyFilter.d.ts +0 -0
  1032. package/{icc-x-api → dist/icc-x-api}/filters/HealthElementByHcPartyFilter.js +0 -0
  1033. package/{icc-x-api → dist/icc-x-api}/filters/HealthElementByHcPartyFilter.js.map +0 -0
  1034. package/{icc-x-api → dist/icc-x-api}/filters/HealthElementByHcPartyIdentifiersFilter.d.ts +0 -0
  1035. package/{icc-x-api → dist/icc-x-api}/filters/HealthElementByHcPartyIdentifiersFilter.js +0 -0
  1036. package/{icc-x-api → dist/icc-x-api}/filters/HealthElementByHcPartyIdentifiersFilter.js.map +0 -0
  1037. package/{icc-x-api → dist/icc-x-api}/filters/HealthElementByHcPartySecretForeignKeysFilter.d.ts +0 -0
  1038. package/{icc-x-api → dist/icc-x-api}/filters/HealthElementByHcPartySecretForeignKeysFilter.js +0 -0
  1039. package/{icc-x-api → dist/icc-x-api}/filters/HealthElementByHcPartySecretForeignKeysFilter.js.map +0 -0
  1040. package/{icc-x-api → dist/icc-x-api}/filters/HealthElementByHcPartyTagCodeFilter.d.ts +0 -0
  1041. package/{icc-x-api → dist/icc-x-api}/filters/HealthElementByHcPartyTagCodeFilter.js +0 -0
  1042. package/{icc-x-api → dist/icc-x-api}/filters/HealthElementByHcPartyTagCodeFilter.js.map +0 -0
  1043. package/{icc-x-api → dist/icc-x-api}/filters/HealthElementByIdsFilter.d.ts +0 -0
  1044. package/{icc-x-api → dist/icc-x-api}/filters/HealthElementByIdsFilter.js +0 -0
  1045. package/{icc-x-api → dist/icc-x-api}/filters/HealthElementByIdsFilter.js.map +0 -0
  1046. package/{icc-x-api → dist/icc-x-api}/filters/HealthcarePartyByIdsFilter.d.ts +0 -0
  1047. package/{icc-x-api → dist/icc-x-api}/filters/HealthcarePartyByIdsFilter.js +0 -0
  1048. package/{icc-x-api → dist/icc-x-api}/filters/HealthcarePartyByIdsFilter.js.map +0 -0
  1049. package/{icc-x-api → dist/icc-x-api}/filters/IntersectionFilter.d.ts +0 -0
  1050. package/{icc-x-api → dist/icc-x-api}/filters/IntersectionFilter.js +0 -0
  1051. package/{icc-x-api → dist/icc-x-api}/filters/IntersectionFilter.js.map +0 -0
  1052. package/{icc-x-api → dist/icc-x-api}/filters/InvoiceByHcPartyCodeDateFilter.d.ts +0 -0
  1053. package/{icc-x-api → dist/icc-x-api}/filters/InvoiceByHcPartyCodeDateFilter.js +0 -0
  1054. package/{icc-x-api → dist/icc-x-api}/filters/InvoiceByHcPartyCodeDateFilter.js.map +0 -0
  1055. package/{icc-x-api → dist/icc-x-api}/filters/MaintenanceTaskAfterDateFilter.d.ts +0 -0
  1056. package/{icc-x-api → dist/icc-x-api}/filters/MaintenanceTaskAfterDateFilter.js +0 -0
  1057. package/{icc-x-api → dist/icc-x-api}/filters/MaintenanceTaskAfterDateFilter.js.map +0 -0
  1058. package/{icc-x-api → dist/icc-x-api}/filters/MaintenanceTaskByHcPartyAndIdentifiersFilter.d.ts +0 -0
  1059. package/{icc-x-api → dist/icc-x-api}/filters/MaintenanceTaskByHcPartyAndIdentifiersFilter.js +0 -0
  1060. package/{icc-x-api → dist/icc-x-api}/filters/MaintenanceTaskByHcPartyAndIdentifiersFilter.js.map +0 -0
  1061. package/{icc-x-api → dist/icc-x-api}/filters/MaintenanceTaskByHcPartyAndTypeFilter.d.ts +0 -0
  1062. package/{icc-x-api → dist/icc-x-api}/filters/MaintenanceTaskByHcPartyAndTypeFilter.js +0 -0
  1063. package/{icc-x-api → dist/icc-x-api}/filters/MaintenanceTaskByHcPartyAndTypeFilter.js.map +0 -0
  1064. package/{icc-x-api → dist/icc-x-api}/filters/MaintenanceTaskByIdsFilter.d.ts +0 -0
  1065. package/{icc-x-api → dist/icc-x-api}/filters/MaintenanceTaskByIdsFilter.js +0 -0
  1066. package/{icc-x-api → dist/icc-x-api}/filters/MaintenanceTaskByIdsFilter.js.map +0 -0
  1067. package/{icc-x-api → dist/icc-x-api}/filters/PatientByHcPartyAndActiveFilter.d.ts +0 -0
  1068. package/{icc-x-api → dist/icc-x-api}/filters/PatientByHcPartyAndActiveFilter.js +0 -0
  1069. package/{icc-x-api → dist/icc-x-api}/filters/PatientByHcPartyAndActiveFilter.js.map +0 -0
  1070. package/{icc-x-api → dist/icc-x-api}/filters/PatientByHcPartyAndExternalIdFilter.d.ts +0 -0
  1071. package/{icc-x-api → dist/icc-x-api}/filters/PatientByHcPartyAndExternalIdFilter.js +0 -0
  1072. package/{icc-x-api → dist/icc-x-api}/filters/PatientByHcPartyAndExternalIdFilter.js.map +0 -0
  1073. package/{icc-x-api → dist/icc-x-api}/filters/PatientByHcPartyAndIdentifiersFilter.d.ts +0 -0
  1074. package/{icc-x-api → dist/icc-x-api}/filters/PatientByHcPartyAndIdentifiersFilter.js +0 -0
  1075. package/{icc-x-api → dist/icc-x-api}/filters/PatientByHcPartyAndIdentifiersFilter.js.map +0 -0
  1076. package/{icc-x-api → dist/icc-x-api}/filters/PatientByHcPartyAndSsinFilter.d.ts +0 -0
  1077. package/{icc-x-api → dist/icc-x-api}/filters/PatientByHcPartyAndSsinFilter.js +0 -0
  1078. package/{icc-x-api → dist/icc-x-api}/filters/PatientByHcPartyAndSsinFilter.js.map +0 -0
  1079. package/{icc-x-api → dist/icc-x-api}/filters/PatientByHcPartyAndSsinsFilter.d.ts +0 -0
  1080. package/{icc-x-api → dist/icc-x-api}/filters/PatientByHcPartyAndSsinsFilter.js +0 -0
  1081. package/{icc-x-api → dist/icc-x-api}/filters/PatientByHcPartyAndSsinsFilter.js.map +0 -0
  1082. package/{icc-x-api → dist/icc-x-api}/filters/PatientByHcPartyDateOfBirthBetweenFilter.d.ts +0 -0
  1083. package/{icc-x-api → dist/icc-x-api}/filters/PatientByHcPartyDateOfBirthBetweenFilter.js +0 -0
  1084. package/{icc-x-api → dist/icc-x-api}/filters/PatientByHcPartyDateOfBirthBetweenFilter.js.map +0 -0
  1085. package/{icc-x-api → dist/icc-x-api}/filters/PatientByHcPartyDateOfBirthFilter.d.ts +0 -0
  1086. package/{icc-x-api → dist/icc-x-api}/filters/PatientByHcPartyDateOfBirthFilter.js +0 -0
  1087. package/{icc-x-api → dist/icc-x-api}/filters/PatientByHcPartyDateOfBirthFilter.js.map +0 -0
  1088. package/{icc-x-api → dist/icc-x-api}/filters/PatientByHcPartyFilter.d.ts +0 -0
  1089. package/{icc-x-api → dist/icc-x-api}/filters/PatientByHcPartyFilter.js +0 -0
  1090. package/{icc-x-api → dist/icc-x-api}/filters/PatientByHcPartyFilter.js.map +0 -0
  1091. package/{icc-x-api → dist/icc-x-api}/filters/PatientByHcPartyGenderEducationProfession.d.ts +0 -0
  1092. package/dist/icc-x-api/filters/PatientByHcPartyGenderEducationProfession.js +15 -0
  1093. package/dist/icc-x-api/filters/PatientByHcPartyGenderEducationProfession.js.map +1 -0
  1094. package/{icc-x-api → dist/icc-x-api}/filters/PatientByHcPartyNameContainsFuzzyFilter.d.ts +0 -0
  1095. package/{icc-x-api → dist/icc-x-api}/filters/PatientByHcPartyNameContainsFuzzyFilter.js +0 -0
  1096. package/{icc-x-api → dist/icc-x-api}/filters/PatientByHcPartyNameContainsFuzzyFilter.js.map +0 -0
  1097. package/{icc-x-api → dist/icc-x-api}/filters/PatientByHcPartyNameFilter.d.ts +0 -0
  1098. package/{icc-x-api → dist/icc-x-api}/filters/PatientByHcPartyNameFilter.js +0 -0
  1099. package/{icc-x-api → dist/icc-x-api}/filters/PatientByHcPartyNameFilter.js.map +0 -0
  1100. package/{icc-x-api → dist/icc-x-api}/filters/PatientByIdsFilter.d.ts +0 -0
  1101. package/{icc-x-api → dist/icc-x-api}/filters/PatientByIdsFilter.js +0 -0
  1102. package/{icc-x-api → dist/icc-x-api}/filters/PatientByIdsFilter.js.map +0 -0
  1103. package/{icc-x-api → dist/icc-x-api}/filters/ServiceByContactsAndSubcontactsFilter.d.ts +0 -0
  1104. package/{icc-x-api → dist/icc-x-api}/filters/ServiceByContactsAndSubcontactsFilter.js +0 -0
  1105. package/{icc-x-api → dist/icc-x-api}/filters/ServiceByContactsAndSubcontactsFilter.js.map +0 -0
  1106. package/{icc-x-api → dist/icc-x-api}/filters/ServiceByHcPartyFilter.d.ts +0 -0
  1107. package/{icc-x-api → dist/icc-x-api}/filters/ServiceByHcPartyFilter.js +0 -0
  1108. package/{icc-x-api → dist/icc-x-api}/filters/ServiceByHcPartyFilter.js.map +0 -0
  1109. package/{icc-x-api → dist/icc-x-api}/filters/ServiceByHcPartyHealthElementIdsFilter.d.ts +0 -0
  1110. package/{icc-x-api → dist/icc-x-api}/filters/ServiceByHcPartyHealthElementIdsFilter.js +0 -0
  1111. package/{icc-x-api → dist/icc-x-api}/filters/ServiceByHcPartyHealthElementIdsFilter.js.map +0 -0
  1112. package/{icc-x-api → dist/icc-x-api}/filters/ServiceByHcPartyIdentifiersFilter.d.ts +0 -0
  1113. package/{icc-x-api → dist/icc-x-api}/filters/ServiceByHcPartyIdentifiersFilter.js +0 -0
  1114. package/{icc-x-api → dist/icc-x-api}/filters/ServiceByHcPartyIdentifiersFilter.js.map +0 -0
  1115. package/{icc-x-api → dist/icc-x-api}/filters/ServiceByHcPartyTagCodeDateFilter.d.ts +0 -0
  1116. package/{icc-x-api → dist/icc-x-api}/filters/ServiceByHcPartyTagCodeDateFilter.js +0 -0
  1117. package/{icc-x-api → dist/icc-x-api}/filters/ServiceByHcPartyTagCodeDateFilter.js.map +0 -0
  1118. package/{icc-x-api → dist/icc-x-api}/filters/ServiceByIdsFilter.d.ts +0 -0
  1119. package/{icc-x-api → dist/icc-x-api}/filters/ServiceByIdsFilter.js +0 -0
  1120. package/{icc-x-api → dist/icc-x-api}/filters/ServiceByIdsFilter.js.map +0 -0
  1121. package/{icc-x-api → dist/icc-x-api}/filters/ServiceBySecretForeignKeys.d.ts +0 -0
  1122. package/{icc-x-api → dist/icc-x-api}/filters/ServiceBySecretForeignKeys.js +0 -0
  1123. package/{icc-x-api → dist/icc-x-api}/filters/ServiceBySecretForeignKeys.js.map +0 -0
  1124. package/{icc-x-api → dist/icc-x-api}/filters/UnionFilter.d.ts +0 -0
  1125. package/{icc-x-api → dist/icc-x-api}/filters/UnionFilter.js +0 -0
  1126. package/{icc-x-api → dist/icc-x-api}/filters/UnionFilter.js.map +0 -0
  1127. package/{icc-x-api → dist/icc-x-api}/filters/UserByIdsFilter.d.ts +0 -0
  1128. package/{icc-x-api → dist/icc-x-api}/filters/UserByIdsFilter.js +0 -0
  1129. package/{icc-x-api → dist/icc-x-api}/filters/UserByIdsFilter.js.map +0 -0
  1130. package/{icc-x-api → dist/icc-x-api}/filters/UserByNameEmailPhoneFilter.d.ts +0 -0
  1131. package/{icc-x-api → dist/icc-x-api}/filters/UserByNameEmailPhoneFilter.js +0 -0
  1132. package/{icc-x-api → dist/icc-x-api}/filters/UserByNameEmailPhoneFilter.js.map +0 -0
  1133. package/dist/icc-x-api/filters/UsersByPatientIdFilter.d.ts +18 -0
  1134. package/dist/icc-x-api/filters/UsersByPatientIdFilter.js +24 -0
  1135. package/dist/icc-x-api/filters/UsersByPatientIdFilter.js.map +1 -0
  1136. package/{icc-x-api → dist/icc-x-api}/filters/filters.d.ts +0 -0
  1137. package/{icc-x-api → dist/icc-x-api}/filters/filters.js +0 -0
  1138. package/{icc-x-api → dist/icc-x-api}/filters/filters.js.map +0 -0
  1139. package/{icc-x-api → dist/icc-x-api}/icc-accesslog-x-api.d.ts +0 -0
  1140. package/{icc-x-api → dist/icc-x-api}/icc-accesslog-x-api.js +0 -0
  1141. package/{icc-x-api → dist/icc-x-api}/icc-accesslog-x-api.js.map +0 -0
  1142. package/{icc-x-api → dist/icc-x-api}/icc-bekmehr-x-api.d.ts +0 -0
  1143. package/{icc-x-api → dist/icc-x-api}/icc-bekmehr-x-api.js +0 -0
  1144. package/{icc-x-api → dist/icc-x-api}/icc-bekmehr-x-api.js.map +0 -0
  1145. package/{icc-x-api → dist/icc-x-api}/icc-calendar-item-x-api.d.ts +0 -0
  1146. package/{icc-x-api → dist/icc-x-api}/icc-calendar-item-x-api.js +0 -0
  1147. package/{icc-x-api → dist/icc-x-api}/icc-calendar-item-x-api.js.map +0 -0
  1148. package/{icc-x-api → dist/icc-x-api}/icc-classification-x-api.d.ts +0 -0
  1149. package/{icc-x-api → dist/icc-x-api}/icc-classification-x-api.js +0 -0
  1150. package/{icc-x-api → dist/icc-x-api}/icc-classification-x-api.js.map +0 -0
  1151. package/{icc-x-api → dist/icc-x-api}/icc-code-x-api.d.ts +0 -0
  1152. package/{icc-x-api → dist/icc-x-api}/icc-code-x-api.js +0 -0
  1153. package/{icc-x-api → dist/icc-x-api}/icc-code-x-api.js.map +0 -0
  1154. package/{icc-x-api → dist/icc-x-api}/icc-contact-x-api.d.ts +0 -0
  1155. package/{icc-x-api → dist/icc-x-api}/icc-contact-x-api.js +0 -0
  1156. package/{icc-x-api → dist/icc-x-api}/icc-contact-x-api.js.map +0 -0
  1157. package/{icc-x-api → dist/icc-x-api}/icc-crypto-x-api.d.ts +0 -0
  1158. package/dist/icc-x-api/icc-crypto-x-api.js +1510 -0
  1159. package/dist/icc-x-api/icc-crypto-x-api.js.map +1 -0
  1160. package/{icc-x-api → dist/icc-x-api}/icc-doctemplate-x-api.d.ts +0 -0
  1161. package/{icc-x-api → dist/icc-x-api}/icc-doctemplate-x-api.js +0 -0
  1162. package/{icc-x-api → dist/icc-x-api}/icc-doctemplate-x-api.js.map +0 -0
  1163. package/{icc-x-api → dist/icc-x-api}/icc-document-x-api.d.ts +0 -0
  1164. package/{icc-x-api → dist/icc-x-api}/icc-document-x-api.js +0 -0
  1165. package/{icc-x-api → dist/icc-x-api}/icc-document-x-api.js.map +0 -0
  1166. package/{icc-x-api → dist/icc-x-api}/icc-form-x-api.d.ts +0 -0
  1167. package/{icc-x-api → dist/icc-x-api}/icc-form-x-api.js +0 -0
  1168. package/{icc-x-api → dist/icc-x-api}/icc-form-x-api.js.map +0 -0
  1169. package/{icc-x-api → dist/icc-x-api}/icc-hcparty-x-api.d.ts +0 -0
  1170. package/{icc-x-api → dist/icc-x-api}/icc-hcparty-x-api.js +0 -0
  1171. package/{icc-x-api → dist/icc-x-api}/icc-hcparty-x-api.js.map +0 -0
  1172. package/{icc-x-api → dist/icc-x-api}/icc-helement-x-api.d.ts +0 -0
  1173. package/{icc-x-api → dist/icc-x-api}/icc-helement-x-api.js +0 -0
  1174. package/{icc-x-api → dist/icc-x-api}/icc-helement-x-api.js.map +0 -0
  1175. package/{icc-x-api → dist/icc-x-api}/icc-invoice-x-api.d.ts +0 -0
  1176. package/{icc-x-api → dist/icc-x-api}/icc-invoice-x-api.js +0 -0
  1177. package/{icc-x-api → dist/icc-x-api}/icc-invoice-x-api.js.map +0 -0
  1178. package/dist/icc-x-api/icc-maintenance-task-x-api.d.ts +27 -0
  1179. package/dist/icc-x-api/icc-maintenance-task-x-api.js +152 -0
  1180. package/dist/icc-x-api/icc-maintenance-task-x-api.js.map +1 -0
  1181. package/{icc-x-api → dist/icc-x-api}/icc-message-x-api.d.ts +0 -0
  1182. package/{icc-x-api → dist/icc-x-api}/icc-message-x-api.js +0 -0
  1183. package/{icc-x-api → dist/icc-x-api}/icc-message-x-api.js.map +0 -0
  1184. package/dist/icc-x-api/icc-patient-x-api.d.ts +92 -0
  1185. package/dist/icc-x-api/icc-patient-x-api.js +859 -0
  1186. package/dist/icc-x-api/icc-patient-x-api.js.map +1 -0
  1187. package/{icc-x-api → dist/icc-x-api}/icc-receipt-x-api.d.ts +0 -0
  1188. package/{icc-x-api → dist/icc-x-api}/icc-receipt-x-api.js +0 -0
  1189. package/{icc-x-api → dist/icc-x-api}/icc-receipt-x-api.js.map +0 -0
  1190. package/{icc-x-api → dist/icc-x-api}/icc-time-table-x-api.d.ts +0 -0
  1191. package/{icc-x-api → dist/icc-x-api}/icc-time-table-x-api.js +0 -0
  1192. package/{icc-x-api → dist/icc-x-api}/icc-time-table-x-api.js.map +0 -0
  1193. package/{icc-x-api → dist/icc-x-api}/icc-user-x-api.d.ts +0 -0
  1194. package/{icc-x-api → dist/icc-x-api}/icc-user-x-api.js +0 -0
  1195. package/{icc-x-api → dist/icc-x-api}/icc-user-x-api.js.map +0 -0
  1196. package/{icc-x-api → dist/icc-x-api}/index.d.ts +0 -0
  1197. package/{icc-x-api → dist/icc-x-api}/index.js +0 -0
  1198. package/{icc-x-api → dist/icc-x-api}/index.js.map +0 -0
  1199. package/{icc-x-api → dist/icc-x-api}/rsrc/codelng.d.ts +0 -0
  1200. package/{icc-x-api → dist/icc-x-api}/rsrc/codelng.js +0 -0
  1201. package/{icc-x-api → dist/icc-x-api}/rsrc/codelng.js.map +0 -0
  1202. package/{icc-x-api → dist/icc-x-api}/rsrc/contact.i18n.d.ts +0 -0
  1203. package/{icc-x-api → dist/icc-x-api}/rsrc/contact.i18n.js +0 -0
  1204. package/{icc-x-api → dist/icc-x-api}/rsrc/contact.i18n.js.map +0 -0
  1205. package/{icc-x-api → dist/icc-x-api}/rsrc/icd10.d.ts +0 -0
  1206. package/{icc-x-api → dist/icc-x-api}/rsrc/icd10.js +0 -0
  1207. package/{icc-x-api → dist/icc-x-api}/rsrc/icd10.js.map +0 -0
  1208. package/{icc-x-api → dist/icc-x-api}/rsrc/icpc2.d.ts +0 -0
  1209. package/{icc-x-api → dist/icc-x-api}/rsrc/icpc2.js +0 -0
  1210. package/{icc-x-api → dist/icc-x-api}/rsrc/icpc2.js.map +0 -0
  1211. package/{icc-x-api → dist/icc-x-api}/utils/asn1-packer.d.ts +0 -0
  1212. package/{icc-x-api → dist/icc-x-api}/utils/asn1-packer.js +0 -0
  1213. package/{icc-x-api → dist/icc-x-api}/utils/asn1-packer.js.map +0 -0
  1214. package/{icc-x-api → dist/icc-x-api}/utils/asn1-parser.d.ts +0 -0
  1215. package/{icc-x-api → dist/icc-x-api}/utils/asn1-parser.js +0 -0
  1216. package/{icc-x-api → dist/icc-x-api}/utils/asn1-parser.js.map +0 -0
  1217. package/{icc-x-api → dist/icc-x-api}/utils/binary-utils.d.ts +0 -0
  1218. package/{icc-x-api → dist/icc-x-api}/utils/binary-utils.js +0 -0
  1219. package/{icc-x-api → dist/icc-x-api}/utils/binary-utils.js.map +0 -0
  1220. package/{icc-x-api → dist/icc-x-api}/utils/code-util.d.ts +0 -0
  1221. package/{icc-x-api → dist/icc-x-api}/utils/code-util.js +0 -0
  1222. package/{icc-x-api → dist/icc-x-api}/utils/code-util.js.map +0 -0
  1223. package/{icc-x-api → dist/icc-x-api}/utils/crypto-utils.d.ts +0 -0
  1224. package/{icc-x-api → dist/icc-x-api}/utils/crypto-utils.js +0 -0
  1225. package/{icc-x-api → dist/icc-x-api}/utils/crypto-utils.js.map +0 -0
  1226. package/{icc-x-api → dist/icc-x-api}/utils/formatting-util.d.ts +0 -0
  1227. package/{icc-x-api → dist/icc-x-api}/utils/formatting-util.js +0 -0
  1228. package/{icc-x-api → dist/icc-x-api}/utils/formatting-util.js.map +0 -0
  1229. package/{icc-x-api → dist/icc-x-api}/utils/functional-util.d.ts +0 -0
  1230. package/{icc-x-api → dist/icc-x-api}/utils/functional-util.js +0 -0
  1231. package/{icc-x-api → dist/icc-x-api}/utils/functional-util.js.map +0 -0
  1232. package/{icc-x-api → dist/icc-x-api}/utils/hcp-util.d.ts +0 -0
  1233. package/{icc-x-api → dist/icc-x-api}/utils/hcp-util.js +0 -0
  1234. package/{icc-x-api → dist/icc-x-api}/utils/hcp-util.js.map +0 -0
  1235. package/{icc-x-api → dist/icc-x-api}/utils/index.d.ts +0 -0
  1236. package/{icc-x-api → dist/icc-x-api}/utils/index.js +0 -0
  1237. package/{icc-x-api → dist/icc-x-api}/utils/index.js.map +0 -0
  1238. package/{icc-x-api → dist/icc-x-api}/utils/insurability-util.d.ts +0 -0
  1239. package/{icc-x-api → dist/icc-x-api}/utils/insurability-util.js +0 -0
  1240. package/{icc-x-api → dist/icc-x-api}/utils/insurability-util.js.map +0 -0
  1241. package/{icc-x-api → dist/icc-x-api}/utils/net-utils.d.ts +0 -0
  1242. package/{icc-x-api → dist/icc-x-api}/utils/net-utils.js +0 -0
  1243. package/{icc-x-api → dist/icc-x-api}/utils/net-utils.js.map +0 -0
  1244. package/{icc-x-api → dist/icc-x-api}/utils/person-util.d.ts +0 -0
  1245. package/{icc-x-api → dist/icc-x-api}/utils/person-util.js +0 -0
  1246. package/{icc-x-api → dist/icc-x-api}/utils/person-util.js.map +0 -0
  1247. package/{icc-x-api → dist/icc-x-api}/utils/uuid-encoder.d.ts +0 -0
  1248. package/{icc-x-api → dist/icc-x-api}/utils/uuid-encoder.js +0 -0
  1249. package/{icc-x-api → dist/icc-x-api}/utils/uuid-encoder.js.map +0 -0
  1250. package/{index.d.ts → dist/index.d.ts} +0 -0
  1251. package/{index.js → dist/index.js} +0 -0
  1252. package/{index.js.map → dist/index.js.map} +0 -0
  1253. package/dist/node-compat.d.ts +2 -0
  1254. package/dist/node-compat.js +13 -0
  1255. package/dist/node-compat.js.map +1 -0
  1256. package/dist/package.json +22 -0
  1257. package/icc-api/.swagger-codegen/VERSION +1 -0
  1258. package/icc-api/.swagger-codegen-ignore +23 -0
  1259. package/icc-api/LICENSE +201 -0
  1260. package/icc-api/api/IccAccesslogApi.ts +198 -0
  1261. package/icc-api/api/IccAgendaApi.ts +143 -0
  1262. package/icc-api/api/IccAnonymousAccessApi.ts +118 -0
  1263. package/icc-api/api/IccApplicationsettingsApi.ts +81 -0
  1264. package/icc-api/api/IccArticleApi.ts +112 -0
  1265. package/icc-api/api/IccAuthApi.ts +126 -0
  1266. package/icc-api/api/IccBeefactApi.ts +58 -0
  1267. package/icc-api/api/IccBekmehrApi.ts +901 -0
  1268. package/icc-api/api/IccBemikronoApi.ts +183 -0
  1269. package/icc-api/api/IccBeresultexportApi.ts +126 -0
  1270. package/icc-api/api/IccBeresultimportApi.ts +122 -0
  1271. package/icc-api/api/IccBesamv2Api.ts +767 -0
  1272. package/icc-api/api/IccCalendarItemApi.ts +255 -0
  1273. package/icc-api/api/IccCalendarItemTypeApi.ts +126 -0
  1274. package/icc-api/api/IccClassificationApi.ts +172 -0
  1275. package/icc-api/api/IccClassificationTemplateApi.ts +180 -0
  1276. package/icc-api/api/IccCodeApi.ts +378 -0
  1277. package/icc-api/api/IccContactApi.ts +610 -0
  1278. package/icc-api/api/IccDeviceApi.ts +350 -0
  1279. package/icc-api/api/IccDoctemplateApi.ts +250 -0
  1280. package/icc-api/api/IccDocumentApi.ts +359 -0
  1281. package/icc-api/api/IccDocumentTemplateApi.ts +253 -0
  1282. package/icc-api/api/IccEntityrefApi.ts +65 -0
  1283. package/icc-api/api/IccEntitytemplateApi.ts +241 -0
  1284. package/icc-api/api/IccFormApi.ts +466 -0
  1285. package/icc-api/api/IccFrontendmigrationApi.ts +127 -0
  1286. package/icc-api/api/IccGroupApi.ts +369 -0
  1287. package/icc-api/api/IccHcpartyApi.ts +479 -0
  1288. package/icc-api/api/IccHelementApi.ts +276 -0
  1289. package/icc-api/api/IccIcureApi.ts +295 -0
  1290. package/icc-api/api/IccInsuranceApi.ts +146 -0
  1291. package/icc-api/api/IccInvoiceApi.ts +667 -0
  1292. package/icc-api/api/IccKeywordApi.ts +127 -0
  1293. package/icc-api/api/IccMaintenanceTaskApi.ts +125 -0
  1294. package/icc-api/api/IccMedexApi.ts +50 -0
  1295. package/icc-api/api/IccMedicallocationApi.ts +112 -0
  1296. package/icc-api/api/IccMessageApi.ts +453 -0
  1297. package/icc-api/api/IccPatientApi.ts +815 -0
  1298. package/icc-api/api/IccPermissionApi.ts +51 -0
  1299. package/icc-api/api/IccPlaceApi.ts +112 -0
  1300. package/icc-api/api/IccPubsubApi.ts +98 -0
  1301. package/icc-api/api/IccReceiptApi.ts +160 -0
  1302. package/icc-api/api/IccReplicationApi.ts +98 -0
  1303. package/icc-api/api/IccTarificationApi.ts +228 -0
  1304. package/icc-api/api/IccTimeTableApi.ts +138 -0
  1305. package/icc-api/api/IccTmpApi.ts +1290 -0
  1306. package/icc-api/api/IccUserApi.ts +517 -0
  1307. package/icc-api/api/XHR.ts +160 -0
  1308. package/icc-api/iccApi.ts +45 -0
  1309. package/icc-api/index.ts +45 -0
  1310. package/icc-api/model/AbstractFilterCode.ts +19 -0
  1311. package/icc-api/model/AbstractFilterContact.ts +19 -0
  1312. package/icc-api/model/AbstractFilterDevice.ts +19 -0
  1313. package/icc-api/model/AbstractFilterHealthElement.ts +19 -0
  1314. package/icc-api/model/AbstractFilterHealthcareParty.ts +19 -0
  1315. package/icc-api/model/AbstractFilterInvoice.ts +19 -0
  1316. package/icc-api/model/AbstractFilterMaintenanceTask.ts +19 -0
  1317. package/icc-api/model/AbstractFilterPatient.ts +19 -0
  1318. package/icc-api/model/AbstractFilterService.ts +19 -0
  1319. package/icc-api/model/AbstractFilterUser.ts +19 -0
  1320. package/icc-api/model/AccessLog.ts +108 -0
  1321. package/icc-api/model/AddedDocument.ts +27 -0
  1322. package/icc-api/model/Address.ts +99 -0
  1323. package/icc-api/model/AdministrationQuantity.ts +22 -0
  1324. package/icc-api/model/Agenda.ts +61 -0
  1325. package/icc-api/model/AgreementAppendix.ts +22 -0
  1326. package/icc-api/model/Amp.ts +57 -0
  1327. package/icc-api/model/AmpComponent.ts +51 -0
  1328. package/icc-api/model/Ampp.ts +75 -0
  1329. package/icc-api/model/AmppComponent.ts +36 -0
  1330. package/icc-api/model/Annotation.ts +42 -0
  1331. package/icc-api/model/ApplicationSettings.ts +58 -0
  1332. package/icc-api/model/Appointment.ts +31 -0
  1333. package/icc-api/model/AppointmentImport.ts +39 -0
  1334. package/icc-api/model/AppointmentTypeAndPlace.ts +27 -0
  1335. package/icc-api/model/Article.ts +82 -0
  1336. package/icc-api/model/Atc.ts +20 -0
  1337. package/icc-api/model/Attachment.ts +23 -0
  1338. package/icc-api/model/AuthenticationResponse.ts +22 -0
  1339. package/icc-api/model/AuthenticationToken.ts +33 -0
  1340. package/icc-api/model/Basic.ts +20 -0
  1341. package/icc-api/model/Body.ts +20 -0
  1342. package/icc-api/model/Body1.ts +20 -0
  1343. package/icc-api/model/Body2.ts +20 -0
  1344. package/icc-api/model/Body3.ts +20 -0
  1345. package/icc-api/model/ByteArray.ts +20 -0
  1346. package/icc-api/model/CalendarItem.ts +103 -0
  1347. package/icc-api/model/CalendarItemTag.ts +22 -0
  1348. package/icc-api/model/CalendarItemType.ts +32 -0
  1349. package/icc-api/model/CareTeamMember.ts +38 -0
  1350. package/icc-api/model/CareTeamMembership.ts +39 -0
  1351. package/icc-api/model/CheckSMFPatientResult.ts +24 -0
  1352. package/icc-api/model/Classification.ts +81 -0
  1353. package/icc-api/model/ClassificationTemplate.ts +80 -0
  1354. package/icc-api/model/Code.ts +202 -0
  1355. package/icc-api/model/CodeStub.ts +24 -0
  1356. package/icc-api/model/CodeType.ts +19 -0
  1357. package/icc-api/model/CommentedClassification.ts +21 -0
  1358. package/icc-api/model/Commercialization.ts +25 -0
  1359. package/icc-api/model/Company.ts +35 -0
  1360. package/icc-api/model/Contact.ts +129 -0
  1361. package/icc-api/model/Content.ts +45 -0
  1362. package/icc-api/model/Copayment.ts +22 -0
  1363. package/icc-api/model/Data.ts +17 -0
  1364. package/icc-api/model/DataOwnerRegistrationSuccess.ts +21 -0
  1365. package/icc-api/model/DatabaseInfo.ts +28 -0
  1366. package/icc-api/model/DatabaseInitialisation.ts +27 -0
  1367. package/icc-api/model/DatabaseSynchronization.ts +30 -0
  1368. package/icc-api/model/Delegation.ts +25 -0
  1369. package/icc-api/model/Device.ts +93 -0
  1370. package/icc-api/model/DeviceType.ts +23 -0
  1371. package/icc-api/model/DiaryNoteExportInfo.ts +30 -0
  1372. package/icc-api/model/Dmpp.ts +45 -0
  1373. package/icc-api/model/DocIdentifier.ts +20 -0
  1374. package/icc-api/model/Document.ts +264 -0
  1375. package/icc-api/model/DocumentGroup.ts +20 -0
  1376. package/icc-api/model/DocumentTemplate.ts +162 -0
  1377. package/icc-api/model/Duration.ts +21 -0
  1378. package/icc-api/model/EIDItem.ts +23 -0
  1379. package/icc-api/model/Editor.ts +37 -0
  1380. package/icc-api/model/EfactInvoice.ts +43 -0
  1381. package/icc-api/model/EmailOrSmsMessage.ts +39 -0
  1382. package/icc-api/model/EmailTemplate.ts +20 -0
  1383. package/icc-api/model/Employer.ts +21 -0
  1384. package/icc-api/model/EmploymentInfo.ts +24 -0
  1385. package/icc-api/model/EntityReference.ts +25 -0
  1386. package/icc-api/model/EntityTemplate.ts +31 -0
  1387. package/icc-api/model/Episode.ts +30 -0
  1388. package/icc-api/model/FilterChainCode.ts +23 -0
  1389. package/icc-api/model/FilterChainContact.ts +23 -0
  1390. package/icc-api/model/FilterChainDevice.ts +23 -0
  1391. package/icc-api/model/FilterChainHealthElement.ts +23 -0
  1392. package/icc-api/model/FilterChainHealthcareParty.ts +23 -0
  1393. package/icc-api/model/FilterChainInvoice.ts +23 -0
  1394. package/icc-api/model/FilterChainMaintenanceTask.ts +23 -0
  1395. package/icc-api/model/FilterChainPatient.ts +23 -0
  1396. package/icc-api/model/FilterChainService.ts +23 -0
  1397. package/icc-api/model/FilterChainUser.ts +23 -0
  1398. package/icc-api/model/FinancialInstitutionInformation.ts +32 -0
  1399. package/icc-api/model/FlatRateTarification.ts +36 -0
  1400. package/icc-api/model/FlowItem.ts +51 -0
  1401. package/icc-api/model/Form.ts +116 -0
  1402. package/icc-api/model/FormColumn.ts +22 -0
  1403. package/icc-api/model/FormDataOption.ts +20 -0
  1404. package/icc-api/model/FormLayout.ts +29 -0
  1405. package/icc-api/model/FormLayoutData.ts +44 -0
  1406. package/icc-api/model/FormPlanning.ts +26 -0
  1407. package/icc-api/model/FormSection.ts +23 -0
  1408. package/icc-api/model/FormTemplate.ts +46 -0
  1409. package/icc-api/model/FormTemplateLayout.ts +23 -0
  1410. package/icc-api/model/Formula.ts +31 -0
  1411. package/icc-api/model/FrontEndMigration.ts +47 -0
  1412. package/icc-api/model/Group.ts +60 -0
  1413. package/icc-api/model/GroupDatabasesInfo.ts +21 -0
  1414. package/icc-api/model/GuiCode.ts +20 -0
  1415. package/icc-api/model/GuiCodeType.ts +19 -0
  1416. package/icc-api/model/HealthElement.ts +159 -0
  1417. package/icc-api/model/HealthcareParty.ts +224 -0
  1418. package/icc-api/model/HealthcarePartyHistoryStatus.ts +33 -0
  1419. package/icc-api/model/IcureStub.ts +74 -0
  1420. package/icc-api/model/IdWithRev.ts +20 -0
  1421. package/icc-api/model/Identifier.ts +27 -0
  1422. package/icc-api/model/IdentityDocumentReader.ts +24 -0
  1423. package/icc-api/model/ImportMapping.ts +24 -0
  1424. package/icc-api/model/ImportResult.ts +34 -0
  1425. package/icc-api/model/IncapacityExportInfo.ts +52 -0
  1426. package/icc-api/model/IndexedIdentifier.ts +21 -0
  1427. package/icc-api/model/IndexingInfo.ts +19 -0
  1428. package/icc-api/model/Ingredient.ts +36 -0
  1429. package/icc-api/model/Insurability.ts +61 -0
  1430. package/icc-api/model/Insurance.ts +33 -0
  1431. package/icc-api/model/Invoice.ts +205 -0
  1432. package/icc-api/model/InvoiceItem.ts +97 -0
  1433. package/icc-api/model/InvoiceSender.ts +28 -0
  1434. package/icc-api/model/InvoicesBatch.ts +29 -0
  1435. package/icc-api/model/InvoicingCode.ts +86 -0
  1436. package/icc-api/model/Keyword.ts +61 -0
  1437. package/icc-api/model/KeywordSubword.ts +20 -0
  1438. package/icc-api/model/LabelledOccurence.ts +20 -0
  1439. package/icc-api/model/LetterValue.ts +22 -0
  1440. package/icc-api/model/ListOfIds.ts +22 -0
  1441. package/icc-api/model/ListOfProperties.ts +23 -0
  1442. package/icc-api/model/LoginCredentials.ts +20 -0
  1443. package/icc-api/model/MaintenanceTask.ts +93 -0
  1444. package/icc-api/model/MapOfIds.ts +19 -0
  1445. package/icc-api/model/Measure.ts +31 -0
  1446. package/icc-api/model/MedexInfo.ts +33 -0
  1447. package/icc-api/model/MedicalHouseContract.ts +81 -0
  1448. package/icc-api/model/MedicalLocation.ts +37 -0
  1449. package/icc-api/model/Medication.ts +70 -0
  1450. package/icc-api/model/MedicationSchemeExportInfo.ts +25 -0
  1451. package/icc-api/model/Medicinalproduct.ts +24 -0
  1452. package/icc-api/model/Message.ts +145 -0
  1453. package/icc-api/model/MessageReadStatus.ts +23 -0
  1454. package/icc-api/model/MessageWithBatch.ts +22 -0
  1455. package/icc-api/model/MessagesReadStatusUpdate.ts +22 -0
  1456. package/icc-api/model/MikronoAppointmentTypeRest.ts +25 -0
  1457. package/icc-api/model/MikronoCredentials.ts +21 -0
  1458. package/icc-api/model/MimeAttachment.ts +22 -0
  1459. package/icc-api/model/ModelHelper.ts +64 -0
  1460. package/icc-api/model/Nmp.ts +34 -0
  1461. package/icc-api/model/NoGenericPrescriptionReason.ts +21 -0
  1462. package/icc-api/model/NoSwitchReason.ts +21 -0
  1463. package/icc-api/model/NumeratorRange.ts +21 -0
  1464. package/icc-api/model/PackagingType.ts +23 -0
  1465. package/icc-api/model/PaginatedDocumentKeyIdPairObject.ts +20 -0
  1466. package/icc-api/model/PaginatedListAccessLog.ts +24 -0
  1467. package/icc-api/model/PaginatedListAmp.ts +24 -0
  1468. package/icc-api/model/PaginatedListClassification.ts +24 -0
  1469. package/icc-api/model/PaginatedListClassificationTemplate.ts +24 -0
  1470. package/icc-api/model/PaginatedListCode.ts +24 -0
  1471. package/icc-api/model/PaginatedListContact.ts +24 -0
  1472. package/icc-api/model/PaginatedListDevice.ts +24 -0
  1473. package/icc-api/model/PaginatedListDocument.ts +24 -0
  1474. package/icc-api/model/PaginatedListEntityTemplate.ts +24 -0
  1475. package/icc-api/model/PaginatedListForm.ts +24 -0
  1476. package/icc-api/model/PaginatedListGroup.ts +24 -0
  1477. package/icc-api/model/PaginatedListHealthElement.ts +24 -0
  1478. package/icc-api/model/PaginatedListHealthcareParty.ts +24 -0
  1479. package/icc-api/model/PaginatedListInvoice.ts +24 -0
  1480. package/icc-api/model/PaginatedListMaintenanceTask.ts +24 -0
  1481. package/icc-api/model/PaginatedListMessage.ts +24 -0
  1482. package/icc-api/model/PaginatedListNmp.ts +24 -0
  1483. package/icc-api/model/PaginatedListPatient.ts +24 -0
  1484. package/icc-api/model/PaginatedListService.ts +24 -0
  1485. package/icc-api/model/PaginatedListString.ts +23 -0
  1486. package/icc-api/model/PaginatedListTarification.ts +24 -0
  1487. package/icc-api/model/PaginatedListUser.ts +24 -0
  1488. package/icc-api/model/PaginatedListVmp.ts +24 -0
  1489. package/icc-api/model/PaginatedListVmpGroup.ts +24 -0
  1490. package/icc-api/model/Paragraph.ts +41 -0
  1491. package/icc-api/model/ParagraphAgreement.ts +41 -0
  1492. package/icc-api/model/Partnership.ts +118 -0
  1493. package/icc-api/model/Patient.ts +366 -0
  1494. package/icc-api/model/PatientByHcPartyGenderEducationProfession.ts +35 -0
  1495. package/icc-api/model/PatientHealthCareParty.ts +64 -0
  1496. package/icc-api/model/PatientRegistrationSuccess.ts +21 -0
  1497. package/icc-api/model/Payment.ts +34 -0
  1498. package/icc-api/model/Periodicity.ts +21 -0
  1499. package/icc-api/model/Permission.ts +30 -0
  1500. package/icc-api/model/PermissionCriterion.ts +46 -0
  1501. package/icc-api/model/PermissionItem.ts +52 -0
  1502. package/icc-api/model/PersonName.ts +66 -0
  1503. package/icc-api/model/PharmaceuticalForm.ts +29 -0
  1504. package/icc-api/model/PharmaceuticalFormStub.ts +24 -0
  1505. package/icc-api/model/Place.ts +27 -0
  1506. package/icc-api/model/PlanOfAction.ts +114 -0
  1507. package/icc-api/model/Predicate.ts +17 -0
  1508. package/icc-api/model/Pricing.ts +21 -0
  1509. package/icc-api/model/PropertyStub.ts +31 -0
  1510. package/icc-api/model/PropertyTypeStub.ts +32 -0
  1511. package/icc-api/model/PublicKey.ts +20 -0
  1512. package/icc-api/model/Quantity.ts +20 -0
  1513. package/icc-api/model/Receipt.ts +83 -0
  1514. package/icc-api/model/ReferralPeriod.ts +33 -0
  1515. package/icc-api/model/RegimenItem.ts +27 -0
  1516. package/icc-api/model/RegistrationInformation.ts +22 -0
  1517. package/icc-api/model/RegistrationSuccess.ts +21 -0
  1518. package/icc-api/model/Reimbursement.ts +57 -0
  1519. package/icc-api/model/ReimbursementCriterion.ts +22 -0
  1520. package/icc-api/model/Remote.ts +21 -0
  1521. package/icc-api/model/RemoteAuthentication.ts +20 -0
  1522. package/icc-api/model/Renewal.ts +21 -0
  1523. package/icc-api/model/ReplicateCommand.ts +25 -0
  1524. package/icc-api/model/Replication.ts +28 -0
  1525. package/icc-api/model/ReplicationInfo.ts +22 -0
  1526. package/icc-api/model/ReplicationStats.ts +27 -0
  1527. package/icc-api/model/ReplicatorDocument.ts +34 -0
  1528. package/icc-api/model/ReplicatorResponse.ts +23 -0
  1529. package/icc-api/model/ResultInfo.ts +33 -0
  1530. package/icc-api/model/RevisionInfo.ts +20 -0
  1531. package/icc-api/model/Right.ts +22 -0
  1532. package/icc-api/model/RouteOfAdministration.ts +22 -0
  1533. package/icc-api/model/SamText.ts +22 -0
  1534. package/icc-api/model/SamVersion.ts +26 -0
  1535. package/icc-api/model/SchoolingInfo.ts +23 -0
  1536. package/icc-api/model/Section.ts +23 -0
  1537. package/icc-api/model/Service.ts +155 -0
  1538. package/icc-api/model/ServiceLink.ts +22 -0
  1539. package/icc-api/model/SoftwareMedicalFileExport.ts +23 -0
  1540. package/icc-api/model/StandardSubstance.ts +33 -0
  1541. package/icc-api/model/StrengthRange.ts +22 -0
  1542. package/icc-api/model/StructureElement.ts +17 -0
  1543. package/icc-api/model/SubContact.ts +89 -0
  1544. package/icc-api/model/Substance.ts +31 -0
  1545. package/icc-api/model/SubstanceStub.ts +26 -0
  1546. package/icc-api/model/Substanceproduct.ts +24 -0
  1547. package/icc-api/model/Suggest.ts +23 -0
  1548. package/icc-api/model/SumehrContent.ts +26 -0
  1549. package/icc-api/model/SumehrExportInfo.ts +30 -0
  1550. package/icc-api/model/SumehrValidity.ts +27 -0
  1551. package/icc-api/model/SupplyProblem.ts +25 -0
  1552. package/icc-api/model/Suspension.ts +22 -0
  1553. package/icc-api/model/Tag.ts +20 -0
  1554. package/icc-api/model/Tarification.ts +213 -0
  1555. package/icc-api/model/Telecom.ts +64 -0
  1556. package/icc-api/model/TimeSeries.ts +28 -0
  1557. package/icc-api/model/TimeTable.ts +84 -0
  1558. package/icc-api/model/TimeTableHour.ts +20 -0
  1559. package/icc-api/model/TimeTableItem.ts +28 -0
  1560. package/icc-api/model/TokenWithGroup.ts +21 -0
  1561. package/icc-api/model/TypedValueObject.ts +40 -0
  1562. package/icc-api/model/Unit.ts +17 -0
  1563. package/icc-api/model/User.ts +132 -0
  1564. package/icc-api/model/UserAndHealthcareParty.ts +25 -0
  1565. package/icc-api/model/UserGroup.ts +25 -0
  1566. package/icc-api/model/Valorisation.ts +31 -0
  1567. package/icc-api/model/Verse.ts +65 -0
  1568. package/icc-api/model/VirtualForm.ts +22 -0
  1569. package/icc-api/model/VirtualIngredient.ts +33 -0
  1570. package/icc-api/model/Vmp.ts +40 -0
  1571. package/icc-api/model/VmpComponent.ts +28 -0
  1572. package/icc-api/model/VmpGroup.ts +34 -0
  1573. package/icc-api/model/VmpGroupStub.ts +23 -0
  1574. package/icc-api/model/VmpStub.ts +24 -0
  1575. package/icc-api/model/Vtm.ts +23 -0
  1576. package/icc-api/model/Wada.ts +22 -0
  1577. package/icc-api/model/WebSession.ts +26 -0
  1578. package/icc-api/model/WebSessionMaxIdleTime.ts +24 -0
  1579. package/icc-api/model/WebSessionMaxIdleTimeUnits.ts +21 -0
  1580. package/icc-api/model/Weekday.ts +21 -0
  1581. package/icc-api/model/models.ts +281 -0
  1582. package/icc-x-api/crypto/AES.ts +173 -0
  1583. package/icc-x-api/crypto/RSA.ts +170 -0
  1584. package/icc-x-api/crypto/shamir.ts +326 -0
  1585. package/icc-x-api/filters/AllCodesFilter.ts +22 -0
  1586. package/icc-x-api/filters/AllDevicesFilter.ts +23 -0
  1587. package/icc-x-api/filters/AllHealthcarePartiesFilter.ts +23 -0
  1588. package/icc-x-api/filters/AllUsersFilter.ts +23 -0
  1589. package/icc-x-api/filters/CodeByIdsFilter.ts +25 -0
  1590. package/icc-x-api/filters/CodeByRegionTypeLabelLanguageFilter.ts +28 -0
  1591. package/icc-x-api/filters/CodeIdsByTypeCodeVersionIntervalFilter.ts +30 -0
  1592. package/icc-x-api/filters/ComplementFilter.ts +13 -0
  1593. package/icc-x-api/filters/ConstantFilter.ts +9 -0
  1594. package/icc-x-api/filters/ContactByHcPartyFilter.ts +25 -0
  1595. package/icc-x-api/filters/ContactByHcPartyPatientTagCodeDateFilter.ts +32 -0
  1596. package/icc-x-api/filters/ContactByHcPartyTagCodeDateFilter.ts +32 -0
  1597. package/icc-x-api/filters/ContactByServiceIdsFilter.ts +24 -0
  1598. package/icc-x-api/filters/DeviceByHcPartyFilter.ts +26 -0
  1599. package/icc-x-api/filters/DeviceByIdsFilter.ts +26 -0
  1600. package/icc-x-api/filters/HealthElementByHcPartyFilter.ts +24 -0
  1601. package/icc-x-api/filters/HealthElementByHcPartyIdentifiersFilter.ts +26 -0
  1602. package/icc-x-api/filters/HealthElementByHcPartySecretForeignKeysFilter.ts +27 -0
  1603. package/icc-x-api/filters/HealthElementByHcPartyTagCodeFilter.ts +29 -0
  1604. package/icc-x-api/filters/HealthElementByIdsFilter.ts +24 -0
  1605. package/icc-x-api/filters/HealthcarePartyByIdsFilter.ts +24 -0
  1606. package/icc-x-api/filters/IntersectionFilter.ts +11 -0
  1607. package/icc-x-api/filters/InvoiceByHcPartyCodeDateFilter.ts +27 -0
  1608. package/icc-x-api/filters/MaintenanceTaskAfterDateFilter.ts +24 -0
  1609. package/icc-x-api/filters/MaintenanceTaskByHcPartyAndIdentifiersFilter.ts +26 -0
  1610. package/icc-x-api/filters/MaintenanceTaskByHcPartyAndTypeFilter.ts +25 -0
  1611. package/icc-x-api/filters/MaintenanceTaskByIdsFilter.ts +24 -0
  1612. package/icc-x-api/filters/PatientByHcPartyAndActiveFilter.ts +25 -0
  1613. package/icc-x-api/filters/PatientByHcPartyAndExternalIdFilter.ts +25 -0
  1614. package/icc-x-api/filters/PatientByHcPartyAndIdentifiersFilter.ts +26 -0
  1615. package/icc-x-api/filters/PatientByHcPartyAndSsinFilter.ts +25 -0
  1616. package/icc-x-api/filters/PatientByHcPartyAndSsinsFilter.ts +25 -0
  1617. package/icc-x-api/filters/PatientByHcPartyDateOfBirthBetweenFilter.ts +26 -0
  1618. package/icc-x-api/filters/PatientByHcPartyDateOfBirthFilter.ts +25 -0
  1619. package/icc-x-api/filters/PatientByHcPartyFilter.ts +24 -0
  1620. package/icc-x-api/filters/PatientByHcPartyGenderEducationProfession.ts +19 -0
  1621. package/icc-x-api/filters/PatientByHcPartyNameContainsFuzzyFilter.ts +25 -0
  1622. package/icc-x-api/filters/PatientByHcPartyNameFilter.ts +25 -0
  1623. package/icc-x-api/filters/PatientByIdsFilter.ts +24 -0
  1624. package/icc-x-api/filters/ServiceByContactsAndSubcontactsFilter.ts +28 -0
  1625. package/icc-x-api/filters/ServiceByHcPartyFilter.ts +24 -0
  1626. package/icc-x-api/filters/ServiceByHcPartyHealthElementIdsFilter.ts +25 -0
  1627. package/icc-x-api/filters/ServiceByHcPartyIdentifiersFilter.ts +26 -0
  1628. package/icc-x-api/filters/ServiceByHcPartyTagCodeDateFilter.ts +31 -0
  1629. package/icc-x-api/filters/ServiceByIdsFilter.ts +24 -0
  1630. package/icc-x-api/filters/ServiceBySecretForeignKeys.ts +25 -0
  1631. package/icc-x-api/filters/UnionFilter.ts +10 -0
  1632. package/icc-x-api/filters/UserByIdsFilter.ts +24 -0
  1633. package/icc-x-api/filters/UserByNameEmailPhoneFilter.ts +24 -0
  1634. package/icc-x-api/filters/UsersByPatientIdFilter.ts +25 -0
  1635. package/icc-x-api/filters/filters.ts +342 -0
  1636. package/icc-x-api/icc-accesslog-x-api.ts +329 -0
  1637. package/icc-x-api/icc-bekmehr-x-api.ts +316 -0
  1638. package/icc-x-api/icc-calendar-item-x-api.ts +282 -0
  1639. package/icc-x-api/icc-classification-x-api.ts +99 -0
  1640. package/icc-x-api/icc-code-x-api.ts +131 -0
  1641. package/icc-x-api/icc-contact-x-api.ts +959 -0
  1642. package/icc-x-api/icc-crypto-x-api.ts +2015 -0
  1643. package/icc-x-api/icc-doctemplate-x-api.ts +100 -0
  1644. package/icc-x-api/icc-document-x-api.ts +763 -0
  1645. package/icc-x-api/icc-form-x-api.ts +176 -0
  1646. package/icc-x-api/icc-hcparty-x-api.ts +148 -0
  1647. package/icc-x-api/icc-helement-x-api.ts +407 -0
  1648. package/icc-x-api/icc-invoice-x-api.ts +197 -0
  1649. package/icc-x-api/icc-maintenance-task-x-api.ts +227 -0
  1650. package/icc-x-api/icc-message-x-api.ts +83 -0
  1651. package/icc-x-api/icc-patient-x-api.ts +1253 -0
  1652. package/icc-x-api/icc-receipt-x-api.ts +103 -0
  1653. package/icc-x-api/icc-time-table-x-api.ts +61 -0
  1654. package/icc-x-api/icc-user-x-api.ts +27 -0
  1655. package/icc-x-api/index.ts +163 -0
  1656. package/icc-x-api/rsrc/codelng.ts +8 -0
  1657. package/icc-x-api/rsrc/contact.i18n.ts +110 -0
  1658. package/icc-x-api/rsrc/icd10.ts +113 -0
  1659. package/icc-x-api/rsrc/icpc2.ts +22 -0
  1660. package/icc-x-api/utils/asn1-packer.ts +87 -0
  1661. package/icc-x-api/utils/asn1-parser.ts +151 -0
  1662. package/icc-x-api/utils/binary-utils.ts +163 -0
  1663. package/icc-x-api/utils/code-util.ts +39 -0
  1664. package/icc-x-api/utils/crypto-utils.ts +235 -0
  1665. package/icc-x-api/utils/formatting-util.ts +220 -0
  1666. package/icc-x-api/utils/functional-util.ts +10 -0
  1667. package/icc-x-api/utils/hcp-util.ts +122 -0
  1668. package/icc-x-api/utils/index.ts +7 -0
  1669. package/icc-x-api/utils/insurability-util.ts +54 -0
  1670. package/icc-x-api/utils/net-utils.ts +243 -0
  1671. package/icc-x-api/utils/person-util.ts +29 -0
  1672. package/icc-x-api/utils/uuid-encoder.ts +120 -0
  1673. package/index.ts +8 -0
  1674. package/node-compat.ts +11 -0
  1675. package/package-lock.json +26824 -0
  1676. package/package.json +62 -3
  1677. package/sonar-project.properties +0 -0
  1678. package/test/icc-api/api/IccUserApi.ts +17 -0
  1679. package/test/icc-api/model/modelHelpersTest.ts +54 -0
  1680. package/test/icc-x-api/crypto/concurrency.ts +33 -0
  1681. package/test/icc-x-api/crypto/crypto-utils.ts +78 -0
  1682. package/test/icc-x-api/crypto/cryptoTest.ts +252 -0
  1683. package/test/icc-x-api/crypto/full-crypto-test.ts +517 -0
  1684. package/test/icc-x-api/crypto/shamir.ts +65 -0
  1685. package/test/icc-x-api/filters/filters.ts +60 -0
  1686. package/test/icc-x-api/icc-contact-x-api.ts +202 -0
  1687. package/test/icc-x-api/icc-helement-x-api-test.ts +161 -0
  1688. package/test/icc-x-api/icc-maintenance-task-x-api-test.ts +212 -0
  1689. package/test/icc-x-api/icc-patient-x-api-test.ts +75 -0
  1690. package/test/icc-x-api/patient-user.ts +152 -0
  1691. package/test/mocha.opts +1 -0
  1692. package/test/utils/test_utils.ts +12 -0
  1693. package/tsconfig.json +21 -0
  1694. package/icc-api/api/IccAuthApi.d.ts +0 -45
  1695. package/icc-api/api/IccAuthApi.js +0 -84
  1696. package/icc-api/api/IccAuthApi.js.map +0 -1
  1697. package/icc-x-api/crypto/shamir.js +0 -280
  1698. package/icc-x-api/crypto/shamir.js.map +0 -1
  1699. package/icc-x-api/filters/PatientByHcPartyGenderEducationProfession.js +0 -16
  1700. package/icc-x-api/filters/PatientByHcPartyGenderEducationProfession.js.map +0 -1
  1701. package/icc-x-api/icc-crypto-x-api.js +0 -1510
  1702. package/icc-x-api/icc-crypto-x-api.js.map +0 -1
  1703. package/icc-x-api/icc-maintenance-task-x-api.d.ts +0 -27
  1704. package/icc-x-api/icc-maintenance-task-x-api.js +0 -152
  1705. package/icc-x-api/icc-maintenance-task-x-api.js.map +0 -1
  1706. package/icc-x-api/icc-patient-x-api.d.ts +0 -90
  1707. package/icc-x-api/icc-patient-x-api.js +0 -850
  1708. package/icc-x-api/icc-patient-x-api.js.map +0 -1
  1709. package/node-compat.d.ts +0 -3
  1710. package/node-compat.js +0 -14
  1711. package/node-compat.js.map +0 -1
@@ -0,0 +1,2015 @@
1
+ import {IccDeviceApi, IccHcpartyApi, IccPatientApi} from '../icc-api'
2
+ import {AESUtils} from './crypto/AES'
3
+ import {RSAUtils} from './crypto/RSA'
4
+ import {ShamirClass} from './crypto/shamir'
5
+
6
+ import * as _ from 'lodash'
7
+ import {
8
+ Delegation,
9
+ Device,
10
+ Document,
11
+ EncryptedEntity,
12
+ EncryptedParentEntity,
13
+ HealthcareParty,
14
+ MaintenanceTask,
15
+ Patient,
16
+ PropertyStub,
17
+ PropertyTypeStub,
18
+ TypedValueObject,
19
+ User,
20
+ } from '../icc-api/model/models'
21
+ import { b2a, b64_2uas, hex2ua, string2ua, ua2hex, ua2string, ua2utf8, utf8_2ua } from './utils/binary-utils'
22
+ import { fold, jwk2spki, notConcurrent, pkcs8ToJwk, spkiToJwk } from './utils'
23
+ import { IccMaintenanceTaskXApi } from './icc-maintenance-task-x-api'
24
+
25
+ interface DelegatorAndKeys {
26
+ delegatorId: string
27
+ key: CryptoKey
28
+ rawKey: string
29
+ }
30
+
31
+ type CachedDataOwner =
32
+ | {
33
+ type: 'patient'
34
+ dataOwner: Patient
35
+ }
36
+ | {
37
+ type: 'device'
38
+ dataOwner: Device
39
+ }
40
+ | {
41
+ type: 'hcp'
42
+ dataOwner: HealthcareParty
43
+ }
44
+
45
+ export class IccCryptoXApi {
46
+ get crypto(): Crypto {
47
+ return this._crypto
48
+ }
49
+
50
+ get shamir(): ShamirClass {
51
+ return this._shamir
52
+ }
53
+
54
+ get RSA(): RSAUtils {
55
+ return this._RSA
56
+ }
57
+
58
+ get AES(): AESUtils {
59
+ return this._AES
60
+ }
61
+
62
+ hcPartyKeysCache: {
63
+ [key: string]: DelegatorAndKeys
64
+ } = {}
65
+
66
+ //[delegateId][delegatorId] = delegateEncryptedHcPartyKey
67
+ //for each delegate, it stores the list of delegators and the corresponding delegateEncryptedHcPartyKey (shared HcPartyKey, from delegator to delegate, encrypted with the RSA key of the delegate)
68
+ hcPartyKeysRequestsCache: {
69
+ [delegateId: string]: Promise<{ [key: string]: { [key: string]: { [key: string]: string } } }>
70
+ } = {}
71
+
72
+ cacheLastDeletionTimestamp: number | undefined = undefined
73
+
74
+ dataOwnerCache: { [key: string]: Promise<CachedDataOwner> } = {}
75
+
76
+ emptyHcpCache(hcpartyId: string) {
77
+ delete this.hcPartyKeysRequestsCache[hcpartyId]
78
+ delete this.dataOwnerCache[hcpartyId]
79
+ delete this.dataOwnerCache[hcpartyId]
80
+ }
81
+
82
+ /**
83
+ * Gets all delegate encrypted HcParty keys of the delegate with the given `delegateHcPartyId`, and for each key the delegator id
84
+ * If the keys are not cached, they are retrieved from the backend.
85
+ *
86
+ * @param delegateHcPartyId The Health Care Party id
87
+ * @returns \{delegatorId: delegateEncryptedHcPartyKey\}
88
+ */
89
+ private getEncryptedAesExchangeKeysForDelegate(
90
+ delegateHcPartyId: string
91
+ ): Promise<{ [key: string]: { [key: string]: { [key: string]: string } } }> {
92
+ return (
93
+ this.hcPartyKeysRequestsCache[delegateHcPartyId] ||
94
+ (this.hcPartyKeysRequestsCache[delegateHcPartyId] = this.forceGetEncryptedAesExchangeKeysForDelegate(delegateHcPartyId))
95
+ )
96
+ }
97
+
98
+ private forceGetEncryptedAesExchangeKeysForDelegate(
99
+ delegateHcPartyId: string
100
+ ): Promise<{ [key: string]: { [key: string]: { [key: string]: string } } }> {
101
+ return Promise.all([
102
+ this.patientBaseApi.getPatientAesExchangeKeysForDelegate(delegateHcPartyId).catch(() => {}),
103
+ this.hcpartyBaseApi.getAesExchangeKeysForDelegate(delegateHcPartyId).catch(() => {}),
104
+ this.deviceBaseApi.getDeviceAesExchangeKeysForDelegate(delegateHcPartyId).catch(() => {}),
105
+ ]).then(([a, b, c]) => ({ ...a, ...b, ...c }))
106
+ }
107
+
108
+ keychainLocalStoreIdPrefix = 'org.taktik.icure.ehealth.keychain.'
109
+ keychainValidityDateLocalStoreIdPrefix = 'org.taktik.icure.ehealth.keychain-date.'
110
+ hcpPreferenceKeyEhealthCert = 'eHealthCRTCrypt'
111
+ hcpPreferenceKeyEhealthCertDate = 'eHealthCRTDate'
112
+ rsaLocalStoreIdPrefix = 'org.taktik.icure.rsa.'
113
+
114
+ private hcpartyBaseApi: IccHcpartyApi
115
+ private patientBaseApi: IccPatientApi
116
+ private deviceBaseApi: IccDeviceApi
117
+ private readonly _crypto: Crypto
118
+
119
+ private generateKeyConcurrencyMap: { [key: string]: PromiseLike<HealthcareParty | Patient> }
120
+ private rsaKeyPairs: { [pubKeyFingerprint: string]: { publicKey: CryptoKey; privateKey: CryptoKey } } = {}
121
+
122
+ private readonly _AES: AESUtils
123
+ private readonly _RSA: RSAUtils
124
+ private readonly _shamir: ShamirClass
125
+
126
+ constructor(
127
+ host: string,
128
+ headers: { [key: string]: string },
129
+ hcpartyBaseApi: IccHcpartyApi, //Init with a hcparty x api for better performances
130
+ patientBaseApi: IccPatientApi,
131
+ deviceBaseApi: IccDeviceApi,
132
+ crypto: Crypto = typeof window !== 'undefined' ? window.crypto : typeof self !== 'undefined' ? self.crypto : ({} as Crypto)
133
+ ) {
134
+ this.hcpartyBaseApi = hcpartyBaseApi
135
+ this.patientBaseApi = patientBaseApi
136
+ this.deviceBaseApi = deviceBaseApi
137
+ this._crypto = crypto
138
+ this.generateKeyConcurrencyMap = {}
139
+
140
+ this._AES = new AESUtils(crypto)
141
+ this._RSA = new RSAUtils(crypto)
142
+ this._shamir = new ShamirClass(crypto)
143
+ }
144
+
145
+ randomUuid() {
146
+ return ((1e7).toString() + -1e3 + -4e3 + -8e3 + -1e11).replace(
147
+ /[018]/g,
148
+ (c) => (Number(c) ^ ((this._crypto.getRandomValues(new Uint8Array(1))! as Uint8Array)[0] & (15 >> (Number(c) / 4)))).toString(16) //Keep that inlined or you will loose the random
149
+ )
150
+ }
151
+
152
+ sha256(data: ArrayBuffer | Uint8Array) {
153
+ return this._crypto.subtle.digest('SHA-256', data)
154
+ }
155
+
156
+ private async getPublicKeys() {
157
+ return await Object.values(this.rsaKeyPairs).reduce(async (p, rsa) => {
158
+ return (await p).concat([jwk2spki(await this.RSA.exportKey(rsa.publicKey, 'jwk'))])
159
+ }, Promise.resolve([] as string[]))
160
+ }
161
+
162
+ encryptShamirRSAKey(hcp: HealthcareParty, notaries: Array<HealthcareParty>, threshold?: number): Promise<HealthcareParty> {
163
+ return this.loadKeyPairImported(hcp.id!).then((keyPair) =>
164
+ this._RSA.exportKey(keyPair.privateKey, 'pkcs8').then(async (exportedKey) => {
165
+ const privateKey = exportedKey as ArrayBuffer
166
+ const nLen = notaries.length
167
+ const shares = nLen == 1 ? [privateKey] : this._shamir.share(ua2hex(privateKey), nLen, threshold || nLen).map((share) => hex2ua(share))
168
+ const publicKeys = await this.getPublicKeys()
169
+
170
+ return _.reduce(
171
+ notaries,
172
+ (queue, notary, idx) => {
173
+ return queue.then(async (hcp) => {
174
+ const { owner: hcParty, aesExchangeKeys } = await this.getOrCreateHcPartyKeys(hcp, notary.id!)
175
+ const [publicKeyIdentifier, hcPartyKeys] = Object.entries(aesExchangeKeys)[0]
176
+
177
+ try {
178
+ const importedAESHcPartyKey = await this.decryptHcPartyKey(
179
+ notary.id!,
180
+ hcParty.id!,
181
+ notary.id!,
182
+ publicKeyIdentifier,
183
+ hcPartyKeys,
184
+ publicKeys
185
+ )
186
+ const encryptedShamirPartition = await this.AES.encrypt(importedAESHcPartyKey.key, shares[idx])
187
+
188
+ hcParty.privateKeyShamirPartitions = hcParty.privateKeyShamirPartitions || {}
189
+ hcParty.privateKeyShamirPartitions[notary.id!] = ua2hex(encryptedShamirPartition)
190
+ } catch (e) {
191
+ console.log('Error during encryptedShamirRSAKey', notary.id, e)
192
+ }
193
+ return hcParty
194
+ })
195
+ },
196
+ Promise.resolve(hcp)
197
+ )
198
+ })
199
+ )
200
+ }
201
+
202
+ /* Reconstructs the hcp's private key from the notaries' shamir shares and stores it in localstorage.
203
+ The retrieval procedure of the shares is not designed or implemented yet. Therefore, it currently only
204
+ works if the private key of the notaries are stored in local storage (e.g. notaries = [hcp parent]).
205
+ * @param hcp : the hcp whose key we want to reconstruct
206
+ * @param notaries : holders of the shamir shares
207
+ **/
208
+ async decryptShamirRSAKey(hcp: HealthcareParty, notaries: Array<HealthcareParty>): Promise<void> {
209
+ try {
210
+ const publicKeys = await this.getPublicKeys()
211
+ const nLen = notaries.length
212
+ let decryptedPrivatedKey
213
+ if (nLen == 1) {
214
+ const notaryHcPartyId = notaries[0].id!
215
+ const encryptedAesKeyMap = await this.getEncryptedAesExchangeKeys(hcp, notaryHcPartyId)
216
+ const importedAESHcPartyKey = await Promise.all(
217
+ Object.entries(encryptedAesKeyMap).map(
218
+ async ([idPubKey, keysMap]) => await this.decryptHcPartyKey(notaryHcPartyId, hcp.id!, notaryHcPartyId, idPubKey, keysMap, publicKeys)
219
+ )
220
+ )
221
+ const cryptedPrivatedKey = hcp.privateKeyShamirPartitions![notaryHcPartyId]
222
+ decryptedPrivatedKey = ua2hex(
223
+ await this.AES.decryptSome(
224
+ importedAESHcPartyKey.map((k) => k.key),
225
+ hex2ua(cryptedPrivatedKey)
226
+ )
227
+ )
228
+ } else {
229
+ const decryptedShares: string[] = await _.reduce(
230
+ notaries,
231
+ (queue, notary) => {
232
+ return queue.then(async (shares: string[]) => {
233
+ try {
234
+ // TODO: now, we get the encrypted shares in db and decrypt them. This assumes that the
235
+ // the notaries' private keys are in localstorage. We should implement a way for the notaries to
236
+ // give hcp the decrypted shares without having to also share their private keys.
237
+ const encryptedAesKeyMap = await this.getEncryptedAesExchangeKeys(hcp, notary.id!)
238
+ const importedAESHcPartyKey = await Promise.all(
239
+ Object.entries(encryptedAesKeyMap).map(
240
+ async ([idPubKey, keysMap]) => await this.decryptHcPartyKey(notary.id!, hcp.id!, notary.id!, idPubKey, keysMap, publicKeys)
241
+ )
242
+ )
243
+ const encryptedShare = hcp.privateKeyShamirPartitions![notary.id!]
244
+ const decryptedShamirPartition = ua2hex(
245
+ await this.AES.decryptSome(
246
+ importedAESHcPartyKey.map((k) => k.key),
247
+ hex2ua(encryptedShare)
248
+ )
249
+ )
250
+ shares.push(decryptedShamirPartition)
251
+ } catch (e) {
252
+ console.log('Error during encryptedShamirRSAKey', notary.id, e)
253
+ }
254
+ return shares
255
+ })
256
+ },
257
+ Promise.resolve([] as string[])
258
+ )
259
+
260
+ decryptedPrivatedKey = this._shamir.combine(decryptedShares)
261
+ }
262
+
263
+ const importedPrivateKey = await this._RSA.importKey('pkcs8', hex2ua(decryptedPrivatedKey), ['decrypt'])
264
+ const importedPublicKey = await this._RSA.importKey('spki', hex2ua(hcp.publicKey!), ['encrypt'])
265
+
266
+ const exportedKeyPair = await this._RSA.exportKeys({ publicKey: importedPublicKey, privateKey: importedPrivateKey }, 'jwk', 'jwk')
267
+ this.storeKeyPair(hcp.id!, exportedKeyPair)
268
+ } catch (e) {
269
+ console.log('Cannot decrypt shamir RSA key')
270
+ }
271
+ }
272
+
273
+ /**
274
+ * Gets the decryptedHcPartyKey for the given `encryptedHcPartyKey`
275
+ *
276
+ * If the decrypted key exists in the cache, retrieves it from there.
277
+ * Otherwise, decrypts it using the RSA key of the delegator or delegate (depending on the value of `encryptedForDelegator`)
278
+ *
279
+ * @param loggedHcPartyId The logged DataOwner id or the id of his parent
280
+ * @param delegatorId The id of Delegator eg, the DataOwner where this AES exchange key is stored
281
+ * @param delegateHcPartyId The id of the delegate : the data owner for whom this aes exchange key has been created
282
+ * @param publicKey The public key of the delegator : A unique aes exchange key is created for each public key of the delegator. This is the public key corresponding to the encryptedHcPartyKeys
283
+ * @param encryptedHcPartyKeys The encryptedHcPartyKeys to be decrypted
284
+ * @param publicKeys The public keys for which we might have a private key
285
+ *
286
+ * @returns - **delegatorId** the input param `delegatorId`
287
+ * - **key** the decrypted `encryptedHcPartyKey`
288
+ */
289
+
290
+ async decryptHcPartyKey(
291
+ loggedHcPartyId: string,
292
+ delegatorId: string,
293
+ delegateHcPartyId: string,
294
+ publicKey: string,
295
+ encryptedHcPartyKeys: { [key: string]: string },
296
+ publicKeys: string[]
297
+ ): Promise<DelegatorAndKeys> {
298
+ if (!publicKeys.length) {
299
+ const reason = `Cannot decrypt RSA encrypted AES HcPartyKey from ${delegatorId} to ${delegateHcPartyId}: no public key`
300
+ console.warn(reason)
301
+ throw new Error(reason)
302
+ }
303
+
304
+ const cacheKey = `${delegateHcPartyId}|${publicKey.slice(-32)}|${delegatorId}`
305
+ const res = this.hcPartyKeysCache[cacheKey]
306
+
307
+ if (res) {
308
+ return res
309
+ }
310
+
311
+ const result = await publicKeys.reduce(async (res, pk) => {
312
+ const delegatorAndKeys = await res
313
+ if (delegatorAndKeys) {
314
+ return delegatorAndKeys
315
+ }
316
+
317
+ const fingerprint = pk.slice(-32)
318
+ const keyPair = this.rsaKeyPairs[fingerprint] ?? (await this.cacheKeyPair(this.loadKeyPairNotImported(loggedHcPartyId, fingerprint)))
319
+ if (!keyPair) {
320
+ return
321
+ }
322
+
323
+ const encryptedHcPartyKey = encryptedHcPartyKeys[fingerprint]
324
+ if (!encryptedHcPartyKey) {
325
+ return
326
+ }
327
+
328
+ try {
329
+ const decryptedAesExchangeKey = await this._RSA.decrypt(keyPair.privateKey, hex2ua(encryptedHcPartyKey))
330
+ const importedAesExchangeKey = await this._AES.importKey('raw', decryptedAesExchangeKey)
331
+ return (this.hcPartyKeysCache[cacheKey] = {
332
+ delegatorId: delegatorId,
333
+ key: importedAesExchangeKey,
334
+ rawKey: ua2hex(new Uint8Array(decryptedAesExchangeKey)),
335
+ })
336
+ } catch (e) {
337
+ const reason = `Cannot decrypt RSA encrypted AES HcPartyKey from ${delegatorId} to ${delegateHcPartyId} for pubKey ${fingerprint}: impossible to decrypt`
338
+ console.log(reason)
339
+ }
340
+ }, Promise.resolve() as Promise<DelegatorAndKeys | void>)
341
+
342
+ const availablePublicKeys = publicKeys.filter((pk) => this.rsaKeyPairs[pk.slice(-32)])
343
+
344
+ if (!result) {
345
+ //Try to find another key from the transfer keys
346
+ const hcp = (await this.getDataOwner(loggedHcPartyId))!
347
+ const candidates = Object.entries(hcp.dataOwner.transferKeys ?? {})
348
+ .filter(([fp, _]) => availablePublicKeys.some((pk) => pk.slice(-32) === fp.slice(-32))) // only keep keys that we will be able to decrypt
349
+ .flatMap(([pk, keys]) => Object.entries(keys).map(([k, v]) => [pk, k, v]))
350
+ .filter(([_, k]) => !publicKeys.some((apk) => apk.slice(-32) === k.slice(-32)))
351
+ if (candidates.length) {
352
+ const newPublicKeys = await candidates.reduce(async (p, [decryptionKeyFingerprint, privateKeyFingerprint, encryptedPrivateKey]) => {
353
+ const newKeys = await p
354
+ const aesExchangeKeys = Object.entries(hcp.dataOwner.aesExchangeKeys!).find(
355
+ ([fp, _]) => fp.slice(-32) === privateKeyFingerprint.slice(-32)
356
+ )?.[1][loggedHcPartyId]
357
+ if (aesExchangeKeys) {
358
+ const encryptedAesExchangeKey = Object.entries(aesExchangeKeys).find(
359
+ ([fp, _]) => fp.slice(-32) === decryptionKeyFingerprint.slice(-32)
360
+ )?.[1]
361
+ if (encryptedAesExchangeKey) {
362
+ const keyPair = this.rsaKeyPairs[decryptionKeyFingerprint.slice(-32)]
363
+ if (!keyPair) {
364
+ return newKeys
365
+ }
366
+ const decryptedAesExchangeKey = await this._RSA.decrypt(keyPair.privateKey, hex2ua(encryptedAesExchangeKey))
367
+ const importedAesExchangeKey = await this._AES.importKey('raw', decryptedAesExchangeKey)
368
+
369
+ const decryptedPrivateKey = await this._AES.decrypt(importedAesExchangeKey, hex2ua(encryptedPrivateKey))
370
+
371
+ const newPublicKey = Object.keys(hcp.dataOwner.aesExchangeKeys!).find((fp) => fp.slice(-32) === privateKeyFingerprint.slice(-32))!
372
+ await this.cacheKeyPair({
373
+ publicKey: spkiToJwk(hex2ua(newPublicKey)),
374
+ privateKey: pkcs8ToJwk(decryptedPrivateKey),
375
+ })
376
+
377
+ return newKeys.concat([newPublicKey])
378
+ }
379
+ }
380
+ return newKeys
381
+ }, Promise.resolve([]) as Promise<string[]>)
382
+
383
+ if (newPublicKeys.length) {
384
+ return await this.decryptHcPartyKey(loggedHcPartyId, delegatorId, delegateHcPartyId, publicKey, encryptedHcPartyKeys, newPublicKeys)
385
+ }
386
+ }
387
+
388
+ const reason = `Cannot decrypt RSA encrypted AES HcPartyKey from ${delegatorId} to ${delegateHcPartyId}: impossible to decrypt. No private key was found or could be used to decrypt the aes exchange keys`
389
+ console.log(reason)
390
+ throw new Error(reason)
391
+ }
392
+
393
+ return result
394
+ }
395
+
396
+ /**
397
+ * Cache the RSA private/public key pair for the HcP with the given id `hcPartyKeyOwner`
398
+ */
399
+ cacheKeyPair(keyPairInJwk: { publicKey: JsonWebKey; privateKey: JsonWebKey }) {
400
+ return this._RSA.importKeyPair('jwk', keyPairInJwk.privateKey, 'jwk', keyPairInJwk.publicKey).then((importedKeyPair) => {
401
+ const pk = jwk2spki(keyPairInJwk.publicKey)
402
+ return (this.rsaKeyPairs[pk.slice(-32)] = importedKeyPair)
403
+ })
404
+ }
405
+
406
+ /**
407
+ * Gets the secret ID (SFKs) that should be used in the prescribed context (confidential or not) from decrypted SPKs of the given `parent`, decrypted by the HcP with the given `hcpartyId` AND by its HcP parents
408
+ * @param parent :the object of which delegations (SPKs) to decrypt
409
+ * @param hcpartyId :the id of the delegate HcP
410
+ * @param confidential :weather the key is going to be used for a confidential piece or data or not
411
+ * @returns - **extractedKeys** array containing secret IDs (SFKs) from decrypted SPKs, from both given HcP and its parents ; can contain duplicates
412
+ * - **hcpartyId** the given `hcpartyId` OR, if a parent exist, the HcP id of the top parent in the hierarchy (even if that parent has no delegations)
413
+ */
414
+ async extractPreferredSfk(parent: EncryptedParentEntity, hcpartyId: string, confidential: boolean) {
415
+ const secretForeignKeys = await this.extractSFKsHierarchyFromDelegations(parent, hcpartyId)
416
+ const keys = secretForeignKeys
417
+ .filter(({ extractedKeys }) => extractedKeys.length > 0)
418
+ .filter((x, idx) => (confidential ? x.hcpartyId === hcpartyId : idx === 0))[0]
419
+
420
+ return (
421
+ (keys &&
422
+ (confidential
423
+ ? keys.extractedKeys.find(
424
+ (k) => !secretForeignKeys.some(({ extractedKeys, hcpartyId: parentHcpId }) => hcpartyId !== parentHcpId && extractedKeys.includes(k))
425
+ )
426
+ : keys.extractedKeys[0])) ||
427
+ undefined
428
+ )
429
+ }
430
+
431
+ /**
432
+ * Gets an array of decrypted HcPartyKeys, shared between the delegate with ID `delegateHcPartyId` and the delegators in `delegatorsHcPartyIdsSet`
433
+ *
434
+ * 1. Get the keys for the delegateHealthCareParty (cache/backend).
435
+ * 2. For each key in the delegators, decrypt it with the delegate's private key
436
+ * 3. Filter out undefined keys and return them
437
+ *
438
+ * @param delegatorsHcPartyIdsSet array of delegator HcP IDs that could have delegated something to the HcP with ID `delegateHcPartyId`
439
+ * @param delegateHcPartyId the HcP for which the HcPs with IDs in `delegatorsHcPartyIdsSet` could have delegated something
440
+ * @param minCacheDurationInSeconds The minimum cache duration
441
+ * @returns - **delegatorId** : the id of the delegator HcP that shares the **key** with the `delegateHcPartyId`
442
+ * - **key** the decrypted HcPartyKey, shared between **delegatorId** and `delegateHcPartyId`
443
+ */
444
+ async decryptAndImportAesHcPartyKeysForDelegators(
445
+ delegatorsHcPartyIdsSet: Array<string>,
446
+ delegateHcPartyId: string,
447
+ minCacheDurationInSeconds: number = 60
448
+ ): Promise<Array<DelegatorAndKeys>> {
449
+ const aesExchangeKeys = await (
450
+ this.hcPartyKeysRequestsCache[delegateHcPartyId] ||
451
+ (this.hcPartyKeysRequestsCache[delegateHcPartyId] = this.getEncryptedAesExchangeKeysForDelegate(delegateHcPartyId))
452
+ ).then(async (delegatorIdsWithDelegateEncryptedHcPartyKeys: { [key: string]: { [key: string]: { [key: string]: string } } }) => {
453
+ // [key: delegatorId] = delegateEncryptedHcPartyKey
454
+ // For each delegatorId, obtain the AES key (decrypted HcParty Key) shared with the delegate, decrypted by the delegate
455
+ return (
456
+ await Promise.all(
457
+ delegatorsHcPartyIdsSet.map(async (delegatorId: string) => {
458
+ const encryptedHcPartyKeysForPubKeyFingerprint = delegatorIdsWithDelegateEncryptedHcPartyKeys[delegatorId]
459
+ if (!encryptedHcPartyKeysForPubKeyFingerprint) {
460
+ return [] as DelegatorAndKeys[]
461
+ }
462
+ const decryptedKeys = await Promise.all(
463
+ Object.entries(encryptedHcPartyKeysForPubKeyFingerprint).map(async ([delegatorPubKeyFinerprint, encryptedAesExchangeKeys]) => {
464
+ try {
465
+ return await this.decryptHcPartyKey(
466
+ delegateHcPartyId,
467
+ delegatorId,
468
+ delegateHcPartyId,
469
+ delegatorPubKeyFinerprint,
470
+ encryptedAesExchangeKeys,
471
+ Object.keys(this.rsaKeyPairs)
472
+ )
473
+ } catch (e) {
474
+ console.log(`failed to decrypt hcPartyKey from ${delegatorId} to ${delegateHcPartyId}`)
475
+ return
476
+ }
477
+ })
478
+ )
479
+ return decryptedKeys.filter((x) => !!x) as DelegatorAndKeys[]
480
+ })
481
+ )
482
+ ).reduce((acc, x) => [...acc, ...x], [])
483
+ })
484
+
485
+ if (aesExchangeKeys.length > 0) {
486
+ return aesExchangeKeys
487
+ }
488
+
489
+ const nowTimestamp = +new Date()
490
+ if (!this.cacheLastDeletionTimestamp || (nowTimestamp - this.cacheLastDeletionTimestamp) / 1000 >= minCacheDurationInSeconds) {
491
+ delete this.hcPartyKeysRequestsCache[delegateHcPartyId]
492
+ this.cacheLastDeletionTimestamp = nowTimestamp
493
+ return this.decryptAndImportAesHcPartyKeysForDelegators(delegatorsHcPartyIdsSet, delegateHcPartyId, minCacheDurationInSeconds)
494
+ }
495
+
496
+ return []
497
+ }
498
+
499
+ /**
500
+ * Gets an array of decrypted HcPartyKeys from the given `delegations`, that are shared with / can be decrypted by the HcP with the given `healthcarePartyId` (or by its parents when `fallbackOnParent` is true)
501
+ *
502
+ * 1. Checks whether the delegations' object has a delegation for the
503
+ * given healthCarePartyId.
504
+ * 2. Enumerates all the delegators (delegation.owner) present in
505
+ * the delegations.
506
+ * 3. Decrypt's delegators' keys and returns them.
507
+ *
508
+ * @param dataOwnerId : the id of the delegate HCP
509
+ * @param delegations : delegations (can be SPKs, CFKs, EKs) for all delegates
510
+ * @param fallbackOnParent default true; use parent's healthCarePartyId in case there's no delegation for the `healthcarePartyId`
511
+ * @returns - **delegatorId** : the id of the delegator HcP that shares the **key** with the `healthcarePartyId`
512
+ * - **key** the decrypted HcPartyKey, shared between **delegatorId** and `healthcarePartyId`
513
+ */
514
+ async getDecryptedAesExchangeKeysOfDelegateAndParentsFromGenericDelegations(
515
+ dataOwnerId: string,
516
+ delegations: { [key: string]: Array<Delegation> },
517
+ fallbackOnParent = true
518
+ ): Promise<Array<DelegatorAndKeys>> {
519
+ const delegationsArray = delegations[dataOwnerId] ?? []
520
+
521
+ if (!delegationsArray.length && fallbackOnParent) {
522
+ const { dataOwner: hcp } = await this.getDataOwner(dataOwnerId)
523
+ return (hcp as any).parentId
524
+ ? await this.getDecryptedAesExchangeKeysOfDelegateAndParentsFromGenericDelegations((hcp as any).parentId, delegations)
525
+ : []
526
+ } else {
527
+ const delegatorIds = new Set<string>()
528
+ delegationsArray.forEach((del) => delegatorIds.add(del.owner!))
529
+ return this.decryptAndImportAesHcPartyKeysForDelegators(Array.from(delegatorIds), dataOwnerId)
530
+ }
531
+ }
532
+
533
+ /**
534
+ * Retrieve the owner HealthCareParty key and use it to encrypt
535
+ * both the delegations (createdObject.id) and the cryptedForeignKeys
536
+ * (parentObject.id), and returns them in an object.
537
+ */
538
+ async initObjectDelegations(
539
+ createdObject: any,
540
+ parentObject: any,
541
+ ownerId: string,
542
+ secretForeignKeyOfParent: string | null
543
+ ): Promise<{
544
+ owner: HealthcareParty | Device | Patient
545
+ delegations: any
546
+ cryptedForeignKeys: any
547
+ secretForeignKeys: any[]
548
+ secretId: string
549
+ }> {
550
+ const publicKeys = await this.getPublicKeys()
551
+
552
+ this.throwDetailedExceptionForInvalidParameter('createdObject.id', createdObject.id, 'initObjectDelegations', arguments)
553
+
554
+ if (parentObject) this.throwDetailedExceptionForInvalidParameter('parentObject.id', parentObject.id, 'initObjectDelegations', arguments)
555
+
556
+ const secretId = this.randomUuid()
557
+ return this.getDataOwner(ownerId).then(async ({ dataOwner: owner }) => {
558
+ const { owner: modifiedOwner, aesExchangeKeys } = await this.getOrCreateHcPartyKeys(owner, ownerId)
559
+ const importedAESHcPartyKey = await this.decryptAnyAesExchangeKeyForOwner(aesExchangeKeys, ownerId, ownerId, ownerId, publicKeys)
560
+
561
+ const encryptedDelegation = await this._AES.encrypt(
562
+ importedAESHcPartyKey.key,
563
+ string2ua(createdObject.id + ':' + secretId).buffer as ArrayBuffer,
564
+ importedAESHcPartyKey.rawKey
565
+ )
566
+ const encryptedSecretForeignKey =
567
+ parentObject &&
568
+ this._AES.encrypt(
569
+ importedAESHcPartyKey.key,
570
+ string2ua(createdObject.id + ':' + parentObject.id).buffer as ArrayBuffer,
571
+ importedAESHcPartyKey.rawKey
572
+ )
573
+
574
+ return {
575
+ owner: modifiedOwner,
576
+ delegations: _.fromPairs([
577
+ [
578
+ ownerId,
579
+ [
580
+ {
581
+ owner: ownerId,
582
+ delegatedTo: ownerId,
583
+ key: ua2hex(encryptedDelegation!),
584
+ },
585
+ ],
586
+ ],
587
+ ]),
588
+ cryptedForeignKeys:
589
+ (encryptedSecretForeignKey &&
590
+ _.fromPairs([
591
+ [
592
+ ownerId,
593
+ [
594
+ {
595
+ owner: ownerId,
596
+ delegatedTo: ownerId,
597
+ key: ua2hex(encryptedSecretForeignKey!),
598
+ },
599
+ ],
600
+ ],
601
+ ])) ||
602
+ {},
603
+ secretForeignKeys: (secretForeignKeyOfParent && [secretForeignKeyOfParent]) || [],
604
+ secretId: secretId,
605
+ }
606
+ })
607
+ }
608
+
609
+ private async decryptAnyAesExchangeKeyForOwner(
610
+ aesExchangeKeys: { [p: string]: { [p: string]: string } },
611
+ loggedHcPartyId: string,
612
+ delegatorId: string,
613
+ delegateHcPartyId: string,
614
+ publicKeys: string[]
615
+ ) {
616
+ const importedAESHcPartyKey = await Object.entries(aesExchangeKeys).reduce(async (acc, [publicKeyIdentifier, hcPartyKeys]) => {
617
+ const accValue = await acc
618
+ if (accValue) {
619
+ return accValue
620
+ }
621
+ try {
622
+ return await this.decryptHcPartyKey(loggedHcPartyId, delegatorId, delegateHcPartyId, publicKeyIdentifier, hcPartyKeys, publicKeys)
623
+ } catch (e) {
624
+ return undefined
625
+ }
626
+ }, Promise.resolve() as Promise<DelegatorAndKeys | undefined>)
627
+
628
+ if (!importedAESHcPartyKey) {
629
+ throw new Error(`No hcParty key can be decrypted from ${delegatorId} to ${delegateHcPartyId} using currently available private keys`)
630
+ }
631
+ return importedAESHcPartyKey
632
+ }
633
+
634
+ /**
635
+ * Gets updated instances of SPKs and CKFs for the child object `modifiedObject`.
636
+ * These updated SPKs and CKFs contain new SPKs/CFKs to provide delegation from delegator HcP with id `ownerId` to delegate HcP with id `delegateId`
637
+ *
638
+ * 1. if `secretIdOfModifiedObject` is not provided, the method will throw an exception; this `secretIdOfModifiedObject` is used to generate a new delegation (SPK) in step 3;
639
+ * the `secretIdOfModifiedObject` is returned, unmodified, as `secretId`
640
+ * 2. if the owner (delegator) did not perform a delegation to the delegate, then this HcP delegation (creation of a new HcPKey) is performed now
641
+ * 3. creates a new delegation (Secret Primary Keys) on the `modifiedObject` encrypted with the HcPKey from owner to the delegate;
642
+ * 4. if `parentObject` != null, creates a new CFK on the `modifiedObject` encrypted with the HcPKey from owner to the delegate;
643
+ * 5. this new delegation (from step 3) is added to the list of existing delegations (Secret Primary Keys) on the `modifiedObject` for the delegate given by `delegateId`
644
+ * 6. if the CFK (from step 4) can be created, this new CFK is added to the list of existing CFKs on the `modifiedObject` for the delegate given by `delegateId`
645
+ * 7. then some duplicates delegations (SPKs) and CKFs are removed
646
+ *
647
+ * @param modifiedObject : the object of which SPKs and CFKs will be cloned, the clones will be modified and then used as returned values ; it's a 'child' of `parentObject`; will NOT be mutated
648
+ * @param parentObject : will NOT be mutated
649
+ * @param ownerId : the HcP id of the delegator
650
+ * @param delegateId : the HcP id of the delegate
651
+ * @param secretIdOfModifiedObject : the secret id used in the child object to generate its SPK
652
+ * @returns - **delegations** existing delegations (SPKs) of the `modifiedObject`, appended with results from step 5
653
+ * - **cryptedForeignKeys** existing CFKs of the `modifiedObject`, appended with results from steps 6
654
+ * - **secretId** which is the given input parameter `secretIdOfModifiedObject`
655
+ */
656
+
657
+ extendedDelegationsAndCryptedForeignKeys<T extends EncryptedEntity, P extends EncryptedParentEntity>(
658
+ //TODO: suggested name: getExtendedChildObjectSPKandCFKwithDelegationFromDelegatorToDelegate
659
+ modifiedObject: T,
660
+ parentObject: P | null,
661
+ ownerId: string,
662
+ delegateId: string,
663
+ secretIdOfModifiedObject: string | null
664
+ ): Promise<{
665
+ modifiedObject: T
666
+ delegations: { [key: string]: Array<Delegation> }
667
+ cryptedForeignKeys: { [key: string]: Array<Delegation> }
668
+ secretId: string | null //TODO: why input parameter secretIdOfModifiedObject is returned?
669
+ }> {
670
+ this.throwDetailedExceptionForInvalidParameter('modifiedObject.id', modifiedObject.id, 'extendedDelegationsAndCryptedForeignKeys', arguments) //modifiedObject should never be null
671
+
672
+ if (parentObject)
673
+ this.throwDetailedExceptionForInvalidParameter('parentObject.id', parentObject?.id, 'extendedDelegationsAndCryptedForeignKeys', arguments)
674
+
675
+ this.throwDetailedExceptionForInvalidParameter(
676
+ 'secretIdOfModifiedObject',
677
+ secretIdOfModifiedObject,
678
+ 'extendedDelegationsAndCryptedForeignKeys',
679
+ arguments
680
+ )
681
+
682
+ return this.getDataOwner(ownerId)
683
+ .then(async ({ dataOwner: owner }) => {
684
+ const publicKeys = await this.getPublicKeys()
685
+ const { owner: modifiedOwner, aesExchangeKeys } = await this.getOrCreateHcPartyKeys(owner, delegateId)
686
+ const importedAESHcPartyKey = await this.decryptAnyAesExchangeKeyForOwner(aesExchangeKeys, ownerId, delegateId, ownerId, publicKeys)
687
+
688
+ modifiedObject = modifiedObject?.id === owner.id ? (modifiedOwner as T) : modifiedObject
689
+
690
+ return {
691
+ previousDecryptedDelegations: await Promise.all(
692
+ ((modifiedObject.delegations || {})[delegateId] || []).map(
693
+ (d: Delegation) =>
694
+ (d.key &&
695
+ d.owner === ownerId &&
696
+ this._AES.decrypt(importedAESHcPartyKey.key, hex2ua(d.key), importedAESHcPartyKey.rawKey).catch(() => {
697
+ console.log(
698
+ `Cannot decrypt delegation from ${d.owner} to ${d.delegatedTo} for object with id ${modifiedObject.id}:`,
699
+ modifiedObject
700
+ )
701
+ return Promise.resolve()
702
+ })) ||
703
+ Promise.resolve()
704
+ ) as Array<Promise<ArrayBuffer>>
705
+ ),
706
+
707
+ previousDecryptedCryptedForeignKeys: await Promise.all(
708
+ ((modifiedObject.cryptedForeignKeys || {})[delegateId] || []).map(
709
+ (d: Delegation) =>
710
+ (d.key &&
711
+ d.owner === ownerId &&
712
+ this._AES.decrypt(importedAESHcPartyKey.key, hex2ua(d.key), importedAESHcPartyKey.rawKey).catch(() => {
713
+ console.log(
714
+ `Cannot decrypt cryptedForeignKeys from ${d.owner} to ${d.delegatedTo} for object with id ${modifiedObject.id}:`,
715
+ modifiedObject
716
+ )
717
+ return Promise.resolve()
718
+ })) ||
719
+ Promise.resolve()
720
+ ) as Array<Promise<ArrayBuffer>>
721
+ ),
722
+
723
+ cryptedDelegation: await this._AES.encrypt(
724
+ importedAESHcPartyKey.key,
725
+ string2ua(modifiedObject.id + ':' + secretIdOfModifiedObject!).buffer as ArrayBuffer,
726
+ importedAESHcPartyKey.rawKey
727
+ ),
728
+
729
+ cryptedForeignKey: parentObject
730
+ ? await this._AES.encrypt(
731
+ importedAESHcPartyKey.key,
732
+ string2ua(modifiedObject.id + ':' + parentObject.id).buffer as ArrayBuffer,
733
+ importedAESHcPartyKey.rawKey
734
+ )
735
+ : undefined,
736
+ }
737
+ })
738
+ .then(({ previousDecryptedDelegations, previousDecryptedCryptedForeignKeys, cryptedDelegation, cryptedForeignKey }) => {
739
+ //try to limit the extent of the modifications to the delegations by preserving the redundant delegation already present and removing duplicates
740
+ //For delegate delegateId, we create:
741
+ // 1. an array of objects { d : {owner,delegatedTo,encrypted(key)}} with one object for each existing delegation and the new key concatenated
742
+ // 2. an array of objects { k : decrypted(key)} with one object for the existing delegations and the new key concatenated
743
+ // We merge them to get one array of objects: { d: {owner,delegatedTo,encrypted(key)}, k: decrypted(key)}
744
+ const delegationCryptedDecrypted = (
745
+ _.merge(
746
+ ((modifiedObject.delegations || {})[delegateId] || []).map((d: Delegation) => ({
747
+ d,
748
+ })),
749
+ (previousDecryptedDelegations || []).map((dd) => (dd ? ua2string(dd) : null)).map((k) => ({ k }))
750
+ ) as { d: Delegation; k: string }[]
751
+ )
752
+ .filter(({ d, k }) => !!k || d.owner !== ownerId) //Only keep the ones created by us that can still be decrypted
753
+ .map(({ d, k }) => ({
754
+ d,
755
+ k: k || this.randomUuid(),
756
+ })) // Use some unique id that ensures the delegation not created by us are going to be held
757
+ .concat([
758
+ {
759
+ d: {
760
+ owner: ownerId,
761
+ delegatedTo: delegateId,
762
+ key: ua2hex(cryptedDelegation!),
763
+ },
764
+ k: modifiedObject.id + ':' + secretIdOfModifiedObject!,
765
+ },
766
+ ])
767
+
768
+ const allDelegations = _.cloneDeep(modifiedObject.delegations || {})
769
+
770
+ //Only keep one version of the decrypted key
771
+ allDelegations[delegateId] = _.uniqBy(delegationCryptedDecrypted, (x: any) => x.k).map((x: any) => x.d)
772
+
773
+ const cryptedForeignKeysCryptedDecrypted = (
774
+ _.merge(
775
+ ((modifiedObject.cryptedForeignKeys || {})[delegateId] || []).map((d: Delegation) => ({
776
+ d,
777
+ })),
778
+ (previousDecryptedCryptedForeignKeys || []).map((dd) => (dd ? ua2string(dd) : null)).map((k) => ({ k }))
779
+ ) as { d: Delegation; k: string }[]
780
+ )
781
+ .filter(({ d, k }) => !!k || d.owner !== ownerId) //Only keep the ones created by us that can still be decrypted
782
+ .map(({ d, k }: { d: Delegation; k: string }) => ({
783
+ d,
784
+ k: k || this.randomUuid(),
785
+ })) // Use some unique id that ensures the delegation not created by us are going to be held
786
+ .concat(
787
+ cryptedForeignKey
788
+ ? [
789
+ {
790
+ d: {
791
+ owner: ownerId,
792
+ delegatedTo: delegateId,
793
+ key: ua2hex(cryptedForeignKey),
794
+ },
795
+ k: modifiedObject.id + ':' + parentObject?.id,
796
+ },
797
+ ]
798
+ : []
799
+ )
800
+
801
+ const allCryptedForeignKeys = _.cloneDeep(modifiedObject.cryptedForeignKeys || {})
802
+ if (cryptedForeignKeysCryptedDecrypted.length > 0) {
803
+ allCryptedForeignKeys[delegateId] = _.uniqBy(cryptedForeignKeysCryptedDecrypted, (x: any) => x.k).map((x: any) => x.d)
804
+ }
805
+
806
+ return {
807
+ modifiedObject,
808
+ delegations: allDelegations,
809
+ cryptedForeignKeys: allCryptedForeignKeys,
810
+ secretId: secretIdOfModifiedObject,
811
+ }
812
+ })
813
+ }
814
+
815
+ async getEncryptedAesExchangeKeys(
816
+ owner: HealthcareParty | Patient | Device,
817
+ delegateId: string
818
+ ): Promise<{ [pubKeyIdentifier: string]: { [pubKeyFingerprint: string]: string } }> {
819
+ const publicKeys = await this.getPublicKeys()
820
+ const mapOfAesExchangeKeys = Object.entries(owner.aesExchangeKeys ?? {})
821
+ .filter((e) => e[1][delegateId] && Object.keys(e[1][delegateId]).some((k1) => publicKeys.some((pk) => pk.endsWith(k1))))
822
+ .reduce((map, e) => {
823
+ const candidates = Object.entries(e[1][delegateId])
824
+ const [publicKeyFingerprint, encryptedAesExchangeKey] = candidates[candidates.findIndex(([k, v]) => publicKeys.some((pk) => pk.endsWith(k)))]
825
+ return { ...map, [e[0]]: { [publicKeyFingerprint]: encryptedAesExchangeKey } }
826
+ }, {} as { [pubKeyIdentifier: string]: { [pubKeyFingerprint: string]: string } })
827
+
828
+ return !owner.publicKey || mapOfAesExchangeKeys[owner.publicKey] || !owner.hcPartyKeys?.[delegateId] || (publicKeys.find((p) => p == owner.publicKey!) == undefined)
829
+ ? mapOfAesExchangeKeys
830
+ : { ...mapOfAesExchangeKeys, [owner.publicKey]: { [owner.publicKey.slice(-32)]: owner.hcPartyKeys[delegateId][0] } }
831
+ }
832
+
833
+ async getOrCreateHcPartyKeys(
834
+ owner: HealthcareParty | Patient | Device,
835
+ delegateId: string
836
+ ): Promise<{
837
+ owner: HealthcareParty | Patient | Device
838
+ aesExchangeKeys: { [pubKeyIdentifier: string]: { [pubKeyFingerprint: string]: string } }
839
+ }> {
840
+ const aesExchangeKeys = await this.getEncryptedAesExchangeKeys(owner, delegateId)
841
+ if (Object.keys(aesExchangeKeys).length) {
842
+ return { owner, aesExchangeKeys }
843
+ }
844
+
845
+ const modifiedOwner = await this.generateKeyForDelegate(owner.id!, delegateId)
846
+ return { owner: modifiedOwner, aesExchangeKeys: await this.getEncryptedAesExchangeKeys(modifiedOwner, delegateId) }
847
+ }
848
+
849
+ /**
850
+ * Retrieve the owners HealthCareParty key, decrypt it, and
851
+ * use it to encrypt & initialize the "encryptionKeys" object
852
+ * and return it.
853
+ * @param createdObject
854
+ * @param ownerId
855
+ */
856
+ initEncryptionKeys(
857
+ createdObject: any,
858
+ ownerId: string
859
+ ): Promise<{
860
+ encryptionKeys: any
861
+ secretId: string
862
+ }> {
863
+ this.throwDetailedExceptionForInvalidParameter('createdObject.id', createdObject.id, 'initEncryptionKeys', arguments)
864
+
865
+ const secretId = this.randomUuid()
866
+ return this.getDataOwner(ownerId).then(async ({ dataOwner: owner }) => {
867
+ const publicKeys = await this.getPublicKeys()
868
+ const { owner: modifiedOwner, aesExchangeKeys } = await this.getOrCreateHcPartyKeys(owner, ownerId)
869
+ const importedAESHcPartyKey = await this.decryptAnyAesExchangeKeyForOwner(aesExchangeKeys, ownerId, ownerId, ownerId, publicKeys)
870
+ const encryptedEncryptionKeys = await this._AES.encrypt(
871
+ importedAESHcPartyKey.key,
872
+ string2ua(createdObject.id + ':' + secretId),
873
+ importedAESHcPartyKey.rawKey
874
+ )
875
+
876
+ return {
877
+ encryptionKeys: _.fromPairs([
878
+ [
879
+ ownerId,
880
+ [
881
+ {
882
+ owner: ownerId,
883
+ delegatedTo: ownerId,
884
+ key: ua2hex(encryptedEncryptionKeys),
885
+ },
886
+ ],
887
+ ],
888
+ ]),
889
+ secretId: secretId,
890
+ }
891
+ })
892
+ }
893
+
894
+ /**
895
+ * Gets an updated instance of the EKs of `modifiedObject`.
896
+ * The updated EKs contain a new EK to provide delegation from delegator HcP with id `ownerId` to delegate HcP with id `delegateId`.
897
+ * @param modifiedObject : the object of which EKs will be cloned, the clone will be used to append the new EK, and then used as return value; will NOT be mutated
898
+ * @param ownerId : delegator HcP id
899
+ * @param delegateId : delegate HcP id
900
+ * @param secretEncryptionKeyOfObject : secret Id for the EK (Content Encryption Key)
901
+ * @returns - **encryptionKeys** existing EKs of the `modifiedObject`, appended with a new EK item (owner: `ownerId`, delegatedTo: `delegateId`, encrypted key with secretId: `secretEncryptionKeyOfObject` )
902
+ * - **secretId** which is the given input parameter `secretEncryptionKeyOfObject`
903
+ */
904
+ async appendEncryptionKeys(
905
+ //TODO: suggested name: getExtendedEKwithDelegationFromDelegatorToDelegate
906
+ modifiedObject: any,
907
+ ownerId: string,
908
+ delegateId: string,
909
+ secretEncryptionKeyOfObject: string
910
+ ): Promise<{
911
+ encryptionKeys: { [key: string]: Array<Delegation> }
912
+ secretId: string | null //secretEncryptionKeyOfObject is returned to avoid the need for a new decryption when chaining calls
913
+ }> {
914
+ this.throwDetailedExceptionForInvalidParameter('modifiedObject.id', modifiedObject.id, 'appendEncryptionKeys', arguments) //modifiedObject should never be null
915
+
916
+ this.throwDetailedExceptionForInvalidParameter('secretEncryptionKeyOfObject', secretEncryptionKeyOfObject, 'appendEncryptionKeys', arguments)
917
+
918
+ return this.getDataOwner(ownerId)
919
+ .then(async ({ dataOwner: owner }) => {
920
+ const publicKeys = await this.getPublicKeys()
921
+ const { owner: modifiedOwner, aesExchangeKeys } = await this.getOrCreateHcPartyKeys(owner, delegateId)
922
+ const importedAESHcPartyKey = await this.decryptAnyAesExchangeKeyForOwner(aesExchangeKeys, ownerId, ownerId, delegateId, publicKeys)
923
+
924
+ return {
925
+ previousDecryptedEncryptionKeys: await Promise.all(
926
+ ((modifiedObject.encryptionKeys || {})[delegateId] || []).map(
927
+ (d: Delegation) =>
928
+ (d.key &&
929
+ d.owner === ownerId &&
930
+ this._AES.decrypt(importedAESHcPartyKey.key, hex2ua(d.key), importedAESHcPartyKey.rawKey).catch(() => {
931
+ console.log(
932
+ `Cannot decrypt encryption key from ${d.owner} to ${d.delegatedTo} for object with id ${modifiedObject.id}:`,
933
+ modifiedObject
934
+ )
935
+ return Promise.resolve()
936
+ })) ||
937
+ Promise.resolve()
938
+ ) as Array<Promise<ArrayBuffer>>
939
+ ),
940
+ encryptedEncryptionKey: await this._AES.encrypt(
941
+ importedAESHcPartyKey.key,
942
+ string2ua(modifiedObject.id + ':' + secretEncryptionKeyOfObject)
943
+ ),
944
+ }
945
+ })
946
+ .then(({ previousDecryptedEncryptionKeys, encryptedEncryptionKey }) => {
947
+ //try to limit the extent of the modifications to the delegations by preserving the redundant encryption keys already present and removing duplicates
948
+ //For delegate delegateId, we create:
949
+ // 1. an array of objects { d : {owner,delegatedTo,encrypted(key)}} with one object for the existing encryption keys and the new key concatenated
950
+ // 2. an array of objects { k : decrypted(key)} with one object for the existing delegations and the new key concatenated
951
+ // We merge them to get one array of objects: { d: {owner,delegatedTo,encrypted(key)}, k: decrypted(key)}
952
+ const encryptionKeysCryptedDecrypted = _.merge(
953
+ ((modifiedObject.encryptionKeys || {})[delegateId] || []).map((d: Delegation) => ({
954
+ d,
955
+ })),
956
+ (previousDecryptedEncryptionKeys || []).map((dd) => (dd ? ua2string(dd) : null)).map((k) => ({ k }))
957
+ )
958
+ .filter(({ d, k }: { d: Delegation; k: string }) => !!k || d.owner !== ownerId) //Only keep the ones created by us that can still be decrypted
959
+ .map(({ d, k }: { d: Delegation; k: string }) => ({ d, k: k || this.randomUuid() }))
960
+ .concat([
961
+ {
962
+ d: {
963
+ owner: ownerId,
964
+ delegatedTo: delegateId,
965
+ key: ua2hex(encryptedEncryptionKey),
966
+ },
967
+ k: modifiedObject.id + ':' + secretEncryptionKeyOfObject!,
968
+ },
969
+ ])
970
+
971
+ const allEncryptionKeys = _.cloneDeep(modifiedObject.encryptionKeys)
972
+ allEncryptionKeys[delegateId] = _.uniqBy(encryptionKeysCryptedDecrypted, (x: any) => x.k).map((x: any) => x.d)
973
+
974
+ return {
975
+ encryptionKeys: allEncryptionKeys,
976
+ secretId: secretEncryptionKeyOfObject,
977
+ }
978
+ })
979
+ }
980
+
981
+ /**
982
+ * Gets an updated `child` object that will have its SPKs, CFKs, KSs updated to include delegations from delegator HcP with id `ownerId` to delegate HcP with id `delegateId`
983
+ * The SFKs of `child` are not updated, so this method assumes this is not the initial delegation on the `child` object
984
+ * The method also performs some deduplication of all types of delegations.
985
+ * @param parent : the parent object of `child`; will NOT be mutated
986
+ * @param child : the object that will be mutated and returned
987
+ * @param ownerId delegator HcP id
988
+ * @param delegateId delegate HcP id
989
+ * @param secretDelegationKey the secret Id used in the child object to generate the SPK
990
+ * @param secretEncryptionKey the secret Id used in the child object to generate the EK (Content Encryption Key)
991
+ * @returns - an updated `child` object that will contain updated SPKs, CFKs, EKs
992
+ * */
993
+
994
+ addDelegationsAndEncryptionKeys<T extends EncryptedEntity>(
995
+ //TODO: suggested name: updateChildGenericDelegationsFromDelegatorToDelegate
996
+ parent: EncryptedParentEntity | null,
997
+ child: T,
998
+ ownerId: string,
999
+ delegateId: string,
1000
+ secretDelegationKey: string | null,
1001
+ secretEncryptionKey: string | null
1002
+ ): Promise<T> {
1003
+ if (parent) this.throwDetailedExceptionForInvalidParameter('parent.id', parent.id, 'addDelegationsAndEncryptionKeys', arguments)
1004
+
1005
+ this.throwDetailedExceptionForInvalidParameter('child.id', child.id, 'addDelegationsAndEncryptionKeys', arguments)
1006
+ return (
1007
+ secretDelegationKey
1008
+ ? this.extendedDelegationsAndCryptedForeignKeys(child, parent, ownerId, delegateId, secretDelegationKey)
1009
+ : Promise.resolve({ delegations: {}, cryptedForeignKeys: {} })
1010
+ )
1011
+ .then((extendedChildObjectSPKsAndCFKs) =>
1012
+ secretEncryptionKey
1013
+ ? this.appendEncryptionKeys(child, ownerId, delegateId, secretEncryptionKey).then(
1014
+ //TODO: extendedDelegationsAndCryptedForeignKeys and appendEncryptionKeys can be done in parallel
1015
+ (extendedChildObjectEKs) => ({
1016
+ extendedSPKsAndCFKs: extendedChildObjectSPKsAndCFKs,
1017
+ extendedEKs: extendedChildObjectEKs,
1018
+ })
1019
+ )
1020
+ : Promise.resolve({
1021
+ extendedSPKsAndCFKs: extendedChildObjectSPKsAndCFKs,
1022
+ extendedEKs: { encryptionKeys: {} },
1023
+ })
1024
+ )
1025
+ .then(({ extendedSPKsAndCFKs: extendedChildObjectSPKsAndCFKs, extendedEKs: extendedChildObjectEKs }) => {
1026
+ return _.assign(child, {
1027
+ // Conservative version ... We might want to be more aggressive with the deduplication of keys
1028
+ // For each delegate, we are going to concatenate to the src (the new delegations), the object in dest (the current delegations)
1029
+ // for which we do not find an equivalent delegation (same delegator, same delegate)
1030
+ delegations: _.assignWith(child.delegations, extendedChildObjectSPKsAndCFKs.delegations, (dest, src) =>
1031
+ (src || []).concat(
1032
+ _.filter(dest, (d: Delegation) => !src.some((s: Delegation) => s.owner === d.owner && s.delegatedTo === d.delegatedTo))
1033
+ )
1034
+ ),
1035
+ cryptedForeignKeys: _.assignWith(child.cryptedForeignKeys, extendedChildObjectSPKsAndCFKs.cryptedForeignKeys, (dest, src) =>
1036
+ (src || []).concat(
1037
+ _.filter(dest, (d: Delegation) => !src.some((s: Delegation) => s.owner === d.owner && s.delegatedTo === d.delegatedTo))
1038
+ )
1039
+ ),
1040
+ encryptionKeys: _.assignWith(child.encryptionKeys, extendedChildObjectEKs.encryptionKeys, (dest, src) =>
1041
+ (src || []).concat(
1042
+ _.filter(dest, (d: Delegation) => !src.some((s: Delegation) => s.owner === d.owner && s.delegatedTo === d.delegatedTo))
1043
+ )
1044
+ ),
1045
+ })
1046
+ })
1047
+ }
1048
+
1049
+ /**
1050
+ * Gets the secret IDs (SFKs) inside decrypted SPKs of the given `document`, decrypted by the HcP with the given `hcpartyId` AND by its HcP parents
1051
+ * @param document : the object of which delegations (SPKs) to decrypt
1052
+ * @param hcpartyId : the id of the delegate HcP
1053
+ * @returns - **extractedKeys** array containing secret IDs (SFKs) from decrypted SPKs, from both given HcP and its parents ; can contain duplicates
1054
+ * - **hcpartyId** the given `hcpartyId` OR, if a parent exist, the HcP id of the top parent in the hierarchy (even if that parent has no delegations)
1055
+ */
1056
+ //TODO: even if there are no delegations for parent HCP (but the parent exists), the returned hcpartyId will be the one of the parent; is this ok?
1057
+ extractDelegationsSFKs(
1058
+ //TODO: suggested name: getSecretIDsSPKofHcpAndParentsFromDocument
1059
+ document: EncryptedEntity | null,
1060
+ hcpartyId?: string
1061
+ ): Promise<{ extractedKeys: Array<string>; hcpartyId?: string }> {
1062
+ if (!document || !hcpartyId) {
1063
+ return Promise.resolve({ extractedKeys: [], hcpartyId: hcpartyId }) //TODO: thow exception instead?
1064
+ }
1065
+ const delegationsForAllDelegates = document.delegations
1066
+ if (!delegationsForAllDelegates || !Object.keys(delegationsForAllDelegates).length) {
1067
+ console.log(`There is no delegation in document (${document.id})`)
1068
+ return Promise.resolve({ extractedKeys: [], hcpartyId: hcpartyId })
1069
+ }
1070
+ return this.extractKeysFromDelegationsForHcpHierarchy(hcpartyId, document.id!, delegationsForAllDelegates)
1071
+ }
1072
+
1073
+ /**
1074
+ * Gets the secret IDs (SFKs) inside decrypted SPKs of the given `document`, decrypted by the HcP with the given `hcpartyId` AND by its HcP parents
1075
+ * @param document : the object of which delegations (SPKs) to decrypt
1076
+ * @param hcpartyId : the id of the delegate HcP
1077
+ * @returns - **extractedKeys** array containing secret IDs (SFKs) from decrypted SPKs, from both given HcP and its parents ; can contain duplicates
1078
+ * - **hcpartyId** the given `hcpartyId` OR, if a parent exist, the HcP id of the top parent in the hierarchy (even if that parent has no delegations)
1079
+ */
1080
+ extractSFKsHierarchyFromDelegations(
1081
+ document: EncryptedEntity | null,
1082
+ hcpartyId?: string
1083
+ ): Promise<Array<{ hcpartyId: string; extractedKeys: Array<string> }>> {
1084
+ if (!document || !hcpartyId) {
1085
+ return Promise.resolve([])
1086
+ }
1087
+ const delegationsForAllDelegates = document.delegations
1088
+ if (!delegationsForAllDelegates || !Object.keys(delegationsForAllDelegates).length) {
1089
+ console.log(`There is no delegation in document (${document.id})`)
1090
+ return Promise.resolve([])
1091
+ }
1092
+ return this.extractKeysHierarchyFromDelegationLikes(hcpartyId, document.id!, delegationsForAllDelegates)
1093
+ }
1094
+
1095
+ // noinspection JSUnusedGlobalSymbols
1096
+
1097
+ extractCryptedFKs(
1098
+ //TODO: suggested name: getSecretIDsCFKofHcpAndParentsFromDocument
1099
+ document: EncryptedEntity | null,
1100
+ hcpartyId: string
1101
+ ): Promise<{ extractedKeys: Array<string>; hcpartyId: string }> {
1102
+ if (!document || !document.cryptedForeignKeys) {
1103
+ return Promise.resolve({ extractedKeys: [], hcpartyId: hcpartyId })
1104
+ }
1105
+ const cfksForAllDelegates = document.cryptedForeignKeys
1106
+ if (!cfksForAllDelegates || !Object.keys(cfksForAllDelegates).length) {
1107
+ console.log(`There is no cryptedForeignKeys in document (${document.id})`)
1108
+ return Promise.resolve({ extractedKeys: [], hcpartyId: hcpartyId })
1109
+ }
1110
+ return this.extractKeysFromDelegationsForHcpHierarchy(hcpartyId, document.id!, cfksForAllDelegates)
1111
+ }
1112
+
1113
+ extractEncryptionsSKs(
1114
+ //TODO: suggested name: getSecretIDsEKofHcpAndParentsFromDocument
1115
+ document: EncryptedEntity,
1116
+ hcpartyId: string
1117
+ ): Promise<{ extractedKeys: Array<string>; hcpartyId: string }> {
1118
+ if (!document.encryptionKeys) {
1119
+ return Promise.resolve({ extractedKeys: [], hcpartyId: hcpartyId })
1120
+ }
1121
+ const eckeysForAllDelegates = document.encryptionKeys
1122
+ if (!eckeysForAllDelegates || !Object.keys(eckeysForAllDelegates).length) {
1123
+ //console.log(`There is no encryption key in document (${document.id})`)
1124
+ return Promise.resolve({ extractedKeys: [], hcpartyId: hcpartyId })
1125
+ }
1126
+ return this.extractKeysFromDelegationsForHcpHierarchy(hcpartyId, document.id!, eckeysForAllDelegates)
1127
+ }
1128
+
1129
+ extractDelegationsSFKsAndEncryptionSKs(ety: EncryptedEntity, ownerId: string) {
1130
+ const delegationsSfksOwnerPromise = this.extractDelegationsSFKs(ety, ownerId).then((xks) => xks.extractedKeys) //Will climb up hierarchy
1131
+ const encryptionKeysOwnerPromise = this.extractEncryptionsSKs(ety, ownerId).then((xks) => xks.extractedKeys) //Will climb up hierarchy
1132
+
1133
+ return Promise.all([delegationsSfksOwnerPromise, encryptionKeysOwnerPromise])
1134
+ }
1135
+
1136
+ /**
1137
+ * Get decrypted generic secret IDs (secretIdSPKs, parentIds, secretIdEKs) from generic delegations (SPKs, CFKs, EKs)
1138
+ * 1. Get HealthCareParty from it's Id.
1139
+ * 2. Decrypt the keys of the given HCP.
1140
+ * 3. Decrypt the parent's key if it has parent.
1141
+ * 4. Return the decrypted key corresponding to the Health Care Party.
1142
+ * @param hcpartyId : the id of the delegate HcP (including its parents) for which to decrypt `extractedKeys`
1143
+ * @param objectId : the id of the object/document of which delegations to decrypt ; used just to log to console a message (Cryptographic mistake) in case the object id inside SPK, CFK, EK is different from this one
1144
+ * @param delegations : generic delegations (can be SPKs, CFKs, EKs) for all delegates from where to extract `extractedKeys`
1145
+ * @returns - **extractedKeys** array containing secret IDs from decrypted generic delegations, from both HCP with given `hcpartyId` and its parents; can contain duplicates
1146
+ * - **hcpartyId** the given `hcpartyId` OR, if a parent exist, the HCP id of the top parent in the hierarchy (even if that parent has no delegations)
1147
+ */
1148
+ //TODO: even if there are no delegations for parent HCP (but the parent exists), the returned hcpartyId will be the one of the parent
1149
+ async extractKeysHierarchyFromDelegationLikes(
1150
+ //TODO suggested name: getSecretIdsOfHcpAndParentsFromGenericDelegations
1151
+ hcpartyId: string,
1152
+ objectId: string,
1153
+ delegations: { [key: string]: Array<Delegation> }
1154
+ ): Promise<Array<{ hcpartyId: string; extractedKeys: Array<string> }>> {
1155
+ const { dataOwner: hcp } = await this.getDataOwner(hcpartyId)
1156
+ const extractedKeys = []
1157
+ if (delegations[hcpartyId]?.length) {
1158
+ const decryptedAndImportedAesHcPartyKeys = await this.getDecryptedAesExchangeKeysOfDelegateAndParentsFromGenericDelegations(
1159
+ hcpartyId,
1160
+ delegations,
1161
+ false
1162
+ )
1163
+ const collatedAesKeysFromDelegatorToHcpartyId = decryptedAndImportedAesHcPartyKeys.reduce((map, k) => ({ ...map, [k.delegatorId]: k }), {})
1164
+ extractedKeys.push(...(await this.decryptKeyInDelegationLikes(delegations[hcpartyId], collatedAesKeysFromDelegatorToHcpartyId, objectId)))
1165
+ }
1166
+
1167
+ return (hcp as HealthcareParty).parentId
1168
+ ? [
1169
+ ...(await this.extractKeysHierarchyFromDelegationLikes((hcp as HealthcareParty).parentId!, objectId, delegations)),
1170
+ { extractedKeys: extractedKeys, hcpartyId: hcpartyId },
1171
+ ]
1172
+ : [{ extractedKeys: extractedKeys, hcpartyId: hcpartyId }]
1173
+ }
1174
+
1175
+ /**
1176
+ * Get decrypted generic secret IDs (secretIdSPKs, parentIds, secretIdEKs) from generic delegations (SPKs, CFKs, EKs)
1177
+ * 1. Get Data Owner (HCP, Patient or Device) from it's Id.
1178
+ * 2. Decrypt the keys of the given data owner.
1179
+ * 3. Decrypt the parent's key if it has parent.
1180
+ * 4. Return the decrypted key corresponding to the Health Care Party.
1181
+ * @param dataOwnerId : the id of the delegate data owner (including its parents) for which to decrypt `extractedKeys`
1182
+ * @param objectId : the id of the object/document of which delegations to decrypt ; used just to log to console a message (Cryptographic mistake) in case the object id inside SPK, CFK, EK is different from this one
1183
+ * @param delegations : generic delegations (can be SPKs, CFKs, EKs) for all delegates from where to extract `extractedKeys`
1184
+ * @returns - **extractedKeys** array containing secret IDs from decrypted generic delegations, from both data owner with given `dataOwnerId` and its parents; can contain duplicates
1185
+ * - **dataOwnerId** the given `dataOwnerId` OR, if a parent exist, the data owner id of the top parent in the hierarchy (even if that parent has no delegations)
1186
+ */
1187
+ //TODO: even if there are no delegations for parent HCP (but the parent exists), the returned dataOwnerId will be the one of the parent
1188
+ extractKeysFromDelegationsForHcpHierarchy(
1189
+ //TODO suggested name: getSecretIdsOfHcpAndParentsFromGenericDelegations
1190
+ dataOwnerId: string,
1191
+ objectId: string,
1192
+ delegations: { [key: string]: Array<Delegation> }
1193
+ ): Promise<{ extractedKeys: Array<string>; hcpartyId: string }> {
1194
+ return this.getDataOwner(dataOwnerId).then(({ dataOwner: hcp }) =>
1195
+ (delegations[dataOwnerId] && delegations[dataOwnerId].length
1196
+ ? this.getDecryptedAesExchangeKeysOfDelegateAndParentsFromGenericDelegations(dataOwnerId, delegations, false).then(
1197
+ (decryptedAndImportedAesHcPartyKeys) => {
1198
+ const collatedAesKeysFromDelegatorToHcpartyId: {
1199
+ [key: string]: { key: CryptoKey; rawKey: string }[]
1200
+ } = {}
1201
+ decryptedAndImportedAesHcPartyKeys.forEach((k) => {
1202
+ ;(collatedAesKeysFromDelegatorToHcpartyId[k.delegatorId] ?? (collatedAesKeysFromDelegatorToHcpartyId[k.delegatorId] = [])).push(k)
1203
+ })
1204
+ return this.decryptKeyInDelegationLikes(delegations[dataOwnerId], collatedAesKeysFromDelegatorToHcpartyId, objectId!)
1205
+ }
1206
+ )
1207
+ : Promise.resolve([])
1208
+ ).then((extractedKeys) =>
1209
+ (hcp as HealthcareParty).parentId
1210
+ ? this.extractKeysFromDelegationsForHcpHierarchy((hcp as HealthcareParty).parentId!, objectId, delegations).then((parentResponse) =>
1211
+ _.assign(parentResponse, {
1212
+ extractedKeys: parentResponse.extractedKeys.concat(extractedKeys),
1213
+ })
1214
+ )
1215
+ : { extractedKeys: extractedKeys, hcpartyId: dataOwnerId }
1216
+ )
1217
+ )
1218
+ }
1219
+
1220
+ /**
1221
+ * Gets an array of generic secret IDs decrypted from a list of generic delegations (SPKs, CFKs, EKs) `delegationsArray`
1222
+ * If a particular generic delegation thows an exception when decrypted, the return value for it's secret ID will be 'false' and a message is logged to console
1223
+ * For each one of the delegations in the `delegationsArray`, it tries to decrypt with the decryptedHcPartyKey of the owner of that delegation;
1224
+ *
1225
+ * @param delegationsArray : generic delegations array
1226
+ * @param aesKeys : **key** HcP ids of delegators/owners in the `delegationsArray`, each with its own decryptedHcPartyKey
1227
+ * @param masterId : is the object id to which the generic delegation belongs to
1228
+ * - used only to check whether the object.id matches the one stored in the decrypted generic delegation item
1229
+ * - even if there's no match, the secret ID is kept as a valid result (and a message logged to console)
1230
+ * @returns array of generic secret IDs (secretIdSPK, parentId, secretIdEK)
1231
+ */
1232
+ async decryptKeyInDelegationLikes(
1233
+ //TODO: suggested name: getSecretIdsFromGenericDelegations
1234
+ delegationsArray: Array<Delegation>,
1235
+ aesKeysForDataOwnerId: { [key: string]: { key: CryptoKey; rawKey: string }[] },
1236
+ masterId: string
1237
+ ): Promise<Array<string>> {
1238
+ const decryptPromises: Array<Promise<string | undefined>> = delegationsArray.map(async (genericDelegationItem) => {
1239
+ const aesKeys = aesKeysForDataOwnerId[genericDelegationItem.owner!]
1240
+ if (aesKeys?.length) {
1241
+ return aesKeys.reduce(async (acc, aesKey) => {
1242
+ const accValue = await acc
1243
+ if (accValue) {
1244
+ return accValue
1245
+ }
1246
+ try {
1247
+ const decryptedGenericDelegationKey = await this._AES.decrypt(aesKey.key, hex2ua(genericDelegationItem.key!), aesKey.rawKey)
1248
+ const results = ua2string(decryptedGenericDelegationKey).split(':')
1249
+
1250
+ const objectId = results[0] //must be the ID of the object, for checksum
1251
+ const genericSecretId = results[1]
1252
+
1253
+ const details =
1254
+ 'object ID: ' + masterId + '; generic delegation from ' + genericDelegationItem.owner + ' to ' + genericDelegationItem.delegatedTo
1255
+
1256
+ if (!objectId) console.warn('Object id is empty; ' + details)
1257
+ if (!genericSecretId) console.warn('Secret id is empty; ' + details)
1258
+
1259
+ if (objectId !== masterId) {
1260
+ /*console.log(
1261
+ "Cryptographic mistake: object ID is not equal to the expected concatenated id within decrypted generic delegation. This may happen when patients have been merged; " +
1262
+ details
1263
+ )*/
1264
+ }
1265
+ return genericSecretId
1266
+ } catch (err) {
1267
+ console.log(
1268
+ `Could not decrypt generic delegation in object with ID: ${masterId} from ${genericDelegationItem.owner} to ${genericDelegationItem.delegatedTo}: ${err}`
1269
+ )
1270
+ console.log(`AES key is: ${aesKey.rawKey}. Encrypted data is ${genericDelegationItem.key}.`)
1271
+
1272
+ return undefined
1273
+ }
1274
+ }, Promise.resolve() as Promise<string | undefined>)
1275
+ } else {
1276
+ console.log(`Could not find aes key for object with ID: ${masterId}`)
1277
+ }
1278
+ })
1279
+ return Promise.all(decryptPromises).then((genericSecretId) => genericSecretId.filter((id) => !!id) as string[])
1280
+ }
1281
+
1282
+ getPublicKeyFromPrivateKey(privateKey: JsonWebKey, dataOwner: Patient | Device | HealthcareParty) {
1283
+ if (!privateKey.n || !privateKey.e) {
1284
+ throw new Error('No public key can be deduced from incomplete private key')
1285
+ }
1286
+
1287
+ const publicKeyFromPrivateKey = jwk2spki(privateKey)
1288
+ const publicKeys = [dataOwner.publicKey].concat(Object.keys(dataOwner.aesExchangeKeys ?? {})).filter((x) => !!x)
1289
+
1290
+ if (!publicKeys.length) {
1291
+ throw new Error('No public key has been defined for hcp')
1292
+ }
1293
+
1294
+ const publicKey = publicKeys.find((it) => it === publicKeyFromPrivateKey)
1295
+ if (!publicKey) {
1296
+ throw new Error('No public key can be found for this private key')
1297
+ }
1298
+
1299
+ return publicKey
1300
+ }
1301
+
1302
+ async loadKeyPairsAsTextInBrowserLocalStorage(healthcarePartyId: string, privateKey: Uint8Array) {
1303
+ const { dataOwner } = await this.getDataOwner(healthcarePartyId)
1304
+
1305
+ const privateKeyInJwk = pkcs8ToJwk(privateKey)
1306
+ const publicKey = this.getPublicKeyFromPrivateKey(privateKeyInJwk, dataOwner)
1307
+
1308
+ const keyPair: { publicKey: CryptoKey; privateKey: CryptoKey } = await this._RSA.importKeyPair(
1309
+ 'jwk',
1310
+ privateKeyInJwk,
1311
+ 'jwk',
1312
+ spkiToJwk(hex2ua(publicKey))
1313
+ )
1314
+ this.rsaKeyPairs[publicKey.slice(-32)] = keyPair
1315
+ const exportedKeyPair = await this._RSA.exportKeys(keyPair, 'jwk', 'jwk')
1316
+
1317
+ return this.storeKeyPair(`${healthcarePartyId}.${publicKey.slice(-32)}`, exportedKeyPair)
1318
+ }
1319
+
1320
+ async loadKeyPairsAsJwkInBrowserLocalStorage(healthcarePartyId: string, privateKey: JsonWebKey) {
1321
+ const { dataOwner } = await this.getDataOwner(healthcarePartyId)
1322
+
1323
+ if ((!privateKey.n || !privateKey.e) && dataOwner.publicKey) {
1324
+ //Fallback on default publicKey
1325
+ console.warn('An incomplete key has been completed using the default public key of the data owner')
1326
+ const publicKeyInJwk = spkiToJwk(hex2ua(dataOwner.publicKey))
1327
+ privateKey.n = publicKeyInJwk.n
1328
+ privateKey.e = publicKeyInJwk.e
1329
+ }
1330
+
1331
+ const publicKey = this.getPublicKeyFromPrivateKey(privateKey, dataOwner)
1332
+
1333
+ const keyPair = await this._RSA.importKeyPair('jwk', privateKey, 'jwk', spkiToJwk(hex2ua(publicKey)))
1334
+ this.rsaKeyPairs[healthcarePartyId] = keyPair
1335
+ const exportedKeyPair = await this._RSA.exportKeys(keyPair, 'jwk', 'jwk')
1336
+
1337
+ return this.storeKeyPair(`${healthcarePartyId}.${publicKey.slice(-32)}`, exportedKeyPair)
1338
+ }
1339
+
1340
+ // noinspection JSUnusedGlobalSymbols
1341
+ loadKeyPairsInBrowserLocalStorage(healthcarePartyId: string, file: Blob): Promise<void> {
1342
+ const fr = new FileReader()
1343
+ return new Promise((resolve, reject) => {
1344
+ fr.onerror = reject
1345
+ fr.onabort = reject
1346
+ fr.onload = (e: any) => {
1347
+ //TODO remove any
1348
+ const privateKey = e.target.result as string
1349
+ this.loadKeyPairsAsTextInBrowserLocalStorage(healthcarePartyId, hex2ua(privateKey))
1350
+ .then(() => resolve())
1351
+ .catch(reject)
1352
+ }
1353
+ fr.readAsText(file)
1354
+ })
1355
+ }
1356
+
1357
+ // noinspection JSUnusedGlobalSymbols
1358
+ saveKeychainInBrowserLocalStorage(id: string, keychain: number) {
1359
+ localStorage.setItem(
1360
+ this.keychainLocalStoreIdPrefix + id,
1361
+ b2a(new Uint8Array(keychain).reduce((data, byte) => data + String.fromCharCode(byte), ''))
1362
+ )
1363
+ }
1364
+
1365
+ saveKeychainInBrowserLocalStorageAsBase64(id: string, keyChainB64: string) {
1366
+ localStorage.setItem(this.keychainLocalStoreIdPrefix + id, keyChainB64)
1367
+ }
1368
+
1369
+ // noinspection JSUnusedGlobalSymbols
1370
+ saveKeychainValidityDateInBrowserLocalStorage(id: string, date: string) {
1371
+ if (!id) return
1372
+
1373
+ if (!date) {
1374
+ localStorage.removeItem(this.keychainValidityDateLocalStoreIdPrefix + id)
1375
+ } else {
1376
+ localStorage.setItem(this.keychainValidityDateLocalStoreIdPrefix + id, date)
1377
+ }
1378
+ }
1379
+
1380
+ /**
1381
+ * Populate the HCP.options dict with an encrypted eHealth certificate and unencryped expiry date.
1382
+ * Any potentially unencrypted certificates will be pruned from the HCP.
1383
+ * @param hcpId Id of the hcp to modify
1384
+ * @returns modified HCP
1385
+ */
1386
+ async saveKeyChainInHCPFromLocalStorage(hcpId: string): Promise<HealthcareParty> {
1387
+ return await this.hcpartyBaseApi.getHealthcareParty(hcpId).then(async (hcp: HealthcareParty) => {
1388
+ let aesKey: CryptoKey | null = null
1389
+ try {
1390
+ aesKey = _.find(
1391
+ await this.decryptAndImportAesHcPartyKeysForDelegators([hcp.id!], hcp.id!),
1392
+ (delegator: DelegatorAndKeys) => delegator.delegatorId === hcp.id
1393
+ )!.key
1394
+ } catch (e) {
1395
+ console.error('Error while importing the AES key.')
1396
+ }
1397
+ if (!aesKey) {
1398
+ console.error('No encryption key!')
1399
+ }
1400
+
1401
+ const opts = hcp.options || {}
1402
+
1403
+ const crt = this.getKeychainInBrowserLocalStorageAsBase64(hcp.id!!)
1404
+ if (!!aesKey && !!crt) {
1405
+ let crtEncrypted: ArrayBuffer | null = null
1406
+ try {
1407
+ crtEncrypted = await this.AES.encrypt(aesKey, new Uint8Array(string2ua(atob(crt))))
1408
+ } catch (e) {
1409
+ console.error('Error while encrypting the certificate', e)
1410
+ }
1411
+
1412
+ // add the encrypted certificate to the options
1413
+ _.set(opts, this.hcpPreferenceKeyEhealthCert, ua2string(new Uint8Array(crtEncrypted!)))
1414
+ }
1415
+
1416
+ const crtValidityDate = this.getKeychainValidityDateInBrowserLocalStorage(hcp.id!!)
1417
+ if (!!crtValidityDate) {
1418
+ _.set(opts, this.hcpPreferenceKeyEhealthCertDate, crtValidityDate)
1419
+ }
1420
+
1421
+ hcp.options = opts
1422
+ return hcp
1423
+ })
1424
+ }
1425
+
1426
+ importKeychainInBrowserFromHCP(hcpId: string): Promise<void> {
1427
+ return this.hcpartyBaseApi.getHealthcareParty(hcpId).then(async (hcp: HealthcareParty) => {
1428
+ let crtCryp: Uint8Array | null = null
1429
+ if (!!hcp.options && !!hcp.options[this.hcpPreferenceKeyEhealthCert]) {
1430
+ crtCryp = string2ua(hcp.options[this.hcpPreferenceKeyEhealthCert])
1431
+ }
1432
+
1433
+ const crtValidityDate = _.get(hcp.options, this.hcpPreferenceKeyEhealthCertDate)
1434
+
1435
+ // store the validity date
1436
+ if (!!crtValidityDate) {
1437
+ this.saveKeychainValidityDateInBrowserLocalStorage(hcp.id!!, crtValidityDate)
1438
+ }
1439
+
1440
+ let crt: ArrayBuffer | null = null
1441
+ let decryptionKey: CryptoKey | null = null
1442
+ try {
1443
+ decryptionKey = _.find(
1444
+ await this.decryptAndImportAesHcPartyKeysForDelegators([hcp.id!], hcp.id!),
1445
+ (delegator: DelegatorAndKeys) => delegator.delegatorId === hcp.id
1446
+ )!.key
1447
+ } catch (e) {
1448
+ console.error('Error while importing the AES key.')
1449
+ }
1450
+ if (!decryptionKey) {
1451
+ throw new Error('No encryption key! eHealth certificate cannot be decrypted.')
1452
+ }
1453
+
1454
+ if (!!crtCryp && decryptionKey) {
1455
+ try {
1456
+ crt = await this.AES.decrypt(decryptionKey, crtCryp)
1457
+ } catch (e) {
1458
+ console.error(e)
1459
+ }
1460
+ }
1461
+
1462
+ if (!crt) {
1463
+ throw new Error(`Error while saving certificate in browser local storage! Hcp ${hcp.id} has no certificate.`)
1464
+ } else {
1465
+ this.saveKeychainInBrowserLocalStorageAsBase64(hcp.id!!, btoa(String.fromCharCode.apply(null, Array.from(new Uint8Array(crt)))))
1466
+ }
1467
+
1468
+ return
1469
+ })
1470
+ }
1471
+
1472
+ /**
1473
+ * Synchronizes the eHealth certificate from the database into the LocalStorage, returning information on the presence
1474
+ * of certificate data in either place.
1475
+ *
1476
+ * @param hcpId The healthcare party id
1477
+ * @returns A Promise for an object that represents the existence of a certificate in local storage and in the DB,
1478
+ * through the two boolean properties "local" and "remote".
1479
+ */
1480
+ syncEhealthCertificateFromDatabase(hcpId: string): Promise<{ remote: boolean; local: boolean }> {
1481
+ return this.hcpartyBaseApi.getHealthcareParty(hcpId).then((hcp: HealthcareParty) => {
1482
+ const remoteCertificate = _.get(hcp.options, this.hcpPreferenceKeyEhealthCert)
1483
+ const localCertificate = this.getKeychainInBrowserLocalStorageAsBase64(hcp.id!)
1484
+
1485
+ if (remoteCertificate) {
1486
+ return this.importKeychainInBrowserFromHCP(hcp.id!)
1487
+ .then(() => ({ local: true, remote: true }))
1488
+ .catch(() => ({ local: !!localCertificate, remote: true }))
1489
+ } else {
1490
+ return { local: !!localCertificate, remote: !!remoteCertificate }
1491
+ }
1492
+ })
1493
+ }
1494
+
1495
+ getKeychainInBrowserLocalStorageAsBase64(id: string) {
1496
+ return localStorage.getItem(this.keychainLocalStoreIdPrefix + id)
1497
+ }
1498
+
1499
+ getKeychainValidityDateInBrowserLocalStorage(id: string) {
1500
+ return localStorage.getItem(this.keychainValidityDateLocalStoreIdPrefix + id)
1501
+ }
1502
+
1503
+ // noinspection JSUnusedGlobalSymbols
1504
+ loadKeychainFromBrowserLocalStorage(id: string) {
1505
+ const lsItem = localStorage.getItem('org.taktik.icure.ehealth.keychain.' + id)
1506
+ return lsItem !== null ? b64_2uas(lsItem) : null
1507
+ }
1508
+
1509
+ /**
1510
+ *
1511
+ * @param id
1512
+ * @param keyPair should be JWK
1513
+ */
1514
+ storeKeyPair(id: string, keyPair: { publicKey: any; privateKey: any }) {
1515
+ if (typeof Storage === 'undefined') {
1516
+ console.log('Your browser does not support HTML5 Browser Local Storage !')
1517
+ throw 'Your browser does not support HTML5 Browser Local Storage !'
1518
+ }
1519
+ //TODO encryption
1520
+ localStorage.setItem(this.rsaLocalStoreIdPrefix + id, JSON.stringify(keyPair))
1521
+ }
1522
+
1523
+ /**
1524
+ * loads the RSA key pair (hcparty) in JWK from local storage, not imported
1525
+ *
1526
+ * @param id doc id - hcpartyId
1527
+ * @param publicKeyFingerPrint the 32 last characters of public key this private key is associated with
1528
+ * @returns {Object} it is in JWK - not imported
1529
+ */
1530
+ loadKeyPairNotImported(id: string, publicKeyFingerPrint?: string): { publicKey: JsonWebKey; privateKey: JsonWebKey } {
1531
+ if (typeof Storage === 'undefined') {
1532
+ console.log('Your browser does not support HTML5 Browser Local Storage !')
1533
+ throw 'Your browser does not support HTML5 Browser Local Storage !'
1534
+ }
1535
+ //TODO decryption
1536
+ const item =
1537
+ (publicKeyFingerPrint && localStorage.getItem(this.rsaLocalStoreIdPrefix + id + '.' + publicKeyFingerPrint)) ??
1538
+ localStorage.getItem(this.rsaLocalStoreIdPrefix + id)
1539
+ if (!item) {
1540
+ console.warn(`No key can be found in local storage for id ${id} and publicKeyFingerPrint ${publicKeyFingerPrint}`)
1541
+ }
1542
+ return JSON.parse(item!)
1543
+ }
1544
+
1545
+ /**
1546
+ * Loads and imports the RSA key pair (hcparty) from local storage
1547
+ *
1548
+ * @param id doc id - hcPartyId
1549
+ * @returns {Promise} -> {CryptoKey} - imported RSA
1550
+ */
1551
+ loadKeyPairImported(id: string) {
1552
+ return new Promise((resolve: (value: { publicKey: CryptoKey; privateKey: CryptoKey }) => any, reject) => {
1553
+ try {
1554
+ const jwkKey = localStorage.getItem(this.rsaLocalStoreIdPrefix + id) as string
1555
+ if (jwkKey) {
1556
+ const jwkKeyPair = JSON.parse(jwkKey)
1557
+ if (jwkKeyPair.publicKey && jwkKeyPair.privateKey) {
1558
+ this._RSA.importKeyPair('jwk', jwkKeyPair.privateKey, 'jwk', jwkKeyPair.publicKey).then(resolve, (err) => {
1559
+ console.log('Error in RSA.importKeyPair: ' + err)
1560
+ reject(err)
1561
+ })
1562
+ } else {
1563
+ const message = 'Error in RSA.importKeyPair: Invalid key'
1564
+ console.log(message)
1565
+ reject(Error(message))
1566
+ }
1567
+ } else {
1568
+ const message = 'Error in RSA.importKeyPair: Missing key'
1569
+ console.log(message)
1570
+ reject(Error(message))
1571
+ }
1572
+ } catch (err) {
1573
+ reject(err)
1574
+ }
1575
+ })
1576
+ }
1577
+
1578
+ async addNewKeyPairForOwnerId(
1579
+ maintenanceTasksApi: IccMaintenanceTaskXApi,
1580
+ user: User,
1581
+ ownerId: string,
1582
+ generateTransferKey: boolean = true
1583
+ ): Promise<{ dataOwner: HealthcareParty | Patient | Device; publicKey: string; privateKey: string }> {
1584
+ return this.addNewKeyPairForOwner(maintenanceTasksApi, user, await this.getDataOwner(ownerId), generateTransferKey)
1585
+ }
1586
+
1587
+ async addNewKeyPairForOwner(
1588
+ maintenanceTasksApi: IccMaintenanceTaskXApi,
1589
+ user: User,
1590
+ cdo: CachedDataOwner,
1591
+ generateTransferKey: boolean = true
1592
+ ): Promise<{ dataOwner: HealthcareParty | Patient | Device; publicKey: string; privateKey: string }> {
1593
+ const { publicKey, privateKey } = await this.RSA.generateKeyPair()
1594
+ const publicKeyHex = ua2hex(await this.RSA.exportKey(publicKey!, 'spki'))
1595
+
1596
+ const gen = (await this._AES.generateCryptoKey(true)) as string
1597
+
1598
+ await this.cacheKeyPair({ publicKey: await this.RSA.exportKey(publicKey!, 'jwk'), privateKey: await this.RSA.exportKey(privateKey!, 'jwk') })
1599
+
1600
+ const { type: ownerType, dataOwner: ownerToUpdate } = await this.createOrUpdateAesExchangeKeysFor(cdo, gen, {
1601
+ pubKey: publicKey,
1602
+ privKey: privateKey,
1603
+ }).then((dataOwnerWithUpdatedAesKeys) =>
1604
+ generateTransferKey
1605
+ ? this.createOrUpdateTransferKeysFor(dataOwnerWithUpdatedAesKeys, gen, { pubKey: publicKey, privKey: privateKey })
1606
+ : dataOwnerWithUpdatedAesKeys
1607
+ )
1608
+
1609
+ const modifiedDataOwnerAndType =
1610
+ ownerType === 'hcp'
1611
+ ? await (this.dataOwnerCache[ownerToUpdate.id!] = this.hcpartyBaseApi
1612
+ .modifyHealthcareParty(ownerToUpdate as HealthcareParty)
1613
+ .then((x) => ({ type: 'hcp', dataOwner: x } as CachedDataOwner)))
1614
+ : ownerType === 'patient'
1615
+ ? await (this.dataOwnerCache[ownerToUpdate.id!] = this.patientBaseApi
1616
+ .modifyPatient(ownerToUpdate as Patient)
1617
+ .then((x) => ({ type: 'patient', dataOwner: x } as CachedDataOwner)))
1618
+ : await (this.dataOwnerCache[ownerToUpdate.id!] = this.deviceBaseApi
1619
+ .updateDevice(ownerToUpdate as Device)
1620
+ .then((x) => ({ type: 'device', dataOwner: x } as CachedDataOwner)))
1621
+
1622
+ const sentMaintenanceTasks = await this.sendMaintenanceTasks(maintenanceTasksApi, user, modifiedDataOwnerAndType.dataOwner, publicKey)
1623
+
1624
+ return {
1625
+ dataOwner: sentMaintenanceTasks.length
1626
+ ? await this.retrieveDataOwnerInfoAfterPotentialUpdate(modifiedDataOwnerAndType.dataOwner)
1627
+ : modifiedDataOwnerAndType.dataOwner,
1628
+ publicKey: publicKeyHex,
1629
+ privateKey: ua2hex((await this.RSA.exportKey(privateKey!, 'pkcs8')) as ArrayBuffer),
1630
+ }
1631
+ }
1632
+
1633
+ private async createOrUpdateAesExchangeKeysFor(
1634
+ cdo: CachedDataOwner,
1635
+ decryptedAesExchangeKey: string,
1636
+ keyToEncrypt: { pubKey: CryptoKey; privKey: CryptoKey }
1637
+ ): Promise<CachedDataOwner> {
1638
+ const publicKeyHex = ua2hex(await this.RSA.exportKey(keyToEncrypt.pubKey!, 'spki'))
1639
+ const existingAesExchangeKeys = cdo.dataOwner.aesExchangeKeys ?? {}
1640
+ existingAesExchangeKeys[publicKeyHex] = await this.encryptAesKeyFor(decryptedAesExchangeKey, cdo.dataOwner, keyToEncrypt.pubKey)
1641
+
1642
+ return { type: cdo.type, dataOwner: { ...cdo.dataOwner, aesExchangeKeys: existingAesExchangeKeys } } as CachedDataOwner
1643
+ }
1644
+
1645
+ private async createOrUpdateTransferKeysFor(
1646
+ dataOwner: CachedDataOwner,
1647
+ decryptedAesExchangeKey: string,
1648
+ keyToEncrypt: { pubKey: CryptoKey; privKey: CryptoKey }
1649
+ ): Promise<CachedDataOwner> {
1650
+ const pubKeyToEncryptHex = ua2hex(await this.RSA.exportKey(keyToEncrypt.pubKey, 'spki'))
1651
+
1652
+ const encryptedKey = ua2hex(
1653
+ await this._AES.encrypt(
1654
+ await this._AES.importKey('raw', hex2ua(decryptedAesExchangeKey)),
1655
+ (await this.RSA.exportKey(keyToEncrypt.privKey!, 'pkcs8')) as ArrayBuffer,
1656
+ decryptedAesExchangeKey
1657
+ )
1658
+ )
1659
+
1660
+ const dataOwnerExistingPubKeys = Array.from(await this.getDataOwnerHexPublicKeys(dataOwner.dataOwner))
1661
+
1662
+ const transferKeys = fold(dataOwnerExistingPubKeys, dataOwner.dataOwner.transferKeys ?? {}, (pubAcc, pubKeyHex) => {
1663
+ if (pubKeyHex !== pubKeyToEncryptHex) {
1664
+ const existingKeys = pubAcc[pubKeyHex] ?? {}
1665
+ existingKeys[pubKeyToEncryptHex] = encryptedKey
1666
+ pubAcc[pubKeyHex] = existingKeys
1667
+ }
1668
+ return pubAcc
1669
+ })
1670
+
1671
+ return { type: dataOwner.type, dataOwner: { ...dataOwner.dataOwner, transferKeys: transferKeys } } as CachedDataOwner
1672
+ }
1673
+
1674
+ private async encryptAesKeyFor(
1675
+ aesKey: string,
1676
+ dataOwner: HealthcareParty | Patient | Device,
1677
+ doNewPublicKey: CryptoKey
1678
+ ): Promise<{ [delId: string]: { [pk: string]: string } }> {
1679
+ const dataOwnerAllPubKeys = [doNewPublicKey].concat(await this.getDataOwnerPublicKeys(dataOwner))
1680
+
1681
+ const encrAes: { [pubKeyFingerprint: string]: string } = {}
1682
+ for (const pubKey of dataOwnerAllPubKeys) {
1683
+ encrAes[ua2hex(await this.RSA.exportKey(pubKey, 'spki')).slice(-32)] = ua2hex(await this._RSA.encrypt(pubKey, hex2ua(aesKey)))
1684
+ }
1685
+
1686
+ return { [dataOwner.id!]: encrAes }
1687
+ }
1688
+
1689
+ private retrieveDataOwnerInfoAfterPotentialUpdate(dataOwnerToUpdate: HealthcareParty | Patient | Device): Promise<CachedDataOwner> {
1690
+ return this.getDataOwner(dataOwnerToUpdate.id!).then(({ type, dataOwner }) => {
1691
+ return {
1692
+ type: type,
1693
+ dataOwner: {
1694
+ ...dataOwner,
1695
+ transferKeys: dataOwnerToUpdate.transferKeys,
1696
+ hcPartyKeys: fold(Object.entries(dataOwnerToUpdate.hcPartyKeys ?? {}), dataOwner.hcPartyKeys ?? {}, (acc, [delegateId, hcKeys]) => {
1697
+ acc[delegateId] = hcKeys
1698
+ return acc
1699
+ }),
1700
+ aesExchangeKeys: fold(
1701
+ Object.entries(dataOwnerToUpdate.aesExchangeKeys ?? {}),
1702
+ dataOwner.aesExchangeKeys ?? {},
1703
+ (pubAcc, [pubKey, newAesExcKeys]) => {
1704
+ const existingKeys = pubAcc[pubKey] ?? {}
1705
+ pubAcc[pubKey] = fold(Object.entries(newAesExcKeys), existingKeys, (delAcc, [delId, delKeys]) => {
1706
+ delAcc[delId] = delKeys
1707
+ return delAcc
1708
+ })
1709
+ return pubAcc
1710
+ }
1711
+ ),
1712
+ },
1713
+ } as CachedDataOwner
1714
+ })
1715
+ }
1716
+
1717
+ private async sendMaintenanceTasks(
1718
+ maintenanceTaskApi: IccMaintenanceTaskXApi,
1719
+ user: User,
1720
+ dataOwner: HealthcareParty | Patient | Device,
1721
+ newPublicKey: CryptoKey
1722
+ ): Promise<MaintenanceTask[]> {
1723
+ const hexNewPubKey = ua2hex(await this.RSA.exportKey(newPublicKey, 'spki'))
1724
+ const nonAccessiblePubKeys = Array.from(this.getDataOwnerHexPublicKeys(dataOwner).values())
1725
+ .filter((existingPubKey) => existingPubKey != hexNewPubKey)
1726
+ .filter(
1727
+ (existingPubKey) =>
1728
+ !Object.values(this.rsaKeyPairs).find(
1729
+ async ({ publicKey, privateKey }) => ua2hex(await this.RSA.exportKey(publicKey, 'spki')) == existingPubKey
1730
+ )
1731
+ )
1732
+
1733
+ if (nonAccessiblePubKeys.length) {
1734
+ const tasksForDelegates = Object.entries(await this.getEncryptedAesExchangeKeysForDelegate(dataOwner.id!))
1735
+ .filter(([delegatorId]) => delegatorId != dataOwner.id)
1736
+ .flatMap(([delegatorId, delegatorKeys]) => {
1737
+ return Object.entries(delegatorKeys).flatMap(([, aesExchangeKeys]) => {
1738
+ return Object.keys(aesExchangeKeys).map((delegatePubKey) => {
1739
+ return { delegateId: delegatorId, maintenanceTask: this.createMaintenanceTask(dataOwner, delegatePubKey) }
1740
+ })
1741
+ })
1742
+ })
1743
+
1744
+ const tasksForDelegator = Object.entries(await this.getEncryptedAesExchangeKeys(dataOwner, dataOwner.id!)).flatMap(
1745
+ ([doPubKey, delegateKeys]) => {
1746
+ return Object.keys(delegateKeys)
1747
+ .filter((delegateId) => delegateId != dataOwner.id)
1748
+ .map((delegateId) => {
1749
+ return { delegateId: delegateId, maintenanceTask: this.createMaintenanceTask(dataOwner, doPubKey) }
1750
+ })
1751
+ }
1752
+ )
1753
+
1754
+ return Promise.all(
1755
+ tasksForDelegates
1756
+ .concat(tasksForDelegator)
1757
+ .map(async ({ delegateId, maintenanceTask }) => {
1758
+ const taskToCreate = await maintenanceTaskApi?.newInstance(user, maintenanceTask, [delegateId])
1759
+ return taskToCreate ? maintenanceTaskApi?.createMaintenanceTaskWithUser(user, taskToCreate) : undefined
1760
+ })
1761
+ .filter((createdTask) => createdTask != undefined)
1762
+ )
1763
+ } else {
1764
+ return []
1765
+ }
1766
+ }
1767
+
1768
+ private createMaintenanceTask(concernedDataOwner: HealthcareParty | Patient | Device, concernedPubKey: string) {
1769
+ return new MaintenanceTask({
1770
+ id: this.randomUuid(),
1771
+ taskType: 'updateAesExchangeKey',
1772
+ status: MaintenanceTask.StatusEnum.Pending,
1773
+ properties: [
1774
+ new PropertyStub({
1775
+ id: 'dataOwnerConcernedId',
1776
+ type: new PropertyTypeStub({ type: PropertyTypeStub.TypeEnum.STRING }),
1777
+ typedValue: new TypedValueObject({
1778
+ type: TypedValueObject.TypeEnum.STRING,
1779
+ stringValue: concernedDataOwner.id,
1780
+ }),
1781
+ }),
1782
+ new PropertyStub({
1783
+ id: 'dataOwnerConcernedPubKey',
1784
+ type: new PropertyTypeStub({ type: PropertyTypeStub.TypeEnum.STRING }),
1785
+ typedValue: new TypedValueObject({
1786
+ type: TypedValueObject.TypeEnum.STRING,
1787
+ stringValue: concernedPubKey,
1788
+ }),
1789
+ }),
1790
+ ],
1791
+ })
1792
+ }
1793
+
1794
+ private getDataOwnerHexPublicKeys(dataOwner: HealthcareParty | Patient | Device): Set<string> {
1795
+ return new Set(
1796
+ (dataOwner.publicKey ? [dataOwner.publicKey] : [])
1797
+ .concat(dataOwner.aesExchangeKeys ? Object.keys(dataOwner.aesExchangeKeys) : [])
1798
+ .filter((pubKey) => !!pubKey)
1799
+ )
1800
+ }
1801
+
1802
+ private async getDataOwnerPublicKeys(dataOwner: HealthcareParty | Patient | Device): Promise<CryptoKey[]> {
1803
+ return await Promise.all(
1804
+ Array.from(this.getDataOwnerHexPublicKeys(dataOwner)).map(
1805
+ async (pubKey) => await this._RSA.importKey('jwk', spkiToJwk(hex2ua(pubKey)), ['encrypt'])
1806
+ )
1807
+ )
1808
+ }
1809
+
1810
+ generateKeyForDelegate(ownerId: string, delegateId: string): PromiseLike<HealthcareParty | Patient> {
1811
+ //Preload hcp and patient because we need them and they are going to be invalidated from the caches
1812
+ return notConcurrent(this.generateKeyConcurrencyMap, ownerId, async () => {
1813
+ const [{ type: ownerType, dataOwner: owner }, { dataOwner: delegate }] = await Promise.all([
1814
+ this.getDataOwner(ownerId),
1815
+ this.getDataOwner(delegateId),
1816
+ ])
1817
+
1818
+ const ownerLegacyPublicKey = owner.publicKey
1819
+
1820
+ const availablePublicKeysFingerprints = Object.keys(this.rsaKeyPairs)
1821
+ const availableOwnerPublicKeys = [
1822
+ ownerLegacyPublicKey,
1823
+ ...Object.keys(owner.aesExchangeKeys || {}).filter((x) => x !== ownerLegacyPublicKey),
1824
+ ].filter((k) => !!k && availablePublicKeysFingerprints.some((fp) => k.endsWith(fp))) as string[]
1825
+ const selectedPublicKey = availableOwnerPublicKeys[0]
1826
+
1827
+ if (!selectedPublicKey) {
1828
+ throw new Error(`Invalid owner, no public key, keypairs have not be set for ${ownerId}`)
1829
+ }
1830
+
1831
+ if (
1832
+ (owner.hcPartyKeys || {})[delegateId] ||
1833
+ Object.values(owner.aesExchangeKeys || {}).some(
1834
+ (x) => x[delegateId] && Object.keys(x[delegateId]).some((k) => availablePublicKeysFingerprints.includes(k))
1835
+ )
1836
+ ) {
1837
+ return owner
1838
+ }
1839
+
1840
+ let ownerCombinedAesExchangeKeys = owner.aesExchangeKeys ?? {}
1841
+
1842
+ if (ownerLegacyPublicKey && !(owner.aesExchangeKeys ?? {})[ownerLegacyPublicKey]) {
1843
+ //Transfer keys from old structure (hcparty keys) to new one (aesExchangeKeys)
1844
+ const unknownDataOwnerCounterPartIds = Object.keys(owner.hcPartyKeys ?? {}).filter((x) => x !== ownerId && x !== delegateId)
1845
+ const counterParts = [
1846
+ owner,
1847
+ delegate,
1848
+ ...(await Promise.all(unknownDataOwnerCounterPartIds.map((cpid) => this.getDataOwner(cpid).then((dot) => dot.dataOwner)))),
1849
+ ]
1850
+ ownerCombinedAesExchangeKeys = {
1851
+ [ownerLegacyPublicKey]: Object.entries(owner.hcPartyKeys ?? {}).reduce(
1852
+ (map, [hcpId, keys]) => ({
1853
+ ...map,
1854
+ [hcpId]: { [ownerLegacyPublicKey]: keys[0], [counterParts.find((x) => x.id === hcpId)?.publicKey ?? '']: keys[1] },
1855
+ ...{},
1856
+ }),
1857
+ {}
1858
+ ),
1859
+ ...ownerCombinedAesExchangeKeys,
1860
+ }
1861
+ }
1862
+
1863
+ const delegatePublicKeys = [delegate.publicKey, ...Object.keys(delegate.aesExchangeKeys ?? {}).filter((x) => x !== delegate.publicKey)].filter(
1864
+ (x) => !!x
1865
+ ) as string[]
1866
+ if (!delegatePublicKeys.length) {
1867
+ throw new Error(`Invalid delegate, no public key, keypairs have not be set for ${delegateId}`)
1868
+ }
1869
+ const genProm = this._AES.generateCryptoKey(true).then(async (AESKey) => {
1870
+ const allPubKeys = [...availableOwnerPublicKeys, ...delegatePublicKeys]
1871
+ const encryptedAesKeys = await allPubKeys.reduce(
1872
+ async (map, pubK) => ({
1873
+ ...(await map),
1874
+ [pubK.slice(-32)]: ua2hex(
1875
+ await this._RSA.encrypt(await this._RSA.importKey('jwk', spkiToJwk(hex2ua(pubK)), ['encrypt']), hex2ua(AESKey as string))
1876
+ ),
1877
+ }),
1878
+ Promise.resolve({} as { [pubKey: string]: string })
1879
+ )
1880
+
1881
+ if (delegate.publicKey && ownerLegacyPublicKey) {
1882
+ owner.hcPartyKeys![delegateId] = [encryptedAesKeys[ownerLegacyPublicKey.slice(-32)], encryptedAesKeys[delegate.publicKey.slice(-32)]]
1883
+ }
1884
+ owner.aesExchangeKeys = {
1885
+ ...(ownerCombinedAesExchangeKeys ?? {}),
1886
+ [selectedPublicKey]: { ...(owner.aesExchangeKeys?.[selectedPublicKey] ?? {}), [delegateId]: encryptedAesKeys },
1887
+ }
1888
+
1889
+ return new Promise<['hcp', HealthcareParty] | ['patient', Patient] | ['device', Device]>((resolve, reject) => {
1890
+ ownerType === 'hcp'
1891
+ ? (this.dataOwnerCache[owner.id!] = this.hcpartyBaseApi
1892
+ .modifyHealthcareParty(owner as HealthcareParty)
1893
+ .then((x) => ({ type: 'hcp', dataOwner: x } as CachedDataOwner)))
1894
+ .then((x) => resolve(['hcp', x.dataOwner]))
1895
+ .catch((e) => reject(e))
1896
+ : ownerType === 'patient'
1897
+ ? (this.dataOwnerCache[owner.id!] = this.patientBaseApi.modifyPatient(owner as Patient).then((x) => ({ type: 'patient', dataOwner: x })))
1898
+ .then((x) => resolve(['patient', x.dataOwner]))
1899
+ .catch((e) => reject(e))
1900
+ : (this.dataOwnerCache[owner.id!] = this.deviceBaseApi.updateDevice(owner as Device).then((x) => ({ type: 'device', dataOwner: x })))
1901
+ .then((x) => resolve(['device', x.dataOwner]))
1902
+ .catch((e) => reject(e))
1903
+ })
1904
+ })
1905
+
1906
+ this.hcPartyKeysRequestsCache[delegateId] = genProm.then(() => {
1907
+ return this.forceGetEncryptedAesExchangeKeysForDelegate(delegateId)
1908
+ })
1909
+ return genProm.then((res) => {
1910
+ return res[1]
1911
+ })
1912
+ })
1913
+ }
1914
+
1915
+ getDataOwner(ownerId: string) {
1916
+ return (
1917
+ this.dataOwnerCache[ownerId] ??
1918
+ (this.dataOwnerCache[ownerId] = this.patientBaseApi
1919
+ .getPatient(ownerId)
1920
+ .then((x) => ({ type: 'patient', dataOwner: x } as CachedDataOwner))
1921
+ .catch(() => this.deviceBaseApi.getDevice(ownerId).then((x) => ({ type: 'device', dataOwner: x } as CachedDataOwner)))
1922
+ .catch(() => this.hcpartyBaseApi.getHealthcareParty(ownerId).then((x) => ({ type: 'hcp', dataOwner: x } as CachedDataOwner)))
1923
+ .catch((e) => {
1924
+ delete this.dataOwnerCache[ownerId]
1925
+ throw e
1926
+ }))
1927
+ )
1928
+ }
1929
+
1930
+ // noinspection JSUnusedGlobalSymbols
1931
+ async checkPrivateKeyValidity(dataOwner: HealthcareParty | Patient | Device): Promise<boolean> {
1932
+ const publicKeys = Array.from(new Set([dataOwner.publicKey].concat(Object.keys(dataOwner.aesExchangeKeys ?? {})).filter((x) => !!x))) as string[]
1933
+
1934
+ return await publicKeys.reduce(async (pres, publicKey) => {
1935
+ const res = await pres
1936
+ if (res) {
1937
+ return true
1938
+ }
1939
+ try {
1940
+ const k = await this._RSA.importKey('jwk', spkiToJwk(hex2ua(publicKey)), ['encrypt'])
1941
+ const cipher = await this._RSA.encrypt(k, utf8_2ua('shibboleth'))
1942
+ const kp = this.loadKeyPairNotImported(dataOwner.id!, publicKey.slice(-32))
1943
+ const plainText = await this._RSA
1944
+ .importKeyPair('jwk', kp.privateKey, 'jwk', kp.publicKey)
1945
+ .then((ikp) => this._RSA.decrypt(ikp.privateKey, new Uint8Array(cipher)))
1946
+ .then((x) => ua2utf8(x))
1947
+ return plainText === 'shibboleth'
1948
+ } catch (e) {
1949
+ return false
1950
+ }
1951
+ }, Promise.resolve(false))
1952
+ }
1953
+
1954
+ private throwDetailedExceptionForInvalidParameter(argName: string, argValue: any, methodName: string, methodArgs: any) {
1955
+ if (argValue) return
1956
+
1957
+ let details = '\nMethod name: icc-crypto-x-api.' + methodName + '()\nArguments:'
1958
+
1959
+ if (methodArgs) {
1960
+ try {
1961
+ const argsArray = [...methodArgs]
1962
+ _.each(argsArray, (arg, index) => (details += '\n[' + index + ']: ' + JSON.stringify(arg)))
1963
+ } catch (ex) {
1964
+ details += '; a problem occured while logging arguments details: ' + ex
1965
+ }
1966
+ }
1967
+
1968
+ throw '### THIS SHOULD NOT HAPPEN: ' + argName + ' has an invalid value: ' + argValue + details
1969
+ }
1970
+
1971
+ async getEncryptionDecryptionKeys(dataOwnerId: string, document: EncryptedEntity): Promise<Array<string> | undefined> {
1972
+ try {
1973
+ return !document.id
1974
+ ? undefined
1975
+ : _.uniq(
1976
+ (
1977
+ await this.extractKeysFromDelegationsForHcpHierarchy(
1978
+ dataOwnerId,
1979
+ document.id,
1980
+ (document.encryptionKeys && Object.keys(document.encryptionKeys).length && document.encryptionKeys) || document.delegations!
1981
+ )
1982
+ ).extractedKeys
1983
+ )
1984
+ } catch (e) {
1985
+ return undefined
1986
+ }
1987
+ }
1988
+
1989
+ async encryptDecrypt(
1990
+ method: 'encrypt' | 'decrypt',
1991
+ content: Uint8Array | ArrayBuffer,
1992
+ edKey?: string,
1993
+ user?: User,
1994
+ documentObject?: Document
1995
+ ): Promise<Uint8Array | Array<any> | any> {
1996
+ if (!content || !(edKey || (user?.healthcarePartyId && documentObject))) return content
1997
+
1998
+ if (edKey) {
1999
+ const importedEdKey = await this._AES.importKey('raw', hex2ua(edKey.replace(/-/g, '')))
2000
+ try {
2001
+ return await this._AES[method](importedEdKey, content)
2002
+ } catch (e) {
2003
+ return content
2004
+ }
2005
+ }
2006
+
2007
+ const sfks = await this.extractKeysFromDelegationsForHcpHierarchy(user?.healthcarePartyId!, documentObject?.id!, documentObject?.encryptionKeys!)
2008
+ const importedEdKey = await this._AES.importKey('raw', hex2ua(sfks.extractedKeys[0].replace(/-/g, '')))
2009
+ try {
2010
+ return await this._AES[method](importedEdKey, content)
2011
+ } catch (e) {
2012
+ return content
2013
+ }
2014
+ }
2015
+ }