@icure/api 8.0.78 → 8.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. package/icc-x-api/crypto/ExchangeKeysManager.d.ts +1 -0
  2. package/icc-x-api/crypto/ExchangeKeysManager.js +26 -16
  3. package/icc-x-api/crypto/ExchangeKeysManager.js.map +1 -1
  4. package/icc-x-api/crypto/ExtendedApisUtils.d.ts +47 -2
  5. package/icc-x-api/crypto/ExtendedApisUtils.js.map +1 -1
  6. package/icc-x-api/crypto/ExtendedApisUtilsImpl.d.ts +8 -1
  7. package/icc-x-api/crypto/ExtendedApisUtilsImpl.js +81 -2
  8. package/icc-x-api/crypto/ExtendedApisUtilsImpl.js.map +1 -1
  9. package/icc-x-api/crypto/SecretIdUseOption.d.ts +60 -0
  10. package/icc-x-api/crypto/SecretIdUseOption.js +60 -0
  11. package/icc-x-api/crypto/SecretIdUseOption.js.map +1 -0
  12. package/icc-x-api/icc-accesslog-x-api.d.ts +2 -1
  13. package/icc-x-api/icc-accesslog-x-api.js +2 -3
  14. package/icc-x-api/icc-accesslog-x-api.js.map +1 -1
  15. package/icc-x-api/icc-calendar-item-x-api.d.ts +26 -3
  16. package/icc-x-api/icc-calendar-item-x-api.js +51 -16
  17. package/icc-x-api/icc-calendar-item-x-api.js.map +1 -1
  18. package/icc-x-api/icc-classification-x-api.d.ts +2 -1
  19. package/icc-x-api/icc-classification-x-api.js +2 -3
  20. package/icc-x-api/icc-classification-x-api.js.map +1 -1
  21. package/icc-x-api/icc-contact-x-api.d.ts +3 -2
  22. package/icc-x-api/icc-contact-x-api.js +5 -8
  23. package/icc-x-api/icc-contact-x-api.js.map +1 -1
  24. package/icc-x-api/icc-crypto-x-api.d.ts +1 -7
  25. package/icc-x-api/icc-crypto-x-api.js +1 -8
  26. package/icc-x-api/icc-crypto-x-api.js.map +1 -1
  27. package/icc-x-api/icc-document-x-api.d.ts +2 -1
  28. package/icc-x-api/icc-document-x-api.js +3 -6
  29. package/icc-x-api/icc-document-x-api.js.map +1 -1
  30. package/icc-x-api/icc-form-x-api.d.ts +2 -1
  31. package/icc-x-api/icc-form-x-api.js +2 -3
  32. package/icc-x-api/icc-form-x-api.js.map +1 -1
  33. package/icc-x-api/icc-helement-x-api.d.ts +3 -2
  34. package/icc-x-api/icc-helement-x-api.js +5 -8
  35. package/icc-x-api/icc-helement-x-api.js.map +1 -1
  36. package/icc-x-api/icc-invoice-x-api.d.ts +2 -1
  37. package/icc-x-api/icc-invoice-x-api.js +2 -3
  38. package/icc-x-api/icc-invoice-x-api.js.map +1 -1
  39. package/icc-x-api/icc-message-x-api.d.ts +2 -1
  40. package/icc-x-api/icc-message-x-api.js +2 -3
  41. package/icc-x-api/icc-message-x-api.js.map +1 -1
  42. package/icc-x-api/icc-patient-x-api.js +4 -6
  43. package/icc-x-api/icc-patient-x-api.js.map +1 -1
  44. package/icc-x-api/icc-topic-x-api.d.ts +2 -1
  45. package/icc-x-api/icc-topic-x-api.js +3 -2
  46. package/icc-x-api/icc-topic-x-api.js.map +1 -1
  47. package/icc-x-api/index.js +1 -3
  48. package/icc-x-api/index.js.map +1 -1
  49. package/package.json +1 -1
  50. package/test/icc-x-api/confidential-entities-test.js +49 -6
  51. package/test/icc-x-api/confidential-entities-test.js.map +1 -1
  52. package/test/icc-x-api/crypto/cryptoTest.js +5 -3
  53. package/test/icc-x-api/crypto/cryptoTest.js.map +1 -1
  54. package/test/icc-x-api/crypto/full-crypto-test.js +0 -2
  55. package/test/icc-x-api/crypto/full-crypto-test.js.map +1 -1
  56. package/test/icc-x-api/crypto/shamir.js +3 -1
  57. package/test/icc-x-api/crypto/shamir.js.map +1 -1
  58. package/test/icc-x-api/diocancaro.d.ts +1 -0
  59. package/test/icc-x-api/diocancaro.js +75 -0
  60. package/test/icc-x-api/diocancaro.js.map +1 -0
  61. package/test/icc-x-api/icc-calendar-item-x-api.js +1 -1
  62. package/test/icc-x-api/icc-calendar-item-x-api.js.map +1 -1
  63. package/test/icc-x-api/icc-contact-x-api.js +4 -2
  64. package/test/icc-x-api/icc-contact-x-api.js.map +1 -1
  65. package/test/icc-x-api/icc-helement-x-api-test.js +3 -1
  66. package/test/icc-x-api/icc-helement-x-api-test.js.map +1 -1
  67. package/icc-x-api/crypto/ConfidentialEntities.d.ts +0 -64
  68. package/icc-x-api/crypto/ConfidentialEntities.js +0 -112
  69. package/icc-x-api/crypto/ConfidentialEntities.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"shamir.js","sourceRoot":"","sources":["../../../../test/icc-x-api/crypto/shamir.ts"],"names":[],"mappings":"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","sourcesContent":["import 'isomorphic-fetch'\nimport { ShamirClass, WebcryptoShamir } from '../../../icc-x-api/crypto/shamir'\nimport { expect } from 'chai'\nimport 'mocha'\nimport { IcureApi, RSAUtilsImpl, ShaVersion, ua2hex } from '../../../icc-x-api'\nimport {\n createHcpHierarchyApis,\n getEnvironmentInitializer,\n hcp1Username,\n hcp2Username,\n hcp3Username,\n setLocalStorage,\n TestUtils,\n} from '../../utils/test_utils'\nimport initApi = TestUtils.initApi\nimport { before } from 'mocha'\nimport { testStorageWithKeys } from '../../utils/TestStorage'\nimport { webcrypto } from 'crypto'\nimport { TestCryptoStrategies } from '../../utils/TestCryptoStrategies'\nimport { FilterChainMaintenanceTask } from '../../../icc-api/model/FilterChainMaintenanceTask'\nimport { MaintenanceTaskAfterDateFilter } from '../../../icc-x-api/filters/MaintenanceTaskAfterDateFilter'\nimport { KeyPairUpdateRequest } from '../../../icc-x-api/maintenance/KeyPairUpdateRequest'\nimport { RSAUtils } from '../../../icc-x-api/crypto/RSA'\nimport { getEnvVariables, TestVars } from '@icure/test-setup/types'\nimport { fingerprintV1, fingerprintV1toV2, fingerprintV2 } from '../../../icc-x-api/crypto/utils'\n\n// Data was randomly generated, not based on any real key\nconst data =\n '77b3bb3ac6852a388b2aea8ba1794e63c95a87d10753afbdf8672b607b0ca7c03b39b30b2303bc417de1c78b326cf52810469914ea7dd8128b9f2e5d8f376cdb16b75a8e9dffb12b7c839d6fcf9ef8b6e220ab7973ad76e057038988d9a084f06a9d83cc9c3ee998ad0fcc317bb6c7a1bed8126ceb8463d59e84b50087d15d293970606cfe61f874e3f4efb182107aa971304a88b9821e74b1e6c88e7d0bb8882ab0ba35591e4e8d829fb973a26b480fe7432537b025c1177077689e86b5ff65b39a9d618e1cd8c129ae2b2a981664074301e9265e9842ec0c9e9a95f27a1066336578e06e3f3373d3a98b3b8182e55accc6795bbe9aaaf758179d09eccecc8a21f9f77e660a99e0e652cf39077ef083020d9c9d479fb6751de39e29feb7bcf9c73ee9e9d25f54683d55a82768f603b910b40ccb006d96c25f23ccf88e620c20d5495e11e83859d38bb5314a763c76149b3bcf6d987e6e98b83583f028fd6cfc363cb544673eb5d6cf5a7f9887d78a5a5d5b0a862ca3127a6d359a1a2ea8f332360fb7c4a8fe855eac200735322cd322eab431e659377ad9f9289a2d97152598333f4ca97e8003bdbc2d8b714a72a3bdd4f1b124674d6c2eda71b59f07f073de030795c562658c1a63e03d7de12f6ff57e328f83e05462c588ec7371af9b19f726f04162db61860e2c40e3d01b46cdab6f38a526ba555d09bdbde5702d6ae977f38e51314b20d333e84e645fc08ccc59be6e87aa349ec30e9b3a6c06c9b58693b8d67e8a7259be86b240431f44fb75c05d6a8578ffced3514fecc10e5ed7a052c85484d8b86276f7cd74a57402d79e0de85cb8006272b4c61d6f71ebe6cb039c0604fd4ab6bf2e5c686c5cb10be41a06087c3a598c6115153ad0ff6fd6644de8838b877b63a1c9ad348806e6e5e4962630ce84926b0596028c9bf4fb78cad55a0c7dac4e1b46eef6f76cea2707afc5499c055e56b9545501029b714cff01e3aea3ae955607b686d21f6c453bd6291627cad9502a1d200deb13ca47f45aae1a88c7ee288d5e59c10ea5aecdd681c1f30b67720ba045c6a1174b4b1bf2ba5af90a22d6be4f281d946666015dda5ad79a20bd0c7c43c4e52ddbe10776464e76ae2e883bc5cd2ba965c775227b3ce482f1f764a95a99888ca68c023a530df6ebe0193742f233db700a100cd568342a3d4bd648ee18b6d1de8a9b7cefdcee7858feb886c013286fbafd489d57a46f70b1b676bf6a7cf74a52f13c6d09a7b23cff8a366e78d35c5c69952445739fe1cf5a5815c111808d731d37f6a33f477cee2dcfbaccba65a43e1e1b5dad4c81549a1ebef5ac1bb5814cdf58ba5849ec66095f1e3bb5a1ea48f9fa746553c15580cf98f1a06f630d0b86b95711f3d9381d50711c1f6b8e63e677c77a21a772b921935ccb17a017ce4955e8fcf8fca4bb72e9c4457bf80c471004083676b1410e697b15db4ae9026b9dd2bc222faf9e68a9e4a2eb7bf1ffbd23b23500b1f97e49f1348f64a467fae59a0d2a34c4a7d084d445a86018a48aedad5b0f7b523e5e1af3d3d66a9323cd4fd1a6f1d78611a85204fb5baf09c5b3c559e6e7b574cec7d3a62d81f3b36c43f93de072fa8477b898e824aa18cf971983f931257dccd902fac7766ef934a2e942dfe6a4bb06b103fba46e77d15e780cc58ccc343b83b310f548f46e8a49ed1750722dade4c9acb8cbc0c0fa0de153'\nconst shares = [\n '801231b3513d19f3eaa4dad6cbb40fe4fa000a0df070eda11224feda86242674698a8fa533db9790d9dbc195ca209d012ed20fb1f8c31bb4d27873521036c820f508efd74c566e73975956e54ba00174e6979a6f29ff026a452f8899d5376779020050cd5cc4d05e8c27e545fa6eb4ef25f78df9b4a3ee38ee227b26e41c71356c3408e6da6013ea1981145c7a67d1106f391d78dfd7c8b91d0aebe30901de9646e9db7f74883d05228082b71d0489c9f1214bf8910124e5be4fead82b170faa2d046ef33c27da7a6c1ff8a4c875698eea3f5a1d685ba98674ed69beaa3c2eebce9732ca3c930f5c35a3747953e6ebeae58f976cc090016ecfb5604bf65d0b87ffe4aa5ee6cc57f69b3653397857b41116141b88f3b7942a88eb98dc160d0059267300e351c740461bb440ff329ff3f1abf3b2a75f3b603b6e48165c8c032b0c1b025fed43645af4bcfe9cdfdba00aec8627f82b8c72815a00431acd2b253891085c5f47064bfa015231c62a1711a4ac6792eb39c5c2820e0d6cc2d959874302494add79ac668fa6fb226a25a3b76caafb702eb5cf63ea05e8a5506ea9fcda3530ea22f9bc9602f476868db253cc1ce9b9cd311a67613c90fad0524587ccfb43e1b36133c69e4663b2bc1f157eeda3c7e64c54b17881a485ca6434d09ef6800036fccea47be3f31c21fe015844563015153743df86f98e60f2aef6d5ee7b969818c186160117e524b9b3c2299feb934d0a08f07978447672bf021e15c40d92721694566889df7826631bae3314075e1a1db00767e1d8e7b009c66a3adaf7260c7db97a2244cafca971a7adb5d1babbb115fb178acf08e2d70640bd123538a7f71947b714a38c2b20654feb3b92f261e64481354580570ada0884951ae24684983b1b012ea66901da7f5a0df3057b3f8f0db2519bf2e02c24b109a318d4af4ce5db59f08edad34c8fbd0189c93dd91f73b19c1f6614302d6c94129d7f12671e7c8af884a932932aa59a22442191f806515c5c3facadb6d7f9ab1ae2d178976a1b35b7578a0fed708bba2da6e795a945126d0c9c5e31e945b1e17db4467a2717ccc55dcc03a11325ab5027b613416642bcdc40d9fd495f6939d2cd93bfbaaa81eac6af48ef8e07a8bcf1afc2bc0e1dd5dbfe9622c881c56176e004c0a93faa7ecb0c1aa63d980ee3832ee7ce7d2460618a52471aa2f54477ee97cb23a10c1c183ad243159839c50efacf15ec07961ddd5a7bd68205ea071695486c4801fc77f79372441a353ad23c17397976d4ffd87b5ba2ae189ec496b6de3a6648a90a8a7ba870bcbf307a847205cf3e76222e1cda233a1d96140df29b70480462eb48674925045668c2605efd0777b1fe4aab30a961d3b937bb938962849b9a70fc7def66f837e5a3509fda88e571d631f5aa53d2faa3403a8f9da43ddfd75318721ed6a70c00179696b1ba1ecaa27e7495193cbceffb7e50ff9778ecfa2c0d7525c91b7b9c3e13b9defd5d132eacbdd8d4494bab9b097cd1f0f61356e2635f6428e3d32206d4874c6aa04ee27e3b61495b491d5b855133d9ad19591cfa6a1f58acf101db2427fa4d8eca7dc69dd9c9ebab86d171adbcf1020973ad07b966e6872dd2128e7898c15538695cb80b71a8dace9561b9672639e08406f21a11cefa788c2e950d49fec187d4fb6b4e8ae95763f518c2341d9df697ab7ab87d665eabf28951cbf7aedef2139',\n '802bb4d49a350355bf17d5d888ef07ebb785be0321a99f45052578da97781985baf80a14120a4ca53805efd6a0ec53136a6d5c05192f509216b18f76f09c64338988d3a34e80ca3fc09fbf58adca1229f6e603532415b3e5ded28491c7674d1301e84ab2c80f99e88622d1b1c513f4e305887dd98331e731881b07a31c81a3a7cc1ebae004151b5e7b3aa2ff543fd5c010587ba32ebf72abf3367937d6a661ffbd21fc44f7159c35bee305da1eb588b00f197bbced404b8e099ee5e0d4c6918d5699c406454775efb5b6105eb32fa52ed054f5802fd64941bc6345de8e1a4dc3fcdd332473e398b364c793f0e6a6448c8da5f9556faac7d619ac507107da425cd24e519db5c694a355f1d86b5f73635894b5cb91596f9f58484a35f121af3df11cd1e4381327b50f7e1f965d4b0e5224cf353e8e78e1a3b6a7430d1eaa64488b9c7e0c32be8fa9631c6fbf8ce7bd0b087d53f131227c69da2462a358c626101c0a8ab59b9b55a82c1de8475db77866883934b60ab80ed53b4224a87ce8553d692c7ed3888c5972c7e6ed825845bb25639c98ce68bb0b4426c0d7a08412b423fda3d0efa16e70658bffe6e9803fe38e032048e779ff68fd6123d1fa257239dd7bf97730a79eac8f2f96b25f4ececd851cab99c31099b49d337323eb859242f1e8253a795b5c42886f7ae9cad580706f226180e79004023efb8a7c495971350e5c5773925699d37b92abf232f95cbc547b2ac3fa094f62d360810be979d0ef01ea23a034bb8146778e830f47cbf26ce9a7024fcd1d6d6c361223c9d0aafdeb0a0699da86c80d424ada0365d62edea06bfa9ec09c9729d143bcf75dbbc37cf24b21cd02a4e41f1bb709974a87958d0d8b3f50f500edb2b946523fe85d6a02ebb823c16c42635d1c1dc8c02c9928a31cb23347817658e7cbb8caa6f1cbceeccefb0cb6e2945d443f6f0365468e1bfe119d3a337fd2e844641ec5219be34d94a5377d45f07149499e3cb1cc54d2df0637dd2633f1c7cb4423ba98b087fc8c0372ab2d9a4f4b985f0306815edaf2b94dae983fe7461a462e8d52c5888dae1555d3545db71cd7866daf2cac2d2ef07f820dbec9dddbe88afe6e76fa5f08332c23b74c8146a086a34e757a2f804c9aa5d1a79db6d90e6ceb508f6fda86bf3c073b8747b9f6a995a5ad9e41d5f8544e9e0d8f7e14935b53120c56406845f02893e46bba020243a3ca7139ab2a642ed1da217d3c197de68d14677e40253e777f204473e3010d90d622d19ea7fe72d52ad2cfc798dbe31758ecaec114527e2603da3169128dcdc5db997b1b89a69e04679b303950c02f2c9683ce1b0c71ca1756948276e3cc0c69314b0b218fe5b2b331deb05634fa279053e202c9a54e4a1525752f6dc024f5e613bceb63da013e9b66dfc853ac7805c1ea1c998df9d6dd5ea06dccffd2e56adc126ea007c80415a7fbbbeacf57bcd433090b4cf2f062f08f073712272108da2672254a301a8401908dc0832719d90624371b086d5f2a0742b9ddf17b8678de11b83fad7934e30c65ad14bce2c695bb11229ccb357c3f72ec84fd84a91c00097e6f4df74f3a260fb383af46d163e0564750bf73e0babb4578fc0121d349bc115a70c9268d0a39c7926ea8168cb102f15df4e0b734d961e1d54f5e39c0392c097d7377a48872a14d3dd080a2f64841ad6253e6e5f0890edead0d2e7112b1e694a63be',\n '8039921cf0bbb6ce071087bcedf3b218d963889b79a462912dfa598663ea3841190e8602bae16905da1a399d76b47d348bedd2b0887d05811948d49d124f74e00a4d8d1f777e4d93acd45e75dfbcefa4fffaf71e075d26b54c9309782ac8a7f00ba71cd64cf78075e49cbe24c3be57b74c05ebcdb6b4c7b12004256db3cddaefb5f82191d873c7527d3cf89c60a31cf178cbf1c8f5c0318acfdbd9cab32f58b94040a590883ef4a1788b5f44f8263b5f4ab8ce304e121469ebc0783f8958764c246bf1ccd0b6b7741425fa6099e865215c2bdbad591f852e4ca0eca9cd8f3c0f934c62d818fe910ca253dab32df3177e467fc2f5c8af7d517cb645bb8857d717c16259dccc7d2535675985370bd7473e6da9e0397311df0b3bc6fcf30e40a243416d78a8ac7e686c90ed55772313d75a04fd1d226716738b10673eb01aa8eb61a7be5e8b680aed14250c1be86f09a6873c1540a912f83107c2c83216b53c2a02d41929bf564a145ea484ed8207904a592603f8e6cd6435ff7e6fcc76e873dc81ea072d91db43b7eef59a02bfe67f1aebaadace763776cbb05fdf6f7832ea20b9c1634e6b262cf097895bbff0b498864db3be0b2c831b87850fc345c7eeacd6471ff9b1a4216e9f6a7ccfe665b3f7f8c9bb2ac042c9cd07b3ff6b87dbcb836b11a259c59023b756c543772949ca1b5e83186d12bc08a9db3e2d02245741199a12e1256b787dd78a041f72ce5425123b3eec0e9196df5c065bd2391edfb222ff036d5d595e6f71a88d7bfc82dce25a43f2a8a3cfac24e35e5ec73aae6eeb0cc9e79e66d06f01c53df555ad074c454d9066f2db55982d59a74cda516707bed452ba647cd390f343374200e0aa28da34fa6755d4552ff14bd44e263d9bddef5bc1ddbea9cb754302aa28a3ec47932609e3e2035144cffd62b25e4e98401f872e0065c0eec4144428c238b6a868a40d6af2337eb7544e05b1583cf0d96e1b31d6e6f1d1321fda9258766f3e1bb708539c6615fecf84ca7c97ccb31b43af61df9a849c4e50906cb266a3ef78e7be0434dab531957a306f3fde132803e16ee79e4b6834ddd1b9a8a758fb86a44f200cd6b659d878393aa770f5238ddf181e83ee79a98ceaed26cf7c2e0029e7bf2f4bf80986250887386944e39624acd33c8da11de61c44b2a0ec1ab39fe1d612802e7f6c5d3d15a12d3e18995a9b3a92bcfc15b945bd5feb3e3e49ce232b04efb408cd2616481d5764e72ab622155908f1f1227f375d8777aaf066795e2fd2fe185109e1ff75e4381c63725f75bd973f2140cf94a7c76182c862a7c5b842b08fcb6dd630c342fede5a5678b183cc779891fb54d7ca7cf9dce2d375dbfd7d62449aa80e3e91627b3362afa1907fa144fe4ab4c10373dbd3c246549287359838ef4d5d499267b76a30aa9278cd515785c237d5999e5b752e9c3b78d5ccd68e34bee43ae3157ce272f9f764fd33c1b31ea088eb3db6c4deca8274e44cbf3289fd264a832ef3a10af912a0945027a91ac75197881ae5e0248c977e1da3ed032dc0b1c7aa1450a02d8c8bc90d06917aaa058bbd4bf08888919474be98016762d5ad2d24e8bd3a7095f58d64723fde63050c363c577a4f458e2817dc80d7ee2120e1e679f6ac417f0338f75e4a25eb3d1a649f5cc228ef72828aa9132393bbf0e8e7d28844b560f31ad8305a9cea4fd6b25e4a656cac654a47ea8a3d4',\n '804b7acd1c25024cabe3468cb1d9a9b62d9cc506b9acab173873873cf8c11eb89723a0643fa37858e21b85d7d44567b7ac25cc1c60b5d2835fef2071c89b575c893a0f5cc5db6ee8b6868fd4323ae1556574e3092508952ff36aaadc52f19f07ab62ec166cb0e2c53b162a5dfd28b709f16f3c6672ef7dcbb6955811e552afa54b6f0bda5d8ad171c78852877522a90c65990a8bd7a647994ce800565d928f84e2775e88af9991ec7be785b38274cb9ff13a0c8548ca823563920328d36b52250c94c7985d3f501cd3dcbb06e74371ea549695afdd623a61e1dcb3b3048b1f6877f57cdd710c2a6ba435555a13676e85ee635bed1f3b1272db83a5d2c7446fa250bbbe58d86bd46b77a885d5c3531a129b1250639f1abe460c79578f20254b3711197fec3f23e0765e6547d2d841f4b7e909bf7058cd882e957f691a4cd4977f305b2e484aacbf3b1f8eeb6c8bc5b56723b9144a1c5a29a32e93211ef6ac0bf48d5c6175f738b7543163975f03fb8f9ba17bbf0379bf853f3dc03117cc8e6f420544649e6293a3d25608acd282f22e43e88fcca256699989f86204e1d3301fd8730065f80cd6a1874488b7b897933c5f4b3405f0a485cffb8d1cd74f0e0292c717604b5db39fe05c0b50ed21937d5c0f9f903749dcfb96343f1a14e0e08603f792fcf85a2d3110b43ca66d87ed8ef87a38de4b1e6dfa183ebe4fe830afbb6bda48591d9c5f9679563dc2b5e58054706d2d6ee5bd3a4a49a0c96ec44d840be2213022a166554119d3db14a9ed718b4fb0c97061765c626c8a2c966ff49d46a8df4d11240317775712fac30b85083f30ab0e99cda6b1c7cebcbc6aed2f8df5cbfba1f6434cdb36238ca18279832ec1614f6ce47c6b4b998d5b6c988173ab595bfc239fa860735cb117fb480cc2d069aa39e9a9886fc9790228afef2ad08fdfb2b004f0b8758fc0e8dfab8b6fc17757a16537de26023e6be05dc40f9507d69fb28c316522dc734c894462c54618c7b033f7536cec432104eb5449aa61e50446e9b698b264fc33cce60af1601b0c4737e4328c334aeeed33ede2b8eade8723336fcbfe75ca062ea29e9ccd99f05982c4566a6df360e6f1c7d9b9fd106af106bc9c7b96264ce4f3c675345e126477e84e4c72f6a4dc5f4a1d027176bddf4b0323f2f2ceecfdebebf5d3eb87cb26353820927ac0dd00036b6bb08baadbf72984f6819ae86af8bad1f44ef423801683e4f39b0d583c24a3fe8d9e2641a083397fa9b06a9643360de82100aba32fc5251ff81a96b84bb044af38137220f41954197beda08cb7d0ad581a7311b28be59238d541423f300282b270edaf9fa9169f41bc61b42163e818b0ce4be07d37b3b42cbd41a58f8dc346a7ed649b97a5fbf34c5aa4436ba145c5f234c24f1285e882cd19bff4d3581e6ca874aeb79369225f514b7fdaf15d0fa7d128428dacbbc1ef9797fbafceb5a811a748ef8019d44e69852b9346f100966a29e2c9aa04047a09ae8b4f928bba3f4a0e6340a51a111403868c286101c5541aa6a0be2bef4685723f42617b365abbe2be3d88a676c80648a28951354f1508b0473de6f1f59c24bb2e9c0e2545b6c793207b2ebafe78dca6c0054d7c8e23c848873829b707ab8fc24b8416c150f4dc9be9137d9b6d296e13f24a2e5f1ad45ef07736b9f5068a11a7efcdf089acd21f175f9880f3eb008e112db5f870fc18470',\n '80595c0576abb7d713e414e8d4c51c45437af39ee1a156c310aca6600c533f7c34d52c7297485df80004539c021d49904da542a9f1e7879050167b9a2a48478f0aff51e0fc25e944dacd6ef9404c1cd86c6817440640007f612b2735bf5e75e4a12dba72e848fb5859a845c8fb85145db8e2aa72476a5d4b1e8a7adf4a1ed6ed328990ab81ec0d7dc18e08e441be603d0d0a80e00cd904b87005a0ab381bb6c21f16075cd0b2f978bd8fdf2d64e77870b49bb909eb98ddd281cc9ef78ef5b5e47e66f252c8ce9287724f5138cd84b1e5d8e9bb82ababf60e111f1ac4471e6ea418642d211a1123d462a11c19d8323d7725b9604db83ea8f5be99b01848c9fae94397b619a1d065fd4500d88997f73e74620e7bcbb564fe157ff59e8d0fcad4854ca5e37c807a3d15b09784f8b05c71c922c19cdc473a5813225b5ab4fc1834950b9b7cf19c29fb4c26ed4f08037118e862ffa5d22cde717ec839b05085b631ea53cffd513a270b26880f3d80b313a34abe4cf1ef0cd565fb018b551dcca88eaac33d9a87358966fb457f2c35213611cbdecdccbcda14161f676acb1df36e1c9c11b3c432448a349b3235e1c81ce83411d8c2e9a5d8f6b51fa10e68ad929799fbf1eeca5e0c5df019e12d540aee4721da8f23341b8c820cb4b35278beb947990e159f449152c4ce1e05388e1ba7e5c9db4133be326151fdfb1931853e9f97ff94fe0fe4b2bb9288c089424948f9fa1f28eba38e22aa749c9b9a5c33ebe6c61cc87edfcc83bb76c6d023e76cfa61bde5e5639c63c715ed04c6c86511308ba16b3e4aad72a41bf0203dac0bdae793d2cb37628204a9b54f2a4c916631eb4fd3d26008883438376ea3c73628543e79f8101769c529a9086b1f47754d47c446e922025c5a21766d4206f79888d279557cfbe8ad79baf8d3d008bc4786a101e43f49d972fce83c8fd745e47865897e842cce6c7a16a0a47fbea6a4154d185173ec6300a5a74c4fa88ac39a908a23cf921b88c49e52af4219b09d7fe26e3208d8aec6074cadbf08dea94364d75d57b13e43c93cfe0f60c7fc60ac0f33861e75e8ab53a294b8a428e45549b644f8202ad67fb17bc811b2cb7f5c8cce7d00475ecb7279763a6bec88c19d0f3239e1d199c1e057e1272d88dd5e71fb8f5cd1dfc199b953577cf7c8a25cd80ddfa98de8854ac3b15346277e2f7fa4aa78d5b9634675247e25b5c2654ee903c6f54341735108a8b15c388dcd50b345fc1626df0de819a564361ca44adf5fc6f97a0304f7a6d9de7d38bf64f4cb73a6729dc9ed3bcee78658ea20f0c35684c442f59c004964dedcd2c0eec2ce5704da62122226d1f0971d4804d4d63b80ce343978adc018c292d5e43dd32ef20b04b4be74994e9432a23417bc4d85102d8bd02dd614f1c3004cd8743bbca95ee249340636cbf5b5e7042af64ab51d26b1a4e35c078da2de6e9e4dd0f1687f567e1689de51f7fbc1b5aaba7690e1a490ab2f6de1a7f8b2bd4a035ff741748ca8c55629b695da023a566d124e3d53439238a83489e52392efcc97f007c301c0507373998e3301af3ffed6a8c5a4d21fd965b115be02570283fcd5771d50e67cf35e6c45f704b7361cf09b99414eb76e6401765b02ae21df989cf149d8c0995e76317bcc99e0e8637d8fe36565f199003ea440053bbcac654963f85b4bd2d980166d5027df4f6be7e653f0c203d1823441a',\n]\n\nconst crypto = webcrypto as any\nsetLocalStorage(fetch)\n\ndescribe('Shamir split', () => {\n it('should return 5 splits', () => {\n const result = new WebcryptoShamir(crypto).share(data, 5, 3)\n expect(result.length).to.equal(5)\n })\n\n it('should be able to split and recombine a private key', async () => {\n const rsa = new RSAUtilsImpl(crypto)\n const key = ua2hex(await rsa.exportKey((await rsa.generateKeyPair(ShaVersion.Sha256)).privateKey, 'pkcs8'))\n const shamir = new WebcryptoShamir(crypto)\n const splits = shamir.share(key, 4, 3)\n const combined = shamir.combine([splits[1], splits[0], splits[3]])\n expect(combined).to.equal(key)\n })\n})\n\ndescribe('Shamir combine', () => {\n it('should return combined data from all shares', () => {\n expect(new WebcryptoShamir(crypto).combine(shares)).to.equal(data)\n })\n\n it('should return combined data with some shares', () => {\n for (let i = 0; i < 4; i++) {\n for (let j = i + 1; j < 5; j++) {\n expect(new WebcryptoShamir(crypto).combine(shares.filter((x, idx) => idx !== i && idx !== j))).to.equal(data)\n }\n }\n })\n\n it('should fail miserably because it has not enough shares', () => {\n for (let i = 0; i < 4; i++) {\n for (let j = i + 1; j < 5; j++) {\n expect(new WebcryptoShamir(crypto).combine(shares.filter((x, idx) => idx === i && idx === j))).to.equal('')\n }\n }\n })\n})\n\ndescribe('Shamir key recovery', async function () {\n this.timeout(600000)\n let env: TestVars\n\n before(async function () {\n const initializer = await getEnvironmentInitializer()\n env = await initializer.execute(getEnvVariables())\n })\n\n it('should automatically load recoverable keys on startup', async () => {\n const hierarchyApis = await createHcpHierarchyApis(env)\n const api = hierarchyApis.childApi\n const user = hierarchyApis.childUser\n const notariesApis = [\n await initApi(env, hcp1Username),\n await initApi(env, hcp2Username),\n await initApi(env, hcp3Username),\n hierarchyApis.child2Api,\n ]\n const notariesIds = (await Promise.all(notariesApis.map((x) => x.healthcarePartyApi.getCurrentHealthcareParty()))).map((x) => x.id!)\n const pat = await api.patientApi.initConfidentialSecretId(await api.patientApi.newInstance(user), user)\n const descr = 'Confidential info'\n const confidentialData = await api.healthcareElementApi.createHealthElementWithUser(\n user,\n await api.healthcareElementApi.newInstance(user, pat, { descr }, { confidential: true })\n )\n await api.cryptoApi.shamirKeysManager.updateSelfSplits(\n { [fingerprintV1(hierarchyApis.childCredentials.publicKey)]: { notariesIds, minShares: 3 } },\n []\n )\n const lostKeyStorage = await testStorageWithKeys([\n {\n dataOwnerId: hierarchyApis.grandCredentials.dataOwnerId,\n pairs: [\n {\n keyPair: { privateKey: hierarchyApis.grandCredentials.privateKey, publicKey: hierarchyApis.grandCredentials.publicKey },\n shaVersion: ShaVersion.Sha1,\n },\n ],\n },\n {\n dataOwnerId: hierarchyApis.parentCredentials.dataOwnerId,\n pairs: [\n {\n keyPair: { privateKey: hierarchyApis.parentCredentials.privateKey, publicKey: hierarchyApis.parentCredentials.publicKey },\n shaVersion: ShaVersion.Sha1,\n },\n ],\n },\n ])\n const newKey = await api.cryptoApi.primitives.RSA.generateKeyPair(ShaVersion.Sha256)\n const lostKeyApi = await IcureApi.initialise(\n env.iCureUrl,\n {\n username: hierarchyApis.childCredentials.user,\n password: hierarchyApis.childCredentials.password,\n },\n new TestCryptoStrategies(newKey),\n webcrypto as any,\n fetch,\n {\n storage: lostKeyStorage.storage,\n keyStorage: lostKeyStorage.keyStorage,\n entryKeysFactory: lostKeyStorage.keyFactory,\n }\n )\n const lostUser = await lostKeyApi.userApi.getCurrentUser()\n const lostPatient = await lostKeyApi.patientApi.getPatientWithUser(lostUser, pat.id!)\n\n async function checkNotRecovered() {\n await lostKeyApi.cryptoApi.forceReload()\n expect(Object.keys(lostKeyApi.cryptoApi.userKeysManager.getDecryptionKeys())).to.have.length(3)\n expect(await lostKeyApi.healthcareElementApi.findBy(lostUser.healthcarePartyId!, lostPatient)).to.be.empty\n }\n\n async function giveBackAccess(notaryId: number) {\n const notaryApi = notariesApis[notaryId]\n await notaryApi.cryptoApi.forceReload()\n const delegateUser = await notaryApi.userApi.getCurrentUser()\n const notifications = (\n await notaryApi.maintenanceTaskApi.filterMaintenanceTasksByWithUser(\n delegateUser!,\n undefined,\n undefined,\n new FilterChainMaintenanceTask({\n filter: new MaintenanceTaskAfterDateFilter({\n date: new Date().getTime() - 100000,\n }),\n })\n )\n ).rows!.map((x) => KeyPairUpdateRequest.fromMaintenanceTask(x))\n const filteredNotifications = notifications.filter((x) => x.concernedDataOwnerId === lostUser.healthcarePartyId)\n expect(filteredNotifications).to.have.length(1)\n await notaryApi.icureMaintenanceTaskApi.applyKeyPairUpdate(filteredNotifications[0])\n }\n\n await checkNotRecovered()\n await giveBackAccess(0)\n await checkNotRecovered()\n await giveBackAccess(1)\n await checkNotRecovered()\n await giveBackAccess(2)\n await giveBackAccess(3)\n await lostKeyApi.cryptoApi.forceReload()\n expect(Object.keys(lostKeyApi.cryptoApi.userKeysManager.getDecryptionKeys())).to.have.length(4)\n const retrievedAfterRecovery = await lostKeyApi.healthcareElementApi.findBy(lostUser.healthcarePartyId!, lostPatient)\n expect(retrievedAfterRecovery).to.have.length(1)\n expect(retrievedAfterRecovery[0].descr).to.equal(descr)\n })\n})\n"]}
