@icure/api 8.11.0 → 8.13.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 (302) hide show
  1. package/icc-api/api/IccUserApi.d.ts +1 -1
  2. package/icc-api/api/IccUserApi.js +2 -2
  3. package/icc-api/api/IccUserApi.js.map +1 -1
  4. package/icc-api/model/HealthElement.d.ts +11 -0
  5. package/icc-api/model/HealthElement.js.map +1 -1
  6. package/icc-api/model/HealthElementAsserter.d.ts +33 -0
  7. package/icc-api/model/HealthElementAsserter.js +28 -0
  8. package/icc-api/model/HealthElementAsserter.js.map +1 -0
  9. package/icc-api/model/HealthElementQualifiedLink.d.ts +31 -0
  10. package/icc-api/model/HealthElementQualifiedLink.js +26 -0
  11. package/icc-api/model/HealthElementQualifiedLink.js.map +1 -0
  12. package/icc-api/model/models.d.ts +2 -0
  13. package/icc-api/model/models.js +2 -0
  14. package/icc-api/model/models.js.map +1 -1
  15. package/icc-x-api/filters/HealthElementByAssociationIdFilter.d.ts +23 -0
  16. package/icc-x-api/filters/HealthElementByAssociationIdFilter.js +30 -0
  17. package/icc-x-api/filters/HealthElementByAssociationIdFilter.js.map +1 -0
  18. package/icc-x-api/filters/HealthElementByQualifiedLinkFilter.d.ts +24 -0
  19. package/icc-x-api/filters/HealthElementByQualifiedLinkFilter.js +30 -0
  20. package/icc-x-api/filters/HealthElementByQualifiedLinkFilter.js.map +1 -0
  21. package/icc-x-api/filters/filters.d.ts +2 -0
  22. package/icc-x-api/filters/filters.js +2 -0
  23. package/icc-x-api/filters/filters.js.map +1 -1
  24. package/icc-x-api/index.js +1 -1
  25. package/icc-x-api/index.js.map +1 -1
  26. package/package.json +1 -1
  27. package/test/benchmarks/lzma-benchmark.spec.d.ts +0 -1
  28. package/test/benchmarks/lzma-benchmark.spec.js +0 -131
  29. package/test/benchmarks/lzma-benchmark.spec.js.map +0 -1
  30. package/test/benchmarks/lzma-compat.spec.d.ts +0 -1
  31. package/test/benchmarks/lzma-compat.spec.js +0 -187
  32. package/test/benchmarks/lzma-compat.spec.js.map +0 -1
  33. package/test/benchmarks/playwright.config.d.ts +0 -2
  34. package/test/benchmarks/playwright.config.js +0 -18
  35. package/test/benchmarks/playwright.config.js.map +0 -1
  36. package/test/icc-api/api/IccAgendaApi.d.ts +0 -1
  37. package/test/icc-api/api/IccAgendaApi.js +0 -64
  38. package/test/icc-api/api/IccAgendaApi.js.map +0 -1
  39. package/test/icc-api/api/IccAnonymousAccessApi.d.ts +0 -1
  40. package/test/icc-api/api/IccAnonymousAccessApi.js +0 -58
  41. package/test/icc-api/api/IccAnonymousAccessApi.js.map +0 -1
  42. package/test/icc-api/api/IccCalendarItemApi.d.ts +0 -1
  43. package/test/icc-api/api/IccCalendarItemApi.js +0 -67
  44. package/test/icc-api/api/IccCalendarItemApi.js.map +0 -1
  45. package/test/icc-api/api/IccCalendarItemTypeApi.d.ts +0 -1
  46. package/test/icc-api/api/IccCalendarItemTypeApi.js +0 -96
  47. package/test/icc-api/api/IccCalendarItemTypeApi.js.map +0 -1
  48. package/test/icc-api/api/IccCodeApi.d.ts +0 -1
  49. package/test/icc-api/api/IccCodeApi.js +0 -38
  50. package/test/icc-api/api/IccCodeApi.js.map +0 -1
  51. package/test/icc-api/api/IccDocumentApi.d.ts +0 -1
  52. package/test/icc-api/api/IccDocumentApi.js +0 -199
  53. package/test/icc-api/api/IccDocumentApi.js.map +0 -1
  54. package/test/icc-api/api/IccGroupApi.d.ts +0 -1
  55. package/test/icc-api/api/IccGroupApi.js +0 -50
  56. package/test/icc-api/api/IccGroupApi.js.map +0 -1
  57. package/test/icc-api/api/IccKeywordApi.d.ts +0 -1
  58. package/test/icc-api/api/IccKeywordApi.js +0 -64
  59. package/test/icc-api/api/IccKeywordApi.js.map +0 -1
  60. package/test/icc-api/api/IccMedicalLocationApi.d.ts +0 -1
  61. package/test/icc-api/api/IccMedicalLocationApi.js +0 -64
  62. package/test/icc-api/api/IccMedicalLocationApi.js.map +0 -1
  63. package/test/icc-api/api/IccPlaceApi.d.ts +0 -1
  64. package/test/icc-api/api/IccPlaceApi.js +0 -64
  65. package/test/icc-api/api/IccPlaceApi.js.map +0 -1
  66. package/test/icc-api/api/IccRecoveryDataApi.d.ts +0 -1
  67. package/test/icc-api/api/IccRecoveryDataApi.js +0 -95
  68. package/test/icc-api/api/IccRecoveryDataApi.js.map +0 -1
  69. package/test/icc-api/api/IccRoleApi.d.ts +0 -1
  70. package/test/icc-api/api/IccRoleApi.js +0 -34
  71. package/test/icc-api/api/IccRoleApi.js.map +0 -1
  72. package/test/icc-api/api/IccUserApi.d.ts +0 -1
  73. package/test/icc-api/api/IccUserApi.js +0 -96
  74. package/test/icc-api/api/IccUserApi.js.map +0 -1
  75. package/test/icc-api/e2e/IccCalendarItemApi.d.ts +0 -1
  76. package/test/icc-api/e2e/IccCalendarItemApi.js +0 -46
  77. package/test/icc-api/e2e/IccCalendarItemApi.js.map +0 -1
  78. package/test/icc-api/model/modelHelpersTest.d.ts +0 -1
  79. package/test/icc-api/model/modelHelpersTest.js +0 -45
  80. package/test/icc-api/model/modelHelpersTest.js.map +0 -1
  81. package/test/icc-x-api/auth/group-switch-test.d.ts +0 -1
  82. package/test/icc-x-api/auth/group-switch-test.js +0 -81
  83. package/test/icc-x-api/auth/group-switch-test.js.map +0 -1
  84. package/test/icc-x-api/auth/jwt-concurrency-test.d.ts +0 -2
  85. package/test/icc-x-api/auth/jwt-concurrency-test.js +0 -112
  86. package/test/icc-x-api/auth/jwt-concurrency-test.js.map +0 -1
  87. package/test/icc-x-api/auth/jwt-provider-test.d.ts +0 -1
  88. package/test/icc-x-api/auth/jwt-provider-test.js +0 -197
  89. package/test/icc-x-api/auth/jwt-provider-test.js.map +0 -1
  90. package/test/icc-x-api/auth/smart-auth-provider-test.d.ts +0 -1
  91. package/test/icc-x-api/auth/smart-auth-provider-test.js +0 -224
  92. package/test/icc-x-api/auth/smart-auth-provider-test.js.map +0 -1
  93. package/test/icc-x-api/autofix-anonymity-test.d.ts +0 -1
  94. package/test/icc-x-api/autofix-anonymity-test.js +0 -122
  95. package/test/icc-x-api/autofix-anonymity-test.js.map +0 -1
  96. package/test/icc-x-api/confidential-entities-test.d.ts +0 -1
  97. package/test/icc-x-api/confidential-entities-test.js +0 -168
  98. package/test/icc-x-api/confidential-entities-test.js.map +0 -1
  99. package/test/icc-x-api/crud/comprehensive-crud-test.d.ts +0 -1
  100. package/test/icc-x-api/crud/comprehensive-crud-test.js +0 -276
  101. package/test/icc-x-api/crud/comprehensive-crud-test.js.map +0 -1
  102. package/test/icc-x-api/crud/entities-crud-test-interface.d.ts +0 -16
  103. package/test/icc-x-api/crud/entities-crud-test-interface.js +0 -407
  104. package/test/icc-x-api/crud/entities-crud-test-interface.js.map +0 -1
  105. package/test/icc-x-api/crypto/anonymous-delegations-test.d.ts +0 -1
  106. package/test/icc-x-api/crypto/anonymous-delegations-test.js +0 -587
  107. package/test/icc-x-api/crypto/anonymous-delegations-test.js.map +0 -1
  108. package/test/icc-x-api/crypto/concurrency.d.ts +0 -1
  109. package/test/icc-x-api/crypto/concurrency.js +0 -35
  110. package/test/icc-x-api/crypto/concurrency.js.map +0 -1
  111. package/test/icc-x-api/crypto/crypto-utils.d.ts +0 -1
  112. package/test/icc-x-api/crypto/crypto-utils.js +0 -79
  113. package/test/icc-x-api/crypto/crypto-utils.js.map +0 -1
  114. package/test/icc-x-api/crypto/cryptoTest.d.ts +0 -2
  115. package/test/icc-x-api/crypto/cryptoTest.js +0 -402
  116. package/test/icc-x-api/crypto/cryptoTest.js.map +0 -1
  117. package/test/icc-x-api/crypto/delegate-ci-to-patient-with-missing-keys-test.d.ts +0 -1
  118. package/test/icc-x-api/crypto/delegate-ci-to-patient-with-missing-keys-test.js +0 -166
  119. package/test/icc-x-api/crypto/delegate-ci-to-patient-with-missing-keys-test.js.map +0 -1
  120. package/test/icc-x-api/crypto/exchange-data-manager-test.d.ts +0 -1
  121. package/test/icc-x-api/crypto/exchange-data-manager-test.js +0 -674
  122. package/test/icc-x-api/crypto/exchange-data-manager-test.js.map +0 -1
  123. package/test/icc-x-api/crypto/full-crypto-test.d.ts +0 -1
  124. package/test/icc-x-api/crypto/full-crypto-test.js +0 -454
  125. package/test/icc-x-api/crypto/full-crypto-test.js.map +0 -1
  126. package/test/icc-x-api/crypto/legacy-metadata-migration-test.d.ts +0 -1
  127. package/test/icc-x-api/crypto/legacy-metadata-migration-test.js +0 -379
  128. package/test/icc-x-api/crypto/legacy-metadata-migration-test.js.map +0 -1
  129. package/test/icc-x-api/crypto/secure-delegations-manager-test.d.ts +0 -1
  130. package/test/icc-x-api/crypto/secure-delegations-manager-test.js +0 -278
  131. package/test/icc-x-api/crypto/secure-delegations-manager-test.js.map +0 -1
  132. package/test/icc-x-api/crypto/shamir.d.ts +0 -2
  133. package/test/icc-x-api/crypto/shamir.js +0 -167
  134. package/test/icc-x-api/crypto/shamir.js.map +0 -1
  135. package/test/icc-x-api/crypto/share-deduplication-test.d.ts +0 -1
  136. package/test/icc-x-api/crypto/share-deduplication-test.js +0 -250
  137. package/test/icc-x-api/crypto/share-deduplication-test.js.map +0 -1
  138. package/test/icc-x-api/crypto/share-to-newly-created-patient-from-hcp.d.ts +0 -1
  139. package/test/icc-x-api/crypto/share-to-newly-created-patient-from-hcp.js +0 -71
  140. package/test/icc-x-api/crypto/share-to-newly-created-patient-from-hcp.js.map +0 -1
  141. package/test/icc-x-api/crypto/soft-deleted-data-owners.d.ts +0 -2
  142. package/test/icc-x-api/crypto/soft-deleted-data-owners.js +0 -113
  143. package/test/icc-x-api/crypto/soft-deleted-data-owners.js.map +0 -1
  144. package/test/icc-x-api/crypto/user-encryption-keys-manager-test.d.ts +0 -1
  145. package/test/icc-x-api/crypto/user-encryption-keys-manager-test.js +0 -246
  146. package/test/icc-x-api/crypto/user-encryption-keys-manager-test.js.map +0 -1
  147. package/test/icc-x-api/entity-with-attachments-api-test.d.ts +0 -1
  148. package/test/icc-x-api/entity-with-attachments-api-test.js +0 -142
  149. package/test/icc-x-api/entity-with-attachments-api-test.js.map +0 -1
  150. package/test/icc-x-api/filters/filters.d.ts +0 -1
  151. package/test/icc-x-api/filters/filters.js +0 -49
  152. package/test/icc-x-api/filters/filters.js.map +0 -1
  153. package/test/icc-x-api/filters/healthelement.d.ts +0 -1
  154. package/test/icc-x-api/filters/healthelement.js +0 -333
  155. package/test/icc-x-api/filters/healthelement.js.map +0 -1
  156. package/test/icc-x-api/icc-accesslog-x-api.d.ts +0 -1
  157. package/test/icc-x-api/icc-accesslog-x-api.js +0 -106
  158. package/test/icc-x-api/icc-accesslog-x-api.js.map +0 -1
  159. package/test/icc-x-api/icc-application-settings-x-api.d.ts +0 -1
  160. package/test/icc-x-api/icc-application-settings-x-api.js +0 -91
  161. package/test/icc-x-api/icc-application-settings-x-api.js.map +0 -1
  162. package/test/icc-x-api/icc-auth-api.d.ts +0 -1
  163. package/test/icc-x-api/icc-auth-api.js +0 -47
  164. package/test/icc-x-api/icc-auth-api.js.map +0 -1
  165. package/test/icc-x-api/icc-calendar-item-x-api.d.ts +0 -1
  166. package/test/icc-x-api/icc-calendar-item-x-api.js +0 -150
  167. package/test/icc-x-api/icc-calendar-item-x-api.js.map +0 -1
  168. package/test/icc-x-api/icc-code-x-api-test.d.ts +0 -1
  169. package/test/icc-x-api/icc-code-x-api-test.js +0 -74
  170. package/test/icc-x-api/icc-code-x-api-test.js.map +0 -1
  171. package/test/icc-x-api/icc-contact-x-api.d.ts +0 -1
  172. package/test/icc-x-api/icc-contact-x-api.js +0 -355
  173. package/test/icc-x-api/icc-contact-x-api.js.map +0 -1
  174. package/test/icc-x-api/icc-document-x-api.d.ts +0 -1
  175. package/test/icc-x-api/icc-document-x-api.js +0 -76
  176. package/test/icc-x-api/icc-document-x-api.js.map +0 -1
  177. package/test/icc-x-api/icc-form-x-api.d.ts +0 -1
  178. package/test/icc-x-api/icc-form-x-api.js +0 -413
  179. package/test/icc-x-api/icc-form-x-api.js.map +0 -1
  180. package/test/icc-x-api/icc-hcparty-x-api-test.d.ts +0 -1
  181. package/test/icc-x-api/icc-hcparty-x-api-test.js +0 -43
  182. package/test/icc-x-api/icc-hcparty-x-api-test.js.map +0 -1
  183. package/test/icc-x-api/icc-helement-x-api-test.d.ts +0 -1
  184. package/test/icc-x-api/icc-helement-x-api-test.js +0 -155
  185. package/test/icc-x-api/icc-helement-x-api-test.js.map +0 -1
  186. package/test/icc-x-api/icc-invoice-x-api.d.ts +0 -1
  187. package/test/icc-x-api/icc-invoice-x-api.js +0 -99
  188. package/test/icc-x-api/icc-invoice-x-api.js.map +0 -1
  189. package/test/icc-x-api/icc-maintenance-task-x-api-test.d.ts +0 -1
  190. package/test/icc-x-api/icc-maintenance-task-x-api-test.js +0 -222
  191. package/test/icc-x-api/icc-maintenance-task-x-api-test.js.map +0 -1
  192. package/test/icc-x-api/icc-message-x-api.d.ts +0 -1
  193. package/test/icc-x-api/icc-message-x-api.js +0 -54
  194. package/test/icc-x-api/icc-message-x-api.js.map +0 -1
  195. package/test/icc-x-api/icc-patient-x-api-test.d.ts +0 -1
  196. package/test/icc-x-api/icc-patient-x-api-test.js +0 -209
  197. package/test/icc-x-api/icc-patient-x-api-test.js.map +0 -1
  198. package/test/icc-x-api/icc-recovery-x-api.d.ts +0 -1
  199. package/test/icc-x-api/icc-recovery-x-api.js +0 -175
  200. package/test/icc-x-api/icc-recovery-x-api.js.map +0 -1
  201. package/test/icc-x-api/icc-topic-x-api.d.ts +0 -1
  202. package/test/icc-x-api/icc-topic-x-api.js +0 -269
  203. package/test/icc-x-api/icc-topic-x-api.js.map +0 -1
  204. package/test/icc-x-api/icc-user-x-api-test.d.ts +0 -1
  205. package/test/icc-x-api/icc-user-x-api-test.js +0 -99
  206. package/test/icc-x-api/icc-user-x-api-test.js.map +0 -1
  207. package/test/icc-x-api/keyless-api.d.ts +0 -1
  208. package/test/icc-x-api/keyless-api.js +0 -125
  209. package/test/icc-x-api/keyless-api.js.map +0 -1
  210. package/test/icc-x-api/patient-user.d.ts +0 -2
  211. package/test/icc-x-api/patient-user.js +0 -103
  212. package/test/icc-x-api/patient-user.js.map +0 -1
  213. package/test/icc-x-api/storage/storage.d.ts +0 -1
  214. package/test/icc-x-api/storage/storage.js +0 -48
  215. package/test/icc-x-api/storage/storage.js.map +0 -1
  216. package/test/icc-x-api/test-api-no-parent.d.ts +0 -1
  217. package/test/icc-x-api/test-api-no-parent.js +0 -79
  218. package/test/icc-x-api/test-api-no-parent.js.map +0 -1
  219. package/test/icc-x-api/test-legacy-data-support.d.ts +0 -1
  220. package/test/icc-x-api/test-legacy-data-support.js +0 -375
  221. package/test/icc-x-api/test-legacy-data-support.js.map +0 -1
  222. package/test/icc-x-api/utils/date-encode-test.d.ts +0 -1
  223. package/test/icc-x-api/utils/date-encode-test.js +0 -150
  224. package/test/icc-x-api/utils/date-encode-test.js.map +0 -1
  225. package/test/icc-x-api/utils/graph-test.d.ts +0 -1
  226. package/test/icc-x-api/utils/graph-test.js +0 -54
  227. package/test/icc-x-api/utils/graph-test.js.map +0 -1
  228. package/test/icc-x-api/utils/lru-temporised-async-cache-test.d.ts +0 -1
  229. package/test/icc-x-api/utils/lru-temporised-async-cache-test.js +0 -364
  230. package/test/icc-x-api/utils/lru-temporised-async-cache-test.js.map +0 -1
  231. package/test/icc-x-api/utils/lzma-benchmark-test.d.ts +0 -1
  232. package/test/icc-x-api/utils/lzma-benchmark-test.js +0 -132
  233. package/test/icc-x-api/utils/lzma-benchmark-test.js.map +0 -1
  234. package/test/icc-x-api/utils/lzma-compat-test.d.ts +0 -1
  235. package/test/icc-x-api/utils/lzma-compat-test.js +0 -218
  236. package/test/icc-x-api/utils/lzma-compat-test.js.map +0 -1
  237. package/test/icc-x-api/utils/mutex-test.d.ts +0 -1
  238. package/test/icc-x-api/utils/mutex-test.js +0 -114
  239. package/test/icc-x-api/utils/mutex-test.js.map +0 -1
  240. package/test/icc-x-api/utils/to-moment-test.d.ts +0 -1
  241. package/test/icc-x-api/utils/to-moment-test.js +0 -110
  242. package/test/icc-x-api/utils/to-moment-test.js.map +0 -1
  243. package/test/support/CSM-185.d.ts +0 -1
  244. package/test/support/CSM-185.js +0 -124
  245. package/test/support/CSM-185.js.map +0 -1
  246. package/test/support/CSM-243.d.ts +0 -1
  247. package/test/support/CSM-243.js +0 -120
  248. package/test/support/CSM-243.js.map +0 -1
  249. package/test/support/CSM-543.d.ts +0 -1
  250. package/test/support/CSM-543.js +0 -164
  251. package/test/support/CSM-543.js.map +0 -1
  252. package/test/support/CSM-729.d.ts +0 -1
  253. package/test/support/CSM-729.js +0 -225
  254. package/test/support/CSM-729.js.map +0 -1
  255. package/test/support/CSM-814.d.ts +0 -1
  256. package/test/support/CSM-814.js +0 -475
  257. package/test/support/CSM-814.js.map +0 -1
  258. package/test/support/CSM-87.d.ts +0 -0
  259. package/test/support/CSM-87.js +0 -21
  260. package/test/support/CSM-87.js.map +0 -1
  261. package/test/support/CSM-93.d.ts +0 -1
  262. package/test/support/CSM-93.js +0 -112
  263. package/test/support/CSM-93.js.map +0 -1
  264. package/test/utils/FakeDataOwnerApi.d.ts +0 -32
  265. package/test/utils/FakeDataOwnerApi.js +0 -136
  266. package/test/utils/FakeDataOwnerApi.js.map +0 -1
  267. package/test/utils/FakeEncryptionKeysManager.d.ts +0 -36
  268. package/test/utils/FakeEncryptionKeysManager.js +0 -97
  269. package/test/utils/FakeEncryptionKeysManager.js.map +0 -1
  270. package/test/utils/FakeExchangeDataApi.d.ts +0 -32
  271. package/test/utils/FakeExchangeDataApi.js +0 -92
  272. package/test/utils/FakeExchangeDataApi.js.map +0 -1
  273. package/test/utils/FakeExchangeDataManager.d.ts +0 -48
  274. package/test/utils/FakeExchangeDataManager.js +0 -82
  275. package/test/utils/FakeExchangeDataManager.js.map +0 -1
  276. package/test/utils/FakeExchangeDataMapManager.d.ts +0 -12
  277. package/test/utils/FakeExchangeDataMapManager.js +0 -38
  278. package/test/utils/FakeExchangeDataMapManager.js.map +0 -1
  279. package/test/utils/FakeGenericApi.d.ts +0 -16
  280. package/test/utils/FakeGenericApi.js +0 -65
  281. package/test/utils/FakeGenericApi.js.map +0 -1
  282. package/test/utils/KeylessCryptoStrategies.d.ts +0 -23
  283. package/test/utils/KeylessCryptoStrategies.js +0 -26
  284. package/test/utils/KeylessCryptoStrategies.js.map +0 -1
  285. package/test/utils/TestApi.d.ts +0 -3
  286. package/test/utils/TestApi.js +0 -30
  287. package/test/utils/TestApi.js.map +0 -1
  288. package/test/utils/TestCollectionUtils.d.ts +0 -1
  289. package/test/utils/TestCollectionUtils.js +0 -310
  290. package/test/utils/TestCollectionUtils.js.map +0 -1
  291. package/test/utils/TestCryptoStrategies.d.ts +0 -42
  292. package/test/utils/TestCryptoStrategies.js +0 -80
  293. package/test/utils/TestCryptoStrategies.js.map +0 -1
  294. package/test/utils/TestStorage.d.ts +0 -23
  295. package/test/utils/TestStorage.js +0 -61
  296. package/test/utils/TestStorage.js.map +0 -1
  297. package/test/utils/roles.d.ts +0 -14
  298. package/test/utils/roles.js +0 -345
  299. package/test/utils/roles.js.map +0 -1
  300. package/test/utils/test_utils.d.ts +0 -87
  301. package/test/utils/test_utils.js +0 -452
  302. package/test/utils/test_utils.js.map +0 -1
