@icure/api 8.2.3 → 8.2.5

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 (337) hide show
  1. package/icc-api/api/IccAuthApi.js +1 -1
  2. package/icc-api/api/IccAuthApi.js.map +1 -1
  3. package/icc-api/api/IccDocumentApi.js.map +1 -1
  4. package/icc-api/api/IccFormApi.js.map +1 -1
  5. package/icc-api/api/IccReceiptApi.js.map +1 -1
  6. package/icc-api/api/IccRestApiPath.js +1 -2
  7. package/icc-api/api/IccRestApiPath.js.map +1 -1
  8. package/icc-api/api/XHR.js +10 -8
  9. package/icc-api/api/XHR.js.map +1 -1
  10. package/icc-api/model/Address.js +1 -1
  11. package/icc-api/model/Address.js.map +1 -1
  12. package/icc-api/model/Amp.js +1 -1
  13. package/icc-api/model/Amp.js.map +1 -1
  14. package/icc-api/model/AmpComponent.js +1 -1
  15. package/icc-api/model/AmpComponent.js.map +1 -1
  16. package/icc-api/model/Ampp.js +1 -1
  17. package/icc-api/model/Ampp.js.map +1 -1
  18. package/icc-api/model/AmppComponent.js +1 -1
  19. package/icc-api/model/AmppComponent.js.map +1 -1
  20. package/icc-api/model/CareTeamMember.js +1 -1
  21. package/icc-api/model/CareTeamMember.js.map +1 -1
  22. package/icc-api/model/CareTeamMembership.js +1 -1
  23. package/icc-api/model/CareTeamMembership.js.map +1 -1
  24. package/icc-api/model/Code.js +1 -1
  25. package/icc-api/model/Code.js.map +1 -1
  26. package/icc-api/model/Contact.js.map +1 -1
  27. package/icc-api/model/Content.js.map +1 -1
  28. package/icc-api/model/DataOwnerTypeEnum.js +1 -1
  29. package/icc-api/model/DataOwnerTypeEnum.js.map +1 -1
  30. package/icc-api/model/DataOwnerWithType.js +1 -1
  31. package/icc-api/model/DataOwnerWithType.js.map +1 -1
  32. package/icc-api/model/DatabaseSynchronization.js +1 -1
  33. package/icc-api/model/DatabaseSynchronization.js.map +1 -1
  34. package/icc-api/model/Dmpp.js +1 -1
  35. package/icc-api/model/Dmpp.js.map +1 -1
  36. package/icc-api/model/Document.js +1 -1
  37. package/icc-api/model/Document.js.map +1 -1
  38. package/icc-api/model/DocumentTemplate.d.ts +1 -1
  39. package/icc-api/model/DocumentTemplate.js +1 -1
  40. package/icc-api/model/DocumentTemplate.js.map +1 -1
  41. package/icc-api/model/Editor.js +1 -1
  42. package/icc-api/model/Editor.js.map +1 -1
  43. package/icc-api/model/EfactInvoice.js +1 -1
  44. package/icc-api/model/EfactInvoice.js.map +1 -1
  45. package/icc-api/model/EmailOrSmsMessage.js +1 -1
  46. package/icc-api/model/EmailOrSmsMessage.js.map +1 -1
  47. package/icc-api/model/FlatRateTarification.js +1 -1
  48. package/icc-api/model/FlatRateTarification.js.map +1 -1
  49. package/icc-api/model/Formula.js +1 -1
  50. package/icc-api/model/Formula.js.map +1 -1
  51. package/icc-api/model/FrontEndMigration.js +1 -1
  52. package/icc-api/model/FrontEndMigration.js.map +1 -1
  53. package/icc-api/model/HealthElement.js +1 -1
  54. package/icc-api/model/HealthElement.js.map +1 -1
  55. package/icc-api/model/HealthcareParty.js +1 -1
  56. package/icc-api/model/HealthcareParty.js.map +1 -1
  57. package/icc-api/model/HealthcarePartyHistoryStatus.js +1 -1
  58. package/icc-api/model/HealthcarePartyHistoryStatus.js.map +1 -1
  59. package/icc-api/model/Ingredient.js +1 -1
  60. package/icc-api/model/Ingredient.js.map +1 -1
  61. package/icc-api/model/Invoice.js +1 -1
  62. package/icc-api/model/Invoice.js.map +1 -1
  63. package/icc-api/model/InvoiceItem.js +1 -1
  64. package/icc-api/model/InvoiceItem.js.map +1 -1
  65. package/icc-api/model/InvoicingCode.js +1 -1
  66. package/icc-api/model/InvoicingCode.js.map +1 -1
  67. package/icc-api/model/MaintenanceTask.js +1 -1
  68. package/icc-api/model/MaintenanceTask.js.map +1 -1
  69. package/icc-api/model/Measure.js.map +1 -1
  70. package/icc-api/model/MedicalHouseContract.js +1 -1
  71. package/icc-api/model/MedicalHouseContract.js.map +1 -1
  72. package/icc-api/model/ModelHelper.js +9 -10
  73. package/icc-api/model/ModelHelper.js.map +1 -1
  74. package/icc-api/model/Partnership.js +1 -1
  75. package/icc-api/model/Partnership.js.map +1 -1
  76. package/icc-api/model/Patient.js +1 -1
  77. package/icc-api/model/Patient.js.map +1 -1
  78. package/icc-api/model/PatientByHcPartyGenderEducationProfession.js +1 -1
  79. package/icc-api/model/PatientByHcPartyGenderEducationProfession.js.map +1 -1
  80. package/icc-api/model/PatientHealthCareParty.js +1 -1
  81. package/icc-api/model/PatientHealthCareParty.js.map +1 -1
  82. package/icc-api/model/Payment.js +1 -1
  83. package/icc-api/model/Payment.js.map +1 -1
  84. package/icc-api/model/PermissionCriterion.js +1 -1
  85. package/icc-api/model/PermissionCriterion.js.map +1 -1
  86. package/icc-api/model/PermissionItem.js +1 -1
  87. package/icc-api/model/PermissionItem.js.map +1 -1
  88. package/icc-api/model/PersonName.js +1 -1
  89. package/icc-api/model/PersonName.js.map +1 -1
  90. package/icc-api/model/PropertyTypeStub.js +1 -1
  91. package/icc-api/model/PropertyTypeStub.js.map +1 -1
  92. package/icc-api/model/Reimbursement.js +1 -1
  93. package/icc-api/model/Reimbursement.js.map +1 -1
  94. package/icc-api/model/RoleSourceEnum.js +1 -1
  95. package/icc-api/model/RoleSourceEnum.js.map +1 -1
  96. package/icc-api/model/SecureDelegation.js +1 -1
  97. package/icc-api/model/SecureDelegation.js.map +1 -1
  98. package/icc-api/model/Service.js.map +1 -1
  99. package/icc-api/model/StandardSubstance.js +1 -1
  100. package/icc-api/model/StandardSubstance.js.map +1 -1
  101. package/icc-api/model/SumehrValidity.js +1 -1
  102. package/icc-api/model/SumehrValidity.js.map +1 -1
  103. package/icc-api/model/Tarification.js +1 -1
  104. package/icc-api/model/Tarification.js.map +1 -1
  105. package/icc-api/model/Telecom.js +1 -1
  106. package/icc-api/model/Telecom.js.map +1 -1
  107. package/icc-api/model/Topic.js +1 -1
  108. package/icc-api/model/Topic.js.map +1 -1
  109. package/icc-api/model/TypedValueObject.js +1 -1
  110. package/icc-api/model/TypedValueObject.js.map +1 -1
  111. package/icc-api/model/User.js +1 -1
  112. package/icc-api/model/User.js.map +1 -1
  113. package/icc-api/model/UserTypeEnum.js +1 -1
  114. package/icc-api/model/UserTypeEnum.js.map +1 -1
  115. package/icc-api/model/VirtualIngredient.js +1 -1
  116. package/icc-api/model/VirtualIngredient.js.map +1 -1
  117. package/icc-api/model/internal/RecoveryData.js +1 -1
  118. package/icc-api/model/internal/RecoveryData.js.map +1 -1
  119. package/icc-api/model/requests/EntityBulkShareResult.js.map +1 -1
  120. package/icc-api/model/requests/EntityShareOrMetadataUpdateRequest.js.map +1 -1
  121. package/icc-api/model/requests/EntityShareRequest.js +1 -1
  122. package/icc-api/model/requests/EntityShareRequest.js.map +1 -1
  123. package/icc-api/model/requests/EntitySharedMetadataUpdateRequest.js +1 -1
  124. package/icc-api/model/requests/EntitySharedMetadataUpdateRequest.js.map +1 -1
  125. package/icc-x-api/auth/AuthenticationProvider.js.map +1 -1
  126. package/icc-x-api/auth/BasicAuthService.js.map +1 -1
  127. package/icc-x-api/auth/EnsembleAuthService.js.map +1 -1
  128. package/icc-x-api/auth/JwtAuthService.js.map +1 -1
  129. package/icc-x-api/auth/JwtBridgedAuthService.d.ts +1 -1
  130. package/icc-x-api/auth/JwtBridgedAuthService.js +1 -1
  131. package/icc-x-api/auth/JwtBridgedAuthService.js.map +1 -1
  132. package/icc-x-api/auth/JwtUtils.js +3 -4
  133. package/icc-x-api/auth/JwtUtils.js.map +1 -1
  134. package/icc-x-api/auth/NoAuthService.js.map +1 -1
  135. package/icc-x-api/auth/SmartAuthProvider.d.ts +1 -1
  136. package/icc-x-api/auth/SmartAuthProvider.js +1 -1
  137. package/icc-x-api/auth/SmartAuthProvider.js.map +1 -1
  138. package/icc-x-api/crypto/AES.js.map +1 -1
  139. package/icc-x-api/crypto/AccessControlKeysHeadersProvider.js.map +1 -1
  140. package/icc-x-api/crypto/AccessControlSecretUtils.js.map +1 -1
  141. package/icc-x-api/crypto/BaseExchangeDataManager.js +10 -10
  142. package/icc-x-api/crypto/BaseExchangeDataManager.js.map +1 -1
  143. package/icc-x-api/crypto/BaseExchangeKeysManager.js +4 -4
  144. package/icc-x-api/crypto/BaseExchangeKeysManager.js.map +1 -1
  145. package/icc-x-api/crypto/CryptoStrategies.d.ts +5 -7
  146. package/icc-x-api/crypto/CryptoStrategies.js.map +1 -1
  147. package/icc-x-api/crypto/DelegationsDeAnonymization.js +1 -1
  148. package/icc-x-api/crypto/DelegationsDeAnonymization.js.map +1 -1
  149. package/icc-x-api/crypto/ExchangeDataManager.js +7 -8
  150. package/icc-x-api/crypto/ExchangeDataManager.js.map +1 -1
  151. package/icc-x-api/crypto/ExchangeDataMapManager.js.map +1 -1
  152. package/icc-x-api/crypto/ExchangeKeysManager.js +1 -1
  153. package/icc-x-api/crypto/ExchangeKeysManager.js.map +1 -1
  154. package/icc-x-api/crypto/ExtendedApisUtilsImpl.js +11 -10
  155. package/icc-x-api/crypto/ExtendedApisUtilsImpl.js.map +1 -1
  156. package/icc-x-api/crypto/HMACUtils.js.map +1 -1
  157. package/icc-x-api/crypto/KeyRecovery.js +5 -5
  158. package/icc-x-api/crypto/KeyRecovery.js.map +1 -1
  159. package/icc-x-api/crypto/NativeCryptoPrimitivesBridge.js +3 -3
  160. package/icc-x-api/crypto/NativeCryptoPrimitivesBridge.js.map +1 -1
  161. package/icc-x-api/crypto/RSA.js +4 -4
  162. package/icc-x-api/crypto/RSA.js.map +1 -1
  163. package/icc-x-api/crypto/RecoveryDataEncryption.js +1 -1
  164. package/icc-x-api/crypto/RecoveryDataEncryption.js.map +1 -1
  165. package/icc-x-api/crypto/SecretIdUseOption.js +1 -1
  166. package/icc-x-api/crypto/SecretIdUseOption.js.map +1 -1
  167. package/icc-x-api/crypto/SecureDelegationsEncryption.js +4 -4
  168. package/icc-x-api/crypto/SecureDelegationsEncryption.js.map +1 -1
  169. package/icc-x-api/crypto/SecureDelegationsManager.js +1 -1
  170. package/icc-x-api/crypto/SecureDelegationsManager.js.map +1 -1
  171. package/icc-x-api/crypto/SecurityMetadataDecryptor.d.ts +1 -1
  172. package/icc-x-api/crypto/SecurityMetadataDecryptor.js +9 -9
  173. package/icc-x-api/crypto/SecurityMetadataDecryptor.js.map +1 -1
  174. package/icc-x-api/crypto/ShamirKeysManager.js.map +1 -1
  175. package/icc-x-api/crypto/ShareMetadataBehaviour.js +1 -1
  176. package/icc-x-api/crypto/ShareMetadataBehaviour.js.map +1 -1
  177. package/icc-x-api/crypto/TransferKeysManager.js +1 -1
  178. package/icc-x-api/crypto/TransferKeysManager.js.map +1 -1
  179. package/icc-x-api/crypto/UserEncryptionKeysManager.js +2 -2
  180. package/icc-x-api/crypto/UserEncryptionKeysManager.js.map +1 -1
  181. package/icc-x-api/crypto/shamir.d.ts +2 -2
  182. package/icc-x-api/crypto/shamir.js +4 -4
  183. package/icc-x-api/crypto/shamir.js.map +1 -1
  184. package/icc-x-api/crypto/utils.js +14 -15
  185. package/icc-x-api/crypto/utils.js.map +1 -1
  186. package/icc-x-api/icc-accesslog-x-api.js +10 -10
  187. package/icc-x-api/icc-accesslog-x-api.js.map +1 -1
  188. package/icc-x-api/icc-bekmehr-x-api.js.map +1 -1
  189. package/icc-x-api/icc-calendar-item-x-api.js +7 -7
  190. package/icc-x-api/icc-calendar-item-x-api.js.map +1 -1
  191. package/icc-x-api/icc-classification-x-api.js +5 -5
  192. package/icc-x-api/icc-classification-x-api.js.map +1 -1
  193. package/icc-x-api/icc-code-x-api.js.map +1 -1
  194. package/icc-x-api/icc-contact-x-api.js +12 -12
  195. package/icc-x-api/icc-contact-x-api.js.map +1 -1
  196. package/icc-x-api/icc-data-owner-x-api.js.map +1 -1
  197. package/icc-x-api/icc-device-x-api.js +2 -2
  198. package/icc-x-api/icc-device-x-api.js.map +1 -1
  199. package/icc-x-api/icc-doctemplate-x-api.js.map +1 -1
  200. package/icc-x-api/icc-document-x-api.js +15 -15
  201. package/icc-x-api/icc-document-x-api.js.map +1 -1
  202. package/icc-x-api/icc-form-x-api.js +7 -7
  203. package/icc-x-api/icc-form-x-api.js.map +1 -1
  204. package/icc-x-api/icc-hcparty-x-api.js +4 -4
  205. package/icc-x-api/icc-hcparty-x-api.js.map +1 -1
  206. package/icc-x-api/icc-helement-x-api.js +10 -10
  207. package/icc-x-api/icc-helement-x-api.js.map +1 -1
  208. package/icc-x-api/icc-icure-maintenance-x-api.js.map +1 -1
  209. package/icc-x-api/icc-invoice-x-api.js +7 -7
  210. package/icc-x-api/icc-invoice-x-api.js.map +1 -1
  211. package/icc-x-api/icc-maintenance-task-x-api.js +7 -7
  212. package/icc-x-api/icc-maintenance-task-x-api.js.map +1 -1
  213. package/icc-x-api/icc-message-x-api.js +8 -8
  214. package/icc-x-api/icc-message-x-api.js.map +1 -1
  215. package/icc-x-api/icc-patient-x-api.js +11 -11
  216. package/icc-x-api/icc-patient-x-api.js.map +1 -1
  217. package/icc-x-api/icc-receipt-x-api.js +10 -10
  218. package/icc-x-api/icc-receipt-x-api.js.map +1 -1
  219. package/icc-x-api/icc-recovery-x-api.js +4 -4
  220. package/icc-x-api/icc-recovery-x-api.js.map +1 -1
  221. package/icc-x-api/icc-time-table-x-api.js +5 -5
  222. package/icc-x-api/icc-time-table-x-api.js.map +1 -1
  223. package/icc-x-api/icc-topic-x-api.js +9 -9
  224. package/icc-x-api/icc-topic-x-api.js.map +1 -1
  225. package/icc-x-api/icc-user-x-api.js +4 -4
  226. package/icc-x-api/icc-user-x-api.js.map +1 -1
  227. package/icc-x-api/index.js +22 -22
  228. package/icc-x-api/index.js.map +1 -1
  229. package/icc-x-api/maintenance/KeyPairUpdateRequest.js +2 -2
  230. package/icc-x-api/maintenance/KeyPairUpdateRequest.js.map +1 -1
  231. package/icc-x-api/storage/IcureStorageFacade.js +1 -1
  232. package/icc-x-api/storage/IcureStorageFacade.js.map +1 -1
  233. package/icc-x-api/storage/LocalStorageImpl.js +1 -1
  234. package/icc-x-api/storage/LocalStorageImpl.js.map +1 -1
  235. package/icc-x-api/utils/EntityWithDelegationTypeName.js +4 -4
  236. package/icc-x-api/utils/EntityWithDelegationTypeName.js.map +1 -1
  237. package/icc-x-api/utils/asn1-packer.js +2 -3
  238. package/icc-x-api/utils/asn1-packer.js.map +1 -1
  239. package/icc-x-api/utils/asn1-parser.js +1 -2
  240. package/icc-x-api/utils/asn1-parser.js.map +1 -1
  241. package/icc-x-api/utils/binary-utils.js +11 -11
  242. package/icc-x-api/utils/binary-utils.js.map +1 -1
  243. package/icc-x-api/utils/code-util.js +1 -2
  244. package/icc-x-api/utils/code-util.js.map +1 -1
  245. package/icc-x-api/utils/collection-utils.js +5 -6
  246. package/icc-x-api/utils/collection-utils.js.map +1 -1
  247. package/icc-x-api/utils/crypto-utils.d.ts +1 -1
  248. package/icc-x-api/utils/crypto-utils.js +17 -18
  249. package/icc-x-api/utils/crypto-utils.js.map +1 -1
  250. package/icc-x-api/utils/formatting-util.js +21 -21
  251. package/icc-x-api/utils/formatting-util.js.map +1 -1
  252. package/icc-x-api/utils/functional-util.js +3 -4
  253. package/icc-x-api/utils/functional-util.js.map +1 -1
  254. package/icc-x-api/utils/graph-utils.js +3 -4
  255. package/icc-x-api/utils/graph-utils.js.map +1 -1
  256. package/icc-x-api/utils/hcp-util.js +4 -4
  257. package/icc-x-api/utils/hcp-util.js.map +1 -1
  258. package/icc-x-api/utils/insurability-util.js +6 -7
  259. package/icc-x-api/utils/insurability-util.js.map +1 -1
  260. package/icc-x-api/utils/lru-temporised-async-cache.js.map +1 -1
  261. package/icc-x-api/utils/net-utils.js +3 -4
  262. package/icc-x-api/utils/net-utils.js.map +1 -1
  263. package/icc-x-api/utils/person-util.js +3 -4
  264. package/icc-x-api/utils/person-util.js.map +1 -1
  265. package/icc-x-api/utils/proxy-utils.js.map +1 -1
  266. package/icc-x-api/utils/simple-lru-cache.js.map +1 -1
  267. package/icc-x-api/utils/uuid-encoder.js +2 -2
  268. package/icc-x-api/utils/uuid-encoder.js.map +1 -1
  269. package/icc-x-api/utils/websocket.d.ts +0 -1
  270. package/icc-x-api/utils/websocket.js +3 -3
  271. package/icc-x-api/utils/websocket.js.map +1 -1
  272. package/package.json +3 -3
  273. package/test/icc-api/api/IccAgendaApi.js.map +1 -1
  274. package/test/icc-api/api/IccCalendarItemApi.js.map +1 -1
  275. package/test/icc-api/api/IccCalendarItemTypeApi.js +2 -2
  276. package/test/icc-api/api/IccCalendarItemTypeApi.js.map +1 -1
  277. package/test/icc-api/api/IccDocumentApi.js.map +1 -1
  278. package/test/icc-api/api/IccKeywordApi.js.map +1 -1
  279. package/test/icc-api/api/IccMedicalLocationApi.js.map +1 -1
  280. package/test/icc-api/api/IccPlaceApi.js.map +1 -1
  281. package/test/icc-api/api/IccUserApi.js +6 -6
  282. package/test/icc-x-api/auth/group-switch-test.js.map +1 -1
  283. package/test/icc-x-api/auth/jwt-concurrency-test.js +1 -2
  284. package/test/icc-x-api/auth/jwt-concurrency-test.js.map +1 -1
  285. package/test/icc-x-api/auth/jwt-provider-test.js.map +1 -1
  286. package/test/icc-x-api/auth/smart-auth-provider-test.js.map +1 -1
  287. package/test/icc-x-api/autofix-anonymity-test.js.map +1 -1
  288. package/test/icc-x-api/confidential-entities-test.js +1 -1
  289. package/test/icc-x-api/confidential-entities-test.js.map +1 -1
  290. package/test/icc-x-api/crud/comprehensive-crud-test.js.map +1 -1
  291. package/test/icc-x-api/crud/entities-crud-test-interface.js +24 -24
  292. package/test/icc-x-api/crud/entities-crud-test-interface.js.map +1 -1
  293. package/test/icc-x-api/crypto/anonymous-delegations-test.js +2 -2
  294. package/test/icc-x-api/crypto/anonymous-delegations-test.js.map +1 -1
  295. package/test/icc-x-api/crypto/cryptoTest.js.map +1 -1
  296. package/test/icc-x-api/crypto/delegate-ci-to-patient-with-missing-keys-test.js.map +1 -1
  297. package/test/icc-x-api/crypto/exchange-data-manager-test.js +4 -4
  298. package/test/icc-x-api/crypto/exchange-data-manager-test.js.map +1 -1
  299. package/test/icc-x-api/crypto/full-crypto-test.js +5 -5
  300. package/test/icc-x-api/crypto/full-crypto-test.js.map +1 -1
  301. package/test/icc-x-api/crypto/legacy-metadata-migration-test.js +7 -7
  302. package/test/icc-x-api/crypto/legacy-metadata-migration-test.js.map +1 -1
  303. package/test/icc-x-api/crypto/secure-delegations-manager-test.js +2 -2
  304. package/test/icc-x-api/crypto/secure-delegations-manager-test.js.map +1 -1
  305. package/test/icc-x-api/crypto/shamir.js.map +1 -1
  306. package/test/icc-x-api/crypto/soft-deleted-data-owners.js +3 -3
  307. package/test/icc-x-api/crypto/soft-deleted-data-owners.js.map +1 -1
  308. package/test/icc-x-api/entity-with-attachments-api-test.js +2 -2
  309. package/test/icc-x-api/entity-with-attachments-api-test.js.map +1 -1
  310. package/test/icc-x-api/icc-maintenance-task-x-api-test.js +4 -4
  311. package/test/icc-x-api/icc-message-x-api.js +1 -1
  312. package/test/icc-x-api/icc-message-x-api.js.map +1 -1
  313. package/test/icc-x-api/icc-patient-x-api-test.js.map +1 -1
  314. package/test/icc-x-api/icc-recovery-x-api.js.map +1 -1
  315. package/test/icc-x-api/icc-topic-x-api.js.map +1 -1
  316. package/test/icc-x-api/icc-user-x-api-test.js.map +1 -1
  317. package/test/icc-x-api/patient-user.js.map +1 -1
  318. package/test/icc-x-api/test-legacy-data-support.js.map +1 -1
  319. package/test/icc-x-api/utils/graph-test.js.map +1 -1
  320. package/test/icc-x-api/utils/lru-temporised-async-cache-test.js.map +1 -1
  321. package/test/support/CSM-243.js +2 -2
  322. package/test/support/CSM-243.js.map +1 -1
  323. package/test/support/CSM-93.js +1 -1
  324. package/test/support/CSM-93.js.map +1 -1
  325. package/test/utils/FakeDataOwnerApi.js.map +1 -1
  326. package/test/utils/FakeEncryptionKeysManager.js +2 -2
  327. package/test/utils/FakeEncryptionKeysManager.js.map +1 -1
  328. package/test/utils/FakeExchangeDataApi.js.map +1 -1
  329. package/test/utils/FakeExchangeDataManager.js.map +1 -1
  330. package/test/utils/FakeGenericApi.js.map +1 -1
  331. package/test/utils/TestApi.js +2 -2
  332. package/test/utils/TestApi.js.map +1 -1
  333. package/test/utils/TestCryptoStrategies.js.map +1 -1
  334. package/test/utils/TestStorage.js +2 -2
  335. package/test/utils/TestStorage.js.map +1 -1
  336. package/test/utils/test_utils.js +22 -22
  337. package/test/utils/test_utils.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"graph-utils.js","sourceRoot":"","sources":["../../../icc-x-api/utils/graph-utils.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @internal\n * Represents a graph. Each node is associated to a set of nodes that can be directly reached from it in a single step.\n */\nexport type Graph = { [node: string]: Set<string> }\n\n/**\n * @internal\n * Represents from which all cycles have been removed using strongly connected components. Also holds information on all groups.\n */\nexport type StronglyConnectedGraph = {\n acyclicGraph: Graph\n originalLabelToAcyclicLabel: { [originalLabel: string]: string }\n acyclicLabelToGroup: { [newLabel: string]: string[] } // includes new label.\n}\n\n/**\n * @internal\n * Creates a graph from a series of edges and optionally additional nodes.\n * @param edges edges between nodes, [from, to].\n * @param additionalNodes nodes which do not appear in any edge.\n * @return a graph built using the provided parameters.\n */\nexport function graphFromEdges(edges: [string, string][], additionalNodes?: string[]): Graph {\n const nodes = edges.reduce<Set<string>>((acc, [edgeFrom, edgeTo]) => {\n acc.add(edgeFrom)\n acc.add(edgeTo)\n return acc\n }, new Set(additionalNodes ?? []))\n const res = Array.from(nodes).reduce<Graph>((res, node) => {\n res[node] = new Set<string>()\n return res\n }, {})\n edges.forEach(([edgeFrom, edgeTo]) => {\n if (edgeFrom != edgeTo) {\n res[edgeFrom].add(edgeTo)\n }\n })\n return res\n}\n\n/**\n * @internal\n * Get the nodes reachable from each node in an acyclic graph. Exclude the node itself.\n * @param graph an acyclic graph.\n * @return all nodes reachable from each node in the graph with 1 or more steps.\n */\nexport function reachSetsAcyclic(graph: Graph): { [node: string]: Set<string> } {\n const res: { [node: string]: Set<string> } = {}\n function calculateAndCacheReachSetRecursive(node: string): Set<string> {\n if (res[node]) return res[node]\n const set = new Set(Array.from(graph[node]))\n graph[node].forEach((child) => {\n calculateAndCacheReachSetRecursive(child).forEach((x) => set.add(x))\n })\n res[node] = set\n return set\n }\n Object.keys(graph).forEach((n) => calculateAndCacheReachSetRecursive(n))\n return res\n}\n\n/**\n * @internal\n * Get a new graph where each cycle has been replaced by a single node, with label chosen from the labels of nodes in the cycle (the specific way\n * the label is chosen is implementation-dependant).\n * @param graph a graph.\n * @return the new graph and dictionaries to allow mapping between original labels and labels in the new graph\n */\nexport function acyclic(graph: Graph): StronglyConnectedGraph {\n const idToName = Object.keys(graph)\n const nameToId: { [name: string]: number } = {}\n idToName.forEach((name, id) => {\n nameToId[name] = id\n })\n const ogAdjacency: number[][] = idToName.map((name) => {\n return Array.from(graph[name]).map((adjacencyName) => nameToId[adjacencyName])\n })\n const { components, adjacencyList } = stronglyConnectedComponents(ogAdjacency)\n const namedGroups = components.map((group) => group.map((id) => idToName[id]))\n const originalLabelToAcyclicLabel: { [originalLabel: string]: string } = {}\n namedGroups.forEach((group) => {\n group.forEach((element) => {\n originalLabelToAcyclicLabel[element] = group[0]\n })\n })\n const acyclicLabelToGroup: { [newLabel: string]: string[] } = {}\n namedGroups.forEach((group) => {\n acyclicLabelToGroup[group[0]] = group\n })\n const remappedIdToName = components.map((group) => idToName[group[0]])\n const res: Graph = {}\n adjacencyList.forEach((adjacencyList, index) => {\n res[remappedIdToName[index]] = new Set(adjacencyList.filter((x) => x !== index).map((x) => remappedIdToName[x]))\n })\n return { acyclicGraph: res, originalLabelToAcyclicLabel, acyclicLabelToGroup }\n}\n\n// Implementation from https://github.com/mikolalysenko/strongly-connected-components\nfunction stronglyConnectedComponents(adjList: number[][]): { components: number[][]; adjacencyList: number[][] } {\n const numVertices = adjList.length\n const index = new Array(numVertices)\n const lowValue = new Array(numVertices)\n const active = new Array(numVertices)\n const child = new Array(numVertices)\n const scc = new Array(numVertices)\n const sccLinks = new Array(numVertices)\n\n //Initialize tables\n for (let i = 0; i < numVertices; ++i) {\n index[i] = -1\n lowValue[i] = 0\n active[i] = false\n child[i] = 0\n scc[i] = -1\n sccLinks[i] = []\n }\n\n // The strongConnect function\n let count = 0\n const components: number[][] = []\n const sccAdjList: number[][] = []\n\n function strongConnect(v: number) {\n // To avoid running out of stack space, this emulates the recursive behaviour of the normal algorithm, effectively using T as the call stack.\n const S = [v],\n T = [v]\n index[v] = lowValue[v] = count\n active[v] = true\n count += 1\n while (T.length > 0) {\n v = T[T.length - 1]\n const e = adjList[v]\n if (child[v] < e.length) {\n // If we're not done iterating over the children, first try finishing that.\n let i\n for (i = child[v]; i < e.length; ++i) {\n // Start where we left off.\n const u = e[i]\n if (index[u] < 0) {\n index[u] = lowValue[u] = count\n active[u] = true\n count += 1\n S.push(u)\n T.push(u)\n break // First recurse, then continue here (with the same child!).\n // There is a slight change to Tarjan's algorithm here.\n // Normally, after having recursed, we set lowValue like we do for an active child (although some variants of the algorithm do it slightly differently).\n // Here, we only do so if the child we recursed on is still active.\n // The reasoning is that if it is no longer active, it must have had a lowValue equal to its own index, which means that it is necessarily higher than our lowValue.\n } else if (active[u]) {\n lowValue[v] = Math.min(lowValue[v], lowValue[u]) | 0\n }\n if (scc[u] >= 0) {\n // Node v is not yet assigned an scc, but once it is that scc can apparently reach scc[u].\n sccLinks[v].push(scc[u])\n }\n }\n child[v] = i // Remember where we left off.\n } else {\n // If we're done iterating over the children, check whether we have an scc.\n if (lowValue[v] === index[v]) {\n // NOTTODO: It /might/ be true that T is always a prefix of S (at this point!!!), and if so, this could be used here.\n const component = []\n const links = []\n let linkCount = 0\n for (let i = S.length - 1; i >= 0; --i) {\n const w = S[i]\n active[w] = false\n component.push(w)\n links.push(sccLinks[w])\n linkCount += sccLinks[w].length\n scc[w] = components.length\n if (w === v) {\n S.length = i\n break\n }\n }\n components.push(component)\n const allLinks = new Array(linkCount)\n for (let i = 0; i < links.length; i++) {\n for (let j = 0; j < links[i].length; j++) {\n allLinks[--linkCount] = links[i][j]\n }\n }\n sccAdjList.push(allLinks)\n }\n T.pop() // Now we're finished exploring this particular node (normally corresponds to the return statement)\n }\n }\n }\n\n //Run strong connect starting from each vertex\n for (let i = 0; i < numVertices; ++i) {\n if (index[i] < 0) {\n strongConnect(i)\n }\n }\n\n // Compact sccAdjList\n let newE\n for (let i = 0; i < sccAdjList.length; i++) {\n const e = sccAdjList[i]\n if (e.length === 0) continue\n e.sort(function (a, b) {\n return a - b\n })\n newE = [e[0]]\n for (let j = 1; j < e.length; j++) {\n if (e[j] !== e[j - 1]) {\n newE.push(e[j])\n }\n }\n sccAdjList[i] = newE\n }\n\n return { components: components, adjacencyList: sccAdjList }\n}\n"]}
