@icure/api 8.6.18 → 8.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (328) hide show
  1. package/icc-api/api/IccDocumentApi.d.ts +10 -2
  2. package/icc-api/api/IccDocumentApi.js +22 -4
  3. package/icc-api/api/IccDocumentApi.js.map +1 -1
  4. package/icc-api/api/IccReceiptApi.d.ts +17 -0
  5. package/icc-api/api/IccReceiptApi.js +52 -0
  6. package/icc-api/api/IccReceiptApi.js.map +1 -1
  7. package/icc-api/model/DataAttachment.d.ts +22 -0
  8. package/icc-api/model/DataAttachment.js.map +1 -1
  9. package/icc-api/model/Document.d.ts +6 -0
  10. package/icc-api/model/Document.js.map +1 -1
  11. package/icc-api/model/Receipt.d.ts +6 -0
  12. package/icc-api/model/Receipt.js.map +1 -1
  13. package/icc-x-api/crypto/BaseExchangeDataManager.js +2 -2
  14. package/icc-x-api/crypto/BaseExchangeDataManager.js.map +1 -1
  15. package/icc-x-api/crypto/ExchangeDataManager.js +3 -3
  16. package/icc-x-api/crypto/ExchangeDataManager.js.map +1 -1
  17. package/icc-x-api/crypto/ExtendedApisUtils.d.ts +1 -1
  18. package/icc-x-api/crypto/ExtendedApisUtils.js.map +1 -1
  19. package/icc-x-api/crypto/ExtendedApisUtilsImpl.d.ts +1 -1
  20. package/icc-x-api/crypto/ExtendedApisUtilsImpl.js +8 -2
  21. package/icc-x-api/crypto/ExtendedApisUtilsImpl.js.map +1 -1
  22. package/icc-x-api/crypto/RecoveryDataEncryption.js.map +1 -1
  23. package/icc-x-api/icc-accesslog-x-api.js +7 -7
  24. package/icc-x-api/icc-accesslog-x-api.js.map +1 -1
  25. package/icc-x-api/icc-calendar-item-x-api.js +7 -7
  26. package/icc-x-api/icc-calendar-item-x-api.js.map +1 -1
  27. package/icc-x-api/icc-classification-x-api.js +4 -5
  28. package/icc-x-api/icc-classification-x-api.js.map +1 -1
  29. package/icc-x-api/icc-code-x-api.d.ts +2 -2
  30. package/icc-x-api/icc-code-x-api.js +3 -33
  31. package/icc-x-api/icc-code-x-api.js.map +1 -1
  32. package/icc-x-api/icc-contact-x-api.js +20 -33
  33. package/icc-x-api/icc-contact-x-api.js.map +1 -1
  34. package/icc-x-api/icc-doctemplate-x-api.js.map +1 -1
  35. package/icc-x-api/icc-document-x-api.d.ts +8 -7
  36. package/icc-x-api/icc-document-x-api.js +64 -22
  37. package/icc-x-api/icc-document-x-api.js.map +1 -1
  38. package/icc-x-api/icc-form-x-api.js +3 -4
  39. package/icc-x-api/icc-form-x-api.js.map +1 -1
  40. package/icc-x-api/icc-helement-x-api.js +11 -11
  41. package/icc-x-api/icc-helement-x-api.js.map +1 -1
  42. package/icc-x-api/icc-invoice-x-api.js +3 -4
  43. package/icc-x-api/icc-invoice-x-api.js.map +1 -1
  44. package/icc-x-api/icc-maintenance-task-x-api.js +3 -3
  45. package/icc-x-api/icc-maintenance-task-x-api.js.map +1 -1
  46. package/icc-x-api/icc-patient-x-api.js +29 -29
  47. package/icc-x-api/icc-patient-x-api.js.map +1 -1
  48. package/icc-x-api/icc-receipt-x-api.d.ts +40 -0
  49. package/icc-x-api/icc-receipt-x-api.js +79 -1
  50. package/icc-x-api/icc-receipt-x-api.js.map +1 -1
  51. package/icc-x-api/icc-topic-x-api.js.map +1 -1
  52. package/icc-x-api/index.js +1 -1
  53. package/icc-x-api/index.js.map +1 -1
  54. package/icc-x-api/utils/code-util.d.ts +23 -0
  55. package/icc-x-api/utils/code-util.js +39 -2
  56. package/icc-x-api/utils/code-util.js.map +1 -1
  57. package/icc-x-api/utils/collection-utils.d.ts +13 -0
  58. package/icc-x-api/utils/collection-utils.js +69 -0
  59. package/icc-x-api/utils/collection-utils.js.map +1 -1
  60. package/icc-x-api/utils/compression-utils.d.ts +28 -0
  61. package/icc-x-api/utils/compression-utils.js +106 -0
  62. package/icc-x-api/utils/compression-utils.js.map +1 -0
  63. package/icc-x-api/utils/crypto-utils.js +7 -7
  64. package/icc-x-api/utils/crypto-utils.js.map +1 -1
  65. package/icc-x-api/utils/formatting-util.d.ts +1 -3
  66. package/icc-x-api/utils/formatting-util.js +15 -17
  67. package/icc-x-api/utils/formatting-util.js.map +1 -1
  68. package/icc-x-api/utils/hcp-util.js +2 -3
  69. package/icc-x-api/utils/hcp-util.js.map +1 -1
  70. package/icc-x-api/utils/insurability-util.js +10 -8
  71. package/icc-x-api/utils/insurability-util.js.map +1 -1
  72. package/icc-x-api/utils/lzma-wasm.d.ts +6 -0
  73. package/icc-x-api/utils/lzma-wasm.js +81 -0
  74. package/icc-x-api/utils/lzma-wasm.js.map +1 -0
  75. package/icc-x-api/utils/mutex.d.ts +12 -0
  76. package/icc-x-api/utils/mutex.js +26 -0
  77. package/icc-x-api/utils/mutex.js.map +1 -0
  78. package/icc-x-api/utils/websocket.js +7 -7
  79. package/icc-x-api/utils/websocket.js.map +1 -1
  80. package/icc-x-api/wasm/lzma/lzma.js +2 -0
  81. package/icc-x-api/wasm/lzma/lzma.wasm +0 -0
  82. package/package.json +2 -11
  83. package/icc-x-api/utils/uuid-encoder.d.ts +0 -44
  84. package/icc-x-api/utils/uuid-encoder.js +0 -114
  85. package/icc-x-api/utils/uuid-encoder.js.map +0 -1
  86. package/test/icc-api/api/IccAgendaApi.d.ts +0 -1
  87. package/test/icc-api/api/IccAgendaApi.js +0 -64
  88. package/test/icc-api/api/IccAgendaApi.js.map +0 -1
  89. package/test/icc-api/api/IccAnonymousAccessApi.d.ts +0 -1
  90. package/test/icc-api/api/IccAnonymousAccessApi.js +0 -58
  91. package/test/icc-api/api/IccAnonymousAccessApi.js.map +0 -1
  92. package/test/icc-api/api/IccCalendarItemApi.d.ts +0 -1
  93. package/test/icc-api/api/IccCalendarItemApi.js +0 -67
  94. package/test/icc-api/api/IccCalendarItemApi.js.map +0 -1
  95. package/test/icc-api/api/IccCalendarItemTypeApi.d.ts +0 -1
  96. package/test/icc-api/api/IccCalendarItemTypeApi.js +0 -96
  97. package/test/icc-api/api/IccCalendarItemTypeApi.js.map +0 -1
  98. package/test/icc-api/api/IccCodeApi.d.ts +0 -1
  99. package/test/icc-api/api/IccCodeApi.js +0 -38
  100. package/test/icc-api/api/IccCodeApi.js.map +0 -1
  101. package/test/icc-api/api/IccDocumentApi.d.ts +0 -1
  102. package/test/icc-api/api/IccDocumentApi.js +0 -199
  103. package/test/icc-api/api/IccDocumentApi.js.map +0 -1
  104. package/test/icc-api/api/IccGroupApi.d.ts +0 -1
  105. package/test/icc-api/api/IccGroupApi.js +0 -50
  106. package/test/icc-api/api/IccGroupApi.js.map +0 -1
  107. package/test/icc-api/api/IccKeywordApi.d.ts +0 -1
  108. package/test/icc-api/api/IccKeywordApi.js +0 -64
  109. package/test/icc-api/api/IccKeywordApi.js.map +0 -1
  110. package/test/icc-api/api/IccMedicalLocationApi.d.ts +0 -1
  111. package/test/icc-api/api/IccMedicalLocationApi.js +0 -64
  112. package/test/icc-api/api/IccMedicalLocationApi.js.map +0 -1
  113. package/test/icc-api/api/IccPlaceApi.d.ts +0 -1
  114. package/test/icc-api/api/IccPlaceApi.js +0 -64
  115. package/test/icc-api/api/IccPlaceApi.js.map +0 -1
  116. package/test/icc-api/api/IccRecoveryDataApi.d.ts +0 -1
  117. package/test/icc-api/api/IccRecoveryDataApi.js +0 -95
  118. package/test/icc-api/api/IccRecoveryDataApi.js.map +0 -1
  119. package/test/icc-api/api/IccRoleApi.d.ts +0 -1
  120. package/test/icc-api/api/IccRoleApi.js +0 -34
  121. package/test/icc-api/api/IccRoleApi.js.map +0 -1
  122. package/test/icc-api/api/IccUserApi.d.ts +0 -1
  123. package/test/icc-api/api/IccUserApi.js +0 -96
  124. package/test/icc-api/api/IccUserApi.js.map +0 -1
  125. package/test/icc-api/e2e/IccCalendarItemApi.d.ts +0 -1
  126. package/test/icc-api/e2e/IccCalendarItemApi.js +0 -46
  127. package/test/icc-api/e2e/IccCalendarItemApi.js.map +0 -1
  128. package/test/icc-api/model/modelHelpersTest.d.ts +0 -1
  129. package/test/icc-api/model/modelHelpersTest.js +0 -45
  130. package/test/icc-api/model/modelHelpersTest.js.map +0 -1
  131. package/test/icc-x-api/auth/group-switch-test.d.ts +0 -1
  132. package/test/icc-x-api/auth/group-switch-test.js +0 -81
  133. package/test/icc-x-api/auth/group-switch-test.js.map +0 -1
  134. package/test/icc-x-api/auth/jwt-concurrency-test.d.ts +0 -2
  135. package/test/icc-x-api/auth/jwt-concurrency-test.js +0 -112
  136. package/test/icc-x-api/auth/jwt-concurrency-test.js.map +0 -1
  137. package/test/icc-x-api/auth/jwt-provider-test.d.ts +0 -1
  138. package/test/icc-x-api/auth/jwt-provider-test.js +0 -197
  139. package/test/icc-x-api/auth/jwt-provider-test.js.map +0 -1
  140. package/test/icc-x-api/auth/smart-auth-provider-test.d.ts +0 -1
  141. package/test/icc-x-api/auth/smart-auth-provider-test.js +0 -224
  142. package/test/icc-x-api/auth/smart-auth-provider-test.js.map +0 -1
  143. package/test/icc-x-api/autofix-anonymity-test.d.ts +0 -1
  144. package/test/icc-x-api/autofix-anonymity-test.js +0 -122
  145. package/test/icc-x-api/autofix-anonymity-test.js.map +0 -1
  146. package/test/icc-x-api/confidential-entities-test.d.ts +0 -1
  147. package/test/icc-x-api/confidential-entities-test.js +0 -168
  148. package/test/icc-x-api/confidential-entities-test.js.map +0 -1
  149. package/test/icc-x-api/crud/comprehensive-crud-test.d.ts +0 -1
  150. package/test/icc-x-api/crud/comprehensive-crud-test.js +0 -276
  151. package/test/icc-x-api/crud/comprehensive-crud-test.js.map +0 -1
  152. package/test/icc-x-api/crud/entities-crud-test-interface.d.ts +0 -16
  153. package/test/icc-x-api/crud/entities-crud-test-interface.js +0 -408
  154. package/test/icc-x-api/crud/entities-crud-test-interface.js.map +0 -1
  155. package/test/icc-x-api/crypto/anonymous-delegations-test.d.ts +0 -1
  156. package/test/icc-x-api/crypto/anonymous-delegations-test.js +0 -587
  157. package/test/icc-x-api/crypto/anonymous-delegations-test.js.map +0 -1
  158. package/test/icc-x-api/crypto/concurrency.d.ts +0 -1
  159. package/test/icc-x-api/crypto/concurrency.js +0 -35
  160. package/test/icc-x-api/crypto/concurrency.js.map +0 -1
  161. package/test/icc-x-api/crypto/crypto-utils.d.ts +0 -1
  162. package/test/icc-x-api/crypto/crypto-utils.js +0 -79
  163. package/test/icc-x-api/crypto/crypto-utils.js.map +0 -1
  164. package/test/icc-x-api/crypto/cryptoTest.d.ts +0 -2
  165. package/test/icc-x-api/crypto/cryptoTest.js +0 -402
  166. package/test/icc-x-api/crypto/cryptoTest.js.map +0 -1
  167. package/test/icc-x-api/crypto/delegate-ci-to-patient-with-missing-keys-test.d.ts +0 -1
  168. package/test/icc-x-api/crypto/delegate-ci-to-patient-with-missing-keys-test.js +0 -166
  169. package/test/icc-x-api/crypto/delegate-ci-to-patient-with-missing-keys-test.js.map +0 -1
  170. package/test/icc-x-api/crypto/exchange-data-manager-test.d.ts +0 -1
  171. package/test/icc-x-api/crypto/exchange-data-manager-test.js +0 -674
  172. package/test/icc-x-api/crypto/exchange-data-manager-test.js.map +0 -1
  173. package/test/icc-x-api/crypto/full-crypto-test.d.ts +0 -1
  174. package/test/icc-x-api/crypto/full-crypto-test.js +0 -454
  175. package/test/icc-x-api/crypto/full-crypto-test.js.map +0 -1
  176. package/test/icc-x-api/crypto/legacy-metadata-migration-test.d.ts +0 -1
  177. package/test/icc-x-api/crypto/legacy-metadata-migration-test.js +0 -379
  178. package/test/icc-x-api/crypto/legacy-metadata-migration-test.js.map +0 -1
  179. package/test/icc-x-api/crypto/secure-delegations-manager-test.d.ts +0 -1
  180. package/test/icc-x-api/crypto/secure-delegations-manager-test.js +0 -278
  181. package/test/icc-x-api/crypto/secure-delegations-manager-test.js.map +0 -1
  182. package/test/icc-x-api/crypto/shamir.d.ts +0 -2
  183. package/test/icc-x-api/crypto/shamir.js +0 -167
  184. package/test/icc-x-api/crypto/shamir.js.map +0 -1
  185. package/test/icc-x-api/crypto/share-to-newly-created-patient-from-hcp.d.ts +0 -1
  186. package/test/icc-x-api/crypto/share-to-newly-created-patient-from-hcp.js +0 -71
  187. package/test/icc-x-api/crypto/share-to-newly-created-patient-from-hcp.js.map +0 -1
  188. package/test/icc-x-api/crypto/soft-deleted-data-owners.d.ts +0 -2
  189. package/test/icc-x-api/crypto/soft-deleted-data-owners.js +0 -113
  190. package/test/icc-x-api/crypto/soft-deleted-data-owners.js.map +0 -1
  191. package/test/icc-x-api/crypto/user-encryption-keys-manager-test.d.ts +0 -1
  192. package/test/icc-x-api/crypto/user-encryption-keys-manager-test.js +0 -246
  193. package/test/icc-x-api/crypto/user-encryption-keys-manager-test.js.map +0 -1
  194. package/test/icc-x-api/entity-with-attachments-api-test.d.ts +0 -1
  195. package/test/icc-x-api/entity-with-attachments-api-test.js +0 -142
  196. package/test/icc-x-api/entity-with-attachments-api-test.js.map +0 -1
  197. package/test/icc-x-api/filters/filters.d.ts +0 -1
  198. package/test/icc-x-api/filters/filters.js +0 -49
  199. package/test/icc-x-api/filters/filters.js.map +0 -1
  200. package/test/icc-x-api/filters/healthelement.d.ts +0 -1
  201. package/test/icc-x-api/filters/healthelement.js +0 -333
  202. package/test/icc-x-api/filters/healthelement.js.map +0 -1
  203. package/test/icc-x-api/icc-accesslog-x-api.d.ts +0 -1
  204. package/test/icc-x-api/icc-accesslog-x-api.js +0 -106
  205. package/test/icc-x-api/icc-accesslog-x-api.js.map +0 -1
  206. package/test/icc-x-api/icc-application-settings-x-api.d.ts +0 -1
  207. package/test/icc-x-api/icc-application-settings-x-api.js +0 -91
  208. package/test/icc-x-api/icc-application-settings-x-api.js.map +0 -1
  209. package/test/icc-x-api/icc-auth-api.d.ts +0 -1
  210. package/test/icc-x-api/icc-auth-api.js +0 -47
  211. package/test/icc-x-api/icc-auth-api.js.map +0 -1
  212. package/test/icc-x-api/icc-calendar-item-x-api.d.ts +0 -1
  213. package/test/icc-x-api/icc-calendar-item-x-api.js +0 -150
  214. package/test/icc-x-api/icc-calendar-item-x-api.js.map +0 -1
  215. package/test/icc-x-api/icc-contact-x-api.d.ts +0 -1
  216. package/test/icc-x-api/icc-contact-x-api.js +0 -355
  217. package/test/icc-x-api/icc-contact-x-api.js.map +0 -1
  218. package/test/icc-x-api/icc-document-x-api.d.ts +0 -1
  219. package/test/icc-x-api/icc-document-x-api.js +0 -76
  220. package/test/icc-x-api/icc-document-x-api.js.map +0 -1
  221. package/test/icc-x-api/icc-form-x-api.d.ts +0 -1
  222. package/test/icc-x-api/icc-form-x-api.js +0 -413
  223. package/test/icc-x-api/icc-form-x-api.js.map +0 -1
  224. package/test/icc-x-api/icc-hcparty-x-api-test.d.ts +0 -1
  225. package/test/icc-x-api/icc-hcparty-x-api-test.js +0 -43
  226. package/test/icc-x-api/icc-hcparty-x-api-test.js.map +0 -1
  227. package/test/icc-x-api/icc-helement-x-api-test.d.ts +0 -1
  228. package/test/icc-x-api/icc-helement-x-api-test.js +0 -155
  229. package/test/icc-x-api/icc-helement-x-api-test.js.map +0 -1
  230. package/test/icc-x-api/icc-invoice-x-api.d.ts +0 -1
  231. package/test/icc-x-api/icc-invoice-x-api.js +0 -99
  232. package/test/icc-x-api/icc-invoice-x-api.js.map +0 -1
  233. package/test/icc-x-api/icc-maintenance-task-x-api-test.d.ts +0 -1
  234. package/test/icc-x-api/icc-maintenance-task-x-api-test.js +0 -222
  235. package/test/icc-x-api/icc-maintenance-task-x-api-test.js.map +0 -1
  236. package/test/icc-x-api/icc-message-x-api.d.ts +0 -1
  237. package/test/icc-x-api/icc-message-x-api.js +0 -54
  238. package/test/icc-x-api/icc-message-x-api.js.map +0 -1
  239. package/test/icc-x-api/icc-patient-x-api-test.d.ts +0 -1
  240. package/test/icc-x-api/icc-patient-x-api-test.js +0 -165
  241. package/test/icc-x-api/icc-patient-x-api-test.js.map +0 -1
  242. package/test/icc-x-api/icc-recovery-x-api.d.ts +0 -1
  243. package/test/icc-x-api/icc-recovery-x-api.js +0 -175
  244. package/test/icc-x-api/icc-recovery-x-api.js.map +0 -1
  245. package/test/icc-x-api/icc-topic-x-api.d.ts +0 -1
  246. package/test/icc-x-api/icc-topic-x-api.js +0 -269
  247. package/test/icc-x-api/icc-topic-x-api.js.map +0 -1
  248. package/test/icc-x-api/icc-user-x-api-test.d.ts +0 -1
  249. package/test/icc-x-api/icc-user-x-api-test.js +0 -99
  250. package/test/icc-x-api/icc-user-x-api-test.js.map +0 -1
  251. package/test/icc-x-api/keyless-api.d.ts +0 -1
  252. package/test/icc-x-api/keyless-api.js +0 -125
  253. package/test/icc-x-api/keyless-api.js.map +0 -1
  254. package/test/icc-x-api/patient-user.d.ts +0 -2
  255. package/test/icc-x-api/patient-user.js +0 -103
  256. package/test/icc-x-api/patient-user.js.map +0 -1
  257. package/test/icc-x-api/storage/storage.d.ts +0 -1
  258. package/test/icc-x-api/storage/storage.js +0 -48
  259. package/test/icc-x-api/storage/storage.js.map +0 -1
  260. package/test/icc-x-api/test-api-no-parent.d.ts +0 -1
  261. package/test/icc-x-api/test-api-no-parent.js +0 -79
  262. package/test/icc-x-api/test-api-no-parent.js.map +0 -1
  263. package/test/icc-x-api/test-legacy-data-support.d.ts +0 -1
  264. package/test/icc-x-api/test-legacy-data-support.js +0 -375
  265. package/test/icc-x-api/test-legacy-data-support.js.map +0 -1
  266. package/test/icc-x-api/utils/graph-test.d.ts +0 -1
  267. package/test/icc-x-api/utils/graph-test.js +0 -54
  268. package/test/icc-x-api/utils/graph-test.js.map +0 -1
  269. package/test/icc-x-api/utils/lru-temporised-async-cache-test.d.ts +0 -1
  270. package/test/icc-x-api/utils/lru-temporised-async-cache-test.js +0 -364
  271. package/test/icc-x-api/utils/lru-temporised-async-cache-test.js.map +0 -1
  272. package/test/support/CSM-185.d.ts +0 -1
  273. package/test/support/CSM-185.js +0 -124
  274. package/test/support/CSM-185.js.map +0 -1
  275. package/test/support/CSM-243.d.ts +0 -1
  276. package/test/support/CSM-243.js +0 -120
  277. package/test/support/CSM-243.js.map +0 -1
  278. package/test/support/CSM-543.d.ts +0 -1
  279. package/test/support/CSM-543.js +0 -164
  280. package/test/support/CSM-543.js.map +0 -1
  281. package/test/support/CSM-729.d.ts +0 -1
  282. package/test/support/CSM-729.js +0 -225
  283. package/test/support/CSM-729.js.map +0 -1
  284. package/test/support/CSM-87.d.ts +0 -0
  285. package/test/support/CSM-87.js +0 -21
  286. package/test/support/CSM-87.js.map +0 -1
  287. package/test/support/CSM-93.d.ts +0 -1
  288. package/test/support/CSM-93.js +0 -112
  289. package/test/support/CSM-93.js.map +0 -1
  290. package/test/utils/FakeDataOwnerApi.d.ts +0 -32
  291. package/test/utils/FakeDataOwnerApi.js +0 -136
  292. package/test/utils/FakeDataOwnerApi.js.map +0 -1
  293. package/test/utils/FakeEncryptionKeysManager.d.ts +0 -36
  294. package/test/utils/FakeEncryptionKeysManager.js +0 -98
  295. package/test/utils/FakeEncryptionKeysManager.js.map +0 -1
  296. package/test/utils/FakeExchangeDataApi.d.ts +0 -32
  297. package/test/utils/FakeExchangeDataApi.js +0 -92
  298. package/test/utils/FakeExchangeDataApi.js.map +0 -1
  299. package/test/utils/FakeExchangeDataManager.d.ts +0 -48
  300. package/test/utils/FakeExchangeDataManager.js +0 -82
  301. package/test/utils/FakeExchangeDataManager.js.map +0 -1
  302. package/test/utils/FakeExchangeDataMapManager.d.ts +0 -12
  303. package/test/utils/FakeExchangeDataMapManager.js +0 -38
  304. package/test/utils/FakeExchangeDataMapManager.js.map +0 -1
  305. package/test/utils/FakeGenericApi.d.ts +0 -16
  306. package/test/utils/FakeGenericApi.js +0 -65
  307. package/test/utils/FakeGenericApi.js.map +0 -1
  308. package/test/utils/KeylessCryptoStrategies.d.ts +0 -23
  309. package/test/utils/KeylessCryptoStrategies.js +0 -26
  310. package/test/utils/KeylessCryptoStrategies.js.map +0 -1
  311. package/test/utils/TestApi.d.ts +0 -3
  312. package/test/utils/TestApi.js +0 -30
  313. package/test/utils/TestApi.js.map +0 -1
  314. package/test/utils/TestCollectionUtils.d.ts +0 -1
  315. package/test/utils/TestCollectionUtils.js +0 -109
  316. package/test/utils/TestCollectionUtils.js.map +0 -1
  317. package/test/utils/TestCryptoStrategies.d.ts +0 -42
  318. package/test/utils/TestCryptoStrategies.js +0 -80
  319. package/test/utils/TestCryptoStrategies.js.map +0 -1
  320. package/test/utils/TestStorage.d.ts +0 -23
  321. package/test/utils/TestStorage.js +0 -61
  322. package/test/utils/TestStorage.js.map +0 -1
  323. package/test/utils/roles.d.ts +0 -14
  324. package/test/utils/roles.js +0 -345
  325. package/test/utils/roles.js.map +0 -1
  326. package/test/utils/test_utils.d.ts +0 -87
  327. package/test/utils/test_utils.js +0 -452
  328. package/test/utils/test_utils.js.map +0 -1
