@icure/api 8.0.8 → 8.0.10

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 (270) hide show
  1. package/icc-api/model/models.d.ts +1 -0
  2. package/icc-api/model/models.js +1 -0
  3. package/icc-api/model/models.js.map +1 -1
  4. package/icc-x-api/crypto/BaseExchangeDataManager.js +1 -1
  5. package/icc-x-api/crypto/BaseExchangeDataManager.js.map +1 -1
  6. package/icc-x-api/crypto/BaseExchangeKeysManager.js +7 -3
  7. package/icc-x-api/crypto/BaseExchangeKeysManager.js.map +1 -1
  8. package/icc-x-api/crypto/ExchangeDataManager.js +3 -2
  9. package/icc-x-api/crypto/ExchangeDataManager.js.map +1 -1
  10. package/icc-x-api/crypto/KeyRecovery.js +6 -5
  11. package/icc-x-api/crypto/KeyRecovery.js.map +1 -1
  12. package/icc-x-api/crypto/RSA.d.ts +4 -1
  13. package/icc-x-api/crypto/RSA.js +6 -1
  14. package/icc-x-api/crypto/RSA.js.map +1 -1
  15. package/icc-x-api/crypto/SecureDelegationsManager.js +2 -1
  16. package/icc-x-api/crypto/SecureDelegationsManager.js.map +1 -1
  17. package/icc-x-api/crypto/ShamirKeysManager.js +8 -9
  18. package/icc-x-api/crypto/ShamirKeysManager.js.map +1 -1
  19. package/icc-x-api/crypto/TransferKeysManager.js +4 -3
  20. package/icc-x-api/crypto/TransferKeysManager.js.map +1 -1
  21. package/icc-x-api/crypto/UserEncryptionKeysManager.js +4 -4
  22. package/icc-x-api/crypto/UserEncryptionKeysManager.js.map +1 -1
  23. package/icc-x-api/crypto/UserSignatureKeysManager.js +9 -5
  24. package/icc-x-api/crypto/UserSignatureKeysManager.js.map +1 -1
  25. package/icc-x-api/crypto/utils.d.ts +13 -4
  26. package/icc-x-api/crypto/utils.js +27 -9
  27. package/icc-x-api/crypto/utils.js.map +1 -1
  28. package/icc-x-api/icc-accesslog-x-api.js +16 -14
  29. package/icc-x-api/icc-accesslog-x-api.js.map +1 -1
  30. package/icc-x-api/icc-calendar-item-x-api.d.ts +2 -2
  31. package/icc-x-api/icc-calendar-item-x-api.js +17 -17
  32. package/icc-x-api/icc-calendar-item-x-api.js.map +1 -1
  33. package/icc-x-api/icc-classification-x-api.js +12 -11
  34. package/icc-x-api/icc-classification-x-api.js.map +1 -1
  35. package/icc-x-api/icc-contact-x-api.d.ts +2 -2
  36. package/icc-x-api/icc-contact-x-api.js +23 -20
  37. package/icc-x-api/icc-contact-x-api.js.map +1 -1
  38. package/icc-x-api/icc-data-owner-x-api.js +1 -1
  39. package/icc-x-api/icc-data-owner-x-api.js.map +1 -1
  40. package/icc-x-api/icc-document-x-api.js +17 -16
  41. package/icc-x-api/icc-document-x-api.js.map +1 -1
  42. package/icc-x-api/icc-form-x-api.js +13 -12
  43. package/icc-x-api/icc-form-x-api.js.map +1 -1
  44. package/icc-x-api/icc-helement-x-api.js +18 -16
  45. package/icc-x-api/icc-helement-x-api.js.map +1 -1
  46. package/icc-x-api/icc-icure-maintenance-x-api.js +4 -3
  47. package/icc-x-api/icc-icure-maintenance-x-api.js.map +1 -1
  48. package/icc-x-api/icc-invoice-x-api.js +12 -11
  49. package/icc-x-api/icc-invoice-x-api.js.map +1 -1
  50. package/icc-x-api/icc-maintenance-task-x-api.js +11 -11
  51. package/icc-x-api/icc-maintenance-task-x-api.js.map +1 -1
  52. package/icc-x-api/icc-message-x-api.js +14 -14
  53. package/icc-x-api/icc-message-x-api.js.map +1 -1
  54. package/icc-x-api/icc-patient-x-api.js +28 -27
  55. package/icc-x-api/icc-patient-x-api.js.map +1 -1
  56. package/icc-x-api/icc-receipt-x-api.js +11 -10
  57. package/icc-x-api/icc-receipt-x-api.js.map +1 -1
  58. package/icc-x-api/icc-recovery-x-api.js +3 -2
  59. package/icc-x-api/icc-recovery-x-api.js.map +1 -1
  60. package/icc-x-api/icc-time-table-x-api.js +9 -8
  61. package/icc-x-api/icc-time-table-x-api.js.map +1 -1
  62. package/icc-x-api/icc-topic-x-api.js +13 -13
  63. package/icc-x-api/icc-topic-x-api.js.map +1 -1
  64. package/icc-x-api/storage/IcureStorageFacade.js +4 -1
  65. package/icc-x-api/storage/IcureStorageFacade.js.map +1 -1
  66. package/icc-x-api/utils/EntityWithDelegationTypeName.d.ts +17 -1
  67. package/icc-x-api/utils/EntityWithDelegationTypeName.js +33 -15
  68. package/icc-x-api/utils/EntityWithDelegationTypeName.js.map +1 -1
  69. package/package.json +1 -1
  70. package/test/icc-api/api/IccAnonymousAccessApi.d.ts +1 -0
  71. package/test/icc-api/api/IccAnonymousAccessApi.js +58 -0
  72. package/test/icc-api/api/IccAnonymousAccessApi.js.map +1 -0
  73. package/test/icc-api/api/IccDocumentApi.d.ts +1 -0
  74. package/test/icc-api/api/IccDocumentApi.js +208 -0
  75. package/test/icc-api/api/IccDocumentApi.js.map +1 -0
  76. package/test/icc-api/api/IccGroupApi.d.ts +1 -0
  77. package/test/icc-api/api/IccGroupApi.js +50 -0
  78. package/test/icc-api/api/IccGroupApi.js.map +1 -0
  79. package/test/icc-api/api/IccRecoveryDataApi.d.ts +1 -0
  80. package/test/icc-api/api/IccRecoveryDataApi.js +95 -0
  81. package/test/icc-api/api/IccRecoveryDataApi.js.map +1 -0
  82. package/test/icc-api/api/IccRoleApi.d.ts +1 -0
  83. package/test/icc-api/api/IccRoleApi.js +34 -0
  84. package/test/icc-api/api/IccRoleApi.js.map +1 -0
  85. package/test/icc-api/api/IccUserApi.d.ts +1 -0
  86. package/test/icc-api/api/IccUserApi.js +96 -0
  87. package/test/icc-api/api/IccUserApi.js.map +1 -0
  88. package/test/icc-api/e2e/IccCalendarItemApi.d.ts +1 -0
  89. package/test/icc-api/e2e/IccCalendarItemApi.js +46 -0
  90. package/test/icc-api/e2e/IccCalendarItemApi.js.map +1 -0
  91. package/test/icc-api/model/modelHelpersTest.d.ts +1 -0
  92. package/test/icc-api/model/modelHelpersTest.js +45 -0
  93. package/test/icc-api/model/modelHelpersTest.js.map +1 -0
  94. package/test/icc-x-api/auth/group-switch-test.d.ts +1 -0
  95. package/test/icc-x-api/auth/group-switch-test.js +81 -0
  96. package/test/icc-x-api/auth/group-switch-test.js.map +1 -0
  97. package/test/icc-x-api/auth/jwt-concurrency-test.d.ts +2 -0
  98. package/test/icc-x-api/auth/jwt-concurrency-test.js +113 -0
  99. package/test/icc-x-api/auth/jwt-concurrency-test.js.map +1 -0
  100. package/test/icc-x-api/auth/smart-auth-provider-test.d.ts +1 -0
  101. package/test/icc-x-api/auth/smart-auth-provider-test.js +224 -0
  102. package/test/icc-x-api/auth/smart-auth-provider-test.js.map +1 -0
  103. package/test/icc-x-api/autofix-anonymity-test.d.ts +1 -0
  104. package/test/icc-x-api/autofix-anonymity-test.js +108 -0
  105. package/test/icc-x-api/autofix-anonymity-test.js.map +1 -0
  106. package/test/icc-x-api/confidential-entities-test.d.ts +1 -0
  107. package/test/icc-x-api/confidential-entities-test.js +110 -0
  108. package/test/icc-x-api/confidential-entities-test.js.map +1 -0
  109. package/test/icc-x-api/crud/comprehensive-crud-test.d.ts +1 -0
  110. package/test/icc-x-api/crud/comprehensive-crud-test.js +276 -0
  111. package/test/icc-x-api/crud/comprehensive-crud-test.js.map +1 -0
  112. package/test/icc-x-api/crud/entities-crud-test-interface.d.ts +16 -0
  113. package/test/icc-x-api/crud/entities-crud-test-interface.js +422 -0
  114. package/test/icc-x-api/crud/entities-crud-test-interface.js.map +1 -0
  115. package/test/icc-x-api/crypto/anonymous-delegations-test.d.ts +1 -0
  116. package/test/icc-x-api/crypto/anonymous-delegations-test.js +588 -0
  117. package/test/icc-x-api/crypto/anonymous-delegations-test.js.map +1 -0
  118. package/test/icc-x-api/crypto/concurrency.d.ts +1 -0
  119. package/test/icc-x-api/crypto/concurrency.js +35 -0
  120. package/test/icc-x-api/crypto/concurrency.js.map +1 -0
  121. package/test/icc-x-api/crypto/crypto-utils.d.ts +1 -0
  122. package/test/icc-x-api/crypto/crypto-utils.js +80 -0
  123. package/test/icc-x-api/crypto/crypto-utils.js.map +1 -0
  124. package/test/icc-x-api/crypto/cryptoTest.d.ts +2 -0
  125. package/test/icc-x-api/crypto/cryptoTest.js +302 -0
  126. package/test/icc-x-api/crypto/cryptoTest.js.map +1 -0
  127. package/test/icc-x-api/crypto/delegate-ci-to-patient-with-missing-keys-test.d.ts +1 -0
  128. package/test/icc-x-api/crypto/delegate-ci-to-patient-with-missing-keys-test.js +166 -0
  129. package/test/icc-x-api/crypto/delegate-ci-to-patient-with-missing-keys-test.js.map +1 -0
  130. package/test/icc-x-api/crypto/exchange-data-manager-test.d.ts +1 -0
  131. package/test/icc-x-api/crypto/exchange-data-manager-test.js +690 -0
  132. package/test/icc-x-api/crypto/exchange-data-manager-test.js.map +1 -0
  133. package/test/icc-x-api/crypto/full-crypto-test.d.ts +1 -0
  134. package/test/icc-x-api/crypto/full-crypto-test.js +457 -0
  135. package/test/icc-x-api/crypto/full-crypto-test.js.map +1 -0
  136. package/test/icc-x-api/crypto/secure-delegations-manager-test.d.ts +1 -0
  137. package/test/icc-x-api/crypto/secure-delegations-manager-test.js +266 -0
  138. package/test/icc-x-api/crypto/secure-delegations-manager-test.js.map +1 -0
  139. package/test/icc-x-api/crypto/secure-delegations-metadata-decryptor-test.d.ts +1 -0
  140. package/test/icc-x-api/crypto/secure-delegations-metadata-decryptor-test.js +393 -0
  141. package/test/icc-x-api/crypto/secure-delegations-metadata-decryptor-test.js.map +1 -0
  142. package/test/icc-x-api/crypto/security-metadata-decryptor-chain-test.d.ts +1 -0
  143. package/test/icc-x-api/crypto/security-metadata-decryptor-chain-test.js +213 -0
  144. package/test/icc-x-api/crypto/security-metadata-decryptor-chain-test.js.map +1 -0
  145. package/test/icc-x-api/crypto/shamir.d.ts +2 -0
  146. package/test/icc-x-api/crypto/shamir.js +166 -0
  147. package/test/icc-x-api/crypto/shamir.js.map +1 -0
  148. package/test/icc-x-api/crypto/share-to-newly-created-patient-from-hcp.d.ts +1 -0
  149. package/test/icc-x-api/crypto/share-to-newly-created-patient-from-hcp.js +71 -0
  150. package/test/icc-x-api/crypto/share-to-newly-created-patient-from-hcp.js.map +1 -0
  151. package/test/icc-x-api/crypto/signature-keys-manager-test.d.ts +1 -0
  152. package/test/icc-x-api/crypto/signature-keys-manager-test.js +44 -0
  153. package/test/icc-x-api/crypto/signature-keys-manager-test.js.map +1 -0
  154. package/test/icc-x-api/crypto/user-encryption-keys-manager-test.d.ts +1 -0
  155. package/test/icc-x-api/crypto/user-encryption-keys-manager-test.js +246 -0
  156. package/test/icc-x-api/crypto/user-encryption-keys-manager-test.js.map +1 -0
  157. package/test/icc-x-api/entity-with-attachments-api-test.d.ts +1 -0
  158. package/test/icc-x-api/entity-with-attachments-api-test.js +142 -0
  159. package/test/icc-x-api/entity-with-attachments-api-test.js.map +1 -0
  160. package/test/icc-x-api/filters/filters.d.ts +1 -0
  161. package/test/icc-x-api/filters/filters.js +49 -0
  162. package/test/icc-x-api/filters/filters.js.map +1 -0
  163. package/test/icc-x-api/icc-accesslog-x-api.d.ts +1 -0
  164. package/test/icc-x-api/icc-accesslog-x-api.js +106 -0
  165. package/test/icc-x-api/icc-accesslog-x-api.js.map +1 -0
  166. package/test/icc-x-api/icc-auth-api.d.ts +1 -0
  167. package/test/icc-x-api/icc-auth-api.js +47 -0
  168. package/test/icc-x-api/icc-auth-api.js.map +1 -0
  169. package/test/icc-x-api/icc-calendar-item-x-api.d.ts +1 -0
  170. package/test/icc-x-api/icc-calendar-item-x-api.js +150 -0
  171. package/test/icc-x-api/icc-calendar-item-x-api.js.map +1 -0
  172. package/test/icc-x-api/icc-contact-x-api.d.ts +1 -0
  173. package/test/icc-x-api/icc-contact-x-api.js +279 -0
  174. package/test/icc-x-api/icc-contact-x-api.js.map +1 -0
  175. package/test/icc-x-api/icc-form-x-api.d.ts +1 -0
  176. package/test/icc-x-api/icc-form-x-api.js +98 -0
  177. package/test/icc-x-api/icc-form-x-api.js.map +1 -0
  178. package/test/icc-x-api/icc-helement-x-api-test.d.ts +1 -0
  179. package/test/icc-x-api/icc-helement-x-api-test.js +153 -0
  180. package/test/icc-x-api/icc-helement-x-api-test.js.map +1 -0
  181. package/test/icc-x-api/icc-invoice-x-api.d.ts +1 -0
  182. package/test/icc-x-api/icc-invoice-x-api.js +99 -0
  183. package/test/icc-x-api/icc-invoice-x-api.js.map +1 -0
  184. package/test/icc-x-api/icc-maintenance-task-x-api-test.d.ts +1 -0
  185. package/test/icc-x-api/icc-maintenance-task-x-api-test.js +221 -0
  186. package/test/icc-x-api/icc-maintenance-task-x-api-test.js.map +1 -0
  187. package/test/icc-x-api/icc-message-x-api.d.ts +1 -0
  188. package/test/icc-x-api/icc-message-x-api.js +328 -0
  189. package/test/icc-x-api/icc-message-x-api.js.map +1 -0
  190. package/test/icc-x-api/icc-patient-x-api-test.d.ts +1 -0
  191. package/test/icc-x-api/icc-patient-x-api-test.js +158 -0
  192. package/test/icc-x-api/icc-patient-x-api-test.js.map +1 -0
  193. package/test/icc-x-api/icc-recovery-x-api.d.ts +1 -0
  194. package/test/icc-x-api/icc-recovery-x-api.js +170 -0
  195. package/test/icc-x-api/icc-recovery-x-api.js.map +1 -0
  196. package/test/icc-x-api/icc-time-table-x-api.d.ts +1 -0
  197. package/test/icc-x-api/icc-time-table-x-api.js +100 -0
  198. package/test/icc-x-api/icc-time-table-x-api.js.map +1 -0
  199. package/test/icc-x-api/icc-topic-x-api.d.ts +1 -0
  200. package/test/icc-x-api/icc-topic-x-api.js +269 -0
  201. package/test/icc-x-api/icc-topic-x-api.js.map +1 -0
  202. package/test/icc-x-api/icc-user-x-api-test.d.ts +1 -0
  203. package/test/icc-x-api/icc-user-x-api-test.js +99 -0
  204. package/test/icc-x-api/icc-user-x-api-test.js.map +1 -0
  205. package/test/icc-x-api/patient-user.d.ts +2 -0
  206. package/test/icc-x-api/patient-user.js +104 -0
  207. package/test/icc-x-api/patient-user.js.map +1 -0
  208. package/test/icc-x-api/storage/storage.d.ts +1 -0
  209. package/test/icc-x-api/storage/storage.js +48 -0
  210. package/test/icc-x-api/storage/storage.js.map +1 -0
  211. package/test/icc-x-api/test-api-no-parent.d.ts +1 -0
  212. package/test/icc-x-api/test-api-no-parent.js +79 -0
  213. package/test/icc-x-api/test-api-no-parent.js.map +1 -0
  214. package/test/icc-x-api/test-legacy-data-support.d.ts +1 -0
  215. package/test/icc-x-api/test-legacy-data-support.js +376 -0
  216. package/test/icc-x-api/test-legacy-data-support.js.map +1 -0
  217. package/test/icc-x-api/utils/graph-test.d.ts +1 -0
  218. package/test/icc-x-api/utils/graph-test.js +54 -0
  219. package/test/icc-x-api/utils/graph-test.js.map +1 -0
  220. package/test/icc-x-api/utils/lru-temporised-async-cache-test.d.ts +1 -0
  221. package/test/icc-x-api/utils/lru-temporised-async-cache-test.js +364 -0
  222. package/test/icc-x-api/utils/lru-temporised-async-cache-test.js.map +1 -0
  223. package/test/support/CSM-185.d.ts +1 -0
  224. package/test/support/CSM-185.js +124 -0
  225. package/test/support/CSM-185.js.map +1 -0
  226. package/test/support/CSM-243.d.ts +1 -0
  227. package/test/support/CSM-243.js +120 -0
  228. package/test/support/CSM-243.js.map +1 -0
  229. package/test/support/CSM-87.d.ts +0 -0
  230. package/test/support/CSM-87.js +21 -0
  231. package/test/support/CSM-87.js.map +1 -0
  232. package/test/support/CSM-93.d.ts +1 -0
  233. package/test/support/CSM-93.js +112 -0
  234. package/test/support/CSM-93.js.map +1 -0
  235. package/test/utils/FakeDataOwnerApi.d.ts +32 -0
  236. package/test/utils/FakeDataOwnerApi.js +136 -0
  237. package/test/utils/FakeDataOwnerApi.js.map +1 -0
  238. package/test/utils/FakeEncryptionKeysManager.d.ts +35 -0
  239. package/test/utils/FakeEncryptionKeysManager.js +87 -0
  240. package/test/utils/FakeEncryptionKeysManager.js.map +1 -0
  241. package/test/utils/FakeExchangeDataApi.d.ts +30 -0
  242. package/test/utils/FakeExchangeDataApi.js +74 -0
  243. package/test/utils/FakeExchangeDataApi.js.map +1 -0
  244. package/test/utils/FakeExchangeDataManager.d.ts +40 -0
  245. package/test/utils/FakeExchangeDataManager.js +89 -0
  246. package/test/utils/FakeExchangeDataManager.js.map +1 -0
  247. package/test/utils/FakeExchangeDataMapManager.d.ts +12 -0
  248. package/test/utils/FakeExchangeDataMapManager.js +38 -0
  249. package/test/utils/FakeExchangeDataMapManager.js.map +1 -0
  250. package/test/utils/FakeGenericApi.d.ts +16 -0
  251. package/test/utils/FakeGenericApi.js +65 -0
  252. package/test/utils/FakeGenericApi.js.map +1 -0
  253. package/test/utils/FakeSignatureKeysManager.d.ts +16 -0
  254. package/test/utils/FakeSignatureKeysManager.js +54 -0
  255. package/test/utils/FakeSignatureKeysManager.js.map +1 -0
  256. package/test/utils/TestApi.d.ts +3 -0
  257. package/test/utils/TestApi.js +30 -0
  258. package/test/utils/TestApi.js.map +1 -0
  259. package/test/utils/TestCollectionUtils.d.ts +1 -0
  260. package/test/utils/TestCollectionUtils.js +109 -0
  261. package/test/utils/TestCollectionUtils.js.map +1 -0
  262. package/test/utils/TestCryptoStrategies.d.ts +42 -0
  263. package/test/utils/TestCryptoStrategies.js +80 -0
  264. package/test/utils/TestCryptoStrategies.js.map +1 -0
  265. package/test/utils/TestStorage.d.ts +23 -0
  266. package/test/utils/TestStorage.js +61 -0
  267. package/test/utils/TestStorage.js.map +1 -0
  268. package/test/utils/test_utils.d.ts +76 -0
  269. package/test/utils/test_utils.js +419 -0
  270. package/test/utils/test_utils.js.map +1 -0
