@icure/api 8.2.2 → 8.2.4

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 (337) hide show
  1. package/icc-api/api/IccAuthApi.js +1 -1
  2. package/icc-api/api/IccAuthApi.js.map +1 -1
  3. package/icc-api/api/IccDocumentApi.js.map +1 -1
  4. package/icc-api/api/IccFormApi.js.map +1 -1
  5. package/icc-api/api/IccReceiptApi.js.map +1 -1
  6. package/icc-api/api/IccRestApiPath.js +1 -2
  7. package/icc-api/api/IccRestApiPath.js.map +1 -1
  8. package/icc-api/api/XHR.js +17 -8
  9. package/icc-api/api/XHR.js.map +1 -1
  10. package/icc-api/model/Address.js +1 -1
  11. package/icc-api/model/Address.js.map +1 -1
  12. package/icc-api/model/Amp.js +1 -1
  13. package/icc-api/model/Amp.js.map +1 -1
  14. package/icc-api/model/AmpComponent.js +1 -1
  15. package/icc-api/model/AmpComponent.js.map +1 -1
  16. package/icc-api/model/Ampp.js +1 -1
  17. package/icc-api/model/Ampp.js.map +1 -1
  18. package/icc-api/model/AmppComponent.js +1 -1
  19. package/icc-api/model/AmppComponent.js.map +1 -1
  20. package/icc-api/model/CareTeamMember.js +1 -1
  21. package/icc-api/model/CareTeamMember.js.map +1 -1
  22. package/icc-api/model/CareTeamMembership.js +1 -1
  23. package/icc-api/model/CareTeamMembership.js.map +1 -1
  24. package/icc-api/model/Code.js +1 -1
  25. package/icc-api/model/Code.js.map +1 -1
  26. package/icc-api/model/Contact.js.map +1 -1
  27. package/icc-api/model/Content.js.map +1 -1
  28. package/icc-api/model/DataOwnerTypeEnum.js +1 -1
  29. package/icc-api/model/DataOwnerTypeEnum.js.map +1 -1
  30. package/icc-api/model/DataOwnerWithType.js +1 -1
  31. package/icc-api/model/DataOwnerWithType.js.map +1 -1
  32. package/icc-api/model/DatabaseSynchronization.js +1 -1
  33. package/icc-api/model/DatabaseSynchronization.js.map +1 -1
  34. package/icc-api/model/Dmpp.js +1 -1
  35. package/icc-api/model/Dmpp.js.map +1 -1
  36. package/icc-api/model/Document.js +1 -1
  37. package/icc-api/model/Document.js.map +1 -1
  38. package/icc-api/model/DocumentTemplate.d.ts +1 -1
  39. package/icc-api/model/DocumentTemplate.js +1 -1
  40. package/icc-api/model/DocumentTemplate.js.map +1 -1
  41. package/icc-api/model/Editor.js +1 -1
  42. package/icc-api/model/Editor.js.map +1 -1
  43. package/icc-api/model/EfactInvoice.js +1 -1
  44. package/icc-api/model/EfactInvoice.js.map +1 -1
  45. package/icc-api/model/EmailOrSmsMessage.js +1 -1
  46. package/icc-api/model/EmailOrSmsMessage.js.map +1 -1
  47. package/icc-api/model/FlatRateTarification.js +1 -1
  48. package/icc-api/model/FlatRateTarification.js.map +1 -1
  49. package/icc-api/model/Formula.js +1 -1
  50. package/icc-api/model/Formula.js.map +1 -1
  51. package/icc-api/model/FrontEndMigration.js +1 -1
  52. package/icc-api/model/FrontEndMigration.js.map +1 -1
  53. package/icc-api/model/HealthElement.js +1 -1
  54. package/icc-api/model/HealthElement.js.map +1 -1
  55. package/icc-api/model/HealthcareParty.js +1 -1
  56. package/icc-api/model/HealthcareParty.js.map +1 -1
  57. package/icc-api/model/HealthcarePartyHistoryStatus.js +1 -1
  58. package/icc-api/model/HealthcarePartyHistoryStatus.js.map +1 -1
  59. package/icc-api/model/Ingredient.js +1 -1
  60. package/icc-api/model/Ingredient.js.map +1 -1
  61. package/icc-api/model/Invoice.js +1 -1
  62. package/icc-api/model/Invoice.js.map +1 -1
  63. package/icc-api/model/InvoiceItem.js +1 -1
  64. package/icc-api/model/InvoiceItem.js.map +1 -1
  65. package/icc-api/model/InvoicingCode.js +1 -1
  66. package/icc-api/model/InvoicingCode.js.map +1 -1
  67. package/icc-api/model/MaintenanceTask.js +1 -1
  68. package/icc-api/model/MaintenanceTask.js.map +1 -1
  69. package/icc-api/model/Measure.js.map +1 -1
  70. package/icc-api/model/MedicalHouseContract.js +1 -1
  71. package/icc-api/model/MedicalHouseContract.js.map +1 -1
  72. package/icc-api/model/ModelHelper.js +9 -10
  73. package/icc-api/model/ModelHelper.js.map +1 -1
  74. package/icc-api/model/Partnership.js +1 -1
  75. package/icc-api/model/Partnership.js.map +1 -1
  76. package/icc-api/model/Patient.js +1 -1
  77. package/icc-api/model/Patient.js.map +1 -1
  78. package/icc-api/model/PatientByHcPartyGenderEducationProfession.js +1 -1
  79. package/icc-api/model/PatientByHcPartyGenderEducationProfession.js.map +1 -1
  80. package/icc-api/model/PatientHealthCareParty.js +1 -1
  81. package/icc-api/model/PatientHealthCareParty.js.map +1 -1
  82. package/icc-api/model/Payment.js +1 -1
  83. package/icc-api/model/Payment.js.map +1 -1
  84. package/icc-api/model/PermissionCriterion.js +1 -1
  85. package/icc-api/model/PermissionCriterion.js.map +1 -1
  86. package/icc-api/model/PermissionItem.js +1 -1
  87. package/icc-api/model/PermissionItem.js.map +1 -1
  88. package/icc-api/model/PersonName.js +1 -1
  89. package/icc-api/model/PersonName.js.map +1 -1
  90. package/icc-api/model/PropertyTypeStub.js +1 -1
  91. package/icc-api/model/PropertyTypeStub.js.map +1 -1
  92. package/icc-api/model/Reimbursement.js +1 -1
  93. package/icc-api/model/Reimbursement.js.map +1 -1
  94. package/icc-api/model/RoleSourceEnum.js +1 -1
  95. package/icc-api/model/RoleSourceEnum.js.map +1 -1
  96. package/icc-api/model/SecureDelegation.js +1 -1
  97. package/icc-api/model/SecureDelegation.js.map +1 -1
  98. package/icc-api/model/Service.js.map +1 -1
  99. package/icc-api/model/StandardSubstance.js +1 -1
  100. package/icc-api/model/StandardSubstance.js.map +1 -1
  101. package/icc-api/model/SumehrValidity.js +1 -1
  102. package/icc-api/model/SumehrValidity.js.map +1 -1
  103. package/icc-api/model/Tarification.js +1 -1
  104. package/icc-api/model/Tarification.js.map +1 -1
  105. package/icc-api/model/Telecom.js +1 -1
  106. package/icc-api/model/Telecom.js.map +1 -1
  107. package/icc-api/model/Topic.js +1 -1
  108. package/icc-api/model/Topic.js.map +1 -1
  109. package/icc-api/model/TypedValueObject.js +1 -1
  110. package/icc-api/model/TypedValueObject.js.map +1 -1
  111. package/icc-api/model/User.js +1 -1
  112. package/icc-api/model/User.js.map +1 -1
  113. package/icc-api/model/UserTypeEnum.js +1 -1
  114. package/icc-api/model/UserTypeEnum.js.map +1 -1
  115. package/icc-api/model/VirtualIngredient.js +1 -1
  116. package/icc-api/model/VirtualIngredient.js.map +1 -1
  117. package/icc-api/model/internal/RecoveryData.js +1 -1
  118. package/icc-api/model/internal/RecoveryData.js.map +1 -1
  119. package/icc-api/model/requests/EntityBulkShareResult.js.map +1 -1
  120. package/icc-api/model/requests/EntityShareOrMetadataUpdateRequest.js.map +1 -1
  121. package/icc-api/model/requests/EntityShareRequest.js +1 -1
  122. package/icc-api/model/requests/EntityShareRequest.js.map +1 -1
  123. package/icc-api/model/requests/EntitySharedMetadataUpdateRequest.js +1 -1
  124. package/icc-api/model/requests/EntitySharedMetadataUpdateRequest.js.map +1 -1
  125. package/icc-x-api/auth/AuthenticationProvider.js.map +1 -1
  126. package/icc-x-api/auth/BasicAuthService.js.map +1 -1
  127. package/icc-x-api/auth/EnsembleAuthService.js.map +1 -1
  128. package/icc-x-api/auth/JwtAuthService.js.map +1 -1
  129. package/icc-x-api/auth/JwtBridgedAuthService.d.ts +1 -1
  130. package/icc-x-api/auth/JwtBridgedAuthService.js +1 -1
  131. package/icc-x-api/auth/JwtBridgedAuthService.js.map +1 -1
  132. package/icc-x-api/auth/JwtUtils.js +3 -4
  133. package/icc-x-api/auth/JwtUtils.js.map +1 -1
  134. package/icc-x-api/auth/NoAuthService.js.map +1 -1
  135. package/icc-x-api/auth/SmartAuthProvider.d.ts +1 -1
  136. package/icc-x-api/auth/SmartAuthProvider.js +1 -1
  137. package/icc-x-api/auth/SmartAuthProvider.js.map +1 -1
  138. package/icc-x-api/crypto/AES.js.map +1 -1
  139. package/icc-x-api/crypto/AccessControlKeysHeadersProvider.js.map +1 -1
  140. package/icc-x-api/crypto/AccessControlSecretUtils.js.map +1 -1
  141. package/icc-x-api/crypto/BaseExchangeDataManager.js +10 -10
  142. package/icc-x-api/crypto/BaseExchangeDataManager.js.map +1 -1
  143. package/icc-x-api/crypto/BaseExchangeKeysManager.js +4 -4
  144. package/icc-x-api/crypto/BaseExchangeKeysManager.js.map +1 -1
  145. package/icc-x-api/crypto/CryptoStrategies.d.ts +5 -7
  146. package/icc-x-api/crypto/CryptoStrategies.js.map +1 -1
  147. package/icc-x-api/crypto/DelegationsDeAnonymization.js +1 -1
  148. package/icc-x-api/crypto/DelegationsDeAnonymization.js.map +1 -1
  149. package/icc-x-api/crypto/ExchangeDataManager.js +7 -9
  150. package/icc-x-api/crypto/ExchangeDataManager.js.map +1 -1
  151. package/icc-x-api/crypto/ExchangeDataMapManager.js.map +1 -1
  152. package/icc-x-api/crypto/ExchangeKeysManager.js +1 -1
  153. package/icc-x-api/crypto/ExchangeKeysManager.js.map +1 -1
  154. package/icc-x-api/crypto/ExtendedApisUtilsImpl.js +11 -10
  155. package/icc-x-api/crypto/ExtendedApisUtilsImpl.js.map +1 -1
  156. package/icc-x-api/crypto/HMACUtils.js.map +1 -1
  157. package/icc-x-api/crypto/KeyRecovery.js +5 -5
  158. package/icc-x-api/crypto/KeyRecovery.js.map +1 -1
  159. package/icc-x-api/crypto/NativeCryptoPrimitivesBridge.js +3 -3
  160. package/icc-x-api/crypto/NativeCryptoPrimitivesBridge.js.map +1 -1
  161. package/icc-x-api/crypto/RSA.js +4 -4
  162. package/icc-x-api/crypto/RSA.js.map +1 -1
  163. package/icc-x-api/crypto/RecoveryDataEncryption.js +1 -1
  164. package/icc-x-api/crypto/RecoveryDataEncryption.js.map +1 -1
  165. package/icc-x-api/crypto/SecretIdUseOption.js +1 -1
  166. package/icc-x-api/crypto/SecretIdUseOption.js.map +1 -1
  167. package/icc-x-api/crypto/SecureDelegationsEncryption.js +4 -4
  168. package/icc-x-api/crypto/SecureDelegationsEncryption.js.map +1 -1
  169. package/icc-x-api/crypto/SecureDelegationsManager.js +1 -1
  170. package/icc-x-api/crypto/SecureDelegationsManager.js.map +1 -1
  171. package/icc-x-api/crypto/SecurityMetadataDecryptor.d.ts +1 -1
  172. package/icc-x-api/crypto/SecurityMetadataDecryptor.js +9 -9
  173. package/icc-x-api/crypto/SecurityMetadataDecryptor.js.map +1 -1
  174. package/icc-x-api/crypto/ShamirKeysManager.js.map +1 -1
  175. package/icc-x-api/crypto/ShareMetadataBehaviour.js +1 -1
  176. package/icc-x-api/crypto/ShareMetadataBehaviour.js.map +1 -1
  177. package/icc-x-api/crypto/TransferKeysManager.js +1 -1
  178. package/icc-x-api/crypto/TransferKeysManager.js.map +1 -1
  179. package/icc-x-api/crypto/UserEncryptionKeysManager.js +2 -2
  180. package/icc-x-api/crypto/UserEncryptionKeysManager.js.map +1 -1
  181. package/icc-x-api/crypto/shamir.d.ts +2 -2
  182. package/icc-x-api/crypto/shamir.js +4 -4
  183. package/icc-x-api/crypto/shamir.js.map +1 -1
  184. package/icc-x-api/crypto/utils.js +14 -15
  185. package/icc-x-api/crypto/utils.js.map +1 -1
  186. package/icc-x-api/icc-accesslog-x-api.js +10 -10
  187. package/icc-x-api/icc-accesslog-x-api.js.map +1 -1
  188. package/icc-x-api/icc-bekmehr-x-api.js.map +1 -1
  189. package/icc-x-api/icc-calendar-item-x-api.js +7 -7
  190. package/icc-x-api/icc-calendar-item-x-api.js.map +1 -1
  191. package/icc-x-api/icc-classification-x-api.js +5 -5
  192. package/icc-x-api/icc-classification-x-api.js.map +1 -1
  193. package/icc-x-api/icc-code-x-api.js.map +1 -1
  194. package/icc-x-api/icc-contact-x-api.js +12 -12
  195. package/icc-x-api/icc-contact-x-api.js.map +1 -1
  196. package/icc-x-api/icc-data-owner-x-api.js.map +1 -1
  197. package/icc-x-api/icc-device-x-api.js +2 -2
  198. package/icc-x-api/icc-device-x-api.js.map +1 -1
  199. package/icc-x-api/icc-doctemplate-x-api.js.map +1 -1
  200. package/icc-x-api/icc-document-x-api.js +15 -15
  201. package/icc-x-api/icc-document-x-api.js.map +1 -1
  202. package/icc-x-api/icc-form-x-api.js +7 -7
  203. package/icc-x-api/icc-form-x-api.js.map +1 -1
  204. package/icc-x-api/icc-hcparty-x-api.js +4 -4
  205. package/icc-x-api/icc-hcparty-x-api.js.map +1 -1
  206. package/icc-x-api/icc-helement-x-api.js +10 -10
  207. package/icc-x-api/icc-helement-x-api.js.map +1 -1
  208. package/icc-x-api/icc-icure-maintenance-x-api.js.map +1 -1
  209. package/icc-x-api/icc-invoice-x-api.js +7 -7
  210. package/icc-x-api/icc-invoice-x-api.js.map +1 -1
  211. package/icc-x-api/icc-maintenance-task-x-api.js +7 -7
  212. package/icc-x-api/icc-maintenance-task-x-api.js.map +1 -1
  213. package/icc-x-api/icc-message-x-api.js +8 -8
  214. package/icc-x-api/icc-message-x-api.js.map +1 -1
  215. package/icc-x-api/icc-patient-x-api.js +11 -11
  216. package/icc-x-api/icc-patient-x-api.js.map +1 -1
  217. package/icc-x-api/icc-receipt-x-api.js +10 -10
  218. package/icc-x-api/icc-receipt-x-api.js.map +1 -1
  219. package/icc-x-api/icc-recovery-x-api.js +4 -4
  220. package/icc-x-api/icc-recovery-x-api.js.map +1 -1
  221. package/icc-x-api/icc-time-table-x-api.js +5 -5
  222. package/icc-x-api/icc-time-table-x-api.js.map +1 -1
  223. package/icc-x-api/icc-topic-x-api.js +9 -9
  224. package/icc-x-api/icc-topic-x-api.js.map +1 -1
  225. package/icc-x-api/icc-user-x-api.js +4 -4
  226. package/icc-x-api/icc-user-x-api.js.map +1 -1
  227. package/icc-x-api/index.js +22 -22
  228. package/icc-x-api/index.js.map +1 -1
  229. package/icc-x-api/maintenance/KeyPairUpdateRequest.js +2 -2
  230. package/icc-x-api/maintenance/KeyPairUpdateRequest.js.map +1 -1
  231. package/icc-x-api/storage/IcureStorageFacade.js +1 -1
  232. package/icc-x-api/storage/IcureStorageFacade.js.map +1 -1
  233. package/icc-x-api/storage/LocalStorageImpl.js +1 -1
  234. package/icc-x-api/storage/LocalStorageImpl.js.map +1 -1
  235. package/icc-x-api/utils/EntityWithDelegationTypeName.js +4 -4
  236. package/icc-x-api/utils/EntityWithDelegationTypeName.js.map +1 -1
  237. package/icc-x-api/utils/asn1-packer.js +2 -3
  238. package/icc-x-api/utils/asn1-packer.js.map +1 -1
  239. package/icc-x-api/utils/asn1-parser.js +1 -2
  240. package/icc-x-api/utils/asn1-parser.js.map +1 -1
  241. package/icc-x-api/utils/binary-utils.js +11 -11
  242. package/icc-x-api/utils/binary-utils.js.map +1 -1
  243. package/icc-x-api/utils/code-util.js +1 -2
  244. package/icc-x-api/utils/code-util.js.map +1 -1
  245. package/icc-x-api/utils/collection-utils.js +5 -6
  246. package/icc-x-api/utils/collection-utils.js.map +1 -1
  247. package/icc-x-api/utils/crypto-utils.d.ts +1 -1
  248. package/icc-x-api/utils/crypto-utils.js +17 -18
  249. package/icc-x-api/utils/crypto-utils.js.map +1 -1
  250. package/icc-x-api/utils/formatting-util.js +21 -21
  251. package/icc-x-api/utils/formatting-util.js.map +1 -1
  252. package/icc-x-api/utils/functional-util.js +3 -4
  253. package/icc-x-api/utils/functional-util.js.map +1 -1
  254. package/icc-x-api/utils/graph-utils.js +3 -4
  255. package/icc-x-api/utils/graph-utils.js.map +1 -1
  256. package/icc-x-api/utils/hcp-util.js +4 -4
  257. package/icc-x-api/utils/hcp-util.js.map +1 -1
  258. package/icc-x-api/utils/insurability-util.js +6 -7
  259. package/icc-x-api/utils/insurability-util.js.map +1 -1
  260. package/icc-x-api/utils/lru-temporised-async-cache.js.map +1 -1
  261. package/icc-x-api/utils/net-utils.js +3 -4
  262. package/icc-x-api/utils/net-utils.js.map +1 -1
  263. package/icc-x-api/utils/person-util.js +3 -4
  264. package/icc-x-api/utils/person-util.js.map +1 -1
  265. package/icc-x-api/utils/proxy-utils.js.map +1 -1
  266. package/icc-x-api/utils/simple-lru-cache.js.map +1 -1
  267. package/icc-x-api/utils/uuid-encoder.js +2 -2
  268. package/icc-x-api/utils/uuid-encoder.js.map +1 -1
  269. package/icc-x-api/utils/websocket.d.ts +0 -1
  270. package/icc-x-api/utils/websocket.js +3 -3
  271. package/icc-x-api/utils/websocket.js.map +1 -1
  272. package/package.json +3 -3
  273. package/test/icc-api/api/IccAgendaApi.js.map +1 -1
  274. package/test/icc-api/api/IccCalendarItemApi.js.map +1 -1
  275. package/test/icc-api/api/IccCalendarItemTypeApi.js +2 -2
  276. package/test/icc-api/api/IccCalendarItemTypeApi.js.map +1 -1
  277. package/test/icc-api/api/IccDocumentApi.js.map +1 -1
  278. package/test/icc-api/api/IccKeywordApi.js.map +1 -1
  279. package/test/icc-api/api/IccMedicalLocationApi.js.map +1 -1
  280. package/test/icc-api/api/IccPlaceApi.js.map +1 -1
  281. package/test/icc-api/api/IccUserApi.js +6 -6
  282. package/test/icc-x-api/auth/group-switch-test.js.map +1 -1
  283. package/test/icc-x-api/auth/jwt-concurrency-test.js +1 -2
  284. package/test/icc-x-api/auth/jwt-concurrency-test.js.map +1 -1
  285. package/test/icc-x-api/auth/jwt-provider-test.js.map +1 -1
  286. package/test/icc-x-api/auth/smart-auth-provider-test.js.map +1 -1
  287. package/test/icc-x-api/autofix-anonymity-test.js.map +1 -1
  288. package/test/icc-x-api/confidential-entities-test.js +1 -1
  289. package/test/icc-x-api/confidential-entities-test.js.map +1 -1
  290. package/test/icc-x-api/crud/comprehensive-crud-test.js.map +1 -1
  291. package/test/icc-x-api/crud/entities-crud-test-interface.js +24 -24
  292. package/test/icc-x-api/crud/entities-crud-test-interface.js.map +1 -1
  293. package/test/icc-x-api/crypto/anonymous-delegations-test.js +2 -2
  294. package/test/icc-x-api/crypto/anonymous-delegations-test.js.map +1 -1
  295. package/test/icc-x-api/crypto/cryptoTest.js.map +1 -1
  296. package/test/icc-x-api/crypto/delegate-ci-to-patient-with-missing-keys-test.js.map +1 -1
  297. package/test/icc-x-api/crypto/exchange-data-manager-test.js +4 -4
  298. package/test/icc-x-api/crypto/exchange-data-manager-test.js.map +1 -1
  299. package/test/icc-x-api/crypto/full-crypto-test.js +5 -5
  300. package/test/icc-x-api/crypto/full-crypto-test.js.map +1 -1
  301. package/test/icc-x-api/crypto/legacy-metadata-migration-test.js +7 -7
  302. package/test/icc-x-api/crypto/legacy-metadata-migration-test.js.map +1 -1
  303. package/test/icc-x-api/crypto/secure-delegations-manager-test.js +2 -2
  304. package/test/icc-x-api/crypto/secure-delegations-manager-test.js.map +1 -1
  305. package/test/icc-x-api/crypto/shamir.js.map +1 -1
  306. package/test/icc-x-api/crypto/soft-deleted-data-owners.js +3 -3
  307. package/test/icc-x-api/crypto/soft-deleted-data-owners.js.map +1 -1
  308. package/test/icc-x-api/entity-with-attachments-api-test.js +2 -2
  309. package/test/icc-x-api/entity-with-attachments-api-test.js.map +1 -1
  310. package/test/icc-x-api/icc-maintenance-task-x-api-test.js +4 -4
  311. package/test/icc-x-api/icc-message-x-api.js +1 -1
  312. package/test/icc-x-api/icc-message-x-api.js.map +1 -1
  313. package/test/icc-x-api/icc-patient-x-api-test.js.map +1 -1
  314. package/test/icc-x-api/icc-recovery-x-api.js.map +1 -1
  315. package/test/icc-x-api/icc-topic-x-api.js.map +1 -1
  316. package/test/icc-x-api/icc-user-x-api-test.js.map +1 -1
  317. package/test/icc-x-api/patient-user.js.map +1 -1
  318. package/test/icc-x-api/test-legacy-data-support.js.map +1 -1
  319. package/test/icc-x-api/utils/graph-test.js.map +1 -1
  320. package/test/icc-x-api/utils/lru-temporised-async-cache-test.js.map +1 -1
  321. package/test/support/CSM-243.js +2 -2
  322. package/test/support/CSM-243.js.map +1 -1
  323. package/test/support/CSM-93.js +1 -1
  324. package/test/support/CSM-93.js.map +1 -1
  325. package/test/utils/FakeDataOwnerApi.js.map +1 -1
  326. package/test/utils/FakeEncryptionKeysManager.js +2 -2
  327. package/test/utils/FakeEncryptionKeysManager.js.map +1 -1
  328. package/test/utils/FakeExchangeDataApi.js.map +1 -1
  329. package/test/utils/FakeExchangeDataManager.js.map +1 -1
  330. package/test/utils/FakeGenericApi.js.map +1 -1
  331. package/test/utils/TestApi.js +2 -2
  332. package/test/utils/TestApi.js.map +1 -1
  333. package/test/utils/TestCryptoStrategies.js.map +1 -1
  334. package/test/utils/TestStorage.js +2 -2
  335. package/test/utils/TestStorage.js.map +1 -1
  336. package/test/utils/test_utils.js +22 -22
  337. package/test/utils/test_utils.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"full-crypto-test.js","sourceRoot":"","sources":["../../../../test/icc-x-api/crypto/full-crypto-test.ts"],"names":[],"mappings":"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","sourcesContent":["import { Apis, WebCryptoPrimitives, IcureApi, ShaVersion, ua2hex } from '../../../icc-x-api'\nimport { v4 as uuid } from 'uuid'\nimport { Patient } from '../../../icc-api/model/Patient'\nimport { Contact } from '../../../icc-api/model/Contact'\nimport { HealthElement } from '../../../icc-api/model/HealthElement'\nimport { CalendarItem } from '../../../icc-api/model/CalendarItem'\nimport { EncryptedEntity, FilterChainMaintenanceTask, HealthcareParty, Service, User } from '../../../icc-api/model/models'\nimport { before, describe, it } from 'mocha'\n\nimport { webcrypto } from 'crypto'\nimport 'isomorphic-fetch'\n\nimport { expect } from 'chai'\nimport { getEnvironmentInitializer, getTempEmail, isLiteTest, setLocalStorage, TestUtils } from '../../utils/test_utils'\nimport { TestApi } from '../../utils/TestApi'\nimport { KeyPair } from '../../../icc-x-api/crypto/RSA'\nimport { CryptoPrimitives } from '../../../icc-x-api/crypto/CryptoPrimitives'\nimport { TestKeyStorage, TestStorage, testStorageWithKeys } from '../../utils/TestStorage'\nimport { TestCryptoStrategies } from '../../utils/TestCryptoStrategies'\nimport { MaintenanceTaskAfterDateFilter } from '../../../icc-x-api/filters/MaintenanceTaskAfterDateFilter'\nimport { KeyPairUpdateRequest } from '../../../icc-x-api/maintenance/KeyPairUpdateRequest'\nimport initMasterApi = TestUtils.initMasterApi\nimport { SecureDelegation } from '../../../icc-api/model/SecureDelegation'\nimport AccessLevel = SecureDelegation.AccessLevelEnum\nimport { EntityShareRequest } from '../../../icc-api/model/requests/EntityShareRequest'\nimport RequestedPermissionEnum = EntityShareRequest.RequestedPermissionEnum\nimport { getEnvVariables, TestVars } from '@icure/test-setup/types'\nimport { fingerprintV1 } from '../../../icc-x-api/crypto/utils'\n\nsetLocalStorage(fetch)\n\nconst FULL_WRITE = RequestedPermissionEnum.FULL_WRITE\n\ntype TestedEntity = 'Patient' | 'Contact' | 'HealthElement' | 'CalendarItem'\n\ninterface EntityFacade<T extends EncryptedEntity> {\n create: (api: Apis, record: Omit<T, 'rev'>) => Promise<T>\n get: (api: Apis, id: string) => Promise<T>\n share: (api: Apis, record: T, dataOwnerId: string) => Promise<T>\n isDecrypted: (entityToCheck: T) => Promise<boolean>\n}\n\ntype EntityCreator<T> = (api: Apis, id: string, user: User, patient?: Patient, delegateIds?: string[]) => Promise<T>\n\ninterface EntityFacades {\n Patient: EntityFacade<Patient>\n Contact: EntityFacade<Contact>\n HealthElement: EntityFacade<HealthElement>\n CalendarItem: EntityFacade<CalendarItem>\n}\n\ninterface EntityCreators {\n Patient: EntityCreator<Patient>\n Contact: EntityCreator<Contact>\n HealthElement: EntityCreator<HealthElement>\n CalendarItem: EntityCreator<CalendarItem>\n}\n\nconst facades: EntityFacades = {\n Patient: {\n create: async (api, r) => api.patientApi.createPatientWithUser(await api.userApi.getCurrentUser(), r),\n get: async (api, id) => api.patientApi.getPatientWithUser(await api.userApi.getCurrentUser(), id),\n share: async (api, r, doId) => {\n return await api.patientApi.shareWith(doId, r, await api.patientApi.decryptSecretIdsOf(r), { requestedPermissions: FULL_WRITE })\n },\n isDecrypted: async (entityToCheck) => {\n return entityToCheck.note != undefined\n },\n } as EntityFacade<Patient>,\n Contact: {\n create: async (api, r) => api.contactApi.createContactWithUser(await api.userApi.getCurrentUser(), r),\n get: async (api, id) => api.contactApi.getContactWithUser(await api.userApi.getCurrentUser(), id),\n share: async (api, r, doId) => {\n return await api.contactApi.shareWith(doId, r, { requestedPermissions: FULL_WRITE })\n },\n isDecrypted: async (entityToCheck) => {\n return entityToCheck.services?.[0].content != undefined && Object.entries(entityToCheck.services?.[0].content).length > 0\n },\n } as EntityFacade<Contact>,\n HealthElement: {\n create: async (api, r) => api.healthcareElementApi.createHealthElementWithUser(await api.userApi.getCurrentUser(), r),\n get: async (api, id) => api.healthcareElementApi.getHealthElementWithUser(await api.userApi.getCurrentUser(), id),\n share: async (api, r, doId) => {\n return await api.healthcareElementApi.shareWith(doId, r, { requestedPermissions: FULL_WRITE })\n },\n isDecrypted: async (entityToCheck) => {\n return entityToCheck.descr != undefined\n },\n } as EntityFacade<HealthElement>,\n CalendarItem: {\n create: async (api, r) => api.calendarItemApi.createCalendarItemWithHcParty(await api.userApi.getCurrentUser(), r),\n get: async (api, id) => api.calendarItemApi.getCalendarItemWithUser(await api.userApi.getCurrentUser(), id),\n share: async (api, r, doId) => {\n return await api.calendarItemApi.shareWith(doId, r, { requestedPermissions: FULL_WRITE })\n },\n isDecrypted: async (entityToCheck) => {\n return entityToCheck.title != undefined\n },\n } as EntityFacade<CalendarItem>,\n}\n\nconst users: { user: User; password: string }[] = []\nconst primitives = new WebCryptoPrimitives(webcrypto as any)\nlet delegateUser: User | undefined = undefined\nlet delegateHcp: HealthcareParty | undefined = undefined\nlet delegateHcpPassword: string | undefined = undefined\n\nlet userGivingAccessBack: User | undefined = undefined\nlet userGivingAccessBackPassword: string | undefined = undefined\nlet hcpGivingAccessBack: HealthcareParty | undefined = undefined\n\nconst entities: EntityCreators = {\n Patient: ({ patientApi }, id, user, _, delegateIds) => {\n return patientApi.newInstance(user, new Patient({ id, firstName: 'test', lastName: 'test', note: 'data', dateOfBirth: 20000101 }), {\n additionalDelegates: Object.fromEntries(delegateIds?.map((id) => [id, AccessLevel.WRITE]) ?? []),\n })\n },\n Contact: ({ contactApi }, id, user, patient, delegateIds) => {\n return contactApi.newInstance(\n user,\n patient!,\n new Contact({ id, services: [new Service({ label: 'svc', content: { fr: { stringValue: 'data' } } })] }),\n {\n additionalDelegates: Object.fromEntries(delegateIds?.map((id) => [id, AccessLevel.WRITE]) ?? []),\n }\n )\n },\n HealthElement: ({ healthcareElementApi }, id, user, patient, delegateIds) => {\n return healthcareElementApi.newInstance(user, patient!, new HealthElement({ id, descr: 'HE' }), {\n additionalDelegates: Object.fromEntries(delegateIds?.map((id) => [id, AccessLevel.WRITE]) ?? []),\n })\n },\n CalendarItem: ({ calendarItemApi }, id, user, patient, delegateIds) => {\n return calendarItemApi.newInstancePatient(user, patient!, new CalendarItem({ id, title: 'CI' }), {\n additionalDelegates: Object.fromEntries(delegateIds?.map((id) => [id, AccessLevel.WRITE]) ?? []),\n })\n },\n}\n\nconst userDefinitions: Record<string, (user: User, password: string, pair: KeyPair<CryptoKey>) => Promise<{ user: User; apis: Apis }>> = {\n 'one available key and one lost key recoverable through transfer keys': async (user, password, originalKey) => {\n const newKey = await primitives.RSA.generateKeyPair(ShaVersion.Sha256)\n const apiWithOnlyNewKey = await IcureApi.initialise(\n env!.iCureUrl,\n {\n username: user.login!,\n password,\n },\n new TestCryptoStrategies(newKey, {\n [fingerprintV1(ua2hex(await primitives.RSA.exportKey(originalKey.publicKey, 'spki')))]: true,\n }),\n webcrypto as any,\n fetch,\n {\n storage: new TestStorage(),\n keyStorage: new TestKeyStorage(),\n }\n )\n const apis = await IcureApi.initialise(\n env!.iCureUrl,\n {\n username: user.login!,\n password,\n },\n new TestCryptoStrategies(originalKey, {\n [fingerprintV1(ua2hex(await primitives.RSA.exportKey(newKey.publicKey, 'spki')))]: true,\n }),\n webcrypto as any,\n fetch,\n {\n storage: new TestStorage(),\n keyStorage: new TestKeyStorage(),\n }\n )\n expect(Object.keys(apis.cryptoApi.userKeysManager.getDecryptionKeys())).to.have.length(2)\n await apiWithOnlyNewKey.cryptoApi.forceReload()\n expect(Object.keys(apiWithOnlyNewKey.cryptoApi.userKeysManager.getDecryptionKeys())).to.have.length(2)\n return { user, apis: apiWithOnlyNewKey }\n },\n 'two available keys': async (user, password, originalKey) => {\n const newKey = await primitives.RSA.generateKeyPair(ShaVersion.Sha256)\n const apiWithOnlyNewKey = await IcureApi.initialise(\n env!.iCureUrl,\n { username: user.login!, password },\n new TestCryptoStrategies(newKey),\n webcrypto as any,\n fetch,\n {\n storage: new TestStorage(),\n keyStorage: new TestKeyStorage(),\n }\n ) // Initializes the new key for the data owner\n const keyStrings = await Promise.all(\n [originalKey, newKey].map(async (pair) => ({\n publicKey: ua2hex(await primitives.RSA.exportKey(pair.publicKey, 'spki')),\n privateKey: ua2hex(await primitives.RSA.exportKey(pair.privateKey, 'pkcs8')),\n }))\n )\n const storage = await testStorageWithKeys([\n {\n dataOwnerId: user.healthcarePartyId ?? user.patientId!,\n pairs: keyStrings.map((key) => {\n return { keyPair: key, shaVersion: ShaVersion.Sha256 }\n }),\n },\n ])\n const apis = await IcureApi.initialise(env!.iCureUrl, { username: user.login!, password }, new TestCryptoStrategies(), webcrypto as any, fetch, {\n entryKeysFactory: storage.keyFactory,\n keyStorage: storage.keyStorage,\n storage: storage.storage,\n })\n return { user, apis }\n },\n 'a single available key in old format': async (user, password, originalKey) => ({\n user,\n apis: await TestApi(env.iCureUrl, user.login!, password, webcrypto as any, originalKey),\n }),\n 'one lost key and one available key': async (user, password) => {\n const newKeyPair = await primitives.RSA.generateKeyPair(ShaVersion.Sha256)\n const apis = await TestApi(env.iCureUrl, user.login!, password, webcrypto as any, newKeyPair)\n await apis.icureMaintenanceTaskApi.createMaintenanceTasksForNewKeypair(user, newKeyPair)\n return { user, apis }\n },\n 'one lost key and one upgraded available key thanks to delegate who gave access back to previous data': async (user, password) => {\n const newKeyPair = await primitives.RSA.generateKeyPair(ShaVersion.Sha256)\n const api = await TestApi(env.iCureUrl, user.login!, password, webcrypto as any, newKeyPair)\n await api.icureMaintenanceTaskApi.createMaintenanceTasksForNewKeypair(user, newKeyPair)\n const giveAccessBackApi = apis['givingAccessBack']\n const keyPairUpdateRequests = (\n await giveAccessBackApi.maintenanceTaskApi.filterMaintenanceTasksByWithUser(\n userGivingAccessBack!,\n undefined,\n undefined,\n new FilterChainMaintenanceTask({\n filter: new MaintenanceTaskAfterDateFilter({\n date: new Date().getTime() - 100000,\n }),\n })\n )\n ).rows!.map((x) => KeyPairUpdateRequest.fromMaintenanceTask(x))\n const concernedRequest = keyPairUpdateRequests.find((x) => x.concernedDataOwnerId === (user.healthcarePartyId ?? user.patientId))\n if (!concernedRequest) throw new Error('Could not find maintenance task')\n await giveAccessBackApi.icureMaintenanceTaskApi.applyKeyPairUpdate(concernedRequest)\n\n await api.cryptoApi.forceReload()\n\n return { user, apis: api }\n },\n}\n\nasync function createPartialsForHcp(\n entityFacades: EntityFacades,\n entityCreators: EntityCreators,\n user: User,\n password: string\n): Promise<KeyPair<CryptoKey>> {\n const key = await primitives.RSA.generateKeyPair(ShaVersion.Sha256)\n const api1 = await TestApi(env!.iCureUrl, user.login!, password, webcrypto as any, key)\n await Object.entries(entityFacades).reduce(async (p, f) => {\n await p\n const type = f[0]\n const facade = f[1]\n const parent = type !== 'Patient' ? await api1.patientApi.getPatientWithUser(user, `partial-${user.id}-Patient`) : undefined\n const record = await entityCreators[type as TestedEntity](api1, `partial-${user.id}-${type}`, user, parent, [hcpGivingAccessBack!.id!])\n await facade.create(api1, record)\n }, Promise.resolve())\n return key\n}\n\nasync function createPartialsForPatient(\n entityFacades: EntityFacades,\n entityCreators: EntityCreators,\n user: User,\n password: string,\n patientCreatorUser: User,\n patientCreatorApis: Apis\n): Promise<KeyPair<CryptoKey>> {\n const key = await primitives.RSA.generateKeyPair(ShaVersion.Sha256)\n const api1 = await TestApi(env!.iCureUrl, user.login!, password, webcrypto as any, key)\n const pat = await patientCreatorApis.patientApi.getPatientWithUser(patientCreatorUser, user.patientId!)\n await patientCreatorApis.patientApi.shareWith(user.patientId!, pat, await patientCreatorApis.patientApi.decryptSecretIdsOf(pat), {\n requestedPermissions: FULL_WRITE,\n })\n await Object.entries(entityFacades)\n .filter((it) => it[0] !== 'Patient')\n .reduce(async (p, f) => {\n await p\n const type = f[0]\n const facade = f[1]\n const parent = await api1.patientApi.getPatientWithUser(user, user.patientId!)\n const record = await entityCreators[type as TestedEntity](api1, `partial-${user.id}-${type}`, user, parent, [hcpGivingAccessBack!.id!])\n await facade.create(api1, record)\n }, Promise.resolve())\n return key\n}\n\nlet env: TestVars\nlet apis: { [key: string]: Apis }\n\ndescribe('Full crypto test - Creation scenarios', async function () {\n before(async function () {\n this.timeout(6000000)\n const initializer = await getEnvironmentInitializer()\n env = await initializer.execute(getEnvVariables())\n\n const api = await initMasterApi(env!)\n const user = await api.userApi.getCurrentUser()\n const dataOwnerId = api.dataOwnerApi.getDataOwnerIdOf(user)\n\n const { userApi, patientApi, healthcarePartyApi, cryptoApi } = api\n\n delegateHcp = await healthcarePartyApi.createHealthcareParty(new HealthcareParty({ id: uuid(), firstName: 'test', lastName: 'test' }))\n delegateUser = await userApi.createUser(\n new User({\n id: `user-${uuid()}-hcp`,\n login: `hcp-delegate-${uuid()}`,\n status: 'ACTIVE',\n healthcarePartyId: delegateHcp.id,\n })\n )\n delegateHcpPassword = await userApi.getToken(delegateUser!.id!, uuid())\n\n hcpGivingAccessBack = await healthcarePartyApi.createHealthcareParty(new HealthcareParty({ id: uuid(), firstName: 'test', lastName: 'test' }))\n userGivingAccessBack = await userApi.createUser(\n new User({\n id: `user-${uuid()}-hcp`,\n login: `hcp-giving-access-back-${uuid()}`,\n status: 'ACTIVE',\n healthcarePartyId: hcpGivingAccessBack.id,\n })\n )\n userGivingAccessBackPassword = await userApi.getToken(userGivingAccessBack!.id!, uuid())\n\n apis = {\n delegate: await TestApi(env.iCureUrl!, delegateUser.login!, delegateHcpPassword, webcrypto as any),\n givingAccessBack: await TestApi(env.iCureUrl!, userGivingAccessBack.login!, userGivingAccessBackPassword, webcrypto as any),\n }\n\n await Object.entries(userDefinitions).reduce(async (p, [login, creationProcess]) => {\n await p\n const newPatientEmail = getTempEmail()\n const patientToCreate = await patientApi.newInstance(user, new Patient({ id: uuid(), firstName: 'test', lastName: 'test' }))\n const patient = await patientApi.createPatientWithUser(user, patientToCreate)\n\n const newHcpEmail = getTempEmail()\n const hcp = await healthcarePartyApi.createHealthcareParty(new HealthcareParty({ id: uuid(), firstName: 'test', lastName: 'test' }))\n\n const newPatientUser = await userApi.createUser(\n new User({\n id: `user-${uuid()}-patient`,\n name: `patient-${login}`,\n login: newPatientEmail,\n email: newPatientEmail,\n status: 'ACTIVE',\n patientId: patient.id,\n })\n )\n const newPatientUserPassword = await userApi.getToken(newPatientUser!.id!, uuid())\n\n const newHcpUser = await userApi.createUser(\n new User({\n id: `user-${uuid()}-hcp`,\n login: newHcpEmail,\n email: newHcpEmail,\n name: `hcp-${login}`,\n status: 'ACTIVE',\n healthcarePartyId: hcp.id,\n })\n )\n const newHcpUserPassword = await userApi.getToken(newHcpUser!.id!, uuid())\n\n const originalKeyPat = await createPartialsForPatient(facades, entities, newPatientUser, newPatientUserPassword, user, api)\n const originalKeyHcp = await createPartialsForHcp(facades, entities, newHcpUser, newHcpUserPassword)\n\n const patDetails = await creationProcess(newPatientUser, newPatientUserPassword, originalKeyPat)\n const hcpDetails = await creationProcess(newHcpUser, newHcpUserPassword, originalKeyHcp)\n\n users.push({ user: patDetails.user, password: newPatientUserPassword })\n apis[patDetails.user.name!] = patDetails.apis\n users.push({ user: hcpDetails.user, password: newHcpUserPassword })\n apis[hcpDetails.user.name!] = hcpDetails.apis\n }, Promise.resolve())\n\n await users\n .filter((it) => it.user.id!.endsWith('patient'))\n .map((it) => it.user)\n .reduce(async (prev, it) => {\n await prev\n const otherUsers = users.filter((u) => u.user.id!.endsWith('patient') && u.user.id !== it.id).map((u) => u.user)\n\n await otherUsers.reduce(async (p, u) => {\n await p\n const patientToShare = await facades.Patient.get(api, it.patientId!)\n const sharedPatient = await facades.Patient.share(api, patientToShare, u.patientId!)\n return Promise.resolve()\n }, Promise.resolve())\n\n return Promise.resolve()\n }, Promise.resolve())\n })\n ;['patient', 'hcp'].forEach((uType) => {\n Object.keys(userDefinitions).forEach((uId) => {\n Object.entries(facades).forEach((f) => {\n it(`Create ${f[0]} as a ${uType} with ${uId}`, async function () {\n if (f[0] === 'Patient' && uType === 'patient') {\n this.skip()\n }\n const { user } = users.find((it) => it.user.name === `${uType}-${uId}`)!\n const facade: EntityFacade<any> = f[1]\n const api = apis[`${uType}-${uId}`]\n\n const parent =\n f[0] !== 'Patient'\n ? uType === 'patient'\n ? await api.patientApi.getPatientWithUser(user, user.patientId!)\n : await api.patientApi.getPatientWithUser(user, `${user.id}-Patient`)\n : undefined\n const record = await entities[f[0] as TestedEntity](api, `${user.id}-${f[0]}`, user, parent)\n const entity = await facade.create(api, record)\n const retrieved = await facade.get(api, entity.id)\n\n expect(entity.id).to.be.not.null\n expect(entity.rev).to.equal(retrieved.rev)\n expect(await facade.isDecrypted(entity)).to.equal(true)\n })\n it(`Create ${f[0]} as delegate with delegation for ${uType} with ${uId}`, async function () {\n const { user } = users.find((it) => it.user.name === `${uType}-${uId}`)!\n const facade: EntityFacade<any> = f[1]\n\n const api = apis['delegate']\n const patApi = apis[`${uType}-${uId}`]\n const dataOwnerId = api.dataOwnerApi.getDataOwnerIdOf(user)\n const dataOwner = (await patApi.dataOwnerApi.getCryptoActorStub(dataOwnerId))!.stub\n\n const parent = f[0] !== 'Patient' ? await api.patientApi.getPatientWithUser(delegateUser!, `delegate-${user.id}-Patient`) : undefined\n\n const record = await entities[f[0] as TestedEntity](api, `delegate-${user.id}-${f[0]}`, delegateUser!, parent, [\n (user.patientId ?? user.healthcarePartyId ?? user.deviceId)!,\n ])\n const entity = await facade.create(api, record)\n const retrieved = await facade.get(api, entity.id)\n expect(entity.id).to.be.not.null\n expect(entity.rev).to.equal(retrieved.rev)\n expect(await facade.isDecrypted(entity)).to.equal(true)\n })\n })\n })\n })\n})\n\ndescribe('Full crypto test - Read/Share scenarios', async function () {\n ;['patient', 'hcp'].forEach((uType) => {\n Object.keys(userDefinitions).forEach((uId) => {\n Object.entries(facades).forEach((f) => {\n it(`Read ${f[0]} as the initial ${uType} with ${uId}`, async function () {\n if (f[0] === 'Patient' && uType === 'patient') {\n this.skip()\n }\n const { user } = users.find((it) => it.user.name === `${uType}-${uId}`)!\n const facade = f[1]\n const api = apis[`${uType}-${uId}`]\n\n const retrievePromise = facade.get(api, `partial-${user.id}-${f[0]}`)\n const lostInitialKey = uId.includes('one lost key and one available key')\n if (uType === 'patient' && lostInitialKey && !isLiteTest()) {\n // Patient with lost key can't prove he has access to data: he will get an error\n let gaveError = false\n try {\n await retrievePromise\n } catch {\n gaveError = true\n }\n expect(gaveError).to.equal(true, 'Patient with lost key should not be able to retrieve data')\n } else {\n const entity = await retrievePromise\n expect(entity.id).to.equal(`partial-${user.id}-${f[0]}`)\n expect(await facade.isDecrypted(entity)).to.equal(!lostInitialKey) // data is accessible only with initial key for this test.\n }\n })\n it(`Read ${f[0]} as a ${uType} with ${uId}`, async function () {\n if (f[0] === 'Patient' && uType === 'patient') {\n this.skip()\n }\n const { user } = users.find((it) => it.user.name === `${uType}-${uId}`)!\n const facade = f[1]\n const api = apis[`${uType}-${uId}`]\n\n const entity = await facade.get(api, `${user.id}-${f[0]}`)\n expect(entity.id).to.equal(`${user.id}-${f[0]}`)\n expect(await facade.isDecrypted(entity)).to.equal(true)\n })\n it(`Read ${f[0]} shared by delegate as a ${uType} with ${uId}`, async () => {\n const { user } = users.find((it) => it.user.name === `${uType}-${uId}`)!\n const facade = f[1]\n const api = apis[`${uType}-${uId}`]\n await api.cryptoApi.forceReload()\n const entity = await facade.get(api, `delegate-${user.id}-${f[0]}`)\n expect(entity.id).to.equal(`delegate-${user.id}-${f[0]}`)\n expect(await facade.isDecrypted(entity)).to.equal(true)\n })\n ;['patient', 'hcp'].forEach((duType) => {\n Object.keys(userDefinitions).forEach((duId) => {\n it(`Share ${f[0]} as a ${uType} with ${uId} to a ${duType} with ${duId}`, async function () {\n if (f[0] === 'Patient' && uType === 'patient') {\n this.skip()\n }\n const { user } = users.find((it) => it.user.name === `${uType}-${uId}`)!\n const { user: delUser } = users.find((it) => it.user.name === `${duType}-${duId}`)!\n const delegateDoId = delUser.healthcarePartyId ?? delUser.patientId\n const facade = f[1]\n const api = apis[`${uType}-${uId}`]\n const delApi = apis[`${duType}-${duId}`]\n // Data was created (in a previous test) after lost key -> fully accessible\n const entity = await facade.share(api, await facade.get(api, `${user.id}-${f[0]}`), delegateDoId)\n const retrieved = await facade.get(api, entity.id)\n expect(entity.rev).to.equal(retrieved.rev)\n\n await delApi.cryptoApi.forceReload()\n const obj = await facade.get(delApi, `${user.id}-${f[0]}`)\n expect(await delApi.cryptoApi.xapi.hasWriteAccess({ entity: obj, type: f[0] as any })).to.equal(true)\n expect(await facade.isDecrypted(obj)).to.equal(true)\n })\n })\n })\n })\n })\n })\n})\n"]}
