@icure/api 8.6.19 → 8.7.1

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 (326) 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/utils/code-util.d.ts +23 -0
  53. package/icc-x-api/utils/code-util.js +39 -2
  54. package/icc-x-api/utils/code-util.js.map +1 -1
  55. package/icc-x-api/utils/collection-utils.d.ts +13 -0
  56. package/icc-x-api/utils/collection-utils.js +79 -0
  57. package/icc-x-api/utils/collection-utils.js.map +1 -1
  58. package/icc-x-api/utils/compression-utils.d.ts +28 -0
  59. package/icc-x-api/utils/compression-utils.js +106 -0
  60. package/icc-x-api/utils/compression-utils.js.map +1 -0
  61. package/icc-x-api/utils/crypto-utils.js +7 -7
  62. package/icc-x-api/utils/crypto-utils.js.map +1 -1
  63. package/icc-x-api/utils/formatting-util.d.ts +3 -3
  64. package/icc-x-api/utils/formatting-util.js +22 -23
  65. package/icc-x-api/utils/formatting-util.js.map +1 -1
  66. package/icc-x-api/utils/hcp-util.js +2 -3
  67. package/icc-x-api/utils/hcp-util.js.map +1 -1
  68. package/icc-x-api/utils/insurability-util.js +10 -8
  69. package/icc-x-api/utils/insurability-util.js.map +1 -1
  70. package/icc-x-api/utils/lzma-wasm.d.ts +6 -0
  71. package/icc-x-api/utils/lzma-wasm.js +81 -0
  72. package/icc-x-api/utils/lzma-wasm.js.map +1 -0
  73. package/icc-x-api/utils/mutex.d.ts +12 -0
  74. package/icc-x-api/utils/mutex.js +26 -0
  75. package/icc-x-api/utils/mutex.js.map +1 -0
  76. package/icc-x-api/utils/websocket.js +7 -7
  77. package/icc-x-api/utils/websocket.js.map +1 -1
  78. package/icc-x-api/wasm/lzma/lzma.js +2 -0
  79. package/icc-x-api/wasm/lzma/lzma.wasm +0 -0
  80. package/package.json +2 -11
  81. package/icc-x-api/utils/uuid-encoder.d.ts +0 -44
  82. package/icc-x-api/utils/uuid-encoder.js +0 -114
  83. package/icc-x-api/utils/uuid-encoder.js.map +0 -1
  84. package/test/icc-api/api/IccAgendaApi.d.ts +0 -1
  85. package/test/icc-api/api/IccAgendaApi.js +0 -64
  86. package/test/icc-api/api/IccAgendaApi.js.map +0 -1
  87. package/test/icc-api/api/IccAnonymousAccessApi.d.ts +0 -1
  88. package/test/icc-api/api/IccAnonymousAccessApi.js +0 -58
  89. package/test/icc-api/api/IccAnonymousAccessApi.js.map +0 -1
  90. package/test/icc-api/api/IccCalendarItemApi.d.ts +0 -1
  91. package/test/icc-api/api/IccCalendarItemApi.js +0 -67
  92. package/test/icc-api/api/IccCalendarItemApi.js.map +0 -1
  93. package/test/icc-api/api/IccCalendarItemTypeApi.d.ts +0 -1
  94. package/test/icc-api/api/IccCalendarItemTypeApi.js +0 -96
  95. package/test/icc-api/api/IccCalendarItemTypeApi.js.map +0 -1
  96. package/test/icc-api/api/IccCodeApi.d.ts +0 -1
  97. package/test/icc-api/api/IccCodeApi.js +0 -38
  98. package/test/icc-api/api/IccCodeApi.js.map +0 -1
  99. package/test/icc-api/api/IccDocumentApi.d.ts +0 -1
  100. package/test/icc-api/api/IccDocumentApi.js +0 -199
  101. package/test/icc-api/api/IccDocumentApi.js.map +0 -1
  102. package/test/icc-api/api/IccGroupApi.d.ts +0 -1
  103. package/test/icc-api/api/IccGroupApi.js +0 -50
  104. package/test/icc-api/api/IccGroupApi.js.map +0 -1
  105. package/test/icc-api/api/IccKeywordApi.d.ts +0 -1
  106. package/test/icc-api/api/IccKeywordApi.js +0 -64
  107. package/test/icc-api/api/IccKeywordApi.js.map +0 -1
  108. package/test/icc-api/api/IccMedicalLocationApi.d.ts +0 -1
  109. package/test/icc-api/api/IccMedicalLocationApi.js +0 -64
  110. package/test/icc-api/api/IccMedicalLocationApi.js.map +0 -1
  111. package/test/icc-api/api/IccPlaceApi.d.ts +0 -1
  112. package/test/icc-api/api/IccPlaceApi.js +0 -64
  113. package/test/icc-api/api/IccPlaceApi.js.map +0 -1
  114. package/test/icc-api/api/IccRecoveryDataApi.d.ts +0 -1
  115. package/test/icc-api/api/IccRecoveryDataApi.js +0 -95
  116. package/test/icc-api/api/IccRecoveryDataApi.js.map +0 -1
  117. package/test/icc-api/api/IccRoleApi.d.ts +0 -1
  118. package/test/icc-api/api/IccRoleApi.js +0 -34
  119. package/test/icc-api/api/IccRoleApi.js.map +0 -1
  120. package/test/icc-api/api/IccUserApi.d.ts +0 -1
  121. package/test/icc-api/api/IccUserApi.js +0 -96
  122. package/test/icc-api/api/IccUserApi.js.map +0 -1
  123. package/test/icc-api/e2e/IccCalendarItemApi.d.ts +0 -1
  124. package/test/icc-api/e2e/IccCalendarItemApi.js +0 -46
  125. package/test/icc-api/e2e/IccCalendarItemApi.js.map +0 -1
  126. package/test/icc-api/model/modelHelpersTest.d.ts +0 -1
  127. package/test/icc-api/model/modelHelpersTest.js +0 -45
  128. package/test/icc-api/model/modelHelpersTest.js.map +0 -1
  129. package/test/icc-x-api/auth/group-switch-test.d.ts +0 -1
  130. package/test/icc-x-api/auth/group-switch-test.js +0 -81
  131. package/test/icc-x-api/auth/group-switch-test.js.map +0 -1
  132. package/test/icc-x-api/auth/jwt-concurrency-test.d.ts +0 -2
  133. package/test/icc-x-api/auth/jwt-concurrency-test.js +0 -112
  134. package/test/icc-x-api/auth/jwt-concurrency-test.js.map +0 -1
  135. package/test/icc-x-api/auth/jwt-provider-test.d.ts +0 -1
  136. package/test/icc-x-api/auth/jwt-provider-test.js +0 -197
  137. package/test/icc-x-api/auth/jwt-provider-test.js.map +0 -1
  138. package/test/icc-x-api/auth/smart-auth-provider-test.d.ts +0 -1
  139. package/test/icc-x-api/auth/smart-auth-provider-test.js +0 -224
  140. package/test/icc-x-api/auth/smart-auth-provider-test.js.map +0 -1
  141. package/test/icc-x-api/autofix-anonymity-test.d.ts +0 -1
  142. package/test/icc-x-api/autofix-anonymity-test.js +0 -122
  143. package/test/icc-x-api/autofix-anonymity-test.js.map +0 -1
  144. package/test/icc-x-api/confidential-entities-test.d.ts +0 -1
  145. package/test/icc-x-api/confidential-entities-test.js +0 -168
  146. package/test/icc-x-api/confidential-entities-test.js.map +0 -1
  147. package/test/icc-x-api/crud/comprehensive-crud-test.d.ts +0 -1
  148. package/test/icc-x-api/crud/comprehensive-crud-test.js +0 -276
  149. package/test/icc-x-api/crud/comprehensive-crud-test.js.map +0 -1
  150. package/test/icc-x-api/crud/entities-crud-test-interface.d.ts +0 -16
  151. package/test/icc-x-api/crud/entities-crud-test-interface.js +0 -408
  152. package/test/icc-x-api/crud/entities-crud-test-interface.js.map +0 -1
  153. package/test/icc-x-api/crypto/anonymous-delegations-test.d.ts +0 -1
  154. package/test/icc-x-api/crypto/anonymous-delegations-test.js +0 -587
  155. package/test/icc-x-api/crypto/anonymous-delegations-test.js.map +0 -1
  156. package/test/icc-x-api/crypto/concurrency.d.ts +0 -1
  157. package/test/icc-x-api/crypto/concurrency.js +0 -35
  158. package/test/icc-x-api/crypto/concurrency.js.map +0 -1
  159. package/test/icc-x-api/crypto/crypto-utils.d.ts +0 -1
  160. package/test/icc-x-api/crypto/crypto-utils.js +0 -79
  161. package/test/icc-x-api/crypto/crypto-utils.js.map +0 -1
  162. package/test/icc-x-api/crypto/cryptoTest.d.ts +0 -2
  163. package/test/icc-x-api/crypto/cryptoTest.js +0 -402
  164. package/test/icc-x-api/crypto/cryptoTest.js.map +0 -1
  165. package/test/icc-x-api/crypto/delegate-ci-to-patient-with-missing-keys-test.d.ts +0 -1
  166. package/test/icc-x-api/crypto/delegate-ci-to-patient-with-missing-keys-test.js +0 -166
  167. package/test/icc-x-api/crypto/delegate-ci-to-patient-with-missing-keys-test.js.map +0 -1
  168. package/test/icc-x-api/crypto/exchange-data-manager-test.d.ts +0 -1
  169. package/test/icc-x-api/crypto/exchange-data-manager-test.js +0 -674
  170. package/test/icc-x-api/crypto/exchange-data-manager-test.js.map +0 -1
  171. package/test/icc-x-api/crypto/full-crypto-test.d.ts +0 -1
  172. package/test/icc-x-api/crypto/full-crypto-test.js +0 -454
  173. package/test/icc-x-api/crypto/full-crypto-test.js.map +0 -1
  174. package/test/icc-x-api/crypto/legacy-metadata-migration-test.d.ts +0 -1
  175. package/test/icc-x-api/crypto/legacy-metadata-migration-test.js +0 -379
  176. package/test/icc-x-api/crypto/legacy-metadata-migration-test.js.map +0 -1
  177. package/test/icc-x-api/crypto/secure-delegations-manager-test.d.ts +0 -1
  178. package/test/icc-x-api/crypto/secure-delegations-manager-test.js +0 -278
  179. package/test/icc-x-api/crypto/secure-delegations-manager-test.js.map +0 -1
  180. package/test/icc-x-api/crypto/shamir.d.ts +0 -2
  181. package/test/icc-x-api/crypto/shamir.js +0 -167
  182. package/test/icc-x-api/crypto/shamir.js.map +0 -1
  183. package/test/icc-x-api/crypto/share-to-newly-created-patient-from-hcp.d.ts +0 -1
  184. package/test/icc-x-api/crypto/share-to-newly-created-patient-from-hcp.js +0 -71
  185. package/test/icc-x-api/crypto/share-to-newly-created-patient-from-hcp.js.map +0 -1
  186. package/test/icc-x-api/crypto/soft-deleted-data-owners.d.ts +0 -2
  187. package/test/icc-x-api/crypto/soft-deleted-data-owners.js +0 -113
  188. package/test/icc-x-api/crypto/soft-deleted-data-owners.js.map +0 -1
  189. package/test/icc-x-api/crypto/user-encryption-keys-manager-test.d.ts +0 -1
  190. package/test/icc-x-api/crypto/user-encryption-keys-manager-test.js +0 -246
  191. package/test/icc-x-api/crypto/user-encryption-keys-manager-test.js.map +0 -1
  192. package/test/icc-x-api/entity-with-attachments-api-test.d.ts +0 -1
  193. package/test/icc-x-api/entity-with-attachments-api-test.js +0 -142
  194. package/test/icc-x-api/entity-with-attachments-api-test.js.map +0 -1
  195. package/test/icc-x-api/filters/filters.d.ts +0 -1
  196. package/test/icc-x-api/filters/filters.js +0 -49
  197. package/test/icc-x-api/filters/filters.js.map +0 -1
  198. package/test/icc-x-api/filters/healthelement.d.ts +0 -1
  199. package/test/icc-x-api/filters/healthelement.js +0 -333
  200. package/test/icc-x-api/filters/healthelement.js.map +0 -1
  201. package/test/icc-x-api/icc-accesslog-x-api.d.ts +0 -1
  202. package/test/icc-x-api/icc-accesslog-x-api.js +0 -106
  203. package/test/icc-x-api/icc-accesslog-x-api.js.map +0 -1
  204. package/test/icc-x-api/icc-application-settings-x-api.d.ts +0 -1
  205. package/test/icc-x-api/icc-application-settings-x-api.js +0 -91
  206. package/test/icc-x-api/icc-application-settings-x-api.js.map +0 -1
  207. package/test/icc-x-api/icc-auth-api.d.ts +0 -1
  208. package/test/icc-x-api/icc-auth-api.js +0 -47
  209. package/test/icc-x-api/icc-auth-api.js.map +0 -1
  210. package/test/icc-x-api/icc-calendar-item-x-api.d.ts +0 -1
  211. package/test/icc-x-api/icc-calendar-item-x-api.js +0 -150
  212. package/test/icc-x-api/icc-calendar-item-x-api.js.map +0 -1
  213. package/test/icc-x-api/icc-contact-x-api.d.ts +0 -1
  214. package/test/icc-x-api/icc-contact-x-api.js +0 -355
  215. package/test/icc-x-api/icc-contact-x-api.js.map +0 -1
  216. package/test/icc-x-api/icc-document-x-api.d.ts +0 -1
  217. package/test/icc-x-api/icc-document-x-api.js +0 -76
  218. package/test/icc-x-api/icc-document-x-api.js.map +0 -1
  219. package/test/icc-x-api/icc-form-x-api.d.ts +0 -1
  220. package/test/icc-x-api/icc-form-x-api.js +0 -413
  221. package/test/icc-x-api/icc-form-x-api.js.map +0 -1
  222. package/test/icc-x-api/icc-hcparty-x-api-test.d.ts +0 -1
  223. package/test/icc-x-api/icc-hcparty-x-api-test.js +0 -43
  224. package/test/icc-x-api/icc-hcparty-x-api-test.js.map +0 -1
  225. package/test/icc-x-api/icc-helement-x-api-test.d.ts +0 -1
  226. package/test/icc-x-api/icc-helement-x-api-test.js +0 -155
  227. package/test/icc-x-api/icc-helement-x-api-test.js.map +0 -1
  228. package/test/icc-x-api/icc-invoice-x-api.d.ts +0 -1
  229. package/test/icc-x-api/icc-invoice-x-api.js +0 -99
  230. package/test/icc-x-api/icc-invoice-x-api.js.map +0 -1
  231. package/test/icc-x-api/icc-maintenance-task-x-api-test.d.ts +0 -1
  232. package/test/icc-x-api/icc-maintenance-task-x-api-test.js +0 -222
  233. package/test/icc-x-api/icc-maintenance-task-x-api-test.js.map +0 -1
  234. package/test/icc-x-api/icc-message-x-api.d.ts +0 -1
  235. package/test/icc-x-api/icc-message-x-api.js +0 -54
  236. package/test/icc-x-api/icc-message-x-api.js.map +0 -1
  237. package/test/icc-x-api/icc-patient-x-api-test.d.ts +0 -1
  238. package/test/icc-x-api/icc-patient-x-api-test.js +0 -165
  239. package/test/icc-x-api/icc-patient-x-api-test.js.map +0 -1
  240. package/test/icc-x-api/icc-recovery-x-api.d.ts +0 -1
  241. package/test/icc-x-api/icc-recovery-x-api.js +0 -175
  242. package/test/icc-x-api/icc-recovery-x-api.js.map +0 -1
  243. package/test/icc-x-api/icc-topic-x-api.d.ts +0 -1
  244. package/test/icc-x-api/icc-topic-x-api.js +0 -269
  245. package/test/icc-x-api/icc-topic-x-api.js.map +0 -1
  246. package/test/icc-x-api/icc-user-x-api-test.d.ts +0 -1
  247. package/test/icc-x-api/icc-user-x-api-test.js +0 -99
  248. package/test/icc-x-api/icc-user-x-api-test.js.map +0 -1
  249. package/test/icc-x-api/keyless-api.d.ts +0 -1
  250. package/test/icc-x-api/keyless-api.js +0 -125
  251. package/test/icc-x-api/keyless-api.js.map +0 -1
  252. package/test/icc-x-api/patient-user.d.ts +0 -2
  253. package/test/icc-x-api/patient-user.js +0 -103
  254. package/test/icc-x-api/patient-user.js.map +0 -1
  255. package/test/icc-x-api/storage/storage.d.ts +0 -1
  256. package/test/icc-x-api/storage/storage.js +0 -48
  257. package/test/icc-x-api/storage/storage.js.map +0 -1
  258. package/test/icc-x-api/test-api-no-parent.d.ts +0 -1
  259. package/test/icc-x-api/test-api-no-parent.js +0 -79
  260. package/test/icc-x-api/test-api-no-parent.js.map +0 -1
  261. package/test/icc-x-api/test-legacy-data-support.d.ts +0 -1
  262. package/test/icc-x-api/test-legacy-data-support.js +0 -375
  263. package/test/icc-x-api/test-legacy-data-support.js.map +0 -1
  264. package/test/icc-x-api/utils/graph-test.d.ts +0 -1
  265. package/test/icc-x-api/utils/graph-test.js +0 -54
  266. package/test/icc-x-api/utils/graph-test.js.map +0 -1
  267. package/test/icc-x-api/utils/lru-temporised-async-cache-test.d.ts +0 -1
  268. package/test/icc-x-api/utils/lru-temporised-async-cache-test.js +0 -364
  269. package/test/icc-x-api/utils/lru-temporised-async-cache-test.js.map +0 -1
  270. package/test/support/CSM-185.d.ts +0 -1
  271. package/test/support/CSM-185.js +0 -124
  272. package/test/support/CSM-185.js.map +0 -1
  273. package/test/support/CSM-243.d.ts +0 -1
  274. package/test/support/CSM-243.js +0 -120
  275. package/test/support/CSM-243.js.map +0 -1
  276. package/test/support/CSM-543.d.ts +0 -1
  277. package/test/support/CSM-543.js +0 -164
  278. package/test/support/CSM-543.js.map +0 -1
  279. package/test/support/CSM-729.d.ts +0 -1
  280. package/test/support/CSM-729.js +0 -225
  281. package/test/support/CSM-729.js.map +0 -1
  282. package/test/support/CSM-87.d.ts +0 -0
  283. package/test/support/CSM-87.js +0 -21
  284. package/test/support/CSM-87.js.map +0 -1
  285. package/test/support/CSM-93.d.ts +0 -1
  286. package/test/support/CSM-93.js +0 -112
  287. package/test/support/CSM-93.js.map +0 -1
  288. package/test/utils/FakeDataOwnerApi.d.ts +0 -32
  289. package/test/utils/FakeDataOwnerApi.js +0 -136
  290. package/test/utils/FakeDataOwnerApi.js.map +0 -1
  291. package/test/utils/FakeEncryptionKeysManager.d.ts +0 -36
  292. package/test/utils/FakeEncryptionKeysManager.js +0 -98
  293. package/test/utils/FakeEncryptionKeysManager.js.map +0 -1
  294. package/test/utils/FakeExchangeDataApi.d.ts +0 -32
  295. package/test/utils/FakeExchangeDataApi.js +0 -92
  296. package/test/utils/FakeExchangeDataApi.js.map +0 -1
  297. package/test/utils/FakeExchangeDataManager.d.ts +0 -48
  298. package/test/utils/FakeExchangeDataManager.js +0 -82
  299. package/test/utils/FakeExchangeDataManager.js.map +0 -1
  300. package/test/utils/FakeExchangeDataMapManager.d.ts +0 -12
  301. package/test/utils/FakeExchangeDataMapManager.js +0 -38
  302. package/test/utils/FakeExchangeDataMapManager.js.map +0 -1
  303. package/test/utils/FakeGenericApi.d.ts +0 -16
  304. package/test/utils/FakeGenericApi.js +0 -65
  305. package/test/utils/FakeGenericApi.js.map +0 -1
  306. package/test/utils/KeylessCryptoStrategies.d.ts +0 -23
  307. package/test/utils/KeylessCryptoStrategies.js +0 -26
  308. package/test/utils/KeylessCryptoStrategies.js.map +0 -1
  309. package/test/utils/TestApi.d.ts +0 -3
  310. package/test/utils/TestApi.js +0 -30
  311. package/test/utils/TestApi.js.map +0 -1
  312. package/test/utils/TestCollectionUtils.d.ts +0 -1
  313. package/test/utils/TestCollectionUtils.js +0 -109
  314. package/test/utils/TestCollectionUtils.js.map +0 -1
  315. package/test/utils/TestCryptoStrategies.d.ts +0 -42
  316. package/test/utils/TestCryptoStrategies.js +0 -80
  317. package/test/utils/TestCryptoStrategies.js.map +0 -1
  318. package/test/utils/TestStorage.d.ts +0 -23
  319. package/test/utils/TestStorage.js +0 -61
  320. package/test/utils/TestStorage.js.map +0 -1
  321. package/test/utils/roles.d.ts +0 -14
  322. package/test/utils/roles.js +0 -345
  323. package/test/utils/roles.js.map +0 -1
  324. package/test/utils/test_utils.d.ts +0 -87
  325. package/test/utils/test_utils.js +0 -452
  326. package/test/utils/test_utils.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"anonymous-delegations-test.js","sourceRoot":"","sources":["../../../../test/icc-x-api/crypto/anonymous-delegations-test.ts"],"names":[],"mappings":"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","sourcesContent":["import { expect } from 'chai'\nimport { before } from 'mocha'\nimport { createHcpHierarchyApis, getEnvironmentInitializer, getTempEmail, setLocalStorage, TestUtils } from '../../utils/test_utils'\nimport { webcrypto } from 'crypto'\nimport 'isomorphic-fetch'\nimport { Apis, WebCryptoPrimitives, EntityWithDelegationTypeName, ShaVersion } from '../../../icc-x-api'\nimport { User } from '../../../icc-api/model/User'\nimport { Patient } from '../../../icc-api/model/Patient'\nimport { HealthElement } from '../../../icc-api/model/HealthElement'\nimport { HealthcareParty } from '../../../icc-api/model/HealthcareParty'\nimport { v4 as uuid } from 'uuid'\nimport { TestApi } from '../../utils/TestApi'\nimport { CryptoPrimitives } from '../../../icc-x-api/crypto/CryptoPrimitives'\nimport { FilterChainMaintenanceTask } from '../../../icc-api/model/FilterChainMaintenanceTask'\nimport { MaintenanceTaskAfterDateFilter } from '../../../icc-x-api/filters/MaintenanceTaskAfterDateFilter'\nimport { KeyPairUpdateRequest } from '../../../icc-x-api/maintenance/KeyPairUpdateRequest'\nimport { EntityShareRequest } from '../../../icc-api/model/requests/EntityShareRequest'\nimport { MaintenanceTask } from '../../../icc-api/model/MaintenanceTask'\nimport * as _ from 'lodash'\nimport { getEnvVariables, TestVars } from '@icure/test-setup/types'\nimport { SecureDelegation } from '../../../icc-api/model/SecureDelegation'\nimport { CalendarItem } from '../../../icc-api/model/CalendarItem'\nimport { DataOwnerTypeEnum } from '../../../icc-api/model/DataOwnerTypeEnum'\nimport { Message } from '../../../icc-api/model/Message'\nimport { IccSecureDelegationKeyMapApi } from '../../../icc-api/api/internal/IccSecureDelegationKeyMapApi'\nimport initMasterApi = TestUtils.initMasterApi\nimport RequestedPermissionEnum = EntityShareRequest.RequestedPermissionEnum\nimport AccessLevelEnum = SecureDelegation.AccessLevelEnum\n\nconst FULL_WRITE = RequestedPermissionEnum.FULL_WRITE\nconst FULL_READ = RequestedPermissionEnum.FULL_READ\n\nsetLocalStorage(fetch)\n\ntype DataOwnerType = 'explicit' | 'anonymous'\ntype UserInfo = { user: User; pw: string; dataOwnerId: string }\n\nconst typeCombinations: [DataOwnerType, DataOwnerType][] = [\n ['explicit', 'explicit'],\n ['anonymous', 'explicit'],\n ['explicit', 'anonymous'],\n ['anonymous', 'anonymous'],\n]\nlet env: TestVars\nlet masterApi: Apis\nlet masterUser: User\nconst primitives = new WebCryptoPrimitives(webcrypto as any)\n\ndescribe('Anonymous delegations', () => {\n before(async function () {\n this.timeout(6000000)\n const initializer = await getEnvironmentInitializer()\n env = await initializer.execute(getEnvVariables())\n masterApi = await initMasterApi(env)\n masterUser = await masterApi.userApi.getCurrentUser()\n })\n\n async function createUserAndApi(userType: DataOwnerType): Promise<{ api: Apis; userInfo: UserInfo }> {\n const dataOwner =\n userType === 'explicit'\n ? await masterApi.healthcarePartyApi.createHealthcareParty(new HealthcareParty({ id: uuid(), firstName: 'test', lastName: 'test' }))\n : await masterApi.patientApi.createPatientWithUser(\n masterUser,\n await masterApi.patientApi.newInstance(masterUser, new Patient({ id: uuid(), firstName: 'test', lastName: 'test' }))\n )\n const login = uuid()\n const user = await masterApi.userApi.createUser(\n new User({\n id: login,\n name: login,\n login: login,\n email: getTempEmail(),\n status: 'ACTIVE',\n healthcarePartyId: userType === 'explicit' ? dataOwner.id : undefined,\n patientId: userType === 'anonymous' ? dataOwner.id : undefined,\n })\n )\n const pw = await masterApi.userApi.getToken(user.id!, uuid())\n return {\n api: await TestApi(env.iCureUrl, login, pw, webcrypto as any),\n userInfo: { user, pw, dataOwnerId: dataOwner.id! },\n }\n }\n\n async function dataOwnerIdsForSearch(apis: Apis, dataOwnerId: string, entityType: EntityWithDelegationTypeName): Promise<string[]> {\n const delegationKeys = await apis.cryptoApi.exchangeData.getAllDelegationKeys(entityType)\n if (delegationKeys) {\n return delegationKeys\n } else {\n return [dataOwnerId]\n }\n }\n\n async function loseKeyAndGiveAccessBack(userThatLosesKey: UserInfo, apiToGiveAccessBack: Apis, userGivingAccessBack: UserInfo): Promise<Apis> {\n const timeBeforeNewKey = new Date().getTime()\n const newKeyPair = await primitives.RSA.generateKeyPair(ShaVersion.Sha256)\n const newApi = await TestApi(env.iCureUrl, userThatLosesKey.user.login!, userThatLosesKey.pw, webcrypto as any, newKeyPair, {\n createMaintenanceTasksOnNewKey: false,\n })\n await newApi.icureMaintenanceTaskApi.createMaintenanceTasksForNewKeypair(userThatLosesKey.user, newKeyPair, [\n DataOwnerTypeEnum.Patient,\n DataOwnerTypeEnum.Hcp,\n ])\n await apiToGiveAccessBack.cryptoApi.forceReload()\n const searchIds = await dataOwnerIdsForSearch(apiToGiveAccessBack, userGivingAccessBack.dataOwnerId, EntityWithDelegationTypeName.MaintenanceTask)\n const keyPairUpdateRequests = await searchIds\n .reduce(async (acc, searchId) => {\n const awaitedAcc = await acc\n const currResult = await apiToGiveAccessBack.maintenanceTaskApi.filterMaintenanceTasksByWithUser(\n userGivingAccessBack.user,\n undefined,\n undefined,\n new FilterChainMaintenanceTask({\n filter: new MaintenanceTaskAfterDateFilter({\n date: timeBeforeNewKey,\n healthcarePartyId: searchId,\n }),\n })\n )\n return [...awaitedAcc, ...currResult.rows!]\n }, Promise.resolve([] as MaintenanceTask[]))\n .then((tasks) => tasks.map((task) => KeyPairUpdateRequest.fromMaintenanceTask(task)))\n const concernedRequest = keyPairUpdateRequests.filter((x) => x.concernedDataOwnerId === userThatLosesKey.dataOwnerId)\n expect(concernedRequest).to.have.length(1)\n await apiToGiveAccessBack.icureMaintenanceTaskApi.applyKeyPairUpdate(concernedRequest[0])\n await newApi.cryptoApi.forceReload()\n return newApi\n }\n\n async function createAndShareData(\n creatorApis: Apis,\n creatorInfo: UserInfo,\n delegateInfo: UserInfo\n ): Promise<{ patient: Patient; healthElements: HealthElement[] }> {\n const patient = await masterApi.patientApi.createPatientWithUser(\n masterUser,\n await masterApi.patientApi.newInstance(masterUser, new Patient({ id: uuid(), firstName: 'test', lastName: 'test', note: 'Patient note' }))\n )\n const secretIds = await masterApi.patientApi.decryptSecretIdsOf(patient)\n const updatedPatient1 = await masterApi.patientApi.shareWith(creatorInfo.dataOwnerId, patient, secretIds, { requestedPermissions: FULL_WRITE })\n await creatorApis.cryptoApi.forceReload()\n const updatedPatient2 = await creatorApis.patientApi.shareWith(delegateInfo.dataOwnerId, updatedPatient1, secretIds, {\n requestedPermissions: FULL_WRITE,\n })\n const healthElements: HealthElement[] = []\n for (let i = 0; i < 5; i++) {\n const he = await creatorApis.healthcareElementApi.createHealthElementWithUser(\n creatorInfo.user,\n await creatorApis.healthcareElementApi.newInstance(creatorInfo.user, updatedPatient2, { note: `Health element note - ${i}` })\n )\n const sharedHe = await creatorApis.healthcareElementApi.shareWith(delegateInfo.dataOwnerId, he, { requestedPermissions: FULL_WRITE })\n healthElements.push(sharedHe)\n }\n expect(updatedPatient2.note).to.not.be.undefined\n for (const he of healthElements) {\n expect(he.note).to.not.be.undefined\n }\n return { patient: updatedPatient2, healthElements }\n }\n\n async function checkCanFindAndDecrypt(apis: Apis, expected: { patient: Patient; healthElements: HealthElement[] }) {\n const user = await apis.userApi.getCurrentUser()\n const patient = await apis.patientApi.getPatientWithUser(user, expected.patient.id!)\n expect(patient.note).to.equal(expected.patient.note)\n const searchIds = await dataOwnerIdsForSearch(apis, apis.dataOwnerApi.getDataOwnerIdOf(user), EntityWithDelegationTypeName.HealthElement)\n const patientKeys = await apis.patientApi.decryptSecretIdsOf(patient)\n expect(patientKeys).to.not.be.empty\n const sfks = _.uniq(patientKeys).join(',')\n const retrievedHealthElements = _.uniqBy(\n await searchIds.reduce(async (acc, searchId) => {\n const awaitedAcc = await acc\n const currResult = await apis.healthcareElementApi.findByHCPartyPatientSecretFKeys(searchId, sfks)\n return [...awaitedAcc, ...currResult]\n }, Promise.resolve([] as HealthElement[])),\n (x) => x.id\n )\n expect(retrievedHealthElements.length).to.equal(expected.healthElements.length)\n for (const expectedHe of expected.healthElements) {\n const retrievedHe = retrievedHealthElements.find((x) => x.id === expectedHe.id)\n expect(retrievedHe).to.not.be.undefined\n expect(retrievedHe!.note).to.equal(expectedHe.note)\n }\n }\n\n async function checkAccessInfo(\n actualAccessInfo: { permissionsByDataOwnerId: { [p: string]: AccessLevelEnum }; hasUnknownAnonymousDataOwners: boolean },\n expectedDataOwnersWithAccess: { [dataOwnerId: string]: AccessLevelEnum },\n expectedHasUnknownAnonymousDataOwners: boolean\n ) {\n expect(Object.keys(actualAccessInfo.permissionsByDataOwnerId)).to.have.members(Object.keys(expectedDataOwnersWithAccess))\n expect(actualAccessInfo.hasUnknownAnonymousDataOwners).to.equal(expectedHasUnknownAnonymousDataOwners)\n for (const [dataOwnerId, expectedLevel] of Object.entries(expectedDataOwnersWithAccess)) {\n expect(actualAccessInfo.permissionsByDataOwnerId[dataOwnerId]).to.equal(expectedLevel)\n }\n }\n\n it('without de-anonymisation metadata the data owners should be able to identify anonymous delegates only if they are part of the delegation with that delegate.', async () => {\n const apiA = await createUserAndApi('explicit')\n const apiB = await createUserAndApi('explicit')\n const apiP1 = await createUserAndApi('anonymous')\n const apiP2 = await createUserAndApi('anonymous')\n let entity: CalendarItem = await apiA.api.calendarItemApi.createCalendarItemWithHcParty(\n apiA.userInfo.user,\n await apiA.api.calendarItemApi.newInstance(apiA.userInfo.user, { note: 'Calendar item note' })\n )\n /*\n * A->A\n */\n await checkAccessInfo(\n await apiA.api.calendarItemApi.getDataOwnersWithAccessTo(entity),\n { [apiA.userInfo.dataOwnerId]: AccessLevelEnum.WRITE },\n false\n )\n entity = await apiA.api.calendarItemApi.shareWith(apiB.userInfo.dataOwnerId, entity, { requestedPermissions: FULL_WRITE })\n /*\n * A->A A->B\n */\n await checkAccessInfo(\n await apiA.api.calendarItemApi.getDataOwnersWithAccessTo(entity),\n {\n [apiA.userInfo.dataOwnerId]: AccessLevelEnum.WRITE,\n [apiB.userInfo.dataOwnerId]: AccessLevelEnum.WRITE,\n },\n false\n )\n await checkAccessInfo(\n await apiB.api.calendarItemApi.getDataOwnersWithAccessTo(entity),\n {\n [apiA.userInfo.dataOwnerId]: AccessLevelEnum.WRITE,\n [apiB.userInfo.dataOwnerId]: AccessLevelEnum.WRITE,\n },\n false\n )\n /*\n * A->A A->B\n * A->P1\n */\n entity = await apiA.api.calendarItemApi.shareWith(apiP1.userInfo.dataOwnerId, entity, { requestedPermissions: FULL_WRITE })\n await apiP1.api.cryptoApi.forceReload()\n await checkAccessInfo(\n await apiA.api.calendarItemApi.getDataOwnersWithAccessTo(entity),\n {\n [apiA.userInfo.dataOwnerId]: AccessLevelEnum.WRITE,\n [apiB.userInfo.dataOwnerId]: AccessLevelEnum.WRITE,\n [apiP1.userInfo.dataOwnerId]: AccessLevelEnum.WRITE,\n },\n false\n )\n await checkAccessInfo(\n await apiB.api.calendarItemApi.getDataOwnersWithAccessTo(entity),\n {\n [apiA.userInfo.dataOwnerId]: AccessLevelEnum.WRITE,\n [apiB.userInfo.dataOwnerId]: AccessLevelEnum.WRITE,\n },\n true\n )\n await checkAccessInfo(\n await apiP1.api.calendarItemApi.getDataOwnersWithAccessTo(entity),\n {\n [apiA.userInfo.dataOwnerId]: AccessLevelEnum.WRITE,\n [apiB.userInfo.dataOwnerId]: AccessLevelEnum.WRITE,\n [apiP1.userInfo.dataOwnerId]: AccessLevelEnum.WRITE,\n },\n false\n )\n /*\n * A->A A->B B->P1\n * A->P1\n */\n entity = await apiB.api.calendarItemApi.shareWith(apiP1.userInfo.dataOwnerId, entity, { requestedPermissions: FULL_READ })\n await apiP1.api.cryptoApi.forceReload()\n await checkAccessInfo(\n await apiA.api.calendarItemApi.getDataOwnersWithAccessTo(entity),\n {\n [apiA.userInfo.dataOwnerId]: AccessLevelEnum.WRITE,\n [apiB.userInfo.dataOwnerId]: AccessLevelEnum.WRITE,\n [apiP1.userInfo.dataOwnerId]: AccessLevelEnum.WRITE,\n },\n true\n )\n await checkAccessInfo(\n await apiB.api.calendarItemApi.getDataOwnersWithAccessTo(entity),\n {\n [apiA.userInfo.dataOwnerId]: AccessLevelEnum.WRITE,\n [apiB.userInfo.dataOwnerId]: AccessLevelEnum.WRITE,\n [apiP1.userInfo.dataOwnerId]: AccessLevelEnum.READ,\n },\n true\n )\n await checkAccessInfo(\n await apiP1.api.calendarItemApi.getDataOwnersWithAccessTo(entity),\n {\n [apiA.userInfo.dataOwnerId]: AccessLevelEnum.WRITE,\n [apiB.userInfo.dataOwnerId]: AccessLevelEnum.WRITE,\n [apiP1.userInfo.dataOwnerId]: AccessLevelEnum.WRITE,\n },\n false\n )\n /*\n * A->A A->B B->P1\n * A->P1 P1->P2\n */\n entity = await apiP1.api.calendarItemApi.shareWith(apiP2.userInfo.dataOwnerId, entity, { requestedPermissions: FULL_READ })\n await apiP2.api.cryptoApi.forceReload()\n await checkAccessInfo(\n await apiA.api.calendarItemApi.getDataOwnersWithAccessTo(entity),\n {\n [apiA.userInfo.dataOwnerId]: AccessLevelEnum.WRITE,\n [apiB.userInfo.dataOwnerId]: AccessLevelEnum.WRITE,\n [apiP1.userInfo.dataOwnerId]: AccessLevelEnum.WRITE,\n },\n true\n )\n await checkAccessInfo(\n await apiB.api.calendarItemApi.getDataOwnersWithAccessTo(entity),\n {\n [apiA.userInfo.dataOwnerId]: AccessLevelEnum.WRITE,\n [apiB.userInfo.dataOwnerId]: AccessLevelEnum.WRITE,\n [apiP1.userInfo.dataOwnerId]: AccessLevelEnum.READ,\n },\n true\n )\n await checkAccessInfo(\n await apiP1.api.calendarItemApi.getDataOwnersWithAccessTo(entity),\n {\n [apiA.userInfo.dataOwnerId]: AccessLevelEnum.WRITE,\n [apiB.userInfo.dataOwnerId]: AccessLevelEnum.WRITE,\n [apiP1.userInfo.dataOwnerId]: AccessLevelEnum.WRITE,\n [apiP2.userInfo.dataOwnerId]: AccessLevelEnum.READ,\n },\n false\n )\n await checkAccessInfo(\n await apiP2.api.calendarItemApi.getDataOwnersWithAccessTo(entity),\n {\n [apiA.userInfo.dataOwnerId]: AccessLevelEnum.WRITE,\n [apiB.userInfo.dataOwnerId]: AccessLevelEnum.WRITE,\n [apiP1.userInfo.dataOwnerId]: AccessLevelEnum.READ, // P2 is only aware of the P1->P2 delegation\n [apiP2.userInfo.dataOwnerId]: AccessLevelEnum.READ,\n },\n true\n )\n /*\n * A->A A->B B->P1\n * A->P1 P1->P2\n * A->P2\n */\n entity = await apiA.api.calendarItemApi.shareWith(apiP2.userInfo.dataOwnerId, entity, { requestedPermissions: FULL_WRITE })\n await apiP2.api.cryptoApi.forceReload()\n await checkAccessInfo(\n await apiA.api.calendarItemApi.getDataOwnersWithAccessTo(entity),\n {\n [apiA.userInfo.dataOwnerId]: AccessLevelEnum.WRITE,\n [apiB.userInfo.dataOwnerId]: AccessLevelEnum.WRITE,\n [apiP1.userInfo.dataOwnerId]: AccessLevelEnum.WRITE,\n [apiP2.userInfo.dataOwnerId]: AccessLevelEnum.WRITE,\n },\n true\n )\n await checkAccessInfo(\n await apiB.api.calendarItemApi.getDataOwnersWithAccessTo(entity),\n {\n [apiA.userInfo.dataOwnerId]: AccessLevelEnum.WRITE,\n [apiB.userInfo.dataOwnerId]: AccessLevelEnum.WRITE,\n [apiP1.userInfo.dataOwnerId]: AccessLevelEnum.READ,\n },\n true\n )\n await checkAccessInfo(\n await apiP1.api.calendarItemApi.getDataOwnersWithAccessTo(entity),\n {\n [apiA.userInfo.dataOwnerId]: AccessLevelEnum.WRITE,\n [apiB.userInfo.dataOwnerId]: AccessLevelEnum.WRITE,\n [apiP1.userInfo.dataOwnerId]: AccessLevelEnum.WRITE,\n [apiP2.userInfo.dataOwnerId]: AccessLevelEnum.READ,\n },\n true\n )\n await checkAccessInfo(\n await apiP2.api.calendarItemApi.getDataOwnersWithAccessTo(entity),\n {\n [apiA.userInfo.dataOwnerId]: AccessLevelEnum.WRITE,\n [apiB.userInfo.dataOwnerId]: AccessLevelEnum.WRITE,\n [apiP1.userInfo.dataOwnerId]: AccessLevelEnum.READ, // P2 is only aware of the P1->P2 delegation\n [apiP2.userInfo.dataOwnerId]: AccessLevelEnum.WRITE,\n },\n true\n )\n })\n\n it('without de-anonymisation metadata the data owners should be able to identify anonymous delegates only if their parent is part of the delegation with that delegate.', async () => {\n const { parentApi: childApi, parentUser: childUser, grandApi: parentApi, grandUser: parentUser } = await createHcpHierarchyApis(env) // Want to use only hcp with one parent\n const patientInfo = await createUserAndApi('anonymous')\n let entity: Message = await parentApi.messageApi.createMessageWithUser(\n parentUser,\n await parentApi.messageApi.newInstanceWithPatient(parentUser, null, { subject: 'A simple subject' })\n )\n entity = await parentApi.messageApi.shareWith(patientInfo.userInfo.dataOwnerId, entity, [], { requestedPermissions: FULL_WRITE })\n await patientInfo.api.cryptoApi.forceReload()\n const expectedAccess = {\n // No child user: has no direct access, only access through parent delegation\n [parentUser.healthcarePartyId!]: AccessLevelEnum.WRITE,\n [patientInfo.userInfo.dataOwnerId]: AccessLevelEnum.WRITE,\n }\n await checkAccessInfo(await childApi.messageApi.getDataOwnersWithAccessTo(entity), expectedAccess, false)\n await checkAccessInfo(await parentApi.messageApi.getDataOwnersWithAccessTo(entity), expectedAccess, false)\n await checkAccessInfo(await patientInfo.api.messageApi.getDataOwnersWithAccessTo(entity), expectedAccess, false)\n })\n\n it('de-anonymisation metadata should allow data owners that are not part of a delegation to figure out the members of that delegation.', async () => {\n const apiA = await createUserAndApi('explicit')\n const apiB = await createUserAndApi('explicit')\n const apiP1 = await createUserAndApi('anonymous')\n const apiP2 = await createUserAndApi('anonymous')\n let entity: CalendarItem = await apiA.api.calendarItemApi.createCalendarItemWithHcParty(\n apiA.userInfo.user,\n await apiA.api.calendarItemApi.newInstance(apiA.userInfo.user, { note: 'Calendar item note' })\n )\n entity = await apiA.api.calendarItemApi.shareWith(apiB.userInfo.dataOwnerId, entity, { requestedPermissions: FULL_WRITE })\n entity = await apiA.api.calendarItemApi.shareWith(apiP1.userInfo.dataOwnerId, entity, { requestedPermissions: FULL_WRITE })\n entity = await apiB.api.calendarItemApi.shareWith(apiP1.userInfo.dataOwnerId, entity, { requestedPermissions: FULL_READ })\n await apiP1.api.cryptoApi.forceReload()\n entity = await apiP1.api.calendarItemApi.shareWith(apiP2.userInfo.dataOwnerId, entity, { requestedPermissions: FULL_READ })\n entity = await apiA.api.calendarItemApi.shareWith(apiP2.userInfo.dataOwnerId, entity, { requestedPermissions: FULL_WRITE })\n /*\n * A->A A->B B->?P1\n * A->?P1 P1->?P2\n * A->?P2\n */\n await apiA.api.cryptoApi.delegationsDeAnonymization.createOrUpdateDeAnonymizationInfo(\n { entity, type: EntityWithDelegationTypeName.CalendarItem },\n [apiB.userInfo.dataOwnerId, apiP1.userInfo.dataOwnerId, apiP2.userInfo.dataOwnerId]\n )\n /*\n * A can create de-anonymization metadata for his delegations.\n * A->A A->B B->?P1\n * A->P1 P1->?P2\n * A->P2\n */\n await apiP1.api.cryptoApi.forceReload()\n await apiP2.api.cryptoApi.forceReload()\n await checkAccessInfo(\n await apiA.api.calendarItemApi.getDataOwnersWithAccessTo(entity),\n {\n [apiA.userInfo.dataOwnerId]: AccessLevelEnum.WRITE,\n [apiB.userInfo.dataOwnerId]: AccessLevelEnum.WRITE,\n [apiP1.userInfo.dataOwnerId]: AccessLevelEnum.WRITE,\n [apiP2.userInfo.dataOwnerId]: AccessLevelEnum.WRITE,\n },\n true\n )\n await checkAccessInfo(\n await apiB.api.calendarItemApi.getDataOwnersWithAccessTo(entity),\n {\n [apiA.userInfo.dataOwnerId]: AccessLevelEnum.WRITE,\n [apiB.userInfo.dataOwnerId]: AccessLevelEnum.WRITE,\n [apiP1.userInfo.dataOwnerId]: AccessLevelEnum.WRITE,\n [apiP2.userInfo.dataOwnerId]: AccessLevelEnum.WRITE,\n },\n true\n )\n await checkAccessInfo(\n await apiP1.api.calendarItemApi.getDataOwnersWithAccessTo(entity),\n {\n [apiA.userInfo.dataOwnerId]: AccessLevelEnum.WRITE,\n [apiB.userInfo.dataOwnerId]: AccessLevelEnum.WRITE,\n [apiP1.userInfo.dataOwnerId]: AccessLevelEnum.WRITE,\n [apiP2.userInfo.dataOwnerId]: AccessLevelEnum.WRITE,\n },\n false\n )\n await checkAccessInfo(\n await apiP2.api.calendarItemApi.getDataOwnersWithAccessTo(entity),\n {\n [apiA.userInfo.dataOwnerId]: AccessLevelEnum.WRITE,\n [apiB.userInfo.dataOwnerId]: AccessLevelEnum.WRITE,\n [apiP1.userInfo.dataOwnerId]: AccessLevelEnum.WRITE,\n [apiP2.userInfo.dataOwnerId]: AccessLevelEnum.WRITE,\n },\n true\n )\n await apiP1.api.cryptoApi.delegationsDeAnonymization.createOrUpdateDeAnonymizationInfo(\n { entity, type: EntityWithDelegationTypeName.CalendarItem },\n [apiB.userInfo.dataOwnerId, apiA.userInfo.dataOwnerId, apiP2.userInfo.dataOwnerId]\n )\n /* Both delegator and delegate can create de-anonymization metadata for a delegation.\n * A->A A->B B->P1\n * A->P1 P1->P2\n * A->P2\n */\n await apiP1.api.cryptoApi.forceReload()\n await apiP2.api.cryptoApi.forceReload()\n await checkAccessInfo(\n await apiA.api.calendarItemApi.getDataOwnersWithAccessTo(entity),\n {\n [apiA.userInfo.dataOwnerId]: AccessLevelEnum.WRITE,\n [apiB.userInfo.dataOwnerId]: AccessLevelEnum.WRITE,\n [apiP1.userInfo.dataOwnerId]: AccessLevelEnum.WRITE,\n [apiP2.userInfo.dataOwnerId]: AccessLevelEnum.WRITE,\n },\n false\n )\n await checkAccessInfo(\n await apiB.api.calendarItemApi.getDataOwnersWithAccessTo(entity),\n {\n [apiA.userInfo.dataOwnerId]: AccessLevelEnum.WRITE,\n [apiB.userInfo.dataOwnerId]: AccessLevelEnum.WRITE,\n [apiP1.userInfo.dataOwnerId]: AccessLevelEnum.WRITE,\n [apiP2.userInfo.dataOwnerId]: AccessLevelEnum.WRITE,\n },\n false\n )\n await checkAccessInfo(\n await apiP1.api.calendarItemApi.getDataOwnersWithAccessTo(entity),\n {\n [apiA.userInfo.dataOwnerId]: AccessLevelEnum.WRITE,\n [apiB.userInfo.dataOwnerId]: AccessLevelEnum.WRITE,\n [apiP1.userInfo.dataOwnerId]: AccessLevelEnum.WRITE,\n [apiP2.userInfo.dataOwnerId]: AccessLevelEnum.WRITE,\n },\n false\n )\n await checkAccessInfo(\n await apiP2.api.calendarItemApi.getDataOwnersWithAccessTo(entity),\n {\n [apiA.userInfo.dataOwnerId]: AccessLevelEnum.WRITE,\n [apiB.userInfo.dataOwnerId]: AccessLevelEnum.WRITE,\n [apiP1.userInfo.dataOwnerId]: AccessLevelEnum.WRITE,\n [apiP2.userInfo.dataOwnerId]: AccessLevelEnum.WRITE,\n },\n false\n )\n })\n\n it('Hcp should be able to use de-anonymization metadata for parent', async () => {\n const hierarchy = await createHcpHierarchyApis(env)\n const patientInfo = await createUserAndApi('anonymous')\n let entity: CalendarItem = await hierarchy.parentApi.calendarItemApi.createCalendarItemWithHcParty(\n hierarchy.parentUser,\n await hierarchy.parentApi.calendarItemApi.newInstance(hierarchy.parentUser, { note: 'Calendar item note' })\n ) // Auto-shared with grandApi, but no de-anonymization metadata\n entity = await hierarchy.parentApi.calendarItemApi.shareWith(patientInfo.userInfo.dataOwnerId, entity, { requestedPermissions: FULL_WRITE })\n await hierarchy.parentApi.cryptoApi.delegationsDeAnonymization.createOrUpdateDeAnonymizationInfo(\n { entity, type: EntityWithDelegationTypeName.CalendarItem },\n [hierarchy.grandUser.healthcarePartyId!]\n )\n await patientInfo.api.cryptoApi.forceReload()\n const expectedAccess = {\n [hierarchy.parentUser.healthcarePartyId!]: AccessLevelEnum.WRITE,\n [hierarchy.grandUser.healthcarePartyId!]: AccessLevelEnum.WRITE,\n [patientInfo.userInfo.dataOwnerId]: AccessLevelEnum.WRITE,\n }\n await checkAccessInfo(await hierarchy.parentApi.calendarItemApi.getDataOwnersWithAccessTo(entity), expectedAccess, false)\n await checkAccessInfo(await hierarchy.grandApi.calendarItemApi.getDataOwnersWithAccessTo(entity), expectedAccess, false)\n await checkAccessInfo(await hierarchy.child2Api.calendarItemApi.getDataOwnersWithAccessTo(entity), expectedAccess, false)\n await checkAccessInfo(await patientInfo.api.calendarItemApi.getDataOwnersWithAccessTo(entity), expectedAccess, false)\n })\n\n it('De-anonymization metadata should encrypt delegator and delegate, and its creation should be optimised', async () => {\n const apiA = await createUserAndApi('explicit')\n const apiB = await createUserAndApi('explicit')\n const apiP = await createUserAndApi('anonymous')\n let entity: CalendarItem = await apiA.api.calendarItemApi.createCalendarItemWithHcParty(\n apiA.userInfo.user,\n await apiA.api.calendarItemApi.newInstance(apiA.userInfo.user, { note: 'Calendar item note' })\n )\n entity = await apiA.api.calendarItemApi.shareWith(apiB.userInfo.dataOwnerId, entity, { requestedPermissions: FULL_WRITE })\n entity = await apiA.api.calendarItemApi.shareWith(apiP.userInfo.dataOwnerId, entity, { requestedPermissions: FULL_WRITE })\n await apiA.api.cryptoApi.delegationsDeAnonymization.createOrUpdateDeAnonymizationInfo(\n { entity, type: EntityWithDelegationTypeName.CalendarItem },\n [apiB.userInfo.dataOwnerId, apiP.userInfo.dataOwnerId]\n )\n const secureDelegationKeyMapApi = new IccSecureDelegationKeyMapApi(env.iCureUrl, {}, apiA.api.authApi.authenticationProvider, fetch)\n const secureDelegationKeyMaps = await secureDelegationKeyMapApi.getByDelegationKeys(\n { ids: Object.keys(entity.securityMetadata!.secureDelegations!) },\n []\n )\n expect(secureDelegationKeyMaps).to.have.length(1) // Only 1 is necessary -> only 1 is created\n expect(secureDelegationKeyMaps[0].delegator).to.be.undefined\n expect(secureDelegationKeyMaps[0].delegate).to.be.undefined\n const delegationKeyToPatient = Object.entries(entity.securityMetadata!.secureDelegations!).find(([_, v]) => v.delegate === undefined)![0]\n expect(delegationKeyToPatient).to.not.be.undefined\n expect(delegationKeyToPatient).to.not.be.empty\n expect(secureDelegationKeyMaps[0].delegationKey).to.equal(delegationKeyToPatient)\n })\n\n it('De-anonymization metadata should be usable for different entities of the same type', async () => {\n const apiA = await createUserAndApi('explicit')\n const apiB = await createUserAndApi('explicit')\n const apiP = await createUserAndApi('anonymous')\n let entity1: CalendarItem = await apiA.api.calendarItemApi.createCalendarItemWithHcParty(\n apiA.userInfo.user,\n await apiA.api.calendarItemApi.newInstance(apiA.userInfo.user, { note: 'Calendar item note' })\n )\n entity1 = await apiA.api.calendarItemApi.shareWith(apiB.userInfo.dataOwnerId, entity1, { requestedPermissions: FULL_WRITE })\n entity1 = await apiA.api.calendarItemApi.shareWith(apiP.userInfo.dataOwnerId, entity1, { requestedPermissions: FULL_WRITE })\n let entity2: CalendarItem = await apiA.api.calendarItemApi.createCalendarItemWithHcParty(\n apiA.userInfo.user,\n await apiA.api.calendarItemApi.newInstance(apiA.userInfo.user, { note: 'Calendar item note' })\n )\n entity2 = await apiA.api.calendarItemApi.shareWith(apiB.userInfo.dataOwnerId, entity2, { requestedPermissions: FULL_WRITE })\n entity2 = await apiA.api.calendarItemApi.shareWith(apiP.userInfo.dataOwnerId, entity2, { requestedPermissions: FULL_WRITE })\n await apiA.api.cryptoApi.delegationsDeAnonymization.createOrUpdateDeAnonymizationInfo(\n { entity: entity1, type: EntityWithDelegationTypeName.CalendarItem },\n [apiB.userInfo.dataOwnerId]\n )\n const expectedAccess = {\n [apiA.userInfo.dataOwnerId]: AccessLevelEnum.WRITE,\n [apiB.userInfo.dataOwnerId]: AccessLevelEnum.WRITE,\n [apiP.userInfo.dataOwnerId]: AccessLevelEnum.WRITE,\n }\n await apiP.api.cryptoApi.forceReload()\n await checkAccessInfo(await apiA.api.calendarItemApi.getDataOwnersWithAccessTo(entity1), expectedAccess, false)\n await checkAccessInfo(await apiB.api.calendarItemApi.getDataOwnersWithAccessTo(entity1), expectedAccess, false)\n await checkAccessInfo(await apiP.api.calendarItemApi.getDataOwnersWithAccessTo(entity1), expectedAccess, false)\n await checkAccessInfo(await apiA.api.calendarItemApi.getDataOwnersWithAccessTo(entity2), expectedAccess, false)\n await checkAccessInfo(await apiB.api.calendarItemApi.getDataOwnersWithAccessTo(entity2), expectedAccess, false)\n await checkAccessInfo(await apiP.api.calendarItemApi.getDataOwnersWithAccessTo(entity2), expectedAccess, false)\n })\n\n it('De-anonymization metadata optimization: the metadata should not be re-shared with the anonymous delegator/delegate by third parties', async () => {\n const apiP1 = await createUserAndApi('anonymous')\n const apiP2 = await createUserAndApi('anonymous')\n const apiA = await createUserAndApi('explicit')\n let entity: CalendarItem = await apiP1.api.calendarItemApi.createCalendarItemWithHcParty(\n apiP1.userInfo.user,\n await apiP1.api.calendarItemApi.newInstance(apiP1.userInfo.user, { note: 'Calendar item note' })\n )\n entity = await apiP1.api.calendarItemApi.shareWith(apiP2.userInfo.dataOwnerId, entity, { requestedPermissions: FULL_WRITE })\n entity = await apiP1.api.calendarItemApi.shareWith(apiA.userInfo.dataOwnerId, entity, { requestedPermissions: FULL_WRITE })\n await apiP1.api.cryptoApi.delegationsDeAnonymization.createOrUpdateDeAnonymizationInfo(\n { entity, type: EntityWithDelegationTypeName.CalendarItem },\n [apiP2.userInfo.dataOwnerId, apiA.userInfo.dataOwnerId]\n )\n const p1ToP2DelegationKey = Object.entries(entity.securityMetadata!.secureDelegations!).find(\n ([_, v]) => v.delegate === undefined && v.delegator === undefined && v.parentDelegations !== undefined\n )![0]\n expect(p1ToP2DelegationKey).to.not.be.undefined\n expect(p1ToP2DelegationKey).to.not.be.empty\n const delegationMapApi = new IccSecureDelegationKeyMapApi(env.iCureUrl, {}, apiA.api.authApi.authenticationProvider, fetch)\n const delegationMapBeforeAttemptedResharingByA = (await delegationMapApi.getByDelegationKeys({ ids: [p1ToP2DelegationKey] }, []))[0]\n expect(delegationMapBeforeAttemptedResharingByA).to.not.be.undefined\n expect(Object.keys(delegationMapBeforeAttemptedResharingByA.securityMetadata!.secureDelegations!)).to.have.length(3)\n await apiA.api.cryptoApi.delegationsDeAnonymization.createOrUpdateDeAnonymizationInfo(\n { entity, type: EntityWithDelegationTypeName.CalendarItem },\n [apiP2.userInfo.dataOwnerId, apiP1.userInfo.dataOwnerId]\n )\n const delegationMapAfterAttemptedResharingByA = (await delegationMapApi.getByDelegationKeys({ ids: [p1ToP2DelegationKey] }, []))[0]\n expect(delegationMapAfterAttemptedResharingByA).to.not.be.undefined\n expect(Object.keys(delegationMapAfterAttemptedResharingByA.securityMetadata!.secureDelegations!)).to.have.length(3)\n expect(delegationMapAfterAttemptedResharingByA.rev).to.equal(delegationMapBeforeAttemptedResharingByA.rev)\n })\n\n it('De-anonymization metadata should be shared only with selected data owners', async () => {\n const apiA = await createUserAndApi('explicit')\n const apiB = await createUserAndApi('explicit')\n const apiC = await createUserAndApi('explicit')\n const apiP = await createUserAndApi('anonymous')\n let entity: CalendarItem = await apiA.api.calendarItemApi.createCalendarItemWithHcParty(\n apiA.userInfo.user,\n await apiA.api.calendarItemApi.newInstance(apiA.userInfo.user, { note: 'Calendar item note' })\n )\n entity = await apiA.api.calendarItemApi.shareWith(apiB.userInfo.dataOwnerId, entity, { requestedPermissions: FULL_WRITE })\n entity = await apiA.api.calendarItemApi.shareWith(apiC.userInfo.dataOwnerId, entity, { requestedPermissions: FULL_WRITE })\n entity = await apiA.api.calendarItemApi.shareWith(apiP.userInfo.dataOwnerId, entity, { requestedPermissions: FULL_WRITE })\n await apiA.api.cryptoApi.delegationsDeAnonymization.createOrUpdateDeAnonymizationInfo(\n { entity, type: EntityWithDelegationTypeName.CalendarItem },\n [apiB.userInfo.dataOwnerId]\n )\n const expectedAccess = {\n [apiA.userInfo.dataOwnerId]: AccessLevelEnum.WRITE,\n [apiB.userInfo.dataOwnerId]: AccessLevelEnum.WRITE,\n [apiC.userInfo.dataOwnerId]: AccessLevelEnum.WRITE,\n [apiP.userInfo.dataOwnerId]: AccessLevelEnum.WRITE,\n }\n await apiP.api.cryptoApi.forceReload()\n await checkAccessInfo(await apiA.api.calendarItemApi.getDataOwnersWithAccessTo(entity), expectedAccess, false)\n await checkAccessInfo(await apiB.api.calendarItemApi.getDataOwnersWithAccessTo(entity), expectedAccess, false)\n await checkAccessInfo(await apiP.api.calendarItemApi.getDataOwnersWithAccessTo(entity), expectedAccess, false)\n // Except C does not know about P, because he was not given access to the relevant metadata.\n await checkAccessInfo(\n await apiC.api.calendarItemApi.getDataOwnersWithAccessTo(entity),\n {\n [apiA.userInfo.dataOwnerId]: AccessLevelEnum.WRITE,\n [apiB.userInfo.dataOwnerId]: AccessLevelEnum.WRITE,\n [apiC.userInfo.dataOwnerId]: AccessLevelEnum.WRITE,\n },\n true\n )\n })\n\n it('A member of a delegation should be able to update the corresponding de-anonymization metadata even if he was not the original creator', async () => {\n const hierarchy = await createHcpHierarchyApis(env)\n const apiA = await createUserAndApi('explicit')\n const apiB = await createUserAndApi('explicit')\n const apiC = await createUserAndApi('explicit')\n const apiP = await createUserAndApi('anonymous')\n // Parent -> A, B, C, P\n let entity: CalendarItem = await hierarchy.grandApi.calendarItemApi.createCalendarItemWithHcParty(\n hierarchy.grandUser,\n await hierarchy.grandApi.calendarItemApi.newInstance(hierarchy.grandUser, { note: 'Calendar item note' })\n )\n entity = await hierarchy.grandApi.calendarItemApi.shareWith(apiA.userInfo.dataOwnerId, entity, { requestedPermissions: FULL_WRITE })\n entity = await hierarchy.grandApi.calendarItemApi.shareWith(apiB.userInfo.dataOwnerId, entity, { requestedPermissions: FULL_WRITE })\n entity = await hierarchy.grandApi.calendarItemApi.shareWith(apiC.userInfo.dataOwnerId, entity, { requestedPermissions: FULL_WRITE })\n entity = await hierarchy.grandApi.calendarItemApi.shareWith(apiP.userInfo.dataOwnerId, entity, { requestedPermissions: FULL_WRITE })\n // Child shares deanon info with A\n await hierarchy.parentApi.cryptoApi.delegationsDeAnonymization.createOrUpdateDeAnonymizationInfo(\n { entity, type: EntityWithDelegationTypeName.CalendarItem },\n [apiA.userInfo.dataOwnerId]\n )\n // P shares with B\n await apiP.api.cryptoApi.forceReload()\n await apiP.api.cryptoApi.delegationsDeAnonymization.createOrUpdateDeAnonymizationInfo(\n { entity, type: EntityWithDelegationTypeName.CalendarItem },\n [apiB.userInfo.dataOwnerId]\n )\n // Parent shares with C\n await hierarchy.grandApi.cryptoApi.delegationsDeAnonymization.createOrUpdateDeAnonymizationInfo(\n { entity, type: EntityWithDelegationTypeName.CalendarItem },\n [apiC.userInfo.dataOwnerId]\n )\n const expectedAccess = {\n [hierarchy.grandUser.healthcarePartyId!]: AccessLevelEnum.WRITE,\n [apiA.userInfo.dataOwnerId]: AccessLevelEnum.WRITE,\n [apiB.userInfo.dataOwnerId]: AccessLevelEnum.WRITE,\n [apiC.userInfo.dataOwnerId]: AccessLevelEnum.WRITE,\n [apiP.userInfo.dataOwnerId]: AccessLevelEnum.WRITE,\n }\n await checkAccessInfo(await hierarchy.grandApi.calendarItemApi.getDataOwnersWithAccessTo(entity), expectedAccess, false)\n await checkAccessInfo(await hierarchy.parentApi.calendarItemApi.getDataOwnersWithAccessTo(entity), expectedAccess, false)\n await checkAccessInfo(await apiA.api.calendarItemApi.getDataOwnersWithAccessTo(entity), expectedAccess, false)\n await checkAccessInfo(await apiB.api.calendarItemApi.getDataOwnersWithAccessTo(entity), expectedAccess, false)\n await checkAccessInfo(await apiC.api.calendarItemApi.getDataOwnersWithAccessTo(entity), expectedAccess, false)\n await checkAccessInfo(await apiP.api.calendarItemApi.getDataOwnersWithAccessTo(entity), expectedAccess, false)\n const delegationKeyMapApi = new IccSecureDelegationKeyMapApi(env.iCureUrl, {}, hierarchy.grandApi.authApi.authenticationProvider, fetch)\n const delegationKeyToP = Object.entries(entity.securityMetadata!.secureDelegations!).find(([_, v]) => v.delegate === undefined)![0]\n expect(delegationKeyToP).to.not.be.undefined\n expect(delegationKeyToP).to.not.be.empty\n const delegationKeyMaps = await delegationKeyMapApi.getByDelegationKeys({ ids: Object.keys(entity.securityMetadata!.secureDelegations!) }, [])\n expect(delegationKeyMaps).to.have.length(1) // Only 1 anonymous, shared by everyone\n })\n\n typeCombinations.forEach(([delegatorType, delegateType]) => {\n it(`should allow delegate to find and decrypt an entity shared with him (${delegatorType}->${delegateType})`, async () => {\n const delegatorApi = await createUserAndApi(delegatorType)\n const delegateApi = await createUserAndApi(delegateType)\n const data = await createAndShareData(delegatorApi.api, delegatorApi.userInfo, delegateApi.userInfo)\n await delegateApi.api.cryptoApi.forceReload()\n await checkCanFindAndDecrypt(delegateApi.api, data)\n await checkCanFindAndDecrypt(delegatorApi.api, data)\n })\n\n it(`should allow delegator to find and decrypt an entity shared with others after give-access-back (${delegatorType}->${delegateType})`, async function () {\n if (delegatorType == delegateType || delegatorType != 'explicit') {\n const delegatorApi = await createUserAndApi(delegatorType)\n const delegateApi = await createUserAndApi(delegateType)\n const data = await createAndShareData(delegatorApi.api, delegatorApi.userInfo, delegateApi.userInfo)\n const delegatorApiAfterGiveAccessBack = await loseKeyAndGiveAccessBack(delegatorApi.userInfo, delegateApi.api, delegateApi.userInfo)\n await delegateApi.api.cryptoApi.forceReload()\n await checkCanFindAndDecrypt(delegateApi.api, data)\n await checkCanFindAndDecrypt(delegatorApi.api, data)\n await checkCanFindAndDecrypt(delegatorApiAfterGiveAccessBack, data)\n } else {\n console.warn('Currently not supported, will be in future')\n }\n })\n\n it(`should allow delegate to find and decrypt an entity shared with him after give-access-back (${delegatorType}->${delegateType})`, async function () {\n if (delegatorType == delegateType || delegateType != 'explicit') {\n const delegatorApi = await createUserAndApi(delegatorType)\n const delegateApi = await createUserAndApi(delegateType)\n const data = await createAndShareData(delegatorApi.api, delegatorApi.userInfo, delegateApi.userInfo)\n const delegateApiAfterGiveAccessBack = await loseKeyAndGiveAccessBack(delegateApi.userInfo, delegatorApi.api, delegatorApi.userInfo)\n await delegateApi.api.cryptoApi.forceReload()\n await checkCanFindAndDecrypt(delegateApi.api, data)\n await checkCanFindAndDecrypt(delegatorApi.api, data)\n await checkCanFindAndDecrypt(delegateApiAfterGiveAccessBack, data)\n } else {\n console.warn('Currently not supported, will be in future')\n }\n })\n })\n})\n"]}
