@icure/api 8.0.7 → 8.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/icc-api/model/models.d.ts +1 -0
- package/icc-api/model/models.js +1 -0
- package/icc-api/model/models.js.map +1 -1
- package/icc-x-api/crypto/ExchangeDataManager.js +3 -2
- package/icc-x-api/crypto/ExchangeDataManager.js.map +1 -1
- package/icc-x-api/crypto/KeyRecovery.js +5 -4
- package/icc-x-api/crypto/KeyRecovery.js.map +1 -1
- package/icc-x-api/crypto/RSA.d.ts +4 -1
- package/icc-x-api/crypto/RSA.js +6 -1
- package/icc-x-api/crypto/RSA.js.map +1 -1
- package/icc-x-api/crypto/SecureDelegationsManager.js +2 -1
- package/icc-x-api/crypto/SecureDelegationsManager.js.map +1 -1
- package/icc-x-api/crypto/TransferKeysManager.js +4 -3
- package/icc-x-api/crypto/TransferKeysManager.js.map +1 -1
- package/icc-x-api/crypto/UserEncryptionKeysManager.js +2 -1
- package/icc-x-api/crypto/UserEncryptionKeysManager.js.map +1 -1
- package/icc-x-api/crypto/utils.d.ts +1 -4
- package/icc-x-api/crypto/utils.js +6 -8
- package/icc-x-api/crypto/utils.js.map +1 -1
- package/icc-x-api/icc-accesslog-x-api.js +16 -14
- package/icc-x-api/icc-accesslog-x-api.js.map +1 -1
- package/icc-x-api/icc-calendar-item-x-api.d.ts +2 -2
- package/icc-x-api/icc-calendar-item-x-api.js +17 -17
- package/icc-x-api/icc-calendar-item-x-api.js.map +1 -1
- package/icc-x-api/icc-classification-x-api.js +12 -11
- package/icc-x-api/icc-classification-x-api.js.map +1 -1
- package/icc-x-api/icc-contact-x-api.d.ts +2 -2
- package/icc-x-api/icc-contact-x-api.js +23 -20
- package/icc-x-api/icc-contact-x-api.js.map +1 -1
- package/icc-x-api/icc-document-x-api.js +17 -16
- package/icc-x-api/icc-document-x-api.js.map +1 -1
- package/icc-x-api/icc-form-x-api.js +13 -12
- package/icc-x-api/icc-form-x-api.js.map +1 -1
- package/icc-x-api/icc-helement-x-api.js +18 -16
- package/icc-x-api/icc-helement-x-api.js.map +1 -1
- package/icc-x-api/icc-invoice-x-api.js +12 -11
- package/icc-x-api/icc-invoice-x-api.js.map +1 -1
- package/icc-x-api/icc-maintenance-task-x-api.js +11 -11
- package/icc-x-api/icc-maintenance-task-x-api.js.map +1 -1
- package/icc-x-api/icc-message-x-api.js +14 -14
- package/icc-x-api/icc-message-x-api.js.map +1 -1
- package/icc-x-api/icc-patient-x-api.js +28 -27
- package/icc-x-api/icc-patient-x-api.js.map +1 -1
- package/icc-x-api/icc-receipt-x-api.js +11 -10
- package/icc-x-api/icc-receipt-x-api.js.map +1 -1
- package/icc-x-api/icc-recovery-x-api.js +3 -2
- package/icc-x-api/icc-recovery-x-api.js.map +1 -1
- package/icc-x-api/icc-time-table-x-api.js +9 -8
- package/icc-x-api/icc-time-table-x-api.js.map +1 -1
- package/icc-x-api/icc-topic-x-api.js +13 -13
- package/icc-x-api/icc-topic-x-api.js.map +1 -1
- package/icc-x-api/utils/EntityWithDelegationTypeName.d.ts +17 -1
- package/icc-x-api/utils/EntityWithDelegationTypeName.js +33 -15
- package/icc-x-api/utils/EntityWithDelegationTypeName.js.map +1 -1
- package/icc-x-api/utils/index.d.ts +1 -0
- package/icc-x-api/utils/index.js +1 -0
- package/icc-x-api/utils/index.js.map +1 -1
- package/package.json +1 -1
- package/test/icc-api/api/IccAnonymousAccessApi.d.ts +1 -0
- package/test/icc-api/api/IccAnonymousAccessApi.js +58 -0
- package/test/icc-api/api/IccAnonymousAccessApi.js.map +1 -0
- package/test/icc-api/api/IccDocumentApi.d.ts +1 -0
- package/test/icc-api/api/IccDocumentApi.js +208 -0
- package/test/icc-api/api/IccDocumentApi.js.map +1 -0
- package/test/icc-api/api/IccGroupApi.d.ts +1 -0
- package/test/icc-api/api/IccGroupApi.js +50 -0
- package/test/icc-api/api/IccGroupApi.js.map +1 -0
- package/test/icc-api/api/IccRecoveryDataApi.d.ts +1 -0
- package/test/icc-api/api/IccRecoveryDataApi.js +95 -0
- package/test/icc-api/api/IccRecoveryDataApi.js.map +1 -0
- package/test/icc-api/api/IccRoleApi.d.ts +1 -0
- package/test/icc-api/api/IccRoleApi.js +34 -0
- package/test/icc-api/api/IccRoleApi.js.map +1 -0
- package/test/icc-api/api/IccUserApi.d.ts +1 -0
- package/test/icc-api/api/IccUserApi.js +96 -0
- package/test/icc-api/api/IccUserApi.js.map +1 -0
- package/test/icc-api/e2e/IccCalendarItemApi.d.ts +1 -0
- package/test/icc-api/e2e/IccCalendarItemApi.js +46 -0
- package/test/icc-api/e2e/IccCalendarItemApi.js.map +1 -0
- package/test/icc-api/model/modelHelpersTest.d.ts +1 -0
- package/test/icc-api/model/modelHelpersTest.js +45 -0
- package/test/icc-api/model/modelHelpersTest.js.map +1 -0
- package/test/icc-x-api/auth/group-switch-test.d.ts +1 -0
- package/test/icc-x-api/auth/group-switch-test.js +81 -0
- package/test/icc-x-api/auth/group-switch-test.js.map +1 -0
- package/test/icc-x-api/auth/jwt-concurrency-test.d.ts +2 -0
- package/test/icc-x-api/auth/jwt-concurrency-test.js +113 -0
- package/test/icc-x-api/auth/jwt-concurrency-test.js.map +1 -0
- package/test/icc-x-api/auth/smart-auth-provider-test.d.ts +1 -0
- package/test/icc-x-api/auth/smart-auth-provider-test.js +224 -0
- package/test/icc-x-api/auth/smart-auth-provider-test.js.map +1 -0
- package/test/icc-x-api/autofix-anonymity-test.d.ts +1 -0
- package/test/icc-x-api/autofix-anonymity-test.js +108 -0
- package/test/icc-x-api/autofix-anonymity-test.js.map +1 -0
- package/test/icc-x-api/confidential-entities-test.d.ts +1 -0
- package/test/icc-x-api/confidential-entities-test.js +110 -0
- package/test/icc-x-api/confidential-entities-test.js.map +1 -0
- package/test/icc-x-api/crud/comprehensive-crud-test.d.ts +1 -0
- package/test/icc-x-api/crud/comprehensive-crud-test.js +276 -0
- package/test/icc-x-api/crud/comprehensive-crud-test.js.map +1 -0
- package/test/icc-x-api/crud/entities-crud-test-interface.d.ts +16 -0
- package/test/icc-x-api/crud/entities-crud-test-interface.js +422 -0
- package/test/icc-x-api/crud/entities-crud-test-interface.js.map +1 -0
- package/test/icc-x-api/crypto/anonymous-delegations-test.d.ts +1 -0
- package/test/icc-x-api/crypto/anonymous-delegations-test.js +588 -0
- package/test/icc-x-api/crypto/anonymous-delegations-test.js.map +1 -0
- package/test/icc-x-api/crypto/concurrency.d.ts +1 -0
- package/test/icc-x-api/crypto/concurrency.js +35 -0
- package/test/icc-x-api/crypto/concurrency.js.map +1 -0
- package/test/icc-x-api/crypto/crypto-utils.d.ts +1 -0
- package/test/icc-x-api/crypto/crypto-utils.js +80 -0
- package/test/icc-x-api/crypto/crypto-utils.js.map +1 -0
- package/test/icc-x-api/crypto/cryptoTest.d.ts +2 -0
- package/test/icc-x-api/crypto/cryptoTest.js +302 -0
- package/test/icc-x-api/crypto/cryptoTest.js.map +1 -0
- package/test/icc-x-api/crypto/delegate-ci-to-patient-with-missing-keys-test.d.ts +1 -0
- package/test/icc-x-api/crypto/delegate-ci-to-patient-with-missing-keys-test.js +166 -0
- package/test/icc-x-api/crypto/delegate-ci-to-patient-with-missing-keys-test.js.map +1 -0
- package/test/icc-x-api/crypto/exchange-data-manager-test.d.ts +1 -0
- package/test/icc-x-api/crypto/exchange-data-manager-test.js +690 -0
- package/test/icc-x-api/crypto/exchange-data-manager-test.js.map +1 -0
- package/test/icc-x-api/crypto/full-crypto-test.d.ts +1 -0
- package/test/icc-x-api/crypto/full-crypto-test.js +457 -0
- package/test/icc-x-api/crypto/full-crypto-test.js.map +1 -0
- package/test/icc-x-api/crypto/secure-delegations-manager-test.d.ts +1 -0
- package/test/icc-x-api/crypto/secure-delegations-manager-test.js +266 -0
- package/test/icc-x-api/crypto/secure-delegations-manager-test.js.map +1 -0
- package/test/icc-x-api/crypto/secure-delegations-metadata-decryptor-test.d.ts +1 -0
- package/test/icc-x-api/crypto/secure-delegations-metadata-decryptor-test.js +393 -0
- package/test/icc-x-api/crypto/secure-delegations-metadata-decryptor-test.js.map +1 -0
- package/test/icc-x-api/crypto/security-metadata-decryptor-chain-test.d.ts +1 -0
- package/test/icc-x-api/crypto/security-metadata-decryptor-chain-test.js +213 -0
- package/test/icc-x-api/crypto/security-metadata-decryptor-chain-test.js.map +1 -0
- package/test/icc-x-api/crypto/shamir.d.ts +2 -0
- package/test/icc-x-api/crypto/shamir.js +166 -0
- package/test/icc-x-api/crypto/shamir.js.map +1 -0
- package/test/icc-x-api/crypto/share-to-newly-created-patient-from-hcp.d.ts +1 -0
- package/test/icc-x-api/crypto/share-to-newly-created-patient-from-hcp.js +71 -0
- package/test/icc-x-api/crypto/share-to-newly-created-patient-from-hcp.js.map +1 -0
- package/test/icc-x-api/crypto/signature-keys-manager-test.d.ts +1 -0
- package/test/icc-x-api/crypto/signature-keys-manager-test.js +44 -0
- package/test/icc-x-api/crypto/signature-keys-manager-test.js.map +1 -0
- package/test/icc-x-api/crypto/user-encryption-keys-manager-test.d.ts +1 -0
- package/test/icc-x-api/crypto/user-encryption-keys-manager-test.js +246 -0
- package/test/icc-x-api/crypto/user-encryption-keys-manager-test.js.map +1 -0
- package/test/icc-x-api/entity-with-attachments-api-test.d.ts +1 -0
- package/test/icc-x-api/entity-with-attachments-api-test.js +142 -0
- package/test/icc-x-api/entity-with-attachments-api-test.js.map +1 -0
- package/test/icc-x-api/filters/filters.d.ts +1 -0
- package/test/icc-x-api/filters/filters.js +49 -0
- package/test/icc-x-api/filters/filters.js.map +1 -0
- package/test/icc-x-api/icc-accesslog-x-api.d.ts +1 -0
- package/test/icc-x-api/icc-accesslog-x-api.js +106 -0
- package/test/icc-x-api/icc-accesslog-x-api.js.map +1 -0
- package/test/icc-x-api/icc-auth-api.d.ts +1 -0
- package/test/icc-x-api/icc-auth-api.js +47 -0
- package/test/icc-x-api/icc-auth-api.js.map +1 -0
- package/test/icc-x-api/icc-calendar-item-x-api.d.ts +1 -0
- package/test/icc-x-api/icc-calendar-item-x-api.js +150 -0
- package/test/icc-x-api/icc-calendar-item-x-api.js.map +1 -0
- package/test/icc-x-api/icc-contact-x-api.d.ts +1 -0
- package/test/icc-x-api/icc-contact-x-api.js +279 -0
- package/test/icc-x-api/icc-contact-x-api.js.map +1 -0
- package/test/icc-x-api/icc-form-x-api.d.ts +1 -0
- package/test/icc-x-api/icc-form-x-api.js +98 -0
- package/test/icc-x-api/icc-form-x-api.js.map +1 -0
- package/test/icc-x-api/icc-helement-x-api-test.d.ts +1 -0
- package/test/icc-x-api/icc-helement-x-api-test.js +153 -0
- package/test/icc-x-api/icc-helement-x-api-test.js.map +1 -0
- package/test/icc-x-api/icc-invoice-x-api.d.ts +1 -0
- package/test/icc-x-api/icc-invoice-x-api.js +99 -0
- package/test/icc-x-api/icc-invoice-x-api.js.map +1 -0
- package/test/icc-x-api/icc-maintenance-task-x-api-test.d.ts +1 -0
- package/test/icc-x-api/icc-maintenance-task-x-api-test.js +221 -0
- package/test/icc-x-api/icc-maintenance-task-x-api-test.js.map +1 -0
- package/test/icc-x-api/icc-message-x-api.d.ts +1 -0
- package/test/icc-x-api/icc-message-x-api.js +328 -0
- package/test/icc-x-api/icc-message-x-api.js.map +1 -0
- package/test/icc-x-api/icc-patient-x-api-test.d.ts +1 -0
- package/test/icc-x-api/icc-patient-x-api-test.js +158 -0
- package/test/icc-x-api/icc-patient-x-api-test.js.map +1 -0
- package/test/icc-x-api/icc-recovery-x-api.d.ts +1 -0
- package/test/icc-x-api/icc-recovery-x-api.js +170 -0
- package/test/icc-x-api/icc-recovery-x-api.js.map +1 -0
- package/test/icc-x-api/icc-time-table-x-api.d.ts +1 -0
- package/test/icc-x-api/icc-time-table-x-api.js +100 -0
- package/test/icc-x-api/icc-time-table-x-api.js.map +1 -0
- package/test/icc-x-api/icc-topic-x-api.d.ts +1 -0
- package/test/icc-x-api/icc-topic-x-api.js +269 -0
- package/test/icc-x-api/icc-topic-x-api.js.map +1 -0
- package/test/icc-x-api/icc-user-x-api-test.d.ts +1 -0
- package/test/icc-x-api/icc-user-x-api-test.js +99 -0
- package/test/icc-x-api/icc-user-x-api-test.js.map +1 -0
- package/test/icc-x-api/patient-user.d.ts +2 -0
- package/test/icc-x-api/patient-user.js +104 -0
- package/test/icc-x-api/patient-user.js.map +1 -0
- package/test/icc-x-api/storage/storage.d.ts +1 -0
- package/test/icc-x-api/storage/storage.js +48 -0
- package/test/icc-x-api/storage/storage.js.map +1 -0
- package/test/icc-x-api/test-api-no-parent.d.ts +1 -0
- package/test/icc-x-api/test-api-no-parent.js +79 -0
- package/test/icc-x-api/test-api-no-parent.js.map +1 -0
- package/test/icc-x-api/test-legacy-data-support.d.ts +1 -0
- package/test/icc-x-api/test-legacy-data-support.js +376 -0
- package/test/icc-x-api/test-legacy-data-support.js.map +1 -0
- package/test/icc-x-api/utils/graph-test.d.ts +1 -0
- package/test/icc-x-api/utils/graph-test.js +54 -0
- package/test/icc-x-api/utils/graph-test.js.map +1 -0
- package/test/icc-x-api/utils/lru-temporised-async-cache-test.d.ts +1 -0
- package/test/icc-x-api/utils/lru-temporised-async-cache-test.js +364 -0
- package/test/icc-x-api/utils/lru-temporised-async-cache-test.js.map +1 -0
- package/test/support/CSM-185.d.ts +1 -0
- package/test/support/CSM-185.js +124 -0
- package/test/support/CSM-185.js.map +1 -0
- package/test/support/CSM-243.d.ts +1 -0
- package/test/support/CSM-243.js +120 -0
- package/test/support/CSM-243.js.map +1 -0
- package/test/support/CSM-87.d.ts +0 -0
- package/test/support/CSM-87.js +21 -0
- package/test/support/CSM-87.js.map +1 -0
- package/test/support/CSM-93.d.ts +1 -0
- package/test/support/CSM-93.js +112 -0
- package/test/support/CSM-93.js.map +1 -0
- package/test/utils/FakeDataOwnerApi.d.ts +32 -0
- package/test/utils/FakeDataOwnerApi.js +136 -0
- package/test/utils/FakeDataOwnerApi.js.map +1 -0
- package/test/utils/FakeEncryptionKeysManager.d.ts +35 -0
- package/test/utils/FakeEncryptionKeysManager.js +87 -0
- package/test/utils/FakeEncryptionKeysManager.js.map +1 -0
- package/test/utils/FakeExchangeDataApi.d.ts +30 -0
- package/test/utils/FakeExchangeDataApi.js +74 -0
- package/test/utils/FakeExchangeDataApi.js.map +1 -0
- package/test/utils/FakeExchangeDataManager.d.ts +40 -0
- package/test/utils/FakeExchangeDataManager.js +89 -0
- package/test/utils/FakeExchangeDataManager.js.map +1 -0
- package/test/utils/FakeExchangeDataMapManager.d.ts +12 -0
- package/test/utils/FakeExchangeDataMapManager.js +38 -0
- package/test/utils/FakeExchangeDataMapManager.js.map +1 -0
- package/test/utils/FakeGenericApi.d.ts +16 -0
- package/test/utils/FakeGenericApi.js +65 -0
- package/test/utils/FakeGenericApi.js.map +1 -0
- package/test/utils/FakeSignatureKeysManager.d.ts +16 -0
- package/test/utils/FakeSignatureKeysManager.js +54 -0
- package/test/utils/FakeSignatureKeysManager.js.map +1 -0
- package/test/utils/TestApi.d.ts +3 -0
- package/test/utils/TestApi.js +30 -0
- package/test/utils/TestApi.js.map +1 -0
- package/test/utils/TestCollectionUtils.d.ts +1 -0
- package/test/utils/TestCollectionUtils.js +109 -0
- package/test/utils/TestCollectionUtils.js.map +1 -0
- package/test/utils/TestCryptoStrategies.d.ts +42 -0
- package/test/utils/TestCryptoStrategies.js +80 -0
- package/test/utils/TestCryptoStrategies.js.map +1 -0
- package/test/utils/TestStorage.d.ts +23 -0
- package/test/utils/TestStorage.js +61 -0
- package/test/utils/TestStorage.js.map +1 -0
- package/test/utils/test_utils.d.ts +76 -0
- package/test/utils/test_utils.js +419 -0
- package/test/utils/test_utils.js.map +1 -0
|
@@ -0,0 +1,328 @@
|
|
|
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
|
+
var _a;
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
require("isomorphic-fetch");
|
|
14
|
+
const test_utils_1 = require("../utils/test_utils");
|
|
15
|
+
const mocha_1 = require("mocha");
|
|
16
|
+
const icc_x_api_1 = require("../../icc-x-api");
|
|
17
|
+
const Patient_1 = require("../../icc-api/model/Patient");
|
|
18
|
+
const crypto_1 = require("crypto");
|
|
19
|
+
const types_1 = require("@icure/test-setup/types");
|
|
20
|
+
const Topic_1 = require("../../icc-api/model/Topic");
|
|
21
|
+
const SecureDelegation_1 = require("../../icc-api/model/SecureDelegation");
|
|
22
|
+
const XHR_1 = require("../../icc-api/api/XHR");
|
|
23
|
+
const Message_1 = require("../../icc-api/model/Message");
|
|
24
|
+
var initApi = test_utils_1.TestUtils.initApi;
|
|
25
|
+
const FilterChainMessage_1 = require("../../icc-api/model/FilterChainMessage");
|
|
26
|
+
const MessageByHcPartyFilter_1 = require("../../icc-x-api/filters/MessageByHcPartyFilter");
|
|
27
|
+
const MessageByHcPartyTransportGuidFilter_1 = require("../../icc-x-api/filters/MessageByHcPartyTransportGuidFilter");
|
|
28
|
+
const LatestMessageByHcPartyTransportGuidFilter_1 = require("../../icc-x-api/filters/LatestMessageByHcPartyTransportGuidFilter");
|
|
29
|
+
const chai_1 = require("chai");
|
|
30
|
+
const chaiAsPromised = require("chai-as-promised");
|
|
31
|
+
const icc_api_1 = require("../../icc-api");
|
|
32
|
+
(0, chai_1.use)(chaiAsPromised);
|
|
33
|
+
(0, test_utils_1.setLocalStorage)(fetch);
|
|
34
|
+
let env;
|
|
35
|
+
(_a = (0, test_utils_1.describeNoLite)('icc-message-x-api Topic-based tests', () => {
|
|
36
|
+
(0, mocha_1.before)(function () {
|
|
37
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
38
|
+
this.timeout(600000);
|
|
39
|
+
const initializer = yield (0, test_utils_1.getEnvironmentInitializer)();
|
|
40
|
+
env = yield initializer.execute((0, types_1.getEnvVariables)());
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
function createMessage(messageApi, hcpUser, patient, topic) {
|
|
44
|
+
var _a, _b;
|
|
45
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
46
|
+
return messageApi.encryptAndCreateMessageInTopic(yield messageApi.newInstanceWithPatient(hcpUser, patient, new Message_1.Message({
|
|
47
|
+
id: (0, crypto_1.randomUUID)(),
|
|
48
|
+
subject: 'Message Subject',
|
|
49
|
+
sent: new Date().getTime(),
|
|
50
|
+
transportGuid: topic.id,
|
|
51
|
+
readStatus: Object.fromEntries(Object.keys((_a = topic.activeParticipants) !== null && _a !== void 0 ? _a : {})
|
|
52
|
+
.filter((p) => p != hcpUser.healthcarePartyId)
|
|
53
|
+
.map((hcpId) => [hcpId, { read: false }])),
|
|
54
|
+
fromHealthcarePartyId: hcpUser.healthcarePartyId,
|
|
55
|
+
}), {
|
|
56
|
+
additionalDelegates: Object.fromEntries(Object.keys((_b = topic.activeParticipants) !== null && _b !== void 0 ? _b : {})
|
|
57
|
+
.filter((hcpId) => hcpId != hcpUser.healthcarePartyId)
|
|
58
|
+
.map((hcpId) => [hcpId, SecureDelegation_1.SecureDelegation.AccessLevelEnum.READ])),
|
|
59
|
+
}));
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
function createTopic(topicApi, hcpUser, patient, ...additionalUser) {
|
|
63
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
64
|
+
return topicApi.createTopic(yield topicApi.newInstance(hcpUser, patient, new Topic_1.Topic({
|
|
65
|
+
id: (0, crypto_1.randomUUID)(),
|
|
66
|
+
description: 'Topic description',
|
|
67
|
+
activeParticipants: Object.assign(Object.assign({}, Object.fromEntries(additionalUser.map((u) => [u.user.healthcarePartyId, u.role]))), { [hcpUser.healthcarePartyId]: Topic_1.TopicRole.OWNER }),
|
|
68
|
+
}), {
|
|
69
|
+
additionalDelegates: Object.fromEntries(additionalUser.map((u) => [u.user.healthcarePartyId, SecureDelegation_1.SecureDelegation.AccessLevelEnum.WRITE])),
|
|
70
|
+
}));
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
function createPatient(patientApiForHcp, hcpUser) {
|
|
74
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
75
|
+
return patientApiForHcp.createPatientWithUser(hcpUser, yield patientApiForHcp.newInstance(hcpUser, new Patient_1.Patient({
|
|
76
|
+
id: (0, crypto_1.randomUUID)(),
|
|
77
|
+
firstName: 'John',
|
|
78
|
+
lastName: 'Snow',
|
|
79
|
+
note: 'Winter is coming',
|
|
80
|
+
})));
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
(0, mocha_1.it)('An HCP should be able to publish a message on a topic and a participant can read it', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
84
|
+
const { userApi: userApiForHcp, topicApi: topicApiForHcp, patientApi: patientApiForHcp, messageApi: messageApiForHcp, } = yield initApi(env, test_utils_1.hcp1Username);
|
|
85
|
+
const { userApi: userApiForHcp2, messageApi: messageApiForHcp2 } = yield initApi(env, test_utils_1.hcp2Username);
|
|
86
|
+
const hcpUser = yield userApiForHcp.getCurrentUser();
|
|
87
|
+
const hcpUser2 = yield userApiForHcp2.getCurrentUser();
|
|
88
|
+
const samplePatient = yield createPatient(patientApiForHcp, hcpUser);
|
|
89
|
+
const createdTopic = yield createTopic(topicApiForHcp, hcpUser, samplePatient, { user: hcpUser2, role: Topic_1.TopicRole.PARTICIPANT });
|
|
90
|
+
const createdMessage = yield createMessage(messageApiForHcp, hcpUser, null, createdTopic);
|
|
91
|
+
const message = yield messageApiForHcp.getAndDecryptMessage(createdMessage.id);
|
|
92
|
+
const message2 = yield messageApiForHcp2.getAndDecryptMessage(createdMessage.id);
|
|
93
|
+
(0, chai_1.expect)(message).to.deep.equal(createdMessage);
|
|
94
|
+
(0, chai_1.expect)(message).to.deep.equal(message2);
|
|
95
|
+
}));
|
|
96
|
+
(0, mocha_1.it)('An HCP should be able to publish an encrypted message on a topic', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
97
|
+
const { userApi: userApiForHcp, topicApi: topicApiForHcp, patientApi: patientApiForHcp, messageApi: messageApiForHcp, } = yield initApi(env, test_utils_1.hcp1Username, {
|
|
98
|
+
encryptedFieldsConfig: {
|
|
99
|
+
message: ['subject'],
|
|
100
|
+
},
|
|
101
|
+
});
|
|
102
|
+
const baseMessageApi = new icc_api_1.IccMessageApi(env.iCureUrl, messageApiForHcp._headers, messageApiForHcp.authenticationProvider, messageApiForHcp.fetchImpl);
|
|
103
|
+
const hcpUser = yield userApiForHcp.getCurrentUser();
|
|
104
|
+
const samplePatient = yield createPatient(patientApiForHcp, hcpUser);
|
|
105
|
+
const createdTopic = yield createTopic(topicApiForHcp, hcpUser, samplePatient);
|
|
106
|
+
const createdMessage = yield createMessage(messageApiForHcp, hcpUser, null, createdTopic);
|
|
107
|
+
const message = yield messageApiForHcp.getAndDecryptMessage(createdMessage.id);
|
|
108
|
+
(0, chai_1.expect)(message).to.deep.equal(createdMessage);
|
|
109
|
+
(0, chai_1.expect)(message.subject).to.not.be.undefined;
|
|
110
|
+
const notDecryptedMessage = yield baseMessageApi.getMessage(createdMessage.id);
|
|
111
|
+
(0, chai_1.expect)(notDecryptedMessage).to.not.deep.equal(createdMessage);
|
|
112
|
+
(0, chai_1.expect)(notDecryptedMessage.subject).to.be.undefined;
|
|
113
|
+
}));
|
|
114
|
+
(0, mocha_1.it)('An HCP should be able to publish a message on a topic and a non-participant cannot read it', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
115
|
+
const { userApi: userApiForHcp, topicApi: topicApiForHcp, patientApi: patientApiForHcp, messageApi: messageApiForHcp, } = yield initApi(env, test_utils_1.hcp1Username);
|
|
116
|
+
const { userApi: userApiForHcp2 } = yield initApi(env, test_utils_1.hcp2Username);
|
|
117
|
+
const { messageApi: messageApiForHcp3 } = yield initApi(env, test_utils_1.hcp3Username);
|
|
118
|
+
const hcpUser = yield userApiForHcp.getCurrentUser();
|
|
119
|
+
const hcpUser2 = yield userApiForHcp2.getCurrentUser();
|
|
120
|
+
const samplePatient = yield createPatient(patientApiForHcp, hcpUser);
|
|
121
|
+
const createdTopic = yield createTopic(topicApiForHcp, hcpUser, samplePatient, { user: hcpUser2, role: Topic_1.TopicRole.PARTICIPANT });
|
|
122
|
+
const createdMessage = yield createMessage(messageApiForHcp, hcpUser, null, createdTopic);
|
|
123
|
+
const message = yield messageApiForHcp.getAndDecryptMessage(createdMessage.id);
|
|
124
|
+
(0, chai_1.expect)(message).to.not.be.null;
|
|
125
|
+
yield messageApiForHcp3.getAndDecryptMessage(createdMessage.id).then(() => chai_1.expect.fail('Should not be able to read the message'), (e) => {
|
|
126
|
+
(0, chai_1.expect)(e).to.be.instanceOf(XHR_1.XHR.XHRError);
|
|
127
|
+
(0, chai_1.expect)(e.statusCode).to.equal(403);
|
|
128
|
+
});
|
|
129
|
+
}));
|
|
130
|
+
(0, mocha_1.it)('An HCP should be able to publish a message on a topic and a participant could query it through MessageByHcPartyFilter', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
131
|
+
const { userApi: userApiForHcp, topicApi: topicApiForHcp, patientApi: patientApiForHcp, messageApi: messageApiForHcp, } = yield initApi(env, test_utils_1.hcp1Username);
|
|
132
|
+
const { userApi: userApiForHcp2, messageApi: messageApiForHcp2 } = yield initApi(env, test_utils_1.hcp2Username);
|
|
133
|
+
const hcpUser = yield userApiForHcp.getCurrentUser();
|
|
134
|
+
const hcpUser2 = yield userApiForHcp2.getCurrentUser();
|
|
135
|
+
const samplePatient = yield createPatient(patientApiForHcp, hcpUser);
|
|
136
|
+
const createdTopic = yield createTopic(topicApiForHcp, hcpUser, samplePatient, { user: hcpUser2, role: Topic_1.TopicRole.PARTICIPANT });
|
|
137
|
+
const createdMessage = yield createMessage(messageApiForHcp, hcpUser, null, createdTopic);
|
|
138
|
+
const message = yield messageApiForHcp.getAndDecryptMessage(createdMessage.id);
|
|
139
|
+
const filterChain = (hcpId) => new FilterChainMessage_1.FilterChainMessage({
|
|
140
|
+
filter: new MessageByHcPartyFilter_1.MessageByHcPartyFilter({
|
|
141
|
+
hcpId: hcpId,
|
|
142
|
+
}),
|
|
143
|
+
});
|
|
144
|
+
const filterResultForHcp = yield messageApiForHcp.filterMessagesBy(filterChain(hcpUser.healthcarePartyId));
|
|
145
|
+
(0, chai_1.expect)(filterResultForHcp.rows).to.have.length.greaterThanOrEqual(1);
|
|
146
|
+
(0, chai_1.expect)(filterResultForHcp.rows.find((m) => m.id === message.id)).to.deep.equal(message);
|
|
147
|
+
const filterResultForHcp2 = yield messageApiForHcp2.filterMessagesBy(filterChain(hcpUser2.healthcarePartyId));
|
|
148
|
+
(0, chai_1.expect)(filterResultForHcp2.rows).to.have.length.greaterThanOrEqual(1);
|
|
149
|
+
(0, chai_1.expect)(filterResultForHcp2.rows.find((m) => m.id === message.id)).to.deep.equal(message);
|
|
150
|
+
})).timeout(60000);
|
|
151
|
+
(0, mocha_1.it)('An HCP should be able to publish a message on a topic and a non-participant should not be able to query it through MessageByHcPartyFilter', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
152
|
+
const { userApi: userApiForHcp, topicApi: topicApiForHcp, patientApi: patientApiForHcp, messageApi: messageApiForHcp, } = yield initApi(env, test_utils_1.hcp1Username);
|
|
153
|
+
const { userApi: userApiForHcp2, messageApi: messageApiForHcp2 } = yield initApi(env, test_utils_1.hcp2Username);
|
|
154
|
+
const { messageApi: messageApiForHcp3, userApi: userApiForHcp3 } = yield initApi(env, test_utils_1.hcp3Username);
|
|
155
|
+
const hcpUser = yield userApiForHcp.getCurrentUser();
|
|
156
|
+
const hcpUser2 = yield userApiForHcp2.getCurrentUser();
|
|
157
|
+
const hcpUser3 = yield userApiForHcp3.getCurrentUser();
|
|
158
|
+
const samplePatient = yield createPatient(patientApiForHcp, hcpUser);
|
|
159
|
+
const createdTopic = yield createTopic(topicApiForHcp, hcpUser, samplePatient, { user: hcpUser2, role: Topic_1.TopicRole.PARTICIPANT });
|
|
160
|
+
const createdMessage = yield createMessage(messageApiForHcp, hcpUser, null, createdTopic);
|
|
161
|
+
const message = yield messageApiForHcp.getAndDecryptMessage(createdMessage.id);
|
|
162
|
+
const filterChain = (hcpId) => new FilterChainMessage_1.FilterChainMessage({
|
|
163
|
+
filter: new MessageByHcPartyFilter_1.MessageByHcPartyFilter({
|
|
164
|
+
hcpId: hcpId,
|
|
165
|
+
}),
|
|
166
|
+
});
|
|
167
|
+
const filterResultForHcp = yield messageApiForHcp.filterMessagesBy(filterChain(hcpUser.healthcarePartyId));
|
|
168
|
+
(0, chai_1.expect)(filterResultForHcp.rows).to.have.length.greaterThanOrEqual(1);
|
|
169
|
+
(0, chai_1.expect)(filterResultForHcp.rows.find((m) => m.id === message.id)).to.deep.equal(message);
|
|
170
|
+
const filterResultForHcp2 = yield messageApiForHcp2.filterMessagesBy(filterChain(hcpUser2.healthcarePartyId));
|
|
171
|
+
(0, chai_1.expect)(filterResultForHcp2.rows).to.have.length.greaterThanOrEqual(1);
|
|
172
|
+
(0, chai_1.expect)(filterResultForHcp2.rows.find((m) => m.id === message.id)).to.deep.equal(message);
|
|
173
|
+
const filterResultForHcp3 = yield messageApiForHcp3.filterMessagesBy(filterChain(hcpUser3.healthcarePartyId));
|
|
174
|
+
(0, chai_1.expect)(filterResultForHcp3.rows.find((m) => m.id === message.id)).to.be.undefined;
|
|
175
|
+
}));
|
|
176
|
+
(0, mocha_1.it)('An HCP should be able to publish a message on a topic and a participant could query it through MessageByHcPartyTransportGuidFilter', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
177
|
+
const { userApi: userApiForHcp, topicApi: topicApiForHcp, patientApi: patientApiForHcp, messageApi: messageApiForHcp, } = yield initApi(env, test_utils_1.hcp1Username);
|
|
178
|
+
const { userApi: userApiForHcp2, messageApi: messageApiForHcp2 } = yield initApi(env, test_utils_1.hcp2Username);
|
|
179
|
+
const hcpUser = yield userApiForHcp.getCurrentUser();
|
|
180
|
+
const hcpUser2 = yield userApiForHcp2.getCurrentUser();
|
|
181
|
+
const samplePatient = yield createPatient(patientApiForHcp, hcpUser);
|
|
182
|
+
const createdTopic = yield createTopic(topicApiForHcp, hcpUser, samplePatient, { user: hcpUser2, role: Topic_1.TopicRole.PARTICIPANT });
|
|
183
|
+
const createdMessage = yield createMessage(messageApiForHcp, hcpUser, null, createdTopic);
|
|
184
|
+
const message = yield messageApiForHcp.getAndDecryptMessage(createdMessage.id);
|
|
185
|
+
const filterChain = (hcpId, transportGuid) => new FilterChainMessage_1.FilterChainMessage({
|
|
186
|
+
filter: new MessageByHcPartyTransportGuidFilter_1.MessageByHcPartyTransportGuidFilter({
|
|
187
|
+
healthcarePartyId: hcpId,
|
|
188
|
+
transportGuid: transportGuid,
|
|
189
|
+
}),
|
|
190
|
+
});
|
|
191
|
+
const filterResultForHcp = yield messageApiForHcp.filterMessagesBy(filterChain(hcpUser.healthcarePartyId, message.transportGuid));
|
|
192
|
+
(0, chai_1.expect)(filterResultForHcp.rows).to.have.length(1);
|
|
193
|
+
(0, chai_1.expect)(filterResultForHcp.rows.find((m) => m.id === message.id)).to.deep.equal(message);
|
|
194
|
+
const filterResultForHcp2 = yield messageApiForHcp2.filterMessagesBy(filterChain(hcpUser2.healthcarePartyId, message.transportGuid));
|
|
195
|
+
(0, chai_1.expect)(filterResultForHcp2.rows).to.have.length(1);
|
|
196
|
+
(0, chai_1.expect)(filterResultForHcp2.rows.find((m) => m.id === message.id)).to.deep.equal(message);
|
|
197
|
+
}));
|
|
198
|
+
(0, mocha_1.it)('An HCP should be able to publish a message on a topic and a non-participant should not be able to query it through MessageByHcPartyTransportGuidFilter', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
199
|
+
const { userApi: userApiForHcp, topicApi: topicApiForHcp, patientApi: patientApiForHcp, messageApi: messageApiForHcp, } = yield initApi(env, test_utils_1.hcp1Username);
|
|
200
|
+
const { userApi: userApiForHcp2, messageApi: messageApiForHcp2 } = yield initApi(env, test_utils_1.hcp2Username);
|
|
201
|
+
const { userApi: userApiForHcp3, messageApi: messageApiForHcp3 } = yield initApi(env, test_utils_1.hcp3Username);
|
|
202
|
+
const hcpUser = yield userApiForHcp.getCurrentUser();
|
|
203
|
+
const hcpUser2 = yield userApiForHcp2.getCurrentUser();
|
|
204
|
+
const hcpUser3 = yield userApiForHcp3.getCurrentUser();
|
|
205
|
+
const samplePatient = yield createPatient(patientApiForHcp, hcpUser);
|
|
206
|
+
const createdTopic = yield createTopic(topicApiForHcp, hcpUser, samplePatient, { user: hcpUser2, role: Topic_1.TopicRole.PARTICIPANT });
|
|
207
|
+
const createdMessage = yield createMessage(messageApiForHcp, hcpUser, null, createdTopic);
|
|
208
|
+
const message = yield messageApiForHcp.getAndDecryptMessage(createdMessage.id);
|
|
209
|
+
const filterChain = (hcpId, transportGuid) => new FilterChainMessage_1.FilterChainMessage({
|
|
210
|
+
filter: new MessageByHcPartyTransportGuidFilter_1.MessageByHcPartyTransportGuidFilter({
|
|
211
|
+
healthcarePartyId: hcpId,
|
|
212
|
+
transportGuid: transportGuid,
|
|
213
|
+
}),
|
|
214
|
+
});
|
|
215
|
+
const filterResultForHcp = yield messageApiForHcp.filterMessagesBy(filterChain(hcpUser.healthcarePartyId, message.transportGuid));
|
|
216
|
+
(0, chai_1.expect)(filterResultForHcp.rows).to.have.length(1);
|
|
217
|
+
(0, chai_1.expect)(filterResultForHcp.rows.find((m) => m.id === message.id)).to.deep.equal(message);
|
|
218
|
+
const filterResultForHcp2 = yield messageApiForHcp2.filterMessagesBy(filterChain(hcpUser2.healthcarePartyId, message.transportGuid));
|
|
219
|
+
(0, chai_1.expect)(filterResultForHcp2.rows).to.have.length(1);
|
|
220
|
+
(0, chai_1.expect)(filterResultForHcp2.rows.find((m) => m.id === message.id)).to.deep.equal(message);
|
|
221
|
+
const filterResultForHcp3 = yield messageApiForHcp3.filterMessagesBy(filterChain(hcpUser3.healthcarePartyId, message.transportGuid));
|
|
222
|
+
(0, chai_1.expect)(filterResultForHcp3.rows.find((m) => m.id === message.id)).to.be.undefined;
|
|
223
|
+
}));
|
|
224
|
+
(0, mocha_1.it)('An HCP should be able to publish a message on a topic and a participant should be able to query it through LatestMessageByHcPartyTransportGuidFilter', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
225
|
+
const { userApi: userApiForHcp, topicApi: topicApiForHcp, patientApi: patientApiForHcp, messageApi: messageApiForHcp, } = yield initApi(env, test_utils_1.hcp1Username);
|
|
226
|
+
const { userApi: userApiForHcp2, messageApi: messageApiForHcp2 } = yield initApi(env, test_utils_1.hcp2Username);
|
|
227
|
+
const hcpUser = yield userApiForHcp.getCurrentUser();
|
|
228
|
+
const hcpUser2 = yield userApiForHcp2.getCurrentUser();
|
|
229
|
+
const samplePatient = yield createPatient(patientApiForHcp, hcpUser);
|
|
230
|
+
const createdTopic = yield createTopic(topicApiForHcp, hcpUser, samplePatient, { user: hcpUser2, role: Topic_1.TopicRole.PARTICIPANT });
|
|
231
|
+
let latestMessage = null;
|
|
232
|
+
for (let i = 0; i < 5; i++) {
|
|
233
|
+
// Creating 5 messages
|
|
234
|
+
latestMessage = yield createMessage(messageApiForHcp, hcpUser, null, createdTopic);
|
|
235
|
+
}
|
|
236
|
+
const filterChain = (hcpId, transportGuid) => new FilterChainMessage_1.FilterChainMessage({
|
|
237
|
+
filter: new LatestMessageByHcPartyTransportGuidFilter_1.LatestMessageByHcPartyTransportGuidFilter({
|
|
238
|
+
healthcarePartyId: hcpId,
|
|
239
|
+
transportGuid: transportGuid,
|
|
240
|
+
}),
|
|
241
|
+
});
|
|
242
|
+
const filterResultForHcp2 = yield messageApiForHcp2.filterMessagesBy(filterChain(hcpUser2.healthcarePartyId, latestMessage.transportGuid));
|
|
243
|
+
(0, chai_1.expect)(filterResultForHcp2.rows).to.have.length(1); // Only one message should be returned
|
|
244
|
+
(0, chai_1.expect)(filterResultForHcp2.rows[0]).to.deep.equal(latestMessage); // It should be the latest message
|
|
245
|
+
}));
|
|
246
|
+
function doXOnYAndSubscribe(connectionPromise, x, statusListener, eventReceivedPromiseReject, eventReceivedPromise) {
|
|
247
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
248
|
+
const connection = (yield connectionPromise)
|
|
249
|
+
.onClosed(() => __awaiter(this, void 0, void 0, function* () {
|
|
250
|
+
statusListener('CLOSED');
|
|
251
|
+
yield (0, icc_x_api_1.sleep)(3000);
|
|
252
|
+
}))
|
|
253
|
+
.onConnected(() => __awaiter(this, void 0, void 0, function* () {
|
|
254
|
+
statusListener('CONNECTED');
|
|
255
|
+
yield (0, icc_x_api_1.sleep)(2000);
|
|
256
|
+
yield x();
|
|
257
|
+
}));
|
|
258
|
+
const timeout = setTimeout(eventReceivedPromiseReject, 20000);
|
|
259
|
+
yield eventReceivedPromise.then(() => clearTimeout(timeout)).catch(() => { });
|
|
260
|
+
connection.close();
|
|
261
|
+
yield (0, icc_x_api_1.sleep)(3000);
|
|
262
|
+
});
|
|
263
|
+
}
|
|
264
|
+
const subscribeAndCreateMessage = (options, eventTypes) => __awaiter(void 0, void 0, void 0, function* () {
|
|
265
|
+
const { userApi: userApiForHcp, topicApi: topicApiForHcp, patientApi: patientApiForHcp, messageApi: messageApiForHcp, } = yield initApi(env, test_utils_1.hcp2Username);
|
|
266
|
+
const loggedUser = yield userApiForHcp.getCurrentUser();
|
|
267
|
+
const connectionPromise = (options, eventListener) => __awaiter(void 0, void 0, void 0, function* () {
|
|
268
|
+
return messageApiForHcp.subscribeToMessageEvents(eventTypes, new MessageByHcPartyFilter_1.MessageByHcPartyFilter({
|
|
269
|
+
hcpId: loggedUser.healthcarePartyId,
|
|
270
|
+
}), eventListener, options);
|
|
271
|
+
});
|
|
272
|
+
const events = [];
|
|
273
|
+
const statuses = [];
|
|
274
|
+
let eventReceivedPromiseResolve;
|
|
275
|
+
let eventReceivedPromiseReject;
|
|
276
|
+
const eventReceivedPromise = new Promise((res, rej) => {
|
|
277
|
+
eventReceivedPromiseResolve = res;
|
|
278
|
+
eventReceivedPromiseReject = rej;
|
|
279
|
+
});
|
|
280
|
+
yield doXOnYAndSubscribe(connectionPromise(options, (healthcareElement) => __awaiter(void 0, void 0, void 0, function* () {
|
|
281
|
+
events.push(healthcareElement);
|
|
282
|
+
eventReceivedPromiseResolve();
|
|
283
|
+
})), () => __awaiter(void 0, void 0, void 0, function* () {
|
|
284
|
+
var _a;
|
|
285
|
+
const user = yield userApiForHcp.getCurrentUser();
|
|
286
|
+
const patient = yield patientApiForHcp.createPatientWithUser(user, yield patientApiForHcp.newInstance(user, new Patient_1.Patient({
|
|
287
|
+
firstName: 'John',
|
|
288
|
+
lastName: 'Snow',
|
|
289
|
+
note: 'Winter is coming',
|
|
290
|
+
})));
|
|
291
|
+
const topic = yield topicApiForHcp.createTopic(yield topicApiForHcp.newInstance(loggedUser, patient, new Topic_1.Topic({
|
|
292
|
+
description: 'Topic description',
|
|
293
|
+
activeParticipants: {
|
|
294
|
+
[loggedUser.healthcarePartyId]: Topic_1.TopicRole.OWNER,
|
|
295
|
+
},
|
|
296
|
+
})));
|
|
297
|
+
const createdMessage = yield messageApiForHcp.encryptAndCreateMessageInTopic(yield messageApiForHcp.newInstanceWithPatient(loggedUser, null, new Message_1.Message({
|
|
298
|
+
id: (0, crypto_1.randomUUID)(),
|
|
299
|
+
subject: 'Message Subject',
|
|
300
|
+
sent: new Date().getTime(),
|
|
301
|
+
transportGuid: topic.id,
|
|
302
|
+
readStatus: Object.fromEntries(Object.keys((_a = topic.activeParticipants) !== null && _a !== void 0 ? _a : {})
|
|
303
|
+
.filter((hcpId) => hcpId != loggedUser.healthcarePartyId)
|
|
304
|
+
.map((hcpId) => [hcpId, { read: false }])),
|
|
305
|
+
fromHealthcarePartyId: loggedUser.healthcarePartyId,
|
|
306
|
+
}), {
|
|
307
|
+
additionalDelegates: {},
|
|
308
|
+
}));
|
|
309
|
+
}), (status) => {
|
|
310
|
+
statuses.push(status);
|
|
311
|
+
}, eventReceivedPromiseReject, eventReceivedPromise);
|
|
312
|
+
events === null || events === void 0 ? void 0 : events.forEach((event) => console.log(`Event : ${event}`));
|
|
313
|
+
statuses === null || statuses === void 0 ? void 0 : statuses.forEach((status) => console.log(`Status : ${status}`));
|
|
314
|
+
(0, chai_1.expect)(statuses).to.have.length(2);
|
|
315
|
+
(0, chai_1.expect)(events).to.have.length(1);
|
|
316
|
+
(0, chai_1.expect)(events.every((event) => event instanceof Message_1.Message)).to.be.true;
|
|
317
|
+
});
|
|
318
|
+
(0, mocha_1.it)('CREATE Message without options', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
319
|
+
yield subscribeAndCreateMessage({}, ['CREATE']);
|
|
320
|
+
})).timeout(60000);
|
|
321
|
+
(0, mocha_1.it)('CREATE Message with options', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
322
|
+
yield subscribeAndCreateMessage({
|
|
323
|
+
connectionRetryIntervalMs: 10000,
|
|
324
|
+
connectionMaxRetry: 5,
|
|
325
|
+
}, ['CREATE']);
|
|
326
|
+
})).timeout(60000);
|
|
327
|
+
})) === null || _a === void 0 ? void 0 : _a.timeout(60000);
|
|
328
|
+
//# sourceMappingURL=icc-message-x-api.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"icc-message-x-api.js","sourceRoot":"","sources":["../../../test/icc-x-api/icc-message-x-api.ts"],"names":[],"mappings":"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","sourcesContent":["import 'isomorphic-fetch'\nimport { describeNoLite, getEnvironmentInitializer, hcp1Username, hcp2Username, hcp3Username, setLocalStorage, TestUtils } from '../utils/test_utils'\nimport { before, it, describe } from 'mocha'\nimport { IccMessageXApi, IccPatientXApi, sleep, SubscriptionOptions } from '../../icc-x-api'\nimport { Patient } from '../../icc-api/model/Patient'\nimport { User } from '../../icc-api/model/User'\nimport { randomUUID } from 'crypto'\nimport { getEnvVariables, TestVars } from '@icure/test-setup/types'\nimport { IccTopicXApi } from '../../icc-x-api/icc-topic-x-api'\nimport { Topic, TopicRole } from '../../icc-api/model/Topic'\nimport { SecureDelegation } from '../../icc-api/model/SecureDelegation'\nimport { XHR } from '../../icc-api/api/XHR'\nimport { Message } from '../../icc-api/model/Message'\nimport initApi = TestUtils.initApi\nimport XHRError = XHR.XHRError\nimport { FilterChainMessage } from '../../icc-api/model/FilterChainMessage'\nimport { MessageByHcPartyFilter } from '../../icc-x-api/filters/MessageByHcPartyFilter'\nimport { MessageByHcPartyTransportGuidFilter } from '../../icc-x-api/filters/MessageByHcPartyTransportGuidFilter'\nimport { LatestMessageByHcPartyTransportGuidFilter } from '../../icc-x-api/filters/LatestMessageByHcPartyTransportGuidFilter'\nimport { Connection } from '../../icc-api/model/Connection'\nimport { expect, use as chaiUse } from 'chai'\nimport * as chaiAsPromised from 'chai-as-promised'\nimport { IccMessageApi } from '../../icc-api'\n\nchaiUse(chaiAsPromised)\nsetLocalStorage(fetch)\nlet env: TestVars\n\ndescribeNoLite('icc-message-x-api Topic-based 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 createMessage(messageApi: IccMessageXApi, hcpUser: User, patient: Patient | null, topic: Topic) {\n return messageApi.encryptAndCreateMessageInTopic(\n await messageApi.newInstanceWithPatient(\n hcpUser,\n patient,\n new Message({\n id: randomUUID(),\n subject: 'Message Subject',\n sent: new Date().getTime(),\n transportGuid: topic.id,\n readStatus: Object.fromEntries(\n Object.keys(topic.activeParticipants ?? {})\n .filter((p) => p != hcpUser.healthcarePartyId)\n .map((hcpId) => [hcpId, { read: false }])\n ),\n fromHealthcarePartyId: hcpUser.healthcarePartyId,\n }),\n {\n additionalDelegates: Object.fromEntries(\n Object.keys(topic.activeParticipants ?? {})\n .filter((hcpId) => hcpId != hcpUser.healthcarePartyId)\n .map((hcpId) => [hcpId, SecureDelegation.AccessLevelEnum.READ])\n ),\n }\n )\n )\n }\n\n async function createTopic(topicApi: IccTopicXApi, hcpUser: User, patient: Patient, ...additionalUser: { user: User; role: TopicRole }[]) {\n return topicApi.createTopic(\n await topicApi.newInstance(\n hcpUser,\n patient,\n new Topic({\n id: randomUUID(),\n description: 'Topic description',\n activeParticipants: {\n ...Object.fromEntries(additionalUser.map((u) => [u.user.healthcarePartyId!, u.role])),\n [hcpUser.healthcarePartyId!]: TopicRole.OWNER,\n },\n }),\n {\n additionalDelegates: Object.fromEntries(additionalUser.map((u) => [u.user.healthcarePartyId!, SecureDelegation.AccessLevelEnum.WRITE])),\n }\n )\n )\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('An HCP should be able to publish a message on a topic and a participant can read it', async () => {\n const {\n userApi: userApiForHcp,\n topicApi: topicApiForHcp,\n patientApi: patientApiForHcp,\n messageApi: messageApiForHcp,\n } = await initApi(env!, hcp1Username)\n\n const { userApi: userApiForHcp2, messageApi: messageApiForHcp2 } = await initApi(env!, hcp2Username)\n\n const hcpUser = await userApiForHcp.getCurrentUser()\n const hcpUser2 = await userApiForHcp2.getCurrentUser()\n\n const samplePatient = await createPatient(patientApiForHcp, hcpUser)\n const createdTopic = await createTopic(topicApiForHcp, hcpUser, samplePatient, { user: hcpUser2, role: TopicRole.PARTICIPANT })\n\n const createdMessage = await createMessage(messageApiForHcp, hcpUser, null, createdTopic)\n\n const message = await messageApiForHcp.getAndDecryptMessage(createdMessage.id!)\n const message2 = await messageApiForHcp2.getAndDecryptMessage(createdMessage.id!)\n\n expect(message).to.deep.equal(createdMessage)\n expect(message).to.deep.equal(message2)\n })\n\n it('An HCP should be able to publish an encrypted message on a topic', async () => {\n const {\n userApi: userApiForHcp,\n topicApi: topicApiForHcp,\n patientApi: patientApiForHcp,\n messageApi: messageApiForHcp,\n } = await initApi(env!, hcp1Username, {\n encryptedFieldsConfig: {\n message: ['subject'],\n },\n })\n\n const baseMessageApi = new IccMessageApi(\n env!.iCureUrl,\n messageApiForHcp._headers,\n messageApiForHcp.authenticationProvider,\n messageApiForHcp.fetchImpl\n )\n\n const hcpUser = await userApiForHcp.getCurrentUser()\n\n const samplePatient = await createPatient(patientApiForHcp, hcpUser)\n const createdTopic = await createTopic(topicApiForHcp, hcpUser, samplePatient)\n\n const createdMessage = await createMessage(messageApiForHcp, hcpUser, null, createdTopic)\n\n const message = await messageApiForHcp.getAndDecryptMessage(createdMessage.id!)\n expect(message).to.deep.equal(createdMessage)\n expect(message.subject).to.not.be.undefined\n\n const notDecryptedMessage = await baseMessageApi.getMessage(createdMessage.id!)\n expect(notDecryptedMessage).to.not.deep.equal(createdMessage)\n expect(notDecryptedMessage.subject).to.be.undefined\n })\n\n it('An HCP should be able to publish a message on a topic and a non-participant cannot read it', async () => {\n const {\n userApi: userApiForHcp,\n topicApi: topicApiForHcp,\n patientApi: patientApiForHcp,\n messageApi: messageApiForHcp,\n } = await initApi(env!, hcp1Username)\n\n const { userApi: userApiForHcp2 } = await initApi(env!, hcp2Username)\n\n const { messageApi: messageApiForHcp3 } = await initApi(env!, hcp3Username)\n\n const hcpUser = await userApiForHcp.getCurrentUser()\n const hcpUser2 = await userApiForHcp2.getCurrentUser()\n\n const samplePatient = await createPatient(patientApiForHcp, hcpUser)\n const createdTopic = await createTopic(topicApiForHcp, hcpUser, samplePatient, { user: hcpUser2, role: TopicRole.PARTICIPANT })\n\n const createdMessage = await createMessage(messageApiForHcp, hcpUser, null, createdTopic)\n\n const message = await messageApiForHcp.getAndDecryptMessage(createdMessage.id!)\n expect(message).to.not.be.null\n\n await messageApiForHcp3.getAndDecryptMessage(createdMessage.id!).then(\n () => expect.fail('Should not be able to read the message'),\n (e) => {\n expect(e).to.be.instanceOf(XHR.XHRError)\n expect((e as XHRError).statusCode).to.equal(403)\n }\n )\n })\n\n it('An HCP should be able to publish a message on a topic and a participant could query it through MessageByHcPartyFilter', async () => {\n const {\n userApi: userApiForHcp,\n topicApi: topicApiForHcp,\n patientApi: patientApiForHcp,\n messageApi: messageApiForHcp,\n } = await initApi(env!, hcp1Username)\n\n const { userApi: userApiForHcp2, messageApi: messageApiForHcp2 } = await initApi(env!, hcp2Username)\n\n const hcpUser = await userApiForHcp.getCurrentUser()\n const hcpUser2 = await userApiForHcp2.getCurrentUser()\n\n const samplePatient = await createPatient(patientApiForHcp, hcpUser)\n const createdTopic = await createTopic(topicApiForHcp, hcpUser, samplePatient, { user: hcpUser2, role: TopicRole.PARTICIPANT })\n\n const createdMessage = await createMessage(messageApiForHcp, hcpUser, null, createdTopic)\n\n const message = await messageApiForHcp.getAndDecryptMessage(createdMessage.id!)\n\n const filterChain = (hcpId: string) =>\n new FilterChainMessage({\n filter: new MessageByHcPartyFilter({\n hcpId: hcpId,\n }),\n })\n\n const filterResultForHcp = await messageApiForHcp.filterMessagesBy(filterChain(hcpUser.healthcarePartyId!))\n expect(filterResultForHcp.rows).to.have.length.greaterThanOrEqual(1)\n expect(filterResultForHcp.rows!.find((m) => m.id === message.id)).to.deep.equal(message)\n\n const filterResultForHcp2 = await messageApiForHcp2.filterMessagesBy(filterChain(hcpUser2.healthcarePartyId!))\n expect(filterResultForHcp2.rows).to.have.length.greaterThanOrEqual(1)\n expect(filterResultForHcp2.rows!.find((m) => m.id === message.id)).to.deep.equal(message)\n }).timeout(60_000)\n\n it('An HCP should be able to publish a message on a topic and a non-participant should not be able to query it through MessageByHcPartyFilter', async () => {\n const {\n userApi: userApiForHcp,\n topicApi: topicApiForHcp,\n patientApi: patientApiForHcp,\n messageApi: messageApiForHcp,\n } = await initApi(env!, hcp1Username)\n\n const { userApi: userApiForHcp2, messageApi: messageApiForHcp2 } = await initApi(env!, hcp2Username)\n\n const { messageApi: messageApiForHcp3, userApi: userApiForHcp3 } = await initApi(env!, hcp3Username)\n\n const hcpUser = await userApiForHcp.getCurrentUser()\n const hcpUser2 = await userApiForHcp2.getCurrentUser()\n const hcpUser3 = await userApiForHcp3.getCurrentUser()\n\n const samplePatient = await createPatient(patientApiForHcp, hcpUser)\n\n const createdTopic = await createTopic(topicApiForHcp, hcpUser, samplePatient, { user: hcpUser2, role: TopicRole.PARTICIPANT })\n\n const createdMessage = await createMessage(messageApiForHcp, hcpUser, null, createdTopic)\n\n const message = await messageApiForHcp.getAndDecryptMessage(createdMessage.id!)\n\n const filterChain = (hcpId: string) =>\n new FilterChainMessage({\n filter: new MessageByHcPartyFilter({\n hcpId: hcpId,\n }),\n })\n\n const filterResultForHcp = await messageApiForHcp.filterMessagesBy(filterChain(hcpUser.healthcarePartyId!))\n expect(filterResultForHcp.rows).to.have.length.greaterThanOrEqual(1)\n expect(filterResultForHcp.rows!.find((m) => m.id === message.id)).to.deep.equal(message)\n\n const filterResultForHcp2 = await messageApiForHcp2.filterMessagesBy(filterChain(hcpUser2.healthcarePartyId!))\n expect(filterResultForHcp2.rows).to.have.length.greaterThanOrEqual(1)\n expect(filterResultForHcp2.rows!.find((m) => m.id === message.id)).to.deep.equal(message)\n\n const filterResultForHcp3 = await messageApiForHcp3.filterMessagesBy(filterChain(hcpUser3.healthcarePartyId!))\n expect(filterResultForHcp3.rows!.find((m) => m.id === message.id)).to.be.undefined\n })\n\n it('An HCP should be able to publish a message on a topic and a participant could query it through MessageByHcPartyTransportGuidFilter', async () => {\n const {\n userApi: userApiForHcp,\n topicApi: topicApiForHcp,\n patientApi: patientApiForHcp,\n messageApi: messageApiForHcp,\n } = await initApi(env!, hcp1Username)\n\n const { userApi: userApiForHcp2, messageApi: messageApiForHcp2 } = await initApi(env!, hcp2Username)\n\n const hcpUser = await userApiForHcp.getCurrentUser()\n const hcpUser2 = await userApiForHcp2.getCurrentUser()\n\n const samplePatient = await createPatient(patientApiForHcp, hcpUser)\n const createdTopic = await createTopic(topicApiForHcp, hcpUser, samplePatient, { user: hcpUser2, role: TopicRole.PARTICIPANT })\n\n const createdMessage = await createMessage(messageApiForHcp, hcpUser, null, createdTopic)\n\n const message = await messageApiForHcp.getAndDecryptMessage(createdMessage.id!)\n\n const filterChain = (hcpId: string, transportGuid: string) =>\n new FilterChainMessage({\n filter: new MessageByHcPartyTransportGuidFilter({\n healthcarePartyId: hcpId,\n transportGuid: transportGuid,\n }),\n })\n\n const filterResultForHcp = await messageApiForHcp.filterMessagesBy(filterChain(hcpUser.healthcarePartyId!, message.transportGuid!))\n expect(filterResultForHcp.rows).to.have.length(1)\n expect(filterResultForHcp.rows!.find((m) => m.id === message.id)).to.deep.equal(message)\n\n const filterResultForHcp2 = await messageApiForHcp2.filterMessagesBy(filterChain(hcpUser2.healthcarePartyId!, message.transportGuid!))\n expect(filterResultForHcp2.rows).to.have.length(1)\n expect(filterResultForHcp2.rows!.find((m) => m.id === message.id)).to.deep.equal(message)\n })\n\n it('An HCP should be able to publish a message on a topic and a non-participant should not be able to query it through MessageByHcPartyTransportGuidFilter', async () => {\n const {\n userApi: userApiForHcp,\n topicApi: topicApiForHcp,\n patientApi: patientApiForHcp,\n messageApi: messageApiForHcp,\n } = await initApi(env!, hcp1Username)\n\n const { userApi: userApiForHcp2, messageApi: messageApiForHcp2 } = await initApi(env!, hcp2Username)\n\n const { userApi: userApiForHcp3, messageApi: messageApiForHcp3 } = await initApi(env!, hcp3Username)\n\n const hcpUser = await userApiForHcp.getCurrentUser()\n const hcpUser2 = await userApiForHcp2.getCurrentUser()\n const hcpUser3 = await userApiForHcp3.getCurrentUser()\n\n const samplePatient = await createPatient(patientApiForHcp, hcpUser)\n const createdTopic = await createTopic(topicApiForHcp, hcpUser, samplePatient, { user: hcpUser2, role: TopicRole.PARTICIPANT })\n\n const createdMessage = await createMessage(messageApiForHcp, hcpUser, null, createdTopic)\n\n const message = await messageApiForHcp.getAndDecryptMessage(createdMessage.id!)\n\n const filterChain = (hcpId: string, transportGuid: string) =>\n new FilterChainMessage({\n filter: new MessageByHcPartyTransportGuidFilter({\n healthcarePartyId: hcpId,\n transportGuid: transportGuid,\n }),\n })\n\n const filterResultForHcp = await messageApiForHcp.filterMessagesBy(filterChain(hcpUser.healthcarePartyId!, message.transportGuid!))\n expect(filterResultForHcp.rows).to.have.length(1)\n expect(filterResultForHcp.rows!.find((m) => m.id === message.id)).to.deep.equal(message)\n\n const filterResultForHcp2 = await messageApiForHcp2.filterMessagesBy(filterChain(hcpUser2.healthcarePartyId!, message.transportGuid!))\n expect(filterResultForHcp2.rows).to.have.length(1)\n expect(filterResultForHcp2.rows!.find((m) => m.id === message.id)).to.deep.equal(message)\n\n const filterResultForHcp3 = await messageApiForHcp3.filterMessagesBy(filterChain(hcpUser3.healthcarePartyId!, message.transportGuid!))\n expect(filterResultForHcp3.rows!.find((m) => m.id === message.id)).to.be.undefined\n })\n\n it('An HCP should be able to publish a message on a topic and a participant should be able to query it through LatestMessageByHcPartyTransportGuidFilter', async () => {\n const {\n userApi: userApiForHcp,\n topicApi: topicApiForHcp,\n patientApi: patientApiForHcp,\n messageApi: messageApiForHcp,\n } = await initApi(env!, hcp1Username)\n\n const { userApi: userApiForHcp2, messageApi: messageApiForHcp2 } = await initApi(env!, hcp2Username)\n\n const hcpUser = await userApiForHcp.getCurrentUser()\n const hcpUser2 = await userApiForHcp2.getCurrentUser()\n\n const samplePatient = await createPatient(patientApiForHcp, hcpUser)\n const createdTopic = await createTopic(topicApiForHcp, hcpUser, samplePatient, { user: hcpUser2, role: TopicRole.PARTICIPANT })\n\n let latestMessage: Message | null = null\n for (let i = 0; i < 5; i++) {\n // Creating 5 messages\n latestMessage = await createMessage(messageApiForHcp, hcpUser, null, createdTopic)\n }\n\n const filterChain = (hcpId: string, transportGuid: string) =>\n new FilterChainMessage({\n filter: new LatestMessageByHcPartyTransportGuidFilter({\n healthcarePartyId: hcpId,\n transportGuid: transportGuid,\n }),\n })\n\n const filterResultForHcp2 = await messageApiForHcp2.filterMessagesBy(filterChain(hcpUser2.healthcarePartyId!, latestMessage!.transportGuid!))\n expect(filterResultForHcp2.rows).to.have.length(1) // Only one message should be returned\n expect(filterResultForHcp2.rows![0]).to.deep.equal(latestMessage) // It should be the latest message\n })\n\n async function doXOnYAndSubscribe<Y>(\n connectionPromise: Promise<Connection>,\n x: () => Promise<Y>,\n statusListener: (status: string) => void,\n eventReceivedPromiseReject: (reason?: any) => void,\n eventReceivedPromise: Promise<void>\n ) {\n const connection = (await connectionPromise)\n .onClosed(async () => {\n statusListener('CLOSED')\n await sleep(3_000)\n })\n .onConnected(async () => {\n statusListener('CONNECTED')\n await sleep(2_000)\n await x()\n })\n\n const timeout = setTimeout(eventReceivedPromiseReject, 20_000)\n await eventReceivedPromise.then(() => clearTimeout(timeout)).catch(() => {})\n\n connection.close()\n\n await sleep(3_000)\n }\n\n const subscribeAndCreateMessage = async (options: SubscriptionOptions, eventTypes: ('CREATE' | 'DELETE' | 'UPDATE')[]) => {\n const {\n userApi: userApiForHcp,\n topicApi: topicApiForHcp,\n patientApi: patientApiForHcp,\n messageApi: messageApiForHcp,\n } = await initApi(env!, hcp2Username)\n\n const loggedUser = await userApiForHcp.getCurrentUser()\n const connectionPromise = async (options: {}, eventListener: (healthcareElement: Message) => Promise<void>) =>\n messageApiForHcp.subscribeToMessageEvents(\n eventTypes,\n new MessageByHcPartyFilter({\n hcpId: loggedUser!.healthcarePartyId!,\n }),\n eventListener,\n options\n )\n\n const events: Message[] = []\n const statuses: string[] = []\n\n let eventReceivedPromiseResolve!: (value: void | PromiseLike<void>) => void\n let eventReceivedPromiseReject!: (reason?: any) => void\n const eventReceivedPromise = new Promise<void>((res, rej) => {\n eventReceivedPromiseResolve = res\n eventReceivedPromiseReject = rej\n })\n\n await doXOnYAndSubscribe(\n connectionPromise(options, async (healthcareElement) => {\n events.push(healthcareElement)\n eventReceivedPromiseResolve()\n }),\n async () => {\n const user = await userApiForHcp.getCurrentUser()\n\n const patient = await patientApiForHcp.createPatientWithUser(\n user,\n await patientApiForHcp.newInstance(\n user,\n new Patient({\n firstName: 'John',\n lastName: 'Snow',\n note: 'Winter is coming',\n })\n )\n )\n\n const topic = await topicApiForHcp.createTopic(\n await topicApiForHcp.newInstance(\n loggedUser,\n patient,\n new Topic({\n description: 'Topic description',\n activeParticipants: {\n [loggedUser.healthcarePartyId!]: TopicRole.OWNER,\n },\n })\n )\n )\n\n const createdMessage = await messageApiForHcp.encryptAndCreateMessageInTopic(\n await messageApiForHcp.newInstanceWithPatient(\n loggedUser,\n null,\n new Message({\n id: randomUUID(),\n subject: 'Message Subject',\n sent: new Date().getTime(),\n transportGuid: topic.id,\n readStatus: Object.fromEntries(\n Object.keys(topic.activeParticipants ?? {})\n .filter((hcpId) => hcpId != loggedUser.healthcarePartyId)\n .map((hcpId) => [hcpId, { read: false }])\n ),\n fromHealthcarePartyId: loggedUser.healthcarePartyId,\n }),\n {\n additionalDelegates: {},\n }\n )\n )\n },\n (status) => {\n statuses.push(status)\n },\n eventReceivedPromiseReject,\n eventReceivedPromise\n )\n\n events?.forEach((event) => console.log(`Event : ${event}`))\n statuses?.forEach((status) => console.log(`Status : ${status}`))\n\n expect(statuses).to.have.length(2)\n expect(events).to.have.length(1)\n expect(events.every((event) => event instanceof Message)).to.be.true\n }\n\n it('CREATE Message without options', async () => {\n await subscribeAndCreateMessage({}, ['CREATE'])\n }).timeout(60000)\n\n it('CREATE Message with options', async () => {\n await subscribeAndCreateMessage(\n {\n connectionRetryIntervalMs: 10_000,\n connectionMaxRetry: 5,\n },\n ['CREATE']\n )\n }).timeout(60000)\n})?.timeout(60_000)\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import 'isomorphic-fetch';
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
const mocha_1 = require("mocha");
|
|
13
|
+
require("isomorphic-fetch");
|
|
14
|
+
const Patient_1 = require("../../icc-api/model/Patient");
|
|
15
|
+
const chai_1 = require("chai");
|
|
16
|
+
const crypto_1 = require("crypto");
|
|
17
|
+
const test_utils_1 = require("../utils/test_utils");
|
|
18
|
+
var initApi = test_utils_1.TestUtils.initApi;
|
|
19
|
+
const types_1 = require("@icure/test-setup/types");
|
|
20
|
+
const icc_x_api_1 = require("../../icc-x-api");
|
|
21
|
+
(0, test_utils_1.setLocalStorage)(fetch);
|
|
22
|
+
let env;
|
|
23
|
+
describe('icc-x-patient-api Tests', () => {
|
|
24
|
+
(0, mocha_1.before)(function () {
|
|
25
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
26
|
+
this.timeout(600000);
|
|
27
|
+
const initializer = yield (0, test_utils_1.getEnvironmentInitializer)();
|
|
28
|
+
env = yield initializer.execute((0, types_1.getEnvVariables)());
|
|
29
|
+
});
|
|
30
|
+
});
|
|
31
|
+
it('CreatePatientWithUser Success for HCP', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
32
|
+
// Given
|
|
33
|
+
const { userApi: userApiForHcp, dataOwnerApi: dataOwnerApiForHcp, patientApi: patientApiForHcp, cryptoApi: cryptoApiForHcp, } = yield initApi(env, test_utils_1.hcp1Username);
|
|
34
|
+
const hcpUser = yield userApiForHcp.getCurrentUser();
|
|
35
|
+
const patientToCreate = yield patientApiForHcp.newInstance(hcpUser, new Patient_1.Patient({
|
|
36
|
+
id: (0, crypto_1.randomUUID)(),
|
|
37
|
+
firstName: 'John',
|
|
38
|
+
lastName: 'Snow',
|
|
39
|
+
note: 'Winter is coming',
|
|
40
|
+
}));
|
|
41
|
+
// When
|
|
42
|
+
const createdPatient = yield patientApiForHcp.createPatientWithUser(hcpUser, patientToCreate);
|
|
43
|
+
// Then
|
|
44
|
+
const readPatient = yield patientApiForHcp.getPatientWithUser(hcpUser, createdPatient.id);
|
|
45
|
+
(0, chai_1.assert)(readPatient != null);
|
|
46
|
+
(0, chai_1.assert)(readPatient.id != null);
|
|
47
|
+
(0, chai_1.assert)(readPatient.note == patientToCreate.note);
|
|
48
|
+
(0, chai_1.assert)(readPatient.firstName == patientToCreate.firstName);
|
|
49
|
+
(0, chai_1.assert)(readPatient.lastName == patientToCreate.lastName);
|
|
50
|
+
(0, chai_1.expect)(yield cryptoApiForHcp.xapi.encryptionKeysOf({ entity: readPatient, type: icc_x_api_1.EntityWithDelegationTypeName.Patient }, undefined)).to.have.length(1);
|
|
51
|
+
(0, chai_1.expect)(yield patientApiForHcp.decryptSecretIdsOf(readPatient)).to.have.length(1);
|
|
52
|
+
}));
|
|
53
|
+
it('Share with should work as expected', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
54
|
+
const api1 = yield initApi(env, test_utils_1.hcp1Username);
|
|
55
|
+
const user1 = yield api1.userApi.getCurrentUser();
|
|
56
|
+
const api2 = yield initApi(env, test_utils_1.hcp2Username);
|
|
57
|
+
const user2 = yield api2.userApi.getCurrentUser();
|
|
58
|
+
const encryptedField = 'Something encrypted';
|
|
59
|
+
const entity = yield api1.patientApi.createPatientWithUser(user1, yield api1.patientApi.newInstance(user1, { firstName: 'Gigio', lastName: 'Bagigio', note: encryptedField }));
|
|
60
|
+
(0, chai_1.expect)(entity.note).to.be.equal(encryptedField);
|
|
61
|
+
const secretIds = yield api1.patientApi.decryptSecretIdsOf(entity);
|
|
62
|
+
yield api2.patientApi
|
|
63
|
+
.getPatientWithUser(user2, entity.id)
|
|
64
|
+
.then(() => {
|
|
65
|
+
throw new Error('Should not be able to get the entity');
|
|
66
|
+
})
|
|
67
|
+
.catch(() => {
|
|
68
|
+
/* expected */
|
|
69
|
+
});
|
|
70
|
+
yield api1.patientApi.shareWith(user2.healthcarePartyId, entity, secretIds);
|
|
71
|
+
const retrieved = yield api2.patientApi.getPatientWithUser(user2, entity.id);
|
|
72
|
+
(0, chai_1.expect)(retrieved.note).to.be.equal(encryptedField);
|
|
73
|
+
(0, chai_1.expect)(yield api2.patientApi.decryptSecretIdsOf(retrieved)).to.have.members(secretIds);
|
|
74
|
+
}));
|
|
75
|
+
it('Merge patients should work as expected', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
76
|
+
const api1 = yield initApi(env, test_utils_1.hcp1Username);
|
|
77
|
+
const user1 = yield api1.userApi.getCurrentUser();
|
|
78
|
+
const api2 = yield initApi(env, test_utils_1.hcp2Username);
|
|
79
|
+
const user2 = yield api2.userApi.getCurrentUser();
|
|
80
|
+
const api3 = yield initApi(env, test_utils_1.hcp3Username);
|
|
81
|
+
const user3 = yield api3.userApi.getCurrentUser();
|
|
82
|
+
const mergedFirstName = 'Gigio';
|
|
83
|
+
const mergedLastName = 'Bagigio';
|
|
84
|
+
const mergedAlias = 'Luigio';
|
|
85
|
+
const mergedNote = 'A secret note';
|
|
86
|
+
const patientFrom = yield api1.patientApi.createPatientWithUser(user1, yield api1.patientApi.newInstance(user1, {
|
|
87
|
+
firstName: mergedFirstName,
|
|
88
|
+
lastName: 'From',
|
|
89
|
+
note: 'A',
|
|
90
|
+
}, { additionalDelegates: { [user2.healthcarePartyId]: 'WRITE' } }));
|
|
91
|
+
const patientFromSecretIds = yield api1.patientApi.decryptSecretIdsOf(patientFrom);
|
|
92
|
+
(0, chai_1.expect)(patientFromSecretIds).to.have.lengthOf(1);
|
|
93
|
+
const patientInto = yield api1.patientApi.createPatientWithUser(user1, yield api1.patientApi.newInstance(user1, {
|
|
94
|
+
firstName: 'Into',
|
|
95
|
+
lastName: mergedLastName,
|
|
96
|
+
note: 'B',
|
|
97
|
+
}, { additionalDelegates: { [user3.healthcarePartyId]: 'WRITE' } }));
|
|
98
|
+
const patientIntoSecretIds = yield api1.patientApi.decryptSecretIdsOf(patientInto);
|
|
99
|
+
(0, chai_1.expect)(patientFromSecretIds).to.have.lengthOf(1);
|
|
100
|
+
(0, chai_1.expect)(patientIntoSecretIds[0]).to.not.equal(patientFromSecretIds[0]);
|
|
101
|
+
const mergedInto = Object.assign(Object.assign({}, patientInto), { firstName: mergedFirstName, lastName: mergedLastName, alias: mergedAlias, note: mergedNote });
|
|
102
|
+
const mergedPatient = yield api1.patientApi.mergePatients(patientFrom, mergedInto);
|
|
103
|
+
(0, chai_1.expect)(mergedPatient.firstName).to.equal(mergedFirstName);
|
|
104
|
+
(0, chai_1.expect)(mergedPatient.lastName).to.equal(mergedLastName);
|
|
105
|
+
(0, chai_1.expect)(mergedPatient.alias).to.equal(mergedAlias);
|
|
106
|
+
(0, chai_1.expect)(mergedPatient.note).to.equal(mergedNote);
|
|
107
|
+
(0, chai_1.expect)(yield api1.patientApi.decryptSecretIdsOf(mergedPatient)).to.have.members([...patientFromSecretIds, ...patientIntoSecretIds]);
|
|
108
|
+
const retrievedByDelegateWithAccessToInto = yield api3.patientApi.getPatientWithUser(user3, patientInto.id);
|
|
109
|
+
(0, chai_1.expect)(retrievedByDelegateWithAccessToInto.firstName).to.equal(mergedFirstName);
|
|
110
|
+
(0, chai_1.expect)(retrievedByDelegateWithAccessToInto.lastName).to.equal(mergedLastName);
|
|
111
|
+
(0, chai_1.expect)(retrievedByDelegateWithAccessToInto.alias).to.equal(mergedAlias);
|
|
112
|
+
(0, chai_1.expect)(retrievedByDelegateWithAccessToInto.note).to.equal(mergedNote);
|
|
113
|
+
(0, chai_1.expect)(yield api3.patientApi.decryptSecretIdsOf(retrievedByDelegateWithAccessToInto)).to.have.members(patientIntoSecretIds);
|
|
114
|
+
const retrievedByDelegateWithAccessToFrom = yield api2.patientApi.getPatientWithUser(user2, patientInto.id);
|
|
115
|
+
(0, chai_1.expect)(retrievedByDelegateWithAccessToFrom.firstName).to.equal(mergedFirstName);
|
|
116
|
+
(0, chai_1.expect)(retrievedByDelegateWithAccessToFrom.lastName).to.equal(mergedLastName);
|
|
117
|
+
(0, chai_1.expect)(retrievedByDelegateWithAccessToFrom.alias).to.equal(mergedAlias);
|
|
118
|
+
(0, chai_1.expect)(retrievedByDelegateWithAccessToFrom.note).to.be.undefined; // No access to new encryption key yet
|
|
119
|
+
(0, chai_1.expect)(yield api2.patientApi.decryptSecretIdsOf(retrievedByDelegateWithAccessToFrom)).to.have.members(patientFromSecretIds);
|
|
120
|
+
}));
|
|
121
|
+
it('Patient picture should be automatically decoded from base64 on initialisation.', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
122
|
+
const pictureAB = (0, crypto_1.randomBytes)(100);
|
|
123
|
+
const pictureBase64 = (0, icc_x_api_1.ua2b64)(pictureAB);
|
|
124
|
+
const patient = new Patient_1.Patient({ picture: pictureBase64 });
|
|
125
|
+
(0, chai_1.expect)(patient.picture).to.not.be.undefined;
|
|
126
|
+
(0, chai_1.expect)(patient.picture instanceof ArrayBuffer || ArrayBuffer.isView(patient.picture)).to.be.true;
|
|
127
|
+
const decodedPicture = new Uint8Array(patient.picture);
|
|
128
|
+
(0, chai_1.expect)(decodedPicture).to.have.length(pictureAB.length);
|
|
129
|
+
for (let i = 0; i < pictureAB.length; i++) {
|
|
130
|
+
(0, chai_1.expect)(decodedPicture[i]).to.equal(pictureAB[i]);
|
|
131
|
+
}
|
|
132
|
+
}));
|
|
133
|
+
it('Creating a new Patient instance using a patient with decoded picture should not lose the picture data', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
134
|
+
const pictureAB = (0, crypto_1.randomBytes)(100);
|
|
135
|
+
const patient = new Patient_1.Patient({ picture: new Uint8Array(pictureAB) });
|
|
136
|
+
(0, chai_1.expect)(patient.picture).to.not.be.undefined;
|
|
137
|
+
(0, chai_1.expect)(patient.picture instanceof ArrayBuffer || ArrayBuffer.isView(patient.picture)).to.be.true;
|
|
138
|
+
const decodedPicture = new Uint8Array(patient.picture);
|
|
139
|
+
(0, chai_1.expect)(decodedPicture).to.have.length(pictureAB.length);
|
|
140
|
+
for (let i = 0; i < pictureAB.length; i++) {
|
|
141
|
+
(0, chai_1.expect)(decodedPicture[i]).to.equal(pictureAB[i]);
|
|
142
|
+
}
|
|
143
|
+
}));
|
|
144
|
+
it('A Patient with picture data should be created and retrieved correctly', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
145
|
+
const pictureAB = (0, crypto_1.randomBytes)(100);
|
|
146
|
+
const api = yield initApi(env, test_utils_1.hcp1Username);
|
|
147
|
+
const user = yield api.userApi.getCurrentUser();
|
|
148
|
+
const patient = yield api.patientApi.createPatientWithUser(user, yield api.patientApi.newInstance(user, { firstName: 'Giovanni', lastName: 'Giorgio', picture: new Uint8Array(pictureAB) }));
|
|
149
|
+
(0, chai_1.expect)(patient.picture).to.not.be.undefined;
|
|
150
|
+
(0, chai_1.expect)(patient.picture instanceof ArrayBuffer || ArrayBuffer.isView(patient.picture)).to.be.true;
|
|
151
|
+
const decodedPicture = new Uint8Array(patient.picture);
|
|
152
|
+
(0, chai_1.expect)(decodedPicture).to.have.length(pictureAB.length);
|
|
153
|
+
for (let i = 0; i < pictureAB.length; i++) {
|
|
154
|
+
(0, chai_1.expect)(decodedPicture[i]).to.equal(pictureAB[i]);
|
|
155
|
+
}
|
|
156
|
+
}));
|
|
157
|
+
});
|
|
158
|
+
//# sourceMappingURL=icc-patient-x-api-test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"icc-patient-x-api-test.js","sourceRoot":"","sources":["../../../test/icc-x-api/icc-patient-x-api-test.ts"],"names":[],"mappings":"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","sourcesContent":["import { before } from 'mocha'\n\nimport 'isomorphic-fetch'\n\nimport { Patient } from '../../icc-api/model/Patient'\nimport { assert, expect } from 'chai'\nimport { randomBytes, randomUUID } from 'crypto'\nimport { getEnvironmentInitializer, hcp1Username, hcp2Username, hcp3Username, setLocalStorage, TestUtils } from '../utils/test_utils'\nimport initApi = TestUtils.initApi\nimport { getEnvVariables, TestVars } from '@icure/test-setup/types'\nimport { EntityWithDelegationTypeName, ua2b64 } from '../../icc-x-api'\n\nsetLocalStorage(fetch)\nlet env: TestVars\n\ndescribe('icc-x-patient-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('CreatePatientWithUser Success for HCP', async () => {\n // Given\n const {\n userApi: userApiForHcp,\n dataOwnerApi: dataOwnerApiForHcp,\n patientApi: patientApiForHcp,\n cryptoApi: cryptoApiForHcp,\n } = await initApi(env, hcp1Username)\n\n const hcpUser = await userApiForHcp.getCurrentUser()\n\n const patientToCreate = 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 // When\n const createdPatient = await patientApiForHcp.createPatientWithUser(hcpUser, patientToCreate)\n\n // Then\n const readPatient = await patientApiForHcp.getPatientWithUser(hcpUser, createdPatient.id!)\n assert(readPatient != null)\n assert(readPatient.id != null)\n assert(readPatient.note == patientToCreate.note)\n assert(readPatient.firstName == patientToCreate.firstName)\n assert(readPatient.lastName == patientToCreate.lastName)\n expect(\n await cryptoApiForHcp.xapi.encryptionKeysOf({ entity: readPatient, type: EntityWithDelegationTypeName.Patient }, undefined)\n ).to.have.length(1)\n expect(await patientApiForHcp.decryptSecretIdsOf(readPatient)).to.have.length(1)\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 encryptedField = 'Something encrypted'\n const entity = await api1.patientApi.createPatientWithUser(\n user1,\n await api1.patientApi.newInstance(user1, { firstName: 'Gigio', lastName: 'Bagigio', note: encryptedField })\n )\n expect(entity.note).to.be.equal(encryptedField)\n const secretIds = await api1.patientApi.decryptSecretIdsOf(entity)\n await api2.patientApi\n .getPatientWithUser(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.patientApi.shareWith(user2.healthcarePartyId!, entity, secretIds)\n const retrieved = await api2.patientApi.getPatientWithUser(user2, entity.id)\n expect(retrieved.note).to.be.equal(encryptedField)\n expect(await api2.patientApi.decryptSecretIdsOf(retrieved)).to.have.members(secretIds)\n })\n\n it('Merge patients 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 api3 = await initApi(env!, hcp3Username)\n const user3 = await api3.userApi.getCurrentUser()\n const mergedFirstName = 'Gigio'\n const mergedLastName = 'Bagigio'\n const mergedAlias = 'Luigio'\n const mergedNote = 'A secret note'\n const patientFrom = await api1.patientApi.createPatientWithUser(\n user1,\n await api1.patientApi.newInstance(\n user1,\n {\n firstName: mergedFirstName,\n lastName: 'From',\n note: 'A',\n },\n { additionalDelegates: { [user2.healthcarePartyId!]: 'WRITE' } }\n )\n )\n const patientFromSecretIds = await api1.patientApi.decryptSecretIdsOf(patientFrom)\n expect(patientFromSecretIds).to.have.lengthOf(1)\n const patientInto = await api1.patientApi.createPatientWithUser(\n user1,\n await api1.patientApi.newInstance(\n user1,\n {\n firstName: 'Into',\n lastName: mergedLastName,\n note: 'B',\n },\n { additionalDelegates: { [user3.healthcarePartyId!]: 'WRITE' } }\n )\n )\n const patientIntoSecretIds = await api1.patientApi.decryptSecretIdsOf(patientInto)\n expect(patientFromSecretIds).to.have.lengthOf(1)\n expect(patientIntoSecretIds[0]).to.not.equal(patientFromSecretIds[0])\n const mergedInto = {\n ...patientInto,\n firstName: mergedFirstName,\n lastName: mergedLastName,\n alias: mergedAlias,\n note: mergedNote,\n }\n const mergedPatient = await api1.patientApi.mergePatients(patientFrom, mergedInto)\n expect(mergedPatient.firstName).to.equal(mergedFirstName)\n expect(mergedPatient.lastName).to.equal(mergedLastName)\n expect(mergedPatient.alias).to.equal(mergedAlias)\n expect(mergedPatient.note).to.equal(mergedNote)\n expect(await api1.patientApi.decryptSecretIdsOf(mergedPatient)).to.have.members([...patientFromSecretIds, ...patientIntoSecretIds])\n const retrievedByDelegateWithAccessToInto = await api3.patientApi.getPatientWithUser(user3, patientInto.id!)\n expect(retrievedByDelegateWithAccessToInto.firstName).to.equal(mergedFirstName)\n expect(retrievedByDelegateWithAccessToInto.lastName).to.equal(mergedLastName)\n expect(retrievedByDelegateWithAccessToInto.alias).to.equal(mergedAlias)\n expect(retrievedByDelegateWithAccessToInto.note).to.equal(mergedNote)\n expect(await api3.patientApi.decryptSecretIdsOf(retrievedByDelegateWithAccessToInto)).to.have.members(patientIntoSecretIds)\n const retrievedByDelegateWithAccessToFrom = await api2.patientApi.getPatientWithUser(user2, patientInto.id!)\n expect(retrievedByDelegateWithAccessToFrom.firstName).to.equal(mergedFirstName)\n expect(retrievedByDelegateWithAccessToFrom.lastName).to.equal(mergedLastName)\n expect(retrievedByDelegateWithAccessToFrom.alias).to.equal(mergedAlias)\n expect(retrievedByDelegateWithAccessToFrom.note).to.be.undefined // No access to new encryption key yet\n expect(await api2.patientApi.decryptSecretIdsOf(retrievedByDelegateWithAccessToFrom)).to.have.members(patientFromSecretIds)\n })\n\n it('Patient picture should be automatically decoded from base64 on initialisation.', async () => {\n const pictureAB = randomBytes(100)\n const pictureBase64 = ua2b64(pictureAB)\n const patient = new Patient({ picture: pictureBase64 })\n expect(patient.picture).to.not.be.undefined\n expect(patient.picture instanceof ArrayBuffer || ArrayBuffer.isView(patient.picture)).to.be.true\n const decodedPicture = new Uint8Array(patient.picture!)\n expect(decodedPicture).to.have.length(pictureAB.length)\n for (let i = 0; i < pictureAB.length; i++) {\n expect(decodedPicture[i]).to.equal(pictureAB[i])\n }\n })\n\n it('Creating a new Patient instance using a patient with decoded picture should not lose the picture data', async () => {\n const pictureAB = randomBytes(100)\n const patient = new Patient({ picture: new Uint8Array(pictureAB) })\n expect(patient.picture).to.not.be.undefined\n expect(patient.picture instanceof ArrayBuffer || ArrayBuffer.isView(patient.picture)).to.be.true\n const decodedPicture = new Uint8Array(patient.picture!)\n expect(decodedPicture).to.have.length(pictureAB.length)\n for (let i = 0; i < pictureAB.length; i++) {\n expect(decodedPicture[i]).to.equal(pictureAB[i])\n }\n })\n\n it('A Patient with picture data should be created and retrieved correctly', async () => {\n const pictureAB = randomBytes(100)\n const api = await initApi(env!, hcp1Username)\n const user = await api.userApi.getCurrentUser()\n const patient = await api.patientApi.createPatientWithUser(\n user,\n await api.patientApi.newInstance(user, { firstName: 'Giovanni', lastName: 'Giorgio', picture: new Uint8Array(pictureAB) })\n )\n expect(patient.picture).to.not.be.undefined\n expect(patient.picture instanceof ArrayBuffer || ArrayBuffer.isView(patient.picture)).to.be.true\n const decodedPicture = new Uint8Array(patient.picture!)\n expect(decodedPicture).to.have.length(pictureAB.length)\n for (let i = 0; i < pictureAB.length; i++) {\n expect(decodedPicture[i]).to.equal(pictureAB[i])\n }\n })\n})\n"]}
|