@icure/api 8.6.19 → 8.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (326) hide show
  1. package/icc-api/api/IccDocumentApi.d.ts +10 -2
  2. package/icc-api/api/IccDocumentApi.js +22 -4
  3. package/icc-api/api/IccDocumentApi.js.map +1 -1
  4. package/icc-api/api/IccReceiptApi.d.ts +17 -0
  5. package/icc-api/api/IccReceiptApi.js +52 -0
  6. package/icc-api/api/IccReceiptApi.js.map +1 -1
  7. package/icc-api/model/DataAttachment.d.ts +22 -0
  8. package/icc-api/model/DataAttachment.js.map +1 -1
  9. package/icc-api/model/Document.d.ts +6 -0
  10. package/icc-api/model/Document.js.map +1 -1
  11. package/icc-api/model/Receipt.d.ts +6 -0
  12. package/icc-api/model/Receipt.js.map +1 -1
  13. package/icc-x-api/crypto/BaseExchangeDataManager.js +2 -2
  14. package/icc-x-api/crypto/BaseExchangeDataManager.js.map +1 -1
  15. package/icc-x-api/crypto/ExchangeDataManager.js +3 -3
  16. package/icc-x-api/crypto/ExchangeDataManager.js.map +1 -1
  17. package/icc-x-api/crypto/ExtendedApisUtils.d.ts +1 -1
  18. package/icc-x-api/crypto/ExtendedApisUtils.js.map +1 -1
  19. package/icc-x-api/crypto/ExtendedApisUtilsImpl.d.ts +1 -1
  20. package/icc-x-api/crypto/ExtendedApisUtilsImpl.js +8 -2
  21. package/icc-x-api/crypto/ExtendedApisUtilsImpl.js.map +1 -1
  22. package/icc-x-api/crypto/RecoveryDataEncryption.js.map +1 -1
  23. package/icc-x-api/icc-accesslog-x-api.js +7 -7
  24. package/icc-x-api/icc-accesslog-x-api.js.map +1 -1
  25. package/icc-x-api/icc-calendar-item-x-api.js +7 -7
  26. package/icc-x-api/icc-calendar-item-x-api.js.map +1 -1
  27. package/icc-x-api/icc-classification-x-api.js +4 -5
  28. package/icc-x-api/icc-classification-x-api.js.map +1 -1
  29. package/icc-x-api/icc-code-x-api.d.ts +2 -2
  30. package/icc-x-api/icc-code-x-api.js +3 -33
  31. package/icc-x-api/icc-code-x-api.js.map +1 -1
  32. package/icc-x-api/icc-contact-x-api.js +20 -33
  33. package/icc-x-api/icc-contact-x-api.js.map +1 -1
  34. package/icc-x-api/icc-doctemplate-x-api.js.map +1 -1
  35. package/icc-x-api/icc-document-x-api.d.ts +8 -7
  36. package/icc-x-api/icc-document-x-api.js +64 -22
  37. package/icc-x-api/icc-document-x-api.js.map +1 -1
  38. package/icc-x-api/icc-form-x-api.js +3 -4
  39. package/icc-x-api/icc-form-x-api.js.map +1 -1
  40. package/icc-x-api/icc-helement-x-api.js +11 -11
  41. package/icc-x-api/icc-helement-x-api.js.map +1 -1
  42. package/icc-x-api/icc-invoice-x-api.js +3 -4
  43. package/icc-x-api/icc-invoice-x-api.js.map +1 -1
  44. package/icc-x-api/icc-maintenance-task-x-api.js +3 -3
  45. package/icc-x-api/icc-maintenance-task-x-api.js.map +1 -1
  46. package/icc-x-api/icc-patient-x-api.js +29 -29
  47. package/icc-x-api/icc-patient-x-api.js.map +1 -1
  48. package/icc-x-api/icc-receipt-x-api.d.ts +40 -0
  49. package/icc-x-api/icc-receipt-x-api.js +79 -1
  50. package/icc-x-api/icc-receipt-x-api.js.map +1 -1
  51. package/icc-x-api/icc-topic-x-api.js.map +1 -1
  52. package/icc-x-api/utils/code-util.d.ts +23 -0
  53. package/icc-x-api/utils/code-util.js +39 -2
  54. package/icc-x-api/utils/code-util.js.map +1 -1
  55. package/icc-x-api/utils/collection-utils.d.ts +13 -0
  56. package/icc-x-api/utils/collection-utils.js +69 -0
  57. package/icc-x-api/utils/collection-utils.js.map +1 -1
  58. package/icc-x-api/utils/compression-utils.d.ts +28 -0
  59. package/icc-x-api/utils/compression-utils.js +106 -0
  60. package/icc-x-api/utils/compression-utils.js.map +1 -0
  61. package/icc-x-api/utils/crypto-utils.js +7 -7
  62. package/icc-x-api/utils/crypto-utils.js.map +1 -1
  63. package/icc-x-api/utils/formatting-util.d.ts +1 -3
  64. package/icc-x-api/utils/formatting-util.js +15 -17
  65. package/icc-x-api/utils/formatting-util.js.map +1 -1
  66. package/icc-x-api/utils/hcp-util.js +2 -3
  67. package/icc-x-api/utils/hcp-util.js.map +1 -1
  68. package/icc-x-api/utils/insurability-util.js +10 -8
  69. package/icc-x-api/utils/insurability-util.js.map +1 -1
  70. package/icc-x-api/utils/lzma-wasm.d.ts +6 -0
  71. package/icc-x-api/utils/lzma-wasm.js +81 -0
  72. package/icc-x-api/utils/lzma-wasm.js.map +1 -0
  73. package/icc-x-api/utils/mutex.d.ts +12 -0
  74. package/icc-x-api/utils/mutex.js +26 -0
  75. package/icc-x-api/utils/mutex.js.map +1 -0
  76. package/icc-x-api/utils/websocket.js +7 -7
  77. package/icc-x-api/utils/websocket.js.map +1 -1
  78. package/icc-x-api/wasm/lzma/lzma.js +2 -0
  79. package/icc-x-api/wasm/lzma/lzma.wasm +0 -0
  80. package/package.json +2 -11
  81. package/icc-x-api/utils/uuid-encoder.d.ts +0 -44
  82. package/icc-x-api/utils/uuid-encoder.js +0 -114
  83. package/icc-x-api/utils/uuid-encoder.js.map +0 -1
  84. package/test/icc-api/api/IccAgendaApi.d.ts +0 -1
  85. package/test/icc-api/api/IccAgendaApi.js +0 -64
  86. package/test/icc-api/api/IccAgendaApi.js.map +0 -1
  87. package/test/icc-api/api/IccAnonymousAccessApi.d.ts +0 -1
  88. package/test/icc-api/api/IccAnonymousAccessApi.js +0 -58
  89. package/test/icc-api/api/IccAnonymousAccessApi.js.map +0 -1
  90. package/test/icc-api/api/IccCalendarItemApi.d.ts +0 -1
  91. package/test/icc-api/api/IccCalendarItemApi.js +0 -67
  92. package/test/icc-api/api/IccCalendarItemApi.js.map +0 -1
  93. package/test/icc-api/api/IccCalendarItemTypeApi.d.ts +0 -1
  94. package/test/icc-api/api/IccCalendarItemTypeApi.js +0 -96
  95. package/test/icc-api/api/IccCalendarItemTypeApi.js.map +0 -1
  96. package/test/icc-api/api/IccCodeApi.d.ts +0 -1
  97. package/test/icc-api/api/IccCodeApi.js +0 -38
  98. package/test/icc-api/api/IccCodeApi.js.map +0 -1
  99. package/test/icc-api/api/IccDocumentApi.d.ts +0 -1
  100. package/test/icc-api/api/IccDocumentApi.js +0 -199
  101. package/test/icc-api/api/IccDocumentApi.js.map +0 -1
  102. package/test/icc-api/api/IccGroupApi.d.ts +0 -1
  103. package/test/icc-api/api/IccGroupApi.js +0 -50
  104. package/test/icc-api/api/IccGroupApi.js.map +0 -1
  105. package/test/icc-api/api/IccKeywordApi.d.ts +0 -1
  106. package/test/icc-api/api/IccKeywordApi.js +0 -64
  107. package/test/icc-api/api/IccKeywordApi.js.map +0 -1
  108. package/test/icc-api/api/IccMedicalLocationApi.d.ts +0 -1
  109. package/test/icc-api/api/IccMedicalLocationApi.js +0 -64
  110. package/test/icc-api/api/IccMedicalLocationApi.js.map +0 -1
  111. package/test/icc-api/api/IccPlaceApi.d.ts +0 -1
  112. package/test/icc-api/api/IccPlaceApi.js +0 -64
  113. package/test/icc-api/api/IccPlaceApi.js.map +0 -1
  114. package/test/icc-api/api/IccRecoveryDataApi.d.ts +0 -1
  115. package/test/icc-api/api/IccRecoveryDataApi.js +0 -95
  116. package/test/icc-api/api/IccRecoveryDataApi.js.map +0 -1
  117. package/test/icc-api/api/IccRoleApi.d.ts +0 -1
  118. package/test/icc-api/api/IccRoleApi.js +0 -34
  119. package/test/icc-api/api/IccRoleApi.js.map +0 -1
  120. package/test/icc-api/api/IccUserApi.d.ts +0 -1
  121. package/test/icc-api/api/IccUserApi.js +0 -96
  122. package/test/icc-api/api/IccUserApi.js.map +0 -1
  123. package/test/icc-api/e2e/IccCalendarItemApi.d.ts +0 -1
  124. package/test/icc-api/e2e/IccCalendarItemApi.js +0 -46
  125. package/test/icc-api/e2e/IccCalendarItemApi.js.map +0 -1
  126. package/test/icc-api/model/modelHelpersTest.d.ts +0 -1
  127. package/test/icc-api/model/modelHelpersTest.js +0 -45
  128. package/test/icc-api/model/modelHelpersTest.js.map +0 -1
  129. package/test/icc-x-api/auth/group-switch-test.d.ts +0 -1
  130. package/test/icc-x-api/auth/group-switch-test.js +0 -81
  131. package/test/icc-x-api/auth/group-switch-test.js.map +0 -1
  132. package/test/icc-x-api/auth/jwt-concurrency-test.d.ts +0 -2
  133. package/test/icc-x-api/auth/jwt-concurrency-test.js +0 -112
  134. package/test/icc-x-api/auth/jwt-concurrency-test.js.map +0 -1
  135. package/test/icc-x-api/auth/jwt-provider-test.d.ts +0 -1
  136. package/test/icc-x-api/auth/jwt-provider-test.js +0 -197
  137. package/test/icc-x-api/auth/jwt-provider-test.js.map +0 -1
  138. package/test/icc-x-api/auth/smart-auth-provider-test.d.ts +0 -1
  139. package/test/icc-x-api/auth/smart-auth-provider-test.js +0 -224
  140. package/test/icc-x-api/auth/smart-auth-provider-test.js.map +0 -1
  141. package/test/icc-x-api/autofix-anonymity-test.d.ts +0 -1
  142. package/test/icc-x-api/autofix-anonymity-test.js +0 -122
  143. package/test/icc-x-api/autofix-anonymity-test.js.map +0 -1
  144. package/test/icc-x-api/confidential-entities-test.d.ts +0 -1
  145. package/test/icc-x-api/confidential-entities-test.js +0 -168
  146. package/test/icc-x-api/confidential-entities-test.js.map +0 -1
  147. package/test/icc-x-api/crud/comprehensive-crud-test.d.ts +0 -1
  148. package/test/icc-x-api/crud/comprehensive-crud-test.js +0 -276
  149. package/test/icc-x-api/crud/comprehensive-crud-test.js.map +0 -1
  150. package/test/icc-x-api/crud/entities-crud-test-interface.d.ts +0 -16
  151. package/test/icc-x-api/crud/entities-crud-test-interface.js +0 -408
  152. package/test/icc-x-api/crud/entities-crud-test-interface.js.map +0 -1
  153. package/test/icc-x-api/crypto/anonymous-delegations-test.d.ts +0 -1
  154. package/test/icc-x-api/crypto/anonymous-delegations-test.js +0 -587
  155. package/test/icc-x-api/crypto/anonymous-delegations-test.js.map +0 -1
  156. package/test/icc-x-api/crypto/concurrency.d.ts +0 -1
  157. package/test/icc-x-api/crypto/concurrency.js +0 -35
  158. package/test/icc-x-api/crypto/concurrency.js.map +0 -1
  159. package/test/icc-x-api/crypto/crypto-utils.d.ts +0 -1
  160. package/test/icc-x-api/crypto/crypto-utils.js +0 -79
  161. package/test/icc-x-api/crypto/crypto-utils.js.map +0 -1
  162. package/test/icc-x-api/crypto/cryptoTest.d.ts +0 -2
  163. package/test/icc-x-api/crypto/cryptoTest.js +0 -402
  164. package/test/icc-x-api/crypto/cryptoTest.js.map +0 -1
  165. package/test/icc-x-api/crypto/delegate-ci-to-patient-with-missing-keys-test.d.ts +0 -1
  166. package/test/icc-x-api/crypto/delegate-ci-to-patient-with-missing-keys-test.js +0 -166
  167. package/test/icc-x-api/crypto/delegate-ci-to-patient-with-missing-keys-test.js.map +0 -1
  168. package/test/icc-x-api/crypto/exchange-data-manager-test.d.ts +0 -1
  169. package/test/icc-x-api/crypto/exchange-data-manager-test.js +0 -674
  170. package/test/icc-x-api/crypto/exchange-data-manager-test.js.map +0 -1
  171. package/test/icc-x-api/crypto/full-crypto-test.d.ts +0 -1
  172. package/test/icc-x-api/crypto/full-crypto-test.js +0 -454
  173. package/test/icc-x-api/crypto/full-crypto-test.js.map +0 -1
  174. package/test/icc-x-api/crypto/legacy-metadata-migration-test.d.ts +0 -1
  175. package/test/icc-x-api/crypto/legacy-metadata-migration-test.js +0 -379
  176. package/test/icc-x-api/crypto/legacy-metadata-migration-test.js.map +0 -1
  177. package/test/icc-x-api/crypto/secure-delegations-manager-test.d.ts +0 -1
  178. package/test/icc-x-api/crypto/secure-delegations-manager-test.js +0 -278
  179. package/test/icc-x-api/crypto/secure-delegations-manager-test.js.map +0 -1
  180. package/test/icc-x-api/crypto/shamir.d.ts +0 -2
  181. package/test/icc-x-api/crypto/shamir.js +0 -167
  182. package/test/icc-x-api/crypto/shamir.js.map +0 -1
  183. package/test/icc-x-api/crypto/share-to-newly-created-patient-from-hcp.d.ts +0 -1
  184. package/test/icc-x-api/crypto/share-to-newly-created-patient-from-hcp.js +0 -71
  185. package/test/icc-x-api/crypto/share-to-newly-created-patient-from-hcp.js.map +0 -1
  186. package/test/icc-x-api/crypto/soft-deleted-data-owners.d.ts +0 -2
  187. package/test/icc-x-api/crypto/soft-deleted-data-owners.js +0 -113
  188. package/test/icc-x-api/crypto/soft-deleted-data-owners.js.map +0 -1
  189. package/test/icc-x-api/crypto/user-encryption-keys-manager-test.d.ts +0 -1
  190. package/test/icc-x-api/crypto/user-encryption-keys-manager-test.js +0 -246
  191. package/test/icc-x-api/crypto/user-encryption-keys-manager-test.js.map +0 -1
  192. package/test/icc-x-api/entity-with-attachments-api-test.d.ts +0 -1
  193. package/test/icc-x-api/entity-with-attachments-api-test.js +0 -142
  194. package/test/icc-x-api/entity-with-attachments-api-test.js.map +0 -1
  195. package/test/icc-x-api/filters/filters.d.ts +0 -1
  196. package/test/icc-x-api/filters/filters.js +0 -49
  197. package/test/icc-x-api/filters/filters.js.map +0 -1
  198. package/test/icc-x-api/filters/healthelement.d.ts +0 -1
  199. package/test/icc-x-api/filters/healthelement.js +0 -333
  200. package/test/icc-x-api/filters/healthelement.js.map +0 -1
  201. package/test/icc-x-api/icc-accesslog-x-api.d.ts +0 -1
  202. package/test/icc-x-api/icc-accesslog-x-api.js +0 -106
  203. package/test/icc-x-api/icc-accesslog-x-api.js.map +0 -1
  204. package/test/icc-x-api/icc-application-settings-x-api.d.ts +0 -1
  205. package/test/icc-x-api/icc-application-settings-x-api.js +0 -91
  206. package/test/icc-x-api/icc-application-settings-x-api.js.map +0 -1
  207. package/test/icc-x-api/icc-auth-api.d.ts +0 -1
  208. package/test/icc-x-api/icc-auth-api.js +0 -47
  209. package/test/icc-x-api/icc-auth-api.js.map +0 -1
  210. package/test/icc-x-api/icc-calendar-item-x-api.d.ts +0 -1
  211. package/test/icc-x-api/icc-calendar-item-x-api.js +0 -150
  212. package/test/icc-x-api/icc-calendar-item-x-api.js.map +0 -1
  213. package/test/icc-x-api/icc-contact-x-api.d.ts +0 -1
  214. package/test/icc-x-api/icc-contact-x-api.js +0 -355
  215. package/test/icc-x-api/icc-contact-x-api.js.map +0 -1
  216. package/test/icc-x-api/icc-document-x-api.d.ts +0 -1
  217. package/test/icc-x-api/icc-document-x-api.js +0 -76
  218. package/test/icc-x-api/icc-document-x-api.js.map +0 -1
  219. package/test/icc-x-api/icc-form-x-api.d.ts +0 -1
  220. package/test/icc-x-api/icc-form-x-api.js +0 -413
  221. package/test/icc-x-api/icc-form-x-api.js.map +0 -1
  222. package/test/icc-x-api/icc-hcparty-x-api-test.d.ts +0 -1
  223. package/test/icc-x-api/icc-hcparty-x-api-test.js +0 -43
  224. package/test/icc-x-api/icc-hcparty-x-api-test.js.map +0 -1
  225. package/test/icc-x-api/icc-helement-x-api-test.d.ts +0 -1
  226. package/test/icc-x-api/icc-helement-x-api-test.js +0 -155
  227. package/test/icc-x-api/icc-helement-x-api-test.js.map +0 -1
  228. package/test/icc-x-api/icc-invoice-x-api.d.ts +0 -1
  229. package/test/icc-x-api/icc-invoice-x-api.js +0 -99
  230. package/test/icc-x-api/icc-invoice-x-api.js.map +0 -1
  231. package/test/icc-x-api/icc-maintenance-task-x-api-test.d.ts +0 -1
  232. package/test/icc-x-api/icc-maintenance-task-x-api-test.js +0 -222
  233. package/test/icc-x-api/icc-maintenance-task-x-api-test.js.map +0 -1
  234. package/test/icc-x-api/icc-message-x-api.d.ts +0 -1
  235. package/test/icc-x-api/icc-message-x-api.js +0 -54
  236. package/test/icc-x-api/icc-message-x-api.js.map +0 -1
  237. package/test/icc-x-api/icc-patient-x-api-test.d.ts +0 -1
  238. package/test/icc-x-api/icc-patient-x-api-test.js +0 -165
  239. package/test/icc-x-api/icc-patient-x-api-test.js.map +0 -1
  240. package/test/icc-x-api/icc-recovery-x-api.d.ts +0 -1
  241. package/test/icc-x-api/icc-recovery-x-api.js +0 -175
  242. package/test/icc-x-api/icc-recovery-x-api.js.map +0 -1
  243. package/test/icc-x-api/icc-topic-x-api.d.ts +0 -1
  244. package/test/icc-x-api/icc-topic-x-api.js +0 -269
  245. package/test/icc-x-api/icc-topic-x-api.js.map +0 -1
  246. package/test/icc-x-api/icc-user-x-api-test.d.ts +0 -1
  247. package/test/icc-x-api/icc-user-x-api-test.js +0 -99
  248. package/test/icc-x-api/icc-user-x-api-test.js.map +0 -1
  249. package/test/icc-x-api/keyless-api.d.ts +0 -1
  250. package/test/icc-x-api/keyless-api.js +0 -125
  251. package/test/icc-x-api/keyless-api.js.map +0 -1
  252. package/test/icc-x-api/patient-user.d.ts +0 -2
  253. package/test/icc-x-api/patient-user.js +0 -103
  254. package/test/icc-x-api/patient-user.js.map +0 -1
  255. package/test/icc-x-api/storage/storage.d.ts +0 -1
  256. package/test/icc-x-api/storage/storage.js +0 -48
  257. package/test/icc-x-api/storage/storage.js.map +0 -1
  258. package/test/icc-x-api/test-api-no-parent.d.ts +0 -1
  259. package/test/icc-x-api/test-api-no-parent.js +0 -79
  260. package/test/icc-x-api/test-api-no-parent.js.map +0 -1
  261. package/test/icc-x-api/test-legacy-data-support.d.ts +0 -1
  262. package/test/icc-x-api/test-legacy-data-support.js +0 -375
  263. package/test/icc-x-api/test-legacy-data-support.js.map +0 -1
  264. package/test/icc-x-api/utils/graph-test.d.ts +0 -1
  265. package/test/icc-x-api/utils/graph-test.js +0 -54
  266. package/test/icc-x-api/utils/graph-test.js.map +0 -1
  267. package/test/icc-x-api/utils/lru-temporised-async-cache-test.d.ts +0 -1
  268. package/test/icc-x-api/utils/lru-temporised-async-cache-test.js +0 -364
  269. package/test/icc-x-api/utils/lru-temporised-async-cache-test.js.map +0 -1
  270. package/test/support/CSM-185.d.ts +0 -1
  271. package/test/support/CSM-185.js +0 -124
  272. package/test/support/CSM-185.js.map +0 -1
  273. package/test/support/CSM-243.d.ts +0 -1
  274. package/test/support/CSM-243.js +0 -120
  275. package/test/support/CSM-243.js.map +0 -1
  276. package/test/support/CSM-543.d.ts +0 -1
  277. package/test/support/CSM-543.js +0 -164
  278. package/test/support/CSM-543.js.map +0 -1
  279. package/test/support/CSM-729.d.ts +0 -1
  280. package/test/support/CSM-729.js +0 -225
  281. package/test/support/CSM-729.js.map +0 -1
  282. package/test/support/CSM-87.d.ts +0 -0
  283. package/test/support/CSM-87.js +0 -21
  284. package/test/support/CSM-87.js.map +0 -1
  285. package/test/support/CSM-93.d.ts +0 -1
  286. package/test/support/CSM-93.js +0 -112
  287. package/test/support/CSM-93.js.map +0 -1
  288. package/test/utils/FakeDataOwnerApi.d.ts +0 -32
  289. package/test/utils/FakeDataOwnerApi.js +0 -136
  290. package/test/utils/FakeDataOwnerApi.js.map +0 -1
  291. package/test/utils/FakeEncryptionKeysManager.d.ts +0 -36
  292. package/test/utils/FakeEncryptionKeysManager.js +0 -98
  293. package/test/utils/FakeEncryptionKeysManager.js.map +0 -1
  294. package/test/utils/FakeExchangeDataApi.d.ts +0 -32
  295. package/test/utils/FakeExchangeDataApi.js +0 -92
  296. package/test/utils/FakeExchangeDataApi.js.map +0 -1
  297. package/test/utils/FakeExchangeDataManager.d.ts +0 -48
  298. package/test/utils/FakeExchangeDataManager.js +0 -82
  299. package/test/utils/FakeExchangeDataManager.js.map +0 -1
  300. package/test/utils/FakeExchangeDataMapManager.d.ts +0 -12
  301. package/test/utils/FakeExchangeDataMapManager.js +0 -38
  302. package/test/utils/FakeExchangeDataMapManager.js.map +0 -1
  303. package/test/utils/FakeGenericApi.d.ts +0 -16
  304. package/test/utils/FakeGenericApi.js +0 -65
  305. package/test/utils/FakeGenericApi.js.map +0 -1
  306. package/test/utils/KeylessCryptoStrategies.d.ts +0 -23
  307. package/test/utils/KeylessCryptoStrategies.js +0 -26
  308. package/test/utils/KeylessCryptoStrategies.js.map +0 -1
  309. package/test/utils/TestApi.d.ts +0 -3
  310. package/test/utils/TestApi.js +0 -30
  311. package/test/utils/TestApi.js.map +0 -1
  312. package/test/utils/TestCollectionUtils.d.ts +0 -1
  313. package/test/utils/TestCollectionUtils.js +0 -109
  314. package/test/utils/TestCollectionUtils.js.map +0 -1
  315. package/test/utils/TestCryptoStrategies.d.ts +0 -42
  316. package/test/utils/TestCryptoStrategies.js +0 -80
  317. package/test/utils/TestCryptoStrategies.js.map +0 -1
  318. package/test/utils/TestStorage.d.ts +0 -23
  319. package/test/utils/TestStorage.js +0 -61
  320. package/test/utils/TestStorage.js.map +0 -1
  321. package/test/utils/roles.d.ts +0 -14
  322. package/test/utils/roles.js +0 -345
  323. package/test/utils/roles.js.map +0 -1
  324. package/test/utils/test_utils.d.ts +0 -87
  325. package/test/utils/test_utils.js +0 -452
  326. package/test/utils/test_utils.js.map +0 -1