@@ -1 +1 @@
1
- {"version":3,"file":"IcureStorageFacade.js","sourceRoot":"","sources":["../../../icc-x-api/storage/IcureStorageFacade.ts"],"names":[],"mappings":"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","sourcesContent":["import { KeyStorageFacade } from './KeyStorageFacade'\nimport { StorageFacade } from './StorageFacade'\nimport { StorageEntryKeysFactory } from './StorageEntryKeysFactory'\nimport { KeyPair } from '../crypto/RSA'\n\n/**\n * @internal This class is meant for internal use only and may be changed without notice.\n * Simplifies access to the storage facades for iCure-specific data storage.\n */\nexport class IcureStorageFacade {\n private readonly keys: KeyStorageFacade\n private readonly data: StorageFacade<string>\n private readonly entryFor: StorageEntryKeysFactory\n\n constructor(keyStorage: KeyStorageFacade, storage: StorageFacade<string>, entryKeysFactory: StorageEntryKeysFactory) {\n this.keys = keyStorage\n this.data = storage\n this.entryFor = entryKeysFactory\n }\n\n /**\n * Saves a key pair for the data owner.\n * @param dataOwnerId id of the data owner with the key.\n * @param publicKeyFingerprint fingerprint of the public key of the pair.\n * @param keyPair a key pair of the data owner.\n * @param isDevice true if the key was generated on this device.\n */\n async saveKey(dataOwnerId: string, publicKeyFingerprint: string, keyPair: KeyPair<JsonWebKey>, isDevice: boolean): Promise<void> {\n const key = isDevice\n ? this.entryFor.deviceKeypairOfDataOwner(dataOwnerId, publicKeyFingerprint)\n : this.entryFor.cachedRecoveredKeypairOfDataOwner(dataOwnerId, publicKeyFingerprint)\n await this.keys.storeKeyPair(key, keyPair)\n }\n\n /**\n * Get an existing key pair for the data owner.\n * @param dataOwnerId id of the data owner with the key.\n * @param publicKeyFingerprint fingerprint of a public key of the data owner.\n * @param legacyPublicKey the legacy public key of the data owner, if present (only used to know if we should search for the key in 'legacy' storage\n * locations.\n * @return the keypair and if the key was generated on this device or undefined if the key pair could not be found.\n */\n async loadKey(\n dataOwnerId: string,\n publicKeyFingerprint: string,\n legacyPublicKey: string | undefined\n ): Promise<{ pair: KeyPair<JsonWebKey>; isDevice: boolean } | undefined> {\n const deviceKey =\n (await this.keys.getKeypair(this.entryFor.deviceKeypairOfDataOwner(dataOwnerId, publicKeyFingerprint))) ??\n (await this.keys.getKeypair(`org.taktik.icure.rsa.${dataOwnerId}.${publicKeyFingerprint}`)) ??\n (legacyPublicKey?.slice(-32) === publicKeyFingerprint ? await this.keys.getKeypair(`org.taktik.icure.rsa.${dataOwnerId}`) : undefined)\n if (deviceKey) return { pair: deviceKey, isDevice: true }\n const cachedKey = await this.keys.getKeypair(this.entryFor.cachedRecoveredKeypairOfDataOwner(dataOwnerId, publicKeyFingerprint))\n if (cachedKey) return { pair: cachedKey, isDevice: false }\n return undefined\n }\n\n /**\n * Save the results of public key verification. If there were already results stored the entries will be merged. In case of conflicts the new\n * {@link verificationDetails} take priority over the stored data.\n * @param dataOwnerId id of a data owner.\n * @param verificationDetails results of verification, associates key fingerprints to true if they were verified by the user or false otherwise.\n * @return the updated keys\n */\n async saveSelfVerifiedKeys(\n dataOwnerId: string,\n verificationDetails: { [keyFingerprint: string]: boolean }\n ): Promise<{ [keyFingerprint: string]: boolean }> {\n const updated = {\n ...(await this.loadSelfVerifiedKeys(dataOwnerId)),\n ...verificationDetails,\n }\n await this.data.setItem(this.entryFor.selfPublicKeysVerificationCacheForDataOwner(dataOwnerId), JSON.stringify(updated))\n return updated\n }\n\n /**\n * Get the last saved results of public key verification.\n * @param dataOwnerId id of a data owner.\n * @return saved results of verification, associates key fingerprints to true if they were verified by the user or false otherwise. If no results\n * were saved returns an empty object instead.\n * @throws if the stored results are not in a valid format.\n */\n async loadSelfVerifiedKeys(dataOwnerId: string): Promise<{ [keyFingerprint: string]: boolean }> {\n const dataString = await this.data.getItem(this.entryFor.selfPublicKeysVerificationCacheForDataOwner(dataOwnerId))\n if (dataString) {\n const parsed = JSON.parse(dataString)\n Object.entries(parsed).forEach(([k, v]) => {\n if (v !== true && v !== false) throw new Error(`Unexpected entry ${k}:${v}`)\n })\n return parsed\n } else return {}\n }\n\n /**\n * Saves a signature and verification key pair. Overrides previously saved signature keys (but keeps signature verification keys).\n * @param dataOwnerId id of the data owner with the key.\n * @param publicKeyFingerprint fingerprint of the public key of the pair.\n * @param keyPair the key pair to save.\n */\n async saveSignatureKeyPair(dataOwnerId: string, publicKeyFingerprint: string, keyPair: KeyPair<JsonWebKey>): Promise<void> {\n await this.keys.storeKeyPair(this.entryFor.signatureKeyForDataOwner(dataOwnerId), keyPair)\n await this.keys.storePublicKey(this.entryFor.signatureVerificationKeyForDataOwner(dataOwnerId, publicKeyFingerprint), keyPair.publicKey)\n }\n\n /**\n * Loads the signature key for the data owner.\n * @param dataOwnerId id of the data owner with the key.\n * @return the signature key for the data owner or undefined if there is no signature key stored.\n */\n async loadSignatureKey(dataOwnerId: string): Promise<KeyPair<JsonWebKey> | undefined> {\n return await this.keys.getKeypair(this.entryFor.signatureKeyForDataOwner(dataOwnerId))\n }\n\n /**\n * Loads the signature verification key for a data owner with the provided fingerprint.\n * @param dataOwnerId id of the data owner with the key.\n * @param publicKeyFingerprint fingerprint of the verification key.\n * @return the requested signature verification key or undefined if the key could not be found.\n */\n async loadSignatureVerificationKey(dataOwnerId: string, publicKeyFingerprint: string): Promise<JsonWebKey | undefined> {\n return await this.keys.getPublicKey(this.entryFor.signatureVerificationKeyForDataOwner(dataOwnerId, publicKeyFingerprint))\n }\n}\n"]}
1
+ {"version":3,"file":"IcureStorageFacade.js","sourceRoot":"","sources":["../../../icc-x-api/storage/IcureStorageFacade.ts"],"names":[],"mappings":"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","sourcesContent":["import { KeyStorageFacade } from './KeyStorageFacade'\nimport { StorageFacade } from './StorageFacade'\nimport { StorageEntryKeysFactory } from './StorageEntryKeysFactory'\nimport { KeyPair } from '../crypto/RSA'\nimport { fingerprintV1 } from '../crypto/utils'\n\n/**\n * @internal This class is meant for internal use only and may be changed without notice.\n * Simplifies access to the storage facades for iCure-specific data storage.\n */\nexport class IcureStorageFacade {\n private readonly keys: KeyStorageFacade\n private readonly data: StorageFacade<string>\n private readonly entryFor: StorageEntryKeysFactory\n\n constructor(keyStorage: KeyStorageFacade, storage: StorageFacade<string>, entryKeysFactory: StorageEntryKeysFactory) {\n this.keys = keyStorage\n this.data = storage\n this.entryFor = entryKeysFactory\n }\n\n /**\n * Saves a key pair for the data owner.\n * @param dataOwnerId id of the data owner with the key.\n * @param publicKeyFingerprint fingerprint of the public key of the pair.\n * @param keyPair a key pair of the data owner.\n * @param isDevice true if the key was generated on this device.\n */\n async saveKey(dataOwnerId: string, publicKeyFingerprint: string, keyPair: KeyPair<JsonWebKey>, isDevice: boolean): Promise<void> {\n const key = isDevice\n ? this.entryFor.deviceKeypairOfDataOwner(dataOwnerId, publicKeyFingerprint)\n : this.entryFor.cachedRecoveredKeypairOfDataOwner(dataOwnerId, publicKeyFingerprint)\n await this.keys.storeKeyPair(key, keyPair)\n }\n\n /**\n * Get an existing key pair for the data owner.\n * @param dataOwnerId id of the data owner with the key.\n * @param publicKeyFingerprint fingerprint of a public key of the data owner.\n * @param legacyPublicKey the legacy public key of the data owner, if present (only used to know if we should search for the key in 'legacy' storage\n * locations.\n * @return the keypair and if the key was generated on this device or undefined if the key pair could not be found.\n */\n async loadKey(\n dataOwnerId: string,\n publicKeyFingerprint: string,\n legacyPublicKey: string | undefined\n ): Promise<{ pair: KeyPair<JsonWebKey>; isDevice: boolean } | undefined> {\n const deviceKey =\n (await this.keys.getKeypair(this.entryFor.deviceKeypairOfDataOwner(dataOwnerId, publicKeyFingerprint))) ??\n (await this.keys.getKeypair(`org.taktik.icure.rsa.${dataOwnerId}.${publicKeyFingerprint}`)) ??\n (!!legacyPublicKey && fingerprintV1(legacyPublicKey) === publicKeyFingerprint\n ? await this.keys.getKeypair(`org.taktik.icure.rsa.${dataOwnerId}`)\n : undefined)\n if (deviceKey) return { pair: deviceKey, isDevice: true }\n const cachedKey = await this.keys.getKeypair(this.entryFor.cachedRecoveredKeypairOfDataOwner(dataOwnerId, publicKeyFingerprint))\n if (cachedKey) return { pair: cachedKey, isDevice: false }\n return undefined\n }\n\n /**\n * Save the results of public key verification. If there were already results stored the entries will be merged. In case of conflicts the new\n * {@link verificationDetails} take priority over the stored data.\n * @param dataOwnerId id of a data owner.\n * @param verificationDetails results of verification, associates key fingerprints to true if they were verified by the user or false otherwise.\n * @return the updated keys\n */\n async saveSelfVerifiedKeys(\n dataOwnerId: string,\n verificationDetails: { [keyFingerprint: string]: boolean }\n ): Promise<{ [keyFingerprint: string]: boolean }> {\n const updated = {\n ...(await this.loadSelfVerifiedKeys(dataOwnerId)),\n ...verificationDetails,\n }\n await this.data.setItem(this.entryFor.selfPublicKeysVerificationCacheForDataOwner(dataOwnerId), JSON.stringify(updated))\n return updated\n }\n\n /**\n * Get the last saved results of public key verification.\n * @param dataOwnerId id of a data owner.\n * @return saved results of verification, associates key fingerprints to true if they were verified by the user or false otherwise. If no results\n * were saved returns an empty object instead.\n * @throws if the stored results are not in a valid format.\n */\n async loadSelfVerifiedKeys(dataOwnerId: string): Promise<{ [keyFingerprint: string]: boolean }> {\n const dataString = await this.data.getItem(this.entryFor.selfPublicKeysVerificationCacheForDataOwner(dataOwnerId))\n if (dataString) {\n const parsed = JSON.parse(dataString)\n Object.entries(parsed).forEach(([k, v]) => {\n if (v !== true && v !== false) throw new Error(`Unexpected entry ${k}:${v}`)\n })\n return parsed\n } else return {}\n }\n\n /**\n * Saves a signature and verification key pair. Overrides previously saved signature keys (but keeps signature verification keys).\n * @param dataOwnerId id of the data owner with the key.\n * @param publicKeyFingerprint fingerprint of the public key of the pair.\n * @param keyPair the key pair to save.\n */\n async saveSignatureKeyPair(dataOwnerId: string, publicKeyFingerprint: string, keyPair: KeyPair<JsonWebKey>): Promise<void> {\n await this.keys.storeKeyPair(this.entryFor.signatureKeyForDataOwner(dataOwnerId), keyPair)\n await this.keys.storePublicKey(this.entryFor.signatureVerificationKeyForDataOwner(dataOwnerId, publicKeyFingerprint), keyPair.publicKey)\n }\n\n /**\n * Loads the signature key for the data owner.\n * @param dataOwnerId id of the data owner with the key.\n * @return the signature key for the data owner or undefined if there is no signature key stored.\n */\n async loadSignatureKey(dataOwnerId: string): Promise<KeyPair<JsonWebKey> | undefined> {\n return await this.keys.getKeypair(this.entryFor.signatureKeyForDataOwner(dataOwnerId))\n }\n\n /**\n * Loads the signature verification key for a data owner with the provided fingerprint.\n * @param dataOwnerId id of the data owner with the key.\n * @param publicKeyFingerprint fingerprint of the verification key.\n * @return the requested signature verification key or undefined if the key could not be found.\n */\n async loadSignatureVerificationKey(dataOwnerId: string, publicKeyFingerprint: string): Promise<JsonWebKey | undefined> {\n return await this.keys.getPublicKey(this.entryFor.signatureVerificationKeyForDataOwner(dataOwnerId, publicKeyFingerprint))\n }\n}\n"]}
@@ -2,8 +2,24 @@
2
2
  * Names of all possible encrypted entity types.