@@ -1 +0,0 @@
1
- import 'mocha';
@@ -1,35 +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 icc_x_api_1 = require("../../../icc-x-api");
13
- const chai_1 = require("chai");
14
- require("mocha");
15
- const delay = (ms) => new Promise((res) => setTimeout(res, ms));
16
- describe('Concurrency test', () => {
17
- it('should return ordered sequence', () => __awaiter(void 0, void 0, void 0, function* () {
18
- const cm = {};
19
- const seq1 = [];
20
- const seq2 = [];
21
- const ctrl = yield Promise.all([500, 400, 300, 200, 100].map((x, idx) => __awaiter(void 0, void 0, void 0, function* () {
22
- yield delay(x);
23
- seq1.push(idx);
24
- return idx;
25
- })));
26
- const res = yield Promise.all([500, 400, 300, 200, 100].map((x, idx) => (0, icc_x_api_1.notConcurrent)(cm, '123', () => __awaiter(void 0, void 0, void 0, function* () {
27
- yield delay(x);
28
- seq2.push(idx);
29
- return idx;
30
- }))));
31
- (0, chai_1.expect)(seq1).to.not.eql(ctrl);
32
- (0, chai_1.expect)(seq2).to.eql(res);
33
- }));
34
- });
35
- //# sourceMappingURL=concurrency.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"concurrency.js","sourceRoot":"","sources":["../../../../test/icc-x-api/crypto/concurrency.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,kDAAkD;AAClD,+BAA6B;AAC7B,iBAAc;AAEd,MAAM,KAAK,GAAG,CAAC,EAAU,EAAE,EAAE,CAAC,IAAI,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAA;AAEvE,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,EAAE,CAAC,gCAAgC,EAAE,GAAS,EAAE;QAC9C,MAAM,EAAE,GAAG,EAAE,CAAA;QACb,MAAM,IAAI,GAAa,EAAE,CAAA;QACzB,MAAM,IAAI,GAAa,EAAE,CAAA;QAEzB,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,GAAG,CAC5B,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAO,CAAC,EAAE,GAAG,EAAE,EAAE;YAC7C,MAAM,KAAK,CAAC,CAAC,CAAC,CAAA;YACd,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YACd,OAAO,GAAG,CAAA;QACZ,CAAC,CAAA,CAAC,CACH,CAAA;QACD,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,GAAG,CAC3B,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CACvC,IAAA,yBAAa,EAAC,EAAE,EAAE,KAAK,EAAE,GAAS,EAAE;YAClC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAA;YACd,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YACd,OAAO,GAAG,CAAA;QACZ,CAAC,CAAA,CAAC,CACH,CACF,CAAA;QAED,IAAA,aAAM,EAAC,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QAC7B,IAAA,aAAM,EAAC,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAC1B,CAAC,CAAA,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA","sourcesContent":["import { notConcurrent } from '../../../icc-x-api'\nimport { expect } from 'chai'\nimport 'mocha'\n\nconst delay = (ms: number) => new Promise((res) => setTimeout(res, ms))\n\ndescribe('Concurrency test', () => {\n it('should return ordered sequence', async () => {\n const cm = {}\n const seq1: number[] = []\n const seq2: number[] = []\n\n const ctrl = await Promise.all(\n [500, 400, 300, 200, 100].map(async (x, idx) => {\n await delay(x)\n seq1.push(idx)\n return idx\n })\n )\n const res = await Promise.all(\n [500, 400, 300, 200, 100].map((x, idx) =>\n notConcurrent(cm, '123', async () => {\n await delay(x)\n seq2.push(idx)\n return idx\n })\n )\n )\n\n expect(seq1).to.not.eql(ctrl)\n expect(seq2).to.eql(res)\n })\n})\n"]}
@@ -1 +0,0 @@
1
- import 'mocha';
@@ -1,79 +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 icc_x_api_1 = require("../../../icc-x-api");
13
- const chai_1 = require("chai");
14
- require("mocha");
15
- const index_1 = require("../../../index");
16
- const node_compat_1 = require("../../../node-compat");
17
- const asn1_parser_1 = require("../../../icc-x-api/utils/asn1-parser");
18
- const test_utils_1 = require("../../utils/test_utils");
19
- const TestApi_1 = require("../../utils/TestApi");
20
- const types_1 = require("@icure/test-setup/types");
21
- let env;
22
- describe('ArrayBuffer methods', () => {
23
- let rsa;
24
- 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
- rsa = new icc_x_api_1.RSAUtilsImpl(node_compat_1.crypto);
30
- });
31
- });
32
- describe('truncateTrailingNulls', () => {
33
- it('should truncate trailing nulls out of an Uint8Array without copying', () => {
34
- const bytes = [72, 101, 108, 108, 111, 33];
35
- const originalArray = Uint8Array.from([...bytes, 0, 0]);
36
- const truncatedArray = (0, index_1.truncateTrailingNulls)(originalArray);
37
- (0, chai_1.expect)(truncatedArray.buffer).to.equal(originalArray.buffer);
38
- (0, chai_1.expect)(Array.from(truncatedArray)).to.eql(bytes);
39
- });
40
- it('should preserve the offset into the buffer', () => {
41
- const bytes = [72, 101, 108, 108, 111, 33];
42
- const originalBuffer = new Uint8Array([0, 0, ...bytes, 0, 0]).buffer;
43
- const originalArray = new Uint8Array(originalBuffer, 2, bytes.length);
44
- const truncatedArray = (0, index_1.truncateTrailingNulls)(originalArray);
45
- (0, chai_1.expect)(truncatedArray.buffer).to.equal(originalArray.buffer);
46
- (0, chai_1.expect)(truncatedArray.byteOffset).to.equal(originalArray.byteOffset);
47
- (0, chai_1.expect)(Array.from(truncatedArray)).to.eql(bytes);
48
- });
49
- });
50
- describe('convertKeysFormat', () => {
51
- it('should manage jwk conversions for private keys gracefully', () => __awaiter(void 0, void 0, void 0, function* () {
52
- const { healthcarePartyApi } = yield (0, TestApi_1.TestApi)(env.iCureUrl, env.dataOwnerDetails[test_utils_1.hcp1Username].user, env.dataOwnerDetails[test_utils_1.hcp1Username].password, node_compat_1.crypto);
53
- const privKey = env.dataOwnerDetails[test_utils_1.hcp1Username].privateKey;
54
- const parsed = (0, asn1_parser_1.parseAsn1)(new Uint8Array((0, index_1.hex2ua)(privKey)));
55
- const jwk1 = (0, index_1.pkcs8ToJwk)((0, index_1.hex2ua)(privKey));
56
- const pkcs8 = (0, index_1.jwk2pkcs8)(jwk1);
57
- const jwk2 = (0, index_1.pkcs8ToJwk)((0, index_1.hex2ua)(pkcs8));
58
- (0, chai_1.expect)(jwk1.n).to.equal(jwk2.n);
59
- const pubKey = yield healthcarePartyApi.getCurrentHealthcareParty().then((hcp) => hcp.publicKey);
60
- const jwk3 = (0, index_1.spkiToJwk)((0, index_1.hex2ua)(pubKey), icc_x_api_1.ShaVersion.Sha1);
61
- const spki = (0, index_1.jwk2spki)(jwk3);
62
- const jwk4 = (0, index_1.spkiToJwk)((0, index_1.hex2ua)(spki), icc_x_api_1.ShaVersion.Sha1);
63
- (0, chai_1.expect)(jwk3.n).to.equal(jwk4.n);
64
- }));
65
- it('should convert spki to jwk in a coherent way', () => __awaiter(void 0, void 0, void 0, function* () {
66
- const { healthcarePartyApi } = yield (0, TestApi_1.TestApi)(env.iCureUrl, env.dataOwnerDetails[test_utils_1.hcp1Username].user, env.dataOwnerDetails[test_utils_1.hcp1Username].password, node_compat_1.crypto);
67
- const pubKey = yield healthcarePartyApi.getCurrentHealthcareParty().then((hcp) => hcp.publicKey);
68
- const jwk1 = (0, index_1.spkiToJwk)((0, index_1.hex2ua)(pubKey), icc_x_api_1.ShaVersion.Sha1);
69
- const rsaKey1 = yield rsa.importKey('jwk', jwk1, ['encrypt'], icc_x_api_1.ShaVersion.Sha1);
70
- const rsaKey2 = yield rsa.importKey('spki', (0, icc_x_api_1.ua2ab)((0, index_1.hex2ua)(pubKey)), ['encrypt'], icc_x_api_1.ShaVersion.Sha1);
71
- const jwk2 = yield rsa.exportKey(rsaKey2, 'jwk');
72
- const rsaKey3 = yield rsa.importKey('jwk', jwk2, ['encrypt'], icc_x_api_1.ShaVersion.Sha1);
73
- const n1 = (0, index_1.ua2hex)((0, icc_x_api_1.b64Url2ua)(jwk1.n));
74
- const n2 = (0, index_1.ua2hex)((0, icc_x_api_1.b64Url2ua)(jwk2.n));
75
- (0, chai_1.expect)(jwk1.n).to.equal(jwk2.n);
76
- }));
77
- });
78
- });
79
- //# sourceMappingURL=crypto-utils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"crypto-utils.js","sourceRoot":"","sources":["../../../../test/icc-x-api/crypto/crypto-utils.ts"],"names":[],"mappings":"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","sourcesContent":["import { b64Url2ua, RSAUtilsImpl, ShaVersion, ua2ab } from '../../../icc-x-api'\nimport { expect } from 'chai'\n\nimport 'mocha'\nimport { hex2ua, jwk2pkcs8, jwk2spki, pkcs8ToJwk, spkiToJwk, truncateTrailingNulls, ua2hex } from '../../../index'\nimport { crypto } from '../../../node-compat'\nimport { RSAUtils } from '../../../icc-x-api/crypto/RSA'\nimport { parseAsn1 } from '../../../icc-x-api/utils/asn1-parser'\nimport { getEnvironmentInitializer, hcp1Username } from '../../utils/test_utils'\nimport { TestApi } from '../../utils/TestApi'\nimport { getEnvVariables, TestVars } from '@icure/test-setup/types'\n\nlet env: TestVars\n\ndescribe('ArrayBuffer methods', () => {\n let rsa: RSAUtils\n\n before(async function () {\n this.timeout(600000)\n const initializer = await getEnvironmentInitializer()\n env = await initializer.execute(getEnvVariables())\n rsa = new RSAUtilsImpl(crypto)\n })\n\n describe('truncateTrailingNulls', () => {\n it('should truncate trailing nulls out of an Uint8Array without copying', () => {\n const bytes = [72, 101, 108, 108, 111, 33]\n const originalArray = Uint8Array.from([...bytes, 0, 0])\n const truncatedArray = truncateTrailingNulls(originalArray)\n expect(truncatedArray.buffer).to.equal(originalArray.buffer)\n expect(Array.from(truncatedArray)).to.eql(bytes)\n })\n\n it('should preserve the offset into the buffer', () => {\n const bytes = [72, 101, 108, 108, 111, 33]\n const originalBuffer = new Uint8Array([0, 0, ...bytes, 0, 0]).buffer\n const originalArray = new Uint8Array(originalBuffer, 2, bytes.length)\n const truncatedArray = truncateTrailingNulls(originalArray)\n expect(truncatedArray.buffer).to.equal(originalArray.buffer)\n expect(truncatedArray.byteOffset).to.equal(originalArray.byteOffset)\n expect(Array.from(truncatedArray)).to.eql(bytes)\n })\n })\n\n describe('convertKeysFormat', () => {\n it('should manage jwk conversions for private keys gracefully', async () => {\n const { healthcarePartyApi } = await TestApi(\n env.iCureUrl,\n env.dataOwnerDetails[hcp1Username].user,\n env.dataOwnerDetails[hcp1Username].password,\n crypto\n )\n const privKey = env.dataOwnerDetails[hcp1Username].privateKey\n const parsed = parseAsn1(new Uint8Array(hex2ua(privKey)))\n\n const jwk1 = pkcs8ToJwk(hex2ua(privKey))\n const pkcs8 = jwk2pkcs8(jwk1)\n const jwk2 = pkcs8ToJwk(hex2ua(pkcs8))\n\n expect(jwk1.n).to.equal(jwk2.n)\n\n const pubKey = await healthcarePartyApi.getCurrentHealthcareParty().then((hcp) => hcp.publicKey!)\n const jwk3 = spkiToJwk(hex2ua(pubKey), ShaVersion.Sha1)\n const spki = jwk2spki(jwk3)\n const jwk4 = spkiToJwk(hex2ua(spki), ShaVersion.Sha1)\n\n expect(jwk3.n).to.equal(jwk4.n)\n })\n\n it('should convert spki to jwk in a coherent way', async () => {\n const { healthcarePartyApi } = await TestApi(\n env.iCureUrl,\n env.dataOwnerDetails[hcp1Username].user,\n env.dataOwnerDetails[hcp1Username].password,\n crypto\n )\n const pubKey = await healthcarePartyApi.getCurrentHealthcareParty().then((hcp) => hcp.publicKey!)\n const jwk1 = spkiToJwk(hex2ua(pubKey), ShaVersion.Sha1)\n\n const rsaKey1 = await rsa.importKey('jwk', jwk1, ['encrypt'], ShaVersion.Sha1)\n const rsaKey2 = await rsa.importKey('spki', ua2ab(hex2ua(pubKey)), ['encrypt'], ShaVersion.Sha1)\n const jwk2 = await rsa.exportKey(rsaKey2, 'jwk')\n const rsaKey3 = await rsa.importKey('jwk', jwk2, ['encrypt'], ShaVersion.Sha1)\n\n const n1 = ua2hex(b64Url2ua(jwk1.n))\n const n2 = ua2hex(b64Url2ua(jwk2.n!))\n\n expect(jwk1.n).to.equal(jwk2.n)\n })\n })\n})\n"]}
@@ -1,2 +0,0 @@
1
- import 'isomorphic-fetch';
2
- import 'mocha';