1
+ {"version":3,"file":"full-crypto-test.js","sourceRoot":"","sources":["../../../../test/icc-x-api/crypto/full-crypto-test.ts"],"names":[],"mappings":"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","sourcesContent":["import { Apis, WebCryptoPrimitives, IcureApi, ShaVersion, ua2hex } from '../../../icc-x-api'\nimport { v4 as uuid } from 'uuid'\nimport { Patient } from '../../../icc-api/model/Patient'\nimport { Contact } from '../../../icc-api/model/Contact'\nimport { HealthElement } from '../../../icc-api/model/HealthElement'\nimport { CalendarItem } from '../../../icc-api/model/CalendarItem'\nimport { EncryptedEntity, FilterChainMaintenanceTask, HealthcareParty, Service, User } from '../../../icc-api/model/models'\nimport { before, describe, it } from 'mocha'\n\nimport { webcrypto } from 'crypto'\nimport 'isomorphic-fetch'\n\nimport { expect } from 'chai'\nimport { getEnvironmentInitializer, getTempEmail, isLiteTest, setLocalStorage, TestUtils } from '../../utils/test_utils'\nimport { TestApi } from '../../utils/TestApi'\nimport { KeyPair } from '../../../icc-x-api/crypto/RSA'\nimport { CryptoPrimitives } from '../../../icc-x-api/crypto/CryptoPrimitives'\nimport { TestKeyStorage, TestStorage, testStorageWithKeys } from '../../utils/TestStorage'\nimport { TestCryptoStrategies } from '../../utils/TestCryptoStrategies'\nimport { MaintenanceTaskAfterDateFilter } from '../../../icc-x-api/filters/MaintenanceTaskAfterDateFilter'\nimport { KeyPairUpdateRequest } from '../../../icc-x-api/maintenance/KeyPairUpdateRequest'\nimport initMasterApi = TestUtils.initMasterApi\nimport { SecureDelegation } from '../../../icc-api/model/SecureDelegation'\nimport AccessLevel = SecureDelegation.AccessLevelEnum\nimport { EntityShareRequest } from '../../../icc-api/model/requests/EntityShareRequest'\nimport RequestedPermissionEnum = EntityShareRequest.RequestedPermissionEnum\nimport { getEnvVariables, TestVars } from '@icure/test-setup/types'\nimport { fingerprintV1 } from '../../../icc-x-api/crypto/utils'\n\nsetLocalStorage(fetch)\n\nconst FULL_WRITE = RequestedPermissionEnum.FULL_WRITE\n\ntype TestedEntity = 'Patient' | 'Contact' | 'HealthElement' | 'CalendarItem'\n\ninterface EntityFacade<T extends EncryptedEntity> {\n create: (api: Apis, record: Omit<T, 'rev'>) => Promise<T>\n get: (api: Apis, id: string) => Promise<T>\n share: (api: Apis, record: T, dataOwnerId: string) => Promise<T>\n isDecrypted: (entityToCheck: T) => Promise<boolean>\n}\n\ntype EntityCreator<T> = (api: Apis, id: string, user: User, patient?: Patient, delegateIds?: string[]) => Promise<T>\n\ninterface EntityFacades {\n Patient: EntityFacade<Patient>\n Contact: EntityFacade<Contact>\n HealthElement: EntityFacade<HealthElement>\n CalendarItem: EntityFacade<CalendarItem>\n}\n\ninterface EntityCreators {\n Patient: EntityCreator<Patient>\n Contact: EntityCreator<Contact>\n HealthElement: EntityCreator<HealthElement>\n CalendarItem: EntityCreator<CalendarItem>\n}\n\nconst facades: EntityFacades = {\n Patient: {\n create: async (api, r) => api.patientApi.createPatientWithUser(await api.userApi.getCurrentUser(), r),\n get: async (api, id) => api.patientApi.getPatientWithUser(await api.userApi.getCurrentUser(), id),\n share: async (api, r, doId) => {\n return await api.patientApi.shareWith(doId, r, await api.patientApi.decryptSecretIdsOf(r), { requestedPermissions: FULL_WRITE })\n },\n isDecrypted: async (entityToCheck) => {\n return entityToCheck.note != undefined\n },\n } as EntityFacade<Patient>,\n Contact: {\n create: async (api, r) => api.contactApi.createContactWithUser(await api.userApi.getCurrentUser(), r),\n get: async (api, id) => api.contactApi.getContactWithUser(await api.userApi.getCurrentUser(), id),\n share: async (api, r, doId) => {\n return await api.contactApi.shareWith(doId, r, { requestedPermissions: FULL_WRITE })\n },\n isDecrypted: async (entityToCheck) => {\n return entityToCheck.services?.[0].content != undefined && Object.entries(entityToCheck.services?.[0].content).length > 0\n },\n } as EntityFacade<Contact>,\n HealthElement: {\n create: async (api, r) => api.healthcareElementApi.createHealthElementWithUser(await api.userApi.getCurrentUser(), r),\n get: async (api, id) => api.healthcareElementApi.getHealthElementWithUser(await api.userApi.getCurrentUser(), id),\n share: async (api, r, doId) => {\n return await api.healthcareElementApi.shareWith(doId, r, { requestedPermissions: FULL_WRITE })\n },\n isDecrypted: async (entityToCheck) => {\n return entityToCheck.descr != undefined\n },\n } as EntityFacade<HealthElement>,\n CalendarItem: {\n create: async (api, r) => api.calendarItemApi.createCalendarItemWithHcParty(await api.userApi.getCurrentUser(), r),\n get: async (api, id) => api.calendarItemApi.getCalendarItemWithUser(await api.userApi.getCurrentUser(), id),\n share: async (api, r, doId) => {\n return await api.calendarItemApi.shareWith(doId, r, { requestedPermissions: FULL_WRITE })\n },\n isDecrypted: async (entityToCheck) => {\n return entityToCheck.title != undefined\n },\n } as EntityFacade<CalendarItem>,\n}\n\nconst users: { user: User; password: string }[] = []\nconst primitives = new WebCryptoPrimitives(webcrypto as any)\nlet delegateUser: User | undefined = undefined\nlet delegateHcp: HealthcareParty | undefined = undefined\nlet delegateHcpPassword: string | undefined = undefined\n\nlet userGivingAccessBack: User | undefined = undefined\nlet userGivingAccessBackPassword: string | undefined = undefined\nlet hcpGivingAccessBack: HealthcareParty | undefined = undefined\n\nconst entities: EntityCreators = {\n Patient: ({ patientApi }, id, user, _, delegateIds) => {\n return patientApi.newInstance(user, new Patient({ id, firstName: 'test', lastName: 'test', note: 'data', dateOfBirth: 20000101 }), {\n additionalDelegates: Object.fromEntries(delegateIds?.map((id) => [id, AccessLevel.WRITE]) ?? []),\n })\n },\n Contact: ({ contactApi }, id, user, patient, delegateIds) => {\n return contactApi.newInstance(\n user,\n patient!,\n new Contact({ id, services: [new Service({ label: 'svc', content: { fr: { stringValue: 'data' } } })] }),\n {\n additionalDelegates: Object.fromEntries(delegateIds?.map((id) => [id, AccessLevel.WRITE]) ?? []),\n }\n )\n },\n HealthElement: ({ healthcareElementApi }, id, user, patient, delegateIds) => {\n return healthcareElementApi.newInstance(user, patient!, new HealthElement({ id, descr: 'HE' }), {\n additionalDelegates: Object.fromEntries(delegateIds?.map((id) => [id, AccessLevel.WRITE]) ?? []),\n })\n },\n CalendarItem: ({ calendarItemApi }, id, user, patient, delegateIds) => {\n return calendarItemApi.newInstancePatient(user, patient!, new CalendarItem({ id, title: 'CI' }), {\n additionalDelegates: Object.fromEntries(delegateIds?.map((id) => [id, AccessLevel.WRITE]) ?? []),\n })\n },\n}\n\nconst userDefinitions: Record<string, (user: User, password: string, pair: KeyPair<CryptoKey>) => Promise<{ user: User; apis: Apis }>> = {\n 'one available key and one lost key recoverable through transfer keys': async (user, password, originalKey) => {\n const newKey = await primitives.RSA.generateKeyPair(ShaVersion.Sha256)\n const apiWithOnlyNewKey = await IcureApi.initialise(\n env!.iCureUrl,\n {\n username: user.login!,\n password,\n },\n new TestCryptoStrategies(newKey, {\n [fingerprintV1(ua2hex(await primitives.RSA.exportKey(originalKey.publicKey, 'spki')))]: true,\n }),\n webcrypto as any,\n fetch,\n {\n storage: new TestStorage(),\n keyStorage: new TestKeyStorage(),\n }\n )\n const apis = await IcureApi.initialise(\n env!.iCureUrl,\n {\n username: user.login!,\n password,\n },\n new TestCryptoStrategies(originalKey, {\n [fingerprintV1(ua2hex(await primitives.RSA.exportKey(newKey.publicKey, 'spki')))]: true,\n }),\n webcrypto as any,\n fetch,\n {\n storage: new TestStorage(),\n keyStorage: new TestKeyStorage(),\n }\n )\n expect(Object.keys(apis.cryptoApi.userKeysManager.getDecryptionKeys())).to.have.length(2)\n await apiWithOnlyNewKey.cryptoApi.forceReload()\n expect(Object.keys(apiWithOnlyNewKey.cryptoApi.userKeysManager.getDecryptionKeys())).to.have.length(2)\n return { user, apis: apiWithOnlyNewKey }\n },\n 'two available keys': async (user, password, originalKey) => {\n const newKey = await primitives.RSA.generateKeyPair(ShaVersion.Sha256)\n const apiWithOnlyNewKey = await IcureApi.initialise(\n env!.iCureUrl,\n { username: user.login!, password },\n new TestCryptoStrategies(newKey),\n webcrypto as any,\n fetch,\n {\n storage: new TestStorage(),\n keyStorage: new TestKeyStorage(),\n }\n ) // Initializes the new key for the data owner\n const keyStrings = await Promise.all(\n [originalKey, newKey].map(async (pair) => ({\n publicKey: ua2hex(await primitives.RSA.exportKey(pair.publicKey, 'spki')),\n privateKey: ua2hex(await primitives.RSA.exportKey(pair.privateKey, 'pkcs8')),\n }))\n )\n const storage = await testStorageWithKeys([\n {\n dataOwnerId: user.healthcarePartyId ?? user.patientId!,\n pairs: keyStrings.map((key) => {\n return { keyPair: key, shaVersion: ShaVersion.Sha256 }\n }),\n },\n ])\n const apis = await IcureApi.initialise(env!.iCureUrl, { username: user.login!, password }, new TestCryptoStrategies(), webcrypto as any, fetch, {\n entryKeysFactory: storage.keyFactory,\n keyStorage: storage.keyStorage,\n storage: storage.storage,\n })\n return { user, apis }\n },\n 'a single available key in old format': async (user, password, originalKey) => ({\n user,\n apis: await TestApi(env.iCureUrl, user.login!, password, webcrypto as any, originalKey),\n }),\n 'one lost key and one available key': async (user, password) => {\n const newKeyPair = await primitives.RSA.generateKeyPair(ShaVersion.Sha256)\n const apis = await TestApi(env.iCureUrl, user.login!, password, webcrypto as any, newKeyPair)\n await apis.icureMaintenanceTaskApi.createMaintenanceTasksForNewKeypair(user, newKeyPair)\n return { user, apis }\n },\n 'one lost key and one upgraded available key thanks to delegate who gave access back to previous data': async (user, password) => {\n const newKeyPair = await primitives.RSA.generateKeyPair(ShaVersion.Sha256)\n const api = await TestApi(env.iCureUrl, user.login!, password, webcrypto as any, newKeyPair)\n await api.icureMaintenanceTaskApi.createMaintenanceTasksForNewKeypair(user, newKeyPair)\n const giveAccessBackApi = apis['givingAccessBack']\n const keyPairUpdateRequests = (\n await giveAccessBackApi.maintenanceTaskApi.filterMaintenanceTasksByWithUser(\n userGivingAccessBack!,\n undefined,\n undefined,\n new FilterChainMaintenanceTask({\n filter: new MaintenanceTaskAfterDateFilter({\n date: new Date().getTime() - 100000,\n }),\n })\n )\n ).rows!.map((x) => KeyPairUpdateRequest.fromMaintenanceTask(x))\n const concernedRequest = keyPairUpdateRequests.find((x) => x.concernedDataOwnerId === (user.healthcarePartyId ?? user.patientId))\n if (!concernedRequest) throw new Error('Could not find maintenance task')\n await giveAccessBackApi.icureMaintenanceTaskApi.applyKeyPairUpdate(concernedRequest)\n\n await api.cryptoApi.forceReload()\n\n return { user, apis: api }\n },\n}\n\nasync function createPartialsForHcp(\n entityFacades: EntityFacades,\n entityCreators: EntityCreators,\n user: User,\n password: string\n): Promise<KeyPair<CryptoKey>> {\n const key = await primitives.RSA.generateKeyPair(ShaVersion.Sha256)\n const api1 = await TestApi(env!.iCureUrl, user.login!, password, webcrypto as any, key)\n await Object.entries(entityFacades).reduce(async (p, f) => {\n await p\n const type = f[0]\n const facade = f[1]\n const parent = type !== 'Patient' ? await api1.patientApi.getPatientWithUser(user, `partial-${user.id}-Patient`) : undefined\n const record = await entityCreators[type as TestedEntity](api1, `partial-${user.id}-${type}`, user, parent, [hcpGivingAccessBack!.id!])\n await facade.create(api1, record)\n }, Promise.resolve())\n return key\n}\n\nasync function createPartialsForPatient(\n entityFacades: EntityFacades,\n entityCreators: EntityCreators,\n user: User,\n password: string,\n patientCreatorUser: User,\n patientCreatorApis: Apis\n): Promise<KeyPair<CryptoKey>> {\n const key = await primitives.RSA.generateKeyPair(ShaVersion.Sha256)\n const api1 = await TestApi(env!.iCureUrl, user.login!, password, webcrypto as any, key)\n const pat = await patientCreatorApis.patientApi.getPatientWithUser(patientCreatorUser, user.patientId!)\n await patientCreatorApis.patientApi.shareWith(user.patientId!, pat, await patientCreatorApis.patientApi.decryptSecretIdsOf(pat), {\n requestedPermissions: FULL_WRITE,\n })\n await Object.entries(entityFacades)\n .filter((it) => it[0] !== 'Patient')\n .reduce(async (p, f) => {\n await p\n const type = f[0]\n const facade = f[1]\n const parent = await api1.patientApi.getPatientWithUser(user, user.patientId!)\n const record = await entityCreators[type as TestedEntity](api1, `partial-${user.id}-${type}`, user, parent, [hcpGivingAccessBack!.id!])\n await facade.create(api1, record)\n }, Promise.resolve())\n return key\n}\n\nlet env: TestVars\nlet apis: { [key: string]: Apis }\n\ndescribe('Full crypto test - Creation scenarios', async function () {\n before(async function () {\n this.timeout(6000000)\n const initializer = await getEnvironmentInitializer()\n env = await initializer.execute(getEnvVariables())\n\n const api = await initMasterApi(env!)\n const user = await api.userApi.getCurrentUser()\n const dataOwnerId = api.dataOwnerApi.getDataOwnerIdOf(user)\n\n const { userApi, patientApi, healthcarePartyApi, cryptoApi } = api\n\n delegateHcp = await healthcarePartyApi.createHealthcareParty(new HealthcareParty({ id: uuid(), firstName: 'test', lastName: 'test' }))\n delegateUser = await userApi.createUser(\n new User({\n id: `user-${uuid()}-hcp`,\n login: `hcp-delegate-${uuid()}`,\n status: 'ACTIVE',\n healthcarePartyId: delegateHcp.id,\n })\n )\n delegateHcpPassword = await userApi.getToken(delegateUser!.id!, uuid())\n\n hcpGivingAccessBack = await healthcarePartyApi.createHealthcareParty(new HealthcareParty({ id: uuid(), firstName: 'test', lastName: 'test' }))\n userGivingAccessBack = await userApi.createUser(\n new User({\n id: `user-${uuid()}-hcp`,\n login: `hcp-giving-access-back-${uuid()}`,\n status: 'ACTIVE',\n healthcarePartyId: hcpGivingAccessBack.id,\n })\n )\n userGivingAccessBackPassword = await userApi.getToken(userGivingAccessBack!.id!, uuid())\n\n apis = {\n delegate: await TestApi(env.iCureUrl!, delegateUser.login!, delegateHcpPassword, webcrypto as any),\n givingAccessBack: await TestApi(env.iCureUrl!, userGivingAccessBack.login!, userGivingAccessBackPassword, webcrypto as any),\n }\n\n await Object.entries(userDefinitions).reduce(async (p, [login, creationProcess]) => {\n await p\n const newPatientEmail = getTempEmail()\n const patientToCreate = await patientApi.newInstance(user, new Patient({ id: uuid(), firstName: 'test', lastName: 'test' }))\n const patient = await patientApi.createPatientWithUser(user, patientToCreate)\n\n const newHcpEmail = getTempEmail()\n const hcp = await healthcarePartyApi.createHealthcareParty(new HealthcareParty({ id: uuid(), firstName: 'test', lastName: 'test' }))\n\n const newPatientUser = await userApi.createUser(\n new User({\n id: `user-${uuid()}-patient`,\n name: `patient-${login}`,\n login: newPatientEmail,\n email: newPatientEmail,\n status: 'ACTIVE',\n patientId: patient.id,\n })\n )\n const newPatientUserPassword = await userApi.getToken(newPatientUser!.id!, uuid())\n\n const newHcpUser = await userApi.createUser(\n new User({\n id: `user-${uuid()}-hcp`,\n login: newHcpEmail,\n email: newHcpEmail,\n name: `hcp-${login}`,\n status: 'ACTIVE',\n healthcarePartyId: hcp.id,\n })\n )\n const newHcpUserPassword = await userApi.getToken(newHcpUser!.id!, uuid())\n\n const originalKeyPat = await createPartialsForPatient(facades, entities, newPatientUser, newPatientUserPassword, user, api)\n const originalKeyHcp = await createPartialsForHcp(facades, entities, newHcpUser, newHcpUserPassword)\n\n const patDetails = await creationProcess(newPatientUser, newPatientUserPassword, originalKeyPat)\n const hcpDetails = await creationProcess(newHcpUser, newHcpUserPassword, originalKeyHcp)\n\n users.push({ user: patDetails.user, password: newPatientUserPassword })\n apis[patDetails.user.name!] = patDetails.apis\n users.push({ user: hcpDetails.user, password: newHcpUserPassword })\n apis[hcpDetails.user.name!] = hcpDetails.apis\n }, Promise.resolve())\n\n await users\n .filter((it) => it.user.id!.endsWith('patient'))\n .map((it) => it.user)\n .reduce(async (prev, it) => {\n await prev\n const otherUsers = users.filter((u) => u.user.id!.endsWith('patient') && u.user.id !== it.id).map((u) => u.user)\n\n await otherUsers.reduce(async (p, u) => {\n await p\n const patientToShare = await facades.Patient.get(api, it.patientId!)\n const sharedPatient = await facades.Patient.share(api, patientToShare, u.patientId!)\n return Promise.resolve()\n }, Promise.resolve())\n\n return Promise.resolve()\n }, Promise.resolve())\n })\n ;['patient', 'hcp'].forEach((uType) => {\n Object.keys(userDefinitions).forEach((uId) => {\n Object.entries(facades).forEach((f) => {\n it(`Create ${f[0]} as a ${uType} with ${uId}`, async function () {\n if (f[0] === 'Patient' && uType === 'patient') {\n this.skip()\n }\n const { user } = users.find((it) => it.user.name === `${uType}-${uId}`)!\n const facade: EntityFacade<any> = f[1]\n const api = apis[`${uType}-${uId}`]\n\n const parent =\n f[0] !== 'Patient'\n ? uType === 'patient'\n ? await api.patientApi.getPatientWithUser(user, user.patientId!)\n : await api.patientApi.getPatientWithUser(user, `${user.id}-Patient`)\n : undefined\n const record = await entities[f[0] as TestedEntity](api, `${user.id}-${f[0]}`, user, parent)\n const entity = await facade.create(api, record)\n const retrieved = await facade.get(api, entity.id)\n\n expect(entity.id).to.be.not.null\n expect(entity.rev).to.equal(retrieved.rev)\n expect(await facade.isDecrypted(entity)).to.equal(true)\n })\n it(`Create ${f[0]} as delegate with delegation for ${uType} with ${uId}`, async function () {\n const { user } = users.find((it) => it.user.name === `${uType}-${uId}`)!\n const facade: EntityFacade<any> = f[1]\n\n const api = apis['delegate']\n const patApi = apis[`${uType}-${uId}`]\n const dataOwnerId = api.dataOwnerApi.getDataOwnerIdOf(user)\n const dataOwner = (await patApi.dataOwnerApi.getCryptoActorStub(dataOwnerId))!.stub\n\n const parent = f[0] !== 'Patient' ? await api.patientApi.getPatientWithUser(delegateUser!, `delegate-${user.id}-Patient`) : undefined\n\n const record = await entities[f[0] as TestedEntity](api, `delegate-${user.id}-${f[0]}`, delegateUser!, parent, [\n (user.patientId ?? user.healthcarePartyId ?? user.deviceId)!,\n ])\n const entity = await facade.create(api, record)\n const retrieved = await facade.get(api, entity.id)\n expect(entity.id).to.be.not.null\n expect(entity.rev).to.equal(retrieved.rev)\n expect(await facade.isDecrypted(entity)).to.equal(true)\n })\n })\n })\n })\n})\n\ndescribe('Full crypto test - Read/Share scenarios', async function () {\n ;['patient', 'hcp'].forEach((uType) => {\n Object.keys(userDefinitions).forEach((uId) => {\n Object.entries(facades).forEach((f) => {\n it(`Read ${f[0]} as the initial ${uType} with ${uId}`, async function () {\n if (f[0] === 'Patient' && uType === 'patient') {\n this.skip()\n }\n const { user } = users.find((it) => it.user.name === `${uType}-${uId}`)!\n const facade = f[1]\n const api = apis[`${uType}-${uId}`]\n\n const retrievePromise = facade.get(api, `partial-${user.id}-${f[0]}`)\n const lostInitialKey = uId.includes('one lost key and one available key')\n if (uType === 'patient' && lostInitialKey && !isLiteTest()) {\n // Patient with lost key can't prove he has access to data: he will get an error\n let gaveError = false\n try {\n await retrievePromise\n } catch {\n gaveError = true\n }\n expect(gaveError).to.equal(true, 'Patient with lost key should not be able to retrieve data')\n } else {\n const entity = await retrievePromise\n expect(entity.id).to.equal(`partial-${user.id}-${f[0]}`)\n expect(await facade.isDecrypted(entity)).to.equal(!lostInitialKey) // data is accessible only with initial key for this test.\n }\n })\n it(`Read ${f[0]} as a ${uType} with ${uId}`, async function () {\n if (f[0] === 'Patient' && uType === 'patient') {\n this.skip()\n }\n const { user } = users.find((it) => it.user.name === `${uType}-${uId}`)!\n const facade = f[1]\n const api = apis[`${uType}-${uId}`]\n\n const entity = await facade.get(api, `${user.id}-${f[0]}`)\n expect(entity.id).to.equal(`${user.id}-${f[0]}`)\n expect(await facade.isDecrypted(entity)).to.equal(true)\n })\n it(`Read ${f[0]} shared by delegate as a ${uType} with ${uId}`, async () => {\n const { user } = users.find((it) => it.user.name === `${uType}-${uId}`)!\n const facade = f[1]\n const api = apis[`${uType}-${uId}`]\n await api.cryptoApi.forceReload()\n const entity = await facade.get(api, `delegate-${user.id}-${f[0]}`)\n expect(entity.id).to.equal(`delegate-${user.id}-${f[0]}`)\n expect(await facade.isDecrypted(entity)).to.equal(true)\n })\n ;['patient', 'hcp'].forEach((duType) => {\n Object.keys(userDefinitions).forEach((duId) => {\n it(`Share ${f[0]} as a ${uType} with ${uId} to a ${duType} with ${duId}`, async function () {\n if (f[0] === 'Patient' && uType === 'patient') {\n this.skip()\n }\n const { user } = users.find((it) => it.user.name === `${uType}-${uId}`)!\n const { user: delUser } = users.find((it) => it.user.name === `${duType}-${duId}`)!\n const delegateDoId = delUser.healthcarePartyId ?? delUser.patientId\n const facade = f[1]\n const api = apis[`${uType}-${uId}`]\n const delApi = apis[`${duType}-${duId}`]\n // Data was created (in a previous test) after lost key -> fully accessible\n const entity = await facade.share(api, await facade.get(api, `${user.id}-${f[0]}`), delegateDoId)\n const retrieved = await facade.get(api, entity.id)\n expect(entity.rev).to.equal(retrieved.rev)\n\n await delApi.cryptoApi.forceReload()\n const obj = await facade.get(delApi, `${user.id}-${f[0]}`)\n expect(await delApi.cryptoApi.xapi.hasWriteAccess({ entity: obj, type: f[0] as any })).to.equal(true)\n expect(await facade.isDecrypted(obj)).to.equal(true)\n })\n })\n })\n })\n })\n })\n})\n"]}
@@ -52,8 +52,8 @@ describe('Legacy delegations migration test', () => {
52
52
  * X, X2 are external hcps, not related to A/B/P.
53
53
  */
54
54
  // prettier-ignore
55
- function createTestDataAndApis(useFakeKeyForAesExchangeKeyEntry = false) {
56
- return __awaiter(this, void 0, void 0, function* () {
55
+ function createTestDataAndApis() {
56
+ return __awaiter(this, arguments, void 0, function* (useFakeKeyForAesExchangeKeyEntry = false) {
57
57
  // The following data was created for test purposes only and does not contain any real key / secrets.
58
58
  const pId = (0, crypto_1.randomUUID)();
59
59
  const pLogin = `parent-${(0, crypto_1.randomUUID)()}`;
@@ -88,7 +88,7 @@ describe('Legacy delegations migration test', () => {
88
88
  {
89
89
  [pId]: {
90
90
  '3b42514690fbb161a5179d0203010001': // pragma: allowlist secret
91
- '4ca457e66519a3f403e089f56f3838a18af16e47029d33ca40eca6a24d1f213809851920b8d159e3879284e5e8d1e0c64be874261d3e0003c43a21ddab9301f8a54161911d3bebe3b1ee6d2a040ec88caa484b6ffd46200bc6eb1a767f309e960f977b9e82d81a0b4961b517e89f24cbc9d0133f955a8d6f792486b1e5dcd9088fe5ecc07b11230b1960013c914041e5de3e9b3c37fa4c2a44dcf2136aae57e000acfe824dacd900bf6be5f6b4f3c41534237a01e14d728065c586dbfd3eeb81ad070218be3e2f70757e9ca5d940afa0b67e02d41e68c1c10935157bc6bd3c06eda95f23c10ca60b649a5ec32903c2a995c0b97fb40cdf454c53621304b0d5b0',
91
+ '4ca457e66519a3f403e089f56f3838a18af16e47029d33ca40eca6a24d1f213809851920b8d159e3879284e5e8d1e0c64be874261d3e0003c43a21ddab9301f8a54161911d3bebe3b1ee6d2a040ec88caa484b6ffd46200bc6eb1a767f309e960f977b9e82d81a0b4961b517e89f24cbc9d0133f955a8d6f792486b1e5dcd9088fe5ecc07b11230b1960013c914041e5de3e9b3c37fa4c2a44dcf2136aae57e000acfe824dacd900bf6be5f6b4f3c41534237a01e14d728065c586dbfd3eeb81ad070218be3e2f70757e9ca5d940afa0b67e02d41e68c1c10935157bc6bd3c06eda95f23c10ca60b649a5ec32903c2a995c0b97fb40cdf454c53621304b0d5b0', // pragma: allowlist secret
92
92
  b59b1e44efebd4db537ced0203010001: '50864963c90cc12704b35ec6cd15ee40a2f4fd4dcb1cf287612346eab4df139008adef1c6d778e35aa7cb58251ff34d6bf1b0faa59d5453c328fa381b175143f41ce66463146b9a02d546cea0065bf62d1ce58e27a8d3bb8bebbb97b76c7e0d7a67b481fdc5082e99aa0521026eb89344b9404da04b0a69988e03724421747e47ab544ed2c55d0424f2837e641f9df4f4ece731e38f9a16d056d9fcf442730c50b3cabcdfbd8241677648639af75198bd30ded0f0fa2db0f8ce80cf86350cef278ce1c7a5426262ceebcc6be5579892d8e066763e216e1592f3f5faa13c561f73400549f5ba2bd618fb308ef99d52cc360ce30988af058caca8c23113933f588', // pragma: allowlist secret
93
93
  },
94
94
  [aId]: {
@@ -124,7 +124,7 @@ describe('Legacy delegations migration test', () => {
124
124
  {
125
125
  [pId]: {
126
126
  '3b42514690fbb161a5179d0203010001': // pragma: allowlist secret
127
- '5e186cec6d6ddb277aa5421a345045f5f44aa125844e833529fccfeb3a002dd4aef78d84b5b8710ff0aa375436e2abdea07a2cb186cd914fa8b8fb86ab1201b109d802927b49517322ac6521600a123ee03d9383154b6f0fa0e99a8ca6e73e07ceed4aeb835649a850316c5585b2a69ac6703c7154f2db981913bac36a0cea515c70c505d1dc3a7e3a6db519cf7b68737a80ad102cc575959b08fbe327644e7d1b7da0737bfa6ededdd7bf0538fd3dc040ac57937bebdf3146a566c2619314935bc610e900b9c350fcf21a9b20c47f0ee25112578dc210b6b17c4cad9687d2bd9abab12f03f8b778b74186ac3c61d57058037d0e00903c74d2eaa8b2fdb90e3f',
127
+ '5e186cec6d6ddb277aa5421a345045f5f44aa125844e833529fccfeb3a002dd4aef78d84b5b8710ff0aa375436e2abdea07a2cb186cd914fa8b8fb86ab1201b109d802927b49517322ac6521600a123ee03d9383154b6f0fa0e99a8ca6e73e07ceed4aeb835649a850316c5585b2a69ac6703c7154f2db981913bac36a0cea515c70c505d1dc3a7e3a6db519cf7b68737a80ad102cc575959b08fbe327644e7d1b7da0737bfa6ededdd7bf0538fd3dc040ac57937bebdf3146a566c2619314935bc610e900b9c350fcf21a9b20c47f0ee25112578dc210b6b17c4cad9687d2bd9abab12f03f8b778b74186ac3c61d57058037d0e00903c74d2eaa8b2fdb90e3f', // pragma: allowlist secret
128
128
  '36108978e3371e9aa0ae8f0203010001': // pragma: allowlist secret
129
129
  '89764feb4d23d8313d58c0568088ecf9f320dd285eb762eaee8593a9ecc884a54e4eb6cd93a87f1383f345b94b8a7f1d20dda33d972ab4460aef742d44837648403234700a5a9f85032b025c533aebdc7bea07dec17c7a1737a51f873ec36c689a29b3314fa2d0f77d7e83e71e5a1de1392a6e92fb9881d811253f2bc00db0798e213899a85bcf0bafeaf8b972c40b1a0d1dd3109e6a8bc9309caa5ada9bc41ea62c72fbdf7cf49cbbe15cd048e6d614a4d65e09f5bed014975ea19c160e3754abd9031e8a41283fa369fa621685aee16c5a5d18a1811fde27869cb156a00fe28ae42c9ff498f2c3dd88a392ac9d68d9885556effe62850681fa8fbe5e02781f', // pragma: allowlist secret
130
130
  },
@@ -155,7 +155,7 @@ describe('Legacy delegations migration test', () => {
155
155
  {
156
156
  owner: aId,
157
157
  delegatedTo: aId,
158
- key: '4bd1316d494e858496f1d6c1200726cb76c7ff98fb47eddb1c0bf5b79712230db3f02bdf60599816e0601628ee349674a0509720e9972d87b2370b60bcbbb19adb2980bc1ab5bab8b9c8adc5516d39d0cf2d6c373fe7285ce0f1018058e52fcc',
158
+ key: '4bd1316d494e858496f1d6c1200726cb76c7ff98fb47eddb1c0bf5b79712230db3f02bdf60599816e0601628ee349674a0509720e9972d87b2370b60bcbbb19adb2980bc1ab5bab8b9c8adc5516d39d0cf2d6c373fe7285ce0f1018058e52fcc', // pragma: allowlist secret
159
159
  tags: ['confidential'],
160
160
  },
161
161
  {
@@ -340,7 +340,7 @@ describe('Legacy delegations migration test', () => {
340
340
  * - Through the delegation A->P A and P can access all the legacy metadata available to P (but not the confidential secret id)
341
341
  */
342
342
  it('sharing data created with legacy api by the same user ', () => __awaiter(void 0, void 0, void 0, function* () {
343
- var _e, _f;
343
+ var _a, _b;
344
344
  console.log('Creating test data');
345
345
  const { apis, ids, patient, patientConfidentialSecretId, users, patientNote } = yield createTestDataAndApis();
346
346
  console.log('Starting test');
@@ -349,7 +349,7 @@ describe('Legacy delegations migration test', () => {
349
349
  const sharedPatient = yield apis.a.patientApi.shareWith(ids.x, patient, [...secretIdsKnownByB], {
350
350
  requestedPermissions: RequestedPermissionEnum.FULL_READ,
351
351
  });
352
- const secureDelegations = Object.values((_f = (_e = sharedPatient.securityMetadata) === null || _e === void 0 ? void 0 : _e.secureDelegations) !== null && _f !== void 0 ? _f : {});
352
+ const secureDelegations = Object.values((_b = (_a = sharedPatient.securityMetadata) === null || _a === void 0 ? void 0 : _a.secureDelegations) !== null && _b !== void 0 ? _b : {});
353
353
  (0, chai_1.expect)(secureDelegations).to.have.length(3);
354
354
  (0, chai_1.expect)(secureDelegations.find((d) => d.delegator === ids.a && d.delegate === ids.a)).to.not.be.undefined;
355
355
  (0, chai_1.expect)(secureDelegations.find((d) => d.delegator === ids.a && d.delegate === ids.p)).to.not.be.undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"legacy-metadata-migration-test.js","sourceRoot":"","sources":["../../../../test/icc-x-api/crypto/legacy-metadata-migration-test.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Participants: A, B children hcp of P ; X external hcp, not related to A/B/P.\n *\n\n * Situation 2:\n * Entity E with legacy metadata created by A and shared with P.\n * There is also a confidential secret id (known by A but not P).\n * A wants to share with X as read only.\n * Expected outcome:\n * - A root secure delegation for A\n * - A->A includes the confidential secret id known by A\n * - A delegation from A to P\n * - Through the delegation A->P A and P can access all the legacy metadata available to P (but not the confidential secret id)\n */\n\nimport { EntityWithDelegationTypeName, IcureApi, ShaVersion } from '../../../icc-x-api'\nimport { randomUUID, webcrypto } from 'crypto'\nimport { createNewHcpApi, getEnvironmentInitializer, setLocalStorage, TestUtils } from '../../utils/test_utils'\nimport { getEnvVariables, TestVars } from '@icure/test-setup/types'\nimport { User } from '../../../icc-api/model/User'\nimport { HealthcareParty } from '../../../icc-api/model/HealthcareParty'\nimport { Patient } from '../../../icc-api/model/Patient'\nimport { testStorageWithKeys } from '../../utils/TestStorage'\nimport { TestCryptoStrategies } from '../../utils/TestCryptoStrategies'\nimport { IccPatientApi } from '../../../icc-api'\nimport { expect } from 'chai'\nimport { EntityShareRequest } from '../../../icc-api/model/requests/EntityShareRequest'\nimport initMasterApi = TestUtils.initMasterApi\nimport RequestedPermissionEnum = EntityShareRequest.RequestedPermissionEnum\n\nsetLocalStorage(fetch)\n\nlet env: TestVars\n\ndescribe('Legacy delegations migration test', () => {\n before(async function () {\n this.timeout(600000)\n const initializer = await getEnvironmentInitializer()\n env = await initializer.execute(getEnvVariables())\n })\n\n /**\n * Participants:\n *\n * A, B children hcp of P\n * X, X2 are external hcps, not related to A/B/P.\n */\n // prettier-ignore\n async function createTestDataAndApis(\n useFakeKeyForAesExchangeKeyEntry: boolean = false\n ): Promise<{\n patientConfidentialSecretId: string\n apis: { a: IcureApi; b: IcureApi; p: IcureApi; x: IcureApi; x2: IcureApi }\n users: { a: User; b: User; p: User; x: User; x2: User }\n patient: Patient\n patientNote: string\n ids: { p: string; a: string; b: string; x: string; x2: string }\n }> {\n // The following data was created for test purposes only and does not contain any real key / secrets.\n const pId = randomUUID()\n const pLogin = `parent-${randomUUID()}`\n const pPassword = randomUUID()\n const pPrivateKey =\n '308204be020100300d06092a864886f70d0101010500048204a8308204a40201000282010100b8f7e992be3973d42954ca27da89259961c93cca31c6494b074f6f5992ce7ba1d95fdfaf043d5047b6e492c735d68344e0348f08683f1dae728d1e86c439c8498613ec7c8fb54930afbb9f45c74f4d312ecf5d989cb2edd96f887551792094ddd2d18a4c2dc2107c9b044b755f93f8d63e956e1ff0299fa9ed190845f7f5f69dc510df005bd929fb4fed33b30d6e699e0632485cc4180cf5a130357cf64233a680a1a1cc6b6761188192734916cabda14bb954ba3807b84c92f078fe83eea31260390356a8d53853148191144a4584fef02d28bc8353d3c33a87b156396e5fcb7994165da48138db3a3b986fe1c12d46273a218af63b42514690fbb161a5179d0203010001028201000e18c171b03dab58dd5830eff34a7080780b60d952b721eed8927292090b8e308f8dd6fba7a9b9ec929668f94b091b880198ffd84c2eede6d5a41ba779b24da9622687e76bac629f95efb3fbc56cd87289cc13fe058892c7f77ac18b815d1250b58dc7ff20f2f6a95dc7135926a79daca0fdbd1ed756d4c19be8447bd0a200e17419cdd90af54e3b204c1297054d61a6ba9183dfd280d571ee52ee3ed39959abb36ecf575429727d8130bfb070131a46b473a94798834707431bdd248e873d9a716cc469d7f21b545dc2eb21d892e8d94ee6544bd82e8112e697eeaecf6a01d31bffaaf37558aec381f8d12c8491ff77ce00a1da4e2fe6ddf4e5dd14fe1ef90102818100dd2b49e13111593e91a882ae522c1363e2b5e3a10e71c4599e32eec56d9d01682983232b582f2e0923dd107e259771382dd7ff738be31cbba5095153a636dd44e8b08f47e044bbf5814aebdcfed33f0a32fc2f62bf3a0ded9d8aed48fc8034debbf5399862ca2bac72d9d4ab70f90a6a246c6cf4a62c9cb887ea776dce57511902818100d61925b811da57c10e444528230bdb0156516b5ca9ff89a9e57da8373bf5911d009bf5e8a6ee0d40edb89f01e638a528ce592e27d3e7f2172ce373a3b510f2f5045a5dd9aa4ae28b088553a5d099f95611447df464da04168d88ba69751046229131b5a820f9215548de643a82a04ad062ddd74a2e2f30d88480b115c2aa372502818031e374dbce14aabbd9615870f7ea27498db717ac99b481e4f1316df8acbc10b82d3cfe6ee58a66e8fae4ffb664c65f6c9bb2b055a1054ed2e8ec4c23014838eb354db654313b6fe6760eaf5b7f43a961a4948c1fcb20ce497e12fb694e43a12968de6cea79c63ec9bc72746d63a3597d0dd04357803069fd99f302938b4ad8e902818100c167f835ff12b2417924dd2074006ab81b84f3aac2fb501e056d6d3f704fd6e64f3d9478b60bc83746488883cbb8922279be003f0463bcc388ce741188292681868c27c9d0d7532d6be61d7966272221c8f9899af45c2a63413a29c3c8778a1401fbd8f167d00677a79b1709f024e350ba6f52e3f532b63a72005b789fe0ea6d02818100cd0855c641e6294a1c05667f043eedf539c38bbd357dd20dacb182c96455593c689eafc7844d2ba8cd86ce77a3f3151aa261434cdb4d21367c9c62f73289aecb2719de0aca9857365eb16cc56bffbd9b28835eaa4499971996e63306bfdfea35c86179bd749992501aa6c0f45c0123ef6a8a3bb4344c198a0046b94c3bf506f5' // pragma: allowlist secret\n const pHcpBase: HealthcareParty = {\n id: pId,\n lastName: '8ed642',\n firstName: 'c9d727',\n publicKey:\n '30820122300d06092a864886f70d01010105000382010f003082010a0282010100b8f7e992be3973d42954ca27da89259961c93cca31c6494b074f6f5992ce7ba1d95fdfaf043d5047b6e492c735d68344e0348f08683f1dae728d1e86c439c8498613ec7c8fb54930afbb9f45c74f4d312ecf5d989cb2edd96f887551792094ddd2d18a4c2dc2107c9b044b755f93f8d63e956e1ff0299fa9ed190845f7f5f69dc510df005bd929fb4fed33b30d6e699e0632485cc4180cf5a130357cf64233a680a1a1cc6b6761188192734916cabda14bb954ba3807b84c92f078fe83eea31260390356a8d53853148191144a4584fef02d28bc8353d3c33a87b156396e5fcb7994165da48138db3a3b986fe1c12d46273a218af63b42514690fbb161a5179d0203010001', // pragma: allowlist secret\n }\n const pUserBase: User = {\n id: randomUUID(),\n name: pLogin,\n status: User.StatusEnum.ACTIVE,\n login: pLogin,\n passwordHash: pPassword,\n healthcarePartyId: pId,\n email: pLogin,\n }\n const aId = randomUUID()\n const aLogin = `childA-${randomUUID()}`\n const aPassword = randomUUID()\n const aPrivateKey =\n '308204bd020100300d06092a864886f70d0101010500048204a7308204a30201000282010100e92f6acc40dbf839fa26e14579fcb68b5e8530f7bfada96338d4f986936cf177e242a458cb1811c2c49c469fa84d2c6ba0c0f34ba6e28babfaff863ff9f3938741d4a41b936143adcff5b396ce12f253e1af424ebd75aa133bdf606b1be51142ee4f5310f4ab46b7a7d706034028f81c462a758f0243d3791d27758bcc8af8010116ee70f1e61eb4526d05d245d631459974eea86b500ad0083e7f196ab9c4926487d92aa2849878f2e4093691d0539b9e880ff6717dbe5e7903141aaf796d74100c42c4d33ac2356df7e3e037accf4495c05f2caf57ae47130b1833f95397e1e9324f2abc1e6af56d7297cf48ea2ba0d990cff2f3b59b1e44efebd4db537ced020301000102820100129e03bed566d42be33a2ea48dcabfd37cc004c13c98e3af3beb8eaee9ebed2d0f2316f667e3d8772b35c3b8eab9cea0e795f356c81d63dd5edacbd325646d7a837367220149e71a97751c73857609ca1cabdea898509508cb49beb88e7c63099ef79bf36302381dfa6e833f2e6496fa8e1df81c04db7971a335d87f7c7660ba6ffb6cc0b3089086df855145b69dba0404ae77b1d533693030e8aa17b851c313d9de7b98a2cd5333fbd1b7d9d7d8d4296c2fc794a50003438eccf0d6dc0a0b34c2695d4f40fa8a5d2de12d5579bc3b33208227cff350413702643f31e0d02317da8165c3f7f1b6a18f00fcea5d981904cb1f5c2bd85d30da963184611f0a06d902818100f6860c1d1c53ad2489bc5e967365e226b25bf292c9ca4f01bbee6d7665f544834f553275e6dc373ed69c942d2e889be2537ae5f5672988c63993bc4f95cbb3dc25b3b8cdf7e274b61532b0e101df22cd54735c2d3f353a4d2d48a1e8dcf11089545b3d8b37f4fa2d3d91129d92e67d9937b065a0bf07c7801df87dd8c1c95f4702818100f2261c810d62345f806345b909e8b1d399d961d5f1bd3c580c96c44ba2e6e532ac93f12cdb25fb6fa9e7a823052c2983611b6c359df98be6c7d0e6377a27cd7f0f67f4568fb72c42d7c3bb13afead3b25a30b7827c1f059d9f75c939fc8608afe2882fdeeb3c292ba45647f373c8ff5719c6da1152c94871b722e8129851a42b028181008fe65945d8d6233833ca27f06c75e957ab3f2ece6e49d06a73b7ce5f914e64eabd313f1e415f044482e3ad3ede6dd188803039f15081971c1659dd4f1b62679fb6c63cb6c5de834012099fe407c2a73ef1efd0bb7cace6564c7b9c3f2050fad51ecf8f92275cb1781cfb04c1c41114f98ddf42c35d1efe5e13a08c5d2d690d5b02818033d7a2fca22fe744970929f13ec4d9e592a7aec18e3ad483895671fa3b8b3180d2dfed9f8bdfaae032410d8749e1359612213bde92cecd7c0045a234386bf31c03e15eb7759762db80b440062c009b8830b50364e54c02f8c71e0191ef9586a099604cd76e07784d06a70e4a79fc8b664b777e527d25e8e3a7b0ca7cc8ad99f70281803b9df4b2e66d849b269300fe42c3136d929fdc184d51283a9fe25772a796ed710b475e85a4e442519a207eeb66e0d89d552798a9b2eb2ebb329109cf4fbce35feba75025a157b57c98776dbe9f04c8937e5cd34021b68ffac95c23c3129967a3aa82ddda35098ba55958e3531fa226825a2685e1ce94353a22a03a1eb9b1a9a0' // pragma: allowlist secret\n const aHcpBase: HealthcareParty = {\n id: aId,\n lastName: '6144e2',\n firstName: '6ca3b4',\n parentId: pId,\n aesExchangeKeys: {\n [useFakeKeyForAesExchangeKeyEntry ? 'x0' : '30820122300d06092a864886f70d01010105000382010f003082010a0282010100e92f6acc40dbf839fa26e14579fcb68b5e8530f7bfada96338d4f986936cf177e242a458cb1811c2c49c469fa84d2c6ba0c0f34ba6e28babfaff863ff9f3938741d4a41b936143adcff5b396ce12f253e1af424ebd75aa133bdf606b1be51142ee4f5310f4ab46b7a7d706034028f81c462a758f0243d3791d27758bcc8af8010116ee70f1e61eb4526d05d245d631459974eea86b500ad0083e7f196ab9c4926487d92aa2849878f2e4093691d0539b9e880ff6717dbe5e7903141aaf796d74100c42c4d33ac2356df7e3e037accf4495c05f2caf57ae47130b1833f95397e1e9324f2abc1e6af56d7297cf48ea2ba0d990cff2f3b59b1e44efebd4db537ced0203010001']: // pragma: allowlist secret\n {\n [pId]: {\n '3b42514690fbb161a5179d0203010001': // pragma: allowlist secret\n '4ca457e66519a3f403e089f56f3838a18af16e47029d33ca40eca6a24d1f213809851920b8d159e3879284e5e8d1e0c64be874261d3e0003c43a21ddab9301f8a54161911d3bebe3b1ee6d2a040ec88caa484b6ffd46200bc6eb1a767f309e960f977b9e82d81a0b4961b517e89f24cbc9d0133f955a8d6f792486b1e5dcd9088fe5ecc07b11230b1960013c914041e5de3e9b3c37fa4c2a44dcf2136aae57e000acfe824dacd900bf6be5f6b4f3c41534237a01e14d728065c586dbfd3eeb81ad070218be3e2f70757e9ca5d940afa0b67e02d41e68c1c10935157bc6bd3c06eda95f23c10ca60b649a5ec32903c2a995c0b97fb40cdf454c53621304b0d5b0', // pragma: allowlist secret\n b59b1e44efebd4db537ced0203010001:\n '50864963c90cc12704b35ec6cd15ee40a2f4fd4dcb1cf287612346eab4df139008adef1c6d778e35aa7cb58251ff34d6bf1b0faa59d5453c328fa381b175143f41ce66463146b9a02d546cea0065bf62d1ce58e27a8d3bb8bebbb97b76c7e0d7a67b481fdc5082e99aa0521026eb89344b9404da04b0a69988e03724421747e47ab544ed2c55d0424f2837e641f9df4f4ece731e38f9a16d056d9fcf442730c50b3cabcdfbd8241677648639af75198bd30ded0f0fa2db0f8ce80cf86350cef278ce1c7a5426262ceebcc6be5579892d8e066763e216e1592f3f5faa13c561f73400549f5ba2bd618fb308ef99d52cc360ce30988af058caca8c23113933f588', // pragma: allowlist secret\n },\n [aId]: {\n b59b1e44efebd4db537ced0203010001:\n '189ab5f91d1401fe4c8d2be8e044dcb80211fbf1f310d154a21e32b2b7c0cca715178b42a9a5bbd136b81eed1158da5c8e600e265b38c2b608127b343f0d8da301d80eb24a620ed64bec091771a092a2072a922c2852de55942cc99ae0f9c609150c9621cbaf27740105b28e33668ad0a960c13f884029bb1c8253d646b503ac597f8dbb6ce79b64e7b3929b3a3b649805fb327c2d855f47947e8d5dbf9aa4a0da56b9c1030e9fb1f415d0ee48d91d11c320d1bcba9b96a50574ab406f84629edbb86c68ca548d9dcdd08b4d63c93b3d654e810baaf0782068bc91934fb19f9ab46d940dd3d3e27fc6ac1bcd47440f098d97a9b454df929ba60ae0aa5efe7861', // pragma: allowlist secret\n },\n },\n },\n publicKey:\n '30820122300d06092a864886f70d01010105000382010f003082010a0282010100e92f6acc40dbf839fa26e14579fcb68b5e8530f7bfada96338d4f986936cf177e242a458cb1811c2c49c469fa84d2c6ba0c0f34ba6e28babfaff863ff9f3938741d4a41b936143adcff5b396ce12f253e1af424ebd75aa133bdf606b1be51142ee4f5310f4ab46b7a7d706034028f81c462a758f0243d3791d27758bcc8af8010116ee70f1e61eb4526d05d245d631459974eea86b500ad0083e7f196ab9c4926487d92aa2849878f2e4093691d0539b9e880ff6717dbe5e7903141aaf796d74100c42c4d33ac2356df7e3e037accf4495c05f2caf57ae47130b1833f95397e1e9324f2abc1e6af56d7297cf48ea2ba0d990cff2f3b59b1e44efebd4db537ced0203010001', // pragma: allowlist secret\n }\n const aUserBase: User = {\n id: randomUUID(),\n name: aLogin,\n status: User.StatusEnum.ACTIVE,\n login: aLogin,\n passwordHash: aPassword,\n healthcarePartyId: aId,\n autoDelegations: {\n all: [pId],\n },\n email: aLogin,\n }\n const bId = randomUUID()\n const bLogin = `childB-${randomUUID()}`\n const bPassword = randomUUID()\n const bPrivateKey =\n '308204bc020100300d06092a864886f70d0101010500048204a6308204a20201000282010100982330dc464b3e9c583affbfece209976bc045f07b22fb44bcb0ebc27bc9d8406b54e380d195e107c1728499a64012b3251c1c85a2516e73b89a07b1929f0c12d44828677135082e8170b9831dd4ff9e988d098731eadd1443813cb5f6af2fe4c2a2706ba6aeb5bb6bb7889be51eebd83bebbb2a0b55a6d69fdeb66894af47edd6f82a8d30629814b82f17cfd1ef75f47d192eb9577c58f14a5e0d2782b13b796b5a3be780a38b0f69f3d00179d13cc23fcec1e919ac05d88c08c693c711384ad9fc7a21ed28d0e5d3865c15db239a5d727d4c52a344975c97379cc5a195ff4f8c1aacbaa67d6d0fd358b6b5d1a4d0575bc57b2d7736108978e3371e9aa0ae8f0203010001028201002a9bac7afc9ae5399f4242cf4b36110e9de8570e1f46704dd374cf4a8425c7115f9e022b59475b23336bf1b4208a1052a8e183217010d358c88a26fe75fc6242c1be45c696bf8dff8c53f838bef9a0ef9774e486bf15b27e12dbd69775b3a1bbb5410e303019fd1eb4efcd6c2fd2a5a5c53e6388466d6210f8ec4474ecb35c76d2c4269d3a585cdce972673c56818015b9f097ff528e26272b76810cb4f8a1ee5ea04ea26f4cf3c6f78b77c5f58d80628f513a4da76cc1e35a6867af1ab76fe0354e549340221d19bfe04783e34f84eca7bd80867134710adc0665a52eb689d2cf6ecb38ca77d84f4feb8c23539e92ac870b3175c174d8f5643aabc0e7ef3cd102818100ba44b38b24e28d9fb85279c0098b4505e0852ba88b54d2cb8b0e77368c1600bb40b4c0f6dee8b97788e082af0f9045dd54f05ee583fffabc473d16272d03c1aef301541176e7a95f948f8d77b6aad087c54f2de713909efdd5d90a8bbec61067172a97480ba844c25cf64a8b1f0698e2f4dd73af798dd8ab329f7f9bf9a0f9ff02818100d11781567bde00a256ac7ef2c4bf10a5b8b2ebab77c941b7665817f17aa496f166ecd89bb4c50c53d4e836b3369edc2f0f49e64f8dbe7ddaf0fb3898075f6e82ab2c69bc925368904ba459ce08a40ce621dceefa78b64d8eb68752d1cc2a53a1db9718ab1a8703333065cf9b8407174c18f8b085e4aebf32a5bf9b259a6bab71028180492352b04f025a039df75c70e80e7442b37ef6be8e3ef72a0ee6d62e67e0f7d68eb8aa9004c4b29659fb75b4d1529fec213ee4b4101981d54dcf91943e5b9c405a9069f7158e2ef625ba1c1d266f79c3e5d88a38927915c4aba4363cdae2a06c2a2f82093af28e5516f56a1da84809de0bb1ac8bf919963ada7cc039795218f70281802b0aceaa31f78263e8b9bbac580a08f04474388564b43e5df5a87ecd4bf4e3c9afe963b1b1e5ba62eb7a1e008866ed66969c1cd81592b82fc0d9c64dad7edcadf374c2137a7fc70fa532a0f603db59786a5223b3d5f399459e977eda0750534507823426cce02c2d76720ee9b1a5100baf3c4a8255900f75ea9ee5de38ca9f510281802c19faaa1e08ac6337c48af1529f8b8685d2582586986b180377aee8cf4eaadcdbb5869c6f994275b0ae3ecc6aa0ead81296ab9a96eecb44f14fcd9e50ef34d9725e97809b3ed2ed6105102c96ea55a096f292a8d9769c05779f303dc6ad3b30c3c9bea749d58636b3977c9c593557c048b2f82e90fead32b5b510966e548e7a' // pragma: allowlist secret\n const bHcpBase: HealthcareParty = {\n id: bId,\n lastName: '95ee22',\n firstName: '2af696',\n parentId: pId,\n aesExchangeKeys: {\n [useFakeKeyForAesExchangeKeyEntry ? 'x0' : '30820122300d06092a864886f70d01010105000382010f003082010a0282010100982330dc464b3e9c583affbfece209976bc045f07b22fb44bcb0ebc27bc9d8406b54e380d195e107c1728499a64012b3251c1c85a2516e73b89a07b1929f0c12d44828677135082e8170b9831dd4ff9e988d098731eadd1443813cb5f6af2fe4c2a2706ba6aeb5bb6bb7889be51eebd83bebbb2a0b55a6d69fdeb66894af47edd6f82a8d30629814b82f17cfd1ef75f47d192eb9577c58f14a5e0d2782b13b796b5a3be780a38b0f69f3d00179d13cc23fcec1e919ac05d88c08c693c711384ad9fc7a21ed28d0e5d3865c15db239a5d727d4c52a344975c97379cc5a195ff4f8c1aacbaa67d6d0fd358b6b5d1a4d0575bc57b2d7736108978e3371e9aa0ae8f0203010001']: // pragma: allowlist secret\n {\n [pId]: {\n '3b42514690fbb161a5179d0203010001': // pragma: allowlist secret\n '5e186cec6d6ddb277aa5421a345045f5f44aa125844e833529fccfeb3a002dd4aef78d84b5b8710ff0aa375436e2abdea07a2cb186cd914fa8b8fb86ab1201b109d802927b49517322ac6521600a123ee03d9383154b6f0fa0e99a8ca6e73e07ceed4aeb835649a850316c5585b2a69ac6703c7154f2db981913bac36a0cea515c70c505d1dc3a7e3a6db519cf7b68737a80ad102cc575959b08fbe327644e7d1b7da0737bfa6ededdd7bf0538fd3dc040ac57937bebdf3146a566c2619314935bc610e900b9c350fcf21a9b20c47f0ee25112578dc210b6b17c4cad9687d2bd9abab12f03f8b778b74186ac3c61d57058037d0e00903c74d2eaa8b2fdb90e3f', // pragma: allowlist secret\n '36108978e3371e9aa0ae8f0203010001': // pragma: allowlist secret\n '89764feb4d23d8313d58c0568088ecf9f320dd285eb762eaee8593a9ecc884a54e4eb6cd93a87f1383f345b94b8a7f1d20dda33d972ab4460aef742d44837648403234700a5a9f85032b025c533aebdc7bea07dec17c7a1737a51f873ec36c689a29b3314fa2d0f77d7e83e71e5a1de1392a6e92fb9881d811253f2bc00db0798e213899a85bcf0bafeaf8b972c40b1a0d1dd3109e6a8bc9309caa5ada9bc41ea62c72fbdf7cf49cbbe15cd048e6d614a4d65e09f5bed014975ea19c160e3754abd9031e8a41283fa369fa621685aee16c5a5d18a1811fde27869cb156a00fe28ae42c9ff498f2c3dd88a392ac9d68d9885556effe62850681fa8fbe5e02781f', // pragma: allowlist secret\n },\n },\n },\n publicKey:\n '30820122300d06092a864886f70d01010105000382010f003082010a0282010100982330dc464b3e9c583affbfece209976bc045f07b22fb44bcb0ebc27bc9d8406b54e380d195e107c1728499a64012b3251c1c85a2516e73b89a07b1929f0c12d44828677135082e8170b9831dd4ff9e988d098731eadd1443813cb5f6af2fe4c2a2706ba6aeb5bb6bb7889be51eebd83bebbb2a0b55a6d69fdeb66894af47edd6f82a8d30629814b82f17cfd1ef75f47d192eb9577c58f14a5e0d2782b13b796b5a3be780a38b0f69f3d00179d13cc23fcec1e919ac05d88c08c693c711384ad9fc7a21ed28d0e5d3865c15db239a5d727d4c52a344975c97379cc5a195ff4f8c1aacbaa67d6d0fd358b6b5d1a4d0575bc57b2d7736108978e3371e9aa0ae8f0203010001', // pragma: allowlist secret\n }\n const bUserBase: User = {\n id: randomUUID(),\n name: bLogin,\n status: User.StatusEnum.ACTIVE,\n login: bLogin,\n passwordHash: bPassword,\n groupId: 'test-group',\n healthcarePartyId: bId,\n autoDelegations: {\n all: [pId],\n },\n email: bLogin,\n }\n const patientConfidentialSecretId = '24cd8cf5-0958-4ee9-8e90-95f3d25a47d7'\n const patientBase: Patient = {\n id: randomUUID(),\n firstName: 'John',\n lastName: 'Doe',\n delegations: {\n [aId]: [\n {\n owner: aId,\n delegatedTo: aId,\n key: '4bd1316d494e858496f1d6c1200726cb76c7ff98fb47eddb1c0bf5b79712230db3f02bdf60599816e0601628ee349674a0509720e9972d87b2370b60bcbbb19adb2980bc1ab5bab8b9c8adc5516d39d0cf2d6c373fe7285ce0f1018058e52fcc', // pragma: allowlist secret\n tags: ['confidential'],\n },\n {\n owner: aId,\n delegatedTo: aId,\n key: '6121912dea437ddaf92c41a43deba576976a2b7c10c1cbba79624634ded8bb5d0210db5e339e3e26d33e6e2d18d6b8acc91f8415e5ab488b9227f7c6f6f370873f1d5b5ff3afd28dfe6e47ed10b0cb435676a4db039469a50547f3e1e515fc63', // pragma: allowlist secret\n },\n ],\n [pId]: [\n {\n owner: aId,\n delegatedTo: pId,\n key: '0b293a861d76b21928c6689fb80c373f16bfbe8269ef201b5af35ff4634e51af1c5d3c535c384efea3126acee3572b815db950c52298b1ee99868041641110100c51ad3bc6d0bafddd5021b50b8e0fd16c44f5fd05617eae4f5a00c090c0ccfb', // pragma: allowlist secret\n },\n ],\n },\n encryptionKeys: {\n [aId]: [\n {\n owner: aId,\n delegatedTo: aId,\n key: '42e625cb8930ca763f6b604d08775b4231e9414fa953feeafbd7cfc6acc138bdbf5013aa211935f9f429a627db5d41efa617b2ae9d46f93d83db73b36dab7892c07b03408ee4ab50974b0d4081162b4e9a2a448ce00e35d05aac4d7e675e99b3', // pragma: allowlist secret\n },\n ],\n [pId]: [\n {\n owner: aId,\n delegatedTo: pId,\n key: '194ee902b4780178fd88ffddd1e0744537ddf952d306dfe1123b14bec4405dc1f6b9aea7444cc74f5acca0d18062c0e12d7d9bb6c7b7bff27efb681c7e5ca52f25797f45207f63c13778637a40a541a2e33d79dc1660d7f898d69c92a93aedcf', // pragma: allowlist secret\n },\n ],\n },\n encryptedSelf: 'jgAFAlmd2QStXpOt3LnIhs4upJv2e10fp0u6/PburW7mq1r3vo/Q5/a4Yk7EWXG7oydMWb2i1UCCiNN80czGdA==', // pragma: allowlist secret\n }\n\n const testSetupApi = await initMasterApi(env)\n await testSetupApi.healthcarePartyApi.createHealthcareParty(pHcpBase)\n const pUser = await testSetupApi.userApi.createUser(pUserBase)\n await testSetupApi.healthcarePartyApi.createHealthcareParty(aHcpBase)\n const aUser = await testSetupApi.userApi.createUser(aUserBase)\n await testSetupApi.healthcarePartyApi.createHealthcareParty(bHcpBase)\n const bUser = await testSetupApi.userApi.createUser(bUserBase)\n const pStorage = await testStorageWithKeys([\n {\n dataOwnerId: pHcpBase.id!,\n pairs: [{ keyPair: { privateKey: pPrivateKey, publicKey: pHcpBase.publicKey! }, shaVersion: ShaVersion.Sha1 }],\n },\n ])\n const aStorage = await testStorageWithKeys([\n {\n dataOwnerId: aHcpBase.id!,\n pairs: [{ keyPair: { privateKey: aPrivateKey, publicKey: aHcpBase.publicKey! }, shaVersion: ShaVersion.Sha1 }],\n },\n {\n dataOwnerId: pHcpBase.id!,\n pairs: [{ keyPair: { privateKey: pPrivateKey, publicKey: pHcpBase.publicKey! }, shaVersion: ShaVersion.Sha1 }],\n },\n ])\n const bStorage = await testStorageWithKeys([\n {\n dataOwnerId: bHcpBase.id!,\n pairs: [{ keyPair: { privateKey: bPrivateKey, publicKey: bHcpBase.publicKey! }, shaVersion: ShaVersion.Sha1 }],\n },\n {\n dataOwnerId: pHcpBase.id!,\n pairs: [{ keyPair: { privateKey: pPrivateKey, publicKey: pHcpBase.publicKey! }, shaVersion: ShaVersion.Sha1 }],\n },\n ])\n const pApi = await IcureApi.initialise(\n env.iCureUrl,\n { username: pLogin, password: pPassword },\n new TestCryptoStrategies(),\n webcrypto as any,\n fetch,\n {\n storage: pStorage.storage,\n keyStorage: pStorage.keyStorage,\n entryKeysFactory: pStorage.keyFactory,\n disableParentKeysInitialisation: false,\n }\n )\n const aApi = await IcureApi.initialise(\n env.iCureUrl,\n { username: aLogin, password: aPassword },\n new TestCryptoStrategies(),\n webcrypto as any,\n fetch,\n {\n storage: aStorage.storage,\n keyStorage: aStorage.keyStorage,\n entryKeysFactory: aStorage.keyFactory,\n disableParentKeysInitialisation: false,\n }\n )\n const bApi = await IcureApi.initialise(\n env.iCureUrl,\n { username: bLogin, password: bPassword },\n new TestCryptoStrategies(),\n webcrypto as any,\n fetch,\n {\n storage: bStorage.storage,\n keyStorage: bStorage.keyStorage,\n entryKeysFactory: bStorage.keyFactory,\n disableParentKeysInitialisation: false,\n }\n )\n const xInfo = await createNewHcpApi(env)\n const x2Info = await createNewHcpApi(env)\n const apis = { a: aApi, b: bApi, p: pApi, x: xInfo.api, x2: x2Info.api }\n const xUser = xInfo.user\n const xCredentials = xInfo.credentials\n const x2User = x2Info.user\n const x2Credentials = x2Info.credentials\n const patient = await new IccPatientApi(env.iCureUrl, {}, aApi.authApi.authenticationProvider, fetch).createPatient(patientBase)\n const ids = {\n a: aId,\n b: bId,\n p: pId,\n x: xCredentials.dataOwnerId,\n x2: x2Credentials.dataOwnerId,\n }\n console.log(JSON.stringify(ids, undefined, 2))\n return {\n apis,\n ids,\n users: {\n a: aUser,\n b: bUser,\n p: pUser,\n x: xUser,\n x2: x2User,\n },\n patient,\n patientConfidentialSecretId,\n patientNote: 'This is just a test patient',\n }\n }\n\n /*\n * Entity E with legacy metadata created by A and shared with P.\n * There is also a confidential secret id (known by A but not P).\n * B wants to share with X as read only.\n * Expected outcome:\n * - A root secure delegation B->B\n * - A delegation B->P\n * - Through the delegation B->P A and P can access all the legacy metadata available to P (but not the confidential secret id known by A)\n * - A delegation from B->X\n * - Through B->X X can access only the shared information and has read access only\n *\n * Now A wants to share with X2.\n * Expected outcome:\n * - A new root secure delegation A->A is available, which gives access to the confidential secret id\n * - A delegation A->X2 with the shared information.\n * - Parents of the new delegation are the new A->A root delegation and the existing A->P delegation.\n * - B and P still can't access the confidential secret id.\n */\n it('sharing data as a child of a parent with legacy access should work', async () => {\n console.log('Creating test data')\n const { apis, ids, patient, patientConfidentialSecretId, users, patientNote } = await createTestDataAndApis()\n console.log('Starting test')\n const secretIdsKnownByA = new Set(await apis.a.patientApi.decryptSecretIdsOf(patient))\n const secretIdsKnownByB = new Set(await apis.b.patientApi.decryptSecretIdsOf(patient))\n expect(secretIdsKnownByB.size).to.eq(1)\n expect(secretIdsKnownByB.has(patientConfidentialSecretId)).to.be.false\n expect(secretIdsKnownByA.size).to.eq(2)\n expect(secretIdsKnownByA.has(patientConfidentialSecretId)).to.be.true\n expect(secretIdsKnownByA.has([...secretIdsKnownByB][0])).to.be.true\n const sharedPatient = await apis.b.patientApi.shareWith(ids.x, patient, [...secretIdsKnownByB], {\n requestedPermissions: RequestedPermissionEnum.FULL_READ,\n })\n const secureDelegations = Object.values(sharedPatient.securityMetadata?.secureDelegations ?? {})\n expect(secureDelegations).to.have.length(3)\n expect(secureDelegations.find((d) => d.delegator === ids.b && d.delegate === ids.b)).to.not.be.undefined\n expect(secureDelegations.find((d) => d.delegator === ids.b && d.delegate === ids.p)).to.not.be.undefined\n const sharedPatientWithoutLegacyDetails: Patient = { ...sharedPatient, delegations: {}, encryptionKeys: {} }\n expect(await apis.a.patientApi.getEncryptionKeysOf(sharedPatientWithoutLegacyDetails)).to.have.length(1)\n expect(await apis.a.patientApi.decryptSecretIdsOf(sharedPatientWithoutLegacyDetails)).to.have.members([...secretIdsKnownByB])\n expect(secureDelegations.find((d) => d.delegator === ids.b && d.delegate === ids.x)).to.not.be.undefined\n expect((await apis.x.patientApi.getPatientWithUser(users.x, patient.id!)).note).to.eq(patientNote)\n expect(await apis.x.cryptoApi.xapi.hasWriteAccess({ entity: sharedPatient, type: EntityWithDelegationTypeName.Patient })).to.be.false\n expect(\n await apis.x.patientApi.modifyPatientWithUser(users.x, { ...sharedPatient, firstName: 'New name' }).then(\n () => true,\n () => false\n )\n ).to.be.false\n expect(await apis.x.patientApi.decryptSecretIdsOf(sharedPatient)).to.have.members([...secretIdsKnownByB])\n const sharedPatient2 = await apis.a.patientApi.shareWith(ids.x2, sharedPatient, [...secretIdsKnownByB], {\n requestedPermissions: RequestedPermissionEnum.FULL_READ,\n })\n const secureDelegations2 = Object.values(sharedPatient2.securityMetadata?.secureDelegations ?? {})\n expect(secureDelegations2).to.have.length(5)\n expect(secureDelegations2.find((d) => d.delegator === ids.a && d.delegate === ids.a)).to.not.be.undefined\n const secureDelegationAtoX2 = secureDelegations2.find((d) => d.delegator === ids.a && d.delegate === ids.x2)\n expect(secureDelegationAtoX2).to.not.be.undefined\n expect(secureDelegationAtoX2?.parentDelegations).to.have.length(2)\n expect(await apis.b.patientApi.decryptSecretIdsOf(sharedPatient2)).to.have.members([...secretIdsKnownByB])\n })\n\n /*\n * Entity E with legacy metadata created by A and shared with P.\n * There is also a confidential secret id (known by A but not P).\n * A wants to share with X as read only.\n * Expected outcome:\n * - A root secure delegation for A\n * - A->A includes the confidential secret id known by A\n * - A delegation from A to P\n * - Through the delegation A->P A and P can access all the legacy metadata available to P (but not the confidential secret id)\n */\n it('sharing data created with legacy api by the same user ', async () => {\n console.log('Creating test data')\n const { apis, ids, patient, patientConfidentialSecretId, users, patientNote } = await createTestDataAndApis()\n console.log('Starting test')\n const secretIdsKnownByA = new Set(await apis.a.patientApi.decryptSecretIdsOf(patient))\n const secretIdsKnownByB = new Set(await apis.b.patientApi.decryptSecretIdsOf(patient))\n const sharedPatient = await apis.a.patientApi.shareWith(ids.x, patient, [...secretIdsKnownByB], {\n requestedPermissions: RequestedPermissionEnum.FULL_READ,\n })\n const secureDelegations = Object.values(sharedPatient.securityMetadata?.secureDelegations ?? {})\n expect(secureDelegations).to.have.length(3)\n expect(secureDelegations.find((d) => d.delegator === ids.a && d.delegate === ids.a)).to.not.be.undefined\n expect(secureDelegations.find((d) => d.delegator === ids.a && d.delegate === ids.p)).to.not.be.undefined\n expect(secureDelegations.find((d) => d.delegator === ids.a && d.delegate === ids.x)).to.not.be.undefined\n const sharedPatientWithoutLegacyDetails: Patient = { ...sharedPatient, delegations: {}, encryptionKeys: {} }\n console.log(await apis.a.patientApi.decryptSecretIdsOf(sharedPatientWithoutLegacyDetails))\n console.log(await apis.b.patientApi.decryptSecretIdsOf(sharedPatient))\n console.log(await apis.b.patientApi.decryptSecretIdsOf(sharedPatientWithoutLegacyDetails))\n console.log(await apis.x.patientApi.decryptSecretIdsOf(sharedPatient))\n expect(await apis.a.patientApi.decryptSecretIdsOf(sharedPatientWithoutLegacyDetails)).to.have.members([...secretIdsKnownByA])\n expect(await apis.b.patientApi.decryptSecretIdsOf(sharedPatient)).to.have.members([...secretIdsKnownByB])\n expect(await apis.b.patientApi.decryptSecretIdsOf(sharedPatientWithoutLegacyDetails)).to.have.members([...secretIdsKnownByB])\n expect(await apis.x.patientApi.decryptSecretIdsOf(sharedPatient)).to.have.members([...secretIdsKnownByB])\n console.log(JSON.stringify(sharedPatient, undefined, 2))\n })\n\n it('should be able to use aesExchangeKeysEntries with fake public key', async () => {\n console.log('Creating test data')\n const { apis, ids, patient, patientConfidentialSecretId, users, patientNote } = await createTestDataAndApis(true)\n console.log('Starting test')\n console.log(users.a.healthcarePartyId)\n console.log(users.b.healthcarePartyId)\n console.log(patient.id)\n expect((await apis.a.patientApi.getPatientWithUser(users.a, patient.id!)).note).to.equal(patientNote)\n expect((await apis.b.patientApi.getPatientWithUser(users.a, patient.id!)).note).to.equal(patientNote)\n })\n})\n"]}
1
+ {"version":3,"file":"legacy-metadata-migration-test.js","sourceRoot":"","sources":["../../../../test/icc-x-api/crypto/legacy-metadata-migration-test.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Participants: A, B children hcp of P ; X external hcp, not related to A/B/P.\n *\n\n * Situation 2:\n * Entity E with legacy metadata created by A and shared with P.\n * There is also a confidential secret id (known by A but not P).\n * A wants to share with X as read only.\n * Expected outcome:\n * - A root secure delegation for A\n * - A->A includes the confidential secret id known by A\n * - A delegation from A to P\n * - Through the delegation A->P A and P can access all the legacy metadata available to P (but not the confidential secret id)\n */\n\nimport { EntityWithDelegationTypeName, IcureApi, ShaVersion } from '../../../icc-x-api'\nimport { randomUUID, webcrypto } from 'crypto'\nimport { createNewHcpApi, getEnvironmentInitializer, setLocalStorage, TestUtils } from '../../utils/test_utils'\nimport { getEnvVariables, TestVars } from '@icure/test-setup/types'\nimport { User } from '../../../icc-api/model/User'\nimport { HealthcareParty } from '../../../icc-api/model/HealthcareParty'\nimport { Patient } from '../../../icc-api/model/Patient'\nimport { testStorageWithKeys } from '../../utils/TestStorage'\nimport { TestCryptoStrategies } from '../../utils/TestCryptoStrategies'\nimport { IccPatientApi } from '../../../icc-api'\nimport { expect } from 'chai'\nimport { EntityShareRequest } from '../../../icc-api/model/requests/EntityShareRequest'\nimport initMasterApi = TestUtils.initMasterApi\nimport RequestedPermissionEnum = EntityShareRequest.RequestedPermissionEnum\n\nsetLocalStorage(fetch)\n\nlet env: TestVars\n\ndescribe('Legacy delegations migration test', () => {\n before(async function () {\n this.timeout(600000)\n const initializer = await getEnvironmentInitializer()\n env = await initializer.execute(getEnvVariables())\n })\n\n /**\n * Participants:\n *\n * A, B children hcp of P\n * X, X2 are external hcps, not related to A/B/P.\n */\n // prettier-ignore\n async function createTestDataAndApis(\n useFakeKeyForAesExchangeKeyEntry: boolean = false\n ): Promise<{\n patientConfidentialSecretId: string\n apis: { a: IcureApi; b: IcureApi; p: IcureApi; x: IcureApi; x2: IcureApi }\n users: { a: User; b: User; p: User; x: User; x2: User }\n patient: Patient\n patientNote: string\n ids: { p: string; a: string; b: string; x: string; x2: string }\n }> {\n // The following data was created for test purposes only and does not contain any real key / secrets.\n const pId = randomUUID()\n const pLogin = `parent-${randomUUID()}`\n const pPassword = randomUUID()\n const pPrivateKey =\n '308204be020100300d06092a864886f70d0101010500048204a8308204a40201000282010100b8f7e992be3973d42954ca27da89259961c93cca31c6494b074f6f5992ce7ba1d95fdfaf043d5047b6e492c735d68344e0348f08683f1dae728d1e86c439c8498613ec7c8fb54930afbb9f45c74f4d312ecf5d989cb2edd96f887551792094ddd2d18a4c2dc2107c9b044b755f93f8d63e956e1ff0299fa9ed190845f7f5f69dc510df005bd929fb4fed33b30d6e699e0632485cc4180cf5a130357cf64233a680a1a1cc6b6761188192734916cabda14bb954ba3807b84c92f078fe83eea31260390356a8d53853148191144a4584fef02d28bc8353d3c33a87b156396e5fcb7994165da48138db3a3b986fe1c12d46273a218af63b42514690fbb161a5179d0203010001028201000e18c171b03dab58dd5830eff34a7080780b60d952b721eed8927292090b8e308f8dd6fba7a9b9ec929668f94b091b880198ffd84c2eede6d5a41ba779b24da9622687e76bac629f95efb3fbc56cd87289cc13fe058892c7f77ac18b815d1250b58dc7ff20f2f6a95dc7135926a79daca0fdbd1ed756d4c19be8447bd0a200e17419cdd90af54e3b204c1297054d61a6ba9183dfd280d571ee52ee3ed39959abb36ecf575429727d8130bfb070131a46b473a94798834707431bdd248e873d9a716cc469d7f21b545dc2eb21d892e8d94ee6544bd82e8112e697eeaecf6a01d31bffaaf37558aec381f8d12c8491ff77ce00a1da4e2fe6ddf4e5dd14fe1ef90102818100dd2b49e13111593e91a882ae522c1363e2b5e3a10e71c4599e32eec56d9d01682983232b582f2e0923dd107e259771382dd7ff738be31cbba5095153a636dd44e8b08f47e044bbf5814aebdcfed33f0a32fc2f62bf3a0ded9d8aed48fc8034debbf5399862ca2bac72d9d4ab70f90a6a246c6cf4a62c9cb887ea776dce57511902818100d61925b811da57c10e444528230bdb0156516b5ca9ff89a9e57da8373bf5911d009bf5e8a6ee0d40edb89f01e638a528ce592e27d3e7f2172ce373a3b510f2f5045a5dd9aa4ae28b088553a5d099f95611447df464da04168d88ba69751046229131b5a820f9215548de643a82a04ad062ddd74a2e2f30d88480b115c2aa372502818031e374dbce14aabbd9615870f7ea27498db717ac99b481e4f1316df8acbc10b82d3cfe6ee58a66e8fae4ffb664c65f6c9bb2b055a1054ed2e8ec4c23014838eb354db654313b6fe6760eaf5b7f43a961a4948c1fcb20ce497e12fb694e43a12968de6cea79c63ec9bc72746d63a3597d0dd04357803069fd99f302938b4ad8e902818100c167f835ff12b2417924dd2074006ab81b84f3aac2fb501e056d6d3f704fd6e64f3d9478b60bc83746488883cbb8922279be003f0463bcc388ce741188292681868c27c9d0d7532d6be61d7966272221c8f9899af45c2a63413a29c3c8778a1401fbd8f167d00677a79b1709f024e350ba6f52e3f532b63a72005b789fe0ea6d02818100cd0855c641e6294a1c05667f043eedf539c38bbd357dd20dacb182c96455593c689eafc7844d2ba8cd86ce77a3f3151aa261434cdb4d21367c9c62f73289aecb2719de0aca9857365eb16cc56bffbd9b28835eaa4499971996e63306bfdfea35c86179bd749992501aa6c0f45c0123ef6a8a3bb4344c198a0046b94c3bf506f5' // pragma: allowlist secret\n const pHcpBase: HealthcareParty = {\n id: pId,\n lastName: '8ed642',\n firstName: 'c9d727',\n publicKey:\n '30820122300d06092a864886f70d01010105000382010f003082010a0282010100b8f7e992be3973d42954ca27da89259961c93cca31c6494b074f6f5992ce7ba1d95fdfaf043d5047b6e492c735d68344e0348f08683f1dae728d1e86c439c8498613ec7c8fb54930afbb9f45c74f4d312ecf5d989cb2edd96f887551792094ddd2d18a4c2dc2107c9b044b755f93f8d63e956e1ff0299fa9ed190845f7f5f69dc510df005bd929fb4fed33b30d6e699e0632485cc4180cf5a130357cf64233a680a1a1cc6b6761188192734916cabda14bb954ba3807b84c92f078fe83eea31260390356a8d53853148191144a4584fef02d28bc8353d3c33a87b156396e5fcb7994165da48138db3a3b986fe1c12d46273a218af63b42514690fbb161a5179d0203010001', // pragma: allowlist secret\n }\n const pUserBase: User = {\n id: randomUUID(),\n name: pLogin,\n status: User.StatusEnum.ACTIVE,\n login: pLogin,\n passwordHash: pPassword,\n healthcarePartyId: pId,\n email: pLogin,\n }\n const aId = randomUUID()\n const aLogin = `childA-${randomUUID()}`\n const aPassword = randomUUID()\n const aPrivateKey =\n '308204bd020100300d06092a864886f70d0101010500048204a7308204a30201000282010100e92f6acc40dbf839fa26e14579fcb68b5e8530f7bfada96338d4f986936cf177e242a458cb1811c2c49c469fa84d2c6ba0c0f34ba6e28babfaff863ff9f3938741d4a41b936143adcff5b396ce12f253e1af424ebd75aa133bdf606b1be51142ee4f5310f4ab46b7a7d706034028f81c462a758f0243d3791d27758bcc8af8010116ee70f1e61eb4526d05d245d631459974eea86b500ad0083e7f196ab9c4926487d92aa2849878f2e4093691d0539b9e880ff6717dbe5e7903141aaf796d74100c42c4d33ac2356df7e3e037accf4495c05f2caf57ae47130b1833f95397e1e9324f2abc1e6af56d7297cf48ea2ba0d990cff2f3b59b1e44efebd4db537ced020301000102820100129e03bed566d42be33a2ea48dcabfd37cc004c13c98e3af3beb8eaee9ebed2d0f2316f667e3d8772b35c3b8eab9cea0e795f356c81d63dd5edacbd325646d7a837367220149e71a97751c73857609ca1cabdea898509508cb49beb88e7c63099ef79bf36302381dfa6e833f2e6496fa8e1df81c04db7971a335d87f7c7660ba6ffb6cc0b3089086df855145b69dba0404ae77b1d533693030e8aa17b851c313d9de7b98a2cd5333fbd1b7d9d7d8d4296c2fc794a50003438eccf0d6dc0a0b34c2695d4f40fa8a5d2de12d5579bc3b33208227cff350413702643f31e0d02317da8165c3f7f1b6a18f00fcea5d981904cb1f5c2bd85d30da963184611f0a06d902818100f6860c1d1c53ad2489bc5e967365e226b25bf292c9ca4f01bbee6d7665f544834f553275e6dc373ed69c942d2e889be2537ae5f5672988c63993bc4f95cbb3dc25b3b8cdf7e274b61532b0e101df22cd54735c2d3f353a4d2d48a1e8dcf11089545b3d8b37f4fa2d3d91129d92e67d9937b065a0bf07c7801df87dd8c1c95f4702818100f2261c810d62345f806345b909e8b1d399d961d5f1bd3c580c96c44ba2e6e532ac93f12cdb25fb6fa9e7a823052c2983611b6c359df98be6c7d0e6377a27cd7f0f67f4568fb72c42d7c3bb13afead3b25a30b7827c1f059d9f75c939fc8608afe2882fdeeb3c292ba45647f373c8ff5719c6da1152c94871b722e8129851a42b028181008fe65945d8d6233833ca27f06c75e957ab3f2ece6e49d06a73b7ce5f914e64eabd313f1e415f044482e3ad3ede6dd188803039f15081971c1659dd4f1b62679fb6c63cb6c5de834012099fe407c2a73ef1efd0bb7cace6564c7b9c3f2050fad51ecf8f92275cb1781cfb04c1c41114f98ddf42c35d1efe5e13a08c5d2d690d5b02818033d7a2fca22fe744970929f13ec4d9e592a7aec18e3ad483895671fa3b8b3180d2dfed9f8bdfaae032410d8749e1359612213bde92cecd7c0045a234386bf31c03e15eb7759762db80b440062c009b8830b50364e54c02f8c71e0191ef9586a099604cd76e07784d06a70e4a79fc8b664b777e527d25e8e3a7b0ca7cc8ad99f70281803b9df4b2e66d849b269300fe42c3136d929fdc184d51283a9fe25772a796ed710b475e85a4e442519a207eeb66e0d89d552798a9b2eb2ebb329109cf4fbce35feba75025a157b57c98776dbe9f04c8937e5cd34021b68ffac95c23c3129967a3aa82ddda35098ba55958e3531fa226825a2685e1ce94353a22a03a1eb9b1a9a0' // pragma: allowlist secret\n const aHcpBase: HealthcareParty = {\n id: aId,\n lastName: '6144e2',\n firstName: '6ca3b4',\n parentId: pId,\n aesExchangeKeys: {\n [useFakeKeyForAesExchangeKeyEntry ? 'x0' : '30820122300d06092a864886f70d01010105000382010f003082010a0282010100e92f6acc40dbf839fa26e14579fcb68b5e8530f7bfada96338d4f986936cf177e242a458cb1811c2c49c469fa84d2c6ba0c0f34ba6e28babfaff863ff9f3938741d4a41b936143adcff5b396ce12f253e1af424ebd75aa133bdf606b1be51142ee4f5310f4ab46b7a7d706034028f81c462a758f0243d3791d27758bcc8af8010116ee70f1e61eb4526d05d245d631459974eea86b500ad0083e7f196ab9c4926487d92aa2849878f2e4093691d0539b9e880ff6717dbe5e7903141aaf796d74100c42c4d33ac2356df7e3e037accf4495c05f2caf57ae47130b1833f95397e1e9324f2abc1e6af56d7297cf48ea2ba0d990cff2f3b59b1e44efebd4db537ced0203010001']: // pragma: allowlist secret\n {\n [pId]: {\n '3b42514690fbb161a5179d0203010001': // pragma: allowlist secret\n '4ca457e66519a3f403e089f56f3838a18af16e47029d33ca40eca6a24d1f213809851920b8d159e3879284e5e8d1e0c64be874261d3e0003c43a21ddab9301f8a54161911d3bebe3b1ee6d2a040ec88caa484b6ffd46200bc6eb1a767f309e960f977b9e82d81a0b4961b517e89f24cbc9d0133f955a8d6f792486b1e5dcd9088fe5ecc07b11230b1960013c914041e5de3e9b3c37fa4c2a44dcf2136aae57e000acfe824dacd900bf6be5f6b4f3c41534237a01e14d728065c586dbfd3eeb81ad070218be3e2f70757e9ca5d940afa0b67e02d41e68c1c10935157bc6bd3c06eda95f23c10ca60b649a5ec32903c2a995c0b97fb40cdf454c53621304b0d5b0', // pragma: allowlist secret\n b59b1e44efebd4db537ced0203010001:\n '50864963c90cc12704b35ec6cd15ee40a2f4fd4dcb1cf287612346eab4df139008adef1c6d778e35aa7cb58251ff34d6bf1b0faa59d5453c328fa381b175143f41ce66463146b9a02d546cea0065bf62d1ce58e27a8d3bb8bebbb97b76c7e0d7a67b481fdc5082e99aa0521026eb89344b9404da04b0a69988e03724421747e47ab544ed2c55d0424f2837e641f9df4f4ece731e38f9a16d056d9fcf442730c50b3cabcdfbd8241677648639af75198bd30ded0f0fa2db0f8ce80cf86350cef278ce1c7a5426262ceebcc6be5579892d8e066763e216e1592f3f5faa13c561f73400549f5ba2bd618fb308ef99d52cc360ce30988af058caca8c23113933f588', // pragma: allowlist secret\n },\n [aId]: {\n b59b1e44efebd4db537ced0203010001:\n '189ab5f91d1401fe4c8d2be8e044dcb80211fbf1f310d154a21e32b2b7c0cca715178b42a9a5bbd136b81eed1158da5c8e600e265b38c2b608127b343f0d8da301d80eb24a620ed64bec091771a092a2072a922c2852de55942cc99ae0f9c609150c9621cbaf27740105b28e33668ad0a960c13f884029bb1c8253d646b503ac597f8dbb6ce79b64e7b3929b3a3b649805fb327c2d855f47947e8d5dbf9aa4a0da56b9c1030e9fb1f415d0ee48d91d11c320d1bcba9b96a50574ab406f84629edbb86c68ca548d9dcdd08b4d63c93b3d654e810baaf0782068bc91934fb19f9ab46d940dd3d3e27fc6ac1bcd47440f098d97a9b454df929ba60ae0aa5efe7861', // pragma: allowlist secret\n },\n },\n },\n publicKey:\n '30820122300d06092a864886f70d01010105000382010f003082010a0282010100e92f6acc40dbf839fa26e14579fcb68b5e8530f7bfada96338d4f986936cf177e242a458cb1811c2c49c469fa84d2c6ba0c0f34ba6e28babfaff863ff9f3938741d4a41b936143adcff5b396ce12f253e1af424ebd75aa133bdf606b1be51142ee4f5310f4ab46b7a7d706034028f81c462a758f0243d3791d27758bcc8af8010116ee70f1e61eb4526d05d245d631459974eea86b500ad0083e7f196ab9c4926487d92aa2849878f2e4093691d0539b9e880ff6717dbe5e7903141aaf796d74100c42c4d33ac2356df7e3e037accf4495c05f2caf57ae47130b1833f95397e1e9324f2abc1e6af56d7297cf48ea2ba0d990cff2f3b59b1e44efebd4db537ced0203010001', // pragma: allowlist secret\n }\n const aUserBase: User = {\n id: randomUUID(),\n name: aLogin,\n status: User.StatusEnum.ACTIVE,\n login: aLogin,\n passwordHash: aPassword,\n healthcarePartyId: aId,\n autoDelegations: {\n all: [pId],\n },\n email: aLogin,\n }\n const bId = randomUUID()\n const bLogin = `childB-${randomUUID()}`\n const bPassword = randomUUID()\n const bPrivateKey =\n '308204bc020100300d06092a864886f70d0101010500048204a6308204a20201000282010100982330dc464b3e9c583affbfece209976bc045f07b22fb44bcb0ebc27bc9d8406b54e380d195e107c1728499a64012b3251c1c85a2516e73b89a07b1929f0c12d44828677135082e8170b9831dd4ff9e988d098731eadd1443813cb5f6af2fe4c2a2706ba6aeb5bb6bb7889be51eebd83bebbb2a0b55a6d69fdeb66894af47edd6f82a8d30629814b82f17cfd1ef75f47d192eb9577c58f14a5e0d2782b13b796b5a3be780a38b0f69f3d00179d13cc23fcec1e919ac05d88c08c693c711384ad9fc7a21ed28d0e5d3865c15db239a5d727d4c52a344975c97379cc5a195ff4f8c1aacbaa67d6d0fd358b6b5d1a4d0575bc57b2d7736108978e3371e9aa0ae8f0203010001028201002a9bac7afc9ae5399f4242cf4b36110e9de8570e1f46704dd374cf4a8425c7115f9e022b59475b23336bf1b4208a1052a8e183217010d358c88a26fe75fc6242c1be45c696bf8dff8c53f838bef9a0ef9774e486bf15b27e12dbd69775b3a1bbb5410e303019fd1eb4efcd6c2fd2a5a5c53e6388466d6210f8ec4474ecb35c76d2c4269d3a585cdce972673c56818015b9f097ff528e26272b76810cb4f8a1ee5ea04ea26f4cf3c6f78b77c5f58d80628f513a4da76cc1e35a6867af1ab76fe0354e549340221d19bfe04783e34f84eca7bd80867134710adc0665a52eb689d2cf6ecb38ca77d84f4feb8c23539e92ac870b3175c174d8f5643aabc0e7ef3cd102818100ba44b38b24e28d9fb85279c0098b4505e0852ba88b54d2cb8b0e77368c1600bb40b4c0f6dee8b97788e082af0f9045dd54f05ee583fffabc473d16272d03c1aef301541176e7a95f948f8d77b6aad087c54f2de713909efdd5d90a8bbec61067172a97480ba844c25cf64a8b1f0698e2f4dd73af798dd8ab329f7f9bf9a0f9ff02818100d11781567bde00a256ac7ef2c4bf10a5b8b2ebab77c941b7665817f17aa496f166ecd89bb4c50c53d4e836b3369edc2f0f49e64f8dbe7ddaf0fb3898075f6e82ab2c69bc925368904ba459ce08a40ce621dceefa78b64d8eb68752d1cc2a53a1db9718ab1a8703333065cf9b8407174c18f8b085e4aebf32a5bf9b259a6bab71028180492352b04f025a039df75c70e80e7442b37ef6be8e3ef72a0ee6d62e67e0f7d68eb8aa9004c4b29659fb75b4d1529fec213ee4b4101981d54dcf91943e5b9c405a9069f7158e2ef625ba1c1d266f79c3e5d88a38927915c4aba4363cdae2a06c2a2f82093af28e5516f56a1da84809de0bb1ac8bf919963ada7cc039795218f70281802b0aceaa31f78263e8b9bbac580a08f04474388564b43e5df5a87ecd4bf4e3c9afe963b1b1e5ba62eb7a1e008866ed66969c1cd81592b82fc0d9c64dad7edcadf374c2137a7fc70fa532a0f603db59786a5223b3d5f399459e977eda0750534507823426cce02c2d76720ee9b1a5100baf3c4a8255900f75ea9ee5de38ca9f510281802c19faaa1e08ac6337c48af1529f8b8685d2582586986b180377aee8cf4eaadcdbb5869c6f994275b0ae3ecc6aa0ead81296ab9a96eecb44f14fcd9e50ef34d9725e97809b3ed2ed6105102c96ea55a096f292a8d9769c05779f303dc6ad3b30c3c9bea749d58636b3977c9c593557c048b2f82e90fead32b5b510966e548e7a' // pragma: allowlist secret\n const bHcpBase: HealthcareParty = {\n id: bId,\n lastName: '95ee22',\n firstName: '2af696',\n parentId: pId,\n aesExchangeKeys: {\n [useFakeKeyForAesExchangeKeyEntry ? 'x0' : '30820122300d06092a864886f70d01010105000382010f003082010a0282010100982330dc464b3e9c583affbfece209976bc045f07b22fb44bcb0ebc27bc9d8406b54e380d195e107c1728499a64012b3251c1c85a2516e73b89a07b1929f0c12d44828677135082e8170b9831dd4ff9e988d098731eadd1443813cb5f6af2fe4c2a2706ba6aeb5bb6bb7889be51eebd83bebbb2a0b55a6d69fdeb66894af47edd6f82a8d30629814b82f17cfd1ef75f47d192eb9577c58f14a5e0d2782b13b796b5a3be780a38b0f69f3d00179d13cc23fcec1e919ac05d88c08c693c711384ad9fc7a21ed28d0e5d3865c15db239a5d727d4c52a344975c97379cc5a195ff4f8c1aacbaa67d6d0fd358b6b5d1a4d0575bc57b2d7736108978e3371e9aa0ae8f0203010001']: // pragma: allowlist secret\n {\n [pId]: {\n '3b42514690fbb161a5179d0203010001': // pragma: allowlist secret\n '5e186cec6d6ddb277aa5421a345045f5f44aa125844e833529fccfeb3a002dd4aef78d84b5b8710ff0aa375436e2abdea07a2cb186cd914fa8b8fb86ab1201b109d802927b49517322ac6521600a123ee03d9383154b6f0fa0e99a8ca6e73e07ceed4aeb835649a850316c5585b2a69ac6703c7154f2db981913bac36a0cea515c70c505d1dc3a7e3a6db519cf7b68737a80ad102cc575959b08fbe327644e7d1b7da0737bfa6ededdd7bf0538fd3dc040ac57937bebdf3146a566c2619314935bc610e900b9c350fcf21a9b20c47f0ee25112578dc210b6b17c4cad9687d2bd9abab12f03f8b778b74186ac3c61d57058037d0e00903c74d2eaa8b2fdb90e3f', // pragma: allowlist secret\n '36108978e3371e9aa0ae8f0203010001': // pragma: allowlist secret\n '89764feb4d23d8313d58c0568088ecf9f320dd285eb762eaee8593a9ecc884a54e4eb6cd93a87f1383f345b94b8a7f1d20dda33d972ab4460aef742d44837648403234700a5a9f85032b025c533aebdc7bea07dec17c7a1737a51f873ec36c689a29b3314fa2d0f77d7e83e71e5a1de1392a6e92fb9881d811253f2bc00db0798e213899a85bcf0bafeaf8b972c40b1a0d1dd3109e6a8bc9309caa5ada9bc41ea62c72fbdf7cf49cbbe15cd048e6d614a4d65e09f5bed014975ea19c160e3754abd9031e8a41283fa369fa621685aee16c5a5d18a1811fde27869cb156a00fe28ae42c9ff498f2c3dd88a392ac9d68d9885556effe62850681fa8fbe5e02781f', // pragma: allowlist secret\n },\n },\n },\n publicKey:\n '30820122300d06092a864886f70d01010105000382010f003082010a0282010100982330dc464b3e9c583affbfece209976bc045f07b22fb44bcb0ebc27bc9d8406b54e380d195e107c1728499a64012b3251c1c85a2516e73b89a07b1929f0c12d44828677135082e8170b9831dd4ff9e988d098731eadd1443813cb5f6af2fe4c2a2706ba6aeb5bb6bb7889be51eebd83bebbb2a0b55a6d69fdeb66894af47edd6f82a8d30629814b82f17cfd1ef75f47d192eb9577c58f14a5e0d2782b13b796b5a3be780a38b0f69f3d00179d13cc23fcec1e919ac05d88c08c693c711384ad9fc7a21ed28d0e5d3865c15db239a5d727d4c52a344975c97379cc5a195ff4f8c1aacbaa67d6d0fd358b6b5d1a4d0575bc57b2d7736108978e3371e9aa0ae8f0203010001', // pragma: allowlist secret\n }\n const bUserBase: User = {\n id: randomUUID(),\n name: bLogin,\n status: User.StatusEnum.ACTIVE,\n login: bLogin,\n passwordHash: bPassword,\n groupId: 'test-group',\n healthcarePartyId: bId,\n autoDelegations: {\n all: [pId],\n },\n email: bLogin,\n }\n const patientConfidentialSecretId = '24cd8cf5-0958-4ee9-8e90-95f3d25a47d7'\n const patientBase: Patient = {\n id: randomUUID(),\n firstName: 'John',\n lastName: 'Doe',\n delegations: {\n [aId]: [\n {\n owner: aId,\n delegatedTo: aId,\n key: '4bd1316d494e858496f1d6c1200726cb76c7ff98fb47eddb1c0bf5b79712230db3f02bdf60599816e0601628ee349674a0509720e9972d87b2370b60bcbbb19adb2980bc1ab5bab8b9c8adc5516d39d0cf2d6c373fe7285ce0f1018058e52fcc', // pragma: allowlist secret\n tags: ['confidential'],\n },\n {\n owner: aId,\n delegatedTo: aId,\n key: '6121912dea437ddaf92c41a43deba576976a2b7c10c1cbba79624634ded8bb5d0210db5e339e3e26d33e6e2d18d6b8acc91f8415e5ab488b9227f7c6f6f370873f1d5b5ff3afd28dfe6e47ed10b0cb435676a4db039469a50547f3e1e515fc63', // pragma: allowlist secret\n },\n ],\n [pId]: [\n {\n owner: aId,\n delegatedTo: pId,\n key: '0b293a861d76b21928c6689fb80c373f16bfbe8269ef201b5af35ff4634e51af1c5d3c535c384efea3126acee3572b815db950c52298b1ee99868041641110100c51ad3bc6d0bafddd5021b50b8e0fd16c44f5fd05617eae4f5a00c090c0ccfb', // pragma: allowlist secret\n },\n ],\n },\n encryptionKeys: {\n [aId]: [\n {\n owner: aId,\n delegatedTo: aId,\n key: '42e625cb8930ca763f6b604d08775b4231e9414fa953feeafbd7cfc6acc138bdbf5013aa211935f9f429a627db5d41efa617b2ae9d46f93d83db73b36dab7892c07b03408ee4ab50974b0d4081162b4e9a2a448ce00e35d05aac4d7e675e99b3', // pragma: allowlist secret\n },\n ],\n [pId]: [\n {\n owner: aId,\n delegatedTo: pId,\n key: '194ee902b4780178fd88ffddd1e0744537ddf952d306dfe1123b14bec4405dc1f6b9aea7444cc74f5acca0d18062c0e12d7d9bb6c7b7bff27efb681c7e5ca52f25797f45207f63c13778637a40a541a2e33d79dc1660d7f898d69c92a93aedcf', // pragma: allowlist secret\n },\n ],\n },\n encryptedSelf: 'jgAFAlmd2QStXpOt3LnIhs4upJv2e10fp0u6/PburW7mq1r3vo/Q5/a4Yk7EWXG7oydMWb2i1UCCiNN80czGdA==', // pragma: allowlist secret\n }\n\n const testSetupApi = await initMasterApi(env)\n await testSetupApi.healthcarePartyApi.createHealthcareParty(pHcpBase)\n const pUser = await testSetupApi.userApi.createUser(pUserBase)\n await testSetupApi.healthcarePartyApi.createHealthcareParty(aHcpBase)\n const aUser = await testSetupApi.userApi.createUser(aUserBase)\n await testSetupApi.healthcarePartyApi.createHealthcareParty(bHcpBase)\n const bUser = await testSetupApi.userApi.createUser(bUserBase)\n const pStorage = await testStorageWithKeys([\n {\n dataOwnerId: pHcpBase.id!,\n pairs: [{ keyPair: { privateKey: pPrivateKey, publicKey: pHcpBase.publicKey! }, shaVersion: ShaVersion.Sha1 }],\n },\n ])\n const aStorage = await testStorageWithKeys([\n {\n dataOwnerId: aHcpBase.id!,\n pairs: [{ keyPair: { privateKey: aPrivateKey, publicKey: aHcpBase.publicKey! }, shaVersion: ShaVersion.Sha1 }],\n },\n {\n dataOwnerId: pHcpBase.id!,\n pairs: [{ keyPair: { privateKey: pPrivateKey, publicKey: pHcpBase.publicKey! }, shaVersion: ShaVersion.Sha1 }],\n },\n ])\n const bStorage = await testStorageWithKeys([\n {\n dataOwnerId: bHcpBase.id!,\n pairs: [{ keyPair: { privateKey: bPrivateKey, publicKey: bHcpBase.publicKey! }, shaVersion: ShaVersion.Sha1 }],\n },\n {\n dataOwnerId: pHcpBase.id!,\n pairs: [{ keyPair: { privateKey: pPrivateKey, publicKey: pHcpBase.publicKey! }, shaVersion: ShaVersion.Sha1 }],\n },\n ])\n const pApi = await IcureApi.initialise(\n env.iCureUrl,\n { username: pLogin, password: pPassword },\n new TestCryptoStrategies(),\n webcrypto as any,\n fetch,\n {\n storage: pStorage.storage,\n keyStorage: pStorage.keyStorage,\n entryKeysFactory: pStorage.keyFactory,\n disableParentKeysInitialisation: false,\n }\n )\n const aApi = await IcureApi.initialise(\n env.iCureUrl,\n { username: aLogin, password: aPassword },\n new TestCryptoStrategies(),\n webcrypto as any,\n fetch,\n {\n storage: aStorage.storage,\n keyStorage: aStorage.keyStorage,\n entryKeysFactory: aStorage.keyFactory,\n disableParentKeysInitialisation: false,\n }\n )\n const bApi = await IcureApi.initialise(\n env.iCureUrl,\n { username: bLogin, password: bPassword },\n new TestCryptoStrategies(),\n webcrypto as any,\n fetch,\n {\n storage: bStorage.storage,\n keyStorage: bStorage.keyStorage,\n entryKeysFactory: bStorage.keyFactory,\n disableParentKeysInitialisation: false,\n }\n )\n const xInfo = await createNewHcpApi(env)\n const x2Info = await createNewHcpApi(env)\n const apis = { a: aApi, b: bApi, p: pApi, x: xInfo.api, x2: x2Info.api }\n const xUser = xInfo.user\n const xCredentials = xInfo.credentials\n const x2User = x2Info.user\n const x2Credentials = x2Info.credentials\n const patient = await new IccPatientApi(env.iCureUrl, {}, aApi.authApi.authenticationProvider, fetch).createPatient(patientBase)\n const ids = {\n a: aId,\n b: bId,\n p: pId,\n x: xCredentials.dataOwnerId,\n x2: x2Credentials.dataOwnerId,\n }\n console.log(JSON.stringify(ids, undefined, 2))\n return {\n apis,\n ids,\n users: {\n a: aUser,\n b: bUser,\n p: pUser,\n x: xUser,\n x2: x2User,\n },\n patient,\n patientConfidentialSecretId,\n patientNote: 'This is just a test patient',\n }\n }\n\n /*\n * Entity E with legacy metadata created by A and shared with P.\n * There is also a confidential secret id (known by A but not P).\n * B wants to share with X as read only.\n * Expected outcome:\n * - A root secure delegation B->B\n * - A delegation B->P\n * - Through the delegation B->P A and P can access all the legacy metadata available to P (but not the confidential secret id known by A)\n * - A delegation from B->X\n * - Through B->X X can access only the shared information and has read access only\n *\n * Now A wants to share with X2.\n * Expected outcome:\n * - A new root secure delegation A->A is available, which gives access to the confidential secret id\n * - A delegation A->X2 with the shared information.\n * - Parents of the new delegation are the new A->A root delegation and the existing A->P delegation.\n * - B and P still can't access the confidential secret id.\n */\n it('sharing data as a child of a parent with legacy access should work', async () => {\n console.log('Creating test data')\n const { apis, ids, patient, patientConfidentialSecretId, users, patientNote } = await createTestDataAndApis()\n console.log('Starting test')\n const secretIdsKnownByA = new Set(await apis.a.patientApi.decryptSecretIdsOf(patient))\n const secretIdsKnownByB = new Set(await apis.b.patientApi.decryptSecretIdsOf(patient))\n expect(secretIdsKnownByB.size).to.eq(1)\n expect(secretIdsKnownByB.has(patientConfidentialSecretId)).to.be.false\n expect(secretIdsKnownByA.size).to.eq(2)\n expect(secretIdsKnownByA.has(patientConfidentialSecretId)).to.be.true\n expect(secretIdsKnownByA.has([...secretIdsKnownByB][0])).to.be.true\n const sharedPatient = await apis.b.patientApi.shareWith(ids.x, patient, [...secretIdsKnownByB], {\n requestedPermissions: RequestedPermissionEnum.FULL_READ,\n })\n const secureDelegations = Object.values(sharedPatient.securityMetadata?.secureDelegations ?? {})\n expect(secureDelegations).to.have.length(3)\n expect(secureDelegations.find((d) => d.delegator === ids.b && d.delegate === ids.b)).to.not.be.undefined\n expect(secureDelegations.find((d) => d.delegator === ids.b && d.delegate === ids.p)).to.not.be.undefined\n const sharedPatientWithoutLegacyDetails: Patient = { ...sharedPatient, delegations: {}, encryptionKeys: {} }\n expect(await apis.a.patientApi.getEncryptionKeysOf(sharedPatientWithoutLegacyDetails)).to.have.length(1)\n expect(await apis.a.patientApi.decryptSecretIdsOf(sharedPatientWithoutLegacyDetails)).to.have.members([...secretIdsKnownByB])\n expect(secureDelegations.find((d) => d.delegator === ids.b && d.delegate === ids.x)).to.not.be.undefined\n expect((await apis.x.patientApi.getPatientWithUser(users.x, patient.id!)).note).to.eq(patientNote)\n expect(await apis.x.cryptoApi.xapi.hasWriteAccess({ entity: sharedPatient, type: EntityWithDelegationTypeName.Patient })).to.be.false\n expect(\n await apis.x.patientApi.modifyPatientWithUser(users.x, { ...sharedPatient, firstName: 'New name' }).then(\n () => true,\n () => false\n )\n ).to.be.false\n expect(await apis.x.patientApi.decryptSecretIdsOf(sharedPatient)).to.have.members([...secretIdsKnownByB])\n const sharedPatient2 = await apis.a.patientApi.shareWith(ids.x2, sharedPatient, [...secretIdsKnownByB], {\n requestedPermissions: RequestedPermissionEnum.FULL_READ,\n })\n const secureDelegations2 = Object.values(sharedPatient2.securityMetadata?.secureDelegations ?? {})\n expect(secureDelegations2).to.have.length(5)\n expect(secureDelegations2.find((d) => d.delegator === ids.a && d.delegate === ids.a)).to.not.be.undefined\n const secureDelegationAtoX2 = secureDelegations2.find((d) => d.delegator === ids.a && d.delegate === ids.x2)\n expect(secureDelegationAtoX2).to.not.be.undefined\n expect(secureDelegationAtoX2?.parentDelegations).to.have.length(2)\n expect(await apis.b.patientApi.decryptSecretIdsOf(sharedPatient2)).to.have.members([...secretIdsKnownByB])\n })\n\n /*\n * Entity E with legacy metadata created by A and shared with P.\n * There is also a confidential secret id (known by A but not P).\n * A wants to share with X as read only.\n * Expected outcome:\n * - A root secure delegation for A\n * - A->A includes the confidential secret id known by A\n * - A delegation from A to P\n * - Through the delegation A->P A and P can access all the legacy metadata available to P (but not the confidential secret id)\n */\n it('sharing data created with legacy api by the same user ', async () => {\n console.log('Creating test data')\n const { apis, ids, patient, patientConfidentialSecretId, users, patientNote } = await createTestDataAndApis()\n console.log('Starting test')\n const secretIdsKnownByA = new Set(await apis.a.patientApi.decryptSecretIdsOf(patient))\n const secretIdsKnownByB = new Set(await apis.b.patientApi.decryptSecretIdsOf(patient))\n const sharedPatient = await apis.a.patientApi.shareWith(ids.x, patient, [...secretIdsKnownByB], {\n requestedPermissions: RequestedPermissionEnum.FULL_READ,\n })\n const secureDelegations = Object.values(sharedPatient.securityMetadata?.secureDelegations ?? {})\n expect(secureDelegations).to.have.length(3)\n expect(secureDelegations.find((d) => d.delegator === ids.a && d.delegate === ids.a)).to.not.be.undefined\n expect(secureDelegations.find((d) => d.delegator === ids.a && d.delegate === ids.p)).to.not.be.undefined\n expect(secureDelegations.find((d) => d.delegator === ids.a && d.delegate === ids.x)).to.not.be.undefined\n const sharedPatientWithoutLegacyDetails: Patient = { ...sharedPatient, delegations: {}, encryptionKeys: {} }\n console.log(await apis.a.patientApi.decryptSecretIdsOf(sharedPatientWithoutLegacyDetails))\n console.log(await apis.b.patientApi.decryptSecretIdsOf(sharedPatient))\n console.log(await apis.b.patientApi.decryptSecretIdsOf(sharedPatientWithoutLegacyDetails))\n console.log(await apis.x.patientApi.decryptSecretIdsOf(sharedPatient))\n expect(await apis.a.patientApi.decryptSecretIdsOf(sharedPatientWithoutLegacyDetails)).to.have.members([...secretIdsKnownByA])\n expect(await apis.b.patientApi.decryptSecretIdsOf(sharedPatient)).to.have.members([...secretIdsKnownByB])\n expect(await apis.b.patientApi.decryptSecretIdsOf(sharedPatientWithoutLegacyDetails)).to.have.members([...secretIdsKnownByB])\n expect(await apis.x.patientApi.decryptSecretIdsOf(sharedPatient)).to.have.members([...secretIdsKnownByB])\n console.log(JSON.stringify(sharedPatient, undefined, 2))\n })\n\n it('should be able to use aesExchangeKeysEntries with fake public key', async () => {\n console.log('Creating test data')\n const { apis, ids, patient, patientConfidentialSecretId, users, patientNote } = await createTestDataAndApis(true)\n console.log('Starting test')\n console.log(users.a.healthcarePartyId)\n console.log(users.b.healthcarePartyId)\n console.log(patient.id)\n expect((await apis.a.patientApi.getPatientWithUser(users.a, patient.id!)).note).to.equal(patientNote)\n expect((await apis.b.patientApi.getPatientWithUser(users.a, patient.id!)).note).to.equal(patientNote)\n })\n})\n"]}
@@ -98,8 +98,8 @@ var EntryUpdateTypeEnum = EntitySharedMetadataUpdateRequest_1.EntitySharedMetada
98
98
  it('should make a share request which will create a decryptable secure delegation.', function () {
99
99
  return __awaiter(this, void 0, void 0, function* () {
100
100
  function doTest(explicitSelf, explicitDelegate) {
101
- var _a, _b, _c, _d;
102
101
  return __awaiter(this, void 0, void 0, function* () {
102
+ var _a, _b, _c, _d;
103
103
  yield initialiseComponents(explicitSelf, explicitDelegate);
104
104
  const secretIds = [(0, icc_x_api_1.ua2hex)(primitives.randomBytes(16)), (0, icc_x_api_1.ua2hex)(primitives.randomBytes(16))];
105
105
  const encryptionKeys = [(0, icc_x_api_1.ua2hex)(primitives.randomBytes(16))];
@@ -182,8 +182,8 @@ var EntryUpdateTypeEnum = EntitySharedMetadataUpdateRequest_1.EntitySharedMetada
182
182
  it('should make an update request which the missing entries for existing secure delegations.', function () {
183
183
  return __awaiter(this, void 0, void 0, function* () {
184
184
  function doTest(makeAccessibleFromAlias) {
185
- var _a, _b, _c, _d, _e, _f;
186
185
  return __awaiter(this, void 0, void 0, function* () {
186
+ var _a, _b, _c, _d, _e, _f;
187
187
  yield initialiseComponents(false, false);
188
188
  const canonicalSfk = primitives.randomUuid();
189
189
  const aliasSfk = primitives.randomUuid();