@icure/api 8.11.0 → 8.12.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 (297) 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 +5 -0
  5. package/icc-api/model/HealthElement.js.map +1 -1
  6. package/icc-api/model/HealthElementQualifiedLink.d.ts +31 -0
  7. package/icc-api/model/HealthElementQualifiedLink.js +26 -0
  8. package/icc-api/model/HealthElementQualifiedLink.js.map +1 -0
  9. package/icc-api/model/models.d.ts +1 -0
  10. package/icc-api/model/models.js +1 -0
  11. package/icc-api/model/models.js.map +1 -1
  12. package/icc-x-api/filters/HealthElementByAssociationIdFilter.d.ts +23 -0
  13. package/icc-x-api/filters/HealthElementByAssociationIdFilter.js +30 -0
  14. package/icc-x-api/filters/HealthElementByAssociationIdFilter.js.map +1 -0
  15. package/icc-x-api/filters/HealthElementByQualifiedLinkFilter.d.ts +24 -0
  16. package/icc-x-api/filters/HealthElementByQualifiedLinkFilter.js +30 -0
  17. package/icc-x-api/filters/HealthElementByQualifiedLinkFilter.js.map +1 -0
  18. package/icc-x-api/filters/filters.d.ts +2 -0
  19. package/icc-x-api/filters/filters.js +2 -0
  20. package/icc-x-api/filters/filters.js.map +1 -1
  21. package/package.json +1 -1
  22. package/test/benchmarks/lzma-benchmark.spec.d.ts +0 -1
  23. package/test/benchmarks/lzma-benchmark.spec.js +0 -131
  24. package/test/benchmarks/lzma-benchmark.spec.js.map +0 -1
  25. package/test/benchmarks/lzma-compat.spec.d.ts +0 -1
  26. package/test/benchmarks/lzma-compat.spec.js +0 -187
  27. package/test/benchmarks/lzma-compat.spec.js.map +0 -1
  28. package/test/benchmarks/playwright.config.d.ts +0 -2
  29. package/test/benchmarks/playwright.config.js +0 -18
  30. package/test/benchmarks/playwright.config.js.map +0 -1
  31. package/test/icc-api/api/IccAgendaApi.d.ts +0 -1
  32. package/test/icc-api/api/IccAgendaApi.js +0 -64
  33. package/test/icc-api/api/IccAgendaApi.js.map +0 -1
  34. package/test/icc-api/api/IccAnonymousAccessApi.d.ts +0 -1
  35. package/test/icc-api/api/IccAnonymousAccessApi.js +0 -58
  36. package/test/icc-api/api/IccAnonymousAccessApi.js.map +0 -1
  37. package/test/icc-api/api/IccCalendarItemApi.d.ts +0 -1
  38. package/test/icc-api/api/IccCalendarItemApi.js +0 -67
  39. package/test/icc-api/api/IccCalendarItemApi.js.map +0 -1
  40. package/test/icc-api/api/IccCalendarItemTypeApi.d.ts +0 -1
  41. package/test/icc-api/api/IccCalendarItemTypeApi.js +0 -96
  42. package/test/icc-api/api/IccCalendarItemTypeApi.js.map +0 -1
  43. package/test/icc-api/api/IccCodeApi.d.ts +0 -1
  44. package/test/icc-api/api/IccCodeApi.js +0 -38
  45. package/test/icc-api/api/IccCodeApi.js.map +0 -1
  46. package/test/icc-api/api/IccDocumentApi.d.ts +0 -1
  47. package/test/icc-api/api/IccDocumentApi.js +0 -199
  48. package/test/icc-api/api/IccDocumentApi.js.map +0 -1
  49. package/test/icc-api/api/IccGroupApi.d.ts +0 -1
  50. package/test/icc-api/api/IccGroupApi.js +0 -50
  51. package/test/icc-api/api/IccGroupApi.js.map +0 -1
  52. package/test/icc-api/api/IccKeywordApi.d.ts +0 -1
  53. package/test/icc-api/api/IccKeywordApi.js +0 -64
  54. package/test/icc-api/api/IccKeywordApi.js.map +0 -1
  55. package/test/icc-api/api/IccMedicalLocationApi.d.ts +0 -1
  56. package/test/icc-api/api/IccMedicalLocationApi.js +0 -64
  57. package/test/icc-api/api/IccMedicalLocationApi.js.map +0 -1
  58. package/test/icc-api/api/IccPlaceApi.d.ts +0 -1
  59. package/test/icc-api/api/IccPlaceApi.js +0 -64
  60. package/test/icc-api/api/IccPlaceApi.js.map +0 -1
  61. package/test/icc-api/api/IccRecoveryDataApi.d.ts +0 -1
  62. package/test/icc-api/api/IccRecoveryDataApi.js +0 -95
  63. package/test/icc-api/api/IccRecoveryDataApi.js.map +0 -1
  64. package/test/icc-api/api/IccRoleApi.d.ts +0 -1
  65. package/test/icc-api/api/IccRoleApi.js +0 -34
  66. package/test/icc-api/api/IccRoleApi.js.map +0 -1
  67. package/test/icc-api/api/IccUserApi.d.ts +0 -1
  68. package/test/icc-api/api/IccUserApi.js +0 -96
  69. package/test/icc-api/api/IccUserApi.js.map +0 -1
  70. package/test/icc-api/e2e/IccCalendarItemApi.d.ts +0 -1
  71. package/test/icc-api/e2e/IccCalendarItemApi.js +0 -46
  72. package/test/icc-api/e2e/IccCalendarItemApi.js.map +0 -1
  73. package/test/icc-api/model/modelHelpersTest.d.ts +0 -1
  74. package/test/icc-api/model/modelHelpersTest.js +0 -45
  75. package/test/icc-api/model/modelHelpersTest.js.map +0 -1
  76. package/test/icc-x-api/auth/group-switch-test.d.ts +0 -1
  77. package/test/icc-x-api/auth/group-switch-test.js +0 -81
  78. package/test/icc-x-api/auth/group-switch-test.js.map +0 -1
  79. package/test/icc-x-api/auth/jwt-concurrency-test.d.ts +0 -2
  80. package/test/icc-x-api/auth/jwt-concurrency-test.js +0 -112
  81. package/test/icc-x-api/auth/jwt-concurrency-test.js.map +0 -1
  82. package/test/icc-x-api/auth/jwt-provider-test.d.ts +0 -1
  83. package/test/icc-x-api/auth/jwt-provider-test.js +0 -197
  84. package/test/icc-x-api/auth/jwt-provider-test.js.map +0 -1
  85. package/test/icc-x-api/auth/smart-auth-provider-test.d.ts +0 -1
  86. package/test/icc-x-api/auth/smart-auth-provider-test.js +0 -224
  87. package/test/icc-x-api/auth/smart-auth-provider-test.js.map +0 -1
  88. package/test/icc-x-api/autofix-anonymity-test.d.ts +0 -1
  89. package/test/icc-x-api/autofix-anonymity-test.js +0 -122
  90. package/test/icc-x-api/autofix-anonymity-test.js.map +0 -1
  91. package/test/icc-x-api/confidential-entities-test.d.ts +0 -1
  92. package/test/icc-x-api/confidential-entities-test.js +0 -168
  93. package/test/icc-x-api/confidential-entities-test.js.map +0 -1
  94. package/test/icc-x-api/crud/comprehensive-crud-test.d.ts +0 -1
  95. package/test/icc-x-api/crud/comprehensive-crud-test.js +0 -276
  96. package/test/icc-x-api/crud/comprehensive-crud-test.js.map +0 -1
  97. package/test/icc-x-api/crud/entities-crud-test-interface.d.ts +0 -16
  98. package/test/icc-x-api/crud/entities-crud-test-interface.js +0 -407
  99. package/test/icc-x-api/crud/entities-crud-test-interface.js.map +0 -1
  100. package/test/icc-x-api/crypto/anonymous-delegations-test.d.ts +0 -1
  101. package/test/icc-x-api/crypto/anonymous-delegations-test.js +0 -587
  102. package/test/icc-x-api/crypto/anonymous-delegations-test.js.map +0 -1
  103. package/test/icc-x-api/crypto/concurrency.d.ts +0 -1
  104. package/test/icc-x-api/crypto/concurrency.js +0 -35
  105. package/test/icc-x-api/crypto/concurrency.js.map +0 -1
  106. package/test/icc-x-api/crypto/crypto-utils.d.ts +0 -1
  107. package/test/icc-x-api/crypto/crypto-utils.js +0 -79
  108. package/test/icc-x-api/crypto/crypto-utils.js.map +0 -1
  109. package/test/icc-x-api/crypto/cryptoTest.d.ts +0 -2
  110. package/test/icc-x-api/crypto/cryptoTest.js +0 -402
  111. package/test/icc-x-api/crypto/cryptoTest.js.map +0 -1
  112. package/test/icc-x-api/crypto/delegate-ci-to-patient-with-missing-keys-test.d.ts +0 -1
  113. package/test/icc-x-api/crypto/delegate-ci-to-patient-with-missing-keys-test.js +0 -166
  114. package/test/icc-x-api/crypto/delegate-ci-to-patient-with-missing-keys-test.js.map +0 -1
  115. package/test/icc-x-api/crypto/exchange-data-manager-test.d.ts +0 -1
  116. package/test/icc-x-api/crypto/exchange-data-manager-test.js +0 -674
  117. package/test/icc-x-api/crypto/exchange-data-manager-test.js.map +0 -1
  118. package/test/icc-x-api/crypto/full-crypto-test.d.ts +0 -1
  119. package/test/icc-x-api/crypto/full-crypto-test.js +0 -454
  120. package/test/icc-x-api/crypto/full-crypto-test.js.map +0 -1
  121. package/test/icc-x-api/crypto/legacy-metadata-migration-test.d.ts +0 -1
  122. package/test/icc-x-api/crypto/legacy-metadata-migration-test.js +0 -379
  123. package/test/icc-x-api/crypto/legacy-metadata-migration-test.js.map +0 -1
  124. package/test/icc-x-api/crypto/secure-delegations-manager-test.d.ts +0 -1
  125. package/test/icc-x-api/crypto/secure-delegations-manager-test.js +0 -278
  126. package/test/icc-x-api/crypto/secure-delegations-manager-test.js.map +0 -1
  127. package/test/icc-x-api/crypto/shamir.d.ts +0 -2
  128. package/test/icc-x-api/crypto/shamir.js +0 -167
  129. package/test/icc-x-api/crypto/shamir.js.map +0 -1
  130. package/test/icc-x-api/crypto/share-deduplication-test.d.ts +0 -1
  131. package/test/icc-x-api/crypto/share-deduplication-test.js +0 -250
  132. package/test/icc-x-api/crypto/share-deduplication-test.js.map +0 -1
  133. package/test/icc-x-api/crypto/share-to-newly-created-patient-from-hcp.d.ts +0 -1
  134. package/test/icc-x-api/crypto/share-to-newly-created-patient-from-hcp.js +0 -71
  135. package/test/icc-x-api/crypto/share-to-newly-created-patient-from-hcp.js.map +0 -1
  136. package/test/icc-x-api/crypto/soft-deleted-data-owners.d.ts +0 -2
  137. package/test/icc-x-api/crypto/soft-deleted-data-owners.js +0 -113
  138. package/test/icc-x-api/crypto/soft-deleted-data-owners.js.map +0 -1
  139. package/test/icc-x-api/crypto/user-encryption-keys-manager-test.d.ts +0 -1
  140. package/test/icc-x-api/crypto/user-encryption-keys-manager-test.js +0 -246
  141. package/test/icc-x-api/crypto/user-encryption-keys-manager-test.js.map +0 -1
  142. package/test/icc-x-api/entity-with-attachments-api-test.d.ts +0 -1
  143. package/test/icc-x-api/entity-with-attachments-api-test.js +0 -142
  144. package/test/icc-x-api/entity-with-attachments-api-test.js.map +0 -1
  145. package/test/icc-x-api/filters/filters.d.ts +0 -1
  146. package/test/icc-x-api/filters/filters.js +0 -49
  147. package/test/icc-x-api/filters/filters.js.map +0 -1
  148. package/test/icc-x-api/filters/healthelement.d.ts +0 -1
  149. package/test/icc-x-api/filters/healthelement.js +0 -333
  150. package/test/icc-x-api/filters/healthelement.js.map +0 -1
  151. package/test/icc-x-api/icc-accesslog-x-api.d.ts +0 -1
  152. package/test/icc-x-api/icc-accesslog-x-api.js +0 -106
  153. package/test/icc-x-api/icc-accesslog-x-api.js.map +0 -1
  154. package/test/icc-x-api/icc-application-settings-x-api.d.ts +0 -1
  155. package/test/icc-x-api/icc-application-settings-x-api.js +0 -91
  156. package/test/icc-x-api/icc-application-settings-x-api.js.map +0 -1
  157. package/test/icc-x-api/icc-auth-api.d.ts +0 -1
  158. package/test/icc-x-api/icc-auth-api.js +0 -47
  159. package/test/icc-x-api/icc-auth-api.js.map +0 -1
  160. package/test/icc-x-api/icc-calendar-item-x-api.d.ts +0 -1
  161. package/test/icc-x-api/icc-calendar-item-x-api.js +0 -150
  162. package/test/icc-x-api/icc-calendar-item-x-api.js.map +0 -1
  163. package/test/icc-x-api/icc-code-x-api-test.d.ts +0 -1
  164. package/test/icc-x-api/icc-code-x-api-test.js +0 -74
  165. package/test/icc-x-api/icc-code-x-api-test.js.map +0 -1
  166. package/test/icc-x-api/icc-contact-x-api.d.ts +0 -1
  167. package/test/icc-x-api/icc-contact-x-api.js +0 -355
  168. package/test/icc-x-api/icc-contact-x-api.js.map +0 -1
  169. package/test/icc-x-api/icc-document-x-api.d.ts +0 -1
  170. package/test/icc-x-api/icc-document-x-api.js +0 -76
  171. package/test/icc-x-api/icc-document-x-api.js.map +0 -1
  172. package/test/icc-x-api/icc-form-x-api.d.ts +0 -1
  173. package/test/icc-x-api/icc-form-x-api.js +0 -413
  174. package/test/icc-x-api/icc-form-x-api.js.map +0 -1
  175. package/test/icc-x-api/icc-hcparty-x-api-test.d.ts +0 -1
  176. package/test/icc-x-api/icc-hcparty-x-api-test.js +0 -43
  177. package/test/icc-x-api/icc-hcparty-x-api-test.js.map +0 -1
  178. package/test/icc-x-api/icc-helement-x-api-test.d.ts +0 -1
  179. package/test/icc-x-api/icc-helement-x-api-test.js +0 -155
  180. package/test/icc-x-api/icc-helement-x-api-test.js.map +0 -1
  181. package/test/icc-x-api/icc-invoice-x-api.d.ts +0 -1
  182. package/test/icc-x-api/icc-invoice-x-api.js +0 -99
  183. package/test/icc-x-api/icc-invoice-x-api.js.map +0 -1
  184. package/test/icc-x-api/icc-maintenance-task-x-api-test.d.ts +0 -1
  185. package/test/icc-x-api/icc-maintenance-task-x-api-test.js +0 -222
  186. package/test/icc-x-api/icc-maintenance-task-x-api-test.js.map +0 -1
  187. package/test/icc-x-api/icc-message-x-api.d.ts +0 -1
  188. package/test/icc-x-api/icc-message-x-api.js +0 -54
  189. package/test/icc-x-api/icc-message-x-api.js.map +0 -1
  190. package/test/icc-x-api/icc-patient-x-api-test.d.ts +0 -1
  191. package/test/icc-x-api/icc-patient-x-api-test.js +0 -209
  192. package/test/icc-x-api/icc-patient-x-api-test.js.map +0 -1
  193. package/test/icc-x-api/icc-recovery-x-api.d.ts +0 -1
  194. package/test/icc-x-api/icc-recovery-x-api.js +0 -175
  195. package/test/icc-x-api/icc-recovery-x-api.js.map +0 -1
  196. package/test/icc-x-api/icc-topic-x-api.d.ts +0 -1
  197. package/test/icc-x-api/icc-topic-x-api.js +0 -269
  198. package/test/icc-x-api/icc-topic-x-api.js.map +0 -1
  199. package/test/icc-x-api/icc-user-x-api-test.d.ts +0 -1
  200. package/test/icc-x-api/icc-user-x-api-test.js +0 -99
  201. package/test/icc-x-api/icc-user-x-api-test.js.map +0 -1
  202. package/test/icc-x-api/keyless-api.d.ts +0 -1
  203. package/test/icc-x-api/keyless-api.js +0 -125
  204. package/test/icc-x-api/keyless-api.js.map +0 -1
  205. package/test/icc-x-api/patient-user.d.ts +0 -2
  206. package/test/icc-x-api/patient-user.js +0 -103
  207. package/test/icc-x-api/patient-user.js.map +0 -1
  208. package/test/icc-x-api/storage/storage.d.ts +0 -1
  209. package/test/icc-x-api/storage/storage.js +0 -48
  210. package/test/icc-x-api/storage/storage.js.map +0 -1
  211. package/test/icc-x-api/test-api-no-parent.d.ts +0 -1
  212. package/test/icc-x-api/test-api-no-parent.js +0 -79
  213. package/test/icc-x-api/test-api-no-parent.js.map +0 -1
  214. package/test/icc-x-api/test-legacy-data-support.d.ts +0 -1
  215. package/test/icc-x-api/test-legacy-data-support.js +0 -375
  216. package/test/icc-x-api/test-legacy-data-support.js.map +0 -1
  217. package/test/icc-x-api/utils/date-encode-test.d.ts +0 -1
  218. package/test/icc-x-api/utils/date-encode-test.js +0 -150
  219. package/test/icc-x-api/utils/date-encode-test.js.map +0 -1
  220. package/test/icc-x-api/utils/graph-test.d.ts +0 -1
  221. package/test/icc-x-api/utils/graph-test.js +0 -54
  222. package/test/icc-x-api/utils/graph-test.js.map +0 -1
  223. package/test/icc-x-api/utils/lru-temporised-async-cache-test.d.ts +0 -1
  224. package/test/icc-x-api/utils/lru-temporised-async-cache-test.js +0 -364
  225. package/test/icc-x-api/utils/lru-temporised-async-cache-test.js.map +0 -1
  226. package/test/icc-x-api/utils/lzma-benchmark-test.d.ts +0 -1
  227. package/test/icc-x-api/utils/lzma-benchmark-test.js +0 -132
  228. package/test/icc-x-api/utils/lzma-benchmark-test.js.map +0 -1
  229. package/test/icc-x-api/utils/lzma-compat-test.d.ts +0 -1
  230. package/test/icc-x-api/utils/lzma-compat-test.js +0 -218
  231. package/test/icc-x-api/utils/lzma-compat-test.js.map +0 -1
  232. package/test/icc-x-api/utils/mutex-test.d.ts +0 -1
  233. package/test/icc-x-api/utils/mutex-test.js +0 -114
  234. package/test/icc-x-api/utils/mutex-test.js.map +0 -1
  235. package/test/icc-x-api/utils/to-moment-test.d.ts +0 -1
  236. package/test/icc-x-api/utils/to-moment-test.js +0 -110
  237. package/test/icc-x-api/utils/to-moment-test.js.map +0 -1
  238. package/test/support/CSM-185.d.ts +0 -1
  239. package/test/support/CSM-185.js +0 -124
  240. package/test/support/CSM-185.js.map +0 -1
  241. package/test/support/CSM-243.d.ts +0 -1
  242. package/test/support/CSM-243.js +0 -120
  243. package/test/support/CSM-243.js.map +0 -1
  244. package/test/support/CSM-543.d.ts +0 -1
  245. package/test/support/CSM-543.js +0 -164
  246. package/test/support/CSM-543.js.map +0 -1
  247. package/test/support/CSM-729.d.ts +0 -1
  248. package/test/support/CSM-729.js +0 -225
  249. package/test/support/CSM-729.js.map +0 -1
  250. package/test/support/CSM-814.d.ts +0 -1
  251. package/test/support/CSM-814.js +0 -475
  252. package/test/support/CSM-814.js.map +0 -1
  253. package/test/support/CSM-87.d.ts +0 -0
  254. package/test/support/CSM-87.js +0 -21
  255. package/test/support/CSM-87.js.map +0 -1
  256. package/test/support/CSM-93.d.ts +0 -1
  257. package/test/support/CSM-93.js +0 -112
  258. package/test/support/CSM-93.js.map +0 -1
  259. package/test/utils/FakeDataOwnerApi.d.ts +0 -32
  260. package/test/utils/FakeDataOwnerApi.js +0 -136
  261. package/test/utils/FakeDataOwnerApi.js.map +0 -1
  262. package/test/utils/FakeEncryptionKeysManager.d.ts +0 -36
  263. package/test/utils/FakeEncryptionKeysManager.js +0 -97
  264. package/test/utils/FakeEncryptionKeysManager.js.map +0 -1
  265. package/test/utils/FakeExchangeDataApi.d.ts +0 -32
  266. package/test/utils/FakeExchangeDataApi.js +0 -92
  267. package/test/utils/FakeExchangeDataApi.js.map +0 -1
  268. package/test/utils/FakeExchangeDataManager.d.ts +0 -48
  269. package/test/utils/FakeExchangeDataManager.js +0 -82
  270. package/test/utils/FakeExchangeDataManager.js.map +0 -1
  271. package/test/utils/FakeExchangeDataMapManager.d.ts +0 -12
  272. package/test/utils/FakeExchangeDataMapManager.js +0 -38
  273. package/test/utils/FakeExchangeDataMapManager.js.map +0 -1
  274. package/test/utils/FakeGenericApi.d.ts +0 -16
  275. package/test/utils/FakeGenericApi.js +0 -65
  276. package/test/utils/FakeGenericApi.js.map +0 -1
  277. package/test/utils/KeylessCryptoStrategies.d.ts +0 -23
  278. package/test/utils/KeylessCryptoStrategies.js +0 -26
  279. package/test/utils/KeylessCryptoStrategies.js.map +0 -1
  280. package/test/utils/TestApi.d.ts +0 -3
  281. package/test/utils/TestApi.js +0 -30
  282. package/test/utils/TestApi.js.map +0 -1
  283. package/test/utils/TestCollectionUtils.d.ts +0 -1
  284. package/test/utils/TestCollectionUtils.js +0 -310
  285. package/test/utils/TestCollectionUtils.js.map +0 -1
  286. package/test/utils/TestCryptoStrategies.d.ts +0 -42
  287. package/test/utils/TestCryptoStrategies.js +0 -80
  288. package/test/utils/TestCryptoStrategies.js.map +0 -1
  289. package/test/utils/TestStorage.d.ts +0 -23
  290. package/test/utils/TestStorage.js +0 -61
  291. package/test/utils/TestStorage.js.map +0 -1
  292. package/test/utils/roles.d.ts +0 -14
  293. package/test/utils/roles.js +0 -345
  294. package/test/utils/roles.js.map +0 -1
  295. package/test/utils/test_utils.d.ts +0 -87
  296. package/test/utils/test_utils.js +0 -452
  297. 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