@@ -1,364 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- const lru_temporised_async_cache_1 = require("../../../icc-x-api/utils/lru-temporised-async-cache");
13
- const chai_1 = require("chai");
14
- const icc_x_api_1 = require("../../../icc-x-api");
15
- describe('Lru temporised async cache ', function () {
16
- it('should automatically retrieve data if not cached', function () {
17
- return __awaiter(this, void 0, void 0, function* () {
18
- const cache = new lru_temporised_async_cache_1.LruTemporisedAsyncCache(100, () => 0);
19
- let wasRetrieved = false;
20
- const retrieved = yield cache.get('a', () => __awaiter(this, void 0, void 0, function* () {
21
- wasRetrieved = true;
22
- return { item: 1 };
23
- }));
24
- (0, chai_1.expect)(wasRetrieved).to.be.true;
25
- (0, chai_1.expect)(retrieved).to.equal(1);
26
- });
27
- });
28
- it('should reuse cached data if not expired', function () {
29
- return __awaiter(this, void 0, void 0, function* () {
30
- const cache = new lru_temporised_async_cache_1.LruTemporisedAsyncCache(100, () => 0);
31
- const retrieved = yield cache.get('a', () => __awaiter(this, void 0, void 0, function* () { return ({ item: 1 }); }));
32
- const reused = yield cache.get('a', () => __awaiter(this, void 0, void 0, function* () {
33
- throw new Error('Should reuse cached value');
34
- }));
35
- (0, chai_1.expect)(reused).to.equal(retrieved);
36
- });
37
- });
38
- it('should re-retrieve data if the cached item is expired by time, without evicting other items', function () {
39
- return __awaiter(this, void 0, void 0, function* () {
40
- let lifetimeCheckCalled = 0;
41
- const cache = new lru_temporised_async_cache_1.LruTemporisedAsyncCache(2, (value) => {
42
- lifetimeCheckCalled += 1;
43
- return value < 10 ? 10 : 50;
44
- });
45
- (0, chai_1.expect)(yield cache.get('b', () => __awaiter(this, void 0, void 0, function* () { return ({ item: 10 }); }))).to.equal(10);
46
- const retrieved = yield cache.get('a', () => __awaiter(this, void 0, void 0, function* () { return ({ item: 1 }); }));
47
- (0, chai_1.expect)(retrieved).to.equal(1);
48
- yield (0, icc_x_api_1.sleep)(20);
49
- const reRetrieved = yield cache.get('a', (previousValue) => __awaiter(this, void 0, void 0, function* () {
50
- (0, chai_1.expect)(previousValue).to.equal(1);
51
- return { item: 2 };
52
- }));
53
- (0, chai_1.expect)(reRetrieved).to.equal(2);
54
- (0, chai_1.expect)(lifetimeCheckCalled).to.equal(1);
55
- (0, chai_1.expect)(yield cache.get('b', () => __awaiter(this, void 0, void 0, function* () {
56
- throw new Error('Value should have not been evicted');
57
- }))).to.equal(10);
58
- (0, chai_1.expect)(lifetimeCheckCalled).to.equal(2);
59
- });
60
- });
61
- it('should re-retrieve data if the cached item is expired according to the additional expiration condition, without evicting other items', function () {
62
- return __awaiter(this, void 0, void 0, function* () {
63
- const cache = new lru_temporised_async_cache_1.LruTemporisedAsyncCache(2, () => 0);
64
- (0, chai_1.expect)(yield cache.get('b', () => __awaiter(this, void 0, void 0, function* () { return ({ item: 10 }); }))).to.equal(10);
65
- const retrieved = yield cache.get('a', () => __awaiter(this, void 0, void 0, function* () { return ({ item: 1 }); }));
66
- (0, chai_1.expect)(retrieved).to.equal(1);
67
- const retrieved2 = yield cache.get('a', () => __awaiter(this, void 0, void 0, function* () {
68
- throw new Error('Value should not have been evicted');
69
- }), (item) => item < 1);
70
- (0, chai_1.expect)(retrieved2).to.equal(1);
71
- const retrieved3 = yield cache.get('a', (previousValue) => __awaiter(this, void 0, void 0, function* () {
72
- (0, chai_1.expect)(previousValue).to.equal(1);
73
- return { item: 2 };
74
- }), (item) => item < 2);
75
- (0, chai_1.expect)(retrieved3).to.equal(2);
76
- (0, chai_1.expect)(yield cache.get('b', () => __awaiter(this, void 0, void 0, function* () {
77
- throw new Error('Value should not have been evicted');
78
- }))).to.equal(10);
79
- });
80
- });
81
- it('should ignore additional expiration condition on newly retrieved data', function () {
82
- return __awaiter(this, void 0, void 0, function* () {
83
- const cache = new lru_temporised_async_cache_1.LruTemporisedAsyncCache(3, () => 0);
84
- (0, chai_1.expect)(yield cache.get('a', () => __awaiter(this, void 0, void 0, function* () { return ({ item: 1 }); }), () => true)).to.equal(1);
85
- (0, chai_1.expect)(yield cache.get('a', () => __awaiter(this, void 0, void 0, function* () {
86
- throw new Error('Value should not have been evicted');
87
- }))).to.equal(1);
88
- });
89
- });
90
- it('should evict the least recently used item if full, regardless of expiration time of items', function () {
91
- return __awaiter(this, void 0, void 0, function* () {
92
- const cache = new lru_temporised_async_cache_1.LruTemporisedAsyncCache(3, (v) => (v == 4 ? 10 : 0));
93
- (0, chai_1.expect)(yield cache.get('a', () => __awaiter(this, void 0, void 0, function* () { return ({ item: 1 }); }))).to.equal(1);
94
- (0, chai_1.expect)(yield cache.get('b', () => __awaiter(this, void 0, void 0, function* () { return ({ item: 2 }); }))).to.equal(2);
95
- (0, chai_1.expect)(yield cache.get('c', () => __awaiter(this, void 0, void 0, function* () { return ({ item: 3 }); }))).to.equal(3);
96
- (0, chai_1.expect)(yield cache.get('d', (prev) => __awaiter(this, void 0, void 0, function* () {
97
- (0, chai_1.expect)(prev).to.be.undefined;
98
- return { item: 4 };
99
- }))).to.equal(4); // This evicts "a"
100
- (0, chai_1.expect)(yield cache.get('b', () => __awaiter(this, void 0, void 0, function* () {
101
- throw new Error('Value should not have been evicted');
102
- }))).to.equal(2);
103
- (0, chai_1.expect)(yield cache.get('c', () => __awaiter(this, void 0, void 0, function* () {
104
- throw new Error('Value should not have been evicted');
105
- }))).to.equal(3);
106
- (0, chai_1.expect)(yield cache.get('d', () => __awaiter(this, void 0, void 0, function* () {
107
- throw new Error('Value should not have been evicted');
108
- }))).to.equal(4);
109
- (0, chai_1.expect)(yield cache.get('a', (prev) => __awaiter(this, void 0, void 0, function* () {
110
- (0, chai_1.expect)(prev).to.be.undefined; // "a" was previously evicted so prev should be undefined
111
- return { item: 5 };
112
- }))).to.equal(5); // This evicts "b"
113
- yield (0, icc_x_api_1.sleep)(20);
114
- // Cache for "d" is expired, but LRU is "c", so we still evict "c"
115
- (0, chai_1.expect)(yield cache.get('b', () => __awaiter(this, void 0, void 0, function* () { return ({ item: 6 }); }))).to.equal(6);
116
- (0, chai_1.expect)(yield cache.get('a', () => __awaiter(this, void 0, void 0, function* () {
117
- throw new Error('Value should not have been evicted');
118
- }))).to.equal(5);
119
- (0, chai_1.expect)(yield cache.get('d', (previousValue) => __awaiter(this, void 0, void 0, function* () {
120
- (0, chai_1.expect)(previousValue).to.equal(4);
121
- return { item: 7 };
122
- }))).to.equal(7);
123
- (0, chai_1.expect)(yield cache.get('c', (previousValue) => __awaiter(this, void 0, void 0, function* () {
124
- (0, chai_1.expect)(previousValue).to.be.undefined;
125
- return { item: 8 };
126
- }))).to.equal(8);
127
- });
128
- });
129
- it('should update least recently used item', function () {
130
- return __awaiter(this, void 0, void 0, function* () {
131
- const cache = new lru_temporised_async_cache_1.LruTemporisedAsyncCache(3, () => 0);
132
- (0, chai_1.expect)(yield cache.get('a', () => __awaiter(this, void 0, void 0, function* () { return ({ item: 1 }); }))).to.equal(1);
133
- (0, chai_1.expect)(yield cache.get('b', () => __awaiter(this, void 0, void 0, function* () { return ({ item: 2 }); }))).to.equal(2);
134
- (0, chai_1.expect)(yield cache.get('c', () => __awaiter(this, void 0, void 0, function* () { return ({ item: 3 }); }))).to.equal(3);
135
- // We retrieve "a" again, so LRU will be "b"
136
- (0, chai_1.expect)(yield cache.get('a', () => __awaiter(this, void 0, void 0, function* () {
137
- throw new Error('Value should not have been evicted');
138
- }))).to.equal(1);
139
- // Now we run out of space and evict b
140
- (0, chai_1.expect)(yield cache.get('d', () => __awaiter(this, void 0, void 0, function* () { return ({ item: 4 }); }))).to.equal(4);
141
- (0, chai_1.expect)(yield cache.get('a', () => __awaiter(this, void 0, void 0, function* () {
142
- throw new Error('Value should not have been evicted');
143
- }))).to.equal(1);
144
- (0, chai_1.expect)(yield cache.get('c', () => __awaiter(this, void 0, void 0, function* () {
145
- throw new Error('Value should not have been evicted');
146
- }))).to.equal(3);
147
- (0, chai_1.expect)(yield cache.get('b', (previousValue) => __awaiter(this, void 0, void 0, function* () {
148
- (0, chai_1.expect)(previousValue).to.be.undefined;
149
- return { item: 5 };
150
- }))).to.equal(5);
151
- });
152
- });
153
- it('should support additional eviction triggers for any eviction reason - time based expiration', function () {
154
- return __awaiter(this, void 0, void 0, function* () {
155
- const cache = new lru_temporised_async_cache_1.LruTemporisedAsyncCache(2, () => 10);
156
- let didTrigger = false;
157
- (0, chai_1.expect)(yield cache.get('a', () => __awaiter(this, void 0, void 0, function* () {
158
- return ({
159
- item: 1,
160
- onEviction: (isReplacement) => {
161
- (0, chai_1.expect)(isReplacement).to.be.true;
162
- didTrigger = true;
163
- },
164
- });
165
- }))).to.equal(1);
166
- (0, chai_1.expect)(didTrigger).to.be.false;
167
- yield (0, icc_x_api_1.sleep)(20);
168
- (0, chai_1.expect)(didTrigger).to.be.false;
169
- (0, chai_1.expect)(yield cache.get('a', () => __awaiter(this, void 0, void 0, function* () { return ({ item: 2 }); }))).to.equal(2);
170
- (0, chai_1.expect)(didTrigger).to.be.true;
171
- });
172
- });
173
- it('should support additional eviction triggers for any eviction reason - additional expiration condition', function () {
174
- return __awaiter(this, void 0, void 0, function* () {
175
- const cache = new lru_temporised_async_cache_1.LruTemporisedAsyncCache(2, () => 0);
176
- let didTrigger = false;
177
- (0, chai_1.expect)(yield cache.get('a', () => __awaiter(this, void 0, void 0, function* () {
178
- return ({
179
- item: 1,
180
- onEviction: (isReplacement) => {
181
- (0, chai_1.expect)(isReplacement).to.be.true;
182
- didTrigger = true;
183
- },
184
- });
185
- }))).to.equal(1);
186
- (0, chai_1.expect)(didTrigger).to.be.false;
187
- (0, chai_1.expect)(yield cache.get('a', () => __awaiter(this, void 0, void 0, function* () { return ({ item: 2 }); }), () => true)).to.equal(2);
188
- (0, chai_1.expect)(didTrigger).to.be.true;
189
- });
190
- });
191
- it('should support additional eviction triggers for any eviction reason - eviction because out of slots', function () {
192
- return __awaiter(this, void 0, void 0, function* () {
193
- const cache = new lru_temporised_async_cache_1.LruTemporisedAsyncCache(1, () => 0);
194
- let didTrigger = false;
195
- (0, chai_1.expect)(yield cache.get('a', () => __awaiter(this, void 0, void 0, function* () {
196
- return ({
197
- item: 1,
198
- onEviction: (isReplacement) => {
199
- (0, chai_1.expect)(isReplacement).to.be.false;
200
- didTrigger = true;
201
- },
202
- });
203
- }))).to.equal(1);
204
- (0, chai_1.expect)(didTrigger).to.be.false;
205
- (0, chai_1.expect)(yield cache.get('b', () => __awaiter(this, void 0, void 0, function* () { return ({ item: 2 }); }))).to.equal(2);
206
- (0, chai_1.expect)(didTrigger).to.be.true;
207
- });
208
- });
209
- it('should support additional eviction triggers for any eviction reason - eviction due to clear, if requested', function () {
210
- return __awaiter(this, void 0, void 0, function* () {
211
- const cache = new lru_temporised_async_cache_1.LruTemporisedAsyncCache(2, () => 0);
212
- let didTrigger = false;
213
- (0, chai_1.expect)(yield cache.get('a', () => __awaiter(this, void 0, void 0, function* () {
214
- return ({
215
- item: 1,
216
- onEviction: () => {
217
- didTrigger = true;
218
- },
219
- });
220
- }))).to.equal(1);
221
- cache.clear(false);
222
- (0, chai_1.expect)(didTrigger).to.be.false;
223
- (0, chai_1.expect)(yield cache.get('a', (previousValue) => __awaiter(this, void 0, void 0, function* () {
224
- (0, chai_1.expect)(previousValue).to.be.undefined;
225
- return {
226
- item: 2,
227
- onEviction: (isReplacement) => {
228
- (0, chai_1.expect)(isReplacement).to.be.false;
229
- didTrigger = true;
230
- },
231
- };
232
- }))).to.equal(2);
233
- cache.clear(true);
234
- (0, chai_1.expect)(didTrigger).to.be.true;
235
- });
236
- });
237
- it('should not start parallel retrieval jobs for the same key if the job was not evicted', function () {
238
- return __awaiter(this, void 0, void 0, function* () {
239
- const cache = new lru_temporised_async_cache_1.LruTemporisedAsyncCache(1, () => 0);
240
- const job1 = cache.get('a', () => __awaiter(this, void 0, void 0, function* () {
241
- yield (0, icc_x_api_1.sleep)(20);
242
- return { item: 1 };
243
- }));
244
- const job2 = cache.get('a', () => __awaiter(this, void 0, void 0, function* () {
245
- throw new Error('Should not start another job');
246
- }));
247
- (0, chai_1.expect)(yield job2).to.equal(1);
248
- (0, chai_1.expect)(yield job1).to.equal(1);
249
- });
250
- });
251
- it('should be able to evict uncompleted jobs, but still complete them', function () {
252
- return __awaiter(this, void 0, void 0, function* () {
253
- const cache = new lru_temporised_async_cache_1.LruTemporisedAsyncCache(1, () => 0);
254
- const job1 = cache.get('a', () => __awaiter(this, void 0, void 0, function* () {
255
- yield (0, icc_x_api_1.sleep)(20);
256
- return { item: 1 };
257
- }));
258
- (0, chai_1.expect)(yield cache.get('b', () => __awaiter(this, void 0, void 0, function* () { return ({ item: 2 }); }))).to.equal(2);
259
- (0, chai_1.expect)(yield job1).to.equal(1);
260
- (0, chai_1.expect)(yield cache.get('b', () => __awaiter(this, void 0, void 0, function* () {
261
- throw new Error('Value should not have been evicted');
262
- }))).to.equal(2);
263
- });
264
- });
265
- it('evicted uncompleted jobs, should not override more recent results for the same key when completed', function () {
266
- return __awaiter(this, void 0, void 0, function* () {
267
- const cache = new lru_temporised_async_cache_1.LruTemporisedAsyncCache(1, () => 0);
268
- const job1 = cache.get('a', () => __awaiter(this, void 0, void 0, function* () {
269
- yield (0, icc_x_api_1.sleep)(20);
270
- return { item: 1 };
271
- }));
272
- (0, chai_1.expect)(yield cache.get('b', () => __awaiter(this, void 0, void 0, function* () { return ({ item: 2 }); }))).to.equal(2);
273
- (0, chai_1.expect)(yield cache.get('a', (prev) => __awaiter(this, void 0, void 0, function* () {
274
- (0, chai_1.expect)(prev).to.be.undefined;
275
- return { item: 3 };
276
- }))).to.equal(3);
277
- (0, chai_1.expect)(yield job1).to.equal(1);
278
- (0, chai_1.expect)(yield cache.get('a', () => __awaiter(this, void 0, void 0, function* () {
279
- throw new Error('Value should not have been evicted');
280
- }))).to.equal(3);
281
- });
282
- });
283
- it('should rethrow exceptions from the retrieval job to anyone waiting on the job, but allow future tasks to reattempt the job', function () {
284
- return __awaiter(this, void 0, void 0, function* () {
285
- const cache = new lru_temporised_async_cache_1.LruTemporisedAsyncCache(1, () => 0);
286
- const error = new Error('This error is expected');
287
- const job1 = cache.get('a', () => __awaiter(this, void 0, void 0, function* () {
288
- yield (0, icc_x_api_1.sleep)(20);
289
- throw error;
290
- }));
291
- const job2 = cache.get('a', () => __awaiter(this, void 0, void 0, function* () {
292
- throw new Error('Should not start another job');
293
- }));
294
- try {
295
- yield job2;
296
- }
297
- catch (e) {
298
- (0, chai_1.expect)(e).to.equal(error);
299
- }
300
- try {
301
- yield job1;
302
- }
303
- catch (e) {
304
- (0, chai_1.expect)(e).to.equal(error);
305
- }
306
- (0, chai_1.expect)(yield cache.get('a', () => __awaiter(this, void 0, void 0, function* () { return ({ item: 1 }); }))).to.equal(1);
307
- });
308
- });
309
- it('should immediately perform the eviction triggers on completion if the data will not cached when the job completes', function () {
310
- return __awaiter(this, void 0, void 0, function* () {
311
- const cache = new lru_temporised_async_cache_1.LruTemporisedAsyncCache(1, () => 0);
312
- let eviction1Performed = false;
313
- const job1 = cache.get('a', () => __awaiter(this, void 0, void 0, function* () {
314
- yield (0, icc_x_api_1.sleep)(20);
315
- return {
316
- item: 1,
317
- onEviction: (isReplacement) => {
318
- (0, chai_1.expect)(isReplacement).to.be.false;
319
- eviction1Performed = true;
320
- },
321
- };
322
- }));
323
- // Lose reference to existing and incomplete job for key 'a'
324
- (0, chai_1.expect)(yield cache.get('b', () => __awaiter(this, void 0, void 0, function* () { return ({ item: 2 }); }))).to.equal(2);
325
- // Can't evict because not yet completed
326
- (0, chai_1.expect)(eviction1Performed).to.be.false;
327
- // Wait for job completion and eviction
328
- (0, chai_1.expect)(yield job1).to.equal(1);
329
- (0, chai_1.expect)(eviction1Performed).to.be.true;
330
- });
331
- });
332
- it('should not replace newer data if old data completes after replacement by newer data', function () {
333
- return __awaiter(this, void 0, void 0, function* () {
334
- const cache = new lru_temporised_async_cache_1.LruTemporisedAsyncCache(1, () => 0);
335
- let eviction1Performed = false;
336
- const job1 = cache.get('a', () => __awaiter(this, void 0, void 0, function* () {
337
- yield (0, icc_x_api_1.sleep)(20);
338
- return {
339
- item: 1,
340
- onEviction: (isReplacement) => {
341
- (0, chai_1.expect)(isReplacement).to.be.true;
342
- eviction1Performed = true;
343
- },
344
- };
345
- }));
346
- // Lose reference to existing and incomplete job for key 'a'
347
- (0, chai_1.expect)(yield cache.get('b', () => __awaiter(this, void 0, void 0, function* () { return ({ item: 2 }); }))).to.equal(2);
348
- // Can't evict because not yet completed
349
- (0, chai_1.expect)(eviction1Performed).to.be.false;
350
- // Start new job for 'a' since we don't know about the existing one
351
- (0, chai_1.expect)(yield cache.get('a', () => __awaiter(this, void 0, void 0, function* () {
352
- return ({
353
- item: 3,
354
- onEviction: () => {
355
- throw new Error('This should not be called');
356
- },
357
- });
358
- }))).to.equal(3);
359
- (0, chai_1.expect)(yield job1).to.equal(1);
360
- (0, chai_1.expect)(eviction1Performed).to.be.true;
361
- });
362
- });
363
- });
364
- //# sourceMappingURL=lru-temporised-async-cache-test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"lru-temporised-async-cache-test.js","sourceRoot":"","sources":["../../../../test/icc-x-api/utils/lru-temporised-async-cache-test.ts"],"names":[],"mappings":"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","sourcesContent":["import { LruTemporisedAsyncCache } from '../../../icc-x-api/utils/lru-temporised-async-cache'\nimport { expect } from 'chai'\nimport { sleep } from '../../../icc-x-api'\n\ndescribe('Lru temporised async cache ', function () {\n it('should automatically retrieve data if not cached', async function () {\n const cache = new LruTemporisedAsyncCache<string, number>(100, () => 0)\n let wasRetrieved = false\n const retrieved = await cache.get('a', async () => {\n wasRetrieved = true\n return { item: 1 }\n })\n expect(wasRetrieved).to.be.true\n expect(retrieved).to.equal(1)\n })\n\n it('should reuse cached data if not expired', async function () {\n const cache = new LruTemporisedAsyncCache<string, number>(100, () => 0)\n const retrieved = await cache.get('a', async () => ({ item: 1 }))\n const reused = await cache.get('a', async () => {\n throw new Error('Should reuse cached value')\n })\n expect(reused).to.equal(retrieved)\n })\n\n it('should re-retrieve data if the cached item is expired by time, without evicting other items', async function () {\n let lifetimeCheckCalled = 0\n const cache = new LruTemporisedAsyncCache<string, number>(2, (value) => {\n lifetimeCheckCalled += 1\n return value < 10 ? 10 : 50\n })\n expect(await cache.get('b', async () => ({ item: 10 }))).to.equal(10)\n const retrieved = await cache.get('a', async () => ({ item: 1 }))\n expect(retrieved).to.equal(1)\n await sleep(20)\n const reRetrieved = await cache.get('a', async (previousValue) => {\n expect(previousValue).to.equal(1)\n return { item: 2 }\n })\n expect(reRetrieved).to.equal(2)\n expect(lifetimeCheckCalled).to.equal(1)\n expect(\n await cache.get('b', async () => {\n throw new Error('Value should have not been evicted')\n })\n ).to.equal(10)\n expect(lifetimeCheckCalled).to.equal(2)\n })\n\n it('should re-retrieve data if the cached item is expired according to the additional expiration condition, without evicting other items', async function () {\n const cache = new LruTemporisedAsyncCache<string, number>(2, () => 0)\n expect(await cache.get('b', async () => ({ item: 10 }))).to.equal(10)\n const retrieved = await cache.get('a', async () => ({ item: 1 }))\n expect(retrieved).to.equal(1)\n const retrieved2 = await cache.get(\n 'a',\n async () => {\n throw new Error('Value should not have been evicted')\n },\n (item) => item < 1\n )\n expect(retrieved2).to.equal(1)\n const retrieved3 = await cache.get(\n 'a',\n async (previousValue) => {\n expect(previousValue).to.equal(1)\n return { item: 2 }\n },\n (item) => item < 2\n )\n expect(retrieved3).to.equal(2)\n expect(\n await cache.get('b', async () => {\n throw new Error('Value should not have been evicted')\n })\n ).to.equal(10)\n })\n\n it('should ignore additional expiration condition on newly retrieved data', async function () {\n const cache = new LruTemporisedAsyncCache<string, number>(3, () => 0)\n expect(\n await cache.get(\n 'a',\n async () => ({ item: 1 }),\n () => true\n )\n ).to.equal(1)\n expect(\n await cache.get('a', async () => {\n throw new Error('Value should not have been evicted')\n })\n ).to.equal(1)\n })\n\n it('should evict the least recently used item if full, regardless of expiration time of items', async function () {\n const cache = new LruTemporisedAsyncCache<string, number>(3, (v) => (v == 4 ? 10 : 0))\n expect(await cache.get('a', async () => ({ item: 1 }))).to.equal(1)\n expect(await cache.get('b', async () => ({ item: 2 }))).to.equal(2)\n expect(await cache.get('c', async () => ({ item: 3 }))).to.equal(3)\n expect(\n await cache.get('d', async (prev) => {\n expect(prev).to.be.undefined\n return { item: 4 }\n })\n ).to.equal(4) // This evicts \"a\"\n expect(\n await cache.get('b', async () => {\n throw new Error('Value should not have been evicted')\n })\n ).to.equal(2)\n expect(\n await cache.get('c', async () => {\n throw new Error('Value should not have been evicted')\n })\n ).to.equal(3)\n expect(\n await cache.get('d', async () => {\n throw new Error('Value should not have been evicted')\n })\n ).to.equal(4)\n expect(\n await cache.get('a', async (prev) => {\n expect(prev).to.be.undefined // \"a\" was previously evicted so prev should be undefined\n return { item: 5 }\n })\n ).to.equal(5) // This evicts \"b\"\n await sleep(20)\n // Cache for \"d\" is expired, but LRU is \"c\", so we still evict \"c\"\n expect(await cache.get('b', async () => ({ item: 6 }))).to.equal(6)\n expect(\n await cache.get('a', async () => {\n throw new Error('Value should not have been evicted')\n })\n ).to.equal(5)\n expect(\n await cache.get('d', async (previousValue) => {\n expect(previousValue).to.equal(4)\n return { item: 7 }\n })\n ).to.equal(7)\n expect(\n await cache.get('c', async (previousValue) => {\n expect(previousValue).to.be.undefined\n return { item: 8 }\n })\n ).to.equal(8)\n })\n\n it('should update least recently used item', async function () {\n const cache = new LruTemporisedAsyncCache<string, number>(3, () => 0)\n expect(await cache.get('a', async () => ({ item: 1 }))).to.equal(1)\n expect(await cache.get('b', async () => ({ item: 2 }))).to.equal(2)\n expect(await cache.get('c', async () => ({ item: 3 }))).to.equal(3)\n // We retrieve \"a\" again, so LRU will be \"b\"\n expect(\n await cache.get('a', async () => {\n throw new Error('Value should not have been evicted')\n })\n ).to.equal(1)\n // Now we run out of space and evict b\n expect(await cache.get('d', async () => ({ item: 4 }))).to.equal(4)\n expect(\n await cache.get('a', async () => {\n throw new Error('Value should not have been evicted')\n })\n ).to.equal(1)\n expect(\n await cache.get('c', async () => {\n throw new Error('Value should not have been evicted')\n })\n ).to.equal(3)\n expect(\n await cache.get('b', async (previousValue) => {\n expect(previousValue).to.be.undefined\n return { item: 5 }\n })\n ).to.equal(5)\n })\n\n it('should support additional eviction triggers for any eviction reason - time based expiration', async function () {\n const cache = new LruTemporisedAsyncCache<string, number>(2, () => 10)\n let didTrigger = false\n expect(\n await cache.get('a', async () => ({\n item: 1,\n onEviction: (isReplacement) => {\n expect(isReplacement).to.be.true\n didTrigger = true\n },\n }))\n ).to.equal(1)\n expect(didTrigger).to.be.false\n await sleep(20)\n expect(didTrigger).to.be.false\n expect(await cache.get('a', async () => ({ item: 2 }))).to.equal(2)\n expect(didTrigger).to.be.true\n })\n\n it('should support additional eviction triggers for any eviction reason - additional expiration condition', async function () {\n const cache = new LruTemporisedAsyncCache<string, number>(2, () => 0)\n let didTrigger = false\n expect(\n await cache.get('a', async () => ({\n item: 1,\n onEviction: (isReplacement) => {\n expect(isReplacement).to.be.true\n didTrigger = true\n },\n }))\n ).to.equal(1)\n expect(didTrigger).to.be.false\n expect(\n await cache.get(\n 'a',\n async () => ({ item: 2 }),\n () => true\n )\n ).to.equal(2)\n expect(didTrigger).to.be.true\n })\n\n it('should support additional eviction triggers for any eviction reason - eviction because out of slots', async function () {\n const cache = new LruTemporisedAsyncCache<string, number>(1, () => 0)\n let didTrigger = false\n expect(\n await cache.get('a', async () => ({\n item: 1,\n onEviction: (isReplacement) => {\n expect(isReplacement).to.be.false\n didTrigger = true\n },\n }))\n ).to.equal(1)\n expect(didTrigger).to.be.false\n expect(await cache.get('b', async () => ({ item: 2 }))).to.equal(2)\n expect(didTrigger).to.be.true\n })\n\n it('should support additional eviction triggers for any eviction reason - eviction due to clear, if requested', async function () {\n const cache = new LruTemporisedAsyncCache<string, number>(2, () => 0)\n let didTrigger = false\n expect(\n await cache.get('a', async () => ({\n item: 1,\n onEviction: () => {\n didTrigger = true\n },\n }))\n ).to.equal(1)\n cache.clear(false)\n expect(didTrigger).to.be.false\n expect(\n await cache.get('a', async (previousValue) => {\n expect(previousValue).to.be.undefined\n return {\n item: 2,\n onEviction: (isReplacement) => {\n expect(isReplacement).to.be.false\n didTrigger = true\n },\n }\n })\n ).to.equal(2)\n cache.clear(true)\n expect(didTrigger).to.be.true\n })\n\n it('should not start parallel retrieval jobs for the same key if the job was not evicted', async function () {\n const cache = new LruTemporisedAsyncCache<string, number>(1, () => 0)\n const job1 = cache.get('a', async () => {\n await sleep(20)\n return { item: 1 }\n })\n const job2 = cache.get('a', async () => {\n throw new Error('Should not start another job')\n })\n expect(await job2).to.equal(1)\n expect(await job1).to.equal(1)\n })\n\n it('should be able to evict uncompleted jobs, but still complete them', async function () {\n const cache = new LruTemporisedAsyncCache<string, number>(1, () => 0)\n const job1 = cache.get('a', async () => {\n await sleep(20)\n return { item: 1 }\n })\n expect(await cache.get('b', async () => ({ item: 2 }))).to.equal(2)\n expect(await job1).to.equal(1)\n expect(\n await cache.get('b', async () => {\n throw new Error('Value should not have been evicted')\n })\n ).to.equal(2)\n })\n\n it('evicted uncompleted jobs, should not override more recent results for the same key when completed', async function () {\n const cache = new LruTemporisedAsyncCache<string, number>(1, () => 0)\n const job1 = cache.get('a', async () => {\n await sleep(20)\n return { item: 1 }\n })\n expect(await cache.get('b', async () => ({ item: 2 }))).to.equal(2)\n expect(\n await cache.get('a', async (prev) => {\n expect(prev).to.be.undefined\n return { item: 3 }\n })\n ).to.equal(3)\n expect(await job1).to.equal(1)\n expect(\n await cache.get('a', async () => {\n throw new Error('Value should not have been evicted')\n })\n ).to.equal(3)\n })\n\n it('should rethrow exceptions from the retrieval job to anyone waiting on the job, but allow future tasks to reattempt the job', async function () {\n const cache = new LruTemporisedAsyncCache<string, number>(1, () => 0)\n const error = new Error('This error is expected')\n const job1 = cache.get('a', async () => {\n await sleep(20)\n throw error\n })\n const job2 = cache.get('a', async () => {\n throw new Error('Should not start another job')\n })\n try {\n await job2\n } catch (e) {\n expect(e).to.equal(error)\n }\n try {\n await job1\n } catch (e) {\n expect(e).to.equal(error)\n }\n expect(await cache.get('a', async () => ({ item: 1 }))).to.equal(1)\n })\n\n it('should immediately perform the eviction triggers on completion if the data will not cached when the job completes', async function () {\n const cache = new LruTemporisedAsyncCache<string, number>(1, () => 0)\n let eviction1Performed = false\n const job1 = cache.get('a', async () => {\n await sleep(20)\n return {\n item: 1,\n onEviction: (isReplacement) => {\n expect(isReplacement).to.be.false\n eviction1Performed = true\n },\n }\n })\n // Lose reference to existing and incomplete job for key 'a'\n expect(await cache.get('b', async () => ({ item: 2 }))).to.equal(2)\n // Can't evict because not yet completed\n expect(eviction1Performed).to.be.false\n // Wait for job completion and eviction\n expect(await job1).to.equal(1)\n expect(eviction1Performed).to.be.true\n })\n\n it('should not replace newer data if old data completes after replacement by newer data', async function () {\n const cache = new LruTemporisedAsyncCache<string, number>(1, () => 0)\n let eviction1Performed = false\n const job1 = cache.get('a', async () => {\n await sleep(20)\n return {\n item: 1,\n onEviction: (isReplacement) => {\n expect(isReplacement).to.be.true\n eviction1Performed = true\n },\n }\n })\n // Lose reference to existing and incomplete job for key 'a'\n expect(await cache.get('b', async () => ({ item: 2 }))).to.equal(2)\n // Can't evict because not yet completed\n expect(eviction1Performed).to.be.false\n // Start new job for 'a' since we don't know about the existing one\n expect(\n await cache.get('a', async () => ({\n item: 3,\n onEviction: () => {\n throw new Error('This should not be called')\n },\n }))\n ).to.equal(3)\n expect(await job1).to.equal(1)\n expect(eviction1Performed).to.be.true\n })\n})\n"]}
@@ -1 +0,0 @@
1
- import 'isomorphic-fetch';
@@ -1,124 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- const test_utils_1 = require("../utils/test_utils");
13
- const icc_x_api_1 = require("../../icc-x-api");
14
- const crypto_1 = require("crypto");
15
- const chai_1 = require("chai");
16
- require("isomorphic-fetch");
17
- const MaintenanceTask_1 = require("../../icc-api/model/MaintenanceTask");
18
- const Service_1 = require("../../icc-api/model/Service");
19
- const types_1 = require("@icure/test-setup/types");
20
- var initApi = test_utils_1.TestUtils.initApi;
21
- const TestCryptoStrategies_1 = require("../utils/TestCryptoStrategies");
22
- const TestStorage_1 = require("../utils/TestStorage");
23
- const MaintenanceTaskByHcPartyAndTypeFilter_1 = require("../../icc-x-api/filters/MaintenanceTaskByHcPartyAndTypeFilter");
24
- (0, test_utils_1.setLocalStorage)(fetch);
25
- let env;
26
- // Uses WebSocket
27
- (0, test_utils_1.describeNoLite)('CSM-185', function () {
28
- return __awaiter(this, void 0, void 0, function* () {
29
- before(function () {
30
- return __awaiter(this, void 0, void 0, function* () {
31
- this.timeout(600000);
32
- const initializer = yield (0, test_utils_1.getEnvironmentInitializer)();
33
- env = yield initializer.execute((0, types_1.getEnvVariables)());
34
- });
35
- });
36
- it('An HCP should be able to listen to MaintenanceTask from a patient that lost their keys', function () {
37
- return __awaiter(this, void 0, void 0, function* () {
38
- const hcpApis = yield initApi(env, test_utils_1.hcp1Username);
39
- const hcpUser = yield hcpApis.userApi.getCurrentUser();
40
- const patApis = yield initApi(env, test_utils_1.patUsername);
41
- const patUser = yield patApis.userApi.getCurrentUser();
42
- const patientNote = 'Some secret note';
43
- const p2 = yield hcpApis.patientApi.createPatientWithUser(hcpUser, yield hcpApis.patientApi.newInstance(hcpUser, {
44
- firstName: 'John',
45
- lastName: 'Doe',
46
- note: patientNote,
47
- }, { additionalDelegates: { [patUser.patientId]: 'WRITE' } }));
48
- const heNote = 'Another secret note';
49
- yield patApis.cryptoApi.forceReload();
50
- const he = yield patApis.healthcareElementApi.createHealthElementWithUser(patUser, yield patApis.healthcareElementApi.newInstance(patUser, p2, { note: heNote }, { additionalDelegates: { [hcpUser.healthcarePartyId]: 'WRITE' } }));
51
- const ctcData = 'Some data';
52
- const ctcDescr = 'Some description';
53
- const ctc = yield hcpApis.contactApi.createContactWithUser(hcpUser, yield hcpApis.contactApi.newInstance(hcpUser, p2, {
54
- services: [new Service_1.Service({ label: 'svc', content: { fr: { stringValue: ctcData } } })],
55
- descr: ctcDescr,
56
- }, { additionalDelegates: { [patUser.patientId]: 'WRITE' } }));
57
- function checkContactDecrypted(ctc) {
58
- var _a, _b, _c, _d;
59
- (0, chai_1.expect)((_d = (_c = (_b = (_a = ctc.services) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.content) === null || _c === void 0 ? void 0 : _c.fr) === null || _d === void 0 ? void 0 : _d.stringValue).to.equal(ctcData);
60
- (0, chai_1.expect)(ctc.descr).to.equal(ctcDescr);
61
- }
62
- function checkContactEncrypted(ctc) {
63
- var _a, _b;
64
- (0, chai_1.expect)((_a = ctc.services) === null || _a === void 0 ? void 0 : _a[0]).to.not.be.undefined;
65
- (0, chai_1.expect)(Object.keys((_b = ctc.services[0].content) !== null && _b !== void 0 ? _b : {})).to.be.empty;
66
- (0, chai_1.expect)(ctc.descr).to.be.undefined;
67
- }
68
- (0, chai_1.expect)((yield hcpApis.patientApi.getPatientWithUser(hcpUser, p2.id)).note).to.equal(patientNote);
69
- (0, chai_1.expect)((yield patApis.patientApi.getPatientWithUser(patUser, p2.id)).note).to.equal(patientNote);
70
- (0, chai_1.expect)((yield hcpApis.healthcareElementApi.getHealthElementWithUser(hcpUser, he.id)).note).to.equal(heNote);
71
- (0, chai_1.expect)((yield patApis.healthcareElementApi.getHealthElementWithUser(patUser, he.id)).note).to.equal(heNote);
72
- checkContactDecrypted(yield hcpApis.contactApi.getContactWithUser(hcpUser, ctc.id));
73
- checkContactDecrypted(yield patApis.contactApi.getContactWithUser(patUser, ctc.id));
74
- const events = [];
75
- const statuses = [];
76
- let eventReceivedPromiseResolve;
77
- let eventReceivedPromiseReject;
78
- const eventReceivedPromise = new Promise((res, rej) => {
79
- eventReceivedPromiseResolve = res;
80
- eventReceivedPromiseReject = rej;
81
- });
82
- const connection = yield hcpApis.maintenanceTaskApi.subscribeToMaintenanceTaskEvents(['CREATE'], new MaintenanceTaskByHcPartyAndTypeFilter_1.MaintenanceTaskByHcPartyAndTypeFilter({
83
- healthcarePartyId: hcpUser.healthcarePartyId,
84
- type: MaintenanceTask_1.MaintenanceTask.TaskTypeEnum.KeyPairUpdate,
85
- }), (task) => __awaiter(this, void 0, void 0, function* () {
86
- events.push(task);
87
- eventReceivedPromiseResolve();
88
- }), {
89
- debug: true,
90
- });
91
- connection
92
- .onConnected(() => __awaiter(this, void 0, void 0, function* () {
93
- statuses.push('connected');
94
- yield (0, icc_x_api_1.sleep)(2000);
95
- const newPair = yield patApis.cryptoApi.primitives.RSA.generateKeyPair(icc_x_api_1.ShaVersion.Sha256);
96
- const patApisLost = yield icc_x_api_1.IcureApi.initialise(env.iCureUrl, { username: env.dataOwnerDetails[test_utils_1.patUsername].user, password: env.dataOwnerDetails[test_utils_1.patUsername].password }, new TestCryptoStrategies_1.TestCryptoStrategies(newPair), crypto_1.webcrypto, fetch, {
97
- createMaintenanceTasksOnNewKey: true,
98
- storage: new TestStorage_1.TestStorage(),
99
- keyStorage: new TestStorage_1.TestKeyStorage(),
100
- });
101
- const retrievedPatientLost = yield patApisLost.patientApi.getPatientWithUser(patUser, p2.id);
102
- const retrievedHeLost = yield patApisLost.healthcareElementApi.getHealthElementWithUser(patUser, he.id);
103
- (0, chai_1.expect)(retrievedPatientLost).to.not.be.undefined;
104
- (0, chai_1.expect)(retrievedHeLost).to.not.be.undefined;
105
- (0, chai_1.expect)(retrievedPatientLost.note).to.be.undefined;
106
- (0, chai_1.expect)(retrievedHeLost.note).to.be.undefined;
107
- yield (0, icc_x_api_1.sleep)(2000);
108
- }))
109
- .onClosed(() => __awaiter(this, void 0, void 0, function* () {
110
- statuses.push('closed');
111
- yield (0, icc_x_api_1.sleep)(2000);
112
- }));
113
- const timeout = setTimeout(eventReceivedPromiseReject, 20000);
114
- yield eventReceivedPromise.then(() => clearTimeout(timeout)).catch(() => { });
115
- connection.close();
116
- yield (0, icc_x_api_1.sleep)(3000);
117
- (0, chai_1.expect)(statuses).to.deep.equal(['connected', 'closed']);
118
- (0, chai_1.expect)(events.length).to.be.equal(1);
119
- (0, chai_1.expect)(events[0].taskType).to.equal(MaintenanceTask_1.MaintenanceTask.TaskTypeEnum.KeyPairUpdate);
120
- });
121
- }).timeout(60000);
122
- });
123
- });
124
- //# sourceMappingURL=CSM-185.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CSM-185.js","sourceRoot":"","sources":["../../../test/support/CSM-185.ts"],"names":[],"mappings":"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","sourcesContent":["import { describeNoLite, getEnvironmentInitializer, hcp1Username, patUsername, setLocalStorage, TestUtils } from '../utils/test_utils'\nimport { IcureApi, ShaVersion, sleep } from '../../icc-x-api'\nimport { webcrypto } from 'crypto'\nimport { expect } from 'chai'\nimport 'isomorphic-fetch'\nimport { MaintenanceTask } from '../../icc-api/model/MaintenanceTask'\nimport { Service } from '../../icc-api/model/Service'\nimport { Contact } from '../../icc-api/model/Contact'\nimport { getEnvVariables, TestVars } from '@icure/test-setup/types'\nimport initApi = TestUtils.initApi\nimport { TestCryptoStrategies } from '../utils/TestCryptoStrategies'\nimport { TestKeyStorage, TestStorage } from '../utils/TestStorage'\nimport { MaintenanceTaskByHcPartyAndTypeFilter } from '../../icc-x-api/filters/MaintenanceTaskByHcPartyAndTypeFilter'\nsetLocalStorage(fetch)\n\nlet env: TestVars\n\n// Uses WebSocket\ndescribeNoLite('CSM-185', async function () {\n before(async function () {\n this.timeout(600000)\n const initializer = await getEnvironmentInitializer()\n env = await initializer.execute(getEnvVariables())\n })\n\n it('An HCP should be able to listen to MaintenanceTask from a patient that lost their keys', async function () {\n const hcpApis = await initApi(env, hcp1Username)\n const hcpUser = await hcpApis.userApi.getCurrentUser()\n const patApis = await initApi(env, patUsername)\n const patUser = await patApis.userApi.getCurrentUser()\n const patientNote = 'Some secret note'\n const p2 = await hcpApis.patientApi.createPatientWithUser(\n hcpUser,\n await hcpApis.patientApi.newInstance(\n hcpUser,\n {\n firstName: 'John',\n lastName: 'Doe',\n note: patientNote,\n },\n { additionalDelegates: { [patUser.patientId!]: 'WRITE' } }\n )\n )\n const heNote = 'Another secret note'\n await patApis.cryptoApi.forceReload()\n const he = await patApis.healthcareElementApi.createHealthElementWithUser(\n patUser,\n await patApis.healthcareElementApi.newInstance(\n patUser,\n p2,\n { note: heNote },\n { additionalDelegates: { [hcpUser.healthcarePartyId!]: 'WRITE' } }\n )\n )\n const ctcData = 'Some data'\n const ctcDescr = 'Some description'\n const ctc = await hcpApis.contactApi.createContactWithUser(\n hcpUser,\n await hcpApis.contactApi.newInstance(\n hcpUser,\n p2,\n {\n services: [new Service({ label: 'svc', content: { fr: { stringValue: ctcData } } })],\n descr: ctcDescr,\n },\n { additionalDelegates: { [patUser.patientId!]: 'WRITE' } }\n )\n )\n function checkContactDecrypted(ctc: Contact) {\n expect(ctc.services?.[0]?.content?.fr?.stringValue).to.equal(ctcData)\n expect(ctc.descr).to.equal(ctcDescr)\n }\n function checkContactEncrypted(ctc: Contact) {\n expect(ctc.services?.[0]).to.not.be.undefined\n expect(Object.keys(ctc.services![0].content ?? {})).to.be.empty\n expect(ctc.descr).to.be.undefined\n }\n expect((await hcpApis.patientApi.getPatientWithUser(hcpUser, p2.id!)).note).to.equal(patientNote)\n expect((await patApis.patientApi.getPatientWithUser(patUser, p2.id!)).note).to.equal(patientNote)\n expect((await hcpApis.healthcareElementApi.getHealthElementWithUser(hcpUser, he.id!)).note).to.equal(heNote)\n expect((await patApis.healthcareElementApi.getHealthElementWithUser(patUser, he.id!)).note).to.equal(heNote)\n checkContactDecrypted(await hcpApis.contactApi.getContactWithUser(hcpUser, ctc!.id!))\n checkContactDecrypted(await patApis.contactApi.getContactWithUser(patUser, ctc!.id!))\n\n const events: MaintenanceTask[] = []\n const statuses: string[] = []\n\n let eventReceivedPromiseResolve!: (value: void | PromiseLike<void>) => void\n let eventReceivedPromiseReject!: (reason?: any) => void\n const eventReceivedPromise = new Promise<void>((res, rej) => {\n eventReceivedPromiseResolve = res\n eventReceivedPromiseReject = rej\n })\n\n const connection = await hcpApis.maintenanceTaskApi.subscribeToMaintenanceTaskEvents(\n ['CREATE'],\n new MaintenanceTaskByHcPartyAndTypeFilter({\n healthcarePartyId: hcpUser!.healthcarePartyId!,\n type: MaintenanceTask.TaskTypeEnum.KeyPairUpdate,\n }),\n async (task) => {\n events.push(task)\n eventReceivedPromiseResolve()\n },\n {\n debug: true,\n }\n )\n\n connection\n .onConnected(async () => {\n statuses.push('connected')\n await sleep(2_000)\n\n const newPair = await patApis.cryptoApi.primitives.RSA.generateKeyPair(ShaVersion.Sha256)\n const patApisLost = await IcureApi.initialise(\n env.iCureUrl,\n { username: env.dataOwnerDetails[patUsername].user, password: env.dataOwnerDetails[patUsername].password },\n new TestCryptoStrategies(newPair),\n webcrypto as any,\n fetch,\n {\n createMaintenanceTasksOnNewKey: true,\n storage: new TestStorage(),\n keyStorage: new TestKeyStorage(),\n }\n )\n const retrievedPatientLost = await patApisLost.patientApi.getPatientWithUser(patUser, p2.id!)\n const retrievedHeLost = await patApisLost.healthcareElementApi.getHealthElementWithUser(patUser, he.id!)\n expect(retrievedPatientLost).to.not.be.undefined\n expect(retrievedHeLost).to.not.be.undefined\n expect(retrievedPatientLost.note).to.be.undefined\n expect(retrievedHeLost.note).to.be.undefined\n\n await sleep(2_000)\n })\n .onClosed(async () => {\n statuses.push('closed')\n await sleep(2_000)\n })\n\n const timeout = setTimeout(eventReceivedPromiseReject, 20_000)\n await eventReceivedPromise.then(() => clearTimeout(timeout)).catch(() => {})\n\n connection.close()\n\n await sleep(3_000)\n\n expect(statuses).to.deep.equal(['connected', 'closed'])\n expect(events.length).to.be.equal(1)\n expect(events[0].taskType).to.equal(MaintenanceTask.TaskTypeEnum.KeyPairUpdate)\n }).timeout(60_000)\n})\n"]}
@@ -1 +0,0 @@
1
- import 'isomorphic-fetch';