@@ -1,110 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const mocha_1 = require("mocha");
4
- const chai_1 = require("chai");
5
- const formatting_util_1 = require("../../../icc-x-api/utils/formatting-util");
6
- (0, mocha_1.describe)('toMoment', () => {
7
- (0, mocha_1.it)('should return undefined for undefined/null/NaN input', () => {
8
- (0, chai_1.expect)((0, formatting_util_1.toMoment)(undefined)).to.be.undefined;
9
- (0, chai_1.expect)((0, formatting_util_1.toMoment)(null)).to.be.undefined;
10
- (0, chai_1.expect)((0, formatting_util_1.toMoment)(NaN)).to.be.undefined;
11
- });
12
- (0, mocha_1.it)('should handle 0 as a valid epoch timestamp', () => {
13
- const result = (0, formatting_util_1.toMoment)(0);
14
- (0, chai_1.expect)(result).to.not.be.null;
15
- (0, chai_1.expect)(result.format('YYYY')).to.equal('1970');
16
- });
17
- (0, mocha_1.it)('should parse YYYYMMDD long calendar dates', () => {
18
- const result = (0, formatting_util_1.toMoment)(19850315);
19
- (0, chai_1.expect)(result).to.not.be.null;
20
- (0, chai_1.expect)(result.format('YYYY-MM-DD')).to.equal('1985-03-15');
21
- });
22
- (0, mocha_1.it)('should parse YYYYMMDD at the lower boundary (18000101)', () => {
23
- const result = (0, formatting_util_1.toMoment)(18000101);
24
- (0, chai_1.expect)(result).to.not.be.null;
25
- (0, chai_1.expect)(result.format('YYYY-MM-DD')).to.equal('1800-01-01');
26
- });
27
- (0, mocha_1.it)('should parse YYYYMMDD at the upper boundary (25399999)', () => {
28
- const result = (0, formatting_util_1.toMoment)(25391231);
29
- (0, chai_1.expect)(result).to.not.be.null;
30
- (0, chai_1.expect)(result.format('YYYY-MM-DD')).to.equal('2539-12-31');
31
- });
32
- (0, mocha_1.it)('should parse YYYYMMDDHHmmss long calendar datetimes', () => {
33
- const result = (0, formatting_util_1.toMoment)(20230415143022);
34
- (0, chai_1.expect)(result).to.not.be.null;
35
- (0, chai_1.expect)(result.format('YYYY-MM-DD HH:mm:ss')).to.equal('2023-04-15 14:30:22');
36
- });
37
- (0, mocha_1.it)('should parse epoch timestamps in milliseconds', () => {
38
- const epoch = new Date(2023, 0, 15, 12, 0, 0).getTime();
39
- const result = (0, formatting_util_1.toMoment)(epoch);
40
- (0, chai_1.expect)(result).to.not.be.null;
41
- (0, chai_1.expect)(result.format('YYYY-MM-DD')).to.equal('2023-01-15');
42
- (0, chai_1.expect)(result.format('HH')).to.equal('12');
43
- });
44
- (0, mocha_1.it)('should treat small numbers (< 18000101) as epoch timestamps', () => {
45
- const result = (0, formatting_util_1.toMoment)(1000);
46
- (0, chai_1.expect)(result).to.not.be.null;
47
- (0, chai_1.expect)(result.format('YYYY')).to.equal('1970');
48
- });
49
- (0, mocha_1.it)('should support various moment format strings', () => {
50
- const result = (0, formatting_util_1.toMoment)(20001225);
51
- (0, chai_1.expect)(result).to.not.be.null;
52
- (0, chai_1.expect)(result.format('DD/MM/YYYY')).to.equal('25/12/2000');
53
- (0, chai_1.expect)(result.format('MM-DD-YYYY')).to.equal('12-25-2000');
54
- (0, chai_1.expect)(result.format('YYYY')).to.equal('2000');
55
- });
56
- (0, mocha_1.it)('should support 12-hour clock with AM/PM (moment A/a)', () => {
57
- const result = (0, formatting_util_1.toMoment)(20230415143022);
58
- (0, chai_1.expect)(result).to.not.be.null;
59
- (0, chai_1.expect)(result.format('h:mm A')).to.equal('2:30 PM');
60
- (0, chai_1.expect)(result.format('h:mm a')).to.equal('2:30 pm');
61
- });
62
- (0, mocha_1.it)('should support bracketed literals', () => {
63
- const result = (0, formatting_util_1.toMoment)(20230415);
64
- (0, chai_1.expect)(result).to.not.be.null;
65
- (0, chai_1.expect)(result.format('[Year:] YYYY')).to.equal('Year: 2023');
66
- });
67
- (0, mocha_1.it)('should support weekday names', () => {
68
- // 2023-04-15 was a Saturday
69
- const result = (0, formatting_util_1.toMoment)(20230415);
70
- (0, chai_1.expect)(result).to.not.be.null;
71
- (0, chai_1.expect)(result.format('dddd')).to.equal('Saturday');
72
- (0, chai_1.expect)(result.format('ddd')).to.equal('Sat');
73
- });
74
- });
75
- (0, mocha_1.describe)('momentFormatToDateFnsFormat', () => {
76
- (0, mocha_1.it)('converts year tokens', () => {
77
- (0, chai_1.expect)((0, formatting_util_1.momentFormatToDateFnsFormat)('YYYY')).to.equal('yyyy');
78
- (0, chai_1.expect)((0, formatting_util_1.momentFormatToDateFnsFormat)('YY')).to.equal('yy');
79
- });
80
- (0, mocha_1.it)('converts day-of-month tokens (D → d, DD → dd)', () => {
81
- (0, chai_1.expect)((0, formatting_util_1.momentFormatToDateFnsFormat)('DD')).to.equal('dd');
82
- (0, chai_1.expect)((0, formatting_util_1.momentFormatToDateFnsFormat)('D')).to.equal('d');
83
- });
84
- (0, mocha_1.it)('passes through month/hour/minute/second tokens unchanged', () => {
85
- (0, chai_1.expect)((0, formatting_util_1.momentFormatToDateFnsFormat)('MM HH mm ss')).to.equal('MM HH mm ss');
86
- });
87
- (0, mocha_1.it)('converts AM/PM tokens', () => {
88
- (0, chai_1.expect)((0, formatting_util_1.momentFormatToDateFnsFormat)('A')).to.equal('a');
89
- (0, chai_1.expect)((0, formatting_util_1.momentFormatToDateFnsFormat)('a')).to.equal('aaa');
90
- });
91
- (0, mocha_1.it)('converts weekday tokens', () => {
92
- (0, chai_1.expect)((0, formatting_util_1.momentFormatToDateFnsFormat)('dddd')).to.equal('EEEE');
93
- (0, chai_1.expect)((0, formatting_util_1.momentFormatToDateFnsFormat)('ddd')).to.equal('EEE');
94
- });
95
- (0, mocha_1.it)('preserves bracketed literals as date-fns single-quoted literals', () => {
96
- (0, chai_1.expect)((0, formatting_util_1.momentFormatToDateFnsFormat)('[YYYY]')).to.equal("'YYYY'");
97
- (0, chai_1.expect)((0, formatting_util_1.momentFormatToDateFnsFormat)('[at] HH:mm')).to.equal("'at' HH:mm");
98
- });
99
- (0, mocha_1.it)('escapes stray alphabetic characters that would be date-fns tokens', () => {
100
- // 't' is a date-fns token (unix timestamp) but a literal in moment.
101
- (0, chai_1.expect)((0, formatting_util_1.momentFormatToDateFnsFormat)('YYYY foo')).to.equal("yyyy 'foo'");
102
- });
103
- (0, mocha_1.it)('escapes single quotes in the input format', () => {
104
- (0, chai_1.expect)((0, formatting_util_1.momentFormatToDateFnsFormat)("[o'clock]")).to.equal("'o''clock'");
105
- });
106
- (0, mocha_1.it)('handles a full common moment format', () => {
107
- (0, chai_1.expect)((0, formatting_util_1.momentFormatToDateFnsFormat)('YYYY-MM-DD HH:mm:ss')).to.equal('yyyy-MM-dd HH:mm:ss');
108
- });
109
- });
110
- //# sourceMappingURL=to-moment-test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"to-moment-test.js","sourceRoot":"","sources":["../../../../test/icc-x-api/utils/to-moment-test.ts"],"names":[],"mappings":"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","sourcesContent":["import { describe, it } from 'mocha'\nimport { expect } from 'chai'\nimport { momentFormatToDateFnsFormat, toMoment } from '../../../icc-x-api/utils/formatting-util'\n\ndescribe('toMoment', () => {\n it('should return undefined for undefined/null/NaN input', () => {\n expect(toMoment(undefined)).to.be.undefined\n expect(toMoment(null)).to.be.undefined\n expect(toMoment(NaN)).to.be.undefined\n })\n\n it('should handle 0 as a valid epoch timestamp', () => {\n const result = toMoment(0)\n expect(result).to.not.be.null\n expect(result!.format('YYYY')).to.equal('1970')\n })\n\n it('should parse YYYYMMDD long calendar dates', () => {\n const result = toMoment(19850315)\n expect(result).to.not.be.null\n expect(result!.format('YYYY-MM-DD')).to.equal('1985-03-15')\n })\n\n it('should parse YYYYMMDD at the lower boundary (18000101)', () => {\n const result = toMoment(18000101)\n expect(result).to.not.be.null\n expect(result!.format('YYYY-MM-DD')).to.equal('1800-01-01')\n })\n\n it('should parse YYYYMMDD at the upper boundary (25399999)', () => {\n const result = toMoment(25391231)\n expect(result).to.not.be.null\n expect(result!.format('YYYY-MM-DD')).to.equal('2539-12-31')\n })\n\n it('should parse YYYYMMDDHHmmss long calendar datetimes', () => {\n const result = toMoment(20230415143022)\n expect(result).to.not.be.null\n expect(result!.format('YYYY-MM-DD HH:mm:ss')).to.equal('2023-04-15 14:30:22')\n })\n\n it('should parse epoch timestamps in milliseconds', () => {\n const epoch = new Date(2023, 0, 15, 12, 0, 0).getTime()\n const result = toMoment(epoch)\n expect(result).to.not.be.null\n expect(result!.format('YYYY-MM-DD')).to.equal('2023-01-15')\n expect(result!.format('HH')).to.equal('12')\n })\n\n it('should treat small numbers (< 18000101) as epoch timestamps', () => {\n const result = toMoment(1000)\n expect(result).to.not.be.null\n expect(result!.format('YYYY')).to.equal('1970')\n })\n\n it('should support various moment format strings', () => {\n const result = toMoment(20001225)\n expect(result).to.not.be.null\n expect(result!.format('DD/MM/YYYY')).to.equal('25/12/2000')\n expect(result!.format('MM-DD-YYYY')).to.equal('12-25-2000')\n expect(result!.format('YYYY')).to.equal('2000')\n })\n\n it('should support 12-hour clock with AM/PM (moment A/a)', () => {\n const result = toMoment(20230415143022)\n expect(result).to.not.be.null\n expect(result!.format('h:mm A')).to.equal('2:30 PM')\n expect(result!.format('h:mm a')).to.equal('2:30 pm')\n })\n\n it('should support bracketed literals', () => {\n const result = toMoment(20230415)\n expect(result).to.not.be.null\n expect(result!.format('[Year:] YYYY')).to.equal('Year: 2023')\n })\n\n it('should support weekday names', () => {\n // 2023-04-15 was a Saturday\n const result = toMoment(20230415)\n expect(result).to.not.be.null\n expect(result!.format('dddd')).to.equal('Saturday')\n expect(result!.format('ddd')).to.equal('Sat')\n })\n})\n\ndescribe('momentFormatToDateFnsFormat', () => {\n it('converts year tokens', () => {\n expect(momentFormatToDateFnsFormat('YYYY')).to.equal('yyyy')\n expect(momentFormatToDateFnsFormat('YY')).to.equal('yy')\n })\n\n it('converts day-of-month tokens (D → d, DD → dd)', () => {\n expect(momentFormatToDateFnsFormat('DD')).to.equal('dd')\n expect(momentFormatToDateFnsFormat('D')).to.equal('d')\n })\n\n it('passes through month/hour/minute/second tokens unchanged', () => {\n expect(momentFormatToDateFnsFormat('MM HH mm ss')).to.equal('MM HH mm ss')\n })\n\n it('converts AM/PM tokens', () => {\n expect(momentFormatToDateFnsFormat('A')).to.equal('a')\n expect(momentFormatToDateFnsFormat('a')).to.equal('aaa')\n })\n\n it('converts weekday tokens', () => {\n expect(momentFormatToDateFnsFormat('dddd')).to.equal('EEEE')\n expect(momentFormatToDateFnsFormat('ddd')).to.equal('EEE')\n })\n\n it('preserves bracketed literals as date-fns single-quoted literals', () => {\n expect(momentFormatToDateFnsFormat('[YYYY]')).to.equal(\"'YYYY'\")\n expect(momentFormatToDateFnsFormat('[at] HH:mm')).to.equal(\"'at' HH:mm\")\n })\n\n it('escapes stray alphabetic characters that would be date-fns tokens', () => {\n // 't' is a date-fns token (unix timestamp) but a literal in moment.\n expect(momentFormatToDateFnsFormat('YYYY foo')).to.equal(\"yyyy 'foo'\")\n })\n\n it('escapes single quotes in the input format', () => {\n expect(momentFormatToDateFnsFormat(\"[o'clock]\")).to.equal(\"'o''clock'\")\n })\n\n it('handles a full common moment format', () => {\n expect(momentFormatToDateFnsFormat('YYYY-MM-DD HH:mm:ss')).to.equal('yyyy-MM-dd HH:mm:ss')\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';
@@ -1,120 +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 crypto_1 = require("crypto");
14
- const chai_1 = require("chai");
15
- require("isomorphic-fetch");
16
- const types_1 = require("@icure/test-setup/types");
17
- (0, test_utils_1.setLocalStorage)(fetch);
18
- const chaiAsPromised = require("chai-as-promised");
19
- (0, chai_1.use)(chaiAsPromised);
20
- let env;
21
- function createMessage(api, user, props) {
22
- return __awaiter(this, void 0, void 0, function* () {
23
- var _a, _b;
24
- const messageBase = {
25
- subject: `Test message - ${api.cryptoApi.primitives.randomUuid()}`,
26
- fromAddress: (_a = props.includeFromAddress) !== null && _a !== void 0 ? _a : api.cryptoApi.primitives.randomUuid(),
27
- toAddresses: [api.cryptoApi.primitives.randomUuid(), (_b = props.includeToAddress) !== null && _b !== void 0 ? _b : api.cryptoApi.primitives.randomUuid()],
28
- received: props.includeRandomReceived ? Math.floor(Math.random() * 1000000) : undefined,
29
- };
30
- return yield api.messageApi.createMessageWithUser(undefined, yield api.messageApi.newInstance(user, messageBase));
31
- });
32
- }
33
- function createTestMessages(api, user, propsForAccessibleMessages, propsForInaccessibleMessages) {
34
- return __awaiter(this, void 0, void 0, function* () {
35
- const expectedMessages = [];
36
- for (let i = 0; i < 100; i++) {
37
- expectedMessages.push(yield createMessage(api, user, propsForAccessibleMessages));
38
- yield createMessage(api, user, propsForInaccessibleMessages);
39
- }
40
- // Also creates some messages from an unrelated hcp and same from address that should not be retrieved by the test.
41
- const { api: otherApi, user: otherUser } = yield (0, test_utils_1.createNewHcpApi)(env);
42
- for (let i = 0; i < 100; i++) {
43
- yield createMessage(otherApi, otherUser, propsForAccessibleMessages);
44
- }
45
- return expectedMessages;
46
- });
47
- }
48
- function getAllPaginatedMessages(listFunction) {
49
- return __awaiter(this, void 0, void 0, function* () {
50
- var _a, _b, _c;
51
- let latestRetrieved;
52
- let allResults = [];
53
- do {
54
- const nextKey = (_a = latestRetrieved === null || latestRetrieved === void 0 ? void 0 : latestRetrieved.nextKeyPair) === null || _a === void 0 ? void 0 : _a.startKey;
55
- latestRetrieved = yield listFunction(nextKey ? JSON.stringify(nextKey) : undefined, (_b = latestRetrieved === null || latestRetrieved === void 0 ? void 0 : latestRetrieved.nextKeyPair) === null || _b === void 0 ? void 0 : _b.startKeyDocId);
56
- allResults.push(...latestRetrieved.rows);
57
- } while (((_c = latestRetrieved === null || latestRetrieved === void 0 ? void 0 : latestRetrieved.nextKeyPair) === null || _c === void 0 ? void 0 : _c.startKey) !== undefined);
58
- console.log(JSON.stringify(allResults.map((m) => m.received)));
59
- return allResults;
60
- });
61
- }
62
- describe('CSM-243', function () {
63
- return __awaiter(this, void 0, void 0, function* () {
64
- before(function () {
65
- return __awaiter(this, void 0, void 0, function* () {
66
- this.timeout(600000);
67
- const initializer = yield (0, test_utils_1.getEnvironmentInitializer)();
68
- env = yield initializer.execute((0, types_1.getEnvVariables)());
69
- });
70
- });
71
- function doTestWithoutReceived(propsForAccessibleMessages, listFunction) {
72
- return __awaiter(this, void 0, void 0, function* () {
73
- const { api, user } = yield (0, test_utils_1.createNewHcpApi)(env);
74
- const expectedMessages = yield createTestMessages(api, user, Object.assign(Object.assign({}, propsForAccessibleMessages), { includeRandomReceived: false }), { includeRandomReceived: false });
75
- let allResults = yield getAllPaginatedMessages((nextKey, nextKeyDocId) => listFunction(api.messageApi, nextKey, nextKeyDocId, 30));
76
- (0, chai_1.expect)(allResults.length).to.equal(expectedMessages.length);
77
- (0, chai_1.expect)(allResults.map((m) => m.id)).to.have.members(expectedMessages.map((m) => m.id));
78
- });
79
- }
80
- function doTestWithReceived(propsForAccessibleMessages, listFunction) {
81
- return __awaiter(this, void 0, void 0, function* () {
82
- const { api, user } = yield (0, test_utils_1.createNewHcpApi)(env);
83
- const expectedMessagesWithReceived = yield createTestMessages(api, user, Object.assign(Object.assign({}, propsForAccessibleMessages), { includeRandomReceived: true }), { includeRandomReceived: true });
84
- const messageWithoutReceived = yield createMessage(api, user, Object.assign(Object.assign({}, propsForAccessibleMessages), { includeRandomReceived: false }));
85
- let allResults = yield getAllPaginatedMessages((nextKey, nextKeyDocId) => listFunction(api.messageApi, nextKey, nextKeyDocId, 30));
86
- (0, chai_1.expect)(allResults.length).to.equal(expectedMessagesWithReceived.length + 1);
87
- (0, chai_1.expect)(allResults.map((m) => m.id)).to.have.members([...expectedMessagesWithReceived.map((m) => m.id), messageWithoutReceived.id]);
88
- (0, chai_1.expect)(allResults.map((m) => m.received)).to.deep.equal([
89
- undefined,
90
- ...expectedMessagesWithReceived.sort((a, b) => b.received - a.received).map((m) => m.received),
91
- ]);
92
- });
93
- }
94
- it('A user should be able to retrieve paginated messages without received date by fromAddress', function () {
95
- return __awaiter(this, void 0, void 0, function* () {
96
- const targetAddress = (0, crypto_1.randomUUID)();
97
- yield doTestWithoutReceived({ includeFromAddress: targetAddress }, (messageApi, nextKey, nextKeyDocId, limit) => messageApi.findMessagesByFromAddressWithUser(undefined, targetAddress, nextKey, nextKeyDocId, limit));
98
- });
99
- });
100
- it('A user should be able to retrieve paginated messages with received date by fromAddress', function () {
101
- return __awaiter(this, void 0, void 0, function* () {
102
- const targetAddress = (0, crypto_1.randomUUID)();
103
- yield doTestWithReceived({ includeFromAddress: targetAddress }, (messageApi, nextKey, nextKeyDocId, limit) => messageApi.findMessagesByFromAddressWithUser(undefined, targetAddress, nextKey, nextKeyDocId, limit));
104
- });
105
- });
106
- it('A user should be able to retrieve paginated messages without received date by toAddress', function () {
107
- return __awaiter(this, void 0, void 0, function* () {
108
- const targetAddress = (0, crypto_1.randomUUID)();
109
- yield doTestWithoutReceived({ includeToAddress: targetAddress }, (messageApi, nextKey, nextKeyDocId, limit) => messageApi.findMessagesByToAddressWithUser(undefined, targetAddress, nextKey, nextKeyDocId, limit));
110
- });
111
- });
112
- it('A user should be able to retrieve paginated messages with received date by toAddress', function () {
113
- return __awaiter(this, void 0, void 0, function* () {
114
- const targetAddress = (0, crypto_1.randomUUID)();
115
- yield doTestWithReceived({ includeToAddress: targetAddress }, (messageApi, nextKey, nextKeyDocId, limit) => messageApi.findMessagesByToAddressWithUser(undefined, targetAddress, nextKey, nextKeyDocId, limit));
116
- });
117
- });
118
- });
119
- });
120
- //# sourceMappingURL=CSM-243.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CSM-243.js","sourceRoot":"","sources":["../../../test/support/CSM-243.ts"],"names":[],"mappings":"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","sourcesContent":["import { createNewHcpApi, getEnvironmentInitializer, setLocalStorage } from '../utils/test_utils'\nimport { IccMessageXApi, IcureApi } from '../../icc-x-api'\nimport { randomUUID } from 'crypto'\nimport { expect, use as chaiUse } from 'chai'\nimport 'isomorphic-fetch'\nimport { getEnvVariables, TestVars } from '@icure/test-setup/types'\n\nsetLocalStorage(fetch)\nimport * as chaiAsPromised from 'chai-as-promised'\nimport { User } from '../../icc-api/model/User'\nimport { Message } from '../../icc-api/model/Message'\nimport { PaginatedListMessage } from '../../icc-api/model/PaginatedListMessage'\nchaiUse(chaiAsPromised)\n\nlet env: TestVars\n\nasync function createMessage(\n api: IcureApi,\n user: User,\n props: {\n includeToAddress?: string\n includeFromAddress?: string\n includeRandomReceived: boolean\n }\n): Promise<Message> {\n const messageBase: Message = {\n subject: `Test message - ${api.cryptoApi.primitives.randomUuid()}`,\n fromAddress: props.includeFromAddress ?? api.cryptoApi.primitives.randomUuid(),\n toAddresses: [api.cryptoApi.primitives.randomUuid(), props.includeToAddress ?? api.cryptoApi.primitives.randomUuid()],\n received: props.includeRandomReceived ? Math.floor(Math.random() * 1000000) : undefined,\n }\n return await api.messageApi.createMessageWithUser(undefined, await api.messageApi.newInstance(user, messageBase))\n}\n\nasync function createTestMessages(\n api: IcureApi,\n user: User,\n propsForAccessibleMessages: {\n includeToAddress?: string\n includeFromAddress?: string\n includeRandomReceived: boolean\n },\n propsForInaccessibleMessages: {\n includeToAddress?: string\n includeFromAddress?: string\n includeRandomReceived: boolean\n }\n): Promise<Message[]> {\n const expectedMessages: Message[] = []\n for (let i = 0; i < 100; i++) {\n expectedMessages.push(await createMessage(api, user, propsForAccessibleMessages))\n await createMessage(api, user, propsForInaccessibleMessages)\n }\n // Also creates some messages from an unrelated hcp and same from address that should not be retrieved by the test.\n const { api: otherApi, user: otherUser } = await createNewHcpApi(env)\n for (let i = 0; i < 100; i++) {\n await createMessage(otherApi, otherUser, propsForAccessibleMessages)\n }\n return expectedMessages\n}\n\nasync function getAllPaginatedMessages(listFunction: (nextKey?: string, nextKeyDocId?: string) => Promise<PaginatedListMessage>): Promise<Message[]> {\n let latestRetrieved: PaginatedListMessage | undefined\n let allResults: Message[] = []\n do {\n const nextKey = latestRetrieved?.nextKeyPair?.startKey\n latestRetrieved = await listFunction(nextKey ? JSON.stringify(nextKey) : undefined, latestRetrieved?.nextKeyPair?.startKeyDocId)\n allResults.push(...latestRetrieved.rows!)\n } while (latestRetrieved?.nextKeyPair?.startKey !== undefined)\n console.log(JSON.stringify(allResults.map((m) => m.received)))\n return allResults\n}\n\ndescribe('CSM-243', async function () {\n before(async function () {\n this.timeout(600000)\n const initializer = await getEnvironmentInitializer()\n env = await initializer.execute(getEnvVariables())\n })\n\n async function doTestWithoutReceived(\n propsForAccessibleMessages: {\n includeToAddress?: string\n includeFromAddress?: string\n },\n listFunction: (\n messageApi: IccMessageXApi,\n nextKey: string | undefined,\n nextKeyDocId: string | undefined,\n limit: number\n ) => Promise<PaginatedListMessage>\n ) {\n const { api, user } = await createNewHcpApi(env)\n const expectedMessages: Message[] = await createTestMessages(\n api,\n user,\n { ...propsForAccessibleMessages, includeRandomReceived: false },\n { includeRandomReceived: false }\n )\n let allResults: Message[] = await getAllPaginatedMessages((nextKey?: string, nextKeyDocId?: string) =>\n listFunction(api.messageApi, nextKey, nextKeyDocId, 30)\n )\n expect(allResults.length).to.equal(expectedMessages.length)\n expect(allResults.map((m) => m.id)).to.have.members(expectedMessages.map((m) => m.id))\n }\n\n async function doTestWithReceived(\n propsForAccessibleMessages: {\n includeToAddress?: string\n includeFromAddress?: string\n },\n listFunction: (\n messageApi: IccMessageXApi,\n nextKey: string | undefined,\n nextKeyDocId: string | undefined,\n limit: number\n ) => Promise<PaginatedListMessage>\n ) {\n const { api, user } = await createNewHcpApi(env)\n const expectedMessagesWithReceived: Message[] = await createTestMessages(\n api,\n user,\n { ...propsForAccessibleMessages, includeRandomReceived: true },\n { includeRandomReceived: true }\n )\n const messageWithoutReceived = await createMessage(api, user, { ...propsForAccessibleMessages, includeRandomReceived: false })\n let allResults: Message[] = await getAllPaginatedMessages((nextKey?: string, nextKeyDocId?: string) =>\n listFunction(api.messageApi, nextKey, nextKeyDocId, 30)\n )\n expect(allResults.length).to.equal(expectedMessagesWithReceived.length + 1)\n expect(allResults.map((m) => m.id)).to.have.members([...expectedMessagesWithReceived.map((m) => m.id), messageWithoutReceived.id!])\n expect(allResults.map((m) => m.received)).to.deep.equal([\n undefined,\n ...expectedMessagesWithReceived.sort((a, b) => b.received! - a.received!).map((m) => m.received),\n ])\n }\n it('A user should be able to retrieve paginated messages without received date by fromAddress', async function () {\n const targetAddress = randomUUID()\n await doTestWithoutReceived({ includeFromAddress: targetAddress }, (messageApi, nextKey, nextKeyDocId, limit) =>\n messageApi.findMessagesByFromAddressWithUser(undefined, targetAddress, nextKey, nextKeyDocId, limit)\n )\n })\n\n it('A user should be able to retrieve paginated messages with received date by fromAddress', async function () {\n const targetAddress = randomUUID()\n await doTestWithReceived({ includeFromAddress: targetAddress }, (messageApi, nextKey, nextKeyDocId, limit) =>\n messageApi.findMessagesByFromAddressWithUser(undefined, targetAddress, nextKey, nextKeyDocId, limit)\n )\n })\n\n it('A user should be able to retrieve paginated messages without received date by toAddress', async function () {\n const targetAddress = randomUUID()\n await doTestWithoutReceived({ includeToAddress: targetAddress }, (messageApi, nextKey, nextKeyDocId, limit) =>\n messageApi.findMessagesByToAddressWithUser(undefined, targetAddress, nextKey, nextKeyDocId, limit)\n )\n })\n\n it('A user should be able to retrieve paginated messages with received date by toAddress', async function () {\n const targetAddress = randomUUID()\n await doTestWithReceived({ includeToAddress: targetAddress }, (messageApi, nextKey, nextKeyDocId, limit) =>\n messageApi.findMessagesByToAddressWithUser(undefined, targetAddress, nextKey, nextKeyDocId, limit)\n )\n })\n})\n"]}
@@ -1 +0,0 @@
1
- import 'isomorphic-fetch';
@@ -1,164 +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 types_1 = require("@icure/test-setup/types");
18
- const chaiAsPromised = require("chai-as-promised");
19
- const utils_1 = require("../../icc-x-api/crypto/utils");
20
- const TestStorage_1 = require("../utils/TestStorage");
21
- const DataOwnerTypeEnum_1 = require("../../icc-api/model/DataOwnerTypeEnum");
22
- (0, test_utils_1.setLocalStorage)(fetch);
23
- (0, chai_1.use)(chaiAsPromised);
24
- let env;
25
- class RecoverParentKeyVerifySelfKeyStrategy {
26
- constructor(parentKeys, selfPub) {
27
- this.parentKeys = parentKeys;
28
- this.selfPub = selfPub;
29
- }
30
- dataOwnerRequiresAnonymousDelegation(dataOwner) {
31
- return dataOwner.type != DataOwnerTypeEnum_1.DataOwnerTypeEnum.Hcp;
32
- }
33
- generateNewKeyForDataOwner(self, cryptoPrimitives) {
34
- return Promise.resolve(false);
35
- }
36
- recoverAndVerifySelfHierarchyKeys(keysData, cryptoPrimitives, keyPairRecoverer) {
37
- return __awaiter(this, void 0, void 0, function* () {
38
- (0, chai_1.expect)(keysData).to.have.length(2);
39
- return {
40
- [keysData[0].dataOwner.dataOwner.id]: {
41
- recoveredKeys: {
42
- [(0, utils_1.fingerprintV1)((0, icc_x_api_1.ua2hex)(yield cryptoPrimitives.RSA.exportKey(this.parentKeys.publicKey, 'spki')))]: this.parentKeys,
43
- },
44
- keyAuthenticity: {},
45
- },
46
- [keysData[1].dataOwner.dataOwner.id]: {
47
- recoveredKeys: {},
48
- keyAuthenticity: {
49
- [(0, utils_1.fingerprintV1)(this.selfPub)]: true,
50
- },
51
- },
52
- };
53
- });
54
- }
55
- verifyDelegatePublicKeys(delegate, publicKeys, cryptoPrimitives) {
56
- return Promise.resolve(publicKeys);
57
- }
58
- }
59
- class VerifySelfKeyStrategy {
60
- constructor(selfPub) {
61
- this.selfPub = selfPub;
62
- }
63
- dataOwnerRequiresAnonymousDelegation(dataOwner) {
64
- return dataOwner.type != DataOwnerTypeEnum_1.DataOwnerTypeEnum.Hcp;
65
- }
66
- generateNewKeyForDataOwner(self, cryptoPrimitives) {
67
- return Promise.resolve(false);
68
- }
69
- recoverAndVerifySelfHierarchyKeys(keysData, cryptoPrimitives, keyPairRecoverer) {
70
- return __awaiter(this, void 0, void 0, function* () {
71
- (0, chai_1.expect)(keysData).to.have.length(2);
72
- (0, chai_1.expect)(keysData.every((x) => x.unavailableKeys.length == 0)).to.be.true;
73
- (0, chai_1.expect)(keysData[1].unknownKeys).to.have.length(1);
74
- (0, chai_1.expect)(keysData[1].unknownKeys[0]).to.eq(this.selfPub);
75
- return {
76
- [keysData[0].dataOwner.dataOwner.id]: {
77
- recoveredKeys: {},
78
- keyAuthenticity: {},
79
- },
80
- [keysData[1].dataOwner.dataOwner.id]: {
81
- recoveredKeys: {},
82
- keyAuthenticity: { [(0, utils_1.fingerprintV1)(this.selfPub)]: true },
83
- },
84
- };
85
- });
86
- }
87
- verifyDelegatePublicKeys(delegate, publicKeys, cryptoPrimitives) {
88
- return Promise.resolve(publicKeys);
89
- }
90
- }
91
- describe('CSM-543', function () {
92
- return __awaiter(this, void 0, void 0, function* () {
93
- before(function () {
94
- return __awaiter(this, void 0, void 0, function* () {
95
- this.timeout(600000);
96
- const initializer = yield (0, test_utils_1.getEnvironmentInitializer)();
97
- env = yield initializer.execute((0, types_1.getEnvVariables)());
98
- });
99
- });
100
- function init() {
101
- return __awaiter(this, void 0, void 0, function* () {
102
- const { grandUser: parentUser, grandApi: parentApi, grandCredentials: parentCredentials, parentUser: childUser, parentApi: childApi, parentCredentials: childCredentials, } = yield (0, test_utils_1.createHcpHierarchyApis)(env);
103
- const initialKeys = yield childApi.cryptoApi.getEncryptionDecryptionKeypairsForDataOwnerHierarchy();
104
- (0, chai_1.expect)(initialKeys.self.keys).to.have.length(1);
105
- (0, chai_1.expect)(initialKeys.self.keys[0].verified).to.eq(true);
106
- (0, chai_1.expect)(initialKeys.parents).to.have.length(1);
107
- (0, chai_1.expect)(initialKeys.parents[0].keys).to.have.length(1);
108
- (0, chai_1.expect)(initialKeys.parents[0].keys[0].verified).to.eq(true);
109
- const selfKeyPub = (0, icc_x_api_1.ua2hex)(yield childApi.cryptoApi.primitives.RSA.exportKey(initialKeys.self.keys[0].pair.publicKey, 'spki'));
110
- yield childApi.cryptoApi.shamirKeysManager.updateSelfSplits({ [(0, utils_1.fingerprintV1)(selfKeyPub)]: { notariesIds: [parentCredentials.dataOwnerId], minShares: 1 } }, []);
111
- return {
112
- childCredentials,
113
- selfKeyPub,
114
- parentKey: initialKeys.parents[0].keys[0].pair,
115
- parentCredentials,
116
- };
117
- });
118
- }
119
- function checkKeys(api, expectedSelfKey) {
120
- return __awaiter(this, void 0, void 0, function* () {
121
- const recoveredKeys = yield api.cryptoApi.getEncryptionDecryptionKeypairsForDataOwnerHierarchy();
122
- (0, chai_1.expect)(recoveredKeys.self.keys).to.have.length(1);
123
- (0, chai_1.expect)(recoveredKeys.self.keys[0].verified).to.eq(true);
124
- (0, chai_1.expect)(recoveredKeys.parents).to.have.length(1);
125
- (0, chai_1.expect)(recoveredKeys.parents[0].keys).to.have.length(1);
126
- (0, chai_1.expect)(recoveredKeys.parents[0].keys[0].verified).to.eq(true);
127
- (0, chai_1.expect)((0, icc_x_api_1.ua2hex)(yield api.cryptoApi.primitives.RSA.exportKey(recoveredKeys.self.keys[0].pair.publicKey, 'spki'))).to.eq(expectedSelfKey);
128
- });
129
- }
130
- it('Sdk should be able to use recovery data accessible with parent key to recover key of user - parent key recovered by crypto strategies', function () {
131
- return __awaiter(this, void 0, void 0, function* () {
132
- const { childCredentials, selfKeyPub, parentKey } = yield init();
133
- const apiWithLostKey = yield icc_x_api_1.IcureApi.initialise(env.iCureUrl, { username: childCredentials.user, password: childCredentials.password }, new RecoverParentKeyVerifySelfKeyStrategy(parentKey, selfKeyPub), crypto_1.webcrypto, fetch, {
134
- storage: new TestStorage_1.TestStorage(),
135
- keyStorage: new TestStorage_1.TestKeyStorage(),
136
- });
137
- yield checkKeys(apiWithLostKey, selfKeyPub);
138
- });
139
- });
140
- it('Sdk should be able to use recovery data accessible with parent key to recover key of user - parent key available in storage', function () {
141
- return __awaiter(this, void 0, void 0, function* () {
142
- const { childCredentials, selfKeyPub, parentCredentials } = yield init();
143
- const storageWithParentKey = yield (0, TestStorage_1.testStorageWithKeys)([
144
- {
145
- dataOwnerId: parentCredentials.dataOwnerId,
146
- pairs: [
147
- {
148
- keyPair: { privateKey: parentCredentials.privateKey, publicKey: parentCredentials.publicKey },
149
- shaVersion: icc_x_api_1.ShaVersion.Sha1,
150
- },
151
- ],
152
- },
153
- ]);
154
- const apiWithLostKey = yield icc_x_api_1.IcureApi.initialise(env.iCureUrl, { username: childCredentials.user, password: childCredentials.password }, new VerifySelfKeyStrategy(selfKeyPub), crypto_1.webcrypto, fetch, {
155
- storage: storageWithParentKey.storage,
156
- keyStorage: storageWithParentKey.keyStorage,
157
- entryKeysFactory: storageWithParentKey.keyFactory,
158
- });
159
- yield checkKeys(apiWithLostKey, selfKeyPub);
160
- });
161
- });
162
- });
163
- });
164
- //# sourceMappingURL=CSM-543.js.map