1
+ {"version":3,"file":"graph-utils.js","sourceRoot":"","sources":["../../../icc-x-api/utils/graph-utils.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @internal\n * Represents a graph. Each node is associated to a set of nodes that can be directly reached from it in a single step.\n */\nexport type Graph = { [node: string]: Set<string> }\n\n/**\n * @internal\n * Represents from which all cycles have been removed using strongly connected components. Also holds information on all groups.\n */\nexport type StronglyConnectedGraph = {\n acyclicGraph: Graph\n originalLabelToAcyclicLabel: { [originalLabel: string]: string }\n acyclicLabelToGroup: { [newLabel: string]: string[] } // includes new label.\n}\n\n/**\n * @internal\n * Creates a graph from a series of edges and optionally additional nodes.\n * @param edges edges between nodes, [from, to].\n * @param additionalNodes nodes which do not appear in any edge.\n * @return a graph built using the provided parameters.\n */\nexport function graphFromEdges(edges: [string, string][], additionalNodes?: string[]): Graph {\n const nodes = edges.reduce<Set<string>>((acc, [edgeFrom, edgeTo]) => {\n acc.add(edgeFrom)\n acc.add(edgeTo)\n return acc\n }, new Set(additionalNodes ?? []))\n const res = Array.from(nodes).reduce<Graph>((res, node) => {\n res[node] = new Set<string>()\n return res\n }, {})\n edges.forEach(([edgeFrom, edgeTo]) => {\n if (edgeFrom != edgeTo) {\n res[edgeFrom].add(edgeTo)\n }\n })\n return res\n}\n\n/**\n * @internal\n * Get the nodes reachable from each node in an acyclic graph. Exclude the node itself.\n * @param graph an acyclic graph.\n * @return all nodes reachable from each node in the graph with 1 or more steps.\n */\nexport function reachSetsAcyclic(graph: Graph): { [node: string]: Set<string> } {\n const res: { [node: string]: Set<string> } = {}\n function calculateAndCacheReachSetRecursive(node: string): Set<string> {\n if (res[node]) return res[node]\n const set = new Set(Array.from(graph[node]))\n graph[node].forEach((child) => {\n calculateAndCacheReachSetRecursive(child).forEach((x) => set.add(x))\n })\n res[node] = set\n return set\n }\n Object.keys(graph).forEach((n) => calculateAndCacheReachSetRecursive(n))\n return res\n}\n\n/**\n * @internal\n * Get a new graph where each cycle has been replaced by a single node, with label chosen from the labels of nodes in the cycle (the specific way\n * the label is chosen is implementation-dependant).\n * @param graph a graph.\n * @return the new graph and dictionaries to allow mapping between original labels and labels in the new graph\n */\nexport function acyclic(graph: Graph): StronglyConnectedGraph {\n const idToName = Object.keys(graph)\n const nameToId: { [name: string]: number } = {}\n idToName.forEach((name, id) => {\n nameToId[name] = id\n })\n const ogAdjacency: number[][] = idToName.map((name) => {\n return Array.from(graph[name]).map((adjacencyName) => nameToId[adjacencyName])\n })\n const { components, adjacencyList } = stronglyConnectedComponents(ogAdjacency)\n const namedGroups = components.map((group) => group.map((id) => idToName[id]))\n const originalLabelToAcyclicLabel: { [originalLabel: string]: string } = {}\n namedGroups.forEach((group) => {\n group.forEach((element) => {\n originalLabelToAcyclicLabel[element] = group[0]\n })\n })\n const acyclicLabelToGroup: { [newLabel: string]: string[] } = {}\n namedGroups.forEach((group) => {\n acyclicLabelToGroup[group[0]] = group\n })\n const remappedIdToName = components.map((group) => idToName[group[0]])\n const res: Graph = {}\n adjacencyList.forEach((adjacencyList, index) => {\n res[remappedIdToName[index]] = new Set(adjacencyList.filter((x) => x !== index).map((x) => remappedIdToName[x]))\n })\n return { acyclicGraph: res, originalLabelToAcyclicLabel, acyclicLabelToGroup }\n}\n\n// Implementation from https://github.com/mikolalysenko/strongly-connected-components\nfunction stronglyConnectedComponents(adjList: number[][]): { components: number[][]; adjacencyList: number[][] } {\n const numVertices = adjList.length\n const index = new Array(numVertices)\n const lowValue = new Array(numVertices)\n const active = new Array(numVertices)\n const child = new Array(numVertices)\n const scc = new Array(numVertices)\n const sccLinks = new Array(numVertices)\n\n //Initialize tables\n for (let i = 0; i < numVertices; ++i) {\n index[i] = -1\n lowValue[i] = 0\n active[i] = false\n child[i] = 0\n scc[i] = -1\n sccLinks[i] = []\n }\n\n // The strongConnect function\n let count = 0\n const components: number[][] = []\n const sccAdjList: number[][] = []\n\n function strongConnect(v: number) {\n // To avoid running out of stack space, this emulates the recursive behaviour of the normal algorithm, effectively using T as the call stack.\n const S = [v],\n T = [v]\n index[v] = lowValue[v] = count\n active[v] = true\n count += 1\n while (T.length > 0) {\n v = T[T.length - 1]\n const e = adjList[v]\n if (child[v] < e.length) {\n // If we're not done iterating over the children, first try finishing that.\n let i\n for (i = child[v]; i < e.length; ++i) {\n // Start where we left off.\n const u = e[i]\n if (index[u] < 0) {\n index[u] = lowValue[u] = count\n active[u] = true\n count += 1\n S.push(u)\n T.push(u)\n break // First recurse, then continue here (with the same child!).\n // There is a slight change to Tarjan's algorithm here.\n // Normally, after having recursed, we set lowValue like we do for an active child (although some variants of the algorithm do it slightly differently).\n // Here, we only do so if the child we recursed on is still active.\n // The reasoning is that if it is no longer active, it must have had a lowValue equal to its own index, which means that it is necessarily higher than our lowValue.\n } else if (active[u]) {\n lowValue[v] = Math.min(lowValue[v], lowValue[u]) | 0\n }\n if (scc[u] >= 0) {\n // Node v is not yet assigned an scc, but once it is that scc can apparently reach scc[u].\n sccLinks[v].push(scc[u])\n }\n }\n child[v] = i // Remember where we left off.\n } else {\n // If we're done iterating over the children, check whether we have an scc.\n if (lowValue[v] === index[v]) {\n // NOTTODO: It /might/ be true that T is always a prefix of S (at this point!!!), and if so, this could be used here.\n const component = []\n const links = []\n let linkCount = 0\n for (let i = S.length - 1; i >= 0; --i) {\n const w = S[i]\n active[w] = false\n component.push(w)\n links.push(sccLinks[w])\n linkCount += sccLinks[w].length\n scc[w] = components.length\n if (w === v) {\n S.length = i\n break\n }\n }\n components.push(component)\n const allLinks = new Array(linkCount)\n for (let i = 0; i < links.length; i++) {\n for (let j = 0; j < links[i].length; j++) {\n allLinks[--linkCount] = links[i][j]\n }\n }\n sccAdjList.push(allLinks)\n }\n T.pop() // Now we're finished exploring this particular node (normally corresponds to the return statement)\n }\n }\n }\n\n //Run strong connect starting from each vertex\n for (let i = 0; i < numVertices; ++i) {\n if (index[i] < 0) {\n strongConnect(i)\n }\n }\n\n // Compact sccAdjList\n let newE\n for (let i = 0; i < sccAdjList.length; i++) {\n const e = sccAdjList[i]\n if (e.length === 0) continue\n e.sort(function (a, b) {\n return a - b\n })\n newE = [e[0]]\n for (let j = 1; j < e.length; j++) {\n if (e[j] !== e[j - 1]) {\n newE.push(e[j])\n }\n }\n sccAdjList[i] = newE\n }\n\n return { components: components, adjacencyList: sccAdjList }\n}\n"]}
@@ -1,6 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getPhoneNumber = exports.isDoctorAssistant = exports.isDoctor = exports.SPECIALITIES_KEYS = exports.SPECIALITIES = void 0;
3
+ exports.SPECIALITIES_KEYS = exports.SPECIALITIES = void 0;
4
+ exports.isDoctor = isDoctor;
5
+ exports.isDoctorAssistant = isDoctorAssistant;
6
+ exports.getPhoneNumber = getPhoneNumber;
4
7
  const _ = require("lodash");
