@icure/api 8.0.7 → 8.0.9

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 (259) 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/ExchangeDataManager.js +3 -2
  5. package/icc-x-api/crypto/ExchangeDataManager.js.map +1 -1
  6. package/icc-x-api/crypto/KeyRecovery.js +5 -4
  7. package/icc-x-api/crypto/KeyRecovery.js.map +1 -1
  8. package/icc-x-api/crypto/RSA.d.ts +4 -1
  9. package/icc-x-api/crypto/RSA.js +6 -1
  10. package/icc-x-api/crypto/RSA.js.map +1 -1
  11. package/icc-x-api/crypto/SecureDelegationsManager.js +2 -1
  12. package/icc-x-api/crypto/SecureDelegationsManager.js.map +1 -1
  13. package/icc-x-api/crypto/TransferKeysManager.js +4 -3
  14. package/icc-x-api/crypto/TransferKeysManager.js.map +1 -1
  15. package/icc-x-api/crypto/UserEncryptionKeysManager.js +2 -1
  16. package/icc-x-api/crypto/UserEncryptionKeysManager.js.map +1 -1
  17. package/icc-x-api/crypto/utils.d.ts +1 -4
  18. package/icc-x-api/crypto/utils.js +6 -8
  19. package/icc-x-api/crypto/utils.js.map +1 -1
  20. package/icc-x-api/icc-accesslog-x-api.js +16 -14
  21. package/icc-x-api/icc-accesslog-x-api.js.map +1 -1
  22. package/icc-x-api/icc-calendar-item-x-api.d.ts +2 -2
  23. package/icc-x-api/icc-calendar-item-x-api.js +17 -17
  24. package/icc-x-api/icc-calendar-item-x-api.js.map +1 -1
  25. package/icc-x-api/icc-classification-x-api.js +12 -11
  26. package/icc-x-api/icc-classification-x-api.js.map +1 -1
  27. package/icc-x-api/icc-contact-x-api.d.ts +2 -2
  28. package/icc-x-api/icc-contact-x-api.js +23 -20
  29. package/icc-x-api/icc-contact-x-api.js.map +1 -1
  30. package/icc-x-api/icc-document-x-api.js +17 -16
  31. package/icc-x-api/icc-document-x-api.js.map +1 -1
  32. package/icc-x-api/icc-form-x-api.js +13 -12
  33. package/icc-x-api/icc-form-x-api.js.map +1 -1
  34. package/icc-x-api/icc-helement-x-api.js +18 -16
  35. package/icc-x-api/icc-helement-x-api.js.map +1 -1
  36. package/icc-x-api/icc-invoice-x-api.js +12 -11
  37. package/icc-x-api/icc-invoice-x-api.js.map +1 -1
  38. package/icc-x-api/icc-maintenance-task-x-api.js +11 -11
  39. package/icc-x-api/icc-maintenance-task-x-api.js.map +1 -1
  40. package/icc-x-api/icc-message-x-api.js +14 -14
  41. package/icc-x-api/icc-message-x-api.js.map +1 -1
  42. package/icc-x-api/icc-patient-x-api.js +28 -27
  43. package/icc-x-api/icc-patient-x-api.js.map +1 -1
  44. package/icc-x-api/icc-receipt-x-api.js +11 -10
  45. package/icc-x-api/icc-receipt-x-api.js.map +1 -1
  46. package/icc-x-api/icc-recovery-x-api.js +3 -2
  47. package/icc-x-api/icc-recovery-x-api.js.map +1 -1
  48. package/icc-x-api/icc-time-table-x-api.js +9 -8
  49. package/icc-x-api/icc-time-table-x-api.js.map +1 -1
  50. package/icc-x-api/icc-topic-x-api.js +13 -13
  51. package/icc-x-api/icc-topic-x-api.js.map +1 -1
  52. package/icc-x-api/utils/EntityWithDelegationTypeName.d.ts +17 -1
  53. package/icc-x-api/utils/EntityWithDelegationTypeName.js +33 -15
  54. package/icc-x-api/utils/EntityWithDelegationTypeName.js.map +1 -1
  55. package/icc-x-api/utils/index.d.ts +1 -0
  56. package/icc-x-api/utils/index.js +1 -0
  57. package/icc-x-api/utils/index.js.map +1 -1
  58. package/package.json +1 -1
  59. package/test/icc-api/api/IccAnonymousAccessApi.d.ts +1 -0
  60. package/test/icc-api/api/IccAnonymousAccessApi.js +58 -0
  61. package/test/icc-api/api/IccAnonymousAccessApi.js.map +1 -0
  62. package/test/icc-api/api/IccDocumentApi.d.ts +1 -0
  63. package/test/icc-api/api/IccDocumentApi.js +208 -0
  64. package/test/icc-api/api/IccDocumentApi.js.map +1 -0
  65. package/test/icc-api/api/IccGroupApi.d.ts +1 -0
  66. package/test/icc-api/api/IccGroupApi.js +50 -0
  67. package/test/icc-api/api/IccGroupApi.js.map +1 -0
  68. package/test/icc-api/api/IccRecoveryDataApi.d.ts +1 -0
  69. package/test/icc-api/api/IccRecoveryDataApi.js +95 -0
  70. package/test/icc-api/api/IccRecoveryDataApi.js.map +1 -0
  71. package/test/icc-api/api/IccRoleApi.d.ts +1 -0
  72. package/test/icc-api/api/IccRoleApi.js +34 -0
  73. package/test/icc-api/api/IccRoleApi.js.map +1 -0
  74. package/test/icc-api/api/IccUserApi.d.ts +1 -0
  75. package/test/icc-api/api/IccUserApi.js +96 -0
  76. package/test/icc-api/api/IccUserApi.js.map +1 -0
  77. package/test/icc-api/e2e/IccCalendarItemApi.d.ts +1 -0
  78. package/test/icc-api/e2e/IccCalendarItemApi.js +46 -0
  79. package/test/icc-api/e2e/IccCalendarItemApi.js.map +1 -0
  80. package/test/icc-api/model/modelHelpersTest.d.ts +1 -0
  81. package/test/icc-api/model/modelHelpersTest.js +45 -0
  82. package/test/icc-api/model/modelHelpersTest.js.map +1 -0
  83. package/test/icc-x-api/auth/group-switch-test.d.ts +1 -0
  84. package/test/icc-x-api/auth/group-switch-test.js +81 -0
  85. package/test/icc-x-api/auth/group-switch-test.js.map +1 -0
  86. package/test/icc-x-api/auth/jwt-concurrency-test.d.ts +2 -0
  87. package/test/icc-x-api/auth/jwt-concurrency-test.js +113 -0
  88. package/test/icc-x-api/auth/jwt-concurrency-test.js.map +1 -0
  89. package/test/icc-x-api/auth/smart-auth-provider-test.d.ts +1 -0
  90. package/test/icc-x-api/auth/smart-auth-provider-test.js +224 -0
  91. package/test/icc-x-api/auth/smart-auth-provider-test.js.map +1 -0
  92. package/test/icc-x-api/autofix-anonymity-test.d.ts +1 -0
  93. package/test/icc-x-api/autofix-anonymity-test.js +108 -0
  94. package/test/icc-x-api/autofix-anonymity-test.js.map +1 -0
  95. package/test/icc-x-api/confidential-entities-test.d.ts +1 -0
  96. package/test/icc-x-api/confidential-entities-test.js +110 -0
  97. package/test/icc-x-api/confidential-entities-test.js.map +1 -0
  98. package/test/icc-x-api/crud/comprehensive-crud-test.d.ts +1 -0
  99. package/test/icc-x-api/crud/comprehensive-crud-test.js +276 -0
  100. package/test/icc-x-api/crud/comprehensive-crud-test.js.map +1 -0
  101. package/test/icc-x-api/crud/entities-crud-test-interface.d.ts +16 -0
  102. package/test/icc-x-api/crud/entities-crud-test-interface.js +422 -0
  103. package/test/icc-x-api/crud/entities-crud-test-interface.js.map +1 -0
  104. package/test/icc-x-api/crypto/anonymous-delegations-test.d.ts +1 -0
  105. package/test/icc-x-api/crypto/anonymous-delegations-test.js +588 -0
  106. package/test/icc-x-api/crypto/anonymous-delegations-test.js.map +1 -0
  107. package/test/icc-x-api/crypto/concurrency.d.ts +1 -0
  108. package/test/icc-x-api/crypto/concurrency.js +35 -0
  109. package/test/icc-x-api/crypto/concurrency.js.map +1 -0
  110. package/test/icc-x-api/crypto/crypto-utils.d.ts +1 -0
  111. package/test/icc-x-api/crypto/crypto-utils.js +80 -0
  112. package/test/icc-x-api/crypto/crypto-utils.js.map +1 -0
  113. package/test/icc-x-api/crypto/cryptoTest.d.ts +2 -0
  114. package/test/icc-x-api/crypto/cryptoTest.js +302 -0
  115. package/test/icc-x-api/crypto/cryptoTest.js.map +1 -0
  116. package/test/icc-x-api/crypto/delegate-ci-to-patient-with-missing-keys-test.d.ts +1 -0
  117. package/test/icc-x-api/crypto/delegate-ci-to-patient-with-missing-keys-test.js +166 -0
  118. package/test/icc-x-api/crypto/delegate-ci-to-patient-with-missing-keys-test.js.map +1 -0
  119. package/test/icc-x-api/crypto/exchange-data-manager-test.d.ts +1 -0
  120. package/test/icc-x-api/crypto/exchange-data-manager-test.js +690 -0
  121. package/test/icc-x-api/crypto/exchange-data-manager-test.js.map +1 -0
  122. package/test/icc-x-api/crypto/full-crypto-test.d.ts +1 -0
  123. package/test/icc-x-api/crypto/full-crypto-test.js +457 -0
  124. package/test/icc-x-api/crypto/full-crypto-test.js.map +1 -0
  125. package/test/icc-x-api/crypto/secure-delegations-manager-test.d.ts +1 -0
  126. package/test/icc-x-api/crypto/secure-delegations-manager-test.js +266 -0
  127. package/test/icc-x-api/crypto/secure-delegations-manager-test.js.map +1 -0
  128. package/test/icc-x-api/crypto/secure-delegations-metadata-decryptor-test.d.ts +1 -0
  129. package/test/icc-x-api/crypto/secure-delegations-metadata-decryptor-test.js +393 -0
  130. package/test/icc-x-api/crypto/secure-delegations-metadata-decryptor-test.js.map +1 -0
  131. package/test/icc-x-api/crypto/security-metadata-decryptor-chain-test.d.ts +1 -0
  132. package/test/icc-x-api/crypto/security-metadata-decryptor-chain-test.js +213 -0
  133. package/test/icc-x-api/crypto/security-metadata-decryptor-chain-test.js.map +1 -0
  134. package/test/icc-x-api/crypto/shamir.d.ts +2 -0
  135. package/test/icc-x-api/crypto/shamir.js +166 -0
  136. package/test/icc-x-api/crypto/shamir.js.map +1 -0
  137. package/test/icc-x-api/crypto/share-to-newly-created-patient-from-hcp.d.ts +1 -0
  138. package/test/icc-x-api/crypto/share-to-newly-created-patient-from-hcp.js +71 -0
  139. package/test/icc-x-api/crypto/share-to-newly-created-patient-from-hcp.js.map +1 -0
  140. package/test/icc-x-api/crypto/signature-keys-manager-test.d.ts +1 -0
  141. package/test/icc-x-api/crypto/signature-keys-manager-test.js +44 -0
  142. package/test/icc-x-api/crypto/signature-keys-manager-test.js.map +1 -0
  143. package/test/icc-x-api/crypto/user-encryption-keys-manager-test.d.ts +1 -0
  144. package/test/icc-x-api/crypto/user-encryption-keys-manager-test.js +246 -0
  145. package/test/icc-x-api/crypto/user-encryption-keys-manager-test.js.map +1 -0
  146. package/test/icc-x-api/entity-with-attachments-api-test.d.ts +1 -0
  147. package/test/icc-x-api/entity-with-attachments-api-test.js +142 -0
  148. package/test/icc-x-api/entity-with-attachments-api-test.js.map +1 -0
  149. package/test/icc-x-api/filters/filters.d.ts +1 -0
  150. package/test/icc-x-api/filters/filters.js +49 -0
  151. package/test/icc-x-api/filters/filters.js.map +1 -0
  152. package/test/icc-x-api/icc-accesslog-x-api.d.ts +1 -0
  153. package/test/icc-x-api/icc-accesslog-x-api.js +106 -0
  154. package/test/icc-x-api/icc-accesslog-x-api.js.map +1 -0
  155. package/test/icc-x-api/icc-auth-api.d.ts +1 -0
  156. package/test/icc-x-api/icc-auth-api.js +47 -0
  157. package/test/icc-x-api/icc-auth-api.js.map +1 -0
  158. package/test/icc-x-api/icc-calendar-item-x-api.d.ts +1 -0
  159. package/test/icc-x-api/icc-calendar-item-x-api.js +150 -0
  160. package/test/icc-x-api/icc-calendar-item-x-api.js.map +1 -0
  161. package/test/icc-x-api/icc-contact-x-api.d.ts +1 -0
  162. package/test/icc-x-api/icc-contact-x-api.js +279 -0
  163. package/test/icc-x-api/icc-contact-x-api.js.map +1 -0
  164. package/test/icc-x-api/icc-form-x-api.d.ts +1 -0
  165. package/test/icc-x-api/icc-form-x-api.js +98 -0
  166. package/test/icc-x-api/icc-form-x-api.js.map +1 -0
  167. package/test/icc-x-api/icc-helement-x-api-test.d.ts +1 -0
  168. package/test/icc-x-api/icc-helement-x-api-test.js +153 -0
  169. package/test/icc-x-api/icc-helement-x-api-test.js.map +1 -0
  170. package/test/icc-x-api/icc-invoice-x-api.d.ts +1 -0
  171. package/test/icc-x-api/icc-invoice-x-api.js +99 -0
  172. package/test/icc-x-api/icc-invoice-x-api.js.map +1 -0
  173. package/test/icc-x-api/icc-maintenance-task-x-api-test.d.ts +1 -0
  174. package/test/icc-x-api/icc-maintenance-task-x-api-test.js +221 -0
  175. package/test/icc-x-api/icc-maintenance-task-x-api-test.js.map +1 -0
  176. package/test/icc-x-api/icc-message-x-api.d.ts +1 -0
  177. package/test/icc-x-api/icc-message-x-api.js +328 -0
  178. package/test/icc-x-api/icc-message-x-api.js.map +1 -0
  179. package/test/icc-x-api/icc-patient-x-api-test.d.ts +1 -0
  180. package/test/icc-x-api/icc-patient-x-api-test.js +158 -0
  181. package/test/icc-x-api/icc-patient-x-api-test.js.map +1 -0
  182. package/test/icc-x-api/icc-recovery-x-api.d.ts +1 -0
  183. package/test/icc-x-api/icc-recovery-x-api.js +170 -0
  184. package/test/icc-x-api/icc-recovery-x-api.js.map +1 -0
  185. package/test/icc-x-api/icc-time-table-x-api.d.ts +1 -0
  186. package/test/icc-x-api/icc-time-table-x-api.js +100 -0
  187. package/test/icc-x-api/icc-time-table-x-api.js.map +1 -0
  188. package/test/icc-x-api/icc-topic-x-api.d.ts +1 -0
  189. package/test/icc-x-api/icc-topic-x-api.js +269 -0
  190. package/test/icc-x-api/icc-topic-x-api.js.map +1 -0
  191. package/test/icc-x-api/icc-user-x-api-test.d.ts +1 -0
  192. package/test/icc-x-api/icc-user-x-api-test.js +99 -0
  193. package/test/icc-x-api/icc-user-x-api-test.js.map +1 -0
  194. package/test/icc-x-api/patient-user.d.ts +2 -0
  195. package/test/icc-x-api/patient-user.js +104 -0
  196. package/test/icc-x-api/patient-user.js.map +1 -0
  197. package/test/icc-x-api/storage/storage.d.ts +1 -0
  198. package/test/icc-x-api/storage/storage.js +48 -0
  199. package/test/icc-x-api/storage/storage.js.map +1 -0
  200. package/test/icc-x-api/test-api-no-parent.d.ts +1 -0
  201. package/test/icc-x-api/test-api-no-parent.js +79 -0
  202. package/test/icc-x-api/test-api-no-parent.js.map +1 -0
  203. package/test/icc-x-api/test-legacy-data-support.d.ts +1 -0
  204. package/test/icc-x-api/test-legacy-data-support.js +376 -0
  205. package/test/icc-x-api/test-legacy-data-support.js.map +1 -0
  206. package/test/icc-x-api/utils/graph-test.d.ts +1 -0
  207. package/test/icc-x-api/utils/graph-test.js +54 -0
  208. package/test/icc-x-api/utils/graph-test.js.map +1 -0
  209. package/test/icc-x-api/utils/lru-temporised-async-cache-test.d.ts +1 -0
  210. package/test/icc-x-api/utils/lru-temporised-async-cache-test.js +364 -0
  211. package/test/icc-x-api/utils/lru-temporised-async-cache-test.js.map +1 -0
  212. package/test/support/CSM-185.d.ts +1 -0
  213. package/test/support/CSM-185.js +124 -0
  214. package/test/support/CSM-185.js.map +1 -0
  215. package/test/support/CSM-243.d.ts +1 -0
  216. package/test/support/CSM-243.js +120 -0
  217. package/test/support/CSM-243.js.map +1 -0
  218. package/test/support/CSM-87.d.ts +0 -0
  219. package/test/support/CSM-87.js +21 -0
  220. package/test/support/CSM-87.js.map +1 -0
  221. package/test/support/CSM-93.d.ts +1 -0
  222. package/test/support/CSM-93.js +112 -0
  223. package/test/support/CSM-93.js.map +1 -0
  224. package/test/utils/FakeDataOwnerApi.d.ts +32 -0
  225. package/test/utils/FakeDataOwnerApi.js +136 -0
  226. package/test/utils/FakeDataOwnerApi.js.map +1 -0
  227. package/test/utils/FakeEncryptionKeysManager.d.ts +35 -0
  228. package/test/utils/FakeEncryptionKeysManager.js +87 -0
  229. package/test/utils/FakeEncryptionKeysManager.js.map +1 -0
  230. package/test/utils/FakeExchangeDataApi.d.ts +30 -0
  231. package/test/utils/FakeExchangeDataApi.js +74 -0
  232. package/test/utils/FakeExchangeDataApi.js.map +1 -0
  233. package/test/utils/FakeExchangeDataManager.d.ts +40 -0
  234. package/test/utils/FakeExchangeDataManager.js +89 -0
  235. package/test/utils/FakeExchangeDataManager.js.map +1 -0
  236. package/test/utils/FakeExchangeDataMapManager.d.ts +12 -0
  237. package/test/utils/FakeExchangeDataMapManager.js +38 -0
  238. package/test/utils/FakeExchangeDataMapManager.js.map +1 -0
  239. package/test/utils/FakeGenericApi.d.ts +16 -0
  240. package/test/utils/FakeGenericApi.js +65 -0
  241. package/test/utils/FakeGenericApi.js.map +1 -0
  242. package/test/utils/FakeSignatureKeysManager.d.ts +16 -0
  243. package/test/utils/FakeSignatureKeysManager.js +54 -0
  244. package/test/utils/FakeSignatureKeysManager.js.map +1 -0
  245. package/test/utils/TestApi.d.ts +3 -0
  246. package/test/utils/TestApi.js +30 -0
  247. package/test/utils/TestApi.js.map +1 -0
  248. package/test/utils/TestCollectionUtils.d.ts +1 -0
  249. package/test/utils/TestCollectionUtils.js +109 -0
  250. package/test/utils/TestCollectionUtils.js.map +1 -0
  251. package/test/utils/TestCryptoStrategies.d.ts +42 -0
  252. package/test/utils/TestCryptoStrategies.js +80 -0
  253. package/test/utils/TestCryptoStrategies.js.map +1 -0
  254. package/test/utils/TestStorage.d.ts +23 -0
  255. package/test/utils/TestStorage.js +61 -0
  256. package/test/utils/TestStorage.js.map +1 -0
  257. package/test/utils/test_utils.d.ts +76 -0
  258. package/test/utils/test_utils.js +419 -0
  259. package/test/utils/test_utils.js.map +1 -0