1
+ {"version":3,"file":"shamir.js","sourceRoot":"","sources":["../../../../test/icc-x-api/crypto/shamir.ts"],"names":[],"mappings":"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","sourcesContent":["import 'isomorphic-fetch'\nimport { ShamirClass, WebcryptoShamir } from '../../../icc-x-api/crypto/shamir'\nimport { expect } from 'chai'\nimport 'mocha'\nimport { IcureApi, RSAUtilsImpl, ShaVersion, ua2hex } from '../../../icc-x-api'\nimport {\n createHcpHierarchyApis,\n getEnvironmentInitializer,\n hcp1Username,\n hcp2Username,\n hcp3Username,\n setLocalStorage,\n TestUtils,\n} from '../../utils/test_utils'\nimport initApi = TestUtils.initApi\nimport { before } from 'mocha'\nimport { testStorageWithKeys } from '../../utils/TestStorage'\nimport { webcrypto } from 'crypto'\nimport { TestCryptoStrategies } from '../../utils/TestCryptoStrategies'\nimport { FilterChainMaintenanceTask } from '../../../icc-api/model/FilterChainMaintenanceTask'\nimport { MaintenanceTaskAfterDateFilter } from '../../../icc-x-api/filters/MaintenanceTaskAfterDateFilter'\nimport { KeyPairUpdateRequest } from '../../../icc-x-api/maintenance/KeyPairUpdateRequest'\nimport { RSAUtils } from '../../../icc-x-api/crypto/RSA'\nimport { getEnvVariables, TestVars } from '@icure/test-setup/types'\nimport { fingerprintV1, fingerprintV1toV2, fingerprintV2 } from '../../../icc-x-api/crypto/utils'\nimport { SecretIdUseOption } from '../../../icc-x-api/crypto/SecretIdUseOption'\nimport UseAnyConfidential = SecretIdUseOption.UseAnyConfidential\n\n// Data was randomly generated, not based on any real key\nconst data =\n '77b3bb3ac6852a388b2aea8ba1794e63c95a87d10753afbdf8672b607b0ca7c03b39b30b2303bc417de1c78b326cf52810469914ea7dd8128b9f2e5d8f376cdb16b75a8e9dffb12b7c839d6fcf9ef8b6e220ab7973ad76e057038988d9a084f06a9d83cc9c3ee998ad0fcc317bb6c7a1bed8126ceb8463d59e84b50087d15d293970606cfe61f874e3f4efb182107aa971304a88b9821e74b1e6c88e7d0bb8882ab0ba35591e4e8d829fb973a26b480fe7432537b025c1177077689e86b5ff65b39a9d618e1cd8c129ae2b2a981664074301e9265e9842ec0c9e9a95f27a1066336578e06e3f3373d3a98b3b8182e55accc6795bbe9aaaf758179d09eccecc8a21f9f77e660a99e0e652cf39077ef083020d9c9d479fb6751de39e29feb7bcf9c73ee9e9d25f54683d55a82768f603b910b40ccb006d96c25f23ccf88e620c20d5495e11e83859d38bb5314a763c76149b3bcf6d987e6e98b83583f028fd6cfc363cb544673eb5d6cf5a7f9887d78a5a5d5b0a862ca3127a6d359a1a2ea8f332360fb7c4a8fe855eac200735322cd322eab431e659377ad9f9289a2d97152598333f4ca97e8003bdbc2d8b714a72a3bdd4f1b124674d6c2eda71b59f07f073de030795c562658c1a63e03d7de12f6ff57e328f83e05462c588ec7371af9b19f726f04162db61860e2c40e3d01b46cdab6f38a526ba555d09bdbde5702d6ae977f38e51314b20d333e84e645fc08ccc59be6e87aa349ec30e9b3a6c06c9b58693b8d67e8a7259be86b240431f44fb75c05d6a8578ffced3514fecc10e5ed7a052c85484d8b86276f7cd74a57402d79e0de85cb8006272b4c61d6f71ebe6cb039c0604fd4ab6bf2e5c686c5cb10be41a06087c3a598c6115153ad0ff6fd6644de8838b877b63a1c9ad348806e6e5e4962630ce84926b0596028c9bf4fb78cad55a0c7dac4e1b46eef6f76cea2707afc5499c055e56b9545501029b714cff01e3aea3ae955607b686d21f6c453bd6291627cad9502a1d200deb13ca47f45aae1a88c7ee288d5e59c10ea5aecdd681c1f30b67720ba045c6a1174b4b1bf2ba5af90a22d6be4f281d946666015dda5ad79a20bd0c7c43c4e52ddbe10776464e76ae2e883bc5cd2ba965c775227b3ce482f1f764a95a99888ca68c023a530df6ebe0193742f233db700a100cd568342a3d4bd648ee18b6d1de8a9b7cefdcee7858feb886c013286fbafd489d57a46f70b1b676bf6a7cf74a52f13c6d09a7b23cff8a366e78d35c5c69952445739fe1cf5a5815c111808d731d37f6a33f477cee2dcfbaccba65a43e1e1b5dad4c81549a1ebef5ac1bb5814cdf58ba5849ec66095f1e3bb5a1ea48f9fa746553c15580cf98f1a06f630d0b86b95711f3d9381d50711c1f6b8e63e677c77a21a772b921935ccb17a017ce4955e8fcf8fca4bb72e9c4457bf80c471004083676b1410e697b15db4ae9026b9dd2bc222faf9e68a9e4a2eb7bf1ffbd23b23500b1f97e49f1348f64a467fae59a0d2a34c4a7d084d445a86018a48aedad5b0f7b523e5e1af3d3d66a9323cd4fd1a6f1d78611a85204fb5baf09c5b3c559e6e7b574cec7d3a62d81f3b36c43f93de072fa8477b898e824aa18cf971983f931257dccd902fac7766ef934a2e942dfe6a4bb06b103fba46e77d15e780cc58ccc343b83b310f548f46e8a49ed1750722dade4c9acb8cbc0c0fa0de153'\nconst shares = [\n '801231b3513d19f3eaa4dad6cbb40fe4fa000a0df070eda11224feda86242674698a8fa533db9790d9dbc195ca209d012ed20fb1f8c31bb4d27873521036c820f508efd74c566e73975956e54ba00174e6979a6f29ff026a452f8899d5376779020050cd5cc4d05e8c27e545fa6eb4ef25f78df9b4a3ee38ee227b26e41c71356c3408e6da6013ea1981145c7a67d1106f391d78dfd7c8b91d0aebe30901de9646e9db7f74883d05228082b71d0489c9f1214bf8910124e5be4fead82b170faa2d046ef33c27da7a6c1ff8a4c875698eea3f5a1d685ba98674ed69beaa3c2eebce9732ca3c930f5c35a3747953e6ebeae58f976cc090016ecfb5604bf65d0b87ffe4aa5ee6cc57f69b3653397857b41116141b88f3b7942a88eb98dc160d0059267300e351c740461bb440ff329ff3f1abf3b2a75f3b603b6e48165c8c032b0c1b025fed43645af4bcfe9cdfdba00aec8627f82b8c72815a00431acd2b253891085c5f47064bfa015231c62a1711a4ac6792eb39c5c2820e0d6cc2d959874302494add79ac668fa6fb226a25a3b76caafb702eb5cf63ea05e8a5506ea9fcda3530ea22f9bc9602f476868db253cc1ce9b9cd311a67613c90fad0524587ccfb43e1b36133c69e4663b2bc1f157eeda3c7e64c54b17881a485ca6434d09ef6800036fccea47be3f31c21fe015844563015153743df86f98e60f2aef6d5ee7b969818c186160117e524b9b3c2299feb934d0a08f07978447672bf021e15c40d92721694566889df7826631bae3314075e1a1db00767e1d8e7b009c66a3adaf7260c7db97a2244cafca971a7adb5d1babbb115fb178acf08e2d70640bd123538a7f71947b714a38c2b20654feb3b92f261e64481354580570ada0884951ae24684983b1b012ea66901da7f5a0df3057b3f8f0db2519bf2e02c24b109a318d4af4ce5db59f08edad34c8fbd0189c93dd91f73b19c1f6614302d6c94129d7f12671e7c8af884a932932aa59a22442191f806515c5c3facadb6d7f9ab1ae2d178976a1b35b7578a0fed708bba2da6e795a945126d0c9c5e31e945b1e17db4467a2717ccc55dcc03a11325ab5027b613416642bcdc40d9fd495f6939d2cd93bfbaaa81eac6af48ef8e07a8bcf1afc2bc0e1dd5dbfe9622c881c56176e004c0a93faa7ecb0c1aa63d980ee3832ee7ce7d2460618a52471aa2f54477ee97cb23a10c1c183ad243159839c50efacf15ec07961ddd5a7bd68205ea071695486c4801fc77f79372441a353ad23c17397976d4ffd87b5ba2ae189ec496b6de3a6648a90a8a7ba870bcbf307a847205cf3e76222e1cda233a1d96140df29b70480462eb48674925045668c2605efd0777b1fe4aab30a961d3b937bb938962849b9a70fc7def66f837e5a3509fda88e571d631f5aa53d2faa3403a8f9da43ddfd75318721ed6a70c00179696b1ba1ecaa27e7495193cbceffb7e50ff9778ecfa2c0d7525c91b7b9c3e13b9defd5d132eacbdd8d4494bab9b097cd1f0f61356e2635f6428e3d32206d4874c6aa04ee27e3b61495b491d5b855133d9ad19591cfa6a1f58acf101db2427fa4d8eca7dc69dd9c9ebab86d171adbcf1020973ad07b966e6872dd2128e7898c15538695cb80b71a8dace9561b9672639e08406f21a11cefa788c2e950d49fec187d4fb6b4e8ae95763f518c2341d9df697ab7ab87d665eabf28951cbf7aedef2139',\n '802bb4d49a350355bf17d5d888ef07ebb785be0321a99f45052578da97781985baf80a14120a4ca53805efd6a0ec53136a6d5c05192f509216b18f76f09c64338988d3a34e80ca3fc09fbf58adca1229f6e603532415b3e5ded28491c7674d1301e84ab2c80f99e88622d1b1c513f4e305887dd98331e731881b07a31c81a3a7cc1ebae004151b5e7b3aa2ff543fd5c010587ba32ebf72abf3367937d6a661ffbd21fc44f7159c35bee305da1eb588b00f197bbced404b8e099ee5e0d4c6918d5699c406454775efb5b6105eb32fa52ed054f5802fd64941bc6345de8e1a4dc3fcdd332473e398b364c793f0e6a6448c8da5f9556faac7d619ac507107da425cd24e519db5c694a355f1d86b5f73635894b5cb91596f9f58484a35f121af3df11cd1e4381327b50f7e1f965d4b0e5224cf353e8e78e1a3b6a7430d1eaa64488b9c7e0c32be8fa9631c6fbf8ce7bd0b087d53f131227c69da2462a358c626101c0a8ab59b9b55a82c1de8475db77866883934b60ab80ed53b4224a87ce8553d692c7ed3888c5972c7e6ed825845bb25639c98ce68bb0b4426c0d7a08412b423fda3d0efa16e70658bffe6e9803fe38e032048e779ff68fd6123d1fa257239dd7bf97730a79eac8f2f96b25f4ececd851cab99c31099b49d337323eb859242f1e8253a795b5c42886f7ae9cad580706f226180e79004023efb8a7c495971350e5c5773925699d37b92abf232f95cbc547b2ac3fa094f62d360810be979d0ef01ea23a034bb8146778e830f47cbf26ce9a7024fcd1d6d6c361223c9d0aafdeb0a0699da86c80d424ada0365d62edea06bfa9ec09c9729d143bcf75dbbc37cf24b21cd02a4e41f1bb709974a87958d0d8b3f50f500edb2b946523fe85d6a02ebb823c16c42635d1c1dc8c02c9928a31cb23347817658e7cbb8caa6f1cbceeccefb0cb6e2945d443f6f0365468e1bfe119d3a337fd2e844641ec5219be34d94a5377d45f07149499e3cb1cc54d2df0637dd2633f1c7cb4423ba98b087fc8c0372ab2d9a4f4b985f0306815edaf2b94dae983fe7461a462e8d52c5888dae1555d3545db71cd7866daf2cac2d2ef07f820dbec9dddbe88afe6e76fa5f08332c23b74c8146a086a34e757a2f804c9aa5d1a79db6d90e6ceb508f6fda86bf3c073b8747b9f6a995a5ad9e41d5f8544e9e0d8f7e14935b53120c56406845f02893e46bba020243a3ca7139ab2a642ed1da217d3c197de68d14677e40253e777f204473e3010d90d622d19ea7fe72d52ad2cfc798dbe31758ecaec114527e2603da3169128dcdc5db997b1b89a69e04679b303950c02f2c9683ce1b0c71ca1756948276e3cc0c69314b0b218fe5b2b331deb05634fa279053e202c9a54e4a1525752f6dc024f5e613bceb63da013e9b66dfc853ac7805c1ea1c998df9d6dd5ea06dccffd2e56adc126ea007c80415a7fbbbeacf57bcd433090b4cf2f062f08f073712272108da2672254a301a8401908dc0832719d90624371b086d5f2a0742b9ddf17b8678de11b83fad7934e30c65ad14bce2c695bb11229ccb357c3f72ec84fd84a91c00097e6f4df74f3a260fb383af46d163e0564750bf73e0babb4578fc0121d349bc115a70c9268d0a39c7926ea8168cb102f15df4e0b734d961e1d54f5e39c0392c097d7377a48872a14d3dd080a2f64841ad6253e6e5f0890edead0d2e7112b1e694a63be',\n '8039921cf0bbb6ce071087bcedf3b218d963889b79a462912dfa598663ea3841190e8602bae16905da1a399d76b47d348bedd2b0887d05811948d49d124f74e00a4d8d1f777e4d93acd45e75dfbcefa4fffaf71e075d26b54c9309782ac8a7f00ba71cd64cf78075e49cbe24c3be57b74c05ebcdb6b4c7b12004256db3cddaefb5f82191d873c7527d3cf89c60a31cf178cbf1c8f5c0318acfdbd9cab32f58b94040a590883ef4a1788b5f44f8263b5f4ab8ce304e121469ebc0783f8958764c246bf1ccd0b6b7741425fa6099e865215c2bdbad591f852e4ca0eca9cd8f3c0f934c62d818fe910ca253dab32df3177e467fc2f5c8af7d517cb645bb8857d717c16259dccc7d2535675985370bd7473e6da9e0397311df0b3bc6fcf30e40a243416d78a8ac7e686c90ed55772313d75a04fd1d226716738b10673eb01aa8eb61a7be5e8b680aed14250c1be86f09a6873c1540a912f83107c2c83216b53c2a02d41929bf564a145ea484ed8207904a592603f8e6cd6435ff7e6fcc76e873dc81ea072d91db43b7eef59a02bfe67f1aebaadace763776cbb05fdf6f7832ea20b9c1634e6b262cf097895bbff0b498864db3be0b2c831b87850fc345c7eeacd6471ff9b1a4216e9f6a7ccfe665b3f7f8c9bb2ac042c9cd07b3ff6b87dbcb836b11a259c59023b756c543772949ca1b5e83186d12bc08a9db3e2d02245741199a12e1256b787dd78a041f72ce5425123b3eec0e9196df5c065bd2391edfb222ff036d5d595e6f71a88d7bfc82dce25a43f2a8a3cfac24e35e5ec73aae6eeb0cc9e79e66d06f01c53df555ad074c454d9066f2db55982d59a74cda516707bed452ba647cd390f343374200e0aa28da34fa6755d4552ff14bd44e263d9bddef5bc1ddbea9cb754302aa28a3ec47932609e3e2035144cffd62b25e4e98401f872e0065c0eec4144428c238b6a868a40d6af2337eb7544e05b1583cf0d96e1b31d6e6f1d1321fda9258766f3e1bb708539c6615fecf84ca7c97ccb31b43af61df9a849c4e50906cb266a3ef78e7be0434dab531957a306f3fde132803e16ee79e4b6834ddd1b9a8a758fb86a44f200cd6b659d878393aa770f5238ddf181e83ee79a98ceaed26cf7c2e0029e7bf2f4bf80986250887386944e39624acd33c8da11de61c44b2a0ec1ab39fe1d612802e7f6c5d3d15a12d3e18995a9b3a92bcfc15b945bd5feb3e3e49ce232b04efb408cd2616481d5764e72ab622155908f1f1227f375d8777aaf066795e2fd2fe185109e1ff75e4381c63725f75bd973f2140cf94a7c76182c862a7c5b842b08fcb6dd630c342fede5a5678b183cc779891fb54d7ca7cf9dce2d375dbfd7d62449aa80e3e91627b3362afa1907fa144fe4ab4c10373dbd3c246549287359838ef4d5d499267b76a30aa9278cd515785c237d5999e5b752e9c3b78d5ccd68e34bee43ae3157ce272f9f764fd33c1b31ea088eb3db6c4deca8274e44cbf3289fd264a832ef3a10af912a0945027a91ac75197881ae5e0248c977e1da3ed032dc0b1c7aa1450a02d8c8bc90d06917aaa058bbd4bf08888919474be98016762d5ad2d24e8bd3a7095f58d64723fde63050c363c577a4f458e2817dc80d7ee2120e1e679f6ac417f0338f75e4a25eb3d1a649f5cc228ef72828aa9132393bbf0e8e7d28844b560f31ad8305a9cea4fd6b25e4a656cac654a47ea8a3d4',\n '804b7acd1c25024cabe3468cb1d9a9b62d9cc506b9acab173873873cf8c11eb89723a0643fa37858e21b85d7d44567b7ac25cc1c60b5d2835fef2071c89b575c893a0f5cc5db6ee8b6868fd4323ae1556574e3092508952ff36aaadc52f19f07ab62ec166cb0e2c53b162a5dfd28b709f16f3c6672ef7dcbb6955811e552afa54b6f0bda5d8ad171c78852877522a90c65990a8bd7a647994ce800565d928f84e2775e88af9991ec7be785b38274cb9ff13a0c8548ca823563920328d36b52250c94c7985d3f501cd3dcbb06e74371ea549695afdd623a61e1dcb3b3048b1f6877f57cdd710c2a6ba435555a13676e85ee635bed1f3b1272db83a5d2c7446fa250bbbe58d86bd46b77a885d5c3531a129b1250639f1abe460c79578f20254b3711197fec3f23e0765e6547d2d841f4b7e909bf7058cd882e957f691a4cd4977f305b2e484aacbf3b1f8eeb6c8bc5b56723b9144a1c5a29a32e93211ef6ac0bf48d5c6175f738b7543163975f03fb8f9ba17bbf0379bf853f3dc03117cc8e6f420544649e6293a3d25608acd282f22e43e88fcca256699989f86204e1d3301fd8730065f80cd6a1874488b7b897933c5f4b3405f0a485cffb8d1cd74f0e0292c717604b5db39fe05c0b50ed21937d5c0f9f903749dcfb96343f1a14e0e08603f792fcf85a2d3110b43ca66d87ed8ef87a38de4b1e6dfa183ebe4fe830afbb6bda48591d9c5f9679563dc2b5e58054706d2d6ee5bd3a4a49a0c96ec44d840be2213022a166554119d3db14a9ed718b4fb0c97061765c626c8a2c966ff49d46a8df4d11240317775712fac30b85083f30ab0e99cda6b1c7cebcbc6aed2f8df5cbfba1f6434cdb36238ca18279832ec1614f6ce47c6b4b998d5b6c988173ab595bfc239fa860735cb117fb480cc2d069aa39e9a9886fc9790228afef2ad08fdfb2b004f0b8758fc0e8dfab8b6fc17757a16537de26023e6be05dc40f9507d69fb28c316522dc734c894462c54618c7b033f7536cec432104eb5449aa61e50446e9b698b264fc33cce60af1601b0c4737e4328c334aeeed33ede2b8eade8723336fcbfe75ca062ea29e9ccd99f05982c4566a6df360e6f1c7d9b9fd106af106bc9c7b96264ce4f3c675345e126477e84e4c72f6a4dc5f4a1d027176bddf4b0323f2f2ceecfdebebf5d3eb87cb26353820927ac0dd00036b6bb08baadbf72984f6819ae86af8bad1f44ef423801683e4f39b0d583c24a3fe8d9e2641a083397fa9b06a9643360de82100aba32fc5251ff81a96b84bb044af38137220f41954197beda08cb7d0ad581a7311b28be59238d541423f300282b270edaf9fa9169f41bc61b42163e818b0ce4be07d37b3b42cbd41a58f8dc346a7ed649b97a5fbf34c5aa4436ba145c5f234c24f1285e882cd19bff4d3581e6ca874aeb79369225f514b7fdaf15d0fa7d128428dacbbc1ef9797fbafceb5a811a748ef8019d44e69852b9346f100966a29e2c9aa04047a09ae8b4f928bba3f4a0e6340a51a111403868c286101c5541aa6a0be2bef4685723f42617b365abbe2be3d88a676c80648a28951354f1508b0473de6f1f59c24bb2e9c0e2545b6c793207b2ebafe78dca6c0054d7c8e23c848873829b707ab8fc24b8416c150f4dc9be9137d9b6d296e13f24a2e5f1ad45ef07736b9f5068a11a7efcdf089acd21f175f9880f3eb008e112db5f870fc18470',\n '80595c0576abb7d713e414e8d4c51c45437af39ee1a156c310aca6600c533f7c34d52c7297485df80004539c021d49904da542a9f1e7879050167b9a2a48478f0aff51e0fc25e944dacd6ef9404c1cd86c6817440640007f612b2735bf5e75e4a12dba72e848fb5859a845c8fb85145db8e2aa72476a5d4b1e8a7adf4a1ed6ed328990ab81ec0d7dc18e08e441be603d0d0a80e00cd904b87005a0ab381bb6c21f16075cd0b2f978bd8fdf2d64e77870b49bb909eb98ddd281cc9ef78ef5b5e47e66f252c8ce9287724f5138cd84b1e5d8e9bb82ababf60e111f1ac4471e6ea418642d211a1123d462a11c19d8323d7725b9604db83ea8f5be99b01848c9fae94397b619a1d065fd4500d88997f73e74620e7bcbb564fe157ff59e8d0fcad4854ca5e37c807a3d15b09784f8b05c71c922c19cdc473a5813225b5ab4fc1834950b9b7cf19c29fb4c26ed4f08037118e862ffa5d22cde717ec839b05085b631ea53cffd513a270b26880f3d80b313a34abe4cf1ef0cd565fb018b551dcca88eaac33d9a87358966fb457f2c35213611cbdecdccbcda14161f676acb1df36e1c9c11b3c432448a349b3235e1c81ce83411d8c2e9a5d8f6b51fa10e68ad929799fbf1eeca5e0c5df019e12d540aee4721da8f23341b8c820cb4b35278beb947990e159f449152c4ce1e05388e1ba7e5c9db4133be326151fdfb1931853e9f97ff94fe0fe4b2bb9288c089424948f9fa1f28eba38e22aa749c9b9a5c33ebe6c61cc87edfcc83bb76c6d023e76cfa61bde5e5639c63c715ed04c6c86511308ba16b3e4aad72a41bf0203dac0bdae793d2cb37628204a9b54f2a4c916631eb4fd3d26008883438376ea3c73628543e79f8101769c529a9086b1f47754d47c446e922025c5a21766d4206f79888d279557cfbe8ad79baf8d3d008bc4786a101e43f49d972fce83c8fd745e47865897e842cce6c7a16a0a47fbea6a4154d185173ec6300a5a74c4fa88ac39a908a23cf921b88c49e52af4219b09d7fe26e3208d8aec6074cadbf08dea94364d75d57b13e43c93cfe0f60c7fc60ac0f33861e75e8ab53a294b8a428e45549b644f8202ad67fb17bc811b2cb7f5c8cce7d00475ecb7279763a6bec88c19d0f3239e1d199c1e057e1272d88dd5e71fb8f5cd1dfc199b953577cf7c8a25cd80ddfa98de8854ac3b15346277e2f7fa4aa78d5b9634675247e25b5c2654ee903c6f54341735108a8b15c388dcd50b345fc1626df0de819a564361ca44adf5fc6f97a0304f7a6d9de7d38bf64f4cb73a6729dc9ed3bcee78658ea20f0c35684c442f59c004964dedcd2c0eec2ce5704da62122226d1f0971d4804d4d63b80ce343978adc018c292d5e43dd32ef20b04b4be74994e9432a23417bc4d85102d8bd02dd614f1c3004cd8743bbca95ee249340636cbf5b5e7042af64ab51d26b1a4e35c078da2de6e9e4dd0f1687f567e1689de51f7fbc1b5aaba7690e1a490ab2f6de1a7f8b2bd4a035ff741748ca8c55629b695da023a566d124e3d53439238a83489e52392efcc97f007c301c0507373998e3301af3ffed6a8c5a4d21fd965b115be02570283fcd5771d50e67cf35e6c45f704b7361cf09b99414eb76e6401765b02ae21df989cf149d8c0995e76317bcc99e0e8637d8fe36565f199003ea440053bbcac654963f85b4bd2d980166d5027df4f6be7e653f0c203d1823441a',\n]\n\nconst crypto = webcrypto as any\nsetLocalStorage(fetch)\n\ndescribe('Shamir split', () => {\n it('should return 5 splits', () => {\n const result = new WebcryptoShamir(crypto).share(data, 5, 3)\n expect(result.length).to.equal(5)\n })\n\n it('should be able to split and recombine a private key', async () => {\n const rsa = new RSAUtilsImpl(crypto)\n const key = ua2hex(await rsa.exportKey((await rsa.generateKeyPair(ShaVersion.Sha256)).privateKey, 'pkcs8'))\n const shamir = new WebcryptoShamir(crypto)\n const splits = shamir.share(key, 4, 3)\n const combined = shamir.combine([splits[1], splits[0], splits[3]])\n expect(combined).to.equal(key)\n })\n})\n\ndescribe('Shamir combine', () => {\n it('should return combined data from all shares', () => {\n expect(new WebcryptoShamir(crypto).combine(shares)).to.equal(data)\n })\n\n it('should return combined data with some shares', () => {\n for (let i = 0; i < 4; i++) {\n for (let j = i + 1; j < 5; j++) {\n expect(new WebcryptoShamir(crypto).combine(shares.filter((x, idx) => idx !== i && idx !== j))).to.equal(data)\n }\n }\n })\n\n it('should fail miserably because it has not enough shares', () => {\n for (let i = 0; i < 4; i++) {\n for (let j = i + 1; j < 5; j++) {\n expect(new WebcryptoShamir(crypto).combine(shares.filter((x, idx) => idx === i && idx === j))).to.equal('')\n }\n }\n })\n})\n\ndescribe('Shamir key recovery', async function () {\n this.timeout(600000)\n let env: TestVars\n\n before(async function () {\n const initializer = await getEnvironmentInitializer()\n env = await initializer.execute(getEnvVariables())\n })\n\n it('should automatically load recoverable keys on startup', async () => {\n const hierarchyApis = await createHcpHierarchyApis(env)\n const api = hierarchyApis.childApi\n const user = hierarchyApis.childUser\n const notariesApis = [\n await initApi(env, hcp1Username),\n await initApi(env, hcp2Username),\n await initApi(env, hcp3Username),\n hierarchyApis.child2Api,\n ]\n const notariesIds = (await Promise.all(notariesApis.map((x) => x.healthcarePartyApi.getCurrentHealthcareParty()))).map((x) => x.id!)\n const pat = await api.patientApi.initConfidentialSecretId(await api.patientApi.newInstance(user), user)\n const descr = 'Confidential info'\n const confidentialData = await api.healthcareElementApi.createHealthElementWithUser(\n user,\n await api.healthcareElementApi.newInstance(user, pat, { descr }, { sfkOption: UseAnyConfidential, ignoreAutoDelegations: true })\n )\n await api.cryptoApi.shamirKeysManager.updateSelfSplits(\n { [fingerprintV1(hierarchyApis.childCredentials.publicKey)]: { notariesIds, minShares: 3 } },\n []\n )\n const lostKeyStorage = await testStorageWithKeys([\n {\n dataOwnerId: hierarchyApis.grandCredentials.dataOwnerId,\n pairs: [\n {\n keyPair: { privateKey: hierarchyApis.grandCredentials.privateKey, publicKey: hierarchyApis.grandCredentials.publicKey },\n shaVersion: ShaVersion.Sha1,\n },\n ],\n },\n {\n dataOwnerId: hierarchyApis.parentCredentials.dataOwnerId,\n pairs: [\n {\n keyPair: { privateKey: hierarchyApis.parentCredentials.privateKey, publicKey: hierarchyApis.parentCredentials.publicKey },\n shaVersion: ShaVersion.Sha1,\n },\n ],\n },\n ])\n const newKey = await api.cryptoApi.primitives.RSA.generateKeyPair(ShaVersion.Sha256)\n const lostKeyApi = await IcureApi.initialise(\n env.iCureUrl,\n {\n username: hierarchyApis.childCredentials.user,\n password: hierarchyApis.childCredentials.password,\n },\n new TestCryptoStrategies(newKey),\n webcrypto as any,\n fetch,\n {\n storage: lostKeyStorage.storage,\n keyStorage: lostKeyStorage.keyStorage,\n entryKeysFactory: lostKeyStorage.keyFactory,\n }\n )\n const lostUser = await lostKeyApi.userApi.getCurrentUser()\n const lostPatient = await lostKeyApi.patientApi.getPatientWithUser(lostUser, pat.id!)\n\n async function checkNotRecovered() {\n await lostKeyApi.cryptoApi.forceReload()\n expect(Object.keys(lostKeyApi.cryptoApi.userKeysManager.getDecryptionKeys())).to.have.length(3)\n expect(await lostKeyApi.healthcareElementApi.findBy(lostUser.healthcarePartyId!, lostPatient)).to.be.empty\n }\n\n async function giveBackAccess(notaryId: number) {\n const notaryApi = notariesApis[notaryId]\n await notaryApi.cryptoApi.forceReload()\n const delegateUser = await notaryApi.userApi.getCurrentUser()\n const notifications = (\n await notaryApi.maintenanceTaskApi.filterMaintenanceTasksByWithUser(\n delegateUser!,\n undefined,\n undefined,\n new FilterChainMaintenanceTask({\n filter: new MaintenanceTaskAfterDateFilter({\n date: new Date().getTime() - 100000,\n }),\n })\n )\n ).rows!.map((x) => KeyPairUpdateRequest.fromMaintenanceTask(x))\n const filteredNotifications = notifications.filter((x) => x.concernedDataOwnerId === lostUser.healthcarePartyId)\n expect(filteredNotifications).to.have.length(1)\n await notaryApi.icureMaintenanceTaskApi.applyKeyPairUpdate(filteredNotifications[0])\n }\n\n await checkNotRecovered()\n await giveBackAccess(0)\n await checkNotRecovered()\n await giveBackAccess(1)\n await checkNotRecovered()\n await giveBackAccess(2)\n await giveBackAccess(3)\n await lostKeyApi.cryptoApi.forceReload()\n expect(Object.keys(lostKeyApi.cryptoApi.userKeysManager.getDecryptionKeys())).to.have.length(4)\n const retrievedAfterRecovery = await lostKeyApi.healthcareElementApi.findBy(lostUser.healthcarePartyId!, lostPatient)\n expect(retrievedAfterRecovery).to.have.length(1)\n expect(retrievedAfterRecovery[0].descr).to.equal(descr)\n })\n})\n"]}
@@ -0,0 +1 @@
1
+ import 'isomorphic-fetch';
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ require("isomorphic-fetch");
13
+ const util_1 = require("util");
14
+ const icc_x_api_1 = require("../../icc-x-api");
15
+ const crypto_1 = require("crypto");
16
+ function setLocalStorage(fetch) {
17
+ ;
18
+ global.localStorage = new (require('node-localstorage').LocalStorage)("/Users/trema/icure-typescript-sdk/scratch", 5 * Math.pow(1024, 3));
19
+ global.fetch = fetch;
20
+ global.Storage = '';
21
+ global.TextDecoder = util_1.TextDecoder;
22
+ global.TextEncoder = util_1.TextEncoder;
23
+ global.headers = Headers;
24
+ }
25
+ setLocalStorage(fetch);
26
+ class MyCryptoStrategies {
27
+ dataOwnerRequiresAnonymousDelegation(dataOwner) {
28
+ return false;
29
+ }
30
+ generateNewKeyForDataOwner(self, cryptoPrimitives) {
31
+ return __awaiter(this, void 0, void 0, function* () {
32
+ return Promise.resolve(false);
33
+ });
34
+ }
35
+ recoverAndVerifySelfHierarchyKeys(keysData, cryptoPrimitives, keyPairRecoverer) {
36
+ return __awaiter(this, void 0, void 0, function* () {
37
+ return {
38
+ "44f19c1a-8da8-4959-90df-96a2e98112f4": {
39
+ recoveredKeys: {
40
+ "a6987fd0b8335e60a59abf0203010001": yield cryptoPrimitives.RSA.importKeyPair("pkcs8", (0, icc_x_api_1.hex2ua)("privhere"), "spki", (0, icc_x_api_1.hex2ua)("30820122300d06092a864886f70d01010105000382010f003082010a0282010100a0c7b15b203e00d233f169897ad96c3f82137c3d302e490264238fbda1f609c1152f4a1e75848e5d87133db56fa00678c4e5d9c27efb51e37d59e214b2fcfd7a5d89015a60f582d53ff8ee9c6164f003ec2f08984203008ac3d2a7f169c06cee3629611f04fc6e806a2a6ef846277c9c52c0dedd78ed11185208d0d544ee641b080b7178cb15d2a14b78e9c0e5629a2dac3a97a0a5bd13e694af68daad1ca86ee34cdeecef26db26360c6773c9c6b614b8040cdcbb306a3baac726a9928c792f6801dd65277f8febac1791fbf35eab7968bb0ed16d49308dff679a5e915e73fb827e5efa13ac04c1b2595069d7f50d4fd0e8589e7ba6987fd0b8335e60a59abf0203010001"), icc_x_api_1.ShaVersion.Sha1)
41
+ },
42
+ keyAuthenticity: {}
43
+ },
44
+ "f80f2b9f-4924-4a46-a6a4-a176f33607d8": {
45
+ recoveredKeys: {
46
+ "dd1574537845c22ac062190203010001": yield cryptoPrimitives.RSA.importKeyPair("pkcs8", (0, icc_x_api_1.hex2ua)("privhere"), "spki", (0, icc_x_api_1.hex2ua)("30820122300d06092a864886f70d01010105000382010f003082010a028201010095b3e15bf00ee73c2adea786f0783cd0ddf09e8aeded45e4a0b5982c96b8025ef6e7b31e2498073fa956dc195871e7e64f37a663900aae2ba9e6c89651b8bbb3da03e77e12424dddccf2343c2ac9e64f99f2bf1dc6fa0acfe289d0c0cb41dd0dbc6c71f8cdab722ec2a6f73a241eda7600128e64bcd0f106eca8f849fd8ec1c9c27c61d88a3c4c6940c43d7d54efc01b397e835e8ef43a2c2f216aa5ad1a281399ac513d407389d4661f68b45f7c12354547666087a2a644bdc7823e06adada1142d35cf048da03106040281b6b26a213bca037d3b63fd974fcd518938c697000a738ac2c7c6578d7ee7bb9662d35133bc8b919b37dd1574537845c22ac062190203010001"), icc_x_api_1.ShaVersion.Sha1)
47
+ },
48
+ keyAuthenticity: {}
49
+ }
50
+ };
51
+ });
52
+ }
53
+ verifyDelegatePublicKeys(delegate, publicKeys, cryptoPrimitives) {
54
+ throw "Unused";
55
+ }
56
+ }
57
+ describe('Autofix anonymity tests', () => {
58
+ it('User', () => __awaiter(void 0, void 0, void 0, function* () {
59
+ console.log("Start init");
60
+ const api = yield icc_x_api_1.IcureApi.initialise("https://api.icure.cloud", { "username": "2de6069e-b8af-4831-aac9-75953b4780cf", password: "54d3b6ba-e969-453f-bf6c-b0a2e6f26b87" }, new MyCryptoStrategies(), crypto_1.webcrypto, fetch);
61
+ console.log("Init done");
62
+ const user = yield api.userApi.getCurrentUser();
63
+ console.log("Getting calendar items");
64
+ const calendarItems = yield api.calendarItemApi.getCalendarsByPeriodAndAgendaIdWithUser(user, 20250117000000, 20250118000000, "agenda_2de6069e-b8af-4831-aac9-75953b4780cf");
65
+ for (const ci of calendarItems) {
66
+ yield api.calendarItemApi.getDataOwnersWithAccessTo(ci);
67
+ }
68
+ // console.log(calendarItems.map((x) => x.details))
69
+ // console.log("Getting time tables")
70
+ // const timeTables: Array<TimeTable> = await api.timetableApi.getTimeTablesByPeriodAndAgendaId(20250117000000, 20250118000000, "agenda_2de6069e-b8af-4831-aac9-75953b4780cf")
71
+ // console.log("Get types")
72
+ // console.log(await api.calendarItemTypeApi.getCalendarItemTypesIncludeDeletedWithPagination())
73
+ }));
74
+ });
75
+ //# sourceMappingURL=diocancaro.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diocancaro.js","sourceRoot":"","sources":["../../../test/icc-x-api/diocancaro.ts"],"names":[],"mappings":"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","sourcesContent":["import 'isomorphic-fetch'\nimport {TextDecoder, TextEncoder} from \"util\";\nimport {CryptoPrimitives, CryptoStrategies, hex2ua, IcureApi, KeyPair, ShaVersion} from \"../../icc-x-api\";\nimport {CryptoActorStubWithType} from \"../../icc-api/model/CryptoActorStub\";\nimport {DataOwnerWithType} from \"../../icc-api/model/DataOwnerWithType\";\nimport {KeyPairRecoverer} from \"../../icc-x-api/crypto/KeyPairRecoverer\";\nimport {webcrypto} from \"crypto\";\nimport {CalendarItem} from \"../../icc-api/model/CalendarItem\";\nimport {TimeTable} from \"../../icc-api/model/TimeTable\";\n\nfunction setLocalStorage(fetch: (input: RequestInfo, init?: RequestInit) => Promise<Response>) {\n ;(global as any).localStorage = new (require('node-localstorage').LocalStorage)(\"/Users/trema/icure-typescript-sdk/scratch\", 5 * 1024 ** 3)\n ;(global as any).fetch = fetch\n ;(global as any).Storage = ''\n ;(global as any).TextDecoder = TextDecoder\n ;(global as any).TextEncoder = TextEncoder\n ;(global as any).headers = Headers\n}\nsetLocalStorage(fetch)\n\nclass MyCryptoStrategies implements CryptoStrategies {\n dataOwnerRequiresAnonymousDelegation(dataOwner: CryptoActorStubWithType): boolean {\n return false;\n }\n\n async generateNewKeyForDataOwner(self: DataOwnerWithType, cryptoPrimitives: CryptoPrimitives): Promise<KeyPair<CryptoKey> | boolean> {\n return Promise.resolve(false);\n }\n\n async recoverAndVerifySelfHierarchyKeys(keysData: {\n dataOwner: DataOwnerWithType;\n unknownKeys: string[];\n unavailableKeys: string[]\n }[], cryptoPrimitives: CryptoPrimitives, keyPairRecoverer: KeyPairRecoverer): Promise<{\n [p: string]: { recoveredKeys: { [p: string]: KeyPair<CryptoKey> }; keyAuthenticity: { [p: string]: boolean } }\n }> {\n return {\n \"44f19c1a-8da8-4959-90df-96a2e98112f4\": {\n recoveredKeys: {\n \"a6987fd0b8335e60a59abf0203010001\": await cryptoPrimitives.RSA.importKeyPair(\n \"pkcs8\",\n hex2ua(\"privhere\"),\n \"spki\",\n hex2ua(\"30820122300d06092a864886f70d01010105000382010f003082010a0282010100a0c7b15b203e00d233f169897ad96c3f82137c3d302e490264238fbda1f609c1152f4a1e75848e5d87133db56fa00678c4e5d9c27efb51e37d59e214b2fcfd7a5d89015a60f582d53ff8ee9c6164f003ec2f08984203008ac3d2a7f169c06cee3629611f04fc6e806a2a6ef846277c9c52c0dedd78ed11185208d0d544ee641b080b7178cb15d2a14b78e9c0e5629a2dac3a97a0a5bd13e694af68daad1ca86ee34cdeecef26db26360c6773c9c6b614b8040cdcbb306a3baac726a9928c792f6801dd65277f8febac1791fbf35eab7968bb0ed16d49308dff679a5e915e73fb827e5efa13ac04c1b2595069d7f50d4fd0e8589e7ba6987fd0b8335e60a59abf0203010001\"),\n ShaVersion.Sha1\n )\n },\n keyAuthenticity: {}\n },\n \"f80f2b9f-4924-4a46-a6a4-a176f33607d8\": {\n recoveredKeys: {\n \"dd1574537845c22ac062190203010001\": await cryptoPrimitives.RSA.importKeyPair(\n \"pkcs8\",\n hex2ua(\"privhere\"),\n \"spki\",\n hex2ua(\"30820122300d06092a864886f70d01010105000382010f003082010a028201010095b3e15bf00ee73c2adea786f0783cd0ddf09e8aeded45e4a0b5982c96b8025ef6e7b31e2498073fa956dc195871e7e64f37a663900aae2ba9e6c89651b8bbb3da03e77e12424dddccf2343c2ac9e64f99f2bf1dc6fa0acfe289d0c0cb41dd0dbc6c71f8cdab722ec2a6f73a241eda7600128e64bcd0f106eca8f849fd8ec1c9c27c61d88a3c4c6940c43d7d54efc01b397e835e8ef43a2c2f216aa5ad1a281399ac513d407389d4661f68b45f7c12354547666087a2a644bdc7823e06adada1142d35cf048da03106040281b6b26a213bca037d3b63fd974fcd518938c697000a738ac2c7c6578d7ee7bb9662d35133bc8b919b37dd1574537845c22ac062190203010001\"),\n ShaVersion.Sha1\n )\n },\n keyAuthenticity: {}\n }\n }\n }\n\n verifyDelegatePublicKeys(delegate: CryptoActorStubWithType, publicKeys: string[], cryptoPrimitives: CryptoPrimitives): Promise<string[]> {\n throw \"Unused\";\n }\n\n}\n\ndescribe('Autofix anonymity tests', () => {\n it('User', async () => {\n console.log(\"Start init\")\n const api = await IcureApi.initialise(\n \"https://api.icure.cloud\",\n { \"username\": \"2de6069e-b8af-4831-aac9-75953b4780cf\", password: \"54d3b6ba-e969-453f-bf6c-b0a2e6f26b87\"},\n new MyCryptoStrategies(),\n webcrypto as any,\n fetch,\n )\n console.log(\"Init done\")\n const user = await api.userApi.getCurrentUser()\n console.log(\"Getting calendar items\")\n const calendarItems: Array<CalendarItem> = await api.calendarItemApi.getCalendarsByPeriodAndAgendaIdWithUser(user, 20250117000000, 20250118000000, \"agenda_2de6069e-b8af-4831-aac9-75953b4780cf\")\n for (const ci of calendarItems) {\n await api.calendarItemApi.getDataOwnersWithAccessTo(ci)\n }\n // console.log(calendarItems.map((x) => x.details))\n // console.log(\"Getting time tables\")\n // const timeTables: Array<TimeTable> = await api.timetableApi.getTimeTablesByPeriodAndAgendaId(20250117000000, 20250118000000, \"agenda_2de6069e-b8af-4831-aac9-75953b4780cf\")\n // console.log(\"Get types\")\n // console.log(await api.calendarItemTypeApi.getCalendarItemTypesIncludeDeletedWithPagination())\n })\n})"]}
@@ -118,7 +118,7 @@ describe('icc-calendar-item-x-api Tests', () => {
118
118
  (0, chai_1.expect)((yield api1.calendarItemApi.getCalendarItemWithUser(user1, calendarItem.id)).title).to.equal(itemTitle);
119
119
  (0, chai_1.expect)(yield api1.calendarItemApi.decryptPatientIdOf(calendarItem)).to.have.length(0);
120
120
  (0, chai_1.expect)((_a = calendarItem.secretForeignKeys) !== null && _a !== void 0 ? _a : []).to.have.length(0);
121
- const linked = yield api1.calendarItemApi.linkToPatient(calendarItem, patient, [user2.healthcarePartyId, user3.healthcarePartyId]);
121
+ const linked = yield api1.calendarItemApi.linkWithPatient(calendarItem, patient, [user2.healthcarePartyId, user3.healthcarePartyId]);
122
122
  (0, chai_1.expect)(linked.title).to.equal(itemTitle);
123
123
  (0, chai_1.expect)((_b = linked.secretForeignKeys) !== null && _b !== void 0 ? _b : []).to.have.length(1);
124
124
  (0, chai_1.expect)(linked.secretForeignKeys[0]).to.equal(patientSecretIds[0]);
@@ -1 +1 @@
1
- {"version":3,"file":"icc-calendar-item-x-api.js","sourceRoot":"","sources":["../../../test/icc-x-api/icc-calendar-item-x-api.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,4BAAyB;AACzB,oDAAqI;AACrI,iCAA8B;AAC9B,+CAA6D;AAC7D,2CAAkD;AAClD,yDAAqD;AAErD,mCAAmC;AAEnC,+BAAqC;AACrC,IAAO,OAAO,GAAG,sBAAS,CAAC,OAAO,CAAA;AAClC,mDAAmE;AACnE,2EAAuE;AACvE,IAAO,eAAe,GAAG,mCAAgB,CAAC,eAAe,CAAA;AACzD,wFAAyF;AAEzF,IAAA,4BAAe,EAAC,KAAK,CAAC,CAAA;AACtB,IAAI,GAAa,CAAA;AAEjB,QAAQ,CAAC,+BAA+B,EAAE,GAAG,EAAE;IAC7C,IAAA,cAAM,EAAC;;YACL,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;YACpB,MAAM,WAAW,GAAG,MAAM,IAAA,sCAAyB,GAAE,CAAA;YACrD,GAAG,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,IAAA,uBAAe,GAAE,CAAC,CAAA;QACpD,CAAC;KAAA,CAAC,CAAA;IAEF,SAAe,aAAa,CAAC,gBAAgC,EAAE,OAAa;;YAC1E,OAAO,gBAAgB,CAAC,qBAAqB,CAC3C,OAAO,EACP,MAAM,gBAAgB,CAAC,WAAW,CAChC,OAAO,EACP,IAAI,iBAAO,CAAC;gBACV,EAAE,EAAE,IAAA,mBAAU,GAAE;gBAChB,SAAS,EAAE,MAAM;gBACjB,QAAQ,EAAE,MAAM;gBAChB,IAAI,EAAE,kBAAkB;aACzB,CAAC,CACH,CACF,CAAA;QACH,CAAC;KAAA;IAED,EAAE,CAAC,MAAM,EAAE,GAAS,EAAE;QACpB,QAAQ;QACR,MAAM,QAAQ,GAAG,GAAG,CAAC,gBAAgB,CAAC,yBAAY,CAAC,CAAC,IAAI,CAAA;QACxD,MAAM,QAAQ,GAAG,GAAG,CAAC,gBAAgB,CAAC,yBAAY,CAAC,CAAC,QAAQ,CAAA;QAE5D,MAAM,YAAY,GAAG,IAAI,oDAA2B,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;QAExE,MAAM,OAAO,GAAG,IAAI,uBAAW,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,EAAE,YAAY,EAAE,IAAW,EAAE,KAAK,CAAC,CAAA;QACnF,MAAM,eAAe,GAAG,IAAI,4BAAkB,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,EAAE,YAAY,EAAE,KAAK,CAAC,CAAA;QAErF,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,cAAc,EAAE,CAAA;IACpD,CAAC,CAAA,CAAC,CAAA;IAEF,EAAE,CAAC,aAAa,EAAE,GAAS,EAAE;QAC3B,QAAQ;QACR,MAAM,EACJ,OAAO,EAAE,aAAa,EACtB,YAAY,EAAE,kBAAkB,EAChC,UAAU,EAAE,gBAAgB,EAC5B,SAAS,EAAE,eAAe,EAC1B,YAAY,EAAE,kBAAkB,EAChC,eAAe,EAAE,gBAAgB,GAClC,GAAG,MAAM,OAAO,CAAC,GAAG,EAAE,yBAAY,CAAC,CAAA;QACpC,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,cAAc,EAAE,CAAA;QACpD,MAAM,OAAO,GAAG,CAAC,MAAM,aAAa,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAY,CAAA;QAE3E,MAAM,YAAY,GAAiB;YACjC,EAAE,EAAE,IAAA,mBAAU,GAAE;YAChB,OAAO,EAAE,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE;YAC7B,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE;YAC9B,SAAS,EAAE,cAAc;YACzB,OAAO,EAAE,cAAc;YACvB,WAAW,EAAE,OAAO,CAAC,iBAAkB;YACvC,MAAM,EAAE,OAAO,CAAC,EAAE;YAClB,KAAK,EAAE,EAAE;YACT,IAAI,EAAE,EAAE;SACT,CAAA;QACD,MAAM,oBAAoB,GAAiB,MAAM,gBAAgB,CAAC,kBAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,YAAY,CAAC,CAAA;QACpH,MAAM,mBAAmB,GAAG,MAAM,gBAAgB,CAAC,6BAA6B,CAAC,OAAO,EAAE,oBAAoB,CAAC,CAAA;QAE/G,MAAM,UAAU,GAAG,MAAM,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC,iBAAkB,EAAE,OAAO,EAAE,KAAK,CAAC,CAAA;QAC5F,MAAM,mBAAmB,GAAG,MAAM,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC,iBAAkB,EAAE,OAAO,EAAE,IAAI,CAAC,CAAA;QAEpG,IAAA,aAAM,EAAC,UAAU,CAAC,MAAM,IAAI,CAAC,EAAE,yBAAyB,CAAC,CAAA;QACzD,IAAA,aAAM,EAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,mBAAmB,CAAC,EAAE,EAAE,+CAA+C,CAAC,CAAA;QAEnG,IAAA,aAAM,EAAC,mBAAmB,CAAC,MAAM,IAAI,CAAC,EAAE,oCAAoC,CAAC,CAAA;QAC7E,IAAA,aAAM,EAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,mBAAmB,CAAC,EAAE,EAAE,0DAA0D,CAAC,CAAA;IACzH,CAAC,CAAA,CAAC,CAAA;IAEF,EAAE,CAAC,oCAAoC,EAAE,GAAS,EAAE;QAClD,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,GAAI,EAAE,yBAAY,CAAC,CAAA;QAC9C,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAA;QACjD,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,GAAI,EAAE,yBAAY,CAAC,CAAA;QAC9C,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAA;QACjD,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,qBAAqB,CAC/D,KAAK,EACL,MAAM,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CACtF,CAAA;QACD,MAAM,cAAc,GAAG,qBAAqB,CAAA;QAC5C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,6BAA6B,CACrE,KAAK,EACL,MAAM,IAAI,CAAC,eAAe,CAAC,kBAAkB,CAAC,KAAK,EAAE,aAAa,EAAE,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CACjG,CAAA;QACD,IAAA,aAAM,EAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAA;QAClD,MAAM,IAAI,CAAC,eAAe;aACvB,uBAAuB,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC;aACzC,IAAI,CAAC,GAAG,EAAE;YACT,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAA;QACzD,CAAC,CAAC;aACD,KAAK,CAAC,GAAG,EAAE;YACV,cAAc;QAChB,CAAC,CAAC,CAAA;QACJ,MAAM,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,KAAK,CAAC,iBAAkB,EAAE,MAAM,CAAC,CAAA;QACtE,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,uBAAuB,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC,CAAA;QACtF,IAAA,aAAM,EAAC,SAAS,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAA;QACrD,IAAA,aAAM,EAAC,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC,CAAA;IAClG,CAAC,CAAA,CAAC,CAAA;IAEF,EAAE,CAAC,iEAAiE,EAAE,GAAS,EAAE;;QAC/E,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,GAAI,EAAE,yBAAY,CAAC,CAAA;QAC9C,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAA;QACjD,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,GAAI,EAAE,yBAAY,CAAC,CAAA;QAC9C,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAA;QACjD,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,GAAI,EAAE,yBAAY,CAAC,CAAA;QAC9C,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAA;QACjD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,qBAAqB,CACzD,KAAK,EACL,MAAM,IAAI,CAAC,UAAU,CAAC,WAAW,CAC/B,KAAK,EACL;YACE,SAAS,EAAE,OAAO;YAClB,QAAQ,EAAE,SAAS;SACpB,EACD,EAAE,mBAAmB,EAAE,EAAE,CAAC,KAAK,CAAC,iBAAkB,CAAC,EAAE,OAAO,EAAE,EAAE,CACjE,CACF,CAAA;QACD,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,iCAAiC,CAAC,OAAO,CAAC,CAAA;QACzF,IAAA,aAAM,EAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;QAC1C,MAAM,SAAS,GAAG,sBAAsB,CAAA;QACxC,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,6BAA6B,CAC3E,KAAK,EACL,MAAM,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,mBAAmB,EAAE,EAAE,CAAC,KAAK,CAAC,iBAAkB,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC,CACtI,CAAA;QACD,IAAA,aAAM,EAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;QAC9C,IAAA,aAAM,EAAC,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,uBAAuB,CAAC,KAAK,EAAE,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;QAC9G,IAAA,aAAM,EAAC,MAAM,IAAI,CAAC,eAAe,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;QACrF,IAAA,aAAM,EAAC,MAAA,YAAY,CAAC,iBAAiB,mCAAI,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;QAC9D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,YAAY,EAAE,OAAO,EAAE,CAAC,KAAK,CAAC,iBAAkB,EAAE,KAAK,CAAC,iBAAkB,CAAC,CAAC,CAAA;QACpI,IAAA,aAAM,EAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;QACxC,IAAA,aAAM,EAAC,MAAA,MAAM,CAAC,iBAAiB,mCAAI,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;QACxD,IAAA,aAAM,EAAC,MAAM,CAAC,iBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAA;QAClE,MAAM,qBAAqB,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAA;QACnF,IAAA,aAAM,EAAC,qBAAqB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;QAC/C,IAAA,aAAM,EAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;QACrD,MAAM,qBAAqB,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,uBAAuB,CAAC,KAAK,EAAE,YAAY,CAAC,EAAE,CAAC,CAAA;QACxG,IAAA,aAAM,EAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;QACvD,MAAM,qBAAqB,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,kBAAkB,CAAC,qBAAqB,CAAC,CAAA;QAClG,IAAA,aAAM,EAAC,qBAAqB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;QAC/C,IAAA,aAAM,EAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;QACrD,MAAM,qBAAqB,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,uBAAuB,CAAC,KAAK,EAAE,YAAY,CAAC,EAAE,CAAC,CAAA;QACxG,IAAA,aAAM,EAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAA,CAAC,wBAAwB;QAC5E,MAAM,qBAAqB,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,kBAAkB,CAAC,qBAAqB,CAAC,CAAA;QAClG,IAAA,aAAM,EAAC,qBAAqB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;QAC/C,IAAA,aAAM,EAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;QACrD,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,yBAAyB,CAAC,MAAM,CAAC,CAAA;QAC/E,IAAA,aAAM,EAAC,UAAU,CAAC,6BAA6B,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAA;QAC5D,IAAA,aAAM,EAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,wBAAwB,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC;YACvE,KAAK,CAAC,iBAAkB;YACxB,KAAK,CAAC,iBAAkB;YACxB,KAAK,CAAC,iBAAkB;SACzB,CAAC,CAAA;QACF,IAAA,aAAM,EAAC,UAAU,CAAC,wBAAwB,CAAC,KAAK,CAAC,iBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,CAAA;QACrG,IAAA,aAAM,EAAC,UAAU,CAAC,wBAAwB,CAAC,KAAK,CAAC,iBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,CAAA;QACrG,IAAA,aAAM,EAAC,UAAU,CAAC,wBAAwB,CAAC,KAAK,CAAC,iBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;IACtG,CAAC,CAAA,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA","sourcesContent":["import 'isomorphic-fetch'\nimport { getEnvironmentInitializer, hcp1Username, hcp2Username, hcp3Username, setLocalStorage, TestUtils } from '../utils/test_utils'\nimport { before } from 'mocha'\nimport { IccPatientXApi, IccUserXApi } from '../../icc-x-api'\nimport { IccCalendarItemApi } from '../../icc-api'\nimport { Patient } from '../../icc-api/model/Patient'\nimport { User } from '../../icc-api/model/User'\nimport { randomUUID } from 'crypto'\nimport { CalendarItem } from '../../icc-api/model/CalendarItem'\nimport { assert, expect } from 'chai'\nimport initApi = TestUtils.initApi\nimport { getEnvVariables, TestVars } from '@icure/test-setup/types'\nimport { SecureDelegation } from '../../icc-api/model/SecureDelegation'\nimport AccessLevelEnum = SecureDelegation.AccessLevelEnum\nimport { BasicAuthenticationProvider } from '../../icc-x-api/auth/AuthenticationProvider'\n\nsetLocalStorage(fetch)\nlet env: TestVars\n\ndescribe('icc-calendar-item-x-api Tests', () => {\n before(async function () {\n this.timeout(600000)\n const initializer = await getEnvironmentInitializer()\n env = await initializer.execute(getEnvVariables())\n })\n\n async function createPatient(patientApiForHcp: IccPatientXApi, hcpUser: User) {\n return patientApiForHcp.createPatientWithUser(\n hcpUser,\n await patientApiForHcp.newInstance(\n hcpUser,\n new Patient({\n id: randomUUID(),\n firstName: 'John',\n lastName: 'Snow',\n note: 'Winter is coming',\n })\n )\n )\n }\n\n it('Test', async () => {\n // Given\n const username = env.dataOwnerDetails[hcp1Username].user\n const password = env.dataOwnerDetails[hcp1Username].password\n\n const authProvider = new BasicAuthenticationProvider(username, password)\n\n const userApi = new IccUserXApi(env.iCureUrl, {}, authProvider, null as any, fetch)\n const calenderItemApi = new IccCalendarItemApi(env.iCureUrl, {}, authProvider, fetch)\n\n const currentUser = await userApi.getCurrentUser()\n })\n\n it('Test findBy', async () => {\n // Given\n const {\n userApi: userApiForHcp,\n dataOwnerApi: dataOwnerApiForHcp,\n patientApi: patientApiForHcp,\n cryptoApi: cryptoApiForHcp,\n dataOwnerApi: dateOwnerApiForHcp,\n calendarItemApi: calendarItemXApi,\n } = await initApi(env, hcp1Username)\n const hcpUser = await userApiForHcp.getCurrentUser()\n const patient = (await createPatient(patientApiForHcp, hcpUser)) as Patient\n\n const calendarItem: CalendarItem = {\n id: randomUUID(),\n created: new Date().getTime(),\n modified: new Date().getTime(),\n startTime: 20230327131313,\n endTime: 20230327141313,\n responsible: hcpUser.healthcarePartyId!,\n author: hcpUser.id,\n codes: [],\n tags: [],\n }\n const calendarItemToCreate: CalendarItem = await calendarItemXApi.newInstancePatient(hcpUser, patient, calendarItem)\n const createdCalendarItem = await calendarItemXApi.createCalendarItemWithHcParty(hcpUser, calendarItemToCreate)\n\n const foundItems = await calendarItemXApi.findBy(hcpUser.healthcarePartyId!, patient, false)\n const foundItemsUsingPost = await calendarItemXApi.findBy(hcpUser.healthcarePartyId!, patient, true)\n\n assert(foundItems.length == 1, 'Found items should be 1')\n assert(foundItems[0].id == createdCalendarItem.id, 'Found item should be the same as created item')\n\n assert(foundItemsUsingPost.length == 1, 'Found items using post should be 1')\n assert(foundItemsUsingPost[0].id == createdCalendarItem.id, 'Found item using post should be the same as created item')\n })\n\n it('Share with should work as expected', async () => {\n const api1 = await initApi(env!, hcp1Username)\n const user1 = await api1.userApi.getCurrentUser()\n const api2 = await initApi(env!, hcp2Username)\n const user2 = await api2.userApi.getCurrentUser()\n const samplePatient = await api1.patientApi.createPatientWithUser(\n user1,\n await api1.patientApi.newInstance(user1, { firstName: 'Gigio', lastName: 'Bagigio' })\n )\n const encryptedField = 'Something encrypted'\n const entity = await api1.calendarItemApi.createCalendarItemWithHcParty(\n user1,\n await api1.calendarItemApi.newInstancePatient(user1, samplePatient, { details: encryptedField })\n )\n expect(entity.details).to.be.equal(encryptedField)\n await api2.calendarItemApi\n .getCalendarItemWithUser(user2, entity.id)\n .then(() => {\n throw new Error('Should not be able to get the entity')\n })\n .catch(() => {\n /* expected */\n })\n await api1.calendarItemApi.shareWith(user2.healthcarePartyId!, entity)\n const retrieved = await api2.calendarItemApi.getCalendarItemWithUser(user2, entity.id)\n expect(retrieved.details).to.be.equal(encryptedField)\n expect((await api2.calendarItemApi.decryptPatientIdOf(retrieved))[0]).to.equal(samplePatient.id)\n })\n\n it('Should be able to link a calendar item with an existing patient', async () => {\n const api1 = await initApi(env!, hcp1Username)\n const user1 = await api1.userApi.getCurrentUser()\n const api2 = await initApi(env!, hcp2Username)\n const user2 = await api2.userApi.getCurrentUser()\n const api3 = await initApi(env!, hcp3Username)\n const user3 = await api3.userApi.getCurrentUser()\n const patient = await api1.patientApi.createPatientWithUser(\n user1,\n await api1.patientApi.newInstance(\n user1,\n {\n firstName: 'Gigio',\n lastName: 'Bagigio',\n },\n { additionalDelegates: { [user2.healthcarePartyId!]: 'WRITE' } }\n )\n )\n const patientSecretIds = await api2.patientApi.decryptNonConfidentialSecretIdsOf(patient)\n expect(patientSecretIds).to.have.length(1)\n const itemTitle = 'An interesting title'\n const calendarItem = await api2.calendarItemApi.createCalendarItemWithHcParty(\n user2,\n await api2.calendarItemApi.newInstance(user2, { title: itemTitle }, { additionalDelegates: { [user1.healthcarePartyId!]: 'WRITE' } })\n )\n expect(calendarItem.title).to.equal(itemTitle)\n expect((await api1.calendarItemApi.getCalendarItemWithUser(user1, calendarItem.id)).title).to.equal(itemTitle)\n expect(await api1.calendarItemApi.decryptPatientIdOf(calendarItem)).to.have.length(0)\n expect(calendarItem.secretForeignKeys ?? []).to.have.length(0)\n const linked = await api1.calendarItemApi.linkToPatient(calendarItem, patient, [user2.healthcarePartyId!, user3.healthcarePartyId!])\n expect(linked.title).to.equal(itemTitle)\n expect(linked.secretForeignKeys ?? []).to.have.length(1)\n expect(linked.secretForeignKeys![0]).to.equal(patientSecretIds[0])\n const decryptedPatientIdBy1 = await api1.calendarItemApi.decryptPatientIdOf(linked)\n expect(decryptedPatientIdBy1).to.have.length(1)\n expect(decryptedPatientIdBy1[0]).to.equal(patient.id)\n const retrievedBy2AfterLink = await api2.calendarItemApi.getCalendarItemWithUser(user2, calendarItem.id)\n expect(retrievedBy2AfterLink.title).to.equal(itemTitle)\n const decryptedPatientIdBy2 = await api2.calendarItemApi.decryptPatientIdOf(retrievedBy2AfterLink)\n expect(decryptedPatientIdBy2).to.have.length(1)\n expect(decryptedPatientIdBy2[0]).to.equal(patient.id)\n const retrievedBy3AfterLink = await api3.calendarItemApi.getCalendarItemWithUser(user3, calendarItem.id)\n expect(retrievedBy3AfterLink.title).to.be.undefined // not shared with user3\n const decryptedPatientIdBy3 = await api3.calendarItemApi.decryptPatientIdOf(retrievedBy3AfterLink)\n expect(decryptedPatientIdBy3).to.have.length(1)\n expect(decryptedPatientIdBy3[0]).to.equal(patient.id)\n const sharedInfo = await api1.calendarItemApi.getDataOwnersWithAccessTo(linked)\n expect(sharedInfo.hasUnknownAnonymousDataOwners).to.be.false\n expect(Object.keys(sharedInfo.permissionsByDataOwnerId)).to.have.members([\n user1.healthcarePartyId!,\n user2.healthcarePartyId!,\n user3.healthcarePartyId!,\n ])\n expect(sharedInfo.permissionsByDataOwnerId[user1.healthcarePartyId!]).to.equal(AccessLevelEnum.WRITE)\n expect(sharedInfo.permissionsByDataOwnerId[user2.healthcarePartyId!]).to.equal(AccessLevelEnum.WRITE)\n expect(sharedInfo.permissionsByDataOwnerId[user3.healthcarePartyId!]).to.equal(AccessLevelEnum.READ)\n })\n})\n"]}
1
+ {"version":3,"file":"icc-calendar-item-x-api.js","sourceRoot":"","sources":["../../../test/icc-x-api/icc-calendar-item-x-api.ts"],"names":[],"mappings":"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","sourcesContent":["import 'isomorphic-fetch'\nimport { getEnvironmentInitializer, hcp1Username, hcp2Username, hcp3Username, setLocalStorage, TestUtils } from '../utils/test_utils'\nimport { before } from 'mocha'\nimport { IccPatientXApi, IccUserXApi } from '../../icc-x-api'\nimport { IccCalendarItemApi } from '../../icc-api'\nimport { Patient } from '../../icc-api/model/Patient'\nimport { User } from '../../icc-api/model/User'\nimport { randomUUID } from 'crypto'\nimport { CalendarItem } from '../../icc-api/model/CalendarItem'\nimport { assert, expect } from 'chai'\nimport initApi = TestUtils.initApi\nimport { getEnvVariables, TestVars } from '@icure/test-setup/types'\nimport { SecureDelegation } from '../../icc-api/model/SecureDelegation'\nimport AccessLevelEnum = SecureDelegation.AccessLevelEnum\nimport { BasicAuthenticationProvider } from '../../icc-x-api/auth/AuthenticationProvider'\n\nsetLocalStorage(fetch)\nlet env: TestVars\n\ndescribe('icc-calendar-item-x-api Tests', () => {\n before(async function () {\n this.timeout(600000)\n const initializer = await getEnvironmentInitializer()\n env = await initializer.execute(getEnvVariables())\n })\n\n async function createPatient(patientApiForHcp: IccPatientXApi, hcpUser: User) {\n return patientApiForHcp.createPatientWithUser(\n hcpUser,\n await patientApiForHcp.newInstance(\n hcpUser,\n new Patient({\n id: randomUUID(),\n firstName: 'John',\n lastName: 'Snow',\n note: 'Winter is coming',\n })\n )\n )\n }\n\n it('Test', async () => {\n // Given\n const username = env.dataOwnerDetails[hcp1Username].user\n const password = env.dataOwnerDetails[hcp1Username].password\n\n const authProvider = new BasicAuthenticationProvider(username, password)\n\n const userApi = new IccUserXApi(env.iCureUrl, {}, authProvider, null as any, fetch)\n const calenderItemApi = new IccCalendarItemApi(env.iCureUrl, {}, authProvider, fetch)\n\n const currentUser = await userApi.getCurrentUser()\n })\n\n it('Test findBy', async () => {\n // Given\n const {\n userApi: userApiForHcp,\n dataOwnerApi: dataOwnerApiForHcp,\n patientApi: patientApiForHcp,\n cryptoApi: cryptoApiForHcp,\n dataOwnerApi: dateOwnerApiForHcp,\n calendarItemApi: calendarItemXApi,\n } = await initApi(env, hcp1Username)\n const hcpUser = await userApiForHcp.getCurrentUser()\n const patient = (await createPatient(patientApiForHcp, hcpUser)) as Patient\n\n const calendarItem: CalendarItem = {\n id: randomUUID(),\n created: new Date().getTime(),\n modified: new Date().getTime(),\n startTime: 20230327131313,\n endTime: 20230327141313,\n responsible: hcpUser.healthcarePartyId!,\n author: hcpUser.id,\n codes: [],\n tags: [],\n }\n const calendarItemToCreate: CalendarItem = await calendarItemXApi.newInstancePatient(hcpUser, patient, calendarItem)\n const createdCalendarItem = await calendarItemXApi.createCalendarItemWithHcParty(hcpUser, calendarItemToCreate)\n\n const foundItems = await calendarItemXApi.findBy(hcpUser.healthcarePartyId!, patient, false)\n const foundItemsUsingPost = await calendarItemXApi.findBy(hcpUser.healthcarePartyId!, patient, true)\n\n assert(foundItems.length == 1, 'Found items should be 1')\n assert(foundItems[0].id == createdCalendarItem.id, 'Found item should be the same as created item')\n\n assert(foundItemsUsingPost.length == 1, 'Found items using post should be 1')\n assert(foundItemsUsingPost[0].id == createdCalendarItem.id, 'Found item using post should be the same as created item')\n })\n\n it('Share with should work as expected', async () => {\n const api1 = await initApi(env!, hcp1Username)\n const user1 = await api1.userApi.getCurrentUser()\n const api2 = await initApi(env!, hcp2Username)\n const user2 = await api2.userApi.getCurrentUser()\n const samplePatient = await api1.patientApi.createPatientWithUser(\n user1,\n await api1.patientApi.newInstance(user1, { firstName: 'Gigio', lastName: 'Bagigio' })\n )\n const encryptedField = 'Something encrypted'\n const entity = await api1.calendarItemApi.createCalendarItemWithHcParty(\n user1,\n await api1.calendarItemApi.newInstancePatient(user1, samplePatient, { details: encryptedField })\n )\n expect(entity.details).to.be.equal(encryptedField)\n await api2.calendarItemApi\n .getCalendarItemWithUser(user2, entity.id)\n .then(() => {\n throw new Error('Should not be able to get the entity')\n })\n .catch(() => {\n /* expected */\n })\n await api1.calendarItemApi.shareWith(user2.healthcarePartyId!, entity)\n const retrieved = await api2.calendarItemApi.getCalendarItemWithUser(user2, entity.id)\n expect(retrieved.details).to.be.equal(encryptedField)\n expect((await api2.calendarItemApi.decryptPatientIdOf(retrieved))[0]).to.equal(samplePatient.id)\n })\n\n it('Should be able to link a calendar item with an existing patient', async () => {\n const api1 = await initApi(env!, hcp1Username)\n const user1 = await api1.userApi.getCurrentUser()\n const api2 = await initApi(env!, hcp2Username)\n const user2 = await api2.userApi.getCurrentUser()\n const api3 = await initApi(env!, hcp3Username)\n const user3 = await api3.userApi.getCurrentUser()\n const patient = await api1.patientApi.createPatientWithUser(\n user1,\n await api1.patientApi.newInstance(\n user1,\n {\n firstName: 'Gigio',\n lastName: 'Bagigio',\n },\n { additionalDelegates: { [user2.healthcarePartyId!]: 'WRITE' } }\n )\n )\n const patientSecretIds = await api2.patientApi.decryptNonConfidentialSecretIdsOf(patient)\n expect(patientSecretIds).to.have.length(1)\n const itemTitle = 'An interesting title'\n const calendarItem = await api2.calendarItemApi.createCalendarItemWithHcParty(\n user2,\n await api2.calendarItemApi.newInstance(user2, { title: itemTitle }, { additionalDelegates: { [user1.healthcarePartyId!]: 'WRITE' } })\n )\n expect(calendarItem.title).to.equal(itemTitle)\n expect((await api1.calendarItemApi.getCalendarItemWithUser(user1, calendarItem.id)).title).to.equal(itemTitle)\n expect(await api1.calendarItemApi.decryptPatientIdOf(calendarItem)).to.have.length(0)\n expect(calendarItem.secretForeignKeys ?? []).to.have.length(0)\n const linked = await api1.calendarItemApi.linkWithPatient(calendarItem, patient, [user2.healthcarePartyId!, user3.healthcarePartyId!])\n expect(linked.title).to.equal(itemTitle)\n expect(linked.secretForeignKeys ?? []).to.have.length(1)\n expect(linked.secretForeignKeys![0]).to.equal(patientSecretIds[0])\n const decryptedPatientIdBy1 = await api1.calendarItemApi.decryptPatientIdOf(linked)\n expect(decryptedPatientIdBy1).to.have.length(1)\n expect(decryptedPatientIdBy1[0]).to.equal(patient.id)\n const retrievedBy2AfterLink = await api2.calendarItemApi.getCalendarItemWithUser(user2, calendarItem.id)\n expect(retrievedBy2AfterLink.title).to.equal(itemTitle)\n const decryptedPatientIdBy2 = await api2.calendarItemApi.decryptPatientIdOf(retrievedBy2AfterLink)\n expect(decryptedPatientIdBy2).to.have.length(1)\n expect(decryptedPatientIdBy2[0]).to.equal(patient.id)\n const retrievedBy3AfterLink = await api3.calendarItemApi.getCalendarItemWithUser(user3, calendarItem.id)\n expect(retrievedBy3AfterLink.title).to.be.undefined // not shared with user3\n const decryptedPatientIdBy3 = await api3.calendarItemApi.decryptPatientIdOf(retrievedBy3AfterLink)\n expect(decryptedPatientIdBy3).to.have.length(1)\n expect(decryptedPatientIdBy3[0]).to.equal(patient.id)\n const sharedInfo = await api1.calendarItemApi.getDataOwnersWithAccessTo(linked)\n expect(sharedInfo.hasUnknownAnonymousDataOwners).to.be.false\n expect(Object.keys(sharedInfo.permissionsByDataOwnerId)).to.have.members([\n user1.healthcarePartyId!,\n user2.healthcarePartyId!,\n user3.healthcarePartyId!,\n ])\n expect(sharedInfo.permissionsByDataOwnerId[user1.healthcarePartyId!]).to.equal(AccessLevelEnum.WRITE)\n expect(sharedInfo.permissionsByDataOwnerId[user2.healthcarePartyId!]).to.equal(AccessLevelEnum.WRITE)\n expect(sharedInfo.permissionsByDataOwnerId[user3.healthcarePartyId!]).to.equal(AccessLevelEnum.READ)\n })\n})\n"]}
@@ -28,6 +28,8 @@ const ServiceByHcPartyHealthElementIdsFilter_1 = require("../../icc-x-api/filter
28
28
  const types_1 = require("@icure/test-setup/types");
29
29
  const Measure_1 = require("../../icc-api/model/Measure");
30
30
  var initApi = test_utils_1.TestUtils.initApi;
31
+ const SecretIdUseOption_1 = require("../../icc-x-api/crypto/SecretIdUseOption");
32
+ var UseAnyConfidential = SecretIdUseOption_1.SecretIdUseOption.UseAnyConfidential;
31
33
  (0, test_utils_1.setLocalStorage)(fetch);
32
34
  let env;
33
35
  (0, mocha_1.before)(function () {
@@ -60,7 +62,7 @@ function createHealthElement(healthElementApi, hcpUser, patient) {
60
62
  version: '1',
61
63
  }),
62
64
  ],
63
- }), { confidential: true }));
65
+ }), { sfkOption: UseAnyConfidential, ignoreAutoDelegations: true }));
64
66
  });
