@icure/api 7.1.16 → 8.0.0-RC.2
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.
- package/icc-api/api/IccAccesslogApi.d.ts +12 -1
- package/icc-api/api/IccAccesslogApi.js +142 -98
- package/icc-api/api/IccAccesslogApi.js.map +1 -1
- package/icc-api/api/IccBemikronoApi.d.ts +81 -0
- package/icc-api/api/IccBemikronoApi.js +163 -0
- package/icc-api/api/IccBemikronoApi.js.map +1 -0
- package/icc-api/api/IccCalendarItemApi.d.ts +21 -1
- package/icc-api/api/IccCalendarItemApi.js +183 -117
- package/icc-api/api/IccCalendarItemApi.js.map +1 -1
- package/icc-api/api/IccClassificationApi.d.ts +21 -1
- package/icc-api/api/IccClassificationApi.js +119 -63
- package/icc-api/api/IccClassificationApi.js.map +1 -1
- package/icc-api/api/IccContactApi.d.ts +21 -1
- package/icc-api/api/IccContactApi.js +385 -294
- package/icc-api/api/IccContactApi.js.map +1 -1
- package/icc-api/api/IccDocumentApi.d.ts +38 -25
- package/icc-api/api/IccDocumentApi.js +279 -212
- package/icc-api/api/IccDocumentApi.js.map +1 -1
- package/icc-api/api/IccExchangeDataApi.d.ts +19 -0
- package/icc-api/api/IccExchangeDataApi.js +85 -0
- package/icc-api/api/IccExchangeDataApi.js.map +1 -0
- package/icc-api/api/IccExchangeDataMapApi.d.ts +18 -0
- package/icc-api/api/IccExchangeDataMapApi.js +65 -0
- package/icc-api/api/IccExchangeDataMapApi.js.map +1 -0
- package/icc-api/api/IccFormApi.d.ts +21 -1
- package/icc-api/api/IccFormApi.js +321 -229
- package/icc-api/api/IccFormApi.js.map +1 -1
- package/icc-api/api/IccHelementApi.d.ts +21 -1
- package/icc-api/api/IccHelementApi.js +207 -137
- package/icc-api/api/IccHelementApi.js.map +1 -1
- package/icc-api/api/IccInvoiceApi.d.ts +21 -1
- package/icc-api/api/IccInvoiceApi.js +404 -298
- package/icc-api/api/IccInvoiceApi.js.map +1 -1
- package/icc-api/api/IccMaintenanceTaskApi.d.ts +12 -1
- package/icc-api/api/IccMaintenanceTaskApi.js +79 -43
- package/icc-api/api/IccMaintenanceTaskApi.js.map +1 -1
- package/icc-api/api/IccMessageApi.d.ts +28 -1
- package/icc-api/api/IccMessageApi.js +294 -191
- package/icc-api/api/IccMessageApi.js.map +1 -1
- package/icc-api/api/IccPatientApi.d.ts +12 -1
- package/icc-api/api/IccPatientApi.js +447 -351
- package/icc-api/api/IccPatientApi.js.map +1 -1
- package/icc-api/api/IccReceiptApi.d.ts +22 -8
- package/icc-api/api/IccReceiptApi.js +121 -64
- package/icc-api/api/IccReceiptApi.js.map +1 -1
- package/icc-api/api/IccRestApiPath.js +1 -1
- package/icc-api/api/IccRestApiPath.js.map +1 -1
- package/icc-api/api/IccSecureDelegationKeyMapApi.d.ts +26 -0
- package/icc-api/api/IccSecureDelegationKeyMapApi.js +71 -0
- package/icc-api/api/IccSecureDelegationKeyMapApi.js.map +1 -0
- package/icc-api/api/IccTimeTableApi.d.ts +12 -1
- package/icc-api/api/IccTimeTableApi.js +86 -48
- package/icc-api/api/IccTimeTableApi.js.map +1 -1
- package/icc-api/api/IccTopicApi.d.ts +90 -0
- package/icc-api/api/IccTopicApi.js +193 -0
- package/icc-api/api/IccTopicApi.js.map +1 -0
- package/icc-api/index.d.ts +2 -0
- package/icc-api/index.js +2 -0
- package/icc-api/index.js.map +1 -1
- package/icc-api/model/AbstractFilterMessage.d.ts +15 -0
- package/icc-api/model/AbstractFilterMessage.js +21 -0
- package/icc-api/model/AbstractFilterMessage.js.map +1 -0
- package/icc-api/model/AbstractFilterTopic.d.ts +15 -0
- package/icc-api/model/AbstractFilterTopic.js +21 -0
- package/icc-api/model/AbstractFilterTopic.js.map +1 -0
- package/icc-api/model/AccessLog.d.ts +2 -0
- package/icc-api/model/AccessLog.js.map +1 -1
- package/icc-api/model/Article.d.ts +2 -0
- package/icc-api/model/Article.js.map +1 -1
- package/icc-api/model/CalendarItem.d.ts +2 -0
- package/icc-api/model/CalendarItem.js.map +1 -1
- package/icc-api/model/Classification.d.ts +2 -0
- package/icc-api/model/Classification.js.map +1 -1
- package/icc-api/model/ClassificationTemplate.d.ts +2 -0
- package/icc-api/model/ClassificationTemplate.js.map +1 -1
- package/icc-api/model/Connection.d.ts +1 -1
- package/icc-api/model/Connection.js.map +1 -1
- package/icc-api/model/Contact.d.ts +2 -0
- package/icc-api/model/Contact.js.map +1 -1
- package/icc-api/model/Device.d.ts +4 -4
- package/icc-api/model/Device.js.map +1 -1
- package/icc-api/model/Document.d.ts +2 -0
- package/icc-api/model/Document.js.map +1 -1
- package/icc-api/model/ExchangeDataMapCreationBatch.d.ts +13 -0
- package/icc-api/model/ExchangeDataMapCreationBatch.js +10 -0
- package/icc-api/model/ExchangeDataMapCreationBatch.js.map +1 -0
- package/icc-api/model/FilterChainMessage.d.ts +19 -0
- package/icc-api/model/FilterChainMessage.js +11 -0
- package/icc-api/model/FilterChainMessage.js.map +1 -0
- package/icc-api/model/FilterChainTopic.d.ts +19 -0
- package/icc-api/model/FilterChainTopic.js +11 -0
- package/icc-api/model/FilterChainTopic.js.map +1 -0
- package/icc-api/model/Form.d.ts +2 -0
- package/icc-api/model/Form.js.map +1 -1
- package/icc-api/model/HealthElement.d.ts +2 -0
- package/icc-api/model/HealthElement.js.map +1 -1
- package/icc-api/model/HealthcareParty.d.ts +2 -2
- package/icc-api/model/HealthcareParty.js +13 -1
- package/icc-api/model/HealthcareParty.js.map +1 -1
- package/icc-api/model/IcureStub.d.ts +2 -0
- package/icc-api/model/IcureStub.js.map +1 -1
- package/icc-api/model/Invoice.d.ts +2 -0
- package/icc-api/model/Invoice.js.map +1 -1
- package/icc-api/model/MaintenanceTask.d.ts +13 -10
- package/icc-api/model/MaintenanceTask.js +13 -11
- package/icc-api/model/MaintenanceTask.js.map +1 -1
- package/icc-api/model/Message.d.ts +2 -0
- package/icc-api/model/Message.js.map +1 -1
- package/icc-api/model/PaginatedListExchangeData.d.ts +9 -0
- package/icc-api/model/PaginatedListExchangeData.js +10 -0
- package/icc-api/model/PaginatedListExchangeData.js.map +1 -0
- package/icc-api/model/PaginatedListTopic.d.ts +20 -0
- package/icc-api/model/PaginatedListTopic.js +10 -0
- package/icc-api/model/PaginatedListTopic.js.map +1 -0
- package/icc-api/model/Patient.d.ts +4 -2
- package/icc-api/model/Patient.js.map +1 -1
- package/icc-api/model/PatientByHcPartyGenderEducationProfession.d.ts +31 -0
- package/icc-api/model/PatientByHcPartyGenderEducationProfession.js +32 -0
- package/icc-api/model/PatientByHcPartyGenderEducationProfession.js.map +1 -0
- package/icc-api/model/Receipt.d.ts +2 -0
- package/icc-api/model/Receipt.js.map +1 -1
- package/icc-api/model/SecureDelegation.d.ts +52 -0
- package/icc-api/model/SecureDelegation.js +16 -0
- package/icc-api/model/SecureDelegation.js.map +1 -0
- package/icc-api/model/SecurityMetadata.d.ts +33 -0
- package/icc-api/model/SecurityMetadata.js +13 -0
- package/icc-api/model/SecurityMetadata.js.map +1 -0
- package/icc-api/model/Service.d.ts +2 -0
- package/icc-api/model/Service.js.map +1 -1
- package/icc-api/model/TimeTable.d.ts +2 -0
- package/icc-api/model/TimeTable.js.map +1 -1
- package/icc-api/model/Topic.d.ts +95 -0
- package/icc-api/model/Topic.js +16 -0
- package/icc-api/model/Topic.js.map +1 -0
- package/icc-api/model/internal/ExchangeData.d.ts +64 -0
- package/icc-api/model/internal/ExchangeData.js +15 -0
- package/icc-api/model/internal/ExchangeData.js.map +1 -0
- package/icc-api/model/internal/ExchangeDataMap.d.ts +24 -0
- package/icc-api/model/internal/ExchangeDataMap.js +13 -0
- package/icc-api/model/internal/ExchangeDataMap.js.map +1 -0
- package/icc-api/model/internal/SecureDelegationKeyMap.d.ts +14 -0
- package/icc-api/model/internal/SecureDelegationKeyMap.js +13 -0
- package/icc-api/model/internal/SecureDelegationKeyMap.js.map +1 -0
- package/icc-api/model/models.d.ts +26 -40
- package/icc-api/model/models.js +19 -37
- package/icc-api/model/models.js.map +1 -1
- package/icc-api/model/requests/EntityBulkShareResult.d.ts +28 -0
- package/icc-api/model/requests/EntityBulkShareResult.js +16 -0
- package/icc-api/model/requests/EntityBulkShareResult.js.map +1 -0
- package/icc-api/model/requests/EntityShareOrMetadataUpdateRequest.d.ts +10 -0
- package/icc-api/model/requests/EntityShareOrMetadataUpdateRequest.js +17 -0
- package/icc-api/model/requests/EntityShareOrMetadataUpdateRequest.js.map +1 -0
- package/icc-api/model/requests/EntityShareRequest.d.ts +110 -0
- package/icc-api/model/requests/EntityShareRequest.js +63 -0
- package/icc-api/model/requests/EntityShareRequest.js.map +1 -0
- package/icc-api/model/requests/EntitySharedMetadataUpdateRequest.d.ts +54 -0
- package/icc-api/model/requests/EntitySharedMetadataUpdateRequest.js +24 -0
- package/icc-api/model/requests/EntitySharedMetadataUpdateRequest.js.map +1 -0
- package/icc-api/model/requests/MinimalEntityBulkShareResult.d.ts +23 -0
- package/icc-api/model/requests/MinimalEntityBulkShareResult.js +13 -0
- package/icc-api/model/requests/MinimalEntityBulkShareResult.js.map +1 -0
- package/icc-api/model/requests/RejectedShareOrMetadataUpdateRequest.d.ts +21 -0
- package/icc-api/model/requests/RejectedShareOrMetadataUpdateRequest.js +14 -0
- package/icc-api/model/requests/RejectedShareOrMetadataUpdateRequest.js.map +1 -0
- package/icc-x-api/basexapi/EncryptedEntityXApi.d.ts +55 -6
- package/icc-x-api/basexapi/EncryptedEntityXApi.js.map +1 -1
- package/icc-x-api/crypto/AES.js +1 -1
- package/icc-x-api/crypto/AES.js.map +1 -1
- package/icc-x-api/crypto/AccessControlKeysHeadersProvider.d.ts +18 -0
- package/icc-x-api/crypto/AccessControlKeysHeadersProvider.js +50 -0
- package/icc-x-api/crypto/AccessControlKeysHeadersProvider.js.map +1 -0
- package/icc-x-api/crypto/AccessControlSecretUtils.d.ts +43 -0
- package/icc-x-api/crypto/AccessControlSecretUtils.js +97 -0
- package/icc-x-api/crypto/AccessControlSecretUtils.js.map +1 -0
- package/icc-x-api/crypto/BaseExchangeDataManager.d.ts +146 -0
- package/icc-x-api/crypto/BaseExchangeDataManager.js +342 -0
- package/icc-x-api/crypto/BaseExchangeDataManager.js.map +1 -0
- package/icc-x-api/crypto/BaseExchangeKeysManager.d.ts +0 -18
- package/icc-x-api/crypto/BaseExchangeKeysManager.js +11 -85
- package/icc-x-api/crypto/BaseExchangeKeysManager.js.map +1 -1
- package/icc-x-api/crypto/ConfidentialEntities.d.ts +26 -16
- package/icc-x-api/crypto/ConfidentialEntities.js +30 -17
- package/icc-x-api/crypto/ConfidentialEntities.js.map +1 -1
- package/icc-x-api/crypto/CryptoStrategies.d.ts +8 -1
- package/icc-x-api/crypto/CryptoStrategies.js.map +1 -1
- package/icc-x-api/crypto/DelegationsDeAnonymization.d.ts +44 -0
- package/icc-x-api/crypto/DelegationsDeAnonymization.js +235 -0
- package/icc-x-api/crypto/DelegationsDeAnonymization.js.map +1 -0
- package/icc-x-api/crypto/ExchangeDataManager.d.ts +97 -0
- package/icc-x-api/crypto/ExchangeDataManager.js +501 -0
- package/icc-x-api/crypto/ExchangeDataManager.js.map +1 -0
- package/icc-x-api/crypto/ExchangeDataMapManager.d.ts +32 -0
- package/icc-x-api/crypto/ExchangeDataMapManager.js +70 -0
- package/icc-x-api/crypto/ExchangeDataMapManager.js.map +1 -0
- package/icc-x-api/crypto/ExchangeKeysManager.d.ts +4 -16
- package/icc-x-api/crypto/ExchangeKeysManager.js +4 -62
- package/icc-x-api/crypto/ExchangeKeysManager.js.map +1 -1
- package/icc-x-api/crypto/ExtendedApisUtils.d.ts +326 -0
- package/icc-x-api/crypto/ExtendedApisUtils.js +3 -0
- package/icc-x-api/crypto/ExtendedApisUtils.js.map +1 -0
- package/icc-x-api/crypto/ExtendedApisUtilsImpl.d.ts +174 -0
- package/icc-x-api/crypto/ExtendedApisUtilsImpl.js +559 -0
- package/icc-x-api/crypto/ExtendedApisUtilsImpl.js.map +1 -0
- package/icc-x-api/crypto/KeyRecovery.d.ts +5 -2
- package/icc-x-api/crypto/KeyRecovery.js +59 -29
- package/icc-x-api/crypto/KeyRecovery.js.map +1 -1
- package/icc-x-api/crypto/LegacyCryptoStrategies.d.ts +7 -2
- package/icc-x-api/crypto/LegacyCryptoStrategies.js +8 -1
- package/icc-x-api/crypto/LegacyCryptoStrategies.js.map +1 -1
- package/icc-x-api/crypto/LegacyDelegationSecurityMetadataDecryptor.d.ts +33 -0
- package/icc-x-api/crypto/LegacyDelegationSecurityMetadataDecryptor.js +141 -0
- package/icc-x-api/crypto/LegacyDelegationSecurityMetadataDecryptor.js.map +1 -0
- package/icc-x-api/crypto/RSA.d.ts +34 -8
- package/icc-x-api/crypto/RSA.js +80 -13
- package/icc-x-api/crypto/RSA.js.map +1 -1
- package/icc-x-api/crypto/SecureDelegationsEncryption.d.ts +54 -0
- package/icc-x-api/crypto/SecureDelegationsEncryption.js +178 -0
- package/icc-x-api/crypto/SecureDelegationsEncryption.js.map +1 -0
- package/icc-x-api/crypto/SecureDelegationsManager.d.ts +66 -0
- package/icc-x-api/crypto/SecureDelegationsManager.js +261 -0
- package/icc-x-api/crypto/SecureDelegationsManager.js.map +1 -0
- package/icc-x-api/crypto/SecureDelegationsSecurityMetadataDecryptor.d.ts +46 -0
- package/icc-x-api/crypto/SecureDelegationsSecurityMetadataDecryptor.js +312 -0
- package/icc-x-api/crypto/SecureDelegationsSecurityMetadataDecryptor.js.map +1 -0
- package/icc-x-api/crypto/SecurityMetadataDecryptor.d.ts +97 -0
- package/icc-x-api/crypto/SecurityMetadataDecryptor.js +79 -0
- package/icc-x-api/crypto/SecurityMetadataDecryptor.js.map +1 -0
- package/icc-x-api/crypto/ShamirKeysManager.d.ts +5 -5
- package/icc-x-api/crypto/ShamirKeysManager.js +6 -9
- package/icc-x-api/crypto/ShamirKeysManager.js.map +1 -1
- package/icc-x-api/crypto/TransferKeysManager.d.ts +8 -6
- package/icc-x-api/crypto/TransferKeysManager.js +75 -52
- package/icc-x-api/crypto/TransferKeysManager.js.map +1 -1
- package/icc-x-api/crypto/{KeyManager.d.ts → UserEncryptionKeysManager.d.ts} +4 -6
- package/icc-x-api/crypto/{KeyManager.js → UserEncryptionKeysManager.js} +43 -23
- package/icc-x-api/crypto/UserEncryptionKeysManager.js.map +1 -0
- package/icc-x-api/crypto/UserSignatureKeysManager.d.ts +26 -0
- package/icc-x-api/crypto/UserSignatureKeysManager.js +74 -0
- package/icc-x-api/crypto/UserSignatureKeysManager.js.map +1 -0
- package/icc-x-api/crypto/utils.d.ts +61 -11
- package/icc-x-api/crypto/utils.js +113 -44
- package/icc-x-api/crypto/utils.js.map +1 -1
- package/icc-x-api/filters/LatestMessageByHcPartyTransportGuidFilter.d.ts +8 -0
- package/icc-x-api/filters/LatestMessageByHcPartyTransportGuidFilter.js +13 -0
- package/icc-x-api/filters/LatestMessageByHcPartyTransportGuidFilter.js.map +1 -0
- package/icc-x-api/filters/MessageByHcPartyFilter.d.ts +7 -0
- package/icc-x-api/filters/MessageByHcPartyFilter.js +13 -0
- package/icc-x-api/filters/MessageByHcPartyFilter.js.map +1 -0
- package/icc-x-api/filters/MessageByHcPartyTransportGuidFilter.d.ts +8 -0
- package/icc-x-api/filters/MessageByHcPartyTransportGuidFilter.js +13 -0
- package/icc-x-api/filters/MessageByHcPartyTransportGuidFilter.js.map +1 -0
- package/icc-x-api/filters/TopicByHcPartyFilter.d.ts +7 -0
- package/icc-x-api/filters/TopicByHcPartyFilter.js +13 -0
- package/icc-x-api/filters/TopicByHcPartyFilter.js.map +1 -0
- package/icc-x-api/filters/TopicByParticipantFilter.d.ts +7 -0
- package/icc-x-api/filters/TopicByParticipantFilter.js +13 -0
- package/icc-x-api/filters/TopicByParticipantFilter.js.map +1 -0
- package/icc-x-api/filters/filters.d.ts +5 -0
- package/icc-x-api/filters/filters.js +5 -0
- package/icc-x-api/filters/filters.js.map +1 -1
- package/icc-x-api/icc-accesslog-x-api.d.ts +49 -12
- package/icc-x-api/icc-accesslog-x-api.js +81 -44
- package/icc-x-api/icc-accesslog-x-api.js.map +1 -1
- package/icc-x-api/icc-calendar-item-x-api.d.ts +53 -15
- package/icc-x-api/icc-calendar-item-x-api.js +105 -51
- package/icc-x-api/icc-calendar-item-x-api.js.map +1 -1
- package/icc-x-api/icc-classification-x-api.d.ts +47 -10
- package/icc-x-api/icc-classification-x-api.js +62 -33
- package/icc-x-api/icc-classification-x-api.js.map +1 -1
- package/icc-x-api/icc-contact-x-api.d.ts +59 -33
- package/icc-x-api/icc-contact-x-api.js +101 -66
- package/icc-x-api/icc-contact-x-api.js.map +1 -1
- package/icc-x-api/icc-crypto-x-api.d.ts +33 -333
- package/icc-x-api/icc-crypto-x-api.js +47 -764
- package/icc-x-api/icc-crypto-x-api.js.map +1 -1
- package/icc-x-api/icc-data-owner-x-api.d.ts +20 -8
- package/icc-x-api/icc-data-owner-x-api.js +31 -10
- package/icc-x-api/icc-data-owner-x-api.js.map +1 -1
- package/icc-x-api/icc-document-x-api.d.ts +51 -12
- package/icc-x-api/icc-document-x-api.js +117 -66
- package/icc-x-api/icc-document-x-api.js.map +1 -1
- package/icc-x-api/icc-form-x-api.d.ts +48 -11
- package/icc-x-api/icc-form-x-api.js +71 -37
- package/icc-x-api/icc-form-x-api.js.map +1 -1
- package/icc-x-api/icc-hcparty-x-api.d.ts +2 -2
- package/icc-x-api/icc-hcparty-x-api.js +3 -3
- package/icc-x-api/icc-hcparty-x-api.js.map +1 -1
- package/icc-x-api/icc-helement-x-api.d.ts +59 -20
- package/icc-x-api/icc-helement-x-api.js +78 -43
- package/icc-x-api/icc-helement-x-api.js.map +1 -1
- package/icc-x-api/icc-icure-maintenance-x-api.d.ts +7 -2
- package/icc-x-api/icc-icure-maintenance-x-api.js +38 -27
- package/icc-x-api/icc-icure-maintenance-x-api.js.map +1 -1
- package/icc-x-api/icc-invoice-x-api.d.ts +53 -16
- package/icc-x-api/icc-invoice-x-api.js +69 -35
- package/icc-x-api/icc-invoice-x-api.js.map +1 -1
- package/icc-x-api/icc-maintenance-task-x-api.d.ts +56 -22
- package/icc-x-api/icc-maintenance-task-x-api.js +77 -36
- package/icc-x-api/icc-maintenance-task-x-api.js.map +1 -1
- package/icc-x-api/icc-message-x-api.d.ts +75 -19
- package/icc-x-api/icc-message-x-api.js +126 -37
- package/icc-x-api/icc-message-x-api.js.map +1 -1
- package/icc-x-api/icc-patient-x-api.d.ts +86 -29
- package/icc-x-api/icc-patient-x-api.js +318 -379
- package/icc-x-api/icc-patient-x-api.js.map +1 -1
- package/icc-x-api/icc-receipt-x-api.d.ts +47 -13
- package/icc-x-api/icc-receipt-x-api.js +72 -36
- package/icc-x-api/icc-receipt-x-api.js.map +1 -1
- package/icc-x-api/icc-time-table-x-api.d.ts +46 -13
- package/icc-x-api/icc-time-table-x-api.js +61 -27
- package/icc-x-api/icc-time-table-x-api.js.map +1 -1
- package/icc-x-api/icc-topic-x-api.d.ts +191 -0
- package/icc-x-api/icc-topic-x-api.js +307 -0
- package/icc-x-api/icc-topic-x-api.js.map +1 -0
- package/icc-x-api/icc-user-x-api.d.ts +2 -2
- package/icc-x-api/icc-user-x-api.js +3 -3
- package/icc-x-api/icc-user-x-api.js.map +1 -1
- package/icc-x-api/index.d.ts +18 -2
- package/icc-x-api/index.js +203 -156
- package/icc-x-api/index.js.map +1 -1
- package/icc-x-api/maintenance/KeyPairUpdateRequest.d.ts +1 -1
- package/icc-x-api/storage/DefaultStorageEntryKeysFactory.d.ts +2 -0
- package/icc-x-api/storage/DefaultStorageEntryKeysFactory.js +9 -2
- package/icc-x-api/storage/DefaultStorageEntryKeysFactory.js.map +1 -1
- package/icc-x-api/storage/IcureStorageFacade.d.ts +23 -2
- package/icc-x-api/storage/IcureStorageFacade.js +36 -2
- package/icc-x-api/storage/IcureStorageFacade.js.map +1 -1
- package/icc-x-api/storage/KeyStorageFacade.d.ts +12 -0
- package/icc-x-api/storage/KeyStorageFacade.js.map +1 -1
- package/icc-x-api/storage/KeyStorageImpl.d.ts +2 -0
- package/icc-x-api/storage/KeyStorageImpl.js +10 -0
- package/icc-x-api/storage/KeyStorageImpl.js.map +1 -1
- package/icc-x-api/storage/StorageEntryKeysFactory.d.ts +14 -1
- package/icc-x-api/storage/StorageEntryKeysFactory.js.map +1 -1
- package/icc-x-api/utils/EntityWithDelegationTypeName.d.ts +32 -0
- package/icc-x-api/utils/EntityWithDelegationTypeName.js +75 -0
- package/icc-x-api/utils/EntityWithDelegationTypeName.js.map +1 -0
- package/icc-x-api/utils/ShareResult.d.ts +74 -0
- package/icc-x-api/utils/ShareResult.js +61 -0
- package/icc-x-api/utils/ShareResult.js.map +1 -0
- package/icc-x-api/utils/binary-utils.d.ts +1 -0
- package/icc-x-api/utils/binary-utils.js +8 -1
- package/icc-x-api/utils/binary-utils.js.map +1 -1
- package/icc-x-api/utils/collection-utils.d.ts +5 -0
- package/icc-x-api/utils/collection-utils.js +26 -1
- package/icc-x-api/utils/collection-utils.js.map +1 -1
- package/icc-x-api/utils/crypto-utils.d.ts +4 -3
- package/icc-x-api/utils/crypto-utils.js +5 -4
- package/icc-x-api/utils/crypto-utils.js.map +1 -1
- package/icc-x-api/utils/lru-temporised-async-cache.d.ts +26 -3
- package/icc-x-api/utils/lru-temporised-async-cache.js +75 -15
- package/icc-x-api/utils/lru-temporised-async-cache.js.map +1 -1
- package/icc-x-api/utils/websocket.d.ts +14 -10
- package/icc-x-api/utils/websocket.js +26 -9
- package/icc-x-api/utils/websocket.js.map +1 -1
- package/index.d.ts +1 -1
- package/index.js +3 -1
- package/index.js.map +1 -1
- package/package.json +2 -3
- package/icc-x-api/crypto/EntitiesEncryption.d.ts +0 -275
- package/icc-x-api/crypto/EntitiesEncryption.js +0 -734
- package/icc-x-api/crypto/EntitiesEncryption.js.map +0 -1
- package/icc-x-api/crypto/KeyManager.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"websocket.js","sourceRoot":"","sources":["../../../icc-x-api/utils/websocket.ts"],"names":[],"mappings":"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","sourcesContent":["import * as WebSocketNode from 'ws'\nimport {Patient} from \"../../icc-api/model/Patient\"\nimport {AbstractFilter} from \"../filters/filters\"\nimport {User} from \"../../icc-api/model/User\"\nimport {isNode} from \"browser-or-node\"\nimport {IccAuthApi} from \"../../icc-api\"\nimport {Service} from \"../../icc-api/model/Service\"\nimport {HealthElement} from \"../../icc-api/model/HealthElement\"\nimport {MaintenanceTask} from \"../../icc-api/model/MaintenanceTask\"\nimport {HealthcareParty} from \"../../icc-api/model/HealthcareParty\"\nimport {Device} from \"../../icc-api/model/Device\"\nimport {Contact} from \"../../icc-api/model/Contact\"\n\nexport type EventTypes = 'CREATE' | 'UPDATE' | 'DELETE'\ntype Subscribable = 'Patient' | 'Service' | 'User' | 'HealthElement' | 'MaintenanceTask' | 'HealthcareParty' | 'Device' | 'Contact'\ntype SubscribableEntity = Patient | Service | User | HealthElement | MaintenanceTask | HealthcareParty | Device | Contact\nexport type SubscriptionOptions = {\n connectionMaxRetry?: number\n connectionRetryIntervalMs?: number\n debug?: boolean\n}\n\nexport function subscribeToEntityEvents(\n basePath: string,\n authApi: IccAuthApi,\n entityClass: 'Patient',\n eventTypes: EventTypes[],\n filter: AbstractFilter<Patient> | undefined,\n eventFired: (entity: Patient) => Promise<void>,\n options: SubscriptionOptions,\n decryptor: (encrypted: Patient) => Promise<Patient>\n): Promise<WebSocketWrapper>\nexport function subscribeToEntityEvents(\n basePath: string,\n authApi: IccAuthApi,\n entityClass: 'Service',\n eventTypes: EventTypes[],\n filter: AbstractFilter<Service> | undefined,\n eventFired: (entity: Service) => Promise<void>,\n options: SubscriptionOptions,\n decryptor: (encrypted: Service) => Promise<Service>\n): Promise<WebSocketWrapper>\nexport function subscribeToEntityEvents(\n basePath: string,\n authApi: IccAuthApi,\n entityClass: 'Contact',\n eventTypes: EventTypes[],\n filter: AbstractFilter<Contact> | undefined,\n eventFired: (entity: Contact) => Promise<void>,\n options: SubscriptionOptions,\n decryptor: (encrypted: Contact) => Promise<Contact>\n): Promise<WebSocketWrapper>\nexport function subscribeToEntityEvents(\n basePath: string,\n authApi: IccAuthApi,\n entityClass: 'HealthElement',\n eventTypes: EventTypes[],\n filter: AbstractFilter<HealthElement> | undefined,\n eventFired: (entity: HealthElement) => Promise<void>,\n options: SubscriptionOptions,\n decryptor: (encrypted: HealthElement) => Promise<HealthElement>\n): Promise<WebSocketWrapper>\nexport function subscribeToEntityEvents(\n basePath: string,\n authApi: IccAuthApi,\n entityClass: 'User',\n eventTypes: EventTypes[],\n filter: AbstractFilter<User> | undefined,\n eventFired: (entity: User) => Promise<void>,\n options: SubscriptionOptions\n): Promise<WebSocketWrapper>\nexport function subscribeToEntityEvents(\n basePath: string,\n authApi: IccAuthApi,\n entityClass: 'MaintenanceTask',\n eventTypes: EventTypes[],\n filter: AbstractFilter<MaintenanceTask> | undefined,\n eventFired: (entity: MaintenanceTask) => Promise<void>,\n options: SubscriptionOptions,\n decryptor: (encrypted: MaintenanceTask) => Promise<MaintenanceTask>\n): Promise<WebSocketWrapper>\nexport function subscribeToEntityEvents(\n basePath: string,\n authApi: IccAuthApi,\n entityClass: 'HealthcareParty',\n eventTypes: EventTypes[],\n filter: AbstractFilter<HealthcareParty> | undefined,\n eventFired: (entity: HealthcareParty) => Promise<void>,\n options: SubscriptionOptions,\n): Promise<WebSocketWrapper>\nexport function subscribeToEntityEvents(\n basePath: string,\n authApi: IccAuthApi,\n entityClass: 'Device',\n eventTypes: EventTypes[],\n filter: AbstractFilter<Device> | undefined,\n eventFired: (entity: Device) => Promise<void>,\n options: SubscriptionOptions,\n): Promise<WebSocketWrapper>\n\nexport function subscribeToEntityEvents<T extends SubscribableEntity>(\n basePath: string,\n authApi: IccAuthApi,\n entityClass: Subscribable,\n eventTypes: EventTypes[],\n filter: AbstractFilter<T> | undefined,\n eventFired: (entity: T) => Promise<void>,\n options: SubscriptionOptions = {},\n decryptor?: (encrypted: T) => Promise<T>\n): Promise<WebSocketWrapper> {\n const config = {\n User: {\n qualifiedName: 'org.taktik.icure.entities.User',\n decryptor: (data: User) => Promise.resolve(new User({...data}) as T),\n },\n Patient: {\n qualifiedName: 'org.taktik.icure.entities.Patient',\n decryptor: (data: Patient) => decryptor!(data as Patient as T),\n },\n Service: {\n qualifiedName: 'org.taktik.icure.entities.embed.Service',\n decryptor: (data: Service) => decryptor!(data as Service as T),\n },\n HealthElement: {\n qualifiedName: 'org.taktik.icure.entities.HealthElement',\n decryptor: (data: HealthElement) =>\n decryptor!(data as HealthElement as T),\n },\n MaintenanceTask: {\n qualifiedName: 'org.taktik.icure.entities.MaintenanceTask',\n decryptor: (data: MaintenanceTask) =>\n decryptor!(data as MaintenanceTask as T),\n },\n HealthcareParty: {\n qualifiedName: 'org.taktik.icure.entities.HealthcareParty',\n decryptor: (data: HealthcareParty) =>\n Promise.resolve(new HealthcareParty({...data}) as HealthcareParty as T),\n },\n Device: {\n qualifiedName: 'org.taktik.icure.entities.Device',\n decryptor: (data: Device) =>\n Promise.resolve(new Device({...data}) as Device as T),\n },\n Contact: {\n qualifiedName: 'org.taktik.icure.entities.Contact',\n decryptor: (data: Contact) => decryptor!(data as Contact as T),\n },\n }\n\n return WebSocketWrapper.create(\n basePath.replace('http', 'ws').replace('rest', 'ws') + '/notification/subscribe',\n new WebSocketAuthProviderImpl(authApi),\n options.connectionMaxRetry ?? 5,\n options.connectionRetryIntervalMs ?? 1_000,\n {\n CONNECTED: [\n async (ws: WebSocketWrapper) => {\n const subscription = {\n eventTypes,\n entityClass: config[entityClass].qualifiedName,\n filter: {filter}\n }\n\n ws.send(JSON.stringify(subscription))\n },\n ],\n },\n async (data: any) => {\n try {\n await config[entityClass].decryptor(data).then((o) => eventFired(o))\n } catch (e) {\n console.error(e)\n }\n },\n options.debug,\n )\n}\n\nexport type ConnectionStatus = 'NOT_CONNECTED' | 'CONNECTED' | 'CLOSED' | 'ERROR'\nexport type StatusCallback = (ws: WebSocketWrapper) => void\nexport type ErrorStatusCallback = (ws: WebSocketWrapper, error?: Error) => void\nexport type ConnectionStatusFunction = {\n [K in ConnectionStatus]: K extends 'ERROR' ? ErrorStatusCallback : StatusCallback\n}\nexport type ConnectionStatusFunctions = {\n [K in ConnectionStatus]?: K extends 'ERROR' ? Array<ErrorStatusCallback> : Array<StatusCallback>\n}\nexport type WebSocketWrapperMessageCallback = (data: any) => void\n\nexport class WebSocketWrapper {\n private readonly pingLifetime: number = 20_000\n private socket: WebsocketAdapter | null = null\n private retries = 0\n private closed = false\n private lastPingReceived = Date.now()\n private intervalIds: (NodeJS.Timeout | number)[] = []\n private readonly methodPath: string\n\n private constructor(\n private readonly url: string,\n private readonly authProvider: WebSocketAuthProvider,\n private readonly maxRetries = 3,\n private readonly retryDelay = 1000,\n private readonly statusCallbacks: ConnectionStatusFunctions = {},\n private readonly messageCallback: WebSocketWrapperMessageCallback = () => {},\n private readonly debug: boolean = false\n) {\n this.methodPath = new URL(url).pathname\n }\n\n public static async create(\n url: string,\n authProvider: WebSocketAuthProvider,\n maxRetries?: number,\n retryDelay?: number,\n statusCallbacks?: ConnectionStatusFunctions,\n messageCallback?: WebSocketWrapperMessageCallback,\n debug?: boolean,\n ): Promise<WebSocketWrapper> {\n const ws = new WebSocketWrapper(url, authProvider, maxRetries, retryDelay, statusCallbacks, messageCallback, debug)\n await ws.connect()\n return ws\n }\n\n public send(data: Buffer | ArrayBuffer | string) {\n if (this.socket && this.socket.readyState === ReadyState.OPEN) {\n this.socket.send(data)\n }\n }\n\n public close() {\n if (this.socket) {\n this.closed = true\n this.socket.close(1000, 'Client closed connection')\n }\n }\n\n public addStatusCallback(status: ConnectionStatus, callback: ConnectionStatusFunction[ConnectionStatus]) {\n switch (status) {\n case 'CONNECTED':\n case 'CLOSED':\n if (!this.statusCallbacks[status]) this.statusCallbacks[status] = []\n this.statusCallbacks?.[status]?.push(callback)\n break\n case 'ERROR':\n this.statusCallbacks?.ERROR?.push(callback)\n break\n }\n }\n\n private async connect() {\n if (this.retries >= this.maxRetries) {\n throw new Error('WebSocket connection failed after ' + this.maxRetries + ' retries')\n }\n\n const bearerToken = await this.authProvider.getBearerToken()\n\n const socket = isNode && !!bearerToken ? new WebSocketNode(this.url, {\n headers: {\n Authorization: bearerToken,\n },\n })\n : await this.authProvider.getIcureOtt(this.methodPath).then((icureOttToken) => {\n const address = `${this.url};tokenid=${icureOttToken}`\n return isNode ? new WebSocketNode(address) : new WebSocket(address)\n })\n\n this.socket = new WebsocketAdapter(socket)\n\n this.socket.on('open', async () => {\n if (this.debug) console.debug('WebSocket connection opened')\n\n this.intervalIds.push(\n setTimeout(() => {\n this.retries = 0\n }, (this.maxRetries + 1) * this.retryDelay)\n )\n\n this.callStatusCallbacks('CONNECTED')\n })\n\n this.socket.on('message', (event: string) => {\n if (this.debug) console.debug('WebSocket message received', event)\n\n // Handle ping messages\n if (event === 'ping') {\n if (this.debug) console.debug('Received ping, sending pong')\n\n this.send('pong')\n this.lastPingReceived = Date.now()\n\n this.intervalIds.push(\n setTimeout(() => {\n if (Date.now() - this.lastPingReceived > this.pingLifetime) {\n console.error(`No ping received in the last ${this.pingLifetime} ms`)\n this.socket?.close()\n }\n }, this.pingLifetime)\n )\n\n return\n }\n\n // Call the message callback for other messages\n try {\n const data = JSON.parse(event)\n this.messageCallback(data)\n } catch (error) {\n console.error('Failed to parse WebSocket message', error)\n }\n })\n\n this.socket.on('close', ({code, reason}) => {\n if (this.debug) console.debug('WebSocket connection closed', code, reason?.toString())\n\n this.callStatusCallbacks('CLOSED')\n\n this.intervalIds.forEach((id) => clearTimeout(id as number))\n this.intervalIds = []\n\n if (this.closed) {\n return\n }\n\n setTimeout(async () => {\n ++this.retries\n return await this.connect()\n }, this.retryDelay)\n })\n\n this.socket.on('error', async (err) => {\n console.error('WebSocket error', err)\n\n this.callStatusCallbacks('ERROR', err)\n\n if (this.socket) {\n this.socket.close()\n }\n })\n }\n\n private callStatusCallbacks(event: ConnectionStatus, error?: Error) {\n switch (event) {\n case 'CONNECTED':\n case 'CLOSED':\n this.statusCallbacks?.[event]?.forEach((callback) => callback(this))\n break\n case 'ERROR':\n this.statusCallbacks?.ERROR?.forEach((callback) => callback(this, error))\n break\n }\n }\n}\n\ninterface WebSocketAuthProvider {\n getBearerToken(): Promise<string | undefined>\n\n getIcureOtt(icureMethodPath: string): Promise<string>\n}\n\nclass WebSocketAuthProviderImpl {\n constructor(private readonly authApi: IccAuthApi) {\n }\n\n async getBearerToken(): Promise<string | undefined> {\n const headers = await this.authApi.authenticationProvider.getAuthService().getAuthHeaders()\n return headers.find((header) => header.header === 'Authorization' && header.data.startsWith('Bearer '))?.data\n }\n\n async getIcureOtt(icureMethodPath: string): Promise<string> {\n return await this.authApi.token('GET', icureMethodPath)\n }\n}\n\ntype EventCallback = {\n open: (event: any) => void,\n message: (event: string) => void,\n close: (event: {code: number, reason: string}) => void,\n error: (error: any) => void\n}\n\nenum ReadyState {\n CONNECTING = 0,\n OPEN = 1,\n CLOSING = 2,\n CLOSED = 3\n}\n\nclass WebsocketAdapter {\n constructor(\n private readonly websocket: WebSocketNode | WebSocket,\n ) {\n }\n\n public get readyState(): number {\n if (this.websocket) {\n if (isNode) {\n switch ((this.websocket as WebSocketNode).readyState) {\n case WebSocketNode.CONNECTING:\n return ReadyState.CONNECTING\n case WebSocketNode.OPEN:\n return ReadyState.OPEN\n case WebSocketNode.CLOSING:\n return ReadyState.CLOSING\n case WebSocketNode.CLOSED:\n return ReadyState.CLOSED\n }\n } else {\n switch ((this.websocket as WebSocket).readyState) {\n case WebSocket.CONNECTING:\n return ReadyState.CONNECTING\n case WebSocket.OPEN:\n return ReadyState.OPEN\n case WebSocket.CLOSING:\n return ReadyState.CLOSING\n case WebSocket.CLOSED:\n return ReadyState.CLOSED\n }\n }\n }\n return ReadyState.CLOSED\n }\n\n /**\n * This is not throwing an error if the websocket is not open, because the purpose of the websocket wrapper is custom to notifications needs (subscribe and ping pong only)\n * If in the future we need to use it for other purposes, we will have to throw an error and update the implementation of ping pong in the notification\n * @param data the data to send\n */\n public send(data: Buffer | ArrayBuffer | string) {\n if (this.websocket && this.readyState === ReadyState.OPEN) {\n this.websocket.send(data)\n }\n }\n\n public close(code?: number, reason?: string) {\n if (this.websocket) {\n this.websocket.close(code, reason)\n }\n }\n\n private onMessage(callback: (event: string) => void) {\n if (this.websocket) {\n if (isNode) {\n (this.websocket as WebSocketNode).on('message', (x) => callback(x.toString('utf8')))\n } else {\n (this.websocket as WebSocket).addEventListener('message', async (event) => {\n let dataAsString: string | undefined\n if (event.type === 'message') {\n dataAsString = event.data\n } else console.error(\"Unexpected event type: \" + event.type)\n if (!dataAsString) {\n console.error(\"Failed to parse WebSocket message\")\n return\n }\n\n callback(dataAsString)\n })\n }\n }\n else {\n console.error(\"Websocket is not defined\")\n throw new Error('Websocket is not defined')\n }\n }\n\n private onOpen(callback: (event: any) => void) {\n if (this.websocket) {\n if (isNode) {\n (this.websocket as WebSocketNode).on('open', callback)\n } else {\n (this.websocket as WebSocket).addEventListener('open', callback)\n }\n }\n }\n\n private onClose(callback: (event: {code: number, reason: string}) => void) {\n if (this.websocket) {\n if (isNode) {\n (this.websocket as WebSocketNode).on('close', callback)\n } else {\n (this.websocket as WebSocket).addEventListener('close', callback)\n }\n }\n }\n\n private onError(callback: (error: any) => void) {\n if (this.websocket) {\n if (isNode) {\n (this.websocket as WebSocketNode).on('error', callback)\n } else {\n (this.websocket as WebSocket).addEventListener('error', callback)\n }\n }\n }\n\n\n public on<K extends keyof EventCallback>(event: K, callback: EventCallback[K]) {\n if (this.websocket) {\n switch (event) {\n case 'message':\n return this.onMessage(callback as EventCallback['message'])\n case 'open':\n return this.onOpen(callback as EventCallback['open'])\n case 'close':\n return this.onClose(callback as EventCallback['close'])\n case 'error':\n return this.onError(callback as EventCallback['error'])\n }\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"websocket.js","sourceRoot":"","sources":["../../../icc-x-api/utils/websocket.ts"],"names":[],"mappings":"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","sourcesContent":["import * as WebSocketNode from 'ws'\nimport { Patient } from '../../icc-api/model/Patient'\nimport { AbstractFilter } from '../filters/filters'\nimport { User } from '../../icc-api/model/User'\nimport { isNode } from 'browser-or-node'\nimport { IccAuthApi } from '../../icc-api'\nimport { Service } from '../../icc-api/model/Service'\nimport { HealthElement } from '../../icc-api/model/HealthElement'\nimport { MaintenanceTask } from '../../icc-api/model/MaintenanceTask'\nimport { HealthcareParty } from '../../icc-api/model/HealthcareParty'\nimport { Device } from '../../icc-api/model/Device'\nimport { Contact } from '../../icc-api/model/Contact'\nimport { Message } from '../../icc-api/model/Message'\nimport { Topic } from '../../icc-api/model/Topic'\n\nexport type EventTypes = 'CREATE' | 'UPDATE' | 'DELETE'\ntype Subscribable =\n | 'Patient'\n | 'Service'\n | 'User'\n | 'HealthElement'\n | 'MaintenanceTask'\n | 'HealthcareParty'\n | 'Device'\n | 'Contact'\n | 'Message'\n | 'Topic'\ntype SubscribableEntity = Patient | Service | User | HealthElement | MaintenanceTask | HealthcareParty | Device | Contact | Message | Topic\nexport type SubscriptionOptions = {\n connectionMaxRetry?: number\n connectionRetryIntervalMs?: number\n debug?: boolean\n}\n\nexport function subscribeToEntityEvents(\n basePath: string,\n authApi: IccAuthApi,\n entityClass: 'Patient',\n eventTypes: EventTypes[],\n filter: AbstractFilter<Patient> | undefined,\n eventFired: (entity: Patient) => Promise<void>,\n options: SubscriptionOptions,\n decryptor: (encrypted: Patient) => Promise<Patient>\n): Promise<WebSocketWrapper>\nexport function subscribeToEntityEvents(\n basePath: string,\n authApi: IccAuthApi,\n entityClass: 'Service',\n eventTypes: EventTypes[],\n filter: AbstractFilter<Service> | undefined,\n eventFired: (entity: Service) => Promise<void>,\n options: SubscriptionOptions,\n decryptor: (encrypted: Service) => Promise<Service>\n): Promise<WebSocketWrapper>\nexport function subscribeToEntityEvents(\n basePath: string,\n authApi: IccAuthApi,\n entityClass: 'Contact',\n eventTypes: EventTypes[],\n filter: AbstractFilter<Contact> | undefined,\n eventFired: (entity: Contact) => Promise<void>,\n options: SubscriptionOptions,\n decryptor: (encrypted: Contact) => Promise<Contact>\n): Promise<WebSocketWrapper>\nexport function subscribeToEntityEvents(\n basePath: string,\n authApi: IccAuthApi,\n entityClass: 'HealthElement',\n eventTypes: EventTypes[],\n filter: AbstractFilter<HealthElement> | undefined,\n eventFired: (entity: HealthElement) => Promise<void>,\n options: SubscriptionOptions,\n decryptor: (encrypted: HealthElement) => Promise<HealthElement>\n): Promise<WebSocketWrapper>\nexport function subscribeToEntityEvents(\n basePath: string,\n authApi: IccAuthApi,\n entityClass: 'Message',\n eventTypes: EventTypes[],\n filter: AbstractFilter<Message> | undefined,\n eventFired: (entity: Message) => Promise<void>,\n options: SubscriptionOptions,\n decryptor: (encrypted: Message) => Promise<Message>\n): Promise<WebSocketWrapper>\nexport function subscribeToEntityEvents(\n basePath: string,\n authApi: IccAuthApi,\n entityClass: 'Topic',\n eventTypes: EventTypes[],\n filter: AbstractFilter<Topic> | undefined,\n eventFired: (entity: Topic) => Promise<void>,\n options: SubscriptionOptions,\n decryptor: (encrypted: Topic) => Promise<Topic>\n): Promise<WebSocketWrapper>\nexport function subscribeToEntityEvents(\n basePath: string,\n authApi: IccAuthApi,\n entityClass: 'User',\n eventTypes: EventTypes[],\n filter: AbstractFilter<User> | undefined,\n eventFired: (entity: User) => Promise<void>,\n options: SubscriptionOptions\n): Promise<WebSocketWrapper>\nexport function subscribeToEntityEvents(\n basePath: string,\n authApi: IccAuthApi,\n entityClass: 'MaintenanceTask',\n eventTypes: EventTypes[],\n filter: AbstractFilter<MaintenanceTask> | undefined,\n eventFired: (entity: MaintenanceTask) => Promise<void>,\n options: SubscriptionOptions,\n decryptor: (encrypted: MaintenanceTask) => Promise<MaintenanceTask>\n): Promise<WebSocketWrapper>\nexport function subscribeToEntityEvents(\n basePath: string,\n authApi: IccAuthApi,\n entityClass: 'HealthcareParty',\n eventTypes: EventTypes[],\n filter: AbstractFilter<HealthcareParty> | undefined,\n eventFired: (entity: HealthcareParty) => Promise<void>,\n options: SubscriptionOptions\n): Promise<WebSocketWrapper>\nexport function subscribeToEntityEvents(\n basePath: string,\n authApi: IccAuthApi,\n entityClass: 'Device',\n eventTypes: EventTypes[],\n filter: AbstractFilter<Device> | undefined,\n eventFired: (entity: Device) => Promise<void>,\n options: SubscriptionOptions\n): Promise<WebSocketWrapper>\n\nexport function subscribeToEntityEvents<T extends SubscribableEntity>(\n basePath: string,\n authApi: IccAuthApi,\n entityClass: Subscribable,\n eventTypes: EventTypes[],\n filter: AbstractFilter<T> | undefined,\n eventFired: (entity: T) => Promise<void>,\n options: SubscriptionOptions = {},\n decryptor?: (encrypted: T) => Promise<T>\n): Promise<WebSocketWrapper> {\n const config = {\n User: {\n qualifiedName: 'org.taktik.icure.entities.User',\n decryptor: (data: User) => Promise.resolve(new User({ ...data }) as T),\n },\n Patient: {\n qualifiedName: 'org.taktik.icure.entities.Patient',\n decryptor: (data: Patient) => decryptor!(data as Patient as T),\n },\n Service: {\n qualifiedName: 'org.taktik.icure.entities.embed.Service',\n decryptor: (data: Service) => decryptor!(data as Service as T),\n },\n HealthElement: {\n qualifiedName: 'org.taktik.icure.entities.HealthElement',\n decryptor: (data: HealthElement) => decryptor!(data as HealthElement as T),\n },\n Message: {\n qualifiedName: 'org.taktik.icure.entities.Message',\n decryptor: (data: Message) => decryptor!(data as Message as T),\n },\n Topic: {\n qualifiedName: 'org.taktik.icure.entities.Topic',\n decryptor: (data: Topic) => decryptor!(data as Topic as T),\n },\n MaintenanceTask: {\n qualifiedName: 'org.taktik.icure.entities.MaintenanceTask',\n decryptor: (data: MaintenanceTask) => decryptor!(data as MaintenanceTask as T),\n },\n HealthcareParty: {\n qualifiedName: 'org.taktik.icure.entities.HealthcareParty',\n decryptor: (data: HealthcareParty) => Promise.resolve(new HealthcareParty({ ...data }) as HealthcareParty as T),\n },\n Device: {\n qualifiedName: 'org.taktik.icure.entities.Device',\n decryptor: (data: Device) => Promise.resolve(new Device({ ...data }) as Device as T),\n },\n Contact: {\n qualifiedName: 'org.taktik.icure.entities.Contact',\n decryptor: (data: Contact) => decryptor!(data as Contact as T),\n },\n }\n\n return WebSocketWrapper.create(\n basePath.replace('http', 'ws').replace('rest', 'ws') + '/notification/subscribe',\n new WebSocketAuthProviderImpl(authApi),\n options.connectionMaxRetry ?? 5,\n options.connectionRetryIntervalMs ?? 1_000,\n {\n CONNECTED: [\n async (ws: WebSocketWrapper) => {\n const subscription = {\n eventTypes,\n entityClass: config[entityClass].qualifiedName,\n filter: { filter },\n }\n\n ws.send(JSON.stringify(subscription))\n },\n ],\n },\n async (data: any) => {\n try {\n await config[entityClass].decryptor(data).then((o) => eventFired(o))\n } catch (e) {\n console.error(e)\n }\n },\n options.debug\n )\n}\n\nexport type ConnectionStatus = 'NOT_CONNECTED' | 'CONNECTED' | 'CLOSED' | 'ERROR'\nexport type StatusCallback = (ws: WebSocketWrapper) => void\nexport type ErrorStatusCallback = (ws: WebSocketWrapper, error?: Error) => void\nexport type ConnectionStatusFunction = {\n [K in ConnectionStatus]: K extends 'ERROR' ? ErrorStatusCallback : StatusCallback\n}\nexport type ConnectionStatusFunctions = {\n [K in ConnectionStatus]?: K extends 'ERROR' ? Array<ErrorStatusCallback> : Array<StatusCallback>\n}\nexport type WebSocketWrapperMessageCallback = (data: any) => void\n\nexport class WebSocketWrapper {\n private readonly pingLifetime: number = 20_000\n private socket: WebsocketAdapter | null = null\n private retries = 0\n private closed = false\n private lastPingReceived = Date.now()\n private intervalIds: (NodeJS.Timeout | number)[] = []\n private readonly methodPath: string\n\n private constructor(\n private readonly url: string,\n private readonly authProvider: WebSocketAuthProvider,\n private readonly maxRetries = 3,\n private readonly retryDelay = 1000,\n private readonly statusCallbacks: ConnectionStatusFunctions = {},\n private readonly messageCallback: WebSocketWrapperMessageCallback = () => {},\n private readonly debug: boolean = false\n ) {\n this.methodPath = new URL(url).pathname\n }\n\n public static async create(\n url: string,\n authProvider: WebSocketAuthProvider,\n maxRetries?: number,\n retryDelay?: number,\n statusCallbacks?: ConnectionStatusFunctions,\n messageCallback?: WebSocketWrapperMessageCallback,\n debug?: boolean\n ): Promise<WebSocketWrapper> {\n const ws = new WebSocketWrapper(url, authProvider, maxRetries, retryDelay, statusCallbacks, messageCallback, debug)\n await ws.connect()\n return ws\n }\n\n public send(data: Buffer | ArrayBuffer | string) {\n if (this.socket && this.socket.readyState === ReadyState.OPEN) {\n this.socket.send(data)\n }\n }\n\n public close() {\n if (this.socket) {\n this.closed = true\n this.socket.close(1000, 'Client closed connection')\n }\n }\n\n public addStatusCallback(status: ConnectionStatus, callback: ConnectionStatusFunction[ConnectionStatus]) {\n switch (status) {\n case 'CONNECTED':\n case 'CLOSED':\n if (!this.statusCallbacks[status]) this.statusCallbacks[status] = []\n this.statusCallbacks?.[status]?.push(callback)\n break\n case 'ERROR':\n this.statusCallbacks?.ERROR?.push(callback)\n break\n }\n }\n\n private async connect() {\n if (this.retries >= this.maxRetries) {\n throw new Error('WebSocket connection failed after ' + this.maxRetries + ' retries')\n }\n\n const bearerToken = await this.authProvider.getBearerToken()\n\n const socket =\n isNode && !!bearerToken\n ? new WebSocketNode(this.url, {\n headers: {\n Authorization: bearerToken,\n },\n })\n : await this.authProvider.getIcureOtt(this.methodPath).then((icureOttToken) => {\n const address = `${this.url};tokenid=${icureOttToken}`\n return isNode ? new WebSocketNode(address) : new WebSocket(address)\n })\n\n this.socket = new WebsocketAdapter(socket)\n\n this.socket.on('open', async () => {\n if (this.debug) console.debug('WebSocket connection opened')\n\n this.intervalIds.push(\n setTimeout(() => {\n this.retries = 0\n }, (this.maxRetries + 1) * this.retryDelay)\n )\n\n this.callStatusCallbacks('CONNECTED')\n })\n\n this.socket.on('message', (event: string) => {\n if (this.debug) console.debug('WebSocket message received', event)\n\n // Handle ping messages\n if (event === 'ping') {\n if (this.debug) console.debug('Received ping, sending pong')\n\n this.send('pong')\n this.lastPingReceived = Date.now()\n\n this.intervalIds.push(\n setTimeout(() => {\n if (Date.now() - this.lastPingReceived > this.pingLifetime) {\n console.error(`No ping received in the last ${this.pingLifetime} ms`)\n this.socket?.close()\n }\n }, this.pingLifetime)\n )\n\n return\n }\n\n // Call the message callback for other messages\n try {\n const data = JSON.parse(event)\n this.messageCallback(data)\n } catch (error) {\n console.error('Failed to parse WebSocket message', error)\n }\n })\n\n this.socket.on('close', ({ code, reason }) => {\n if (this.debug) console.debug('WebSocket connection closed', code, reason?.toString())\n\n this.callStatusCallbacks('CLOSED')\n\n this.intervalIds.forEach((id) => clearTimeout(id as number))\n this.intervalIds = []\n\n if (this.closed) {\n return\n }\n\n setTimeout(async () => {\n ++this.retries\n return await this.connect()\n }, this.retryDelay)\n })\n\n this.socket.on('error', async (err) => {\n console.error('WebSocket error', err)\n\n this.callStatusCallbacks('ERROR', err)\n\n if (this.socket) {\n this.socket.close()\n }\n })\n }\n\n private callStatusCallbacks(event: ConnectionStatus, error?: Error) {\n switch (event) {\n case 'CONNECTED':\n case 'CLOSED':\n this.statusCallbacks?.[event]?.forEach((callback) => callback(this))\n break\n case 'ERROR':\n this.statusCallbacks?.ERROR?.forEach((callback) => callback(this, error))\n break\n }\n }\n}\n\ninterface WebSocketAuthProvider {\n getBearerToken(): Promise<string | undefined>\n\n getIcureOtt(icureMethodPath: string): Promise<string>\n}\n\nclass WebSocketAuthProviderImpl {\n constructor(private readonly authApi: IccAuthApi) {}\n\n async getBearerToken(): Promise<string | undefined> {\n const headers = await this.authApi.authenticationProvider.getAuthService().getAuthHeaders()\n return headers.find((header) => header.header === 'Authorization' && header.data.startsWith('Bearer '))?.data\n }\n\n async getIcureOtt(icureMethodPath: string): Promise<string> {\n return await this.authApi.token('GET', icureMethodPath)\n }\n}\n\ntype EventCallback = {\n open: (event: any) => void\n message: (event: string) => void\n close: (event: { code: number; reason: string }) => void\n error: (error: any) => void\n}\n\nenum ReadyState {\n CONNECTING = 0,\n OPEN = 1,\n CLOSING = 2,\n CLOSED = 3,\n}\n\nclass WebsocketAdapter {\n constructor(private readonly websocket: WebSocketNode | WebSocket) {}\n\n public get readyState(): number {\n if (this.websocket) {\n if (isNode) {\n switch ((this.websocket as WebSocketNode).readyState) {\n case WebSocketNode.CONNECTING:\n return ReadyState.CONNECTING\n case WebSocketNode.OPEN:\n return ReadyState.OPEN\n case WebSocketNode.CLOSING:\n return ReadyState.CLOSING\n case WebSocketNode.CLOSED:\n return ReadyState.CLOSED\n }\n } else {\n switch ((this.websocket as WebSocket).readyState) {\n case WebSocket.CONNECTING:\n return ReadyState.CONNECTING\n case WebSocket.OPEN:\n return ReadyState.OPEN\n case WebSocket.CLOSING:\n return ReadyState.CLOSING\n case WebSocket.CLOSED:\n return ReadyState.CLOSED\n }\n }\n }\n return ReadyState.CLOSED\n }\n\n /**\n * This is not throwing an error if the websocket is not open, because the purpose of the websocket wrapper is custom to notifications needs (subscribe and ping pong only)\n * If in the future we need to use it for other purposes, we will have to throw an error and update the implementation of ping pong in the notification\n * @param data the data to send\n */\n public send(data: Buffer | ArrayBuffer | string) {\n if (this.websocket && this.readyState === ReadyState.OPEN) {\n this.websocket.send(data)\n }\n }\n\n public close(code?: number, reason?: string) {\n if (this.websocket) {\n this.websocket.close(code, reason)\n }\n }\n\n private onMessage(callback: (event: string) => void) {\n if (this.websocket) {\n if (isNode) {\n ;(this.websocket as WebSocketNode).on('message', (x) => callback(x.toString('utf8')))\n } else {\n ;(this.websocket as WebSocket).addEventListener('message', async (event) => {\n let dataAsString: string | undefined\n if (event.type === 'message') {\n dataAsString = event.data\n } else console.error('Unexpected event type: ' + event.type)\n if (!dataAsString) {\n console.error('Failed to parse WebSocket message')\n return\n }\n\n callback(dataAsString)\n })\n }\n } else {\n console.error('Websocket is not defined')\n throw new Error('Websocket is not defined')\n }\n }\n\n private onOpen(callback: (event: any) => void) {\n if (this.websocket) {\n if (isNode) {\n ;(this.websocket as WebSocketNode).on('open', callback)\n } else {\n ;(this.websocket as WebSocket).addEventListener('open', callback)\n }\n }\n }\n\n private onClose(callback: (event: { code: number; reason: string }) => void) {\n if (this.websocket) {\n if (isNode) {\n ;(this.websocket as WebSocketNode).on('close', callback)\n } else {\n ;(this.websocket as WebSocket).addEventListener('close', callback)\n }\n }\n }\n\n private onError(callback: (error: any) => void) {\n if (this.websocket) {\n if (isNode) {\n ;(this.websocket as WebSocketNode).on('error', callback)\n } else {\n ;(this.websocket as WebSocket).addEventListener('error', callback)\n }\n }\n }\n\n public on<K extends keyof EventCallback>(event: K, callback: EventCallback[K]) {\n if (this.websocket) {\n switch (event) {\n case 'message':\n return this.onMessage(callback as EventCallback['message'])\n case 'open':\n return this.onOpen(callback as EventCallback['open'])\n case 'close':\n return this.onClose(callback as EventCallback['close'])\n case 'error':\n return this.onError(callback as EventCallback['error'])\n }\n }\n }\n}\n"]}
|
package/index.d.ts
CHANGED
package/index.js
CHANGED
|
@@ -14,10 +14,12 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.XHR = void 0;
|
|
17
18
|
__exportStar(require("./icc-x-api"), exports);
|
|
18
19
|
__exportStar(require("./icc-api"), exports);
|
|
19
20
|
__exportStar(require("./icc-api/model/models"), exports);
|
|
20
21
|
__exportStar(require("./icc-x-api/utils"), exports);
|
|
21
22
|
__exportStar(require("./icc-x-api/filters/filters"), exports);
|
|
22
|
-
|
|
23
|
+
var XHR_1 = require("./icc-api/api/XHR");
|
|
24
|
+
Object.defineProperty(exports, "XHR", { enumerable: true, get: function () { return XHR_1.XHR; } });
|
|
23
25
|
//# sourceMappingURL=index.js.map
|
package/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,8CAA2B;AAC3B,4CAAyB;AACzB,yDAAsC;AAEtC,oDAAiC;AACjC,8DAA2C;AAE3C,yCAAuC;AAA9B,0FAAA,GAAG,OAAA","sourcesContent":["export * from './icc-x-api'\nexport * from './icc-api'\nexport * from './icc-api/model/models'\n\nexport * from './icc-x-api/utils'\nexport * from './icc-x-api/filters/filters'\n\nexport { XHR } from './icc-api/api/XHR'\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@icure/api",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "8.0.0-RC.2",
|
|
4
4
|
"description": "Typescript version of iCure standalone API client",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"types": "index.d.ts",
|
|
@@ -12,8 +12,7 @@
|
|
|
12
12
|
"moment": "^2.22.1",
|
|
13
13
|
"text-encoding": "^0.7.0",
|
|
14
14
|
"uuid": "^8.3.2",
|
|
15
|
-
"uuid-encoder": "^1.1.0"
|
|
16
|
-
"ws": "^8.13.0"
|
|
15
|
+
"uuid-encoder": "^1.1.0"
|
|
17
16
|
},
|
|
18
17
|
"author": "Taktik sa - B12 Consulting",
|
|
19
18
|
"license": "MIT",
|
|
@@ -1,275 +0,0 @@
|
|
|
1
|
-
import { Delegation, EncryptedEntity, EncryptedEntityStub } from '../../icc-api/model/models';
|
|
2
|
-
import { IccDataOwnerXApi } from '../icc-data-owner-x-api';
|
|
3
|
-
import { ExchangeKeysManager } from './ExchangeKeysManager';
|
|
4
|
-
import { EncryptedFieldsManifest } from '../utils';
|
|
5
|
-
import { CryptoPrimitives } from './CryptoPrimitives';
|
|
6
|
-
import { ShareMetadataBehaviour } from './ShareMetadataBehaviour';
|
|
7
|
-
/**
|
|
8
|
-
* @internal this class is for internal use only and may be changed without notice
|
|
9
|
-
* Give access to functions for retrieving encryption metadata of entities.
|
|
10
|
-
*/
|
|
11
|
-
export declare class EntitiesEncryption {
|
|
12
|
-
private readonly primitives;
|
|
13
|
-
private readonly dataOwnerApi;
|
|
14
|
-
private readonly exchangeKeysManager;
|
|
15
|
-
private readonly useParentKeys;
|
|
16
|
-
constructor(primitives: CryptoPrimitives, dataOwnerApi: IccDataOwnerXApi, exchangeKeysManager: ExchangeKeysManager, useParentKeys: boolean);
|
|
17
|
-
/**
|
|
18
|
-
* Get the data owners which can access the entity
|
|
19
|
-
* @param entity an entity.
|
|
20
|
-
*/
|
|
21
|
-
getDataOwnersWithAccessTo(entity: EncryptedEntity): Promise<{
|
|
22
|
-
permissionsByDataOwnerId: {
|
|
23
|
-
[dataOwnerId: string]: 'WRITE';
|
|
24
|
-
};
|
|
25
|
-
hasUnknownAnonymousDataOwners: boolean;
|
|
26
|
-
}>;
|
|
27
|
-
/**
|
|
28
|
-
* Get the encryption keys of an entity that the provided data owner can access, potentially using the keys for his parent.
|
|
29
|
-
* There should only be one encryption key for each entity, but the method supports more to allow to deal with conflicts and merged duplicate data.
|
|
30
|
-
* @param entity an encrypted entity.
|
|
31
|
-
* @param dataOwnerId optionally a data owner part of the hierarchy for the current data owner, defaults to the current data owner.
|
|
32
|
-
* @param tagsFilter allows to obtain only encryption keys associated to tags which satisfy the provided filter.
|
|
33
|
-
* @return the encryption keys that the provided data owner can decrypt, deduplicated.
|
|
34
|
-
*/
|
|
35
|
-
encryptionKeysOf(entity: EncryptedEntity | EncryptedEntityStub, dataOwnerId?: string, tagsFilter?: (tags: string[]) => Promise<boolean>): Promise<string[]>;
|
|
36
|
-
/**
|
|
37
|
-
* Get the encryption keys of an entity that the current data owner and his parents can access. The resulting array contains the keys for each data
|
|
38
|
-
* owner in the hierarchy which can be decrypted using only that data owner keys (excludes keys accessible through the parent keys). The order of
|
|
39
|
-
* the array is the same as in {@link IccDataOwnerXApi.getCurrentDataOwnerHierarchyIds}.
|
|
40
|
-
* Note that different data owners may have access to the same keys, but the keys extracted for each data owner are deduplicated.
|
|
41
|
-
* There should only be one encryption key for each entity, but the method supports more to allow to deal with conflicts and merged duplicate data.
|
|
42
|
-
* @param entity an encrypted entity.
|
|
43
|
-
* @param tagsFilter allows to obtain only encryption keys associated to tags which satisfy the provided filter.
|
|
44
|
-
* @return the encryption keys that each member of the current data owner hierarchy can decrypt using only his keys and not keys of his parents.
|
|
45
|
-
*/
|
|
46
|
-
encryptionKeysForHcpHierarchyOf(entity: EncryptedEntity | EncryptedEntityStub, tagsFilter?: (tags: string[]) => Promise<boolean>): Promise<{
|
|
47
|
-
ownerId: string;
|
|
48
|
-
extracted: string[];
|
|
49
|
-
}[]>;
|
|
50
|
-
/**
|
|
51
|
-
* Get the secret ids (SFKs) of an entity that the provided data owner can access, potentially using the keys for his parent.
|
|
52
|
-
* @param entity an encrypted entity.
|
|
53
|
-
* @param dataOwnerId optionally a data owner part of the hierarchy for the current data owner, defaults to the current data owner.
|
|
54
|
-
* @param tagsFilter allows to obtain only secret ids associated to tags which satisfy the provided filter.
|
|
55
|
-
* @return the secret ids (SFKs) that the provided data owner can decrypt, deduplicated.
|
|
56
|
-
*/
|
|
57
|
-
secretIdsOf(entity: EncryptedEntity | EncryptedEntityStub, dataOwnerId?: string, tagsFilter?: (tags: string[]) => Promise<boolean>): Promise<string[]>;
|
|
58
|
-
/**
|
|
59
|
-
* Get the secret ids (SFKs) of an entity that the current data owner and his parents can access. The resulting array contains the ids for each data
|
|
60
|
-
* owner in the hierarchy which can be decrypted using only that data owner keys (excludes ids accessible through the parent keys). The order of
|
|
61
|
-
* the array is the same as in {@link IccDataOwnerXApi.getCurrentDataOwnerHierarchyIds}.
|
|
62
|
-
* Note that different data owners may have access to the same secret ids, but the secret ids extracted for each data owner are deduplicated.
|
|
63
|
-
* @param entity an encrypted entity.
|
|
64
|
-
* @param tagsFilter allows to obtain only secret ids associated to tags which satisfy the provided filter.
|
|
65
|
-
* @return the secret ids that each member of the current data owner hierarchy can decrypt using only his keys and not keys of his parents.
|
|
66
|
-
*/
|
|
67
|
-
secretIdsForHcpHierarchyOf(entity: EncryptedEntity | EncryptedEntityStub, tagsFilter?: (tags: string[]) => Promise<boolean>): Promise<{
|
|
68
|
-
ownerId: string;
|
|
69
|
-
extracted: string[];
|
|
70
|
-
}[]>;
|
|
71
|
-
/**
|
|
72
|
-
* Get the decrypted owning entity ids (formerly CFKs) for the provided entity that can be decrypted using the private keys of the current data
|
|
73
|
-
* owner and his parents. The owning entity id would be, for example, the id of a patient for contact and healthcare elements, or the id of a
|
|
74
|
-
* message for documents.
|
|
75
|
-
* There should only be one owning entity id for each entity, but the method supports more to allow to deal with conflicts and merged duplicate
|
|
76
|
-
* data.
|
|
77
|
-
* @param entity an encrypted entity.
|
|
78
|
-
* @param dataOwnerId optionally a data owner part of the hierarchy for the current data owner, defaults to the current data owner.
|
|
79
|
-
* @param tagsFilter allows to obtain only owning entity ids associated to tags which satisfy the provided filter.
|
|
80
|
-
* @return the owning entity ids (CFKs) that the provided data owner can decrypt, deduplicated.
|
|
81
|
-
*/
|
|
82
|
-
owningEntityIdsOf(entity: EncryptedEntity | EncryptedEntityStub, dataOwnerId?: string, tagsFilter?: (tags: string[]) => Promise<boolean>): Promise<string[]>;
|
|
83
|
-
/**
|
|
84
|
-
* Get the decrypted owning entity ids (formerly CFKs) for the provided entity that can be decrypted using the private keys of the current data
|
|
85
|
-
* owner and his parents. The owning entity id would be, for example, the id of a patient for contact and healthcare elements, or the id of a
|
|
86
|
-
* message for documents.
|
|
87
|
-
* The resulting array contains the ids for each data owner in the hierarchy which can be decrypted using only that data owner keys (excludes ids
|
|
88
|
-
* accessible through the parent keys). The order of the array is the same as in {@link IccDataOwnerXApi.getCurrentDataOwnerHierarchyIds}.
|
|
89
|
-
* Note that different data owners may have access to the same owning entity ids, but the owning entity ids extracted for each data owner are
|
|
90
|
-
* deduplicated in case they could be accessed through different delegations.
|
|
91
|
-
* There should only be one owning entity id for each entity, but the method supports more to allow to deal with conflicts and merged duplicate
|
|
92
|
-
* data.
|
|
93
|
-
* @param entity an encrypted entity.
|
|
94
|
-
* @param tagsFilter allows to obtain only owning entity ids associated to tags which satisfy the provided filter.
|
|
95
|
-
* @return the owning entity ids that each member of the current data owner hierarchy can decrypt using only his keys and not keys of his parents.
|
|
96
|
-
*/
|
|
97
|
-
owningEntityIdsForHcpHierarchyOf(entity: EncryptedEntity | EncryptedEntityStub, tagsFilter?: (tags: string[]) => Promise<boolean>): Promise<{
|
|
98
|
-
ownerId: string;
|
|
99
|
-
extracted: string[];
|
|
100
|
-
}[]>;
|
|
101
|
-
/**
|
|
102
|
-
* @internal this method is intended only for internal use and may be changed without notice.
|
|
103
|
-
* Initializes encryption metadata for an entity. This includes the encrypted secret id, owning entity id, and encryption key for the entity, and
|
|
104
|
-
* the clear text secret foreign key of the parent entity.
|
|
105
|
-
* This method returns a modified copy of the entity.
|
|
106
|
-
* @param entity entity which requires encryption metadata initialisation.
|
|
107
|
-
* @param owningEntity id of the owning entity, if any (e.g. patient id for Contact/HealtchareElement, message id for Document, ...).
|
|
108
|
-
* @param owningEntitySecretId secret id of the parent entity, to use in the secret foreign keys for the provided entity, if any.
|
|
109
|
-
* @param initialiseEncryptionKeys if false this method will not initialize any encryption keys. Use only for entities which use delegations for
|
|
110
|
-
* access control but don't actually have any encrypted content.
|
|
111
|
-
* @param additionalDelegations automatically shares the
|
|
112
|
-
* @param tags tags to associate with the initial encryption keys and metadata
|
|
113
|
-
* @throws if the entity already has non-empty values for encryption metadata.
|
|
114
|
-
* @return an updated copy of the entity.
|
|
115
|
-
*/
|
|
116
|
-
entityWithInitialisedEncryptedMetadata<T extends EncryptedEntity>(entity: T, owningEntity: string | undefined, owningEntitySecretId: string | undefined, initialiseEncryptionKeys: boolean, additionalDelegations?: string[], tags?: string[]): Promise<{
|
|
117
|
-
updatedEntity: T;
|
|
118
|
-
rawEncryptionKey: string | undefined;
|
|
119
|
-
secretId: string;
|
|
120
|
-
}>;
|
|
121
|
-
entityWithAutoExtendedEncryptedMetadata<T extends EncryptedEntity>(entity: T, autoShareSecretIds: boolean, delegatesShareInfo: {
|
|
122
|
-
[delegateId: string]: {
|
|
123
|
-
shareSecretIds?: string[];
|
|
124
|
-
shareEncryptionKey?: ShareMetadataBehaviour;
|
|
125
|
-
shareOwningEntityIds?: ShareMetadataBehaviour;
|
|
126
|
-
};
|
|
127
|
-
}): Promise<T | undefined>;
|
|
128
|
-
/**
|
|
129
|
-
* Updates encryption metadata for an entity in order to share it with a delegate or in order to add additional encrypted metadata for an existing
|
|
130
|
-
* delegate.
|
|
131
|
-
* The first time this method is used for a specific delegate it will give access to all unencrypted content of the entity to the delegate data
|
|
132
|
-
* owner. Additionally, this method also allows to share new or existing secret ids (shareSecretId), encryption keys (shareEncryptionKeys) and
|
|
133
|
-
* owning entity ids (shareOwningEntityIds) for the entity.
|
|
134
|
-
* You can use methods like {@link secretIdsOf}, {@link secretIdsForHcpHierarchyOf}, {@link encryptionKeysOf}, ... to retrieve the data you want to
|
|
135
|
-
* share. In most cases you may want to share everything related to the entity, but note that if you use confidential delegations for patients you
|
|
136
|
-
* may want to avoid sharing the confidential secret ids of the current user with other hcps.
|
|
137
|
-
* This method returns a modified copy of the entity.
|
|
138
|
-
* @param entity entity which requires encryption metadata initialisation.
|
|
139
|
-
* @param delegateId id of the delegate to share data with.
|
|
140
|
-
* @param shareSecretIds secret ids to share.
|
|
141
|
-
* @param shareEncryptionKeys encryption keys to share.
|
|
142
|
-
* @param shareOwningEntityIds owning enttiy ids to share.
|
|
143
|
-
* @param newTags tags to associate with the new encryption keys and metadata. Existing data won't be changed.
|
|
144
|
-
* @throws if any of the shareX parameters is set to `true` but the corresponding piece of data could not be retrieved.
|
|
145
|
-
* @return an updated copy of the entity.
|
|
146
|
-
*/
|
|
147
|
-
entityWithExtendedEncryptedMetadata<T extends EncryptedEntity>(entity: T, delegateId: string, shareSecretIds: string[], shareEncryptionKeys: string[], shareOwningEntityIds: string[], newTags?: string[]): Promise<T | undefined>;
|
|
148
|
-
/**
|
|
149
|
-
* Encrypts data using a key of the entity that the provided data owner can access (current data owner by default). If the provided data owner can
|
|
150
|
-
* access multiple encryption keys of the entity there is no guarantee on which key will be used.
|
|
151
|
-
* Note: you should not use this method to encrypt the `encryptedSelf` of iCure entities, since that will be automatically handled by the extended
|
|
152
|
-
* apis. You should use this method only to encrypt additional data, such as document attachments.
|
|
153
|
-
* @param entity an entity.
|
|
154
|
-
* @param content data of the entity which you want to encrypt.
|
|
155
|
-
* @param dataOwnerId optionally a data owner part of the hierarchy for the current data owner, defaults to the current data owner.
|
|
156
|
-
* @param tagsFilter allows to use for encryption only keys associated to tags which pass the filter.
|
|
157
|
-
* @return the encrypted data.
|
|
158
|
-
* @throws if the provided data owner can't access any encryption keys for the entity.
|
|
159
|
-
*/
|
|
160
|
-
encryptDataOf(entity: EncryptedEntity | EncryptedEntityStub, content: ArrayBuffer | Uint8Array, dataOwnerId?: string, tagsFilter?: (tags: string[]) => Promise<boolean>): Promise<ArrayBuffer>;
|
|
161
|
-
/**
|
|
162
|
-
* Decrypts data using a key of the entity that the provided data owner can access (current data owner by default). If the provided data owner can
|
|
163
|
-
* access multiple encryption keys each of them will be tried for decryption until one of them gives a result that is valid according to the
|
|
164
|
-
* provided validator.
|
|
165
|
-
* Note: you should not use this method to decrypt the `encryptedSelf` of iCure entities, since that will be automatically handled by the extended
|
|
166
|
-
* apis. You should use this method only to decrypt additional data, such as document attachments.
|
|
167
|
-
* @param entity an entity.
|
|
168
|
-
* @param content data of the entity which you want to decrypt.
|
|
169
|
-
* @param dataOwnerId optionally a data owner part of the hierarchy for the current data owner, defaults to the current data owner.
|
|
170
|
-
* @param validator a function which verifies the correctness of decrypted content: helps to identify decryption with the wrong key without relying
|
|
171
|
-
* solely on padding.
|
|
172
|
-
* @param tagsFilter allows to use for decryption only keys associated to tags which pass the filter.
|
|
173
|
-
* @return the decrypted data.
|
|
174
|
-
* @throws if the provided data owner can't access any encryption keys for the entity, or if no key could be found which provided valid decrypted
|
|
175
|
-
* content according to the validator.
|
|
176
|
-
*/
|
|
177
|
-
tryDecryptDataOf(entity: EncryptedEntity | EncryptedEntityStub, content: ArrayBuffer | Uint8Array, validator?: (decryptedData: ArrayBuffer) => Promise<boolean>, dataOwnerId?: string, tagsFilter?: (tags: string[]) => Promise<boolean>): Promise<{
|
|
178
|
-
data: ArrayBuffer;
|
|
179
|
-
wasDecrypted: boolean;
|
|
180
|
-
}>;
|
|
181
|
-
/**
|
|
182
|
-
* @internal this method is intended for internal use only and may be changed without notice.
|
|
183
|
-
* Decrypts the content of an encrypted entity.
|
|
184
|
-
*/
|
|
185
|
-
decryptEntity<T extends EncryptedEntity>(entity: T, ownerId: string | undefined, constructor: (json: any) => T): Promise<{
|
|
186
|
-
entity: T;
|
|
187
|
-
decrypted: boolean;
|
|
188
|
-
}>;
|
|
189
|
-
/**
|
|
190
|
-
* @internal this method is intended for internal use only and may be changed without notice.
|
|
191
|
-
* Tries using the provided keys to decrypt some json.
|
|
192
|
-
*/
|
|
193
|
-
tryDecryptJson(potentialKeys: {
|
|
194
|
-
key: CryptoKey;
|
|
195
|
-
raw: string;
|
|
196
|
-
}[], encrypted: Uint8Array, truncateTrailingDecryptedNulls: boolean): Promise<{} | undefined>;
|
|
197
|
-
/**
|
|
198
|
-
* @internal this method is intended for internal use only and may be changed without notice.
|
|
199
|
-
* Tries to encrypt the content of an encrypted entity.
|
|
200
|
-
* 1. If valid key for encryption is found the method returns the entity with the encrypted fields specified by cryptedKeys
|
|
201
|
-
* 2. If requireEncryption is true and no key could be found for encryption of the entity the method fails.
|
|
202
|
-
* 3. If requireEncryption is false and no key could be found for encryption the method will only check that the entity does not specify any value
|
|
203
|
-
* for fields which should be encrypted according to cryptedKeys (e.g. note in a patient by default). If the entity specifies a value for any field
|
|
204
|
-
* which should be encrypted the method throws an error, otherwise the method returns the original entity.
|
|
205
|
-
*/
|
|
206
|
-
tryEncryptEntity<T extends EncryptedEntity>(entity: T, dataOwnerId: string | undefined, fieldsToEncrypt: EncryptedFieldsManifest, encodeBinaryData: boolean, requireEncryption: boolean, constructor: (json: any) => T): Promise<T>;
|
|
207
|
-
/**
|
|
208
|
-
* @internal This method is for internal use only and may be changed without notice.
|
|
209
|
-
* Ensures that the encryption keys of an entity are initialised. If not will throw an exception or initialise them depending on the content of
|
|
210
|
-
* the entity. This function supports migration of entities using older encryption schemes (delegation only without encrypted keys) or entities
|
|
211
|
-
* which were previously not encrypted.
|
|
212
|
-
*/
|
|
213
|
-
ensureEncryptionKeysInitialised<T extends EncryptedEntity>(entity: T): Promise<T | undefined>;
|
|
214
|
-
/**
|
|
215
|
-
* Get the decrypted content of a delegation-like object which the provided data owner would be able to access using ONLY HIS EXCHANGE KEYS (does
|
|
216
|
-
* not consider exchange keys for parents).
|
|
217
|
-
* Note that the retrieved exchange keys are decrypted using the private keys available on the device, and results may vary from other devices.
|
|
218
|
-
* @param dataOwnerId id of a data owner, he should be part of the current data owner hierarchy.
|
|
219
|
-
* @param delegations a delegation-like object containing the encrypted key
|
|
220
|
-
* @param includeFromDelegations if true also considers delegation from the provided data owner (or parents) to look for values. This allows to
|
|
221
|
-
* decrypt delegations associated to exchange keys recovered after a giveAccessBack request.
|
|
222
|
-
* @param validateDecrypted validates the decrypted result, to drop decryption results with wrong key that still gave a valid checksum.
|
|
223
|
-
* @param tagsFilter allows to obtain only encryption keys associated to tags which satisfy the provided filter.
|
|
224
|
-
* @return the key which could be decrypted using only keys available on the current device and delegations from/to the provided data owner. May
|
|
225
|
-
* contain duplicates.
|
|
226
|
-
*/
|
|
227
|
-
private extractFromDelegationsForDataOwner;
|
|
228
|
-
private populateDelegatedTo;
|
|
229
|
-
private extractedHierarchyFromDelegation;
|
|
230
|
-
/**
|
|
231
|
-
* @internal This method should be private but is currently public/internal to allow to continue supporting legacy methods
|
|
232
|
-
*/
|
|
233
|
-
extractMergedHierarchyFromDelegationAndOwner(delegations: {
|
|
234
|
-
[delegateId: string]: Delegation[];
|
|
235
|
-
}, dataOwnerId: string | undefined, validateDecrypted: (result: string) => boolean | Promise<boolean>, tagsFilter: (tags: string[]) => Promise<boolean>): Promise<string[]>;
|
|
236
|
-
private tryDecryptDelegation;
|
|
237
|
-
private tryImportKey;
|
|
238
|
-
/**
|
|
239
|
-
* @internal this method is for internal use only and may be changed without notice.
|
|
240
|
-
*/
|
|
241
|
-
importFirstValidKey(keys: string[], entityId: string): Promise<{
|
|
242
|
-
key: CryptoKey;
|
|
243
|
-
raw: string;
|
|
244
|
-
}>;
|
|
245
|
-
private tryImportFirstValidKey;
|
|
246
|
-
/**
|
|
247
|
-
* @internal this method is for internal use only and may be changed without notice.
|
|
248
|
-
*/
|
|
249
|
-
importAllValidKeys(keys: string[]): Promise<{
|
|
250
|
-
key: CryptoKey;
|
|
251
|
-
raw: string;
|
|
252
|
-
}[]>;
|
|
253
|
-
private validateEncryptionKey;
|
|
254
|
-
private validateSecretId;
|
|
255
|
-
private validateOwningEntityId;
|
|
256
|
-
private createEncryptionKeyDelegation;
|
|
257
|
-
private createSecretIdDelegation;
|
|
258
|
-
private createOwningEntityIdDelegation;
|
|
259
|
-
private createDelegation;
|
|
260
|
-
private loadEncryptionKeysForDelegates;
|
|
261
|
-
private createOrUpdateEntityDelegations;
|
|
262
|
-
/**
|
|
263
|
-
* De-duplicates all currently accessible delegations, by removing any delegations created by the current data owner which have duplicated content,
|
|
264
|
-
* and checks if any of the required entries are currently available to the delegate through the existing delegations.
|
|
265
|
-
* @param delegateId id of the delegate.
|
|
266
|
-
* @param allDelegations delegations of the entity.
|
|
267
|
-
* @param requiredEntries potentially new entries that the delegate needs to be able to access from the delegations.
|
|
268
|
-
* @param validateDecrypted validator for decrypted delegation content
|
|
269
|
-
* @return the deduplicated delegations
|
|
270
|
-
*/
|
|
271
|
-
private deduplicateDelegationsAndFilterRequiredEntries;
|
|
272
|
-
private deduplicate;
|
|
273
|
-
private throwDetailedExceptionForInvalidParameter;
|
|
274
|
-
private checkEmptyEncryptionMetadata;
|
|
275
|
-
}
|