@@ -1,54 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- require("isomorphic-fetch");
13
- const test_utils_1 = require("../utils/test_utils");
14
- const mocha_1 = require("mocha");
15
- const crypto_1 = require("crypto");
16
- const types_1 = require("@icure/test-setup/types");
17
- const chai_1 = require("chai");
18
- const chaiAsPromised = require("chai-as-promised");
19
- const icc_api_1 = require("../../icc-api");
20
- (0, chai_1.use)(chaiAsPromised);
21
- (0, test_utils_1.setLocalStorage)(fetch);
22
- let env;
23
- (0, mocha_1.describe)('icc-message-x-api', () => {
24
- (0, mocha_1.before)(function () {
25
- return __awaiter(this, void 0, void 0, function* () {
26
- this.timeout(600000);
27
- const initializer = yield (0, test_utils_1.getEnvironmentInitializer)();
28
- env = yield initializer.execute((0, types_1.getEnvVariables)());
29
- });
30
- });
31
- (0, mocha_1.it)('Should be encrypted', () => __awaiter(void 0, void 0, void 0, function* () {
32
- const hcp = yield (0, test_utils_1.createNewHcpApi)(env, {
33
- encryptedFieldsConfig: {
34
- message: ['subject'],
35
- },
36
- });
37
- const subject = 'Hello';
38
- const transportGuid = (0, crypto_1.randomUUID)();
39
- const created = yield hcp.api.messageApi.createMessageWithUser(undefined, yield hcp.api.messageApi.newInstance(hcp.user, {
40
- id: (0, crypto_1.randomUUID)(),
41
- subject,
42
- transportGuid,
43
- }));
44
- (0, chai_1.expect)(created.subject).to.eq(subject);
45
- (0, chai_1.expect)(created.transportGuid).to.eq(transportGuid);
46
- const retrieved = yield hcp.api.messageApi.getMessageWithUser(undefined, created.id);
47
- (0, chai_1.expect)(retrieved.subject).to.eq(subject);
48
- (0, chai_1.expect)(retrieved.transportGuid).to.eq(transportGuid);
49
- const encrypted = yield new icc_api_1.IccMessageApi(env.iCureUrl, {}, hcp.api.authApi.authenticationProvider, fetch).getMessage(created.id);
50
- (0, chai_1.expect)(encrypted.subject).to.be.undefined;
51
- (0, chai_1.expect)(encrypted.transportGuid).to.eq(transportGuid);
52
- }));
53
- });
54
- //# sourceMappingURL=icc-message-x-api.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"icc-message-x-api.js","sourceRoot":"","sources":["../../../test/icc-x-api/icc-message-x-api.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,4BAAyB;AACzB,oDAS4B;AAC5B,iCAA4C;AAI5C,mCAAmC;AACnC,mDAAmE;AAanE,+BAA6C;AAC7C,mDAAkD;AAClD,2CAA6C;AAI7C,IAAA,UAAO,EAAC,cAAc,CAAC,CAAA;AACvB,IAAA,4BAAe,EAAC,KAAK,CAAC,CAAA;AACtB,IAAI,GAAa,CAAA;AAEjB,IAAA,gBAAQ,EAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,IAAA,cAAM,EAAC;;YACL,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;YACpB,MAAM,WAAW,GAAG,MAAM,IAAA,sCAAyB,GAAE,CAAA;YACrD,GAAG,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,IAAA,uBAAe,GAAE,CAAC,CAAA;QACpD,CAAC;KAAA,CAAC,CAAA;IAEF,IAAA,UAAE,EAAC,qBAAqB,EAAE,GAAS,EAAE;QACnC,MAAM,GAAG,GAAG,MAAM,IAAA,4BAAe,EAAC,GAAG,EAAE;YACrC,qBAAqB,EAAE;gBACrB,OAAO,EAAE,CAAC,SAAS,CAAC;aACrB;SACF,CAAC,CAAA;QACF,MAAM,OAAO,GAAG,OAAO,CAAA;QACvB,MAAM,aAAa,GAAG,IAAA,mBAAU,GAAE,CAAA;QAClC,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,qBAAqB,CAC5D,SAAS,EACT,MAAM,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE;YAC7C,EAAE,EAAE,IAAA,mBAAU,GAAE;YAChB,OAAO;YACP,aAAa;SACd,CAAC,CACH,CAAA;QACD,IAAA,aAAM,EAAC,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,CAAA;QACtC,IAAA,aAAM,EAAC,OAAO,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,aAAa,CAAC,CAAA;QAClD,MAAM,SAAS,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,kBAAkB,CAAC,SAAS,EAAE,OAAO,CAAC,EAAG,CAAC,CAAA;QACrF,IAAA,aAAM,EAAC,SAAS,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,CAAA;QACxC,IAAA,aAAM,EAAC,SAAS,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,aAAa,CAAC,CAAA;QACpD,MAAM,SAAS,GAAG,MAAM,IAAI,uBAAa,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,sBAAsB,EAAE,KAAK,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,EAAG,CAAC,CAAA;QAClI,IAAA,aAAM,EAAC,SAAS,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAA;QACzC,IAAA,aAAM,EAAC,SAAS,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,aAAa,CAAC,CAAA;IACtD,CAAC,CAAA,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA","sourcesContent":["import 'isomorphic-fetch'\nimport {\n createNewHcpApi,\n describeNoLite,\n getEnvironmentInitializer,\n hcp1Username,\n hcp2Username,\n hcp3Username,\n setLocalStorage,\n TestUtils,\n} from '../utils/test_utils'\nimport { before, it, describe } from 'mocha'\nimport { IccMessageXApi, IccPatientXApi, sleep, SubscriptionOptions } from '../../icc-x-api'\nimport { Patient } from '../../icc-api/model/Patient'\nimport { User } from '../../icc-api/model/User'\nimport { randomUUID } from 'crypto'\nimport { getEnvVariables, TestVars } from '@icure/test-setup/types'\nimport { IccTopicXApi } from '../../icc-x-api/icc-topic-x-api'\nimport { Topic, TopicRole } from '../../icc-api/model/Topic'\nimport { SecureDelegation } from '../../icc-api/model/SecureDelegation'\nimport { XHR } from '../../icc-api/api/XHR'\nimport { Message } from '../../icc-api/model/Message'\nimport initApi = TestUtils.initApi\nimport XHRError = XHR.XHRError\nimport { FilterChainMessage } from '../../icc-api/model/FilterChainMessage'\nimport { MessageByHcPartyFilter } from '../../icc-x-api/filters/MessageByHcPartyFilter'\nimport { MessageByHcPartyTransportGuidFilter } from '../../icc-x-api/filters/MessageByHcPartyTransportGuidFilter'\nimport { LatestMessageByHcPartyTransportGuidFilter } from '../../icc-x-api/filters/LatestMessageByHcPartyTransportGuidFilter'\nimport { Connection } from '../../icc-api/model/Connection'\nimport { expect, use as chaiUse } from 'chai'\nimport * as chaiAsPromised from 'chai-as-promised'\nimport { IccMessageApi } from '../../icc-api'\nimport undefinedError = Mocha.utils.undefinedError\nimport { create } from 'lodash'\n\nchaiUse(chaiAsPromised)\nsetLocalStorage(fetch)\nlet env: TestVars\n\ndescribe('icc-message-x-api', () => {\n before(async function () {\n this.timeout(600000)\n const initializer = await getEnvironmentInitializer()\n env = await initializer.execute(getEnvVariables())\n })\n\n it('Should be encrypted', async () => {\n const hcp = await createNewHcpApi(env, {\n encryptedFieldsConfig: {\n message: ['subject'],\n },\n })\n const subject = 'Hello'\n const transportGuid = randomUUID()\n const created = await hcp.api.messageApi.createMessageWithUser(\n undefined,\n await hcp.api.messageApi.newInstance(hcp.user, {\n id: randomUUID(),\n subject,\n transportGuid,\n })\n )\n expect(created.subject).to.eq(subject)\n expect(created.transportGuid).to.eq(transportGuid)\n const retrieved = await hcp.api.messageApi.getMessageWithUser(undefined, created.id!)\n expect(retrieved.subject).to.eq(subject)\n expect(retrieved.transportGuid).to.eq(transportGuid)\n const encrypted = await new IccMessageApi(env.iCureUrl, {}, hcp.api.authApi.authenticationProvider, fetch).getMessage(created.id!)\n expect(encrypted.subject).to.be.undefined\n expect(encrypted.transportGuid).to.eq(transportGuid)\n })\n})\n"]}
@@ -1 +0,0 @@
1
- import 'isomorphic-fetch';
@@ -1,165 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- const mocha_1 = require("mocha");
13
- require("isomorphic-fetch");
14
- const Patient_1 = require("../../icc-api/model/Patient");
15
- const chai_1 = require("chai");
16
- const crypto_1 = require("crypto");
17
- const test_utils_1 = require("../utils/test_utils");
18
- var initApi = test_utils_1.TestUtils.initApi;
19
- const types_1 = require("@icure/test-setup/types");
20
- const icc_x_api_1 = require("../../icc-x-api");
21
- (0, test_utils_1.setLocalStorage)(fetch);
22
- let env;
23
- describe('icc-x-patient-api Tests', () => {
24
- (0, mocha_1.before)(function () {
25
- return __awaiter(this, void 0, void 0, function* () {
26
- this.timeout(600000);
27
- const initializer = yield (0, test_utils_1.getEnvironmentInitializer)();
28
- env = yield initializer.execute((0, types_1.getEnvVariables)());
29
- });
30
- });
31
- it('CreatePatientWithUser Success for HCP', () => __awaiter(void 0, void 0, void 0, function* () {
32
- // Given
33
- const { userApi: userApiForHcp, dataOwnerApi: dataOwnerApiForHcp, patientApi: patientApiForHcp, cryptoApi: cryptoApiForHcp, } = yield initApi(env, test_utils_1.hcp1Username);
34
- const hcpUser = yield userApiForHcp.getCurrentUser();
35
- const patientToCreate = yield patientApiForHcp.newInstance(hcpUser, new Patient_1.Patient({
36
- id: (0, crypto_1.randomUUID)(),
37
- firstName: 'John',
38
- lastName: 'Snow',
39
- note: 'Winter is coming',
40
- }));
41
- // When
42
- const createdPatient = yield patientApiForHcp.createPatientWithUser(hcpUser, patientToCreate);
43
- // Then
44
- const readPatient = yield patientApiForHcp.getPatientWithUser(hcpUser, createdPatient.id);
45
- (0, chai_1.assert)(readPatient != null);
46
- (0, chai_1.assert)(readPatient.id != null);
47
- (0, chai_1.assert)(readPatient.note == patientToCreate.note);
48
- (0, chai_1.assert)(readPatient.firstName == patientToCreate.firstName);
49
- (0, chai_1.assert)(readPatient.lastName == patientToCreate.lastName);
50
- (0, chai_1.expect)(yield cryptoApiForHcp.xapi.encryptionKeysOf({ entity: readPatient, type: icc_x_api_1.EntityWithDelegationTypeName.Patient }, undefined)).to.have.length(1);
51
- (0, chai_1.expect)(yield patientApiForHcp.decryptSecretIdsOf(readPatient)).to.have.length(1);
52
- }));
53
- it('Share with should work as expected', () => __awaiter(void 0, void 0, void 0, function* () {
54
- const api1 = yield initApi(env, test_utils_1.hcp1Username);
55
- const user1 = yield api1.userApi.getCurrentUser();
56
- const api2 = yield initApi(env, test_utils_1.hcp2Username);
57
- const user2 = yield api2.userApi.getCurrentUser();
58
- const encryptedField = 'Something encrypted';
59
- const entity = yield api1.patientApi.createPatientWithUser(user1, yield api1.patientApi.newInstance(user1, { firstName: 'Gigio', lastName: 'Bagigio', note: encryptedField }));
60
- (0, chai_1.expect)(entity.note).to.be.equal(encryptedField);
61
- const secretIds = yield api1.patientApi.decryptSecretIdsOf(entity);
62
- yield api2.patientApi
63
- .getPatientWithUser(user2, entity.id)
64
- .then(() => {
65
- throw new Error('Should not be able to get the entity');
66
- })
67
- .catch(() => {
68
- /* expected */
69
- });
70
- yield api1.patientApi.shareWith(user2.healthcarePartyId, entity, secretIds);
71
- const retrieved = yield api2.patientApi.getPatientWithUser(user2, entity.id);
72
- (0, chai_1.expect)(retrieved.note).to.be.equal(encryptedField);
73
- (0, chai_1.expect)(yield api2.patientApi.decryptSecretIdsOf(retrieved)).to.have.members(secretIds);
74
- }));
75
- it('Merge patients should work as expected', () => __awaiter(void 0, void 0, void 0, function* () {
76
- const api1 = yield initApi(env, test_utils_1.hcp1Username);
77
- const user1 = yield api1.userApi.getCurrentUser();
78
- const api2 = yield initApi(env, test_utils_1.hcp2Username);
79
- const user2 = yield api2.userApi.getCurrentUser();
80
- const api3 = yield initApi(env, test_utils_1.hcp3Username);
81
- const user3 = yield api3.userApi.getCurrentUser();
82
- const mergedFirstName = 'Gigio';
83
- const mergedLastName = 'Bagigio';
84
- const mergedAlias = 'Luigio';
85
- const mergedNote = 'A secret note';
86
- const patientFrom = yield api1.patientApi.createPatientWithUser(user1, yield api1.patientApi.newInstance(user1, {
87
- firstName: mergedFirstName,
88
- lastName: 'From',
89
- note: 'A',
90
- }, { additionalDelegates: { [user2.healthcarePartyId]: 'WRITE' } }));
91
- const patientFromSecretIds = yield api1.patientApi.decryptSecretIdsOf(patientFrom);
92
- (0, chai_1.expect)(patientFromSecretIds).to.have.lengthOf(1);
93
- const patientInto = yield api1.patientApi.createPatientWithUser(user1, yield api1.patientApi.newInstance(user1, {
94
- firstName: 'Into',
95
- lastName: mergedLastName,
96
- note: 'B',
97
- }, { additionalDelegates: { [user3.healthcarePartyId]: 'WRITE' } }));
98
- const patientIntoSecretIds = yield api1.patientApi.decryptSecretIdsOf(patientInto);
99
- (0, chai_1.expect)(patientFromSecretIds).to.have.lengthOf(1);
100
- (0, chai_1.expect)(patientIntoSecretIds[0]).to.not.equal(patientFromSecretIds[0]);
101
- const mergedInto = Object.assign(Object.assign({}, patientInto), { firstName: mergedFirstName, lastName: mergedLastName, alias: mergedAlias, note: mergedNote });
102
- const mergedPatient = yield api1.patientApi.mergePatients(patientFrom, mergedInto);
103
- (0, chai_1.expect)(mergedPatient.firstName).to.equal(mergedFirstName);
104
- (0, chai_1.expect)(mergedPatient.lastName).to.equal(mergedLastName);
105
- (0, chai_1.expect)(mergedPatient.alias).to.equal(mergedAlias);
106
- (0, chai_1.expect)(mergedPatient.note).to.equal(mergedNote);
107
- (0, chai_1.expect)(yield api1.patientApi.decryptSecretIdsOf(mergedPatient)).to.have.members([...patientFromSecretIds, ...patientIntoSecretIds]);
108
- const retrievedByDelegateWithAccessToInto = yield api3.patientApi.getPatientWithUser(user3, patientInto.id);
109
- (0, chai_1.expect)(retrievedByDelegateWithAccessToInto.firstName).to.equal(mergedFirstName);
110
- (0, chai_1.expect)(retrievedByDelegateWithAccessToInto.lastName).to.equal(mergedLastName);
111
- (0, chai_1.expect)(retrievedByDelegateWithAccessToInto.alias).to.equal(mergedAlias);
112
- (0, chai_1.expect)(retrievedByDelegateWithAccessToInto.note).to.equal(mergedNote);
113
- (0, chai_1.expect)(yield api3.patientApi.decryptSecretIdsOf(retrievedByDelegateWithAccessToInto)).to.have.members(patientIntoSecretIds);
114
- const retrievedByDelegateWithAccessToFrom = yield api2.patientApi.getPatientWithUser(user2, patientInto.id);
115
- (0, chai_1.expect)(retrievedByDelegateWithAccessToFrom.firstName).to.equal(mergedFirstName);
116
- (0, chai_1.expect)(retrievedByDelegateWithAccessToFrom.lastName).to.equal(mergedLastName);
117
- (0, chai_1.expect)(retrievedByDelegateWithAccessToFrom.alias).to.equal(mergedAlias);
118
- (0, chai_1.expect)(retrievedByDelegateWithAccessToFrom.note).to.be.undefined; // No access to new encryption key yet
119
- (0, chai_1.expect)(yield api2.patientApi.decryptSecretIdsOf(retrievedByDelegateWithAccessToFrom)).to.have.members(patientFromSecretIds);
120
- }));
121
- it('Patient picture should be automatically decoded from base64 on initialisation.', () => __awaiter(void 0, void 0, void 0, function* () {
122
- const pictureAB = (0, crypto_1.randomBytes)(100);
123
- const pictureBase64 = (0, icc_x_api_1.ua2b64)(pictureAB);
124
- const patient = new Patient_1.Patient({ picture: pictureBase64 });
125
- (0, chai_1.expect)(patient.picture).to.not.be.undefined;
126
- (0, chai_1.expect)(patient.picture instanceof ArrayBuffer || ArrayBuffer.isView(patient.picture)).to.be.true;
127
- const decodedPicture = new Uint8Array(patient.picture);
128
- (0, chai_1.expect)(decodedPicture).to.have.length(pictureAB.length);
129
- for (let i = 0; i < pictureAB.length; i++) {
130
- (0, chai_1.expect)(decodedPicture[i]).to.equal(pictureAB[i]);
131
- }
132
- }));
133
- it('Creating a new Patient instance using a patient with decoded picture should not lose the picture data', () => __awaiter(void 0, void 0, void 0, function* () {
134
- const pictureAB = (0, crypto_1.randomBytes)(100);
135
- const patient = new Patient_1.Patient({ picture: new Uint8Array(pictureAB) });
136
- (0, chai_1.expect)(patient.picture).to.not.be.undefined;
137
- (0, chai_1.expect)(patient.picture instanceof ArrayBuffer || ArrayBuffer.isView(patient.picture)).to.be.true;
138
- const decodedPicture = new Uint8Array(patient.picture);
139
- (0, chai_1.expect)(decodedPicture).to.have.length(pictureAB.length);
140
- for (let i = 0; i < pictureAB.length; i++) {
141
- (0, chai_1.expect)(decodedPicture[i]).to.equal(pictureAB[i]);
142
- }
143
- }));
144
- it('A Patient with picture data should be created and retrieved correctly', () => __awaiter(void 0, void 0, void 0, function* () {
145
- const pictureAB = (0, crypto_1.randomBytes)(100);
146
- const api = yield initApi(env, test_utils_1.hcp1Username);
147
- const user = yield api.userApi.getCurrentUser();
148
- const patient = yield api.patientApi.createPatientWithUser(user, yield api.patientApi.newInstance(user, { firstName: 'Giovanni', lastName: 'Giorgio', picture: new Uint8Array(pictureAB) }));
149
- (0, chai_1.expect)(patient.picture).to.not.be.undefined;
150
- (0, chai_1.expect)(patient.picture instanceof ArrayBuffer || ArrayBuffer.isView(patient.picture)).to.be.true;
151
- const decodedPicture = new Uint8Array(patient.picture);
152
- (0, chai_1.expect)(decodedPicture).to.have.length(pictureAB.length);
153
- for (let i = 0; i < pictureAB.length; i++) {
154
- (0, chai_1.expect)(decodedPicture[i]).to.equal(pictureAB[i]);
155
- }
156
- }));
157
- it('A patient created with v8 + should have no auto-fixed delegations', () => __awaiter(void 0, void 0, void 0, function* () {
158
- var _a;
159
- const api = yield initApi(env, test_utils_1.hcp1Username);
160
- const user = yield api.userApi.getCurrentUser();
161
- const patient = yield api.patientApi.createPatientWithUser(user, yield api.patientApi.newInstance(user, { firstName: 'Giovanni', lastName: 'Giorgio', preferredUserId: user.id }));
162
- (0, chai_1.expect)(Object.keys((_a = patient.delegations) !== null && _a !== void 0 ? _a : {}).length == 0).to.be.true;
163
- }));
164
- });
165
- //# sourceMappingURL=icc-patient-x-api-test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"icc-patient-x-api-test.js","sourceRoot":"","sources":["../../../test/icc-x-api/icc-patient-x-api-test.ts"],"names":[],"mappings":"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","sourcesContent":["import { before } from 'mocha'\n\nimport 'isomorphic-fetch'\n\nimport { Patient } from '../../icc-api/model/Patient'\nimport { assert, expect } from 'chai'\nimport { randomBytes, randomUUID } from 'crypto'\nimport { getEnvironmentInitializer, hcp1Username, hcp2Username, hcp3Username, setLocalStorage, TestUtils } from '../utils/test_utils'\nimport initApi = TestUtils.initApi\nimport { getEnvVariables, TestVars } from '@icure/test-setup/types'\nimport { EntityWithDelegationTypeName, ua2b64 } from '../../icc-x-api'\n\nsetLocalStorage(fetch)\nlet env: TestVars\n\ndescribe('icc-x-patient-api Tests', () => {\n before(async function () {\n this.timeout(600000)\n const initializer = await getEnvironmentInitializer()\n env = await initializer.execute(getEnvVariables())\n })\n\n it('CreatePatientWithUser Success for HCP', async () => {\n // Given\n const {\n userApi: userApiForHcp,\n dataOwnerApi: dataOwnerApiForHcp,\n patientApi: patientApiForHcp,\n cryptoApi: cryptoApiForHcp,\n } = await initApi(env, hcp1Username)\n\n const hcpUser = await userApiForHcp.getCurrentUser()\n\n const patientToCreate = await patientApiForHcp.newInstance(\n hcpUser,\n new Patient({\n id: randomUUID(),\n firstName: 'John',\n lastName: 'Snow',\n note: 'Winter is coming',\n })\n )\n\n // When\n const createdPatient = await patientApiForHcp.createPatientWithUser(hcpUser, patientToCreate)\n\n // Then\n const readPatient = await patientApiForHcp.getPatientWithUser(hcpUser, createdPatient.id!)\n assert(readPatient != null)\n assert(readPatient.id != null)\n assert(readPatient.note == patientToCreate.note)\n assert(readPatient.firstName == patientToCreate.firstName)\n assert(readPatient.lastName == patientToCreate.lastName)\n expect(\n await cryptoApiForHcp.xapi.encryptionKeysOf({ entity: readPatient, type: EntityWithDelegationTypeName.Patient }, undefined)\n ).to.have.length(1)\n expect(await patientApiForHcp.decryptSecretIdsOf(readPatient)).to.have.length(1)\n })\n\n it('Share with should work as expected', async () => {\n const api1 = await initApi(env!, hcp1Username)\n const user1 = await api1.userApi.getCurrentUser()\n const api2 = await initApi(env!, hcp2Username)\n const user2 = await api2.userApi.getCurrentUser()\n const encryptedField = 'Something encrypted'\n const entity = await api1.patientApi.createPatientWithUser(\n user1,\n await api1.patientApi.newInstance(user1, { firstName: 'Gigio', lastName: 'Bagigio', note: encryptedField })\n )\n expect(entity.note).to.be.equal(encryptedField)\n const secretIds = await api1.patientApi.decryptSecretIdsOf(entity)\n await api2.patientApi\n .getPatientWithUser(user2, entity.id)\n .then(() => {\n throw new Error('Should not be able to get the entity')\n })\n .catch(() => {\n /* expected */\n })\n await api1.patientApi.shareWith(user2.healthcarePartyId!, entity, secretIds)\n const retrieved = await api2.patientApi.getPatientWithUser(user2, entity.id)\n expect(retrieved.note).to.be.equal(encryptedField)\n expect(await api2.patientApi.decryptSecretIdsOf(retrieved)).to.have.members(secretIds)\n })\n\n it('Merge patients should work as expected', async () => {\n const api1 = await initApi(env!, hcp1Username)\n const user1 = await api1.userApi.getCurrentUser()\n const api2 = await initApi(env!, hcp2Username)\n const user2 = await api2.userApi.getCurrentUser()\n const api3 = await initApi(env!, hcp3Username)\n const user3 = await api3.userApi.getCurrentUser()\n const mergedFirstName = 'Gigio'\n const mergedLastName = 'Bagigio'\n const mergedAlias = 'Luigio'\n const mergedNote = 'A secret note'\n const patientFrom = await api1.patientApi.createPatientWithUser(\n user1,\n await api1.patientApi.newInstance(\n user1,\n {\n firstName: mergedFirstName,\n lastName: 'From',\n note: 'A',\n },\n { additionalDelegates: { [user2.healthcarePartyId!]: 'WRITE' } }\n )\n )\n const patientFromSecretIds = await api1.patientApi.decryptSecretIdsOf(patientFrom)\n expect(patientFromSecretIds).to.have.lengthOf(1)\n const patientInto = await api1.patientApi.createPatientWithUser(\n user1,\n await api1.patientApi.newInstance(\n user1,\n {\n firstName: 'Into',\n lastName: mergedLastName,\n note: 'B',\n },\n { additionalDelegates: { [user3.healthcarePartyId!]: 'WRITE' } }\n )\n )\n const patientIntoSecretIds = await api1.patientApi.decryptSecretIdsOf(patientInto)\n expect(patientFromSecretIds).to.have.lengthOf(1)\n expect(patientIntoSecretIds[0]).to.not.equal(patientFromSecretIds[0])\n const mergedInto = {\n ...patientInto,\n firstName: mergedFirstName,\n lastName: mergedLastName,\n alias: mergedAlias,\n note: mergedNote,\n }\n const mergedPatient = await api1.patientApi.mergePatients(patientFrom, mergedInto)\n expect(mergedPatient.firstName).to.equal(mergedFirstName)\n expect(mergedPatient.lastName).to.equal(mergedLastName)\n expect(mergedPatient.alias).to.equal(mergedAlias)\n expect(mergedPatient.note).to.equal(mergedNote)\n expect(await api1.patientApi.decryptSecretIdsOf(mergedPatient)).to.have.members([...patientFromSecretIds, ...patientIntoSecretIds])\n const retrievedByDelegateWithAccessToInto = await api3.patientApi.getPatientWithUser(user3, patientInto.id!)\n expect(retrievedByDelegateWithAccessToInto.firstName).to.equal(mergedFirstName)\n expect(retrievedByDelegateWithAccessToInto.lastName).to.equal(mergedLastName)\n expect(retrievedByDelegateWithAccessToInto.alias).to.equal(mergedAlias)\n expect(retrievedByDelegateWithAccessToInto.note).to.equal(mergedNote)\n expect(await api3.patientApi.decryptSecretIdsOf(retrievedByDelegateWithAccessToInto)).to.have.members(patientIntoSecretIds)\n const retrievedByDelegateWithAccessToFrom = await api2.patientApi.getPatientWithUser(user2, patientInto.id!)\n expect(retrievedByDelegateWithAccessToFrom.firstName).to.equal(mergedFirstName)\n expect(retrievedByDelegateWithAccessToFrom.lastName).to.equal(mergedLastName)\n expect(retrievedByDelegateWithAccessToFrom.alias).to.equal(mergedAlias)\n expect(retrievedByDelegateWithAccessToFrom.note).to.be.undefined // No access to new encryption key yet\n expect(await api2.patientApi.decryptSecretIdsOf(retrievedByDelegateWithAccessToFrom)).to.have.members(patientFromSecretIds)\n })\n\n it('Patient picture should be automatically decoded from base64 on initialisation.', async () => {\n const pictureAB = randomBytes(100)\n const pictureBase64 = ua2b64(pictureAB)\n const patient = new Patient({ picture: pictureBase64 })\n expect(patient.picture).to.not.be.undefined\n expect(patient.picture instanceof ArrayBuffer || ArrayBuffer.isView(patient.picture)).to.be.true\n const decodedPicture = new Uint8Array(patient.picture!)\n expect(decodedPicture).to.have.length(pictureAB.length)\n for (let i = 0; i < pictureAB.length; i++) {\n expect(decodedPicture[i]).to.equal(pictureAB[i])\n }\n })\n\n it('Creating a new Patient instance using a patient with decoded picture should not lose the picture data', async () => {\n const pictureAB = randomBytes(100)\n const patient = new Patient({ picture: new Uint8Array(pictureAB) })\n expect(patient.picture).to.not.be.undefined\n expect(patient.picture instanceof ArrayBuffer || ArrayBuffer.isView(patient.picture)).to.be.true\n const decodedPicture = new Uint8Array(patient.picture!)\n expect(decodedPicture).to.have.length(pictureAB.length)\n for (let i = 0; i < pictureAB.length; i++) {\n expect(decodedPicture[i]).to.equal(pictureAB[i])\n }\n })\n\n it('A Patient with picture data should be created and retrieved correctly', async () => {\n const pictureAB = randomBytes(100)\n const api = await initApi(env!, hcp1Username)\n const user = await api.userApi.getCurrentUser()\n const patient = await api.patientApi.createPatientWithUser(\n user,\n await api.patientApi.newInstance(user, { firstName: 'Giovanni', lastName: 'Giorgio', picture: new Uint8Array(pictureAB) })\n )\n expect(patient.picture).to.not.be.undefined\n expect(patient.picture instanceof ArrayBuffer || ArrayBuffer.isView(patient.picture)).to.be.true\n const decodedPicture = new Uint8Array(patient.picture!)\n expect(decodedPicture).to.have.length(pictureAB.length)\n for (let i = 0; i < pictureAB.length; i++) {\n expect(decodedPicture[i]).to.equal(pictureAB[i])\n }\n })\n\n it('A patient created with v8 + should have no auto-fixed delegations', async () => {\n const api = await initApi(env!, hcp1Username)\n const user = await api.userApi.getCurrentUser()\n const patient: Patient = await api.patientApi.createPatientWithUser(\n user,\n await api.patientApi.newInstance(user, { firstName: 'Giovanni', lastName: 'Giorgio', preferredUserId: user.id })\n )\n expect(Object.keys(patient.delegations ?? {}).length == 0).to.be.true\n })\n})\n"]}
@@ -1 +0,0 @@
1
- export {};
@@ -1,175 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- const test_utils_1 = require("../utils/test_utils");
13
- const mocha_1 = require("mocha");
14
- const types_1 = require("@icure/test-setup/types");
15
- const icc_x_api_1 = require("../../icc-x-api");
16
- const crypto_1 = require("crypto");
17
- const User_1 = require("../../icc-api/model/User");
18
- const chai_1 = require("chai");
19
- const chaiAsPromised = require("chai-as-promised");
20
- const TestStorage_1 = require("../utils/TestStorage");
21
- const DataOwnerTypeEnum_1 = require("../../icc-api/model/DataOwnerTypeEnum");
22
- const SecureDelegation_1 = require("../../icc-api/model/SecureDelegation");
23
- var AccessLevelEnum = SecureDelegation_1.SecureDelegation.AccessLevelEnum;
24
- const icc_recovery_x_api_1 = require("../../icc-x-api/icc-recovery-x-api");
25
- const FilterChainHealthElement_1 = require("../../icc-api/model/FilterChainHealthElement");
26
- const HealthElementByHcPartyFilter_1 = require("../../icc-x-api/filters/HealthElementByHcPartyFilter");
27
- (0, chai_1.use)(chaiAsPromised);
28
- (0, test_utils_1.setLocalStorage)(fetch);
29
- let env;
30
- describe('Recovery api use scenarios', () => {
31
- (0, mocha_1.before)(function () {
32
- return __awaiter(this, void 0, void 0, function* () {
33
- this.timeout(600000);
34
- const initializer = yield (0, test_utils_1.getEnvironmentInitializer)();
35
- env = yield initializer.execute((0, types_1.getEnvVariables)());
36
- });
37
- });
38
- it('An hcp should be able to share data with an uninitialized patient data owner and the patient should be able to recover the exchange data with the provided recovery key.', function () {
39
- return __awaiter(this, void 0, void 0, function* () {
40
- const hcp = yield (0, test_utils_1.createNewHcpApi)(env);
41
- const patientId = (0, crypto_1.randomUUID)();
42
- const patientMail = (0, test_utils_1.getTempEmail)();
43
- const patientPassword = (0, crypto_1.randomUUID)();
44
- const patient = yield hcp.api.patientApi.createPatientWithUser(hcp.user, yield hcp.api.patientApi.newInstance(hcp.user, {
45
- id: patientId,
46
- firstName: 'John',
47
- lastName: 'Doe',
48
- }));
49
- const patientUser = yield hcp.api.userApi.createUser(new User_1.User({
50
- id: (0, crypto_1.randomUUID)(),
51
- login: patientMail,
52
- passwordHash: patientPassword,
53
- patientId: patientId,
54
- }));
55
- const healthData = yield hcp.api.healthcareElementApi.createHealthElementWithUser(hcp.user, yield hcp.api.healthcareElementApi.newInstance(hcp.user, patient, {
56
- descr: 'Health data',
57
- }));
58
- yield (0, chai_1.expect)(hcp.api.healthcareElementApi.shareWith(patientId, healthData)).to.be.rejected;
59
- (0, chai_1.expect)(yield hcp.api.patientApi.forceInitialiseExchangeDataToNewlyInvitedPatient(patientId)).to.be.true;
60
- const recoveryKey = yield hcp.api.recoveryApi.createExchangeDataRecoveryInfo(patientId);
61
- const sharedHealthData = yield hcp.api.healthcareElementApi.shareWith(patientId, healthData);
62
- const patientApi = yield icc_x_api_1.IcureApi.initialise(env.iCureUrl, { username: patientMail, password: patientPassword }, {
63
- dataOwnerRequiresAnonymousDelegation(dataOwner) {
64
- return dataOwner.type == DataOwnerTypeEnum_1.DataOwnerTypeEnum.Patient;
65
- },
66
- generateNewKeyForDataOwner() {
67
- return Promise.resolve(true);
68
- },
69
- recoverAndVerifySelfHierarchyKeys(keysData) {
70
- return Promise.resolve(Object.fromEntries(keysData.map((x) => [x.dataOwner.dataOwner.id, { recoveredKeys: {}, keyAuthenticity: {} }])));
71
- },
72
- verifyDelegatePublicKeys(_, publicKeys) {
73
- return Promise.resolve(publicKeys);
74
- },
75
- }, crypto_1.webcrypto, fetch, {
76
- storage: new TestStorage_1.TestStorage(),
77
- keyStorage: new TestStorage_1.TestKeyStorage(),
78
- });
79
- if (!(0, test_utils_1.isLiteTest)())
80
- yield (0, chai_1.expect)(patientApi.healthcareElementApi.getHealthElementWithUser(patientUser, sharedHealthData.id)).to.be.rejected;
81
- (0, chai_1.expect)(yield patientApi.recoveryApi.recoverExchangeData(recoveryKey + 'aa')).to.equal(icc_recovery_x_api_1.RecoveryDataUseFailureReason.Missing); // User put in the wrong key
82
- (0, chai_1.expect)(yield patientApi.recoveryApi.recoverExchangeData(recoveryKey)).to.be.null;
83
- (0, chai_1.expect)(yield patientApi.recoveryApi.recoverExchangeData(recoveryKey)).to.equal(icc_recovery_x_api_1.RecoveryDataUseFailureReason.Missing); // After use it is automatically deleted
84
- (0, chai_1.expect)((yield patientApi.healthcareElementApi.filterByWithUser(patientUser, undefined, 10000, new FilterChainHealthElement_1.FilterChainHealthElement({
85
- filter: new HealthElementByHcPartyFilter_1.HealthElementByHcPartyFilter({ hcpId: patientUser.patientId }),
86
- }))).rows[0]).to.be.deep.equal(sharedHealthData);
87
- (0, chai_1.expect)(yield patientApi.healthcareElementApi.getHealthElementWithUser(patientUser, sharedHealthData.id)).to.be.deep.equal(sharedHealthData);
88
- yield hcp.api.cryptoApi.forceReload();
89
- const healthData2 = yield hcp.api.healthcareElementApi.createHealthElementWithUser(hcp.user, yield hcp.api.healthcareElementApi.newInstance(hcp.user, patient, {
90
- descr: 'Health data 2',
91
- }, {
92
- additionalDelegates: { [patientId]: AccessLevelEnum.WRITE },
93
- }));
94
- (0, chai_1.expect)(yield patientApi.healthcareElementApi.getHealthElementWithUser(patientUser, healthData2.id)).to.be.deep.equal(healthData2);
95
- (0, chai_1.expect)(yield hcp.api.cryptoApi.exchangeData.base.getExchangeDataByDelegatorDelegatePair(hcp.credentials.dataOwnerId, patientId)).to.have.length(1);
96
- });
97
- });
98
- it('A user should be able to create keypair recovery data and use the recovery key to get back the keys.', function () {
99
- return __awaiter(this, void 0, void 0, function* () {
100
- const hcp = yield (0, test_utils_1.createNewHcpApi)(env);
101
- const patient = yield hcp.api.patientApi.createPatientWithUser(hcp.user, yield hcp.api.patientApi.newInstance(hcp.user, {
102
- firstName: 'John',
103
- lastName: 'Doe',
104
- note: 'Encrypted content',
105
- }));
106
- (0, chai_1.expect)(patient.note).to.equal('Encrypted content');
107
- const recoveryKey = yield hcp.api.recoveryApi.createRecoveryInfoForAvailableKeyPairs();
108
- let recoverAndVerifiedCalled = false;
109
- const recoveredApi = yield icc_x_api_1.IcureApi.initialise(env.iCureUrl, { username: hcp.credentials.user, password: hcp.credentials.password }, {
110
- dataOwnerRequiresAnonymousDelegation(dataOwner) {
111
- return dataOwner.type == DataOwnerTypeEnum_1.DataOwnerTypeEnum.Patient;
112
- },
113
- generateNewKeyForDataOwner() {
114
- return Promise.resolve(false);
115
- },
116
- recoverAndVerifySelfHierarchyKeys(keysData, _, keyRecoverer) {
117
- return __awaiter(this, void 0, void 0, function* () {
118
- recoverAndVerifiedCalled = true;
119
- const recovered = yield keyRecoverer.recoverWithRecoveryKey(recoveryKey, true);
120
- if ('success' in recovered) {
121
- (0, chai_1.expect)(Object.entries(recovered.success)).to.have.length(1);
122
- const recoveredForSelf = recovered.success[hcp.credentials.dataOwnerId];
123
- (0, chai_1.expect)(Object.entries(recoveredForSelf)).to.have.length(1);
124
- (0, chai_1.expect)(yield keyRecoverer.recoverWithRecoveryKey(recoveryKey, true)).to.deep.equal({ failure: icc_recovery_x_api_1.RecoveryDataUseFailureReason.Missing });
125
- const res = {};
126
- for (const keyData of keysData) {
127
- if (keyData.dataOwner.dataOwner.id == hcp.credentials.dataOwnerId) {
128
- res[keyData.dataOwner.dataOwner.id] = {
129
- recoveredKeys: recoveredForSelf,
130
- keyAuthenticity: {},
131
- };
132
- }
133
- else {
134
- res[keyData.dataOwner.dataOwner.id] = {
135
- recoveredKeys: {},
136
- keyAuthenticity: {},
137
- };
138
- }
139
- }
140
- return res;
141
- }
142
- else {
143
- chai_1.assert.fail('Could not recover keys with recovery key');
144
- }
145
- });
146
- },
147
- verifyDelegatePublicKeys(_, publicKeys) {
148
- return Promise.resolve(publicKeys);
149
- },
150
- }, crypto_1.webcrypto, fetch, {
151
- storage: new TestStorage_1.TestStorage(),
152
- keyStorage: new TestStorage_1.TestKeyStorage(),
153
- });
154
- (0, chai_1.expect)(recoverAndVerifiedCalled).to.be.true;
155
- (0, chai_1.expect)(recoveredApi.dataOwnerApi.getHexPublicKeysOf(yield recoveredApi.healthcarePartyApi.getCurrentHealthcareParty())).to.have.length(1);
156
- (0, chai_1.expect)(yield recoveredApi.patientApi.getPatientWithUser(hcp.user, patient.id)).to.be.deep.equal(patient);
157
- });
158
- });
159
- it('Recovery data should expire after the lifetime has elapsed', function () {
160
- return __awaiter(this, void 0, void 0, function* () {
161
- const hcp = yield (0, test_utils_1.createNewHcpApi)(env);
162
- const recoveryKey = yield hcp.api.recoveryApi.createRecoveryInfoForAvailableKeyPairs({ lifetimeSeconds: 5 });
163
- yield (0, icc_x_api_1.sleep)(1000);
164
- const recovered1 = yield hcp.api.recoveryApi.recoverKeyPairs(recoveryKey, false);
165
- (0, chai_1.expect)(recovered1).to.have.keys('success');
166
- yield (0, icc_x_api_1.sleep)(1000);
167
- const recovered2 = yield hcp.api.recoveryApi.recoverKeyPairs(recoveryKey, false);
168
- (0, chai_1.expect)(recovered2).to.have.keys('success');
169
- yield (0, icc_x_api_1.sleep)(3000);
170
- const recovered3 = yield hcp.api.recoveryApi.recoverKeyPairs(recoveryKey, false);
171
- (0, chai_1.expect)(recovered3).to.deep.equal({ failure: icc_recovery_x_api_1.RecoveryDataUseFailureReason.Missing });
172
- });
173
- });
174
- });
175
- //# sourceMappingURL=icc-recovery-x-api.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"icc-recovery-x-api.js","sourceRoot":"","sources":["../../../test/icc-x-api/icc-recovery-x-api.ts"],"names":[],"mappings":"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","sourcesContent":["import { createNewHcpApi, getEnvironmentInitializer, getTempEmail, isLiteTest, setLocalStorage, TestUtils } from '../utils/test_utils'\nimport { before } from 'mocha'\nimport { getEnvVariables, TestVars } from '@icure/test-setup/types'\nimport { CryptoPrimitives, IcureApi, KeyPair, sleep } from '../../icc-x-api'\nimport { randomUUID, webcrypto } from 'crypto'\nimport { User } from '../../icc-api/model/User'\nimport { assert, expect, use as chaiUse } from 'chai'\nimport * as chaiAsPromised from 'chai-as-promised'\nimport { TestKeyStorage, TestStorage } from '../utils/TestStorage'\nimport { CryptoActorStubWithType } from '../../icc-api/model/CryptoActorStub'\nimport { DataOwnerTypeEnum } from '../../icc-api/model/DataOwnerTypeEnum'\nimport { DataOwnerWithType } from '../../icc-api/model/DataOwnerWithType'\nimport { SecureDelegation } from '../../icc-api/model/SecureDelegation'\nimport AccessLevelEnum = SecureDelegation.AccessLevelEnum\nimport { RecoveryDataUseFailureReason } from '../../icc-x-api/icc-recovery-x-api'\nimport { KeyPairRecoverer } from '../../icc-x-api/crypto/KeyPairRecoverer'\nimport { delay } from 'lodash'\nimport { FilterChainHealthElement } from '../../icc-api/model/FilterChainHealthElement'\nimport { HealthElementByHcPartyFilter } from '../../icc-x-api/filters/HealthElementByHcPartyFilter'\n\nchaiUse(chaiAsPromised)\nsetLocalStorage(fetch)\nlet env: TestVars\n\ndescribe('Recovery api use scenarios', () => {\n before(async function () {\n this.timeout(600000)\n const initializer = await getEnvironmentInitializer()\n env = await initializer.execute(getEnvVariables())\n })\n\n it('An hcp should be able to share data with an uninitialized patient data owner and the patient should be able to recover the exchange data with the provided recovery key.', async function () {\n const hcp = await createNewHcpApi(env)\n const patientId = randomUUID()\n const patientMail = getTempEmail()\n const patientPassword = randomUUID()\n const patient = await hcp.api.patientApi.createPatientWithUser(\n hcp.user,\n await hcp.api.patientApi.newInstance(hcp.user, {\n id: patientId,\n firstName: 'John',\n lastName: 'Doe',\n })\n )\n const patientUser = await hcp.api.userApi.createUser(\n new User({\n id: randomUUID(),\n login: patientMail,\n passwordHash: patientPassword,\n patientId: patientId,\n })\n )\n const healthData = await hcp.api.healthcareElementApi.createHealthElementWithUser(\n hcp.user,\n await hcp.api.healthcareElementApi.newInstance(hcp.user, patient, {\n descr: 'Health data',\n })\n )\n await expect(hcp.api.healthcareElementApi.shareWith(patientId, healthData)).to.be.rejected\n expect(await hcp.api.patientApi.forceInitialiseExchangeDataToNewlyInvitedPatient(patientId)).to.be.true\n const recoveryKey = await hcp.api.recoveryApi.createExchangeDataRecoveryInfo(patientId)\n const sharedHealthData = await hcp.api.healthcareElementApi.shareWith(patientId, healthData)\n const patientApi = await IcureApi.initialise(\n env.iCureUrl,\n { username: patientMail, password: patientPassword },\n {\n dataOwnerRequiresAnonymousDelegation(dataOwner: CryptoActorStubWithType): boolean {\n return dataOwner.type == DataOwnerTypeEnum.Patient\n },\n generateNewKeyForDataOwner(): Promise<boolean> {\n return Promise.resolve(true)\n },\n recoverAndVerifySelfHierarchyKeys(\n keysData: {\n dataOwner: DataOwnerWithType\n unknownKeys: string[]\n unavailableKeys: string[]\n }[]\n ): Promise<{\n [p: string]: { recoveredKeys: { [p: string]: KeyPair<CryptoKey> }; keyAuthenticity: { [p: string]: boolean } }\n }> {\n return Promise.resolve(Object.fromEntries(keysData.map((x) => [x.dataOwner.dataOwner.id, { recoveredKeys: {}, keyAuthenticity: {} }])))\n },\n verifyDelegatePublicKeys(_: any, publicKeys: string[]): Promise<string[]> {\n return Promise.resolve(publicKeys)\n },\n },\n webcrypto as any,\n fetch,\n {\n storage: new TestStorage(),\n keyStorage: new TestKeyStorage(),\n }\n )\n if (!isLiteTest()) await expect(patientApi.healthcareElementApi.getHealthElementWithUser(patientUser, sharedHealthData.id!)).to.be.rejected\n expect(await patientApi.recoveryApi.recoverExchangeData(recoveryKey + 'aa')).to.equal(RecoveryDataUseFailureReason.Missing) // User put in the wrong key\n expect(await patientApi.recoveryApi.recoverExchangeData(recoveryKey)).to.be.null\n expect(await patientApi.recoveryApi.recoverExchangeData(recoveryKey)).to.equal(RecoveryDataUseFailureReason.Missing) // After use it is automatically deleted\n expect(\n (\n await patientApi.healthcareElementApi.filterByWithUser(\n patientUser,\n undefined,\n 10000,\n new FilterChainHealthElement({\n filter: new HealthElementByHcPartyFilter({ hcpId: patientUser.patientId }),\n })\n )\n ).rows![0]\n ).to.be.deep.equal(sharedHealthData)\n expect(await patientApi.healthcareElementApi.getHealthElementWithUser(patientUser, sharedHealthData.id!)).to.be.deep.equal(sharedHealthData)\n await hcp.api.cryptoApi.forceReload()\n const healthData2 = await hcp.api.healthcareElementApi.createHealthElementWithUser(\n hcp.user,\n await hcp.api.healthcareElementApi.newInstance(\n hcp.user,\n patient,\n {\n descr: 'Health data 2',\n },\n {\n additionalDelegates: { [patientId]: AccessLevelEnum.WRITE },\n }\n )\n )\n expect(await patientApi.healthcareElementApi.getHealthElementWithUser(patientUser, healthData2.id!)).to.be.deep.equal(healthData2)\n expect(await hcp.api.cryptoApi.exchangeData.base.getExchangeDataByDelegatorDelegatePair(hcp.credentials.dataOwnerId, patientId)).to.have.length(1)\n })\n\n it('A user should be able to create keypair recovery data and use the recovery key to get back the keys.', async function () {\n const hcp = await createNewHcpApi(env)\n const patient = await hcp.api.patientApi.createPatientWithUser(\n hcp.user,\n await hcp.api.patientApi.newInstance(hcp.user, {\n firstName: 'John',\n lastName: 'Doe',\n note: 'Encrypted content',\n })\n )\n expect(patient.note).to.equal('Encrypted content')\n const recoveryKey = await hcp.api.recoveryApi.createRecoveryInfoForAvailableKeyPairs()\n let recoverAndVerifiedCalled = false\n const recoveredApi = await IcureApi.initialise(\n env.iCureUrl,\n { username: hcp.credentials.user, password: hcp.credentials.password },\n {\n dataOwnerRequiresAnonymousDelegation(dataOwner: CryptoActorStubWithType): boolean {\n return dataOwner.type == DataOwnerTypeEnum.Patient\n },\n generateNewKeyForDataOwner(): Promise<boolean> {\n return Promise.resolve(false)\n },\n async recoverAndVerifySelfHierarchyKeys(\n keysData: {\n dataOwner: DataOwnerWithType\n unknownKeys: string[]\n unavailableKeys: string[]\n }[],\n _: any,\n keyRecoverer: KeyPairRecoverer\n ): Promise<{\n [p: string]: { recoveredKeys: { [p: string]: KeyPair<CryptoKey> }; keyAuthenticity: { [p: string]: boolean } }\n }> {\n recoverAndVerifiedCalled = true\n const recovered = await keyRecoverer.recoverWithRecoveryKey(recoveryKey, true)\n if ('success' in recovered) {\n expect(Object.entries(recovered.success)).to.have.length(1)\n const recoveredForSelf = recovered.success[hcp.credentials.dataOwnerId]\n expect(Object.entries(recoveredForSelf)).to.have.length(1)\n expect(await keyRecoverer.recoverWithRecoveryKey(recoveryKey, true)).to.deep.equal({ failure: RecoveryDataUseFailureReason.Missing })\n const res: {\n [p: string]: { recoveredKeys: { [p: string]: KeyPair<CryptoKey> }; keyAuthenticity: { [p: string]: boolean } }\n } = {}\n for (const keyData of keysData) {\n if (keyData.dataOwner.dataOwner.id == hcp.credentials.dataOwnerId) {\n res[keyData.dataOwner.dataOwner.id] = {\n recoveredKeys: recoveredForSelf,\n keyAuthenticity: {},\n }\n } else {\n res[keyData.dataOwner.dataOwner.id!] = {\n recoveredKeys: {},\n keyAuthenticity: {},\n }\n }\n }\n return res\n } else {\n assert.fail('Could not recover keys with recovery key')\n }\n },\n verifyDelegatePublicKeys(_: any, publicKeys: string[]): Promise<string[]> {\n return Promise.resolve(publicKeys)\n },\n },\n webcrypto as any,\n fetch,\n {\n storage: new TestStorage(),\n keyStorage: new TestKeyStorage(),\n }\n )\n expect(recoverAndVerifiedCalled).to.be.true\n expect(recoveredApi.dataOwnerApi.getHexPublicKeysOf(await recoveredApi.healthcarePartyApi.getCurrentHealthcareParty())).to.have.length(1)\n expect(await recoveredApi.patientApi.getPatientWithUser(hcp.user, patient.id!)).to.be.deep.equal(patient)\n })\n\n it('Recovery data should expire after the lifetime has elapsed', async function () {\n const hcp = await createNewHcpApi(env)\n const recoveryKey = await hcp.api.recoveryApi.createRecoveryInfoForAvailableKeyPairs({ lifetimeSeconds: 5 })\n await sleep(1000)\n const recovered1 = await hcp.api.recoveryApi.recoverKeyPairs(recoveryKey, false)\n expect(recovered1).to.have.keys('success')\n await sleep(1000)\n const recovered2 = await hcp.api.recoveryApi.recoverKeyPairs(recoveryKey, false)\n expect(recovered2).to.have.keys('success')\n await sleep(3000)\n const recovered3 = await hcp.api.recoveryApi.recoverKeyPairs(recoveryKey, false)\n expect(recovered3).to.deep.equal({ failure: RecoveryDataUseFailureReason.Missing })\n })\n})\n"]}
@@ -1 +0,0 @@
1
- import 'isomorphic-fetch';