65
67
  }
66
68
  function createBasicContact(contactApiForHcp, hcpUser, patient) {
@@ -82,7 +84,7 @@ function createBasicContact(contactApiForHcp, hcpUser, patient) {
82
84
  })),
83
85
  ],
84
86
  descr: 'Weight value',
85
- }), { confidential: true });
87
+ }), { sfkOption: UseAnyConfidential, ignoreAutoDelegations: true });
86
88
  }
87
89
  describe('icc-x-contact-api Tests', () => {
88
90
  it('CreateContactWithUser Success for HCP', () => __awaiter(void 0, void 0, void 0, function* () {
@@ -1 +1 @@
1
- {"version":3,"file":"icc-contact-x-api.js","sourceRoot":"","sources":["../../../test/icc-x-api/icc-contact-x-api.ts"],"names":[],"mappings":"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","sourcesContent":["import { before } from 'mocha'\n\nimport 'isomorphic-fetch'\n\nimport { EntityWithDelegationTypeName, IccContactXApi, IccHelementXApi, IccPatientXApi } from '../../icc-x-api'\nimport { Patient } from '../../icc-api/model/Patient'\nimport { assert, expect } from 'chai'\nimport { randomUUID } from 'crypto'\nimport { getEnvironmentInitializer, hcp1Username, hcp2Username, setLocalStorage, TestUtils } from '../utils/test_utils'\nimport { Code } from '../../icc-api/model/Code'\nimport { Contact } from '../../icc-api/model/Contact'\nimport { Service } from '../../icc-api/model/Service'\nimport { Content } from '../../icc-api/model/Content'\nimport { User } from '../../icc-api/model/User'\nimport { HealthElement } from '../../icc-api/model/HealthElement'\nimport { SubContact } from '../../icc-api/model/SubContact'\nimport { ServiceLink } from '../../icc-api/model/ServiceLink'\nimport { FilterChainService } from '../../icc-api/model/FilterChainService'\nimport { ServiceByHcPartyHealthElementIdsFilter } from '../../icc-x-api/filters/ServiceByHcPartyHealthElementIdsFilter'\nimport { getEnvVariables, TestVars } from '@icure/test-setup/types'\nimport { Measure } from '../../icc-api/model/Measure'\nimport initApi = TestUtils.initApi\n\nsetLocalStorage(fetch)\nlet env: TestVars\n\nbefore(async function () {\n this.timeout(600000)\n const initializer = await getEnvironmentInitializer()\n env = await initializer.execute(getEnvVariables())\n})\n\nasync function createPatient(patientApiForHcp: IccPatientXApi, hcpUser: User) {\n return patientApiForHcp.createPatientWithUser(\n hcpUser,\n await patientApiForHcp.newInstance(\n hcpUser,\n new Patient({\n id: randomUUID(),\n firstName: 'John',\n lastName: 'Snow',\n note: 'Winter is coming',\n })\n )\n )\n}\n\nasync function createHealthElement(healthElementApi: IccHelementXApi, hcpUser: User, patient: Patient) {\n return healthElementApi.createHealthElementWithUser(\n hcpUser,\n await healthElementApi.newInstance(\n hcpUser,\n patient,\n new HealthElement({\n id: randomUUID(),\n note: 'My secret note',\n tags: [\n new Code({\n id: 'ICURE|MY-CODE|1',\n code: 'MY-CODE',\n type: 'ICURE',\n version: '1',\n }),\n ],\n }),\n { confidential: true }\n )\n )\n}\n\nfunction createBasicContact(contactApiForHcp: IccContactXApi, hcpUser: User, patient: Patient) {\n return contactApiForHcp.newInstance(\n hcpUser,\n patient,\n new Contact({\n id: randomUUID(),\n services: [\n contactApiForHcp.service().newInstance(\n hcpUser,\n new Service({\n id: randomUUID(),\n valueDate: 20220203111034,\n content: { en: new Content({ numberValue: 53.5 }) },\n tags: [\n new Code({\n id: 'LOINC|29463-7|2',\n code: '29463-7',\n type: 'LOINC',\n version: '2',\n }),\n ],\n })\n ),\n ],\n descr: 'Weight value',\n }),\n { confidential: true }\n )\n}\n\ndescribe('icc-x-contact-api Tests', () => {\n it('CreateContactWithUser Success for HCP', async () => {\n // Given\n const { userApi: userApiForHcp, patientApi: patientApiForHcp, contactApi: contactApiForHcp, cryptoApi } = await initApi(env!, hcp1Username)\n\n const hcpUser = await userApiForHcp.getCurrentUser()\n\n const patient = await createPatient(patientApiForHcp, hcpUser)\n const contactToCreate = await createBasicContact(contactApiForHcp, hcpUser, patient)\n\n // When\n const createdContact = (await contactApiForHcp.createContactWithUser(hcpUser, contactToCreate)) as Contact\n\n // Then\n const readContact = await contactApiForHcp.getContactWithUser(hcpUser, createdContact.id!)\n expect(readContact).to.not.be.undefined\n expect(readContact).to.not.be.null\n expect(readContact.openingDate).to.not.be.undefined\n expect(readContact.openingDate).to.not.be.null\n expect(readContact.groupId).to.not.be.undefined\n expect(readContact.groupId).to.not.be.null\n expect(readContact.responsible).to.be.equal(hcpUser.healthcarePartyId)\n expect(readContact.id).to.be.equal(contactToCreate.id)\n expect(readContact.descr).to.be.equal(contactToCreate.descr)\n expect(readContact.services![0].responsible).to.be.equal(hcpUser.healthcarePartyId)\n expect(readContact.services![0].id).to.be.equal(contactToCreate.services![0].id)\n expect(readContact.services![0].valueDate).to.be.equal(contactToCreate.services![0].valueDate)\n expect(readContact.services![0].tags![0].id).to.be.equal(contactToCreate.services![0].tags![0].id!)\n expect(await cryptoApi.xapi.encryptionKeysOf({ entity: readContact, type: EntityWithDelegationTypeName.Contact }, undefined)).to.have.length(1)\n const decryptedPatientIds = await contactApiForHcp.decryptPatientIdOf(readContact)\n expect(decryptedPatientIds).to.have.length(1)\n expect(decryptedPatientIds[0]).to.equal(patient.id)\n })\n\n it('Filter Services By HealthElementId - Success', async () => {\n // Given\n const {\n userApi: userApiForHcp,\n patientApi: patientApiForHcp,\n contactApi: contactApiForHcp,\n healthcareElementApi: hElementApiForHcp,\n } = await initApi(env!, hcp1Username)\n\n const hcpUser = await userApiForHcp.getCurrentUser()\n\n const patient = await createPatient(patientApiForHcp, hcpUser)\n const healthElement = await createHealthElement(hElementApiForHcp, hcpUser, patient)\n const contactToCreate = await createBasicContact(contactApiForHcp, hcpUser, patient).then((contact) => {\n return {\n ...contact,\n subContacts: [\n new SubContact({\n id: randomUUID(),\n healthElementId: healthElement!.id!,\n services: [new ServiceLink({ serviceId: contact.services![0].id })],\n }),\n ],\n }\n })\n\n const createdContact = (await contactApiForHcp.createContactWithUser(hcpUser, new Contact(contactToCreate))) as Contact\n assert(createdContact != null)\n\n // When\n const foundServices = await contactApiForHcp.filterServicesBy(\n undefined,\n undefined,\n new FilterChainService({\n filter: new ServiceByHcPartyHealthElementIdsFilter({\n healthcarePartyId: hcpUser.healthcarePartyId!,\n healthElementIds: [healthElement!.id!],\n }),\n })\n )\n\n // Then\n assert(foundServices.rows!.length == 1)\n assert(foundServices.rows![0].id == createdContact.services![0].id)\n assert(foundServices.rows![0].healthElementsIds!.find((heId) => heId == healthElement!.id!) != undefined)\n })\n\n it('contacts findBy for HCP GET and POSt', async () => {\n // Given\n const {\n userApi: userApiForHcp,\n dataOwnerApi: dataOwnerApiForHcp,\n patientApi: patientApiForHcp,\n contactApi: contactApiForHcp,\n healthcareElementApi: hElementApiForHcp,\n cryptoApi: cryptoApiForHcp,\n } = await initApi(env, hcp1Username)\n const hcpUser = await userApiForHcp.getCurrentUser()\n\n const patient = (await createPatient(patientApiForHcp, hcpUser)) as Patient\n const healthElement = await createHealthElement(hElementApiForHcp, hcpUser, patient)\n const contactToCreate = await createBasicContact(contactApiForHcp, hcpUser, patient).then((contact) => {\n return {\n ...contact,\n subContacts: [\n new SubContact({\n id: randomUUID(),\n healthElementId: healthElement!.id!,\n services: [new ServiceLink({ serviceId: contact.services![0].id })],\n }),\n ],\n }\n })\n\n const createdContact = (await contactApiForHcp.createContactWithUser(hcpUser, contactToCreate)) as Contact\n\n // When\n const foundContats = await contactApiForHcp.findBy(hcpUser.healthcarePartyId!, patient, false)\n const foundContatsUsingPost = await contactApiForHcp.findBy(hcpUser.healthcarePartyId!, patient, true)\n\n // Then\n assert(foundContats.length == 1, 'Found items should be 1')\n assert(foundContats[0].id == contactToCreate.id, 'Found item should be the same as the created one')\n\n assert(foundContatsUsingPost.length == 1, 'Found items using post should be 1')\n assert(foundContatsUsingPost[0].id == createdContact.id, 'Found item using post should be the same as the created one')\n })\n\n it('Share with should work as expected', async () => {\n const api1 = await initApi(env!, hcp1Username)\n const user1 = await api1.userApi.getCurrentUser()\n const api2 = await initApi(env!, hcp2Username)\n const user2 = await api2.userApi.getCurrentUser()\n const samplePatient = await api1.patientApi.createPatientWithUser(\n user1,\n await api1.patientApi.newInstance(user1, { firstName: 'Gigio', lastName: 'Bagigio' })\n )\n const encryptedField = 'Something encrypted'\n const entity = await api1.calendarItemApi.createCalendarItemWithHcParty(\n user1,\n await api1.calendarItemApi.newInstancePatient(user1, samplePatient, { details: encryptedField })\n )\n expect(entity.details).to.be.equal(encryptedField)\n await api2.calendarItemApi\n .getCalendarItemWithUser(user2, entity.id)\n .then(() => {\n throw new Error('Should not be able to get the entity')\n })\n .catch(() => {\n /* expected */\n })\n await api1.calendarItemApi.shareWith(user2.healthcarePartyId!, entity)\n const retrieved = await api2.calendarItemApi.getCalendarItemWithUser(user2, entity.id)\n expect(retrieved.details).to.be.equal(encryptedField)\n expect((await api2.calendarItemApi.decryptPatientIdOf(retrieved))[0]).to.equal(samplePatient.id)\n })\n\n it('Instanciation of old Measure should be mapped to new Measure with referenceRanges', () => {\n const oldMeasure = {\n min: 0,\n max: 10,\n }\n\n const newMeasure = new Measure({ ...oldMeasure })\n\n expect(newMeasure.referenceRanges).to.not.be.undefined\n expect(newMeasure.referenceRanges).to.not.undefined\n expect(newMeasure.referenceRanges).to.have.length(1)\n expect(newMeasure.referenceRanges![0].low).to.be.equal(oldMeasure.min)\n expect(newMeasure.referenceRanges![0].high).to.be.equal(oldMeasure.max)\n\n expect(Object.keys(newMeasure)).to.not.contain('min')\n expect(Object.keys(newMeasure)).to.not.contain('max')\n })\n\n it('Instanciation of Service with old Measure should be mapped to new Measure with referenceRanges', () => {\n const serviceJson = {\n id: 'serviceId',\n valueDate: 20220203111034,\n content: {\n en: {\n numberValue: 53.5,\n measureValue: {\n min: 0,\n max: 10,\n },\n },\n },\n tags: [\n {\n id: 'LOINC|29463-7|2',\n code: '29463-7',\n type: 'LOINC',\n version: '2',\n },\n ],\n }\n\n const service = new Service(JSON.parse(JSON.stringify(serviceJson)))\n\n expect(service.content?.en?.measureValue).to.not.be.undefined\n expect(service.content?.en?.measureValue?.referenceRanges).to.not.be.undefined\n expect(service.content?.en?.measureValue?.referenceRanges).to.have.length(1)\n expect(service.content?.en?.measureValue?.referenceRanges![0].low).to.be.equal(serviceJson.content.en.measureValue.min)\n expect(service.content?.en?.measureValue?.referenceRanges![0].high).to.be.equal(serviceJson.content.en.measureValue.max)\n\n expect(Object.keys(service.content?.en?.measureValue!)).to.not.contain('min')\n expect(Object.keys(service.content?.en?.measureValue!)).to.not.contain('max')\n })\n\n it('Instanciation of Contact with old Measure should be mapped to new Measure with referenceRanges', () => {\n const contactJson = {\n id: 'contactId',\n services: [\n {\n id: 'serviceId',\n valueDate: 20220203111034,\n content: {\n en: {\n numberValue: 53.5,\n measureValue: {\n min: 0,\n max: 10,\n },\n },\n },\n tags: [\n {\n id: 'LOINC|29463-7|2',\n code: '29463-7',\n type: 'LOINC',\n version: '2',\n },\n ],\n },\n ],\n descr: 'Weight value',\n }\n\n const contact = new Contact(JSON.parse(JSON.stringify(contactJson)))\n\n expect(contact.services).to.not.be.undefined\n expect(contact.services).to.have.length(1)\n expect(contact.services![0].content?.en?.measureValue).to.not.be.undefined\n expect(contact.services![0].content?.en?.measureValue?.referenceRanges).to.not.be.undefined\n expect(contact.services![0].content?.en?.measureValue?.referenceRanges).to.have.length(1)\n expect(contact.services![0].content?.en?.measureValue?.referenceRanges![0].low).to.be.equal(contactJson.services[0].content.en.measureValue.min)\n expect(contact.services![0].content?.en?.measureValue?.referenceRanges![0].high).to.be.equal(contactJson.services[0].content.en.measureValue.max)\n\n expect(Object.keys(contact.services![0].content?.en?.measureValue!)).to.not.contain('min')\n expect(Object.keys(contact.services![0].content?.en?.measureValue!)).to.not.contain('max')\n })\n})\n"]}
1
+ {"version":3,"file":"icc-contact-x-api.js","sourceRoot":"","sources":["../../../test/icc-x-api/icc-contact-x-api.ts"],"names":[],"mappings":"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","sourcesContent":["import { before } from 'mocha'\n\nimport 'isomorphic-fetch'\n\nimport { EntityWithDelegationTypeName, IccContactXApi, IccHelementXApi, IccPatientXApi } from '../../icc-x-api'\nimport { Patient } from '../../icc-api/model/Patient'\nimport { assert, expect } from 'chai'\nimport { randomUUID } from 'crypto'\nimport { getEnvironmentInitializer, hcp1Username, hcp2Username, setLocalStorage, TestUtils } from '../utils/test_utils'\nimport { Code } from '../../icc-api/model/Code'\nimport { Contact } from '../../icc-api/model/Contact'\nimport { Service } from '../../icc-api/model/Service'\nimport { Content } from '../../icc-api/model/Content'\nimport { User } from '../../icc-api/model/User'\nimport { HealthElement } from '../../icc-api/model/HealthElement'\nimport { SubContact } from '../../icc-api/model/SubContact'\nimport { ServiceLink } from '../../icc-api/model/ServiceLink'\nimport { FilterChainService } from '../../icc-api/model/FilterChainService'\nimport { ServiceByHcPartyHealthElementIdsFilter } from '../../icc-x-api/filters/ServiceByHcPartyHealthElementIdsFilter'\nimport { getEnvVariables, TestVars } from '@icure/test-setup/types'\nimport { Measure } from '../../icc-api/model/Measure'\nimport initApi = TestUtils.initApi\nimport { SecretIdUseOption } from '../../icc-x-api/crypto/SecretIdUseOption'\nimport UseAnyConfidential = SecretIdUseOption.UseAnyConfidential\n\nsetLocalStorage(fetch)\nlet env: TestVars\n\nbefore(async function () {\n this.timeout(600000)\n const initializer = await getEnvironmentInitializer()\n env = await initializer.execute(getEnvVariables())\n})\n\nasync function createPatient(patientApiForHcp: IccPatientXApi, hcpUser: User) {\n return patientApiForHcp.createPatientWithUser(\n hcpUser,\n await patientApiForHcp.newInstance(\n hcpUser,\n new Patient({\n id: randomUUID(),\n firstName: 'John',\n lastName: 'Snow',\n note: 'Winter is coming',\n })\n )\n )\n}\n\nasync function createHealthElement(healthElementApi: IccHelementXApi, hcpUser: User, patient: Patient) {\n return healthElementApi.createHealthElementWithUser(\n hcpUser,\n await healthElementApi.newInstance(\n hcpUser,\n patient,\n new HealthElement({\n id: randomUUID(),\n note: 'My secret note',\n tags: [\n new Code({\n id: 'ICURE|MY-CODE|1',\n code: 'MY-CODE',\n type: 'ICURE',\n version: '1',\n }),\n ],\n }),\n { sfkOption: UseAnyConfidential, ignoreAutoDelegations: true }\n )\n )\n}\n\nfunction createBasicContact(contactApiForHcp: IccContactXApi, hcpUser: User, patient: Patient) {\n return contactApiForHcp.newInstance(\n hcpUser,\n patient,\n new Contact({\n id: randomUUID(),\n services: [\n contactApiForHcp.service().newInstance(\n hcpUser,\n new Service({\n id: randomUUID(),\n valueDate: 20220203111034,\n content: { en: new Content({ numberValue: 53.5 }) },\n tags: [\n new Code({\n id: 'LOINC|29463-7|2',\n code: '29463-7',\n type: 'LOINC',\n version: '2',\n }),\n ],\n })\n ),\n ],\n descr: 'Weight value',\n }),\n { sfkOption: UseAnyConfidential, ignoreAutoDelegations: true }\n )\n}\n\ndescribe('icc-x-contact-api Tests', () => {\n it('CreateContactWithUser Success for HCP', async () => {\n // Given\n const { userApi: userApiForHcp, patientApi: patientApiForHcp, contactApi: contactApiForHcp, cryptoApi } = await initApi(env!, hcp1Username)\n\n const hcpUser = await userApiForHcp.getCurrentUser()\n\n const patient = await createPatient(patientApiForHcp, hcpUser)\n const contactToCreate = await createBasicContact(contactApiForHcp, hcpUser, patient)\n\n // When\n const createdContact = (await contactApiForHcp.createContactWithUser(hcpUser, contactToCreate)) as Contact\n\n // Then\n const readContact = await contactApiForHcp.getContactWithUser(hcpUser, createdContact.id!)\n expect(readContact).to.not.be.undefined\n expect(readContact).to.not.be.null\n expect(readContact.openingDate).to.not.be.undefined\n expect(readContact.openingDate).to.not.be.null\n expect(readContact.groupId).to.not.be.undefined\n expect(readContact.groupId).to.not.be.null\n expect(readContact.responsible).to.be.equal(hcpUser.healthcarePartyId)\n expect(readContact.id).to.be.equal(contactToCreate.id)\n expect(readContact.descr).to.be.equal(contactToCreate.descr)\n expect(readContact.services![0].responsible).to.be.equal(hcpUser.healthcarePartyId)\n expect(readContact.services![0].id).to.be.equal(contactToCreate.services![0].id)\n expect(readContact.services![0].valueDate).to.be.equal(contactToCreate.services![0].valueDate)\n expect(readContact.services![0].tags![0].id).to.be.equal(contactToCreate.services![0].tags![0].id!)\n expect(await cryptoApi.xapi.encryptionKeysOf({ entity: readContact, type: EntityWithDelegationTypeName.Contact }, undefined)).to.have.length(1)\n const decryptedPatientIds = await contactApiForHcp.decryptPatientIdOf(readContact)\n expect(decryptedPatientIds).to.have.length(1)\n expect(decryptedPatientIds[0]).to.equal(patient.id)\n })\n\n it('Filter Services By HealthElementId - Success', async () => {\n // Given\n const {\n userApi: userApiForHcp,\n patientApi: patientApiForHcp,\n contactApi: contactApiForHcp,\n healthcareElementApi: hElementApiForHcp,\n } = await initApi(env!, hcp1Username)\n\n const hcpUser = await userApiForHcp.getCurrentUser()\n\n const patient = await createPatient(patientApiForHcp, hcpUser)\n const healthElement = await createHealthElement(hElementApiForHcp, hcpUser, patient)\n const contactToCreate = await createBasicContact(contactApiForHcp, hcpUser, patient).then((contact) => {\n return {\n ...contact,\n subContacts: [\n new SubContact({\n id: randomUUID(),\n healthElementId: healthElement!.id!,\n services: [new ServiceLink({ serviceId: contact.services![0].id })],\n }),\n ],\n }\n })\n\n const createdContact = (await contactApiForHcp.createContactWithUser(hcpUser, new Contact(contactToCreate))) as Contact\n assert(createdContact != null)\n\n // When\n const foundServices = await contactApiForHcp.filterServicesBy(\n undefined,\n undefined,\n new FilterChainService({\n filter: new ServiceByHcPartyHealthElementIdsFilter({\n healthcarePartyId: hcpUser.healthcarePartyId!,\n healthElementIds: [healthElement!.id!],\n }),\n })\n )\n\n // Then\n assert(foundServices.rows!.length == 1)\n assert(foundServices.rows![0].id == createdContact.services![0].id)\n assert(foundServices.rows![0].healthElementsIds!.find((heId) => heId == healthElement!.id!) != undefined)\n })\n\n it('contacts findBy for HCP GET and POSt', async () => {\n // Given\n const {\n userApi: userApiForHcp,\n dataOwnerApi: dataOwnerApiForHcp,\n patientApi: patientApiForHcp,\n contactApi: contactApiForHcp,\n healthcareElementApi: hElementApiForHcp,\n cryptoApi: cryptoApiForHcp,\n } = await initApi(env, hcp1Username)\n const hcpUser = await userApiForHcp.getCurrentUser()\n\n const patient = (await createPatient(patientApiForHcp, hcpUser)) as Patient\n const healthElement = await createHealthElement(hElementApiForHcp, hcpUser, patient)\n const contactToCreate = await createBasicContact(contactApiForHcp, hcpUser, patient).then((contact) => {\n return {\n ...contact,\n subContacts: [\n new SubContact({\n id: randomUUID(),\n healthElementId: healthElement!.id!,\n services: [new ServiceLink({ serviceId: contact.services![0].id })],\n }),\n ],\n }\n })\n\n const createdContact = (await contactApiForHcp.createContactWithUser(hcpUser, contactToCreate)) as Contact\n\n // When\n const foundContats = await contactApiForHcp.findBy(hcpUser.healthcarePartyId!, patient, false)\n const foundContatsUsingPost = await contactApiForHcp.findBy(hcpUser.healthcarePartyId!, patient, true)\n\n // Then\n assert(foundContats.length == 1, 'Found items should be 1')\n assert(foundContats[0].id == contactToCreate.id, 'Found item should be the same as the created one')\n\n assert(foundContatsUsingPost.length == 1, 'Found items using post should be 1')\n assert(foundContatsUsingPost[0].id == createdContact.id, 'Found item using post should be the same as the created one')\n })\n\n it('Share with should work as expected', async () => {\n const api1 = await initApi(env!, hcp1Username)\n const user1 = await api1.userApi.getCurrentUser()\n const api2 = await initApi(env!, hcp2Username)\n const user2 = await api2.userApi.getCurrentUser()\n const samplePatient = await api1.patientApi.createPatientWithUser(\n user1,\n await api1.patientApi.newInstance(user1, { firstName: 'Gigio', lastName: 'Bagigio' })\n )\n const encryptedField = 'Something encrypted'\n const entity = await api1.calendarItemApi.createCalendarItemWithHcParty(\n user1,\n await api1.calendarItemApi.newInstancePatient(user1, samplePatient, { details: encryptedField })\n )\n expect(entity.details).to.be.equal(encryptedField)\n await api2.calendarItemApi\n .getCalendarItemWithUser(user2, entity.id)\n .then(() => {\n throw new Error('Should not be able to get the entity')\n })\n .catch(() => {\n /* expected */\n })\n await api1.calendarItemApi.shareWith(user2.healthcarePartyId!, entity)\n const retrieved = await api2.calendarItemApi.getCalendarItemWithUser(user2, entity.id)\n expect(retrieved.details).to.be.equal(encryptedField)\n expect((await api2.calendarItemApi.decryptPatientIdOf(retrieved))[0]).to.equal(samplePatient.id)\n })\n\n it('Instanciation of old Measure should be mapped to new Measure with referenceRanges', () => {\n const oldMeasure = {\n min: 0,\n max: 10,\n }\n\n const newMeasure = new Measure({ ...oldMeasure })\n\n expect(newMeasure.referenceRanges).to.not.be.undefined\n expect(newMeasure.referenceRanges).to.not.undefined\n expect(newMeasure.referenceRanges).to.have.length(1)\n expect(newMeasure.referenceRanges![0].low).to.be.equal(oldMeasure.min)\n expect(newMeasure.referenceRanges![0].high).to.be.equal(oldMeasure.max)\n\n expect(Object.keys(newMeasure)).to.not.contain('min')\n expect(Object.keys(newMeasure)).to.not.contain('max')\n })\n\n it('Instanciation of Service with old Measure should be mapped to new Measure with referenceRanges', () => {\n const serviceJson = {\n id: 'serviceId',\n valueDate: 20220203111034,\n content: {\n en: {\n numberValue: 53.5,\n measureValue: {\n min: 0,\n max: 10,\n },\n },\n },\n tags: [\n {\n id: 'LOINC|29463-7|2',\n code: '29463-7',\n type: 'LOINC',\n version: '2',\n },\n ],\n }\n\n const service = new Service(JSON.parse(JSON.stringify(serviceJson)))\n\n expect(service.content?.en?.measureValue).to.not.be.undefined\n expect(service.content?.en?.measureValue?.referenceRanges).to.not.be.undefined\n expect(service.content?.en?.measureValue?.referenceRanges).to.have.length(1)\n expect(service.content?.en?.measureValue?.referenceRanges![0].low).to.be.equal(serviceJson.content.en.measureValue.min)\n expect(service.content?.en?.measureValue?.referenceRanges![0].high).to.be.equal(serviceJson.content.en.measureValue.max)\n\n expect(Object.keys(service.content?.en?.measureValue!)).to.not.contain('min')\n expect(Object.keys(service.content?.en?.measureValue!)).to.not.contain('max')\n })\n\n it('Instanciation of Contact with old Measure should be mapped to new Measure with referenceRanges', () => {\n const contactJson = {\n id: 'contactId',\n services: [\n {\n id: 'serviceId',\n valueDate: 20220203111034,\n content: {\n en: {\n numberValue: 53.5,\n measureValue: {\n min: 0,\n max: 10,\n },\n },\n },\n tags: [\n {\n id: 'LOINC|29463-7|2',\n code: '29463-7',\n type: 'LOINC',\n version: '2',\n },\n ],\n },\n ],\n descr: 'Weight value',\n }\n\n const contact = new Contact(JSON.parse(JSON.stringify(contactJson)))\n\n expect(contact.services).to.not.be.undefined\n expect(contact.services).to.have.length(1)\n expect(contact.services![0].content?.en?.measureValue).to.not.be.undefined\n expect(contact.services![0].content?.en?.measureValue?.referenceRanges).to.not.be.undefined\n expect(contact.services![0].content?.en?.measureValue?.referenceRanges).to.have.length(1)\n expect(contact.services![0].content?.en?.measureValue?.referenceRanges![0].low).to.be.equal(contactJson.services[0].content.en.measureValue.min)\n expect(contact.services![0].content?.en?.measureValue?.referenceRanges![0].high).to.be.equal(contactJson.services[0].content.en.measureValue.max)\n\n expect(Object.keys(contact.services![0].content?.en?.measureValue!)).to.not.contain('min')\n expect(Object.keys(contact.services![0].content?.en?.measureValue!)).to.not.contain('max')\n })\n})\n"]}
@@ -22,6 +22,8 @@ const types_1 = require("@icure/test-setup/types");
22
22
  const HealthElementByIdsFilter_1 = require("../../icc-x-api/filters/HealthElementByIdsFilter");
23
23
  const FilterChainHealthElement_1 = require("../../icc-api/model/FilterChainHealthElement");
24
24
  var initApi = test_utils_1.TestUtils.initApi;
25
+ const SecretIdUseOption_1 = require("../../icc-x-api/crypto/SecretIdUseOption");
26
+ var UseAnyConfidential = SecretIdUseOption_1.SecretIdUseOption.UseAnyConfidential;
25
27
  (0, test_utils_1.setLocalStorage)(fetch);
26
28
  let env;
27
29
  function createPatient(patientApiForHcp, hcpUser) {
@@ -39,7 +41,7 @@ function healthElementToCreate(hElementApiForHcp, hcpUser, patient) {
39
41
  id: (0, crypto_1.randomUUID)(),
40
42
  codes: [new Code_1.Code({ system: 'LOINC', code: '95209', version: '3' })],
41
43
  note: 'SARS-V2',
42
- }), { confidential: true });
44
+ }), { sfkOption: UseAnyConfidential, ignoreAutoDelegations: true });
43
45
  }