@@ -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"]}
@@ -6,3 +6,4 @@ export * from './binary-utils';
6
6
  export * from './hcp-util';
7
7
  export * from './functional-util';
8
8
  export * from './websocket';
9
+ export * from './EntityWithDelegationTypeName';
@@ -22,4 +22,5 @@ __exportStar(require("./binary-utils"), exports);
22
22
  __exportStar(require("./hcp-util"), exports);
23
23
  __exportStar(require("./functional-util"), exports);
24
24
  __exportStar(require("./websocket"), exports);
25
+ __exportStar(require("./EntityWithDelegationTypeName"), exports);
25
26
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../icc-x-api/utils/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,8CAA2B;AAC3B,8CAA2B;AAC3B,iDAA8B;AAC9B,oDAAiC;AACjC,iDAA8B;AAC9B,6CAA0B;AAC1B,oDAAiC;AACjC,8CAA2B","sourcesContent":["export * from './code-util'\nexport * from './net-utils'\nexport * from './crypto-utils'\nexport * from './formatting-util'\nexport * from './binary-utils'\nexport * from './hcp-util'\nexport * from './functional-util'\nexport * from './websocket'\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../icc-x-api/utils/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,8CAA2B;AAC3B,8CAA2B;AAC3B,iDAA8B;AAC9B,oDAAiC;AACjC,iDAA8B;AAC9B,6CAA0B;AAC1B,oDAAiC;AACjC,8CAA2B;AAC3B,iEAA8C","sourcesContent":["export * from './code-util'\nexport * from './net-utils'\nexport * from './crypto-utils'\nexport * from './formatting-util'\nexport * from './binary-utils'\nexport * from './hcp-util'\nexport * from './functional-util'\nexport * from './websocket'\nexport * from './EntityWithDelegationTypeName'\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@icure/api",
3
- "version": "8.0.7",
3
+ "version": "8.0.9",
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":";;;;;;;;;;;AAAA,mCAAmC;AACnC,uDAA0H;AAC1H,4BAAyB;AACzB,IAAO,aAAa,GAAG,sBAAS,CAAC,aAAa,CAAA;AAC9C,+BAA6B;AAC7B,mDAAmE;AACnE,4EAAwE;AAExE,IAAA,4BAAe,EAAC,KAAK,CAAC,CAAA;AAEtB,IAAI,GAAa,CAAA;AAEjB,IAAA,2BAAc,EAAC,kBAAkB,EAAE,GAAG,EAAE;IACtC,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,+EAA+E,EAAE,GAAS,EAAE;;QAC7F,MAAM,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,GAAG,MAAM,aAAa,CAAC,GAAG,CAAC,CAAA;QAE3E,MAAM,sBAAsB,GAAG,MAAM,kBAAkB,CAAC,qBAAqB,CAC3E,IAAI,iCAAe,CAAC;YAClB,EAAE,EAAE,IAAA,mBAAU,GAAE;YAChB,IAAI,EAAE,0BAA0B,GAAG,IAAA,mBAAU,GAAE;YAC/C,WAAW,EAAE,sCAAsC,GAAG,IAAA,mBAAU,GAAE;SACnE,CAAC,CACH,CAAA;QAED,MAAM,oCAAoC,GAAG,MAAM,kBAAkB,CAAC,qBAAqB,CACzF,IAAI,iCAAe,CAAC;YAClB,EAAE,EAAE,IAAA,mBAAU,GAAE;YAChB,IAAI,EAAE,yBAAyB,GAAG,IAAA,mBAAU,GAAE;YAC9C,WAAW,EAAE,qCAAqC,GAAG,IAAA,mBAAU,GAAE;YACjE,kBAAkB,EAAE;gBAClB,OAAO,EAAE,gBAAgB;gBACzB,KAAK,EAAE,iBAAiB;aACzB;SACF,CAAC,CACH,CAAA;QAED,MAAM,OAAO,GAAG,IAAA,uBAAe,GAAE,CAAC,WAAW,CAAA;QAE7C,MAAM,yBAAyB,GAAG,MAAM,kBAAkB,CAAC,kCAAkC,CAAC,OAAO,CAAC,CAAA;QAEtG,IAAA,aAAM,EAAC,MAAA,yBAAyB,CAAC,IAAI,0CAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,CAAA;QAEnE,MAAM,wBAAwB,GAAG,MAAA,yBAAyB,CAAC,IAAI,0CAAE,GAAG,CAAC,CAAC,eAAe,EAAE,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC,CAAA;QAC7G,IAAA,aAAM,EAAC,wBAAwB,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,oCAAoC,CAAC,EAAE,CAAC,CAAA;QACpF,IAAA,aAAM,EAAC,wBAAwB,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,sBAAsB,CAAC,EAAE,CAAC,CAAA;QAE1E,MAAM,qBAAqB,GAAoB,yBAAyB,CAAC,IAAK,CAAC,IAAI,CACjF,CAAC,eAAe,EAAE,EAAE,CAAC,eAAe,CAAC,EAAE,KAAK,oCAAoC,CAAC,EAAE,CACnF,CAAA;QACF,IAAA,aAAM,EAAC,qBAAqB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,SAAS,CAAA;QACjD,IAAA,aAAM,EAAC,qBAAqB,aAArB,qBAAqB,uBAArB,qBAAqB,CAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAA;QACnD,IAAA,aAAM,EAAC,qBAAqB,aAArB,qBAAqB,uBAArB,qBAAqB,CAAE,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAA;IAC5D,CAAC,CAAA,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA","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';