3
3
  */
4
4
  import { EncryptedEntity, EncryptedEntityStub } from '../../icc-api/model/models';
5
+ export declare enum EntityWithDelegationTypeName {
6
+ Article = "Article",
7
+ AccessLog = "AccessLog",
8
+ CalendarItem = "CalendarItem",
9
+ Classification = "Classification",
10
+ Contact = "Contact",
11
+ Document = "Document",
12
+ Form = "Form",
13
+ HealthElement = "HealthElement",
14
+ Invoice = "Invoice",
15
+ MaintenanceTask = "MaintenanceTask",
16
+ Message = "Message",
17
+ Patient = "Patient",
18
+ Receipt = "Receipt",
19
+ TimeTable = "TimeTable",
20
+ Topic = "Topic"
21
+ }
5
22
  export declare const entityWithDelegationTypeNames: Set<EntityWithDelegationTypeName>;
6
- export type EntityWithDelegationTypeName = 'Article' | 'AccessLog' | 'CalendarItem' | 'Classification' | 'Contact' | 'Document' | 'Form' | 'HealthElement' | 'Invoice' | 'MaintenanceTask' | 'Message' | 'Patient' | 'Receipt' | 'TimeTable' | 'Topic';
7
23
  /**
8
24
  * Type containing information on an entity and its type. If the entity is a stub (EncryptedEntityStub or IcureStub) the type should refer to the
9
25
  * original entity from which the stub was extracted.
@@ -1,21 +1,39 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.tryGetEncryptedEntityClassOf = exports.encryptedEntityClassOf = exports.entityWithDelegationTypeNames = void 0;
3
+ exports.tryGetEncryptedEntityClassOf = exports.encryptedEntityClassOf = exports.entityWithDelegationTypeNames = exports.EntityWithDelegationTypeName = void 0;
4
+ var EntityWithDelegationTypeName;
5
+ (function (EntityWithDelegationTypeName) {
6
+ EntityWithDelegationTypeName["Article"] = "Article";
7
+ EntityWithDelegationTypeName["AccessLog"] = "AccessLog";
8
+ EntityWithDelegationTypeName["CalendarItem"] = "CalendarItem";
9
+ EntityWithDelegationTypeName["Classification"] = "Classification";
10
+ EntityWithDelegationTypeName["Contact"] = "Contact";
11
+ EntityWithDelegationTypeName["Document"] = "Document";
12
+ EntityWithDelegationTypeName["Form"] = "Form";
13
+ EntityWithDelegationTypeName["HealthElement"] = "HealthElement";
14
+ EntityWithDelegationTypeName["Invoice"] = "Invoice";
15
+ EntityWithDelegationTypeName["MaintenanceTask"] = "MaintenanceTask";
16
+ EntityWithDelegationTypeName["Message"] = "Message";
17
+ EntityWithDelegationTypeName["Patient"] = "Patient";
18
+ EntityWithDelegationTypeName["Receipt"] = "Receipt";
19
+ EntityWithDelegationTypeName["TimeTable"] = "TimeTable";
20
+ EntityWithDelegationTypeName["Topic"] = "Topic";
21
+ })(EntityWithDelegationTypeName = exports.EntityWithDelegationTypeName || (exports.EntityWithDelegationTypeName = {}));
4
22
  exports.entityWithDelegationTypeNames = new Set([
5
- 'Article',
6
- 'AccessLog',
7
- 'CalendarItem',
8
- 'Classification',
9
- 'Contact',
10
- 'Document',
11
- 'Form',
12
- 'HealthElement',
13
- 'Invoice',
14
- 'MaintenanceTask',
15
- 'Message',
16
- 'Patient',
17
- 'Receipt',
18
- 'TimeTable',
23
+ EntityWithDelegationTypeName.Article,
24
+ EntityWithDelegationTypeName.AccessLog,
25
+ EntityWithDelegationTypeName.CalendarItem,
26
+ EntityWithDelegationTypeName.Classification,
27
+ EntityWithDelegationTypeName.Contact,
28
+ EntityWithDelegationTypeName.Document,
29
+ EntityWithDelegationTypeName.Form,
30
+ EntityWithDelegationTypeName.HealthElement,
31
+ EntityWithDelegationTypeName.Invoice,
32
+ EntityWithDelegationTypeName.MaintenanceTask,
33
+ EntityWithDelegationTypeName.Message,
34
+ EntityWithDelegationTypeName.Patient,
35
+ EntityWithDelegationTypeName.Receipt,
36
+ EntityWithDelegationTypeName.TimeTable,
19
37
  ]);
20
38
  /**
21
39
  * @internal this function is meant for internal use only and may be changed without notice
@@ -1 +1 @@
1
- {"version":3,"file":"EntityWithDelegationTypeName.js","sourceRoot":"","sources":["../../../icc-x-api/utils/EntityWithDelegationTypeName.ts"],"names":[],"mappings":";;;AAKa,QAAA,6BAA6B,GAAsC,IAAI,GAAG,CAAC;IACtF,SAAS;IACT,WAAW;IACX,cAAc;IACd,gBAAgB;IAChB,SAAS;IACT,UAAU;IACV,MAAM;IACN,eAAe;IACf,SAAS;IACT,iBAAiB;IACjB,SAAS;IACT,SAAS;IACT,SAAS;IACT,WAAW;CACZ,CAAC,CAAA;AAwBF;;;;;;;GAOG;AACH,SAAgB,sBAAsB,CACpC,MAA6C,EAC7C,iBAA2D;IAE3D,MAAM,WAAW,GAAG,4BAA4B,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAA;IAC3E,IAAI,WAAW,EAAE;QACf,OAAO,WAAW,CAAA;KACnB;;QACC,MAAM,IAAI,KAAK,CACb,uDAAuD,MAAM,CAAC,WAAW,CAAC,IAAI,IAAI;YAChF,aAAa,iBAAiB,CAAC,CAAC,CAAC,GAAG,GAAG,iBAAiB,GAAG,GAAG,CAAC,CAAC,CAAC,WAAW,IAAI;YAChF,6DAA6D,KAAK,CAAC,IAAI,CAAC,qCAA6B,CAAC,GAAG,CAC5G,CAAA;AACL,CAAC;AAbD,wDAaC;AAED;;;;;;;GAOG;AACH,SAAgB,4BAA4B,CAC1C,MAA6C,EAC7C,iBAA2D;;IAE3D,MAAM,KAAK,GAAI,MAAc,CAAC,KAAK,CAAA;IACnC,IAAI,KAAK,IAAI,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,YAAY,MAAM,CAAC,EAAE;QACnE,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QAClC,MAAM,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;QACjD,IAAI,qCAA6B,CAAC,GAAG,CAAC,SAAgB,CAAC,EAAE;YACvD,IAAI,iBAAiB,IAAI,iBAAiB,KAAK,SAAS;gBACtD,MAAM,IAAI,KAAK,CAAC,uBAAuB,iBAAiB,sDAAsD,KAAK,SAAS,SAAS,IAAI,CAAC,CAAA;YAC5I,OAAO,SAAyC,CAAA;SACjD;KACF;IACD,IAAI,CAAC,iBAAiB;QACpB,OAAO,CAAC,IAAI,CACV,iIAAiI;YAC/H,kFAAkF,CACrF,CAAA;IACH,MAAM,eAAe,GAAG,MAAA,MAAM,CAAC,WAAW,0CAAE,IAAI,CAAA;IAChD,IAAI,qCAA6B,CAAC,GAAG,CAAC,eAAsB,CAAC,EAAE;QAC7D,IAAI,iBAAiB,IAAI,iBAAiB,KAAK,eAAe;YAC5D,MAAM,IAAI,KAAK,CAAC,uBAAuB,iBAAiB,4CAA4C,eAAe,GAAG,CAAC,CAAA;QACzH,OAAO,eAA+C,CAAA;KACvD;SAAM,IAAI,iBAAiB,IAAI,qCAA6B,CAAC,GAAG,CAAC,iBAAiB,CAAC,EAAE;QACpF,OAAO,iBAAiB,CAAA;KACzB;;QAAM,OAAO,SAAS,CAAA;AACzB,CAAC;AA3BD,oEA2BC","sourcesContent":["/**\n * Names of all possible encrypted entity types.\n */\nimport { EncryptedEntity, EncryptedEntityStub } from '../../icc-api/model/models'\n\nexport const entityWithDelegationTypeNames: Set<EntityWithDelegationTypeName> = new Set([\n 'Article',\n 'AccessLog',\n 'CalendarItem',\n 'Classification',\n 'Contact',\n 'Document',\n 'Form',\n 'HealthElement',\n 'Invoice',\n 'MaintenanceTask',\n 'Message',\n 'Patient',\n 'Receipt',\n 'TimeTable',\n])\n\nexport type EntityWithDelegationTypeName =\n | 'Article'\n | 'AccessLog'\n | 'CalendarItem'\n | 'Classification'\n | 'Contact'\n | 'Document'\n | 'Form'\n | 'HealthElement'\n | 'Invoice'\n | 'MaintenanceTask'\n | 'Message'\n | 'Patient'\n | 'Receipt'\n | 'TimeTable'\n | 'Topic'\n/**\n * Type containing information on an entity and its type. If the entity is a stub (EncryptedEntityStub or IcureStub) the type should refer to the\n * original entity from which the stub was extracted.\n */\nexport type EncryptedEntityWithType = { entity: EncryptedEntityStub | EncryptedEntity; type: EntityWithDelegationTypeName }\n\n/**\n * @internal this function is meant for internal use only and may be changed without notice\n * Gets the class of an encrypted entity. Throws error if the class can't be retrieved.\n * @param entity the entity object\n * @param declaredClassName the declared type of the entity, to use as a fallback in case the original class name can't be retrieved (for example\n * due to the use of minified code).\n * @return the class of the encrypted entity\n */\nexport function encryptedEntityClassOf(\n entity: EncryptedEntity | EncryptedEntityStub,\n declaredClassName: EntityWithDelegationTypeName | undefined\n): EntityWithDelegationTypeName {\n const entityClass = tryGetEncryptedEntityClassOf(entity, declaredClassName)\n if (entityClass) {\n return entityClass\n } else\n throw new Error(\n `No valid encrypted entity class name (constructor: \"${entity.constructor.name}\",` +\n `declared: ${declaredClassName ? '\"' + declaredClassName + '\"' : 'undefined'}).` +\n `Please specify a valid class name.\\nValid class names are ${Array.from(entityWithDelegationTypeNames)}.`\n )\n}\n\n/**\n * @internal this function is meant for internal use only and may be changed without notice\n * Gets the class of an encrypted entity. Returns undefined if the class can't be retrieved.\n * @param entity the entity object\n * @param declaredClassName the declared type of the entity, to use as a fallback in case the original class name can't be retrieved (for example\n * due to the use of minified code).\n * @return the class of the encrypted entity\n */\nexport function tryGetEncryptedEntityClassOf(\n entity: EncryptedEntity | EncryptedEntityStub,\n declaredClassName: EntityWithDelegationTypeName | undefined\n): EntityWithDelegationTypeName | undefined {\n const _type = (entity as any)._type\n if (_type && (typeof _type === 'string' || _type instanceof String)) {\n const splitType = _type.split('.')\n const candidate = splitType[splitType.length - 1]\n if (entityWithDelegationTypeNames.has(candidate as any)) {\n if (declaredClassName && declaredClassName !== candidate)\n throw new Error(`Declared type name \"${declaredClassName}\" does not match type detected from field \\`_type:\"${_type}\"\\` (\"${candidate}\")`)\n return candidate as EntityWithDelegationTypeName\n }\n }\n if (!declaredClassName)\n console.warn(\n 'Usage of a delegation-related method without specifying the entity class name, and input object does not have a `_type` value. ' +\n 'Will use constructor name as fallback, but this may not work with minified code.'\n )\n const constructorName = entity.constructor?.name\n if (entityWithDelegationTypeNames.has(constructorName as any)) {\n if (declaredClassName && declaredClassName !== constructorName)\n throw new Error(`Declared type name \"${declaredClassName}\" does not match valid constructor name \"${constructorName}\"`)\n return constructorName as EntityWithDelegationTypeName\n } else if (declaredClassName && entityWithDelegationTypeNames.has(declaredClassName)) {\n return declaredClassName\n } else return undefined\n}\n"]}
1
+ {"version":3,"file":"EntityWithDelegationTypeName.js","sourceRoot":"","sources":["../../../icc-x-api/utils/EntityWithDelegationTypeName.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Names of all possible encrypted entity types.\n */\nimport { EncryptedEntity, EncryptedEntityStub } from '../../icc-api/model/models'\n\nexport enum EntityWithDelegationTypeName {\n Article = 'Article',\n AccessLog = 'AccessLog',\n CalendarItem = 'CalendarItem',\n Classification = 'Classification',\n Contact = 'Contact',\n Document = 'Document',\n Form = 'Form',\n HealthElement = 'HealthElement',\n Invoice = 'Invoice',\n MaintenanceTask = 'MaintenanceTask',\n Message = 'Message',\n Patient = 'Patient',\n Receipt = 'Receipt',\n TimeTable = 'TimeTable',\n Topic = 'Topic',\n}\n\nexport const entityWithDelegationTypeNames: Set<EntityWithDelegationTypeName> = new Set([\n EntityWithDelegationTypeName.Article,\n EntityWithDelegationTypeName.AccessLog,\n EntityWithDelegationTypeName.CalendarItem,\n EntityWithDelegationTypeName.Classification,\n EntityWithDelegationTypeName.Contact,\n EntityWithDelegationTypeName.Document,\n EntityWithDelegationTypeName.Form,\n EntityWithDelegationTypeName.HealthElement,\n EntityWithDelegationTypeName.Invoice,\n EntityWithDelegationTypeName.MaintenanceTask,\n EntityWithDelegationTypeName.Message,\n EntityWithDelegationTypeName.Patient,\n EntityWithDelegationTypeName.Receipt,\n EntityWithDelegationTypeName.TimeTable,\n])\n\n/**\n * Type containing information on an entity and its type. If the entity is a stub (EncryptedEntityStub or IcureStub) the type should refer to the\n * original entity from which the stub was extracted.\n */\nexport type EncryptedEntityWithType = { entity: EncryptedEntityStub | EncryptedEntity; type: EntityWithDelegationTypeName }\n\n/**\n * @internal this function is meant for internal use only and may be changed without notice\n * Gets the class of an encrypted entity. Throws error if the class can't be retrieved.\n * @param entity the entity object\n * @param declaredClassName the declared type of the entity, to use as a fallback in case the original class name can't be retrieved (for example\n * due to the use of minified code).\n * @return the class of the encrypted entity\n */\nexport function encryptedEntityClassOf(\n entity: EncryptedEntity | EncryptedEntityStub,\n declaredClassName: EntityWithDelegationTypeName | undefined\n): EntityWithDelegationTypeName {\n const entityClass = tryGetEncryptedEntityClassOf(entity, declaredClassName)\n if (entityClass) {\n return entityClass\n } else\n throw new Error(\n `No valid encrypted entity class name (constructor: \"${entity.constructor.name}\",` +\n `declared: ${declaredClassName ? '\"' + declaredClassName + '\"' : 'undefined'}).` +\n `Please specify a valid class name.\\nValid class names are ${Array.from(entityWithDelegationTypeNames)}.`\n )\n}\n\n/**\n * @internal this function is meant for internal use only and may be changed without notice\n * Gets the class of an encrypted entity. Returns undefined if the class can't be retrieved.\n * @param entity the entity object\n * @param declaredClassName the declared type of the entity, to use as a fallback in case the original class name can't be retrieved (for example\n * due to the use of minified code).\n * @return the class of the encrypted entity\n */\nexport function tryGetEncryptedEntityClassOf(\n entity: EncryptedEntity | EncryptedEntityStub,\n declaredClassName: EntityWithDelegationTypeName | undefined\n): EntityWithDelegationTypeName | undefined {\n const _type = (entity as any)._type\n if (_type && (typeof _type === 'string' || _type instanceof String)) {\n const splitType = _type.split('.')\n const candidate = splitType[splitType.length - 1]\n if (entityWithDelegationTypeNames.has(candidate as any)) {\n if (declaredClassName && declaredClassName !== candidate)\n throw new Error(`Declared type name \"${declaredClassName}\" does not match type detected from field \\`_type:\"${_type}\"\\` (\"${candidate}\")`)\n return candidate as EntityWithDelegationTypeName\n }\n }\n if (!declaredClassName)\n console.warn(\n 'Usage of a delegation-related method without specifying the entity class name, and input object does not have a `_type` value. ' +\n 'Will use constructor name as fallback, but this may not work with minified code.'\n )\n const constructorName = entity.constructor?.name\n if (entityWithDelegationTypeNames.has(constructorName as any)) {\n if (declaredClassName && declaredClassName !== constructorName)\n throw new Error(`Declared type name \"${declaredClassName}\" does not match valid constructor name \"${constructorName}\"`)\n return constructorName as EntityWithDelegationTypeName\n } else if (declaredClassName && entityWithDelegationTypeNames.has(declaredClassName)) {\n return declaredClassName\n } else return undefined\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@icure/api",
3
- "version": "8.0.8",
3
+ "version": "8.0.10",
4
4
  "description": "Typescript version of iCure standalone API client",
5
5
  "main": "index.js",
6
6
  "types": "index.d.ts",
@@ -0,0 +1 @@
1
+ import 'isomorphic-fetch';
@@ -0,0 +1,58 @@
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 crypto_1 = require("crypto");
13
+ const test_utils_1 = require("../../utils/test_utils");
14
+ require("isomorphic-fetch");
15
+ var initMasterApi = test_utils_1.TestUtils.initMasterApi;
16
+ const chai_1 = require("chai");
17
+ const types_1 = require("@icure/test-setup/types");
18
+ const MedicalLocation_1 = require("../../../icc-api/model/MedicalLocation");
19
+ (0, test_utils_1.setLocalStorage)(fetch);
20
+ let env;
21
+ (0, test_utils_1.describeNoLite)('Anonymous Access', () => {
22
+ before(function () {
23
+ return __awaiter(this, void 0, void 0, function* () {
24
+ this.timeout(600000);
25
+ const initializer = yield (0, test_utils_1.getEnvironmentInitializer)();
26
+ env = yield initializer.execute((0, types_1.getEnvVariables)());
27
+ });
28
+ });
29
+ it('should be able to retrieve publicly available informations of medicalLocation', () => __awaiter(void 0, void 0, void 0, function* () {
30
+ var _a, _b;
31
+ const { medicalLocationApi, anonymousAccessApi } = yield initMasterApi(env);
32
+ const createdMedicalLocation = yield medicalLocationApi.createMedicalLocation(new MedicalLocation_1.MedicalLocation({
33
+ id: (0, crypto_1.randomUUID)(),
34
+ name: 'private medicalLocation ' + (0, crypto_1.randomUUID)(),
35
+ description: 'private medicalLocation description ' + (0, crypto_1.randomUUID)(),
36
+ }));
37
+ const createdMedicalLocationWithPublicInfo = yield medicalLocationApi.createMedicalLocation(new MedicalLocation_1.MedicalLocation({
38
+ id: (0, crypto_1.randomUUID)(),
39
+ name: 'public medicalLocation ' + (0, crypto_1.randomUUID)(),
40
+ description: 'public medicalLocation description ' + (0, crypto_1.randomUUID)(),
41
+ publicInformations: {
42
+ address: 'public address',
43
+ phone: '+32 2 555 55 55',
44
+ },
45
+ }));
46
+ const groupId = (0, types_1.getEnvVariables)().testGroupId;
47
+ const paginatedMedicalLocations = yield anonymousAccessApi.getPublicMedicalLocationsByGroupId(groupId);
48
+ (0, chai_1.expect)((_a = paginatedMedicalLocations.rows) === null || _a === void 0 ? void 0 : _a.length).to.be.greaterThan(0);
49
+ const publicMedicalLocationIds = (_b = paginatedMedicalLocations.rows) === null || _b === void 0 ? void 0 : _b.map((medicalLocation) => medicalLocation.id);
50
+ (0, chai_1.expect)(publicMedicalLocationIds).to.include(createdMedicalLocationWithPublicInfo.id);
51
+ (0, chai_1.expect)(publicMedicalLocationIds).not.to.include(createdMedicalLocation.id);
52
+ const publicMedicalLocation = paginatedMedicalLocations.rows.find((medicalLocation) => medicalLocation.id === createdMedicalLocationWithPublicInfo.id);
53
+ (0, chai_1.expect)(publicMedicalLocation).to.be.not.undefined;
54
+ (0, chai_1.expect)(publicMedicalLocation === null || publicMedicalLocation === void 0 ? void 0 : publicMedicalLocation.name).to.be.undefined;
55
+ (0, chai_1.expect)(publicMedicalLocation === null || publicMedicalLocation === void 0 ? void 0 : publicMedicalLocation.description).to.be.undefined;
56
+ }));
57
+ });
58
+ //# sourceMappingURL=IccAnonymousAccessApi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IccAnonymousAccessApi.js","sourceRoot":"","sources":["../../../../test/icc-api/api/IccAnonymousAccessApi.ts"],"names":[],"mappings":"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","sourcesContent":["import { randomUUID } from 'crypto'\nimport { describeNoLite, getEnvironmentInitializer, isLiteTest, setLocalStorage, TestUtils } from '../../utils/test_utils'\nimport 'isomorphic-fetch'\nimport initMasterApi = TestUtils.initMasterApi\nimport { expect } from 'chai'\nimport { getEnvVariables, TestVars } from '@icure/test-setup/types'\nimport { MedicalLocation } from '../../../icc-api/model/MedicalLocation'\n\nsetLocalStorage(fetch)\n\nlet env: TestVars\n\ndescribeNoLite('Anonymous Access', () => {\n before(async function () {\n this.timeout(600000)\n const initializer = await getEnvironmentInitializer()\n env = await initializer.execute(getEnvVariables())\n })\n\n it('should be able to retrieve publicly available informations of medicalLocation', async () => {\n const { medicalLocationApi, anonymousAccessApi } = await initMasterApi(env)\n\n const createdMedicalLocation = await medicalLocationApi.createMedicalLocation(\n new MedicalLocation({\n id: randomUUID(),\n name: 'private medicalLocation ' + randomUUID(),\n description: 'private medicalLocation description ' + randomUUID(),\n })\n )\n\n const createdMedicalLocationWithPublicInfo = await medicalLocationApi.createMedicalLocation(\n new MedicalLocation({\n id: randomUUID(),\n name: 'public medicalLocation ' + randomUUID(),\n description: 'public medicalLocation description ' + randomUUID(),\n publicInformations: {\n address: 'public address',\n phone: '+32 2 555 55 55',\n },\n })\n )\n\n const groupId = getEnvVariables().testGroupId\n\n const paginatedMedicalLocations = await anonymousAccessApi.getPublicMedicalLocationsByGroupId(groupId)\n\n expect(paginatedMedicalLocations.rows?.length).to.be.greaterThan(0)\n\n const publicMedicalLocationIds = paginatedMedicalLocations.rows?.map((medicalLocation) => medicalLocation.id)\n expect(publicMedicalLocationIds).to.include(createdMedicalLocationWithPublicInfo.id)\n expect(publicMedicalLocationIds).not.to.include(createdMedicalLocation.id)\n\n const publicMedicalLocation: MedicalLocation = paginatedMedicalLocations.rows!.find(\n (medicalLocation) => medicalLocation.id === createdMedicalLocationWithPublicInfo.id\n )!\n expect(publicMedicalLocation).to.be.not.undefined\n expect(publicMedicalLocation?.name).to.be.undefined\n expect(publicMedicalLocation?.description).to.be.undefined\n })\n})\n"]}
@@ -0,0 +1 @@
1
+ import 'isomorphic-fetch';
@@ -0,0 +1,208 @@
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 Document_1 = require("../../../icc-api/model/Document");
13
+ const chai_1 = require("chai");
14
+ const crypto_1 = require("crypto");
15
+ const test_utils_1 = require("../../utils/test_utils");
16
+ var initApi = test_utils_1.TestUtils.initApi;
17
+ const Delegation_1 = require("../../../icc-api/model/Delegation");
18
+ const types_1 = require("@icure/test-setup/types");
19
+ require("isomorphic-fetch");
20
+ (0, test_utils_1.setLocalStorage)(fetch);
21
+ const sampleKey = 'thumbnail';
22
+ const sampleKey2 = 'thumbnail2';
23
+ const sampleUti = ['uti2', 'uti1', 'uti3'];
24
+ const sampleUti2 = ['uti4'];
25
+ function bufferEquals(buf1, buf2) {
26
+ if (buf1.byteLength != buf2.byteLength)
27
+ return false;
28
+ const dv1 = new Int8Array(buf1);
29
+ const dv2 = new Int8Array(buf2);
30
+ return arrayEquals(dv1, dv2);
31
+ }
32
+ function arrayEquals(a1, a2) {
33
+ if (a1.length != a2.length)
34
+ return false;
35
+ for (let i = 0; i < a1.length; i++) {
36
+ if (a1[i] != a2[i])
37
+ return false;
38
+ }
39
+ return true;
40
+ }
41
+ function assertRequestFails(request, status) {
42
+ return __awaiter(this, void 0, void 0, function* () {
43
+ let succeeded = false;
44
+ try {
45
+ yield request;
46
+ succeeded = true;
47
+ }
48
+ catch (e) {
49
+ (0, chai_1.expect)(e.statusCode).to.equal(status);
50
+ }
51
+ (0, chai_1.assert)(!succeeded, 'Request should have not succeeded');
52
+ });
53
+ }
54
+ let env;
55
+ let documentApi;
56
+ let dataOwnerId;
57
+ describe('Document api', () => {
58
+ before(function () {
59
+ return __awaiter(this, void 0, void 0, function* () {
60
+ this.timeout(600000);
61
+ const initializer = yield (0, test_utils_1.getEnvironmentInitializer)();
62
+ env = yield initializer.execute((0, types_1.getEnvVariables)());
63
+ const api = yield initApi(env, test_utils_1.hcp1Username);
64
+ documentApi = api.documentApi;
65
+ dataOwnerId = yield api.dataOwnerApi.getCurrentDataOwnerId();
66
+ });
67
+ });
68
+ function createDocument() {
69
+ return __awaiter(this, void 0, void 0, function* () {
70
+ return yield documentApi.createDocument(new Document_1.Document({
71
+ id: (0, crypto_1.randomUUID)(),
72
+ delegations: {
73
+ [dataOwnerId]: [
74
+ new Delegation_1.Delegation({
75
+ owner: dataOwnerId,
76
+ delegatedTo: dataOwnerId,
77
+ key: 'fakekey',
78
+ }),
79
+ ],
80
+ },
81
+ }));
82
+ });
83
+ }
84
+ it('should allow to create and retrieve main attachments', () => __awaiter(void 0, void 0, void 0, function* () {
85
+ const document = yield createDocument();
86
+ const data = (0, crypto_1.randomBytes)(32);
87
+ (0, chai_1.expect)(document.rev).to.not.be.undefined;
88
+ const updated = yield documentApi.setMainDocumentAttachment(document.id, document.rev, data);
89
+ (0, chai_1.expect)(updated).to.not.be.undefined;
90
+ const retrievedData = yield documentApi.getMainDocumentAttachment(document.id);
91
+ (0, chai_1.assert)(bufferEquals(retrievedData, data));
92
+ }));
93
+ it('should allow to update main attachment', () => __awaiter(void 0, void 0, void 0, function* () {
94
+ const document = yield createDocument();
95
+ const data1 = (0, crypto_1.randomBytes)(32);
96
+ const data2 = (0, crypto_1.randomBytes)(32);
97
+ const updated = yield documentApi.setMainDocumentAttachment(document.id, document.rev, data1, sampleUti);
98
+ (0, chai_1.expect)(updated.mainUti).to.equal(sampleUti[0]);
99
+ (0, chai_1.assert)(arrayEquals(updated.otherUtis, sampleUti.slice(1)));
100
+ (0, chai_1.assert)(bufferEquals(yield documentApi.getMainDocumentAttachment(document.id), data1));
101
+ const updated2 = yield documentApi.setMainDocumentAttachment(document.id, updated.rev, data2);
102
+ (0, chai_1.expect)(updated2.mainUti).to.equal(sampleUti[0]);
103
+ (0, chai_1.assert)(arrayEquals(updated2.otherUtis, sampleUti.slice(1)));
104
+ (0, chai_1.assert)(bufferEquals(yield documentApi.getMainDocumentAttachment(document.id), data2));
105
+ }));
106
+ it('should allow to update utis in main attachment', () => __awaiter(void 0, void 0, void 0, function* () {
107
+ var _a;
108
+ const document = yield createDocument();
109
+ const data = (0, crypto_1.randomBytes)(32);
110
+ const updated = yield documentApi.setMainDocumentAttachment(document.id, document.rev, data, []);
111
+ (0, chai_1.expect)(updated.mainUti).to.be.undefined;
112
+ (0, chai_1.expect)((_a = updated.otherUtis) !== null && _a !== void 0 ? _a : []).to.be.empty;
113
+ const updated2 = yield documentApi.setMainDocumentAttachment(document.id, updated.rev, data, sampleUti);
114
+ (0, chai_1.expect)(updated2.mainUti).to.equal(sampleUti[0]);
115
+ (0, chai_1.assert)(arrayEquals(updated2.otherUtis, sampleUti.slice(1)));
116
+ }));
117
+ it('should allow to create and retrieve secondary attachments', () => __awaiter(void 0, void 0, void 0, function* () {
118
+ const document = yield createDocument();
119
+ const data = (0, crypto_1.randomBytes)(32);
120
+ const updated = yield documentApi.setSecondaryAttachment(document.id, sampleKey, document.rev, data);
121
+ (0, chai_1.expect)(updated.secondaryAttachments).to.contain.keys([sampleKey]);
122
+ (0, chai_1.assert)(arrayEquals(updated.secondaryAttachments[sampleKey].utis, []));
123
+ const retrievedData = yield documentApi.getSecondaryAttachment(document.id, sampleKey);
124
+ (0, chai_1.assert)(bufferEquals(retrievedData, data));
125
+ }));
126
+ it('should allow to initialise utis in secondary attachments', () => __awaiter(void 0, void 0, void 0, function* () {
127
+ const document = yield createDocument();
128
+ const data = (0, crypto_1.randomBytes)(32);
129
+ const updated = yield documentApi.setSecondaryAttachment(document.id, sampleKey, document.rev, data, sampleUti);
130
+ (0, chai_1.assert)(arrayEquals(updated.secondaryAttachments[sampleKey].utis, sampleUti));
131
+ }));
132
+ it('should allow to update secondary attachments', () => __awaiter(void 0, void 0, void 0, function* () {
133
+ const document = yield createDocument();
134
+ const data1 = (0, crypto_1.randomBytes)(32);
135
+ const data2 = (0, crypto_1.randomBytes)(32);
136
+ const updated = yield documentApi.setSecondaryAttachment(document.id, sampleKey, document.rev, data1, sampleUti);
137
+ (0, chai_1.assert)(arrayEquals(updated.secondaryAttachments[sampleKey].utis, sampleUti));
138
+ (0, chai_1.assert)(bufferEquals(yield documentApi.getSecondaryAttachment(document.id, sampleKey), data1));
139
+ const updated2 = yield documentApi.setSecondaryAttachment(document.id, sampleKey, updated.rev, data2);
140
+ (0, chai_1.assert)(arrayEquals(updated2.secondaryAttachments[sampleKey].utis, sampleUti));
141
+ (0, chai_1.assert)(bufferEquals(yield documentApi.getSecondaryAttachment(document.id, sampleKey), data2));
142
+ }));
143
+ it('should allow to update utis in secondary attachments', () => __awaiter(void 0, void 0, void 0, function* () {
144
+ const document = yield createDocument();
145
+ const data = (0, crypto_1.randomBytes)(32);
146
+ const updated = yield documentApi.setSecondaryAttachment(document.id, sampleKey, document.rev, data);
147
+ (0, chai_1.assert)(arrayEquals(updated.secondaryAttachments[sampleKey].utis, []));
148
+ const updated2 = yield documentApi.setSecondaryAttachment(document.id, sampleKey, updated.rev, data, sampleUti);
149
+ (0, chai_1.assert)(arrayEquals(updated2.secondaryAttachments[sampleKey].utis, sampleUti));
150
+ }));
151
+ it('should allow to delete secondary attachments', () => __awaiter(void 0, void 0, void 0, function* () {
152
+ const document = yield createDocument();
153
+ const data = (0, crypto_1.randomBytes)(32);
154
+ const updated = yield documentApi.setSecondaryAttachment(document.id, sampleKey, document.rev, data);
155
+ const originalAttachment = updated.secondaryAttachments[sampleKey];
156
+ const timeBeforeDelete = Date.now() - 100;
157
+ const deleted = yield documentApi.deleteSecondaryAttachment(document.id, sampleKey, updated.rev);
158
+ const timeAfterDelete = Date.now() + 100;
159
+ (0, chai_1.expect)(deleted.deletedAttachments).to.have.length(1);
160
+ const deletedAttachment = deleted.deletedAttachments[0];
161
+ (0, chai_1.expect)(deletedAttachment.couchDbAttachmentId).to.equal(originalAttachment.couchDbAttachmentId);
162
+ (0, chai_1.expect)(deletedAttachment.objectStoreAttachmentId).to.equal(originalAttachment.objectStoreAttachmentId);
163
+ (0, chai_1.expect)(deletedAttachment.key).to.equal(sampleKey);
164
+ (0, chai_1.expect)(deletedAttachment.deletionTime).to.be.above(timeBeforeDelete).and.below(timeAfterDelete);
165
+ (0, chai_1.expect)(Object.keys(deleted.secondaryAttachments)).to.be.empty;
166
+ }));
167
+ it('should treat secondary attachments with different keys as different attachments', () => __awaiter(void 0, void 0, void 0, function* () {
168
+ const document = yield createDocument();
169
+ const data1 = (0, crypto_1.randomBytes)(32);
170
+ const data2 = (0, crypto_1.randomBytes)(32);
171
+ const data3 = (0, crypto_1.randomBytes)(32);
172
+ (0, chai_1.assert)(!bufferEquals(data1, data2));
173
+ const updated1 = yield documentApi.setSecondaryAttachment(document.id, sampleKey, document.rev, data1);
174
+ const updated2 = yield documentApi.setSecondaryAttachment(document.id, sampleKey2, updated1.rev, data2, sampleUti);
175
+ (0, chai_1.expect)(updated2.secondaryAttachments).to.have.keys([sampleKey, sampleKey2]);
176
+ (0, chai_1.assert)(arrayEquals(updated2.secondaryAttachments[sampleKey].utis, []));
177
+ (0, chai_1.assert)(arrayEquals(updated2.secondaryAttachments[sampleKey2].utis, sampleUti));
178
+ (0, chai_1.assert)(bufferEquals(yield documentApi.getSecondaryAttachment(document.id, sampleKey), data1));
179
+ (0, chai_1.assert)(bufferEquals(yield documentApi.getSecondaryAttachment(document.id, sampleKey2), data2));
180
+ const updated3 = yield documentApi.setSecondaryAttachment(document.id, sampleKey, updated2.rev, data3, sampleUti2);
181
+ (0, chai_1.expect)(updated3.secondaryAttachments).to.have.keys([sampleKey, sampleKey2]);
182
+ (0, chai_1.assert)(arrayEquals(updated3.secondaryAttachments[sampleKey].utis, sampleUti2));
183
+ (0, chai_1.assert)(arrayEquals(updated3.secondaryAttachments[sampleKey2].utis, sampleUti));
184
+ (0, chai_1.assert)(bufferEquals(yield documentApi.getSecondaryAttachment(document.id, sampleKey), data3));
185
+ (0, chai_1.assert)(bufferEquals(yield documentApi.getSecondaryAttachment(document.id, sampleKey2), data2));
186
+ (0, chai_1.expect)(updated3.deletedAttachments).to.have.length(1);
187
+ const updated4 = yield documentApi.deleteSecondaryAttachment(document.id, sampleKey2, updated3.rev);
188
+ (0, chai_1.expect)(updated4.secondaryAttachments).to.have.keys([sampleKey]);
189
+ (0, chai_1.expect)(updated4.deletedAttachments).to.have.length(2);
190
+ (0, chai_1.assert)(bufferEquals(yield documentApi.getSecondaryAttachment(document.id, sampleKey), data3));
191
+ yield assertRequestFails(documentApi.getSecondaryAttachment(document.id, sampleKey2), 404);
192
+ }));
193
+ it('should refuse update methods which do not provide the latest rev', () => __awaiter(void 0, void 0, void 0, function* () {
194
+ const document = yield createDocument();
195
+ (0, chai_1.expect)(document.rev).to.not.be.undefined;
196
+ (0, chai_1.expect)((yield documentApi.modifyDocument(Object.assign(Object.assign({}, document), { name: 'new name' }))).rev).to.not.equal(document.rev);
197
+ yield assertRequestFails(documentApi.setMainDocumentAttachment(document.id, document.rev, (0, crypto_1.randomBytes)(32)), 409);
198
+ yield assertRequestFails(documentApi.setSecondaryAttachment(document.id, sampleKey, document.rev, (0, crypto_1.randomBytes)(32)), 409);
199
+ yield assertRequestFails(documentApi.deleteSecondaryAttachment(document.id, sampleKey, document.rev), 409);
200
+ }));
201
+ it('should prevent using the document id as an attachment key', () => __awaiter(void 0, void 0, void 0, function* () {
202
+ const document = yield createDocument();
203
+ yield assertRequestFails(documentApi.setSecondaryAttachment(document.id, document.id, document.rev, (0, crypto_1.randomBytes)(32)), 400);
204
+ yield assertRequestFails(documentApi.deleteSecondaryAttachment(document.id, document.id, document.rev), 400);
205
+ yield assertRequestFails(documentApi.getSecondaryAttachment(document.id, document.id, document.rev), 400);
206
+ }));
207
+ });
208
+ //# sourceMappingURL=IccDocumentApi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IccDocumentApi.js","sourceRoot":"","sources":["../../../../test/icc-api/api/IccDocumentApi.ts"],"names":[],"mappings":"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","sourcesContent":["import { IccDocumentXApi } from '../../../icc-x-api'\nimport { Document } from '../../../icc-api/model/Document'\nimport { assert, expect } from 'chai'\nimport { randomBytes, randomUUID } from 'crypto'\nimport { getEnvironmentInitializer, hcp1Username, setLocalStorage, TestUtils } from '../../utils/test_utils'\nimport initApi = TestUtils.initApi\nimport { Delegation } from '../../../icc-api/model/Delegation'\nimport { getEnvVariables, TestVars } from '@icure/test-setup/types'\nimport 'isomorphic-fetch'\n\nsetLocalStorage(fetch)\nconst sampleKey = 'thumbnail'\nconst sampleKey2 = 'thumbnail2'\nconst sampleUti = ['uti2', 'uti1', 'uti3']\nconst sampleUti2 = ['uti4']\n\nfunction bufferEquals(buf1: ArrayBuffer, buf2: ArrayBuffer): Boolean {\n if (buf1.byteLength != buf2.byteLength) return false\n const dv1 = new Int8Array(buf1)\n const dv2 = new Int8Array(buf2)\n return arrayEquals(dv1, dv2)\n}\n\nfunction arrayEquals<T>(a1: ArrayLike<T>, a2: ArrayLike<T>): Boolean {\n if (a1.length != a2.length) return false\n for (let i = 0; i < a1.length; i++) {\n if (a1[i] != a2[i]) return false\n }\n return true\n}\n\nasync function assertRequestFails(request: Promise<any>, status: number) {\n let succeeded = false\n try {\n await request\n succeeded = true\n } catch (e: any) {\n expect(e.statusCode).to.equal(status)\n }\n assert(!succeeded, 'Request should have not succeeded')\n}\n\nlet env: TestVars\nlet documentApi: IccDocumentXApi\nlet dataOwnerId: string\n\ndescribe('Document api', () => {\n before(async function () {\n this.timeout(600000)\n const initializer = await getEnvironmentInitializer()\n env = await initializer.execute(getEnvVariables())\n const api = await initApi(env!, hcp1Username)\n documentApi = api.documentApi\n dataOwnerId = await api.dataOwnerApi.getCurrentDataOwnerId()\n })\n\n async function createDocument(): Promise<Document> {\n return await documentApi.createDocument(\n new Document({\n id: randomUUID(),\n delegations: {\n [dataOwnerId]: [\n new Delegation({\n owner: dataOwnerId,\n delegatedTo: dataOwnerId,\n key: 'fakekey',\n }),\n ],\n },\n })\n )\n }\n\n it('should allow to create and retrieve main attachments', async () => {\n const document = await createDocument()\n const data = randomBytes(32)\n expect(document.rev).to.not.be.undefined\n const updated = await documentApi!.setMainDocumentAttachment(document.id!, document.rev!, data)\n expect(updated).to.not.be.undefined\n const retrievedData = await documentApi!.getMainDocumentAttachment(document.id!)\n assert(bufferEquals(retrievedData, data))\n })\n\n it('should allow to update main attachment', async () => {\n const document = await createDocument()\n const data1 = randomBytes(32)\n const data2 = randomBytes(32)\n const updated = await documentApi!.setMainDocumentAttachment(document.id!, document.rev!, data1, sampleUti)\n expect(updated.mainUti).to.equal(sampleUti[0])\n assert(arrayEquals(updated.otherUtis!, sampleUti.slice(1)))\n assert(bufferEquals(await documentApi!.getMainDocumentAttachment(document.id!), data1))\n const updated2 = await documentApi!.setMainDocumentAttachment(document.id!, updated.rev!, data2)\n expect(updated2.mainUti).to.equal(sampleUti[0])\n assert(arrayEquals(updated2.otherUtis!, sampleUti.slice(1)))\n assert(bufferEquals(await documentApi!.getMainDocumentAttachment(document.id!), data2))\n })\n\n it('should allow to update utis in main attachment', async () => {\n const document = await createDocument()\n const data = randomBytes(32)\n const updated = await documentApi!.setMainDocumentAttachment(document.id!, document.rev!, data, [])\n expect(updated.mainUti).to.be.undefined\n expect(updated.otherUtis ?? []).to.be.empty\n const updated2 = await documentApi!.setMainDocumentAttachment(document.id!, updated.rev!, data, sampleUti)\n expect(updated2.mainUti).to.equal(sampleUti[0])\n assert(arrayEquals(updated2.otherUtis!, sampleUti.slice(1)))\n })\n\n it('should allow to create and retrieve secondary attachments', async () => {\n const document = await createDocument()\n const data = randomBytes(32)\n const updated = await documentApi!.setSecondaryAttachment(document.id!, sampleKey, document.rev!, data)\n expect(updated.secondaryAttachments).to.contain.keys([sampleKey])\n assert(arrayEquals(updated.secondaryAttachments![sampleKey].utis!, []))\n const retrievedData = await documentApi!.getSecondaryAttachment(document.id!, sampleKey)\n assert(bufferEquals(retrievedData, data))\n })\n\n it('should allow to initialise utis in secondary attachments', async () => {\n const document = await createDocument()\n const data = randomBytes(32)\n const updated = await documentApi!.setSecondaryAttachment(document.id!, sampleKey, document.rev!, data, sampleUti)\n assert(arrayEquals(updated.secondaryAttachments![sampleKey].utis!, sampleUti))\n })\n\n it('should allow to update secondary attachments', async () => {\n const document = await createDocument()\n const data1 = randomBytes(32)\n const data2 = randomBytes(32)\n const updated = await documentApi!.setSecondaryAttachment(document.id!, sampleKey, document.rev!, data1, sampleUti)\n assert(arrayEquals(updated.secondaryAttachments![sampleKey].utis!, sampleUti))\n assert(bufferEquals(await documentApi!.getSecondaryAttachment(document.id!, sampleKey), data1))\n const updated2 = await documentApi!.setSecondaryAttachment(document.id!, sampleKey, updated.rev!, data2)\n assert(arrayEquals(updated2.secondaryAttachments![sampleKey].utis!, sampleUti))\n assert(bufferEquals(await documentApi!.getSecondaryAttachment(document.id!, sampleKey), data2))\n })\n\n it('should allow to update utis in secondary attachments', async () => {\n const document = await createDocument()\n const data = randomBytes(32)\n const updated = await documentApi!.setSecondaryAttachment(document.id!, sampleKey, document.rev!, data)\n assert(arrayEquals(updated.secondaryAttachments![sampleKey].utis!, []))\n const updated2 = await documentApi!.setSecondaryAttachment(document.id!, sampleKey, updated.rev!, data, sampleUti)\n assert(arrayEquals(updated2.secondaryAttachments![sampleKey].utis!, sampleUti))\n })\n\n it('should allow to delete secondary attachments', async () => {\n const document = await createDocument()\n const data = randomBytes(32)\n const updated = await documentApi!.setSecondaryAttachment(document.id!, sampleKey, document.rev!, data)\n const originalAttachment = updated.secondaryAttachments![sampleKey]\n const timeBeforeDelete = Date.now() - 100\n const deleted = await documentApi!.deleteSecondaryAttachment(document.id!, sampleKey, updated.rev!)\n const timeAfterDelete = Date.now() + 100\n expect(deleted.deletedAttachments).to.have.length(1)\n const deletedAttachment = deleted.deletedAttachments![0]\n expect(deletedAttachment.couchDbAttachmentId).to.equal(originalAttachment.couchDbAttachmentId)\n expect(deletedAttachment.objectStoreAttachmentId).to.equal(originalAttachment.objectStoreAttachmentId)\n expect(deletedAttachment.key).to.equal(sampleKey)\n expect(deletedAttachment.deletionTime).to.be.above(timeBeforeDelete).and.below(timeAfterDelete)\n expect(Object.keys(deleted.secondaryAttachments!)).to.be.empty\n })\n\n it('should treat secondary attachments with different keys as different attachments', async () => {\n const document = await createDocument()\n const data1 = randomBytes(32)\n const data2 = randomBytes(32)\n const data3 = randomBytes(32)\n assert(!bufferEquals(data1, data2))\n const updated1 = await documentApi!.setSecondaryAttachment(document.id!, sampleKey, document.rev!, data1)\n const updated2 = await documentApi!.setSecondaryAttachment(document.id!, sampleKey2, updated1.rev!, data2, sampleUti)\n expect(updated2.secondaryAttachments).to.have.keys([sampleKey, sampleKey2])\n assert(arrayEquals(updated2.secondaryAttachments![sampleKey].utis!, []))\n assert(arrayEquals(updated2.secondaryAttachments![sampleKey2].utis!, sampleUti))\n assert(bufferEquals(await documentApi!.getSecondaryAttachment(document.id!, sampleKey), data1))\n assert(bufferEquals(await documentApi!.getSecondaryAttachment(document.id!, sampleKey2), data2))\n const updated3 = await documentApi!.setSecondaryAttachment(document.id!, sampleKey, updated2.rev!, data3, sampleUti2)\n expect(updated3.secondaryAttachments).to.have.keys([sampleKey, sampleKey2])\n assert(arrayEquals(updated3.secondaryAttachments![sampleKey].utis!, sampleUti2))\n assert(arrayEquals(updated3.secondaryAttachments![sampleKey2].utis!, sampleUti))\n assert(bufferEquals(await documentApi!.getSecondaryAttachment(document.id!, sampleKey), data3))\n assert(bufferEquals(await documentApi!.getSecondaryAttachment(document.id!, sampleKey2), data2))\n expect(updated3.deletedAttachments).to.have.length(1)\n const updated4 = await documentApi!.deleteSecondaryAttachment(document.id!, sampleKey2, updated3.rev!)\n expect(updated4.secondaryAttachments).to.have.keys([sampleKey])\n expect(updated4.deletedAttachments).to.have.length(2)\n assert(bufferEquals(await documentApi!.getSecondaryAttachment(document.id!, sampleKey), data3))\n await assertRequestFails(documentApi!.getSecondaryAttachment(document.id!, sampleKey2), 404)\n })\n\n it('should refuse update methods which do not provide the latest rev', async () => {\n const document = await createDocument()\n expect(document.rev).to.not.be.undefined\n expect((await documentApi.modifyDocument({ ...document, name: 'new name' })).rev).to.not.equal(document.rev)\n await assertRequestFails(documentApi!.setMainDocumentAttachment(document.id!, document.rev!, randomBytes(32)), 409)\n await assertRequestFails(documentApi!.setSecondaryAttachment(document.id!, sampleKey, document.rev!, randomBytes(32)), 409)\n await assertRequestFails(documentApi!.deleteSecondaryAttachment(document.id!, sampleKey, document.rev!), 409)\n })\n\n it('should prevent using the document id as an attachment key', async () => {\n const document = await createDocument()\n await assertRequestFails(documentApi!.setSecondaryAttachment(document.id!, document.id!, document.rev!, randomBytes(32)), 400)\n await assertRequestFails(documentApi!.deleteSecondaryAttachment(document.id!, document.id!, document.rev!), 400)\n await assertRequestFails(documentApi!.getSecondaryAttachment(document.id!, document.id!, document.rev!), 400)\n })\n})\n"]}
@@ -0,0 +1 @@
1
+ import 'isomorphic-fetch';
@@ -0,0 +1,50 @@
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 crypto_1 = require("crypto");
13
+ const test_utils_1 = require("../../utils/test_utils");
14
+ require("isomorphic-fetch");
15
+ const UserTypeEnum_1 = require("../../../icc-api/model/UserTypeEnum");
16
+ var initMasterApi = test_utils_1.TestUtils.initMasterApi;
17
+ const chai_1 = require("chai");
18
+ const RoleSourceEnum_1 = require("../../../icc-api/model/RoleSourceEnum");
19
+ const types_1 = require("@icure/test-setup/types");
20
+ const DatabaseInitialisation_1 = require("../../../icc-api/model/DatabaseInitialisation");
21
+ (0, test_utils_1.setLocalStorage)(fetch);
22
+ let env;
23
+ (0, test_utils_1.describeNoLite)('Group', () => {
24
+ before(function () {
25
+ return __awaiter(this, void 0, void 0, function* () {
26
+ this.timeout(600000);
27
+ const initializer = yield (0, test_utils_1.getEnvironmentInitializer)();
28
+ env = yield initializer.execute((0, types_1.getEnvVariables)());
29
+ });
30
+ });
31
+ it('should be able to set and retrieve default roles in a group', () => __awaiter(void 0, void 0, void 0, function* () {
32
+ const { roleApi, groupApi } = yield initMasterApi(env);
33
+ const role = (yield roleApi.getRoles())[0].id;
34
+ const userType = UserTypeEnum_1.UserTypeEnum.Device;
35
+ const groupId = (0, crypto_1.randomUUID)();
36
+ const groupName = groupId.substring(0, 5);
37
+ yield groupApi.createGroup(groupId, groupName, (0, crypto_1.randomUUID)(), undefined, undefined, undefined, undefined, undefined, new DatabaseInitialisation_1.DatabaseInitialisation({
38
+ users: [],
39
+ healthcareParties: [],
40
+ }));
41
+ const updatedGroup = yield groupApi.setDefaultRoles(groupId, userType, [role]);
42
+ (0, chai_1.expect)(updatedGroup.defaultUserRoles).not.to.be.undefined;
43
+ (0, chai_1.expect)(updatedGroup.defaultUserRoles[userType][0]).to.be.equal(role);
44
+ const retrievedRoles = yield groupApi.getDefaultRoles(groupId);
45
+ (0, chai_1.expect)(retrievedRoles[userType].length).to.be.greaterThan(1);
46
+ (0, chai_1.expect)(retrievedRoles[userType][0].roles[0]).to.be.equal(role);
47
+ (0, chai_1.expect)(retrievedRoles[UserTypeEnum_1.UserTypeEnum.Hcp][0].source).to.be.equal(RoleSourceEnum_1.RoleSourceEnum.Inherited);
48
+ }));
49
+ });
50
+ //# sourceMappingURL=IccGroupApi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IccGroupApi.js","sourceRoot":"","sources":["../../../../test/icc-api/api/IccGroupApi.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,mCAAmC;AACnC,uDAA8G;AAC9G,4BAAyB;AACzB,sEAAkE;AAClE,IAAO,aAAa,GAAG,sBAAS,CAAC,aAAa,CAAA;AAC9C,+BAA6B;AAC7B,0EAAsE;AACtE,mDAAmE;AACnE,0FAAsF;AAEtF,IAAA,4BAAe,EAAC,KAAK,CAAC,CAAA;AAEtB,IAAI,GAAa,CAAA;AAEjB,IAAA,2BAAc,EAAC,OAAO,EAAE,GAAG,EAAE;IAC3B,MAAM,CAAC;;YACL,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;YACpB,MAAM,WAAW,GAAG,MAAM,IAAA,sCAAyB,GAAE,CAAA;YACrD,GAAG,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,IAAA,uBAAe,GAAE,CAAC,CAAA;QACpD,CAAC;KAAA,CAAC,CAAA;IAEF,EAAE,CAAC,6DAA6D,EAAE,GAAS,EAAE;QAC3E,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,MAAM,aAAa,CAAC,GAAG,CAAC,CAAA;QAEtD,MAAM,IAAI,GAAG,CAAC,MAAM,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAG,CAAA;QAC9C,MAAM,QAAQ,GAAG,2BAAY,CAAC,MAAM,CAAA;QAEpC,MAAM,OAAO,GAAG,IAAA,mBAAU,GAAE,CAAA;QAC5B,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QACzC,MAAM,QAAQ,CAAC,WAAW,CACxB,OAAO,EACP,SAAS,EACT,IAAA,mBAAU,GAAE,EACZ,SAAS,EACT,SAAS,EACT,SAAS,EACT,SAAS,EACT,SAAS,EACT,IAAI,+CAAsB,CAAC;YACzB,KAAK,EAAE,EAAE;YACT,iBAAiB,EAAE,EAAE;SACtB,CAAC,CACH,CAAA;QAED,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,eAAe,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,CAAA;QAC9E,IAAA,aAAM,EAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAA;QACzD,IAAA,aAAM,EAAC,YAAY,CAAC,gBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QAEtE,MAAM,cAAc,GAAG,MAAM,QAAQ,CAAC,eAAe,CAAC,OAAO,CAAC,CAAA;QAC9D,IAAA,aAAM,EAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,CAAA;QAC5D,IAAA,aAAM,EAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,KAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QAChE,IAAA,aAAM,EAAC,cAAc,CAAC,2BAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,+BAAc,CAAC,SAAS,CAAC,CAAA;IAC1F,CAAC,CAAA,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA","sourcesContent":["import { randomUUID } from 'crypto'\nimport { describeNoLite, getEnvironmentInitializer, setLocalStorage, TestUtils } from '../../utils/test_utils'\nimport 'isomorphic-fetch'\nimport { UserTypeEnum } from '../../../icc-api/model/UserTypeEnum'\nimport initMasterApi = TestUtils.initMasterApi\nimport { expect } from 'chai'\nimport { RoleSourceEnum } from '../../../icc-api/model/RoleSourceEnum'\nimport { getEnvVariables, TestVars } from '@icure/test-setup/types'\nimport { DatabaseInitialisation } from '../../../icc-api/model/DatabaseInitialisation'\n\nsetLocalStorage(fetch)\n\nlet env: TestVars\n\ndescribeNoLite('Group', () => {\n before(async function () {\n this.timeout(600000)\n const initializer = await getEnvironmentInitializer()\n env = await initializer.execute(getEnvVariables())\n })\n\n it('should be able to set and retrieve default roles in a group', async () => {\n const { roleApi, groupApi } = await initMasterApi(env)\n\n const role = (await roleApi.getRoles())[0].id!\n const userType = UserTypeEnum.Device\n\n const groupId = randomUUID()\n const groupName = groupId.substring(0, 5)\n await groupApi.createGroup(\n groupId,\n groupName,\n randomUUID(),\n undefined,\n undefined,\n undefined,\n undefined,\n undefined,\n new DatabaseInitialisation({\n users: [],\n healthcareParties: [],\n })\n )\n\n const updatedGroup = await groupApi.setDefaultRoles(groupId, userType, [role])\n expect(updatedGroup.defaultUserRoles).not.to.be.undefined\n expect(updatedGroup.defaultUserRoles!![userType][0]).to.be.equal(role)\n\n const retrievedRoles = await groupApi.getDefaultRoles(groupId)\n expect(retrievedRoles[userType].length).to.be.greaterThan(1)\n expect(retrievedRoles[userType][0].roles!![0]).to.be.equal(role)\n expect(retrievedRoles[UserTypeEnum.Hcp][0].source).to.be.equal(RoleSourceEnum.Inherited)\n })\n})\n"]}
@@ -0,0 +1 @@
1
+ import 'isomorphic-fetch';