44
46
  describe('icc-helement-x-api Tests', () => {
45
47
  (0, mocha_1.before)(function () {
@@ -1 +1 @@
1
- {"version":3,"file":"icc-helement-x-api-test.js","sourceRoot":"","sources":["../../../test/icc-x-api/icc-helement-x-api-test.ts"],"names":[],"mappings":"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","sourcesContent":["import { before } from 'mocha'\n\nimport 'isomorphic-fetch'\n\nimport { EntityWithDelegationTypeName, IccHelementXApi, IccPatientXApi } from '../../icc-x-api'\nimport { Patient } from '../../icc-api/model/Patient'\nimport { assert, expect } from 'chai'\nimport { randomUUID } from 'crypto'\nimport { getEnvironmentInitializer, hcp1Username, hcp2Username, setLocalStorage, TestUtils } from '../utils/test_utils'\nimport { HealthElement } from '../../icc-api/model/HealthElement'\nimport { Code } from '../../icc-api/model/Code'\nimport { User } from '../../icc-api/model/User'\nimport { getEnvVariables, TestVars } from '@icure/test-setup/types'\nimport { HealthElementByIdsFilter } from '../../icc-x-api/filters/HealthElementByIdsFilter'\nimport { FilterChainHealthElement } from '../../icc-api/model/FilterChainHealthElement'\nimport initApi = TestUtils.initApi\n\nsetLocalStorage(fetch)\nlet env: TestVars\n\nasync function createPatient(patientApiForHcp: IccPatientXApi, hcpUser: User) {\n return patientApiForHcp.createPatientWithUser(\n hcpUser,\n await patientApiForHcp.newInstance(\n hcpUser,\n new Patient({\n id: randomUUID(),\n firstName: 'John',\n lastName: 'Snow',\n note: 'Winter is coming',\n })\n )\n )\n}\n\nfunction healthElementToCreate(hElementApiForHcp: IccHelementXApi, hcpUser: User, patient: Patient) {\n return hElementApiForHcp.newInstance(\n hcpUser,\n patient,\n new HealthElement({\n id: randomUUID(),\n codes: [new Code({ system: 'LOINC', code: '95209', version: '3' })],\n note: 'SARS-V2',\n }),\n { confidential: true }\n )\n}\n\ndescribe('icc-helement-x-api Tests', () => {\n before(async function () {\n this.timeout(600000)\n const initializer = await getEnvironmentInitializer()\n env = await initializer.execute(getEnvVariables())\n })\n\n it('CreateHealthElementWithUser Success for HCP', async () => {\n // Given\n const {\n userApi: userApiForHcp,\n dataOwnerApi: dataOwnerApiForHcp,\n patientApi: patientApiForHcp,\n healthcareElementApi: hElementApiForHcp,\n cryptoApi: cryptoApiForHcp,\n } = await initApi(env, hcp1Username)\n\n const hcpUser = await userApiForHcp.getCurrentUser()\n\n const patient = await createPatient(patientApiForHcp, hcpUser)\n const hElementToCreate = await healthElementToCreate(hElementApiForHcp, hcpUser, patient)\n\n // When\n const createdHealthElement = await hElementApiForHcp.createHealthElementWithUser(hcpUser, hElementToCreate)\n\n // Then\n const readHealthElement = await hElementApiForHcp.getHealthElementWithUser(hcpUser, createdHealthElement.id!)\n assert(readHealthElement != null)\n assert(readHealthElement.id != null)\n assert(readHealthElement.note == hElementToCreate.note)\n expect(\n await cryptoApiForHcp.xapi.encryptionKeysOf({ entity: readHealthElement, type: EntityWithDelegationTypeName.HealthElement }, undefined)\n ).to.have.length(1)\n const decryptedPatientIds = await hElementApiForHcp.decryptPatientIdOf(readHealthElement)\n expect(decryptedPatientIds).to.have.length(1)\n expect(decryptedPatientIds[0]).to.equal(patient.id)\n })\n\n it('ModifyHealthElementWithUser Success for HCP', async () => {\n // Given\n const {\n userApi: userApiForHcp,\n dataOwnerApi: dataOwnerApiForHcp,\n patientApi: patientApiForHcp,\n healthcareElementApi: hElementApiForHcp,\n cryptoApi: cryptoApiForHcp,\n } = await initApi(env!, hcp1Username)\n\n const hcpUser = await userApiForHcp.getCurrentUser()\n await initApi(env!, hcp1Username)\n\n const patient = await createPatient(patientApiForHcp, hcpUser)\n const createdHealthElement = await hElementApiForHcp.createHealthElementWithUser(\n hcpUser,\n await healthElementToCreate(hElementApiForHcp, hcpUser, patient)\n )\n\n // When\n const newNote = 'SARS-V2 (COVID-19)'\n const modifiedHealthElement = await hElementApiForHcp.modifyHealthElementWithUser(hcpUser, {\n ...createdHealthElement,\n note: newNote,\n })\n\n // Then\n const readHealthElement = await hElementApiForHcp.getHealthElementWithUser(hcpUser, createdHealthElement.id!)\n assert(readHealthElement != null)\n assert(readHealthElement.id != null)\n assert(readHealthElement.note != createdHealthElement.note)\n assert(readHealthElement.note == modifiedHealthElement.note)\n assert(readHealthElement.note == newNote)\n expect(\n await cryptoApiForHcp.xapi.encryptionKeysOf({ entity: readHealthElement, type: EntityWithDelegationTypeName.HealthElement }, undefined)\n ).to.have.length(1)\n const decryptedPatientIds = await hElementApiForHcp.decryptPatientIdOf(readHealthElement)\n expect(decryptedPatientIds).to.have.length(1)\n expect(decryptedPatientIds[0]).to.equal(patient.id)\n })\n\n it('findHealthElementsByHCPartyAndPatientWithUser Success for HCP', async () => {\n // Given\n const {\n userApi: userApiForHcp,\n dataOwnerApi: dataOwnerApiForHcp,\n patientApi: patientApiForHcp,\n healthcareElementApi: hElementApiForHcp,\n cryptoApi: cryptoApiForHcp,\n } = await initApi(env!, hcp1Username)\n\n const hcpUser = await userApiForHcp.getCurrentUser()\n\n const patient = (await createPatient(patientApiForHcp, hcpUser)) as Patient\n const createdHealthElement = await hElementApiForHcp.createHealthElementWithUser(\n hcpUser,\n await healthElementToCreate(hElementApiForHcp, hcpUser, patient)\n )\n\n // When\n const foundHealthElements = await hElementApiForHcp.findHealthElementsByHCPartyAndPatientWithUser(hcpUser, hcpUser.healthcarePartyId!, patient)\n const foundHealthElementsUsingPost = await hElementApiForHcp.findHealthElementsByHCPartyAndPatientWithUser(\n hcpUser,\n hcpUser.healthcarePartyId!,\n patient,\n true\n )\n\n // Then\n assert(foundHealthElements.length == 1, 'Found health elements should be 1')\n assert(foundHealthElements[0].id == createdHealthElement.id, 'Found health element should be the same as the created one')\n\n assert(foundHealthElementsUsingPost.length == 1, 'Found health elements using POST should be 1')\n assert(foundHealthElementsUsingPost[0].id == createdHealthElement.id, 'Found health element using POST should be the same as the created one')\n })\n\n it('filter healthcare element result should return same output by id', async () => {\n // Given\n const {\n userApi: userApiForHcp,\n dataOwnerApi: dataOwnerApiForHcp,\n patientApi: patientApiForHcp,\n healthcareElementApi: hElementApiForHcp,\n cryptoApi: cryptoApiForHcp,\n } = await initApi(env!, hcp1Username)\n const hcpUser = await userApiForHcp.getCurrentUser()\n\n const patient = (await createPatient(patientApiForHcp, hcpUser)) as Patient\n const createdHealthElement = await hElementApiForHcp.createHealthElementWithUser(\n hcpUser,\n await healthElementToCreate(hElementApiForHcp, hcpUser, patient)\n )\n\n // When\n const healthElementById = await hElementApiForHcp.getHealthElementWithUser(hcpUser, createdHealthElement.id)\n const healthElementByFilter = await hElementApiForHcp.filterByWithUser(\n hcpUser,\n undefined,\n undefined,\n new FilterChainHealthElement({\n filter: new HealthElementByIdsFilter({\n ids: [createdHealthElement.id!],\n healthcarePartyId: hcpUser.healthcarePartyId!,\n }),\n })\n )\n\n // Then\n // expect(foundHealthElements).to.have.length(1)\n // expect(foundHealthElements[0].id).to.equal(createdHealthElement.id)\n assert(healthElementByFilter.rows?.length == 1, 'Found health elements should be 1')\n assert(healthElementByFilter.rows[0].id == createdHealthElement.id, 'Found health element should be the same as the created one')\n\n assert(!!healthElementById.note, 'Health element should have a note')\n\n assert(\n JSON.stringify(healthElementByFilter.rows[0]) === JSON.stringify(healthElementById),\n 'Found health elements by id should match the one found by filter'\n )\n })\n\n it('Share with should work as expected', async () => {\n const api1 = await initApi(env!, hcp1Username)\n const user1 = await api1.userApi.getCurrentUser()\n const api2 = await initApi(env!, hcp2Username)\n const user2 = await api2.userApi.getCurrentUser()\n const samplePatient = await api1.patientApi.createPatientWithUser(\n user1,\n await api1.patientApi.newInstance(user1, { firstName: 'Gigio', lastName: 'Bagigio' })\n )\n const encryptedField = 'Something encrypted'\n const entity = await api1.healthcareElementApi.createHealthElementWithUser(\n user1,\n await api1.healthcareElementApi.newInstance(user1, samplePatient, { note: encryptedField })\n )\n expect(entity.note).to.be.equal(encryptedField)\n await api2.healthcareElementApi\n .getHealthElementWithUser(user2, entity.id)\n .then(() => {\n throw new Error('Should not be able to get the entity')\n })\n .catch(() => {\n /* expected */\n })\n await api1.healthcareElementApi.shareWith(user2.healthcarePartyId!, entity)\n const retrieved = await api2.healthcareElementApi.getHealthElementWithUser(user2, entity.id)\n expect(retrieved.note).to.be.equal(encryptedField)\n expect((await api2.healthcareElementApi.decryptPatientIdOf(retrieved))[0]).to.equal(samplePatient.id)\n })\n})\n"]}
1
+ {"version":3,"file":"icc-helement-x-api-test.js","sourceRoot":"","sources":["../../../test/icc-x-api/icc-helement-x-api-test.ts"],"names":[],"mappings":"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","sourcesContent":["import { before } from 'mocha'\n\nimport 'isomorphic-fetch'\n\nimport { EntityWithDelegationTypeName, IccHelementXApi, IccPatientXApi } from '../../icc-x-api'\nimport { Patient } from '../../icc-api/model/Patient'\nimport { assert, expect } from 'chai'\nimport { randomUUID } from 'crypto'\nimport { getEnvironmentInitializer, hcp1Username, hcp2Username, setLocalStorage, TestUtils } from '../utils/test_utils'\nimport { HealthElement } from '../../icc-api/model/HealthElement'\nimport { Code } from '../../icc-api/model/Code'\nimport { User } from '../../icc-api/model/User'\nimport { getEnvVariables, TestVars } from '@icure/test-setup/types'\nimport { HealthElementByIdsFilter } from '../../icc-x-api/filters/HealthElementByIdsFilter'\nimport { FilterChainHealthElement } from '../../icc-api/model/FilterChainHealthElement'\nimport initApi = TestUtils.initApi\nimport { SecretIdUseOption } from '../../icc-x-api/crypto/SecretIdUseOption'\nimport UseAnyConfidential = SecretIdUseOption.UseAnyConfidential\n\nsetLocalStorage(fetch)\nlet env: TestVars\n\nasync function createPatient(patientApiForHcp: IccPatientXApi, hcpUser: User) {\n return patientApiForHcp.createPatientWithUser(\n hcpUser,\n await patientApiForHcp.newInstance(\n hcpUser,\n new Patient({\n id: randomUUID(),\n firstName: 'John',\n lastName: 'Snow',\n note: 'Winter is coming',\n })\n )\n )\n}\n\nfunction healthElementToCreate(hElementApiForHcp: IccHelementXApi, hcpUser: User, patient: Patient) {\n return hElementApiForHcp.newInstance(\n hcpUser,\n patient,\n new HealthElement({\n id: randomUUID(),\n codes: [new Code({ system: 'LOINC', code: '95209', version: '3' })],\n note: 'SARS-V2',\n }),\n { sfkOption: UseAnyConfidential, ignoreAutoDelegations: true }\n )\n}\n\ndescribe('icc-helement-x-api Tests', () => {\n before(async function () {\n this.timeout(600000)\n const initializer = await getEnvironmentInitializer()\n env = await initializer.execute(getEnvVariables())\n })\n\n it('CreateHealthElementWithUser Success for HCP', async () => {\n // Given\n const {\n userApi: userApiForHcp,\n dataOwnerApi: dataOwnerApiForHcp,\n patientApi: patientApiForHcp,\n healthcareElementApi: hElementApiForHcp,\n cryptoApi: cryptoApiForHcp,\n } = await initApi(env, hcp1Username)\n\n const hcpUser = await userApiForHcp.getCurrentUser()\n\n const patient = await createPatient(patientApiForHcp, hcpUser)\n const hElementToCreate = await healthElementToCreate(hElementApiForHcp, hcpUser, patient)\n\n // When\n const createdHealthElement = await hElementApiForHcp.createHealthElementWithUser(hcpUser, hElementToCreate)\n\n // Then\n const readHealthElement = await hElementApiForHcp.getHealthElementWithUser(hcpUser, createdHealthElement.id!)\n assert(readHealthElement != null)\n assert(readHealthElement.id != null)\n assert(readHealthElement.note == hElementToCreate.note)\n expect(\n await cryptoApiForHcp.xapi.encryptionKeysOf({ entity: readHealthElement, type: EntityWithDelegationTypeName.HealthElement }, undefined)\n ).to.have.length(1)\n const decryptedPatientIds = await hElementApiForHcp.decryptPatientIdOf(readHealthElement)\n expect(decryptedPatientIds).to.have.length(1)\n expect(decryptedPatientIds[0]).to.equal(patient.id)\n })\n\n it('ModifyHealthElementWithUser Success for HCP', async () => {\n // Given\n const {\n userApi: userApiForHcp,\n dataOwnerApi: dataOwnerApiForHcp,\n patientApi: patientApiForHcp,\n healthcareElementApi: hElementApiForHcp,\n cryptoApi: cryptoApiForHcp,\n } = await initApi(env!, hcp1Username)\n\n const hcpUser = await userApiForHcp.getCurrentUser()\n await initApi(env!, hcp1Username)\n\n const patient = await createPatient(patientApiForHcp, hcpUser)\n const createdHealthElement = await hElementApiForHcp.createHealthElementWithUser(\n hcpUser,\n await healthElementToCreate(hElementApiForHcp, hcpUser, patient)\n )\n\n // When\n const newNote = 'SARS-V2 (COVID-19)'\n const modifiedHealthElement = await hElementApiForHcp.modifyHealthElementWithUser(hcpUser, {\n ...createdHealthElement,\n note: newNote,\n })\n\n // Then\n const readHealthElement = await hElementApiForHcp.getHealthElementWithUser(hcpUser, createdHealthElement.id!)\n assert(readHealthElement != null)\n assert(readHealthElement.id != null)\n assert(readHealthElement.note != createdHealthElement.note)\n assert(readHealthElement.note == modifiedHealthElement.note)\n assert(readHealthElement.note == newNote)\n expect(\n await cryptoApiForHcp.xapi.encryptionKeysOf({ entity: readHealthElement, type: EntityWithDelegationTypeName.HealthElement }, undefined)\n ).to.have.length(1)\n const decryptedPatientIds = await hElementApiForHcp.decryptPatientIdOf(readHealthElement)\n expect(decryptedPatientIds).to.have.length(1)\n expect(decryptedPatientIds[0]).to.equal(patient.id)\n })\n\n it('findHealthElementsByHCPartyAndPatientWithUser Success for HCP', async () => {\n // Given\n const {\n userApi: userApiForHcp,\n dataOwnerApi: dataOwnerApiForHcp,\n patientApi: patientApiForHcp,\n healthcareElementApi: hElementApiForHcp,\n cryptoApi: cryptoApiForHcp,\n } = await initApi(env!, hcp1Username)\n\n const hcpUser = await userApiForHcp.getCurrentUser()\n\n const patient = (await createPatient(patientApiForHcp, hcpUser)) as Patient\n const createdHealthElement = await hElementApiForHcp.createHealthElementWithUser(\n hcpUser,\n await healthElementToCreate(hElementApiForHcp, hcpUser, patient)\n )\n\n // When\n const foundHealthElements = await hElementApiForHcp.findHealthElementsByHCPartyAndPatientWithUser(hcpUser, hcpUser.healthcarePartyId!, patient)\n const foundHealthElementsUsingPost = await hElementApiForHcp.findHealthElementsByHCPartyAndPatientWithUser(\n hcpUser,\n hcpUser.healthcarePartyId!,\n patient,\n true\n )\n\n // Then\n assert(foundHealthElements.length == 1, 'Found health elements should be 1')\n assert(foundHealthElements[0].id == createdHealthElement.id, 'Found health element should be the same as the created one')\n\n assert(foundHealthElementsUsingPost.length == 1, 'Found health elements using POST should be 1')\n assert(foundHealthElementsUsingPost[0].id == createdHealthElement.id, 'Found health element using POST should be the same as the created one')\n })\n\n it('filter healthcare element result should return same output by id', async () => {\n // Given\n const {\n userApi: userApiForHcp,\n dataOwnerApi: dataOwnerApiForHcp,\n patientApi: patientApiForHcp,\n healthcareElementApi: hElementApiForHcp,\n cryptoApi: cryptoApiForHcp,\n } = await initApi(env!, hcp1Username)\n const hcpUser = await userApiForHcp.getCurrentUser()\n\n const patient = (await createPatient(patientApiForHcp, hcpUser)) as Patient\n const createdHealthElement = await hElementApiForHcp.createHealthElementWithUser(\n hcpUser,\n await healthElementToCreate(hElementApiForHcp, hcpUser, patient)\n )\n\n // When\n const healthElementById = await hElementApiForHcp.getHealthElementWithUser(hcpUser, createdHealthElement.id)\n const healthElementByFilter = await hElementApiForHcp.filterByWithUser(\n hcpUser,\n undefined,\n undefined,\n new FilterChainHealthElement({\n filter: new HealthElementByIdsFilter({\n ids: [createdHealthElement.id!],\n healthcarePartyId: hcpUser.healthcarePartyId!,\n }),\n })\n )\n\n // Then\n // expect(foundHealthElements).to.have.length(1)\n // expect(foundHealthElements[0].id).to.equal(createdHealthElement.id)\n assert(healthElementByFilter.rows?.length == 1, 'Found health elements should be 1')\n assert(healthElementByFilter.rows[0].id == createdHealthElement.id, 'Found health element should be the same as the created one')\n\n assert(!!healthElementById.note, 'Health element should have a note')\n\n assert(\n JSON.stringify(healthElementByFilter.rows[0]) === JSON.stringify(healthElementById),\n 'Found health elements by id should match the one found by filter'\n )\n })\n\n it('Share with should work as expected', async () => {\n const api1 = await initApi(env!, hcp1Username)\n const user1 = await api1.userApi.getCurrentUser()\n const api2 = await initApi(env!, hcp2Username)\n const user2 = await api2.userApi.getCurrentUser()\n const samplePatient = await api1.patientApi.createPatientWithUser(\n user1,\n await api1.patientApi.newInstance(user1, { firstName: 'Gigio', lastName: 'Bagigio' })\n )\n const encryptedField = 'Something encrypted'\n const entity = await api1.healthcareElementApi.createHealthElementWithUser(\n user1,\n await api1.healthcareElementApi.newInstance(user1, samplePatient, { note: encryptedField })\n )\n expect(entity.note).to.be.equal(encryptedField)\n await api2.healthcareElementApi\n .getHealthElementWithUser(user2, entity.id)\n .then(() => {\n throw new Error('Should not be able to get the entity')\n })\n .catch(() => {\n /* expected */\n })\n await api1.healthcareElementApi.shareWith(user2.healthcarePartyId!, entity)\n const retrieved = await api2.healthcareElementApi.getHealthElementWithUser(user2, entity.id)\n expect(retrieved.note).to.be.equal(encryptedField)\n expect((await api2.healthcareElementApi.decryptPatientIdOf(retrieved))[0]).to.equal(samplePatient.id)\n })\n})\n"]}