5
8
  const models_1 = require("../../icc-api/model/models");
6
9
  exports.SPECIALITIES = [
@@ -78,11 +81,9 @@ exports.SPECIALITIES_KEYS = _.fromPairs(exports.SPECIALITIES.map((spec) => [spec
78
81
  function isDoctor(nihii) {
79
82
  return !!nihii && nihii.length === 11 && nihii.startsWith('1') && !nihii.endsWith('005') && !nihii.endsWith('006');
80
83
  }
81
- exports.isDoctor = isDoctor;
82
84
  function isDoctorAssistant(nihii) {
83
85
  return !!nihii && nihii.length === 11 && nihii.startsWith('1') && nihii.endsWith('005') && nihii.endsWith('006');
84
86
  }
85
- exports.isDoctorAssistant = isDoctorAssistant;
86
87
  function getPhoneNumber(hcp, maxLength) {
87
88
  const phoneNumbers = (hcp.addresses || []).map((a) => {
88
89
  const t = (a.telecoms || []).find((t) => t.telecomType === models_1.Telecom.TelecomTypeEnum.Phone.toString() || t.telecomType === models_1.Telecom.TelecomTypeEnum.Mobile.toString());
@@ -119,5 +120,4 @@ function getPhoneNumber(hcp, maxLength) {
119
120
  });
120
121
  return (!phoneNumbers.length || _.isNaN(phoneNumbers[0]) ? null : phoneNumbers[0]) || null;
121
122
  }
122
- exports.getPhoneNumber = getPhoneNumber;
123
123
  //# sourceMappingURL=hcp-util.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"hcp-util.js","sourceRoot":"","sources":["../../../icc-x-api/utils/hcp-util.ts"],"names":[],"mappings":"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","sourcesContent":["import * as _ from 'lodash'\nimport { HealthcareParty, Telecom } from '../../icc-api/model/models'\n\nexport interface KendoDropdownSpeciality {\n text: string\n value: string\n}\n\nexport const SPECIALITIES: Array<string> = [\n 'ADMINISTRATION',\n 'CARE_GIVER',\n 'ANATOMOPATHOLOGY',\n 'ANESTHESIOLOGY',\n 'SOCIAL_WORKER',\n 'PHARMA_ASSISTANT',\n 'AUDIOLOGIST',\n 'BACTERIOLOGY',\n 'TRUSS_ORTHOTIST',\n 'CLINICAL_BIOLOGY',\n 'CARDIOLOGY',\n 'GENERAL_SURGERY',\n 'MAXILLOFACIAL_SURGERY',\n 'PLASTIC_SURGERY',\n 'STOMATOLOGICAL_SURGERY',\n 'CARDIOVASCULAR_SURGERY',\n 'DENTISTRY',\n 'DERMATOLOGY',\n 'DIETETIC',\n 'ENDOCRINOLOGY',\n 'OCCUPATIONAL_THERAPIST',\n 'GASTROENTEROLOGY',\n 'GENETIC',\n 'GERIATRICS',\n 'GYNECOLOGY',\n 'HEMATOLOGY',\n 'NURSE',\n 'NURSE_EDUCATOR',\n 'PHYSIOTHERAPY',\n 'SPEECH',\n 'ACUTE_MEDICINE',\n 'GENERAL_MEDICINE',\n 'INTERNAL_MEDICINE',\n 'NUCLEAR_MEDICINE',\n 'PHYSICAL_MEDICINE',\n 'NEONATOLOGY',\n 'NEPHROLOGY',\n 'NEUROSURGERY',\n 'NEUROLOGY',\n 'NEUROPEDIATRICS',\n 'NEUROPSYCHIATRY',\n 'NUTRITIONIST',\n 'ONCOLOGY',\n 'OPHTHALMOLOGY',\n 'ORTHOPEDICS',\n 'ORTHOPTISTE',\n 'OTORHINOLARYNGOLOGY',\n 'PEDIATRICS',\n 'PHARMACOLOGY',\n 'RESPIRATORY',\n 'PODIATRIST',\n 'PUBLIC_HEALTH_PREVENTION',\n 'PROSTHETIST',\n 'PSYCHIATRY',\n 'MEDICAL_PSYCHOLOGY',\n 'RADIODIAGNOSTICS',\n 'RADIOTHERAPY',\n 'RESUSCITATION',\n 'RHEUMATOLOGY',\n 'MIDWIFE',\n 'STOMATOLOGY',\n 'EMERGENCY',\n 'UROLOGY',\n 'TOXICOLOGY',\n 'TRANSPORT',\n]\n\n/**\n * Translation keys for specialities.\n * @see SPECIALITIES\n */\nexport const SPECIALITIES_KEYS: { [spec: string]: string } = _.fromPairs(SPECIALITIES.map((spec) => [spec, 'hcp-form.SPECIALITIES.' + spec]))\n\nexport function isDoctor(nihii: string): boolean {\n return !!nihii && nihii.length === 11 && nihii.startsWith('1') && !nihii.endsWith('005') && !nihii.endsWith('006')\n}\n\nexport function isDoctorAssistant(nihii: string): boolean {\n return !!nihii && nihii.length === 11 && nihii.startsWith('1') && nihii.endsWith('005') && nihii.endsWith('006')\n}\n\nexport function getPhoneNumber(hcp: HealthcareParty, maxLength: number | undefined): number | null {\n const phoneNumbers = (hcp.addresses || []).map((a) => {\n const t = (a.telecoms || []).find(\n (t: Telecom) => t.telecomType === Telecom.TelecomTypeEnum.Phone.toString() || t.telecomType === Telecom.TelecomTypeEnum.Mobile.toString()\n )\n let res = t && t.telecomNumber\n if (res && maxLength) {\n while (res.length > maxLength) {\n if (res.startsWith('0032')) {\n res = '0' + res.substr(4)\n } else if (res.startsWith('+32')) {\n res = '0' + res.substr(3)\n } else if (res.startsWith('32')) {\n res = '0' + res.substr(2)\n } else if (res.startsWith('00')) {\n res = res.substr(2)\n } else if (res.startsWith('0')) {\n res = res.substr(1)\n } else if (res.startsWith('352')) {\n res = '0' + res.substr(3)\n } else if (res.startsWith('33')) {\n res = '0' + res.substr(2)\n } else {\n res = res.substr(1)\n }\n }\n }\n return res && Number(res)\n })\n\n return (!phoneNumbers.length || _.isNaN(phoneNumbers[0]) ? null : phoneNumbers[0]) || null\n}\n"]}
1
+ {"version":3,"file":"hcp-util.js","sourceRoot":"","sources":["../../../icc-x-api/utils/hcp-util.ts"],"names":[],"mappings":"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","sourcesContent":["import * as _ from 'lodash'\nimport { HealthcareParty, Telecom } from '../../icc-api/model/models'\n\nexport interface KendoDropdownSpeciality {\n text: string\n value: string\n}\n\nexport const SPECIALITIES: Array<string> = [\n 'ADMINISTRATION',\n 'CARE_GIVER',\n 'ANATOMOPATHOLOGY',\n 'ANESTHESIOLOGY',\n 'SOCIAL_WORKER',\n 'PHARMA_ASSISTANT',\n 'AUDIOLOGIST',\n 'BACTERIOLOGY',\n 'TRUSS_ORTHOTIST',\n 'CLINICAL_BIOLOGY',\n 'CARDIOLOGY',\n 'GENERAL_SURGERY',\n 'MAXILLOFACIAL_SURGERY',\n 'PLASTIC_SURGERY',\n 'STOMATOLOGICAL_SURGERY',\n 'CARDIOVASCULAR_SURGERY',\n 'DENTISTRY',\n 'DERMATOLOGY',\n 'DIETETIC',\n 'ENDOCRINOLOGY',\n 'OCCUPATIONAL_THERAPIST',\n 'GASTROENTEROLOGY',\n 'GENETIC',\n 'GERIATRICS',\n 'GYNECOLOGY',\n 'HEMATOLOGY',\n 'NURSE',\n 'NURSE_EDUCATOR',\n 'PHYSIOTHERAPY',\n 'SPEECH',\n 'ACUTE_MEDICINE',\n 'GENERAL_MEDICINE',\n 'INTERNAL_MEDICINE',\n 'NUCLEAR_MEDICINE',\n 'PHYSICAL_MEDICINE',\n 'NEONATOLOGY',\n 'NEPHROLOGY',\n 'NEUROSURGERY',\n 'NEUROLOGY',\n 'NEUROPEDIATRICS',\n 'NEUROPSYCHIATRY',\n 'NUTRITIONIST',\n 'ONCOLOGY',\n 'OPHTHALMOLOGY',\n 'ORTHOPEDICS',\n 'ORTHOPTISTE',\n 'OTORHINOLARYNGOLOGY',\n 'PEDIATRICS',\n 'PHARMACOLOGY',\n 'RESPIRATORY',\n 'PODIATRIST',\n 'PUBLIC_HEALTH_PREVENTION',\n 'PROSTHETIST',\n 'PSYCHIATRY',\n 'MEDICAL_PSYCHOLOGY',\n 'RADIODIAGNOSTICS',\n 'RADIOTHERAPY',\n 'RESUSCITATION',\n 'RHEUMATOLOGY',\n 'MIDWIFE',\n 'STOMATOLOGY',\n 'EMERGENCY',\n 'UROLOGY',\n 'TOXICOLOGY',\n 'TRANSPORT',\n]\n\n/**\n * Translation keys for specialities.\n * @see SPECIALITIES\n */\nexport const SPECIALITIES_KEYS: { [spec: string]: string } = _.fromPairs(SPECIALITIES.map((spec) => [spec, 'hcp-form.SPECIALITIES.' + spec]))\n\nexport function isDoctor(nihii: string): boolean {\n return !!nihii && nihii.length === 11 && nihii.startsWith('1') && !nihii.endsWith('005') && !nihii.endsWith('006')\n}\n\nexport function isDoctorAssistant(nihii: string): boolean {\n return !!nihii && nihii.length === 11 && nihii.startsWith('1') && nihii.endsWith('005') && nihii.endsWith('006')\n}\n\nexport function getPhoneNumber(hcp: HealthcareParty, maxLength: number | undefined): number | null {\n const phoneNumbers = (hcp.addresses || []).map((a) => {\n const t = (a.telecoms || []).find(\n (t: Telecom) => t.telecomType === Telecom.TelecomTypeEnum.Phone.toString() || t.telecomType === Telecom.TelecomTypeEnum.Mobile.toString()\n )\n let res = t && t.telecomNumber\n if (res && maxLength) {\n while (res.length > maxLength) {\n if (res.startsWith('0032')) {\n res = '0' + res.substr(4)\n } else if (res.startsWith('+32')) {\n res = '0' + res.substr(3)\n } else if (res.startsWith('32')) {\n res = '0' + res.substr(2)\n } else if (res.startsWith('00')) {\n res = res.substr(2)\n } else if (res.startsWith('0')) {\n res = res.substr(1)\n } else if (res.startsWith('352')) {\n res = '0' + res.substr(3)\n } else if (res.startsWith('33')) {\n res = '0' + res.substr(2)\n } else {\n res = res.substr(1)\n }\n }\n }\n return res && Number(res)\n })\n\n return (!phoneNumbers.length || _.isNaN(phoneNumbers[0]) ? null : phoneNumbers[0]) || null\n}\n"]}
@@ -1,23 +1,25 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.isPatientHospitalized = exports.getInsurability = exports.getMembership = exports.isPatientPaymentByIo = exports.patientIsBIM = exports.isBIM = void 0;
3
+ exports.isBIM = isBIM;
4
+ exports.patientIsBIM = patientIsBIM;
5
+ exports.isPatientPaymentByIo = isPatientPaymentByIo;
6
+ exports.getMembership = getMembership;
7
+ exports.getInsurability = getInsurability;
8
+ exports.isPatientHospitalized = isPatientHospitalized;
4
9
  const _ = require("lodash");
5
10
  function isBIM(ct1, ct2) {
6
11
  //BIM if ct1 ood and ct2 ood
7
12
  return +ct1 % 2 !== 0 && +ct2 % 2 !== 0;
8
13
  }
9
- exports.isBIM = isBIM;
10
14
  function patientIsBIM(patient) {
11
15
  var _a, _b;
12
16
  // FIXME this doesn't check the date of the insurability. It is related to the idea of having only on insurability at a time.
13
17
  return isBIM((_a = _.get(patient, 'insurabilities[0].parameters.tc1')) !== null && _a !== void 0 ? _a : '000', (_b = _.get(patient, 'insurabilities[0].parameters.tc2')) !== null && _b !== void 0 ? _b : '000');
14
18
  }
15
- exports.patientIsBIM = patientIsBIM;
16
19
  function isPatientPaymentByIo(patient) {
17
20
  const paymentByIo = _.get(patient, 'insurabilities[0].parameters.paymentByIo');
18
21
  return paymentByIo === 'true';
19
22
  }
20
- exports.isPatientPaymentByIo = isPatientPaymentByIo;
21
23
  /**
22
24
  * Returns the titulary id from patient insurability
23
25
  * @throws error if the patient has no insurability data
@@ -31,7 +33,6 @@ function getMembership(patient) {
31
33
  }
32
34
  return ioCode;
33
35
  }
34
- exports.getMembership = getMembership;
35
36
  /**
36
37
  * Returns the insurability from patient
37
38
  * @throws error if the patient has no insurability data
@@ -45,7 +46,6 @@ function getInsurability(patient) {
45
46
  }
46
47
  return insurability;
47
48
  }
48
- exports.getInsurability = getInsurability;
49
49
  /**
50
50
  * Returns the insurability from patient
51
51
  * @throws error if the patient has no insurability data
@@ -54,5 +54,4 @@ exports.getInsurability = getInsurability;
54
54
  function isPatientHospitalized(patient) {
55
55
  return getInsurability(patient).hospitalisation || false;
56
56
  }
57
- exports.isPatientHospitalized = isPatientHospitalized;
58
57
  //# sourceMappingURL=insurability-util.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"insurability-util.js","sourceRoot":"","sources":["../../../icc-x-api/utils/insurability-util.ts"],"names":[],"mappings":";;;AAAA,4BAA2B;AAG3B,SAAgB,KAAK,CAAC,GAAoB,EAAE,GAAoB;IAC9D,4BAA4B;IAC5B,OAAO,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAA;AACzC,CAAC;AAHD,sBAGC;AAED,SAAgB,YAAY,CAAC,OAAgB;;IAC3C,6HAA6H;IAC7H,OAAO,KAAK,CAAC,MAAA,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,kCAAkC,CAAC,mCAAI,KAAK,EAAE,MAAA,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,kCAAkC,CAAC,mCAAI,KAAK,CAAC,CAAA;AACxI,CAAC;AAHD,oCAGC;AAED,SAAgB,oBAAoB,CAAC,OAAgB;IACnD,MAAM,WAAW,GAAG,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,0CAA0C,CAAC,CAAA;IAC9E,OAAO,WAAW,KAAK,MAAM,CAAA;AAC/B,CAAC;AAHD,oDAGC;AAED;;;;GAIG;AACH,SAAgB,aAAa,CAAC,OAAgB;IAC5C,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,wCAAwC,CAAC,CAAA;IACvE,IAAI,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE;QACzB,iBAAiB;QACjB,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAA;KAChE;IACD,OAAO,MAAM,CAAA;AACf,CAAC;AAPD,sCAOC;AAED;;;;GAIG;AACH,SAAgB,eAAe,CAAC,OAAgB;IAC9C,MAAM,YAAY,GAAG,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAA;IACxD,IAAI,CAAC,CAAC,WAAW,CAAC,YAAY,CAAC,EAAE;QAC/B,iBAAiB;QACjB,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAA;KAChE;IACD,OAAO,YAAY,CAAA;AACrB,CAAC;AAPD,0CAOC;AAED;;;;GAIG;AACH,SAAgB,qBAAqB,CAAC,OAAgB;IACpD,OAAO,eAAe,CAAC,OAAO,CAAC,CAAC,eAAe,IAAI,KAAK,CAAA;AAC1D,CAAC;AAFD,sDAEC","sourcesContent":["import * as _ from 'lodash'\nimport { Patient, Insurability } from '../../icc-api/model/models'\n\nexport function isBIM(ct1: number | string, ct2: number | string): boolean {\n //BIM if ct1 ood and ct2 ood\n return +ct1 % 2 !== 0 && +ct2 % 2 !== 0\n}\n\nexport function patientIsBIM(patient: Patient) {\n // FIXME this doesn't check the date of the insurability. It is related to the idea of having only on insurability at a time.\n return isBIM(_.get(patient, 'insurabilities[0].parameters.tc1') ?? '000', _.get(patient, 'insurabilities[0].parameters.tc2') ?? '000')\n}\n\nexport function isPatientPaymentByIo(patient: Patient) {\n const paymentByIo = _.get(patient, 'insurabilities[0].parameters.paymentByIo')\n return paymentByIo === 'true'\n}\n\n/**\n * Returns the titulary id from patient insurability\n * @throws error if the patient has no insurability data\n * @param patient The patient\n */\nexport function getMembership(patient: Patient): string {\n const ioCode = _.get(patient, 'insurabilities[0].identificationNumber')\n if (_.isUndefined(ioCode)) {\n // TODO translate\n throw new Error(\"Le patient n'a pas de données d'assurabilité\")\n }\n return ioCode\n}\n\n/**\n * Returns the insurability from patient\n * @throws error if the patient has no insurability data\n * @param patient The patient\n */\nexport function getInsurability(patient: Patient): Insurability {\n const insurability = _.get(patient, 'insurabilities[0]')\n if (_.isUndefined(insurability)) {\n // TODO translate\n throw new Error(\"Le patient n'a pas de données d'assurabilité\")\n }\n return insurability\n}\n\n/**\n * Returns the insurability from patient\n * @throws error if the patient has no insurability data\n * @param patient\n */\nexport function isPatientHospitalized(patient: Patient): boolean {\n return getInsurability(patient).hospitalisation || false\n}\n"]}
1
+ {"version":3,"file":"insurability-util.js","sourceRoot":"","sources":["../../../icc-x-api/utils/insurability-util.ts"],"names":[],"mappings":";;AAGA,sBAGC;AAED,oCAGC;AAED,oDAGC;AAOD,sCAOC;AAOD,0CAOC;AAOD,sDAEC;AArDD,4BAA2B;AAG3B,SAAgB,KAAK,CAAC,GAAoB,EAAE,GAAoB;IAC9D,4BAA4B;IAC5B,OAAO,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAA;AACzC,CAAC;AAED,SAAgB,YAAY,CAAC,OAAgB;;IAC3C,6HAA6H;IAC7H,OAAO,KAAK,CAAC,MAAA,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,kCAAkC,CAAC,mCAAI,KAAK,EAAE,MAAA,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,kCAAkC,CAAC,mCAAI,KAAK,CAAC,CAAA;AACxI,CAAC;AAED,SAAgB,oBAAoB,CAAC,OAAgB;IACnD,MAAM,WAAW,GAAG,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,0CAA0C,CAAC,CAAA;IAC9E,OAAO,WAAW,KAAK,MAAM,CAAA;AAC/B,CAAC;AAED;;;;GAIG;AACH,SAAgB,aAAa,CAAC,OAAgB;IAC5C,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,wCAAwC,CAAC,CAAA;IACvE,IAAI,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1B,iBAAiB;QACjB,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAA;IACjE,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC;AAED;;;;GAIG;AACH,SAAgB,eAAe,CAAC,OAAgB;IAC9C,MAAM,YAAY,GAAG,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAA;IACxD,IAAI,CAAC,CAAC,WAAW,CAAC,YAAY,CAAC,EAAE,CAAC;QAChC,iBAAiB;QACjB,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAA;IACjE,CAAC;IACD,OAAO,YAAY,CAAA;AACrB,CAAC;AAED;;;;GAIG;AACH,SAAgB,qBAAqB,CAAC,OAAgB;IACpD,OAAO,eAAe,CAAC,OAAO,CAAC,CAAC,eAAe,IAAI,KAAK,CAAA;AAC1D,CAAC","sourcesContent":["import * as _ from 'lodash'\nimport { Patient, Insurability } from '../../icc-api/model/models'\n\nexport function isBIM(ct1: number | string, ct2: number | string): boolean {\n //BIM if ct1 ood and ct2 ood\n return +ct1 % 2 !== 0 && +ct2 % 2 !== 0\n}\n\nexport function patientIsBIM(patient: Patient) {\n // FIXME this doesn't check the date of the insurability. It is related to the idea of having only on insurability at a time.\n return isBIM(_.get(patient, 'insurabilities[0].parameters.tc1') ?? '000', _.get(patient, 'insurabilities[0].parameters.tc2') ?? '000')\n}\n\nexport function isPatientPaymentByIo(patient: Patient) {\n const paymentByIo = _.get(patient, 'insurabilities[0].parameters.paymentByIo')\n return paymentByIo === 'true'\n}\n\n/**\n * Returns the titulary id from patient insurability\n * @throws error if the patient has no insurability data\n * @param patient The patient\n */\nexport function getMembership(patient: Patient): string {\n const ioCode = _.get(patient, 'insurabilities[0].identificationNumber')\n if (_.isUndefined(ioCode)) {\n // TODO translate\n throw new Error(\"Le patient n'a pas de données d'assurabilité\")\n }\n return ioCode\n}\n\n/**\n * Returns the insurability from patient\n * @throws error if the patient has no insurability data\n * @param patient The patient\n */\nexport function getInsurability(patient: Patient): Insurability {\n const insurability = _.get(patient, 'insurabilities[0]')\n if (_.isUndefined(insurability)) {\n // TODO translate\n throw new Error(\"Le patient n'a pas de données d'assurabilité\")\n }\n return insurability\n}\n\n/**\n * Returns the insurability from patient\n * @throws error if the patient has no insurability data\n * @param patient\n */\nexport function isPatientHospitalized(patient: Patient): boolean {\n return getInsurability(patient).hospitalisation || false\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"lru-temporised-async-cache.js","sourceRoot":"","sources":["../../../icc-x-api/utils/lru-temporised-async-cache.ts"],"names":[],"mappings":"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","sourcesContent":["export class LruTemporisedAsyncCache<K, V> {\n private readonly maxCacheSize: number\n private readonly lifetimeForValue: (value: V) => number\n\n private readonly nodesMap: Map<K, CacheNode<K, V>> = new Map()\n private firstNode: CacheNode<K, V> | null = null\n private lastNode: CacheNode<K, V> | null = null\n\n private sequentialJobId = 0\n\n /**\n * @param maxCacheSize Maximum size of the cache. Any value <= 0 is considered as no limit.\n * @param lifetimeForValue Get the maximum lifetime for an entry given its value, in milliseconds.\n */\n constructor(maxCacheSize: number, lifetimeForValue: (value: V) => number) {\n this.maxCacheSize = maxCacheSize\n this.lifetimeForValue = lifetimeForValue\n }\n\n /**\n * Get a value if there is an already cached value or job for the provided key.\n * - If the job is in progress this will return the job promise.\n * - If there is already a cached value returns the value, regardless of whether his lifetime is expired or not.\n * - If there is no job nor cached value this will return undefined.\n * @param key key of the entry\n * @return if there is a cached value or job in progress for the entry returns the item and if its lifetime has expired, otherwise returns\n * undefined.\n */\n getIfCachedJob(key: K): Promise<{ item: V; expired: boolean } | undefined> {\n const retrieved = this.nodesMap.get(key)\n if (retrieved !== undefined) {\n if (retrieved.expired((x) => this.lifetimeForValue(x))) {\n return retrieved.valuePromise().then((x) => ({ item: x, expired: true }))\n } else {\n this.markUsed(retrieved)\n return retrieved.valuePromise().then((x) => ({ item: x, expired: false }))\n }\n }\n return Promise.resolve(undefined)\n }\n\n /**\n * Gets a cached value or retrieves it and caches it if the value is not available or if it is available but expired. A value will never be expired\n * if it was not yet retrieved, even if the retrieved value would be expired according to the {@link additionalExpirationCondition}\n * @param key key of the entry\n * @param retrieve given the previous value (if available, expired but not yet removed) of the entry retrieves an updated value.\n * @param additionalExpirationCondition an expiration condition for already cached values to consider in addition to time-based expiration. Returns\n * always false by default, meaning the value is not expired if its lifetime didn't already surpass the maximum lifetime.\n * @return the cached value if present and not expired, else the retrieved value.\n */\n get(\n key: K,\n retrieve: (previousValue: V | undefined) => Promise<{ item: V; onEviction?: (isReplacement: boolean) => void }>,\n additionalExpirationCondition: (value: V) => boolean = () => false\n ): Promise<V> {\n const retrieved = this.nodesMap.get(key)\n if (retrieved !== undefined) {\n this.markUsed(retrieved)\n const cachedValue = retrieved.cachedValue\n if (retrieved.expired((x) => this.lifetimeForValue(x)) || (cachedValue !== undefined && additionalExpirationCondition(cachedValue))) {\n const newId = this.nextJobId()\n retrieved.onEviction(true)\n retrieved.jobId = newId\n retrieved.value = this.registerJob(key, newId, () => retrieve(cachedValue))\n }\n return retrieved.valuePromise()\n } else {\n const jobId = this.nextJobId()\n const newNode = new CacheNode(\n key,\n jobId,\n this.lastNode,\n null,\n this.registerJob(key, jobId, () => retrieve(undefined))\n )\n this.addToTail(key, newNode)\n if (this.maxCacheSize > 0 && this.nodesMap.size > this.maxCacheSize) this.evict(this.firstNode!.key, this.firstNode!, true)\n return newNode.valuePromise()\n }\n }\n\n /**\n * Fully empties this cache.\n * @param doOnEvictionOfCleared if true the onEviction triggers for the retrieved and cached data will be executed, otherwise not. onEviction\n * triggers of data for which the retrieval jobs were not completed will automatically be called when the job completes.\n */\n clear(doOnEvictionOfCleared: boolean = true) {\n this.firstNode = null\n this.lastNode = null\n if (doOnEvictionOfCleared) {\n for (const node of this.nodesMap.values()) {\n node.onEviction(false)\n }\n }\n this.nodesMap.clear()\n }\n\n private addToTail(key: K | null, node: CacheNode<K, V>) {\n node.previous = this.lastNode\n node.next = null\n if (this.lastNode) this.lastNode.next = node\n this.lastNode = node\n if (this.firstNode === null) this.firstNode = node\n if (key != null) this.nodesMap.set(key, node)\n }\n\n private evict(key: K | null, node: CacheNode<K, V>, doEvictionTriggers: boolean) {\n if (node.previous) node.previous.next = node.next\n if (node.next) node.next.previous = node.previous\n if (this.firstNode === node) this.firstNode = node.next\n if (this.lastNode === node) this.lastNode = node.previous\n if (key !== null) {\n this.nodesMap.delete(key)\n }\n if (doEvictionTriggers) {\n node.onEviction(false)\n }\n }\n\n private markUsed(node: CacheNode<K, V>) {\n if (node !== this.lastNode) {\n // No need to modify the nodes map\n this.evict(null, node, false)\n this.addToTail(null, node)\n }\n }\n\n private registerJob(key: K, jobId: number, retrieve: () => Promise<{ item: V; onEviction?: (isReplacement: boolean) => void }>): Promise<V> {\n // The node may have already been evicted by the time the promise completed if the cached surpassed the maximum size.\n return retrieve()\n .then(({ item: v, onEviction }) => {\n const node = this.nodesMap.get(key)\n if (node && node.jobId == jobId) {\n node.value = { cached: v, timestamp: Date.now(), onEviction: (r) => onEviction?.(r) }\n } else {\n onEviction?.(!!node)\n }\n return v\n })\n .catch((e) => {\n const node = this.nodesMap.get(key)\n if (node && node.jobId == jobId) {\n this.evict(key, node, true)\n }\n throw e\n })\n }\n\n private nextJobId(): number {\n const res = this.sequentialJobId\n if (this.sequentialJobId < Number.MAX_SAFE_INTEGER) {\n this.sequentialJobId = res + 1\n } else {\n this.sequentialJobId = 0\n }\n return res\n }\n}\n\ntype Cached<V> = { cached: V; timestamp: number; onEviction: (isReplacement: boolean) => void }\n\nclass CacheNode<K, V> {\n readonly key: K\n previous: CacheNode<K, V> | null\n next: CacheNode<K, V> | null\n value: Promise<V> | Cached<V>\n jobId: number\n\n constructor(key: K, jobId: number, previous: CacheNode<K, V> | null, next: CacheNode<K, V> | null, value: Promise<V>) {\n this.key = key\n this.jobId = jobId\n this.previous = previous\n this.next = next\n this.value = value\n }\n\n expired(lifetimeForValue: (value: V) => number): boolean {\n if ('timestamp' in this.value) {\n const maxLifetime = lifetimeForValue(this.value.cached)\n return maxLifetime > 0 && Date.now() - this.value.timestamp > maxLifetime\n } else return false\n }\n\n valuePromise(): Promise<V> {\n return 'timestamp' in this.value ? Promise.resolve(this.value.cached) : this.value\n }\n\n onEviction(isReplacement: boolean): void {\n if ('timestamp' in this.value) {\n this.value.onEviction(isReplacement)\n }\n }\n\n get cachedValue(): V | undefined {\n return 'timestamp' in this.value ? this.value.cached : undefined\n }\n}\n"]}
1
+ {"version":3,"file":"lru-temporised-async-cache.js","sourceRoot":"","sources":["../../../icc-x-api/utils/lru-temporised-async-cache.ts"],"names":[],"mappings":"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","sourcesContent":["export class LruTemporisedAsyncCache<K, V> {\n private readonly maxCacheSize: number\n private readonly lifetimeForValue: (value: V) => number\n\n private readonly nodesMap: Map<K, CacheNode<K, V>> = new Map()\n private firstNode: CacheNode<K, V> | null = null\n private lastNode: CacheNode<K, V> | null = null\n\n private sequentialJobId = 0\n\n /**\n * @param maxCacheSize Maximum size of the cache. Any value <= 0 is considered as no limit.\n * @param lifetimeForValue Get the maximum lifetime for an entry given its value, in milliseconds.\n */\n constructor(maxCacheSize: number, lifetimeForValue: (value: V) => number) {\n this.maxCacheSize = maxCacheSize\n this.lifetimeForValue = lifetimeForValue\n }\n\n /**\n * Get a value if there is an already cached value or job for the provided key.\n * - If the job is in progress this will return the job promise.\n * - If there is already a cached value returns the value, regardless of whether his lifetime is expired or not.\n * - If there is no job nor cached value this will return undefined.\n * @param key key of the entry\n * @return if there is a cached value or job in progress for the entry returns the item and if its lifetime has expired, otherwise returns\n * undefined.\n */\n getIfCachedJob(key: K): Promise<{ item: V; expired: boolean } | undefined> {\n const retrieved = this.nodesMap.get(key)\n if (retrieved !== undefined) {\n if (retrieved.expired((x) => this.lifetimeForValue(x))) {\n return retrieved.valuePromise().then((x) => ({ item: x, expired: true }))\n } else {\n this.markUsed(retrieved)\n return retrieved.valuePromise().then((x) => ({ item: x, expired: false }))\n }\n }\n return Promise.resolve(undefined)\n }\n\n /**\n * Gets a cached value or retrieves it and caches it if the value is not available or if it is available but expired. A value will never be expired\n * if it was not yet retrieved, even if the retrieved value would be expired according to the {@link additionalExpirationCondition}\n * @param key key of the entry\n * @param retrieve given the previous value (if available, expired but not yet removed) of the entry retrieves an updated value.\n * @param additionalExpirationCondition an expiration condition for already cached values to consider in addition to time-based expiration. Returns\n * always false by default, meaning the value is not expired if its lifetime didn't already surpass the maximum lifetime.\n * @return the cached value if present and not expired, else the retrieved value.\n */\n get(\n key: K,\n retrieve: (previousValue: V | undefined) => Promise<{ item: V; onEviction?: (isReplacement: boolean) => void }>,\n additionalExpirationCondition: (value: V) => boolean = () => false\n ): Promise<V> {\n const retrieved = this.nodesMap.get(key)\n if (retrieved !== undefined) {\n this.markUsed(retrieved)\n const cachedValue = retrieved.cachedValue\n if (retrieved.expired((x) => this.lifetimeForValue(x)) || (cachedValue !== undefined && additionalExpirationCondition(cachedValue))) {\n const newId = this.nextJobId()\n retrieved.onEviction(true)\n retrieved.jobId = newId\n retrieved.value = this.registerJob(key, newId, () => retrieve(cachedValue))\n }\n return retrieved.valuePromise()\n } else {\n const jobId = this.nextJobId()\n const newNode = new CacheNode(\n key,\n jobId,\n this.lastNode,\n null,\n this.registerJob(key, jobId, () => retrieve(undefined))\n )\n this.addToTail(key, newNode)\n if (this.maxCacheSize > 0 && this.nodesMap.size > this.maxCacheSize) this.evict(this.firstNode!.key, this.firstNode!, true)\n return newNode.valuePromise()\n }\n }\n\n /**\n * Fully empties this cache.\n * @param doOnEvictionOfCleared if true the onEviction triggers for the retrieved and cached data will be executed, otherwise not. onEviction\n * triggers of data for which the retrieval jobs were not completed will automatically be called when the job completes.\n */\n clear(doOnEvictionOfCleared: boolean = true) {\n this.firstNode = null\n this.lastNode = null\n if (doOnEvictionOfCleared) {\n for (const node of this.nodesMap.values()) {\n node.onEviction(false)\n }\n }\n this.nodesMap.clear()\n }\n\n private addToTail(key: K | null, node: CacheNode<K, V>) {\n node.previous = this.lastNode\n node.next = null\n if (this.lastNode) this.lastNode.next = node\n this.lastNode = node\n if (this.firstNode === null) this.firstNode = node\n if (key != null) this.nodesMap.set(key, node)\n }\n\n private evict(key: K | null, node: CacheNode<K, V>, doEvictionTriggers: boolean) {\n if (node.previous) node.previous.next = node.next\n if (node.next) node.next.previous = node.previous\n if (this.firstNode === node) this.firstNode = node.next\n if (this.lastNode === node) this.lastNode = node.previous\n if (key !== null) {\n this.nodesMap.delete(key)\n }\n if (doEvictionTriggers) {\n node.onEviction(false)\n }\n }\n\n private markUsed(node: CacheNode<K, V>) {\n if (node !== this.lastNode) {\n // No need to modify the nodes map\n this.evict(null, node, false)\n this.addToTail(null, node)\n }\n }\n\n private registerJob(key: K, jobId: number, retrieve: () => Promise<{ item: V; onEviction?: (isReplacement: boolean) => void }>): Promise<V> {\n // The node may have already been evicted by the time the promise completed if the cached surpassed the maximum size.\n return retrieve()\n .then(({ item: v, onEviction }) => {\n const node = this.nodesMap.get(key)\n if (node && node.jobId == jobId) {\n node.value = { cached: v, timestamp: Date.now(), onEviction: (r) => onEviction?.(r) }\n } else {\n onEviction?.(!!node)\n }\n return v\n })\n .catch((e) => {\n const node = this.nodesMap.get(key)\n if (node && node.jobId == jobId) {\n this.evict(key, node, true)\n }\n throw e\n })\n }\n\n private nextJobId(): number {\n const res = this.sequentialJobId\n if (this.sequentialJobId < Number.MAX_SAFE_INTEGER) {\n this.sequentialJobId = res + 1\n } else {\n this.sequentialJobId = 0\n }\n return res\n }\n}\n\ntype Cached<V> = { cached: V; timestamp: number; onEviction: (isReplacement: boolean) => void }\n\nclass CacheNode<K, V> {\n readonly key: K\n previous: CacheNode<K, V> | null\n next: CacheNode<K, V> | null\n value: Promise<V> | Cached<V>\n jobId: number\n\n constructor(key: K, jobId: number, previous: CacheNode<K, V> | null, next: CacheNode<K, V> | null, value: Promise<V>) {\n this.key = key\n this.jobId = jobId\n this.previous = previous\n this.next = next\n this.value = value\n }\n\n expired(lifetimeForValue: (value: V) => number): boolean {\n if ('timestamp' in this.value) {\n const maxLifetime = lifetimeForValue(this.value.cached)\n return maxLifetime > 0 && Date.now() - this.value.timestamp > maxLifetime\n } else return false\n }\n\n valuePromise(): Promise<V> {\n return 'timestamp' in this.value ? Promise.resolve(this.value.cached) : this.value\n }\n\n onEviction(isReplacement: boolean): void {\n if ('timestamp' in this.value) {\n this.value.onEviction(isReplacement)\n }\n }\n\n get cachedValue(): V | undefined {\n return 'timestamp' in this.value ? this.value.cached : undefined\n }\n}\n"]}
@@ -9,11 +9,12 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
9
9
  });
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.getRowsUsingPagination = exports.retry = exports.sleep = void 0;
12
+ exports.sleep = sleep;
13
+ exports.retry = retry;
14
+ exports.getRowsUsingPagination = getRowsUsingPagination;
13
15
  function sleep(ms) {
14
16
  return new Promise((resolve) => setTimeout(resolve, ms));
15
17
  }
16
- exports.sleep = sleep;
17
18
  function retry(fn, retryCount = 3, sleepTime = 1000, exponentialFactor = 1) {
18
19
  let retry = 0;
19
20
  const doFn = () => {
@@ -21,7 +22,6 @@ function retry(fn, retryCount = 3, sleepTime = 1000, exponentialFactor = 1) {
21
22
  };
22
23
  return doFn();
23
24
  }
24
- exports.retry = retry;
25
25
  function getRowsUsingPagination(paginator, filter, startIdx, endIdx, cache) {
26
26
  return __awaiter(this, void 0, void 0, function* () {
27
27
  const executePaginator = (latestResult, acc, limit) => __awaiter(this, void 0, void 0, function* () {
@@ -190,5 +190,4 @@ function getRowsUsingPagination(paginator, filter, startIdx, endIdx, cache) {
190
190
  }
191
191
  });
192
192
  }
193
- exports.getRowsUsingPagination = getRowsUsingPagination;
194
193
  //# sourceMappingURL=net-utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"net-utils.js","sourceRoot":"","sources":["../../../icc-x-api/utils/net-utils.ts"],"names":[],"mappings":"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","sourcesContent":["export type PaginatorFunction<X> = (key: any, docId: string | null, limit: number | undefined) => Promise<PaginatorResponse<X>>\n\nexport type PaginatorExecutor<X> = (\n latestPaginatorFunctionResult: PaginatorResponse<X>,\n acc: any[],\n limit: number | undefined\n) => Promise<PaginatorResponse<X>>\n\nexport interface PaginatorResponse<X> {\n rows: Array<X>\n nextKey: any | null | undefined\n nextDocId: string | null | undefined\n done: boolean\n}\n\nexport interface RowsChunk<X> {\n startIdx: number\n endIdx: number\n rows: Array<X>\n nextKey: any | null\n nextDocId: string | null\n}\n\nexport interface MissingRowsChunk<X> {\n missing: [number, number]\n lastEndIdx: number\n lastKey: any | null\n lastDocId: string | null\n rows?: Array<X> // Is going to be filled when we go through all missing rows chunks\n}\n\nexport function sleep(ms: number): Promise<any> {\n return new Promise((resolve) => setTimeout(resolve, ms))\n}\n\nexport function retry<P>(fn: () => Promise<P>, retryCount = 3, sleepTime = 1000, exponentialFactor = 1): Promise<P> {\n let retry = 0\n const doFn: () => Promise<P> = () => {\n return fn().catch((e) =>\n retry++ < retryCount ? (sleepTime && sleep((sleepTime *= exponentialFactor)).then(() => doFn())) || doFn() : Promise.reject(e)\n )\n }\n return doFn()\n}\n\nexport async function getRowsUsingPagination<X>(\n paginator: PaginatorFunction<X>,\n filter?: (value: X, idx: number, array: Array<X>) => boolean,\n startIdx?: number,\n endIdx?: number,\n cache?: Array<RowsChunk<X>>\n): Promise<Array<X>> {\n const executePaginator: PaginatorExecutor<X> = async (latestResult: PaginatorResponse<X>, acc: Array<X>, limit: number | undefined) => {\n const newResult = await paginator(\n latestResult.nextKey || null,\n latestResult.nextDocId || null,\n endIdx && startIdx ? endIdx - startIdx : undefined\n )\n const rows = (filter ? newResult.rows && newResult.rows.filter(filter) : newResult.rows) || []\n acc.push(...rows)\n if (newResult.done || (limit && acc.length >= limit)) {\n return {\n rows: acc,\n nextKey: newResult.nextKey,\n nextDocId: newResult.nextDocId,\n done: false,\n }\n } else {\n return executePaginator(newResult, acc, limit)\n }\n }\n\n if (cache && startIdx && endIdx) {\n // Go through cache and build a list of existing rows (RowsChunks) and missing rows (MissingRowChunks)\n // The cache is a sparse structure sorted by index\n // At first, the cache is empty rows is going to be equal to [] and everything will be missing (see empty rows situation below)\n const [rows, lastKey, lastDocId, lastEndIdx] = cache.reduce(\n (\n [rows, lastKey, lastDocId, lastEndIdx, lastTreatedIdx]: [\n Array<RowsChunk<X> | MissingRowsChunk<X>>,\n any | null,\n string | null,\n number,\n number\n ],\n chunk\n ) => {\n const startOfZoi = lastTreatedIdx\n const endOfZoi = endIdx\n\n if (chunk.endIdx <= startOfZoi) {\n // [--zoi--] // Zone of interest starts at startOfZoi, ends at endIdx\n // [-chunk-]\n // Doesn't look like anything to me\n } else if (chunk.startIdx >= endIdx) {\n // [--zoi--]\n // [-chunk-]\n if (startOfZoi < endIdx) {\n rows.push({\n missing: [startOfZoi, endIdx],\n lastEndIdx,\n lastKey,\n lastDocId,\n })\n lastTreatedIdx = endOfZoi\n }\n } else {\n if (chunk.startIdx <= lastTreatedIdx) {\n if (chunk.endIdx <= endIdx) {\n // [--zoi--]\n // [-chunk-]\n rows.push({\n startIdx: startOfZoi,\n endIdx: chunk.endIdx,\n rows: chunk.rows.slice(startOfZoi - chunk.startIdx, chunk.endIdx - chunk.startIdx),\n nextKey: null,\n nextDocId: null,\n })\n lastTreatedIdx = chunk.endIdx\n } else {\n // [--zoi--]\n // [------chunk------]\n rows.push({\n startIdx: startOfZoi,\n endIdx: endOfZoi,\n rows: chunk.rows.slice(startOfZoi - chunk.startIdx, endOfZoi - chunk.startIdx),\n nextKey: null,\n nextDocId: null,\n })\n lastTreatedIdx = endOfZoi\n }\n } else {\n // [--zoi--]\n // [-chunk-]\n if (chunk.endIdx >= endOfZoi) {\n rows.push({\n missing: [startOfZoi, chunk.startIdx],\n lastEndIdx,\n lastKey,\n lastDocId,\n })\n rows.push({\n startIdx: chunk.startIdx,\n endIdx: endOfZoi,\n rows: chunk.rows.slice(0, endOfZoi - chunk.startIdx),\n nextKey: null,\n nextDocId: null,\n })\n lastTreatedIdx = endOfZoi\n } else {\n // [-------zoi-------]\n // [-chunk-]\n rows.push({\n missing: [startOfZoi, chunk.startIdx],\n lastEndIdx,\n lastKey,\n lastDocId,\n })\n rows.push({\n startIdx: chunk.startIdx,\n endIdx: chunk.endIdx,\n rows: chunk.rows.slice(0, chunk.endIdx - chunk.startIdx),\n nextKey: null,\n nextDocId: null,\n })\n lastTreatedIdx = chunk.endIdx\n }\n }\n }\n return [rows, chunk.nextKey, chunk.nextDocId, chunk.endIdx, lastTreatedIdx]\n },\n [[], null, null, 0, startIdx || 0]\n )\n if (!rows.length) {\n rows.push({\n missing: [startIdx, endIdx],\n lastKey: lastKey,\n lastDocId: lastDocId,\n lastEndIdx: lastEndIdx,\n })\n } else {\n const lastRow = rows.length ? rows[rows.length - 1] : undefined\n if (lastRow && lastRow.rows && (lastRow as RowsChunk<X>).startIdx + lastRow.rows.length < endIdx) {\n rows.push({\n missing: [(lastRow as RowsChunk<X>).startIdx + lastRow.rows.length, endIdx],\n lastKey: lastKey,\n lastDocId: lastDocId,\n lastEndIdx: lastEndIdx,\n })\n }\n }\n\n // Once we we have determined which where the missing chunks. Go fetch them based on the lastKey/lastDocId + the limit computed with the lastEndIndex\n await Promise.all(\n rows\n .filter((r: any) => r.missing)\n .map(async (r: any) => {\n const missing = r as MissingRowsChunk<X>\n const { rows, nextKey, nextDocId } = await executePaginator(\n {\n nextKey: missing.lastKey,\n nextDocId: missing.lastDocId,\n rows: [],\n done: false,\n },\n [],\n missing.missing[1] - missing.lastEndIdx\n )\n\n missing.rows = rows.slice(missing.missing[0] - missing.lastEndIdx, missing.missing[1] - missing.lastEndIdx)\n cache[missing.lastEndIdx] = {\n rows,\n startIdx: missing.missing[0],\n endIdx: missing.missing[1],\n nextKey: nextKey || null,\n nextDocId: nextDocId || null,\n }\n })\n )\n return (rows || []).reduce(\n (acc: X[], r: MissingRowsChunk<X> | RowsChunk<X>) =>\n r.rows\n ? r.rows.reduce((acc, r) => {\n acc.push(r)\n return acc\n }, acc)\n : acc,\n []\n )\n } else {\n const { rows } = await executePaginator(\n {\n nextKey: null,\n nextDocId: null,\n rows: [],\n done: false,\n },\n [],\n undefined\n )\n return rows\n }\n}\n"]}
1
+ {"version":3,"file":"net-utils.js","sourceRoot":"","sources":["../../../icc-x-api/utils/net-utils.ts"],"names":[],"mappings":";;;;;;;;;;;AA+BA,sBAEC;AAED,sBAQC;AAED,wDAqMC;AAnND,SAAgB,KAAK,CAAC,EAAU;IAC9B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAA;AAC1D,CAAC;AAED,SAAgB,KAAK,CAAI,EAAoB,EAAE,UAAU,GAAG,CAAC,EAAE,SAAS,GAAG,IAAI,EAAE,iBAAiB,GAAG,CAAC;IACpG,IAAI,KAAK,GAAG,CAAC,CAAA;IACb,MAAM,IAAI,GAAqB,GAAG,EAAE;QAClC,OAAO,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CACtB,KAAK,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,KAAK,CAAC,CAAC,SAAS,IAAI,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAC/H,CAAA;IACH,CAAC,CAAA;IACD,OAAO,IAAI,EAAE,CAAA;AACf,CAAC;AAED,SAAsB,sBAAsB,CAC1C,SAA+B,EAC/B,MAA4D,EAC5D,QAAiB,EACjB,MAAe,EACf,KAA2B;;QAE3B,MAAM,gBAAgB,GAAyB,CAAO,YAAkC,EAAE,GAAa,EAAE,KAAyB,EAAE,EAAE;YACpI,MAAM,SAAS,GAAG,MAAM,SAAS,CAC/B,YAAY,CAAC,OAAO,IAAI,IAAI,EAC5B,YAAY,CAAC,SAAS,IAAI,IAAI,EAC9B,MAAM,IAAI,QAAQ,CAAC,CAAC,CAAC,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,SAAS,CACnD,CAAA;YACD,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,IAAI,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,CAAA;YAC9F,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAA;YACjB,IAAI,SAAS,CAAC,IAAI,IAAI,CAAC,KAAK,IAAI,GAAG,CAAC,MAAM,IAAI,KAAK,CAAC,EAAE,CAAC;gBACrD,OAAO;oBACL,IAAI,EAAE,GAAG;oBACT,OAAO,EAAE,SAAS,CAAC,OAAO;oBAC1B,SAAS,EAAE,SAAS,CAAC,SAAS;oBAC9B,IAAI,EAAE,KAAK;iBACZ,CAAA;YACH,CAAC;iBAAM,CAAC;gBACN,OAAO,gBAAgB,CAAC,SAAS,EAAE,GAAG,EAAE,KAAK,CAAC,CAAA;YAChD,CAAC;QACH,CAAC,CAAA,CAAA;QAED,IAAI,KAAK,IAAI,QAAQ,IAAI,MAAM,EAAE,CAAC;YAChC,sGAAsG;YACtG,kDAAkD;YAClD,+HAA+H;YAC/H,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,CAAC,GAAG,KAAK,CAAC,MAAM,CACzD,CACE,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,cAAc,CAMpD,EACD,KAAK,EACL,EAAE;gBACF,MAAM,UAAU,GAAG,cAAc,CAAA;gBACjC,MAAM,QAAQ,GAAG,MAAM,CAAA;gBAEvB,IAAI,KAAK,CAAC,MAAM,IAAI,UAAU,EAAE,CAAC;oBAC/B,+EAA+E;oBAC/E,YAAY;oBACZ,mCAAmC;gBACrC,CAAC;qBAAM,IAAI,KAAK,CAAC,QAAQ,IAAI,MAAM,EAAE,CAAC;oBACpC,YAAY;oBACZ,sBAAsB;oBACtB,IAAI,UAAU,GAAG,MAAM,EAAE,CAAC;wBACxB,IAAI,CAAC,IAAI,CAAC;4BACR,OAAO,EAAE,CAAC,UAAU,EAAE,MAAM,CAAC;4BAC7B,UAAU;4BACV,OAAO;4BACP,SAAS;yBACV,CAAC,CAAA;wBACF,cAAc,GAAG,QAAQ,CAAA;oBAC3B,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,IAAI,KAAK,CAAC,QAAQ,IAAI,cAAc,EAAE,CAAC;wBACrC,IAAI,KAAK,CAAC,MAAM,IAAI,MAAM,EAAE,CAAC;4BAC3B,kBAAkB;4BAClB,YAAY;4BACZ,IAAI,CAAC,IAAI,CAAC;gCACR,QAAQ,EAAE,UAAU;gCACpB,MAAM,EAAE,KAAK,CAAC,MAAM;gCACpB,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC;gCAClF,OAAO,EAAE,IAAI;gCACb,SAAS,EAAE,IAAI;6BAChB,CAAC,CAAA;4BACF,cAAc,GAAG,KAAK,CAAC,MAAM,CAAA;wBAC/B,CAAC;6BAAM,CAAC;4BACN,kBAAkB;4BAClB,sBAAsB;4BACtB,IAAI,CAAC,IAAI,CAAC;gCACR,QAAQ,EAAE,UAAU;gCACpB,MAAM,EAAE,QAAQ;gCAChB,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,QAAQ,EAAE,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;gCAC9E,OAAO,EAAE,IAAI;gCACb,SAAS,EAAE,IAAI;6BAChB,CAAC,CAAA;4BACF,cAAc,GAAG,QAAQ,CAAA;wBAC3B,CAAC;oBACH,CAAC;yBAAM,CAAC;wBACN,aAAa;wBACb,mBAAmB;wBACnB,IAAI,KAAK,CAAC,MAAM,IAAI,QAAQ,EAAE,CAAC;4BAC7B,IAAI,CAAC,IAAI,CAAC;gCACR,OAAO,EAAE,CAAC,UAAU,EAAE,KAAK,CAAC,QAAQ,CAAC;gCACrC,UAAU;gCACV,OAAO;gCACP,SAAS;6BACV,CAAC,CAAA;4BACF,IAAI,CAAC,IAAI,CAAC;gCACR,QAAQ,EAAE,KAAK,CAAC,QAAQ;gCACxB,MAAM,EAAE,QAAQ;gCAChB,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;gCACpD,OAAO,EAAE,IAAI;gCACb,SAAS,EAAE,IAAI;6BAChB,CAAC,CAAA;4BACF,cAAc,GAAG,QAAQ,CAAA;wBAC3B,CAAC;6BAAM,CAAC;4BACN,uBAAuB;4BACvB,kBAAkB;4BAClB,IAAI,CAAC,IAAI,CAAC;gCACR,OAAO,EAAE,CAAC,UAAU,EAAE,KAAK,CAAC,QAAQ,CAAC;gCACrC,UAAU;gCACV,OAAO;gCACP,SAAS;6BACV,CAAC,CAAA;4BACF,IAAI,CAAC,IAAI,CAAC;gCACR,QAAQ,EAAE,KAAK,CAAC,QAAQ;gCACxB,MAAM,EAAE,KAAK,CAAC,MAAM;gCACpB,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC;gCACxD,OAAO,EAAE,IAAI;gCACb,SAAS,EAAE,IAAI;6BAChB,CAAC,CAAA;4BACF,cAAc,GAAG,KAAK,CAAC,MAAM,CAAA;wBAC/B,CAAC;oBACH,CAAC;gBACH,CAAC;gBACD,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,EAAE,cAAc,CAAC,CAAA;YAC7E,CAAC,EACD,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,IAAI,CAAC,CAAC,CACnC,CAAA;YACD,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACjB,IAAI,CAAC,IAAI,CAAC;oBACR,OAAO,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC;oBAC3B,OAAO,EAAE,OAAO;oBAChB,SAAS,EAAE,SAAS;oBACpB,UAAU,EAAE,UAAU;iBACvB,CAAC,CAAA;YACJ,CAAC;iBAAM,CAAC;gBACN,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;gBAC/D,IAAI,OAAO,IAAI,OAAO,CAAC,IAAI,IAAK,OAAwB,CAAC,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,MAAM,EAAE,CAAC;oBACjG,IAAI,CAAC,IAAI,CAAC;wBACR,OAAO,EAAE,CAAE,OAAwB,CAAC,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC;wBAC3E,OAAO,EAAE,OAAO;wBAChB,SAAS,EAAE,SAAS;wBACpB,UAAU,EAAE,UAAU;qBACvB,CAAC,CAAA;gBACJ,CAAC;YACH,CAAC;YAED,qJAAqJ;YACrJ,MAAM,OAAO,CAAC,GAAG,CACf,IAAI;iBACD,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;iBAC7B,GAAG,CAAC,CAAO,CAAM,EAAE,EAAE;gBACpB,MAAM,OAAO,GAAG,CAAwB,CAAA;gBACxC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,MAAM,gBAAgB,CACzD;oBACE,OAAO,EAAE,OAAO,CAAC,OAAO;oBACxB,SAAS,EAAE,OAAO,CAAC,SAAS;oBAC5B,IAAI,EAAE,EAAE;oBACR,IAAI,EAAE,KAAK;iBACZ,EACD,EAAE,EACF,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,UAAU,CACxC,CAAA;gBAED,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;gBAC3G,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG;oBAC1B,IAAI;oBACJ,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;oBAC5B,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;oBAC1B,OAAO,EAAE,OAAO,IAAI,IAAI;oBACxB,SAAS,EAAE,SAAS,IAAI,IAAI;iBAC7B,CAAA;YACH,CAAC,CAAA,CAAC,CACL,CAAA;YACD,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,MAAM,CACxB,CAAC,GAAQ,EAAE,CAAqC,EAAE,EAAE,CAClD,CAAC,CAAC,IAAI;gBACJ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;oBACvB,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;oBACX,OAAO,GAAG,CAAA;gBACZ,CAAC,EAAE,GAAG,CAAC;gBACT,CAAC,CAAC,GAAG,EACT,EAAE,CACH,CAAA;QACH,CAAC;aAAM,CAAC;YACN,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,gBAAgB,CACrC;gBACE,OAAO,EAAE,IAAI;gBACb,SAAS,EAAE,IAAI;gBACf,IAAI,EAAE,EAAE;gBACR,IAAI,EAAE,KAAK;aACZ,EACD,EAAE,EACF,SAAS,CACV,CAAA;YACD,OAAO,IAAI,CAAA;QACb,CAAC;IACH,CAAC;CAAA","sourcesContent":["export type PaginatorFunction<X> = (key: any, docId: string | null, limit: number | undefined) => Promise<PaginatorResponse<X>>\n\nexport type PaginatorExecutor<X> = (\n latestPaginatorFunctionResult: PaginatorResponse<X>,\n acc: any[],\n limit: number | undefined\n) => Promise<PaginatorResponse<X>>\n\nexport interface PaginatorResponse<X> {\n rows: Array<X>\n nextKey: any | null | undefined\n nextDocId: string | null | undefined\n done: boolean\n}\n\nexport interface RowsChunk<X> {\n startIdx: number\n endIdx: number\n rows: Array<X>\n nextKey: any | null\n nextDocId: string | null\n}\n\nexport interface MissingRowsChunk<X> {\n missing: [number, number]\n lastEndIdx: number\n lastKey: any | null\n lastDocId: string | null\n rows?: Array<X> // Is going to be filled when we go through all missing rows chunks\n}\n\nexport function sleep(ms: number): Promise<any> {\n return new Promise((resolve) => setTimeout(resolve, ms))\n}\n\nexport function retry<P>(fn: () => Promise<P>, retryCount = 3, sleepTime = 1000, exponentialFactor = 1): Promise<P> {\n let retry = 0\n const doFn: () => Promise<P> = () => {\n return fn().catch((e) =>\n retry++ < retryCount ? (sleepTime && sleep((sleepTime *= exponentialFactor)).then(() => doFn())) || doFn() : Promise.reject(e)\n )\n }\n return doFn()\n}\n\nexport async function getRowsUsingPagination<X>(\n paginator: PaginatorFunction<X>,\n filter?: (value: X, idx: number, array: Array<X>) => boolean,\n startIdx?: number,\n endIdx?: number,\n cache?: Array<RowsChunk<X>>\n): Promise<Array<X>> {\n const executePaginator: PaginatorExecutor<X> = async (latestResult: PaginatorResponse<X>, acc: Array<X>, limit: number | undefined) => {\n const newResult = await paginator(\n latestResult.nextKey || null,\n latestResult.nextDocId || null,\n endIdx && startIdx ? endIdx - startIdx : undefined\n )\n const rows = (filter ? newResult.rows && newResult.rows.filter(filter) : newResult.rows) || []\n acc.push(...rows)\n if (newResult.done || (limit && acc.length >= limit)) {\n return {\n rows: acc,\n nextKey: newResult.nextKey,\n nextDocId: newResult.nextDocId,\n done: false,\n }\n } else {\n return executePaginator(newResult, acc, limit)\n }\n }\n\n if (cache && startIdx && endIdx) {\n // Go through cache and build a list of existing rows (RowsChunks) and missing rows (MissingRowChunks)\n // The cache is a sparse structure sorted by index\n // At first, the cache is empty rows is going to be equal to [] and everything will be missing (see empty rows situation below)\n const [rows, lastKey, lastDocId, lastEndIdx] = cache.reduce(\n (\n [rows, lastKey, lastDocId, lastEndIdx, lastTreatedIdx]: [\n Array<RowsChunk<X> | MissingRowsChunk<X>>,\n any | null,\n string | null,\n number,\n number\n ],\n chunk\n ) => {\n const startOfZoi = lastTreatedIdx\n const endOfZoi = endIdx\n\n if (chunk.endIdx <= startOfZoi) {\n // [--zoi--] // Zone of interest starts at startOfZoi, ends at endIdx\n // [-chunk-]\n // Doesn't look like anything to me\n } else if (chunk.startIdx >= endIdx) {\n // [--zoi--]\n // [-chunk-]\n if (startOfZoi < endIdx) {\n rows.push({\n missing: [startOfZoi, endIdx],\n lastEndIdx,\n lastKey,\n lastDocId,\n })\n lastTreatedIdx = endOfZoi\n }\n } else {\n if (chunk.startIdx <= lastTreatedIdx) {\n if (chunk.endIdx <= endIdx) {\n // [--zoi--]\n // [-chunk-]\n rows.push({\n startIdx: startOfZoi,\n endIdx: chunk.endIdx,\n rows: chunk.rows.slice(startOfZoi - chunk.startIdx, chunk.endIdx - chunk.startIdx),\n nextKey: null,\n nextDocId: null,\n })\n lastTreatedIdx = chunk.endIdx\n } else {\n // [--zoi--]\n // [------chunk------]\n rows.push({\n startIdx: startOfZoi,\n endIdx: endOfZoi,\n rows: chunk.rows.slice(startOfZoi - chunk.startIdx, endOfZoi - chunk.startIdx),\n nextKey: null,\n nextDocId: null,\n })\n lastTreatedIdx = endOfZoi\n }\n } else {\n // [--zoi--]\n // [-chunk-]\n if (chunk.endIdx >= endOfZoi) {\n rows.push({\n missing: [startOfZoi, chunk.startIdx],\n lastEndIdx,\n lastKey,\n lastDocId,\n })\n rows.push({\n startIdx: chunk.startIdx,\n endIdx: endOfZoi,\n rows: chunk.rows.slice(0, endOfZoi - chunk.startIdx),\n nextKey: null,\n nextDocId: null,\n })\n lastTreatedIdx = endOfZoi\n } else {\n // [-------zoi-------]\n // [-chunk-]\n rows.push({\n missing: [startOfZoi, chunk.startIdx],\n lastEndIdx,\n lastKey,\n lastDocId,\n })\n rows.push({\n startIdx: chunk.startIdx,\n endIdx: chunk.endIdx,\n rows: chunk.rows.slice(0, chunk.endIdx - chunk.startIdx),\n nextKey: null,\n nextDocId: null,\n })\n lastTreatedIdx = chunk.endIdx\n }\n }\n }\n return [rows, chunk.nextKey, chunk.nextDocId, chunk.endIdx, lastTreatedIdx]\n },\n [[], null, null, 0, startIdx || 0]\n )\n if (!rows.length) {\n rows.push({\n missing: [startIdx, endIdx],\n lastKey: lastKey,\n lastDocId: lastDocId,\n lastEndIdx: lastEndIdx,\n })\n } else {\n const lastRow = rows.length ? rows[rows.length - 1] : undefined\n if (lastRow && lastRow.rows && (lastRow as RowsChunk<X>).startIdx + lastRow.rows.length < endIdx) {\n rows.push({\n missing: [(lastRow as RowsChunk<X>).startIdx + lastRow.rows.length, endIdx],\n lastKey: lastKey,\n lastDocId: lastDocId,\n lastEndIdx: lastEndIdx,\n })\n }\n }\n\n // Once we we have determined which where the missing chunks. Go fetch them based on the lastKey/lastDocId + the limit computed with the lastEndIndex\n await Promise.all(\n rows\n .filter((r: any) => r.missing)\n .map(async (r: any) => {\n const missing = r as MissingRowsChunk<X>\n const { rows, nextKey, nextDocId } = await executePaginator(\n {\n nextKey: missing.lastKey,\n nextDocId: missing.lastDocId,\n rows: [],\n done: false,\n },\n [],\n missing.missing[1] - missing.lastEndIdx\n )\n\n missing.rows = rows.slice(missing.missing[0] - missing.lastEndIdx, missing.missing[1] - missing.lastEndIdx)\n cache[missing.lastEndIdx] = {\n rows,\n startIdx: missing.missing[0],\n endIdx: missing.missing[1],\n nextKey: nextKey || null,\n nextDocId: nextDocId || null,\n }\n })\n )\n return (rows || []).reduce(\n (acc: X[], r: MissingRowsChunk<X> | RowsChunk<X>) =>\n r.rows\n ? r.rows.reduce((acc, r) => {\n acc.push(r)\n return acc\n }, acc)\n : acc,\n []\n )\n } else {\n const { rows } = await executePaginator(\n {\n nextKey: null,\n nextDocId: null,\n rows: [],\n done: false,\n },\n [],\n undefined\n )\n return rows\n }\n}\n"]}
@@ -1,17 +1,17 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.garnishPersonWithName = exports.findName = exports.hasName = void 0;
3
+ exports.hasName = hasName;
4
+ exports.findName = findName;
5
+ exports.garnishPersonWithName = garnishPersonWithName;
4
6
  const models = require("../../icc-api/model/models");
5
7
  function hasName(person, nameUse) {
6
8
  var _a;
7
9
  return (_a = person.names) === null || _a === void 0 ? void 0 : _a.some((n) => n.use === nameUse);
8
10
  }
9
- exports.hasName = hasName;
10
11
  function findName(person, nameUse) {
11
12
  var _a;
12
13
  return (_a = person.names) === null || _a === void 0 ? void 0 : _a.find((n) => n.use === nameUse);
13
14
  }
14
- exports.findName = findName;
15
15
  function garnishPersonWithName(person, nameUse, lastName, firstName, fullName = `${lastName} ${firstName !== null && firstName !== void 0 ? firstName : ''}`) {
16
16
  var _a;
17
17
  return Object.assign(Object.assign({}, person), { names: ((_a = person.names) !== null && _a !== void 0 ? _a : []).concat([
@@ -23,5 +23,4 @@ function garnishPersonWithName(person, nameUse, lastName, firstName, fullName =
23
23
  }),
24
24
  ]) });
25
25
  }
26
- exports.garnishPersonWithName = garnishPersonWithName;
27
26
  //# sourceMappingURL=person-util.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"person-util.js","sourceRoot":"","sources":["../../../icc-x-api/utils/person-util.ts"],"names":[],"mappings":";;;AAAA,qDAAoD;AAEpD,SAAgB,OAAO,CAAC,MAA+C,EAAE,OAAkC;;IACzG,OAAO,MAAA,MAAM,CAAC,KAAK,0CAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,OAAO,CAAC,CAAA;AACrD,CAAC;AAFD,0BAEC;AAED,SAAgB,QAAQ,CAAC,MAA+C,EAAE,OAAkC;;IAC1G,OAAO,MAAA,MAAM,CAAC,KAAK,0CAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,OAAO,CAAC,CAAA;AACrD,CAAC;AAFD,4BAEC;AAED,SAAgB,qBAAqB,CACnC,MAAS,EACT,OAAkC,EAClC,QAAiB,EACjB,SAAkB,EAClB,WAAmB,GAAG,QAAQ,IAAI,SAAS,aAAT,SAAS,cAAT,SAAS,GAAI,EAAE,EAAE;;IAEnD,uCACK,MAAM,KACT,KAAK,EAAE,CAAC,MAAA,MAAM,CAAC,KAAK,mCAAI,EAAE,CAAC,CAAC,MAAM,CAAC;YACjC,IAAI,MAAM,CAAC,UAAU,CAAC;gBACpB,QAAQ,EAAE,QAAQ;gBAClB,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE;gBACxC,IAAI,EAAE,QAAQ;gBACd,GAAG,EAAE,OAAO;aACb,CAAC;SACH,CAAC,IACH;AACH,CAAC;AAlBD,sDAkBC","sourcesContent":["import * as models from '../../icc-api/model/models'\n\nexport function hasName(person: models.Patient | models.HealthcareParty, nameUse: models.PersonName.UseEnum) {\n return person.names?.some((n) => n.use === nameUse)\n}\n\nexport function findName(person: models.Patient | models.HealthcareParty, nameUse: models.PersonName.UseEnum): models.PersonName | undefined {\n return person.names?.find((n) => n.use === nameUse)\n}\n\nexport function garnishPersonWithName<P extends models.Patient | models.HealthcareParty>(\n person: P,\n nameUse: models.PersonName.UseEnum,\n lastName?: string,\n firstName?: string,\n fullName: string = `${lastName} ${firstName ?? ''}`\n): P {\n return {\n ...person,\n names: (person.names ?? []).concat([\n new models.PersonName({\n lastName: lastName,\n firstNames: firstName ? [firstName] : [],\n text: fullName,\n use: nameUse,\n }),\n ]),\n }\n}\n"]}
1
+ {"version":3,"file":"person-util.js","sourceRoot":"","sources":["../../../icc-x-api/utils/person-util.ts"],"names":[],"mappings":";;AAEA,0BAEC;AAED,4BAEC;AAED,sDAkBC;AA5BD,qDAAoD;AAEpD,SAAgB,OAAO,CAAC,MAA+C,EAAE,OAAkC;;IACzG,OAAO,MAAA,MAAM,CAAC,KAAK,0CAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,OAAO,CAAC,CAAA;AACrD,CAAC;AAED,SAAgB,QAAQ,CAAC,MAA+C,EAAE,OAAkC;;IAC1G,OAAO,MAAA,MAAM,CAAC,KAAK,0CAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,OAAO,CAAC,CAAA;AACrD,CAAC;AAED,SAAgB,qBAAqB,CACnC,MAAS,EACT,OAAkC,EAClC,QAAiB,EACjB,SAAkB,EAClB,WAAmB,GAAG,QAAQ,IAAI,SAAS,aAAT,SAAS,cAAT,SAAS,GAAI,EAAE,EAAE;;IAEnD,uCACK,MAAM,KACT,KAAK,EAAE,CAAC,MAAA,MAAM,CAAC,KAAK,mCAAI,EAAE,CAAC,CAAC,MAAM,CAAC;YACjC,IAAI,MAAM,CAAC,UAAU,CAAC;gBACpB,QAAQ,EAAE,QAAQ;gBAClB,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE;gBACxC,IAAI,EAAE,QAAQ;gBACd,GAAG,EAAE,OAAO;aACb,CAAC;SACH,CAAC,IACH;AACH,CAAC","sourcesContent":["import * as models from '../../icc-api/model/models'\n\nexport function hasName(person: models.Patient | models.HealthcareParty, nameUse: models.PersonName.UseEnum) {\n return person.names?.some((n) => n.use === nameUse)\n}\n\nexport function findName(person: models.Patient | models.HealthcareParty, nameUse: models.PersonName.UseEnum): models.PersonName | undefined {\n return person.names?.find((n) => n.use === nameUse)\n}\n\nexport function garnishPersonWithName<P extends models.Patient | models.HealthcareParty>(\n person: P,\n nameUse: models.PersonName.UseEnum,\n lastName?: string,\n firstName?: string,\n fullName: string = `${lastName} ${firstName ?? ''}`\n): P {\n return {\n ...person,\n names: (person.names ?? []).concat([\n new models.PersonName({\n lastName: lastName,\n firstNames: firstName ? [firstName] : [],\n text: fullName,\n use: nameUse,\n }),\n ]),\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"proxy-utils.js","sourceRoot":"","sources":["../../../icc-x-api/utils/proxy-utils.ts"],"names":[],"mappings":";;;AAAA,MAAM,cAAc,GAAG;IACrB,iBAAiB,EAAE,iBAAiB;IACpC,qBAAqB,EAAE,yBAAyB;CACjD,CAAA;AAED,MAAM,gBAAgB,GAAG;IACvB,iBAAiB,EAAE,mBAAmB;IACtC,qBAAqB,EAAE,2BAA2B;CACnD,CAAA;AAED,SAAS,OAAO,CAAC,IAAY,EAAE,WAAsC;IACnE,KAAK,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;QAC9D,IAAI,IAAI,CAAC,UAAU,CAAC,WAAW,QAAQ,EAAE,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,QAAQ,EAAE,CAAC,EAAE;YAClF,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,kBAAkB,QAAQ,EAAE,CAAC,EAAE,QAAQ,QAAQ,EAAE,CAAC,CAAA;SAC9E;KACF;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAEM,MAAM,UAAU,GAAG,CAAC,IAAY,EAAU,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,cAAc,CAAC,CAAA;AAApE,QAAA,UAAU,cAA0D;AAC1E,MAAM,YAAY,GAAG,CAAC,IAAY,EAAU,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAA;AAAxE,QAAA,YAAY,gBAA4D","sourcesContent":["const samRedirectMap = {\n 'api.icure.cloud': 'sam.icure.cloud',\n 'nightly.icure.cloud': 'nightly-sam.icure.cloud',\n}\n\nconst kmehrRedirectMap = {\n 'api.icure.cloud': 'kmehr.icure.cloud',\n 'nightly.icure.cloud': 'nightly-kmehr.icure.cloud',\n}\n\nfunction mapHost(host: string, redirectMap: { [key: string]: string }): string {\n for (const [original, redirect] of Object.entries(redirectMap)) {\n if (host.startsWith(`https://${original}`) || host.startsWith(`wss://${original}`)) {\n return host.replace(RegExp(`^(https|wss)://${original}`), `$1://${redirect}`)\n }\n }\n return host\n}\n\nexport const mapSamHost = (host: string): string => mapHost(host, samRedirectMap)\nexport const mapKmehrHost = (host: string): string => mapHost(host, kmehrRedirectMap)\n"]}
1
+ {"version":3,"file":"proxy-utils.js","sourceRoot":"","sources":["../../../icc-x-api/utils/proxy-utils.ts"],"names":[],"mappings":";;;AAAA,MAAM,cAAc,GAAG;IACrB,iBAAiB,EAAE,iBAAiB;IACpC,qBAAqB,EAAE,yBAAyB;CACjD,CAAA;AAED,MAAM,gBAAgB,GAAG;IACvB,iBAAiB,EAAE,mBAAmB;IACtC,qBAAqB,EAAE,2BAA2B;CACnD,CAAA;AAED,SAAS,OAAO,CAAC,IAAY,EAAE,WAAsC;IACnE,KAAK,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;QAC/D,IAAI,IAAI,CAAC,UAAU,CAAC,WAAW,QAAQ,EAAE,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,QAAQ,EAAE,CAAC,EAAE,CAAC;YACnF,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,kBAAkB,QAAQ,EAAE,CAAC,EAAE,QAAQ,QAAQ,EAAE,CAAC,CAAA;QAC/E,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAEM,MAAM,UAAU,GAAG,CAAC,IAAY,EAAU,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,cAAc,CAAC,CAAA;AAApE,QAAA,UAAU,cAA0D;AAC1E,MAAM,YAAY,GAAG,CAAC,IAAY,EAAU,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAA;AAAxE,QAAA,YAAY,gBAA4D","sourcesContent":["const samRedirectMap = {\n 'api.icure.cloud': 'sam.icure.cloud',\n 'nightly.icure.cloud': 'nightly-sam.icure.cloud',\n}\n\nconst kmehrRedirectMap = {\n 'api.icure.cloud': 'kmehr.icure.cloud',\n 'nightly.icure.cloud': 'nightly-kmehr.icure.cloud',\n}\n\nfunction mapHost(host: string, redirectMap: { [key: string]: string }): string {\n for (const [original, redirect] of Object.entries(redirectMap)) {\n if (host.startsWith(`https://${original}`) || host.startsWith(`wss://${original}`)) {\n return host.replace(RegExp(`^(https|wss)://${original}`), `$1://${redirect}`)\n }\n }\n return host\n}\n\nexport const mapSamHost = (host: string): string => mapHost(host, samRedirectMap)\nexport const mapKmehrHost = (host: string): string => mapHost(host, kmehrRedirectMap)\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"simple-lru-cache.js","sourceRoot":"","sources":["../../../icc-x-api/utils/simple-lru-cache.ts"],"names":[],"mappings":"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","sourcesContent":["export class SimpleLruCache<K, V> {\n private readonly nodesMap: Map<K, CacheNode<K, V>> = new Map()\n private firstNode: CacheNode<K, V> | null = null\n private lastNode: CacheNode<K, V> | null = null\n\n get size(): number {\n return this.nodesMap.size\n }\n\n /**\n * Get a value if is cached. Note: null values are indistinguishable from absent value\n */\n getCached(key: K): V | null {\n const retrieved = this.nodesMap.get(key)\n if (retrieved !== undefined) {\n this.markUsed(retrieved)\n return retrieved.value\n } else {\n return null\n }\n }\n\n set(key: K, value: V) {\n const retrieved = this.nodesMap.get(key)\n if (retrieved !== undefined) {\n this.markUsed(retrieved)\n retrieved.value = value\n } else {\n const newNode: CacheNode<K, V> = {\n key: key,\n value: value,\n previous: null,\n next: null,\n }\n this.addToTail(key, newNode)\n }\n }\n\n /**\n * Fully empties this cache.\n */\n clear() {\n this.firstNode = null\n this.lastNode = null\n this.nodesMap.clear()\n }\n\n evictLeastRecentlyUsed(): V {\n const node = this.firstNode\n if (node == null) throw new Error('Internal error: no node left to evict')\n this.evict(node.key, node)\n return node.value\n }\n\n private addToTail(updateKey: K | null, node: CacheNode<K, V>) {\n node.previous = this.lastNode\n node.next = null\n if (this.lastNode) this.lastNode.next = node\n this.lastNode = node\n if (this.firstNode === null) this.firstNode = node\n if (updateKey != null) this.nodesMap.set(updateKey, node)\n }\n\n private evict(updateKey: K | null, node: CacheNode<K, V>) {\n if (node.previous) node.previous.next = node.next\n if (node.next) node.next.previous = node.previous\n if (this.firstNode === node) this.firstNode = node.next\n if (this.lastNode === node) this.lastNode = node.previous\n if (updateKey !== null) {\n this.nodesMap.delete(updateKey)\n }\n }\n\n private markUsed(node: CacheNode<K, V>) {\n if (node !== this.lastNode) {\n // No need to modify the nodes map\n this.evict(null, node)\n this.addToTail(null, node)\n }\n }\n}\n\ntype CacheNode<K, V> = {\n readonly key: K\n previous: CacheNode<K, V> | null\n next: CacheNode<K, V> | null\n value: V\n}\n"]}
1
+ {"version":3,"file":"simple-lru-cache.js","sourceRoot":"","sources":["../../../icc-x-api/utils/simple-lru-cache.ts"],"names":[],"mappings":"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","sourcesContent":["export class SimpleLruCache<K, V> {\n private readonly nodesMap: Map<K, CacheNode<K, V>> = new Map()\n private firstNode: CacheNode<K, V> | null = null\n private lastNode: CacheNode<K, V> | null = null\n\n get size(): number {\n return this.nodesMap.size\n }\n\n /**\n * Get a value if is cached. Note: null values are indistinguishable from absent value\n */\n getCached(key: K): V | null {\n const retrieved = this.nodesMap.get(key)\n if (retrieved !== undefined) {\n this.markUsed(retrieved)\n return retrieved.value\n } else {\n return null\n }\n }\n\n set(key: K, value: V) {\n const retrieved = this.nodesMap.get(key)\n if (retrieved !== undefined) {\n this.markUsed(retrieved)\n retrieved.value = value\n } else {\n const newNode: CacheNode<K, V> = {\n key: key,\n value: value,\n previous: null,\n next: null,\n }\n this.addToTail(key, newNode)\n }\n }\n\n /**\n * Fully empties this cache.\n */\n clear() {\n this.firstNode = null\n this.lastNode = null\n this.nodesMap.clear()\n }\n\n evictLeastRecentlyUsed(): V {\n const node = this.firstNode\n if (node == null) throw new Error('Internal error: no node left to evict')\n this.evict(node.key, node)\n return node.value\n }\n\n private addToTail(updateKey: K | null, node: CacheNode<K, V>) {\n node.previous = this.lastNode\n node.next = null\n if (this.lastNode) this.lastNode.next = node\n this.lastNode = node\n if (this.firstNode === null) this.firstNode = node\n if (updateKey != null) this.nodesMap.set(updateKey, node)\n }\n\n private evict(updateKey: K | null, node: CacheNode<K, V>) {\n if (node.previous) node.previous.next = node.next\n if (node.next) node.next.previous = node.previous\n if (this.firstNode === node) this.firstNode = node.next\n if (this.lastNode === node) this.lastNode = node.previous\n if (updateKey !== null) {\n this.nodesMap.delete(updateKey)\n }\n }\n\n private markUsed(node: CacheNode<K, V>) {\n if (node !== this.lastNode) {\n // No need to modify the nodes map\n this.evict(null, node)\n this.addToTail(null, node)\n }\n }\n}\n\ntype CacheNode<K, V> = {\n readonly key: K\n previous: CacheNode<K, V> | null\n next: CacheNode<K, V> | null\n value: V\n}\n"]}
@@ -8,11 +8,11 @@ const knownBases = {
8
8
  // pragma: allowlist nextline secret
9
9
  base62: '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz',
10
10
  // pragma: allowlist nextline secret
11
- base58: '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz',
11
+ base58: '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz', // Bitcoin base58
12
12
  // pragma: allowlist nextline secret
13
13
  base36: '0123456789abcdefghijklmnopqrstuvwxyz',
14
14
  // pragma: allowlist nextline secret
15
- base32: '0123456789abcdefghjkmnpqrstvwxyz',
15
+ base32: '0123456789abcdefghjkmnpqrstvwxyz', // Crockford's base32
16
16
  // pragma: allowlist nextline secret
17
17
  base16: '0123456789abcdef',
18
18
  // pragma: allowlist nextline secret
@@ -1 +1 @@
1
- {"version":3,"file":"uuid-encoder.js","sourceRoot":"","sources":["../../../icc-x-api/utils/uuid-encoder.ts"],"names":[],"mappings":"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","sourcesContent":["import * as bigInt from 'big-integer'\n\nconst knownBases: { [key: string]: string } = {\n // pragma: allowlist nextline secret\n base64: '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz+/',\n // pragma: allowlist nextline secret\n base62: '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz',\n // pragma: allowlist nextline secret\n base58: '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz', // Bitcoin base58\n // pragma: allowlist nextline secret\n base36: '0123456789abcdefghijklmnopqrstuvwxyz',\n // pragma: allowlist nextline secret\n base32: '0123456789abcdefghjkmnpqrstvwxyz', // Crockford's base32\n // pragma: allowlist nextline secret\n base16: '0123456789abcdef',\n // pragma: allowlist nextline secret\n base10: '0123456789',\n base2: '01',\n}\n\nconst caseSensitiveBases: { [key: string]: boolean } = {\n base62: true,\n base58: true,\n base36: false,\n base32: false,\n base16: false,\n base10: true,\n base2: true,\n}\n\nexport class UuidEncoder {\n private encStr: string = knownBases.base36\n private isCaseSensitive = false\n private base = 36\n /**\n * @public\n * @param [baseEncodingStr] A string containing all usable letters for encoding\n * @constructor\n */\n constructor(baseEncodingStr = 'base36') {\n this.setBaseEncodingStr(baseEncodingStr)\n }\n\n /**\n * Set encoding base\n * @param {string} baseEncodingStr A string containing all usable letters for encoding\n * @public\n */\n setBaseEncodingStr(baseEncodingStr: string) {\n this.encStr = UuidEncoder.resolveEncodingStr(baseEncodingStr)\n this.isCaseSensitive = UuidEncoder.isCaseSensitiveBase(baseEncodingStr)\n this.base = this.encStr.length\n }\n\n /**\n * @private\n * @param {string} baseEncodingStr\n * @returns {string}\n */\n static resolveEncodingStr(baseEncodingStr: string) {\n return Object.prototype.hasOwnProperty.call(knownBases, baseEncodingStr) ? knownBases[baseEncodingStr] : baseEncodingStr\n }\n\n /**\n * @public\n * @param baseEncodingStr\n * @returns {boolean}\n */\n static isCaseSensitiveBase(baseEncodingStr: string) {\n return Object.prototype.hasOwnProperty.call(caseSensitiveBases, baseEncodingStr) ? caseSensitiveBases[baseEncodingStr] : true\n }\n\n /**\n * Encode a UUID\n * @param {string} uuid Properly formatted UUID\n * @returns {string} Encoded UUID\n * @public\n */\n encode(uuid: string) {\n const cleanUuid = uuid.replace(/-/g, '')\n const { base, encStr } = this\n\n let iUuid = bigInt(cleanUuid, 16)\n let str = ''\n\n do {\n str = encStr.substr(iUuid.mod(base).valueOf(), 1) + str\n iUuid = iUuid.divide(base)\n } while (iUuid.greater(0))\n\n return str\n }\n\n /**\n * Decode an encoded UUID\n * @public\n * @param {string} str Previously encoded string\n * @returns {string} Properly formatted UUID\n * @throws Throws an {Error} when encountering invalid data\n */\n decode(str: string) {\n let iUuid = bigInt(0)\n\n const { base, encStr } = this\n const len = str.length\n const finalStr = this.isCaseSensitive ? str : str.toLowerCase()\n\n for (let pos = 0; pos < len; pos += 1) {\n const ch = finalStr.substr(pos, 1)\n const encPos = encStr.indexOf(ch)\n\n if (encPos < 0) {\n throw new Error('Invalid encoded data')\n }\n\n iUuid = iUuid.add(encPos)\n\n if (pos < len - 1) {\n iUuid = iUuid.multiply(base)\n }\n }\n\n const uuid = iUuid.toString(16).padStart(32, '0')\n\n return `${uuid.substr(0, 8)}-${uuid.substr(8, 4)}-${uuid.substr(12, 4)}-${uuid.substr(16, 4)}-${uuid.substr(20)}`\n }\n}\n"]}
1
+ {"version":3,"file":"uuid-encoder.js","sourceRoot":"","sources":["../../../icc-x-api/utils/uuid-encoder.ts"],"names":[],"mappings":"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","sourcesContent":["import * as bigInt from 'big-integer'\n\nconst knownBases: { [key: string]: string } = {\n // pragma: allowlist nextline secret\n base64: '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz+/',\n // pragma: allowlist nextline secret\n base62: '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz',\n // pragma: allowlist nextline secret\n base58: '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz', // Bitcoin base58\n // pragma: allowlist nextline secret\n base36: '0123456789abcdefghijklmnopqrstuvwxyz',\n // pragma: allowlist nextline secret\n base32: '0123456789abcdefghjkmnpqrstvwxyz', // Crockford's base32\n // pragma: allowlist nextline secret\n base16: '0123456789abcdef',\n // pragma: allowlist nextline secret\n base10: '0123456789',\n base2: '01',\n}\n\nconst caseSensitiveBases: { [key: string]: boolean } = {\n base62: true,\n base58: true,\n base36: false,\n base32: false,\n base16: false,\n base10: true,\n base2: true,\n}\n\nexport class UuidEncoder {\n private encStr: string = knownBases.base36\n private isCaseSensitive = false\n private base = 36\n /**\n * @public\n * @param [baseEncodingStr] A string containing all usable letters for encoding\n * @constructor\n */\n constructor(baseEncodingStr = 'base36') {\n this.setBaseEncodingStr(baseEncodingStr)\n }\n\n /**\n * Set encoding base\n * @param {string} baseEncodingStr A string containing all usable letters for encoding\n * @public\n */\n setBaseEncodingStr(baseEncodingStr: string) {\n this.encStr = UuidEncoder.resolveEncodingStr(baseEncodingStr)\n this.isCaseSensitive = UuidEncoder.isCaseSensitiveBase(baseEncodingStr)\n this.base = this.encStr.length\n }\n\n /**\n * @private\n * @param {string} baseEncodingStr\n * @returns {string}\n */\n static resolveEncodingStr(baseEncodingStr: string) {\n return Object.prototype.hasOwnProperty.call(knownBases, baseEncodingStr) ? knownBases[baseEncodingStr] : baseEncodingStr\n }\n\n /**\n * @public\n * @param baseEncodingStr\n * @returns {boolean}\n */\n static isCaseSensitiveBase(baseEncodingStr: string) {\n return Object.prototype.hasOwnProperty.call(caseSensitiveBases, baseEncodingStr) ? caseSensitiveBases[baseEncodingStr] : true\n }\n\n /**\n * Encode a UUID\n * @param {string} uuid Properly formatted UUID\n * @returns {string} Encoded UUID\n * @public\n */\n encode(uuid: string) {\n const cleanUuid = uuid.replace(/-/g, '')\n const { base, encStr } = this\n\n let iUuid = bigInt(cleanUuid, 16)\n let str = ''\n\n do {\n str = encStr.substr(iUuid.mod(base).valueOf(), 1) + str\n iUuid = iUuid.divide(base)\n } while (iUuid.greater(0))\n\n return str\n }\n\n /**\n * Decode an encoded UUID\n * @public\n * @param {string} str Previously encoded string\n * @returns {string} Properly formatted UUID\n * @throws Throws an {Error} when encountering invalid data\n */\n decode(str: string) {\n let iUuid = bigInt(0)\n\n const { base, encStr } = this\n const len = str.length\n const finalStr = this.isCaseSensitive ? str : str.toLowerCase()\n\n for (let pos = 0; pos < len; pos += 1) {\n const ch = finalStr.substr(pos, 1)\n const encPos = encStr.indexOf(ch)\n\n if (encPos < 0) {\n throw new Error('Invalid encoded data')\n }\n\n iUuid = iUuid.add(encPos)\n\n if (pos < len - 1) {\n iUuid = iUuid.multiply(base)\n }\n }\n\n const uuid = iUuid.toString(16).padStart(32, '0')\n\n return `${uuid.substr(0, 8)}-${uuid.substr(8, 4)}-${uuid.substr(12, 4)}-${uuid.substr(16, 4)}-${uuid.substr(20)}`\n }\n}\n"]}
@@ -1,4 +1,3 @@
1
- /// <reference types="node" />
2
1
  import { Patient } from '../../icc-api/model/Patient';
3
2
  import { AbstractFilter } from '../filters/filters';
4
3
  import { User } from '../../icc-api/model/User';
@@ -9,7 +9,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
9
9
  });
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.WebSocketWrapper = exports.subscribeToEntityEvents = void 0;
12
+ exports.WebSocketWrapper = void 0;
13
+ exports.subscribeToEntityEvents = subscribeToEntityEvents;
13
14
  const WebSocketNode = require("ws");
14
15
  const User_1 = require("../../icc-api/model/User");
15
16
  const browser_or_node_1 = require("browser-or-node");
@@ -79,7 +80,6 @@ function subscribeToEntityEvents(basePath, authApi, entityClass, eventTypes, fil
79
80
  }
80
81
  }), options.debug);
81
82
  }
82
- exports.subscribeToEntityEvents = subscribeToEntityEvents;
83
83
  class WebSocketWrapper {
84
84
  constructor(url, authProvider, maxRetries = 3, retryDelay = 1000, statusCallbacks = {}, messageCallback = () => { }, debug = false) {
85
85
  this.url = url;
@@ -223,8 +223,8 @@ class WebSocketAuthProviderImpl {
223
223
  this.authApi = authApi;
224
224
  }
225
225
  getBearerToken() {
226
- var _a;
227
226
  return __awaiter(this, void 0, void 0, function* () {
227
+ var _a;
228
228
  const headers = yield this.authApi.authenticationProvider.getAuthService().getAuthHeaders();
229
229
  return (_a = headers.find((header) => header.header === 'Authorization' && header.data.startsWith('Bearer '))) === null || _a === void 0 ? void 0 : _a.data;
230
230
  });