@icure/api 7.1.34 → 7.1.35
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/IccAuthApi.d.ts +1 -0
- package/icc-api/api/IccAuthApi.js +1 -0
- package/icc-api/api/IccAuthApi.js.map +1 -1
- package/icc-x-api/index.d.ts +22 -29
- package/icc-x-api/index.js +60 -38
- package/icc-x-api/index.js.map +1 -1
- package/package.json +1 -1
- package/test/icc-api/api/IccDocumentApi.d.ts +1 -0
- package/test/icc-api/api/IccDocumentApi.js +200 -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/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 +80 -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 +45 -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 +222 -0
- package/test/icc-x-api/auth/smart-auth-provider-test.js.map +1 -0
- package/test/icc-x-api/crypto/KeyManager-test.d.ts +1 -0
- package/test/icc-x-api/crypto/KeyManager-test.js +225 -0
- package/test/icc-x-api/crypto/KeyManager-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 +275 -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 +132 -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/full-crypto-test.d.ts +1 -0
- package/test/icc-x-api/crypto/full-crypto-test.js +458 -0
- package/test/icc-x-api/crypto/full-crypto-test.js.map +1 -0
- package/test/icc-x-api/crypto/shamir.d.ts +2 -0
- package/test/icc-x-api/crypto/shamir.js +156 -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 +75 -0
- package/test/icc-x-api/crypto/share-to-newly-created-patient-from-hcp.js.map +1 -0
- package/test/icc-x-api/data-compatibility-test-7to6.d.ts +1 -0
- package/test/icc-x-api/data-compatibility-test-7to6.js +343 -0
- package/test/icc-x-api/data-compatibility-test-7to6.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 +121 -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 +46 -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 +146 -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 +311 -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 +331 -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 +158 -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 +115 -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 +230 -0
- package/test/icc-x-api/icc-maintenance-task-x-api-test.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 +169 -0
- package/test/icc-x-api/icc-patient-x-api-test.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 +110 -0
- package/test/icc-x-api/icc-time-table-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 +108 -0
- package/test/icc-x-api/icc-user-x-api-test.js.map +1 -0
- package/test/icc-x-api/icureapi-group-test.d.ts +1 -0
- package/test/icc-x-api/icureapi-group-test.js +130 -0
- package/test/icc-x-api/icureapi-group-test.js.map +1 -0
- package/test/icc-x-api/patient-user.d.ts +2 -0
- package/test/icc-x-api/patient-user.js +117 -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 +50 -0
- package/test/icc-x-api/storage/storage.js.map +1 -0
- package/test/icc-x-api/subscription-apis.d.ts +2 -0
- package/test/icc-x-api/subscription-apis.js +498 -0
- package/test/icc-x-api/subscription-apis.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 +231 -0
- package/test/icc-x-api/test-legacy-data-support.js.map +1 -0
- package/test/icc-x-api/utils/crypto-utils-test.d.ts +1 -0
- package/test/icc-x-api/utils/crypto-utils-test.js +586 -0
- package/test/icc-x-api/utils/crypto-utils-test.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/support/CSM-185.d.ts +1 -0
- package/test/support/CSM-185.js +120 -0
- package/test/support/CSM-185.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 +111 -0
- package/test/support/CSM-93.js.map +1 -0
- package/test/utils/TestApi.d.ts +3 -0
- package/test/utils/TestApi.js +27 -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 +37 -0
- package/test/utils/TestCryptoStrategies.js +72 -0
- package/test/utils/TestCryptoStrategies.js.map +1 -0
- package/test/utils/TestStorage.d.ts +31 -0
- package/test/utils/TestStorage.js +88 -0
- package/test/utils/TestStorage.js.map +1 -0
- package/test/utils/test_utils.d.ts +60 -0
- package/test/utils/test_utils.js +313 -0
- package/test/utils/test_utils.js.map +1 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const graph_utils_1 = require("../../../icc-x-api/utils/graph-utils");
|
|
4
|
+
const chai_1 = require("chai");
|
|
5
|
+
const collection_utils_1 = require("../../../icc-x-api/utils/collection-utils");
|
|
6
|
+
function graphEquals(graphA, graphB) {
|
|
7
|
+
if (!(0, collection_utils_1.setEquals)(new Set(Object.keys(graphA)), new Set(Object.keys(graphA)))) {
|
|
8
|
+
return false;
|
|
9
|
+
}
|
|
10
|
+
return Object.keys(graphA).every((key) => (0, collection_utils_1.setEquals)(graphA[key], graphB[key]));
|
|
11
|
+
}
|
|
12
|
+
describe('Terminal nodes', function () {
|
|
13
|
+
it('should match expected', function () {
|
|
14
|
+
// Online representation of graph https://www.plantuml.com/plantuml/svg/LSux2e8n00FWFQVuHnLw1Ud3jlRHta7GJHsqtby9MPm-I234ljVbjJwFEtQ7_MRCSNDmrCi0JwCyoOAWFjA4H3CoZVACGgkSgBIX_TdHwS3G_bHkRy_hx-4N
|
|
15
|
+
const graph = (0, graph_utils_1.graphFromEdges)([
|
|
16
|
+
['A', 'B'],
|
|
17
|
+
['A', 'C'],
|
|
18
|
+
['B', 'D'],
|
|
19
|
+
['B', 'E'],
|
|
20
|
+
['B', 'I'],
|
|
21
|
+
['C', 'C'],
|
|
22
|
+
// NO D,
|
|
23
|
+
['E', 'F'],
|
|
24
|
+
['F', 'G'],
|
|
25
|
+
['G', 'E'],
|
|
26
|
+
['G', 'H'],
|
|
27
|
+
// NO H,
|
|
28
|
+
['I', 'J'],
|
|
29
|
+
['I', 'N'],
|
|
30
|
+
['J', 'K'],
|
|
31
|
+
['K', 'K'],
|
|
32
|
+
['K', 'L'],
|
|
33
|
+
['L', 'M'],
|
|
34
|
+
['M', 'I'],
|
|
35
|
+
['N', 'L'],
|
|
36
|
+
]);
|
|
37
|
+
const copy = Object.entries(graph).reduce((acc, [node, edges]) => {
|
|
38
|
+
acc[node] = new Set(Array.from(edges));
|
|
39
|
+
return acc;
|
|
40
|
+
}, {});
|
|
41
|
+
(0, chai_1.expect)(graphEquals(graph, copy)).to.be.true;
|
|
42
|
+
const terminals = Object.entries((0, graph_utils_1.reachSetsAcyclic)((0, graph_utils_1.acyclic)(graph).acyclicGraph))
|
|
43
|
+
.filter(([, v]) => v.size === 0)
|
|
44
|
+
.map(([k]) => k);
|
|
45
|
+
(0, chai_1.expect)(graphEquals(graph, copy)).to.be.true;
|
|
46
|
+
(0, chai_1.expect)(terminals).to.have.length(4);
|
|
47
|
+
(0, chai_1.expect)(terminals).to.contain('C');
|
|
48
|
+
(0, chai_1.expect)(terminals).to.contain('D');
|
|
49
|
+
(0, chai_1.expect)(terminals).to.contain('H');
|
|
50
|
+
const alternatives = new Set(['I', 'J', 'K', 'L', 'M', 'N']);
|
|
51
|
+
(0, chai_1.expect)(Array.from(terminals).filter((x) => alternatives.has(x))).to.have.length(1);
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
//# sourceMappingURL=graph-test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graph-test.js","sourceRoot":"","sources":["../../../../test/icc-x-api/utils/graph-test.ts"],"names":[],"mappings":"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","sourcesContent":["import { acyclic, Graph, graphFromEdges, reachSetsAcyclic } from '../../../icc-x-api/utils/graph-utils'\nimport { expect } from 'chai'\nimport { setEquals } from '../../../icc-x-api/utils/collection-utils'\n\nfunction graphEquals(graphA: Graph, graphB: Graph): boolean {\n if (!setEquals(new Set(Object.keys(graphA)), new Set(Object.keys(graphA)))) {\n return false\n }\n return Object.keys(graphA).every((key) => setEquals(graphA[key], graphB[key]))\n}\n\ndescribe('Terminal nodes', function () {\n it('should match expected', function () {\n // Online representation of graph https://www.plantuml.com/plantuml/svg/LSux2e8n00FWFQVuHnLw1Ud3jlRHta7GJHsqtby9MPm-I234ljVbjJwFEtQ7_MRCSNDmrCi0JwCyoOAWFjA4H3CoZVACGgkSgBIX_TdHwS3G_bHkRy_hx-4N\n const graph = graphFromEdges([\n ['A', 'B'],\n ['A', 'C'],\n ['B', 'D'],\n ['B', 'E'],\n ['B', 'I'],\n ['C', 'C'],\n // NO D,\n ['E', 'F'],\n ['F', 'G'],\n ['G', 'E'],\n ['G', 'H'],\n // NO H,\n ['I', 'J'],\n ['I', 'N'],\n ['J', 'K'],\n ['K', 'K'],\n ['K', 'L'],\n ['L', 'M'],\n ['M', 'I'],\n ['N', 'L'],\n ])\n const copy = Object.entries(graph).reduce<Graph>((acc, [node, edges]) => {\n acc[node] = new Set(Array.from(edges))\n return acc\n }, {})\n expect(graphEquals(graph, copy)).to.be.true\n const terminals = Object.entries(reachSetsAcyclic(acyclic(graph).acyclicGraph))\n .filter(([, v]) => v.size === 0)\n .map(([k]) => k)\n expect(graphEquals(graph, copy)).to.be.true\n expect(terminals).to.have.length(4)\n expect(terminals).to.contain('C')\n expect(terminals).to.contain('D')\n expect(terminals).to.contain('H')\n const alternatives = new Set(['I', 'J', 'K', 'L', 'M', 'N'])\n expect(Array.from(terminals).filter((x) => alternatives.has(x))).to.have.length(1)\n })\n})\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import 'isomorphic-fetch';
|
|
@@ -0,0 +1,120 @@
|
|
|
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 test_utils_1 = require("../utils/test_utils");
|
|
13
|
+
const icc_x_api_1 = require("../../icc-x-api");
|
|
14
|
+
const crypto_1 = require("crypto");
|
|
15
|
+
const chai_1 = require("chai");
|
|
16
|
+
require("isomorphic-fetch");
|
|
17
|
+
const MaintenanceTask_1 = require("../../icc-api/model/MaintenanceTask");
|
|
18
|
+
const Service_1 = require("../../icc-api/model/Service");
|
|
19
|
+
const types_1 = require("@icure/test-setup/types");
|
|
20
|
+
var initApi = test_utils_1.TestUtils.initApi;
|
|
21
|
+
const TestCryptoStrategies_1 = require("../utils/TestCryptoStrategies");
|
|
22
|
+
const TestStorage_1 = require("../utils/TestStorage");
|
|
23
|
+
const MaintenanceTaskByHcPartyAndTypeFilter_1 = require("../../icc-x-api/filters/MaintenanceTaskByHcPartyAndTypeFilter");
|
|
24
|
+
(0, test_utils_1.setLocalStorage)(fetch);
|
|
25
|
+
let env;
|
|
26
|
+
describe('CSM-185', function () {
|
|
27
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
28
|
+
before(function () {
|
|
29
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
30
|
+
this.timeout(600000);
|
|
31
|
+
const initializer = yield (0, test_utils_1.getEnvironmentInitializer)();
|
|
32
|
+
env = yield initializer.execute((0, types_1.getEnvVariables)());
|
|
33
|
+
});
|
|
34
|
+
});
|
|
35
|
+
it('An HCP should be able to listen to MaintenanceTask from a patient that lost their keys', function () {
|
|
36
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
37
|
+
const hcpApis = yield initApi(env, test_utils_1.hcp1Username);
|
|
38
|
+
const hcpUser = yield hcpApis.userApi.getCurrentUser();
|
|
39
|
+
const patApis = yield initApi(env, test_utils_1.patUsername);
|
|
40
|
+
const patUser = yield patApis.userApi.getCurrentUser();
|
|
41
|
+
const patientNote = 'Some secret note';
|
|
42
|
+
const p2 = yield hcpApis.patientApi.createPatientWithUser(hcpUser, yield hcpApis.patientApi.newInstance(hcpUser, {
|
|
43
|
+
firstName: 'John',
|
|
44
|
+
lastName: 'Doe',
|
|
45
|
+
note: patientNote,
|
|
46
|
+
}, { additionalDelegates: { [patUser.patientId]: 'WRITE' } }));
|
|
47
|
+
const heNote = 'Another secret note';
|
|
48
|
+
const he = yield patApis.healthcareElementApi.createHealthElementWithUser(patUser, yield patApis.healthcareElementApi.newInstance(patUser, p2, { note: heNote }, { additionalDelegates: { [hcpUser.healthcarePartyId]: 'WRITE' } }));
|
|
49
|
+
const ctcData = 'Some data';
|
|
50
|
+
const ctcDescr = 'Some description';
|
|
51
|
+
const ctc = yield hcpApis.contactApi.createContactWithUser(hcpUser, yield hcpApis.contactApi.newInstance(hcpUser, p2, {
|
|
52
|
+
services: [new Service_1.Service({ label: 'svc', content: { fr: { stringValue: ctcData } } })],
|
|
53
|
+
descr: ctcDescr,
|
|
54
|
+
}, { additionalDelegates: { [patUser.patientId]: 'WRITE' } }));
|
|
55
|
+
function checkContactDecrypted(ctc) {
|
|
56
|
+
var _a, _b, _c, _d;
|
|
57
|
+
(0, chai_1.expect)((_d = (_c = (_b = (_a = ctc.services) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.content) === null || _c === void 0 ? void 0 : _c.fr) === null || _d === void 0 ? void 0 : _d.stringValue).to.equal(ctcData);
|
|
58
|
+
(0, chai_1.expect)(ctc.descr).to.equal(ctcDescr);
|
|
59
|
+
}
|
|
60
|
+
function checkContactEncrypted(ctc) {
|
|
61
|
+
var _a, _b;
|
|
62
|
+
(0, chai_1.expect)((_a = ctc.services) === null || _a === void 0 ? void 0 : _a[0]).to.not.be.undefined;
|
|
63
|
+
(0, chai_1.expect)(Object.keys((_b = ctc.services[0].content) !== null && _b !== void 0 ? _b : {})).to.be.empty;
|
|
64
|
+
(0, chai_1.expect)(ctc.descr).to.be.undefined;
|
|
65
|
+
}
|
|
66
|
+
(0, chai_1.expect)((yield hcpApis.patientApi.getPatientWithUser(hcpUser, p2.id)).note).to.equal(patientNote);
|
|
67
|
+
(0, chai_1.expect)((yield patApis.patientApi.getPatientWithUser(patUser, p2.id)).note).to.equal(patientNote);
|
|
68
|
+
(0, chai_1.expect)((yield hcpApis.healthcareElementApi.getHealthElementWithUser(hcpUser, he.id)).note).to.equal(heNote);
|
|
69
|
+
(0, chai_1.expect)((yield patApis.healthcareElementApi.getHealthElementWithUser(patUser, he.id)).note).to.equal(heNote);
|
|
70
|
+
checkContactDecrypted(yield hcpApis.contactApi.getContactWithUser(hcpUser, ctc.id));
|
|
71
|
+
checkContactDecrypted(yield patApis.contactApi.getContactWithUser(patUser, ctc.id));
|
|
72
|
+
const events = [];
|
|
73
|
+
const statuses = [];
|
|
74
|
+
let eventReceivedPromiseResolve;
|
|
75
|
+
let eventReceivedPromiseReject;
|
|
76
|
+
const eventReceivedPromise = new Promise((res, rej) => {
|
|
77
|
+
eventReceivedPromiseResolve = res;
|
|
78
|
+
eventReceivedPromiseReject = rej;
|
|
79
|
+
});
|
|
80
|
+
const connection = yield hcpApis.maintenanceTaskApi.subscribeToMaintenanceTaskEvents(["CREATE"], new MaintenanceTaskByHcPartyAndTypeFilter_1.MaintenanceTaskByHcPartyAndTypeFilter({
|
|
81
|
+
healthcarePartyId: hcpUser.healthcarePartyId,
|
|
82
|
+
type: MaintenanceTask_1.MaintenanceTask.TaskTypeEnum.KeyPairUpdate,
|
|
83
|
+
}), (task) => __awaiter(this, void 0, void 0, function* () {
|
|
84
|
+
events.push(task);
|
|
85
|
+
eventReceivedPromiseResolve();
|
|
86
|
+
}), {
|
|
87
|
+
debug: true,
|
|
88
|
+
});
|
|
89
|
+
connection.onConnected(() => __awaiter(this, void 0, void 0, function* () {
|
|
90
|
+
statuses.push('connected');
|
|
91
|
+
yield (0, icc_x_api_1.sleep)(2000);
|
|
92
|
+
const newPair = yield patApis.cryptoApi.primitives.RSA.generateKeyPair();
|
|
93
|
+
const patApisLost = yield icc_x_api_1.IcureApi.initialise(env.iCureUrl, { username: env.dataOwnerDetails[test_utils_1.patUsername].user, password: env.dataOwnerDetails[test_utils_1.patUsername].password }, new TestCryptoStrategies_1.TestCryptoStrategies(newPair), crypto_1.webcrypto, fetch, {
|
|
94
|
+
createMaintenanceTasksOnNewKey: true,
|
|
95
|
+
storage: new TestStorage_1.TestStorage(),
|
|
96
|
+
keyStorage: new TestStorage_1.TestKeyStorage(),
|
|
97
|
+
});
|
|
98
|
+
const retrievedPatientLost = yield patApisLost.patientApi.getPatientWithUser(patUser, p2.id);
|
|
99
|
+
const retrievedHeLost = yield patApisLost.healthcareElementApi.getHealthElementWithUser(patUser, he.id);
|
|
100
|
+
(0, chai_1.expect)(retrievedPatientLost).to.not.be.undefined;
|
|
101
|
+
(0, chai_1.expect)(retrievedHeLost).to.not.be.undefined;
|
|
102
|
+
(0, chai_1.expect)(retrievedPatientLost.note).to.be.undefined;
|
|
103
|
+
(0, chai_1.expect)(retrievedHeLost.note).to.be.undefined;
|
|
104
|
+
yield (0, icc_x_api_1.sleep)(2000);
|
|
105
|
+
})).onClosed(() => __awaiter(this, void 0, void 0, function* () {
|
|
106
|
+
statuses.push('closed');
|
|
107
|
+
yield (0, icc_x_api_1.sleep)(2000);
|
|
108
|
+
}));
|
|
109
|
+
const timeout = setTimeout(eventReceivedPromiseReject, 20000);
|
|
110
|
+
yield eventReceivedPromise.then(() => clearTimeout(timeout)).catch(() => { });
|
|
111
|
+
connection.close();
|
|
112
|
+
yield (0, icc_x_api_1.sleep)(3000);
|
|
113
|
+
(0, chai_1.expect)(statuses).to.deep.equal(['connected', 'closed']);
|
|
114
|
+
(0, chai_1.expect)(events.length).to.be.equal(1);
|
|
115
|
+
(0, chai_1.expect)(events[0].taskType).to.equal(MaintenanceTask_1.MaintenanceTask.TaskTypeEnum.KeyPairUpdate);
|
|
116
|
+
});
|
|
117
|
+
}).timeout(60000);
|
|
118
|
+
});
|
|
119
|
+
});
|
|
120
|
+
//# sourceMappingURL=CSM-185.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CSM-185.js","sourceRoot":"","sources":["../../../test/support/CSM-185.ts"],"names":[],"mappings":"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","sourcesContent":["import { getEnvironmentInitializer, hcp1Username, patUsername, setLocalStorage, TestUtils } from '../utils/test_utils'\nimport {hex2ua, IcureApi, pkcs8ToJwk, sleep, ua2hex} from '../../icc-x-api'\nimport { webcrypto } from 'crypto'\nimport { expect } from 'chai'\nimport 'isomorphic-fetch'\nimport { FilterChainMaintenanceTask } from '../../icc-api/model/FilterChainMaintenanceTask'\nimport { MaintenanceTask } from '../../icc-api/model/MaintenanceTask'\nimport { MaintenanceTaskAfterDateFilter } from '../../icc-x-api/filters/MaintenanceTaskAfterDateFilter'\nimport { Service } from '../../icc-api/model/Service'\nimport { Contact } from '../../icc-api/model/Contact'\nimport { getEnvVariables, TestVars } from '@icure/test-setup/types'\nimport initApi = TestUtils.initApi\nimport { TestApi } from '../utils/TestApi'\nimport { TestCryptoStrategies } from '../utils/TestCryptoStrategies'\nimport { IccIcureMaintenanceXApi } from '../../icc-x-api/icc-icure-maintenance-x-api'\nimport { KeyPairUpdateRequest } from '../../icc-x-api/maintenance/KeyPairUpdateRequest'\nimport { TestKeyStorage, TestStorage } from '../utils/TestStorage'\nimport {MaintenanceTaskByHcPartyAndTypeFilter} from \"../../icc-x-api/filters/MaintenanceTaskByHcPartyAndTypeFilter\";\nimport {Connection} from \"../../icc-api/model/Connection\";\nsetLocalStorage(fetch)\n\nlet env: TestVars\n\ndescribe('CSM-185', async function () {\n before(async function () {\n this.timeout(600000)\n const initializer = await getEnvironmentInitializer()\n env = await initializer.execute(getEnvVariables())\n })\n\n it('An HCP should be able to listen to MaintenanceTask from a patient that lost their keys', async function () {\n const hcpApis = await initApi(env, hcp1Username)\n const hcpUser = await hcpApis.userApi.getCurrentUser()\n const patApis = await initApi(env, patUsername)\n const patUser = await patApis.userApi.getCurrentUser()\n const patientNote = 'Some secret note'\n const p2 = await hcpApis.patientApi.createPatientWithUser(\n hcpUser,\n await hcpApis.patientApi.newInstance(\n hcpUser,\n {\n firstName: 'John',\n lastName: 'Doe',\n note: patientNote,\n },\n { additionalDelegates: { [patUser.patientId!]: 'WRITE' } }\n )\n )\n const heNote = 'Another secret note'\n const he = await patApis.healthcareElementApi.createHealthElementWithUser(\n patUser,\n await patApis.healthcareElementApi.newInstance(\n patUser,\n p2,\n { note: heNote },\n { additionalDelegates: { [hcpUser.healthcarePartyId!]: 'WRITE' } }\n )\n )\n const ctcData = 'Some data'\n const ctcDescr = 'Some description'\n const ctc = await hcpApis.contactApi.createContactWithUser(\n hcpUser,\n await hcpApis.contactApi.newInstance(\n hcpUser,\n p2,\n {\n services: [new Service({ label: 'svc', content: { fr: { stringValue: ctcData } } })],\n descr: ctcDescr,\n },\n { additionalDelegates: { [patUser.patientId!]: 'WRITE' } }\n )\n )\n function checkContactDecrypted(ctc: Contact) {\n expect(ctc.services?.[0]?.content?.fr?.stringValue).to.equal(ctcData)\n expect(ctc.descr).to.equal(ctcDescr)\n }\n function checkContactEncrypted(ctc: Contact) {\n expect(ctc.services?.[0]).to.not.be.undefined\n expect(Object.keys(ctc.services![0].content ?? {})).to.be.empty\n expect(ctc.descr).to.be.undefined\n }\n expect((await hcpApis.patientApi.getPatientWithUser(hcpUser, p2.id!)).note).to.equal(patientNote)\n expect((await patApis.patientApi.getPatientWithUser(patUser, p2.id!)).note).to.equal(patientNote)\n expect((await hcpApis.healthcareElementApi.getHealthElementWithUser(hcpUser, he.id!)).note).to.equal(heNote)\n expect((await patApis.healthcareElementApi.getHealthElementWithUser(patUser, he.id!)).note).to.equal(heNote)\n checkContactDecrypted(await hcpApis.contactApi.getContactWithUser(hcpUser, ctc!.id!))\n checkContactDecrypted(await patApis.contactApi.getContactWithUser(patUser, ctc!.id!))\n\n const events: MaintenanceTask[] = []\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 const connection = await hcpApis.maintenanceTaskApi.subscribeToMaintenanceTaskEvents(\n [\"CREATE\"],\n new MaintenanceTaskByHcPartyAndTypeFilter({\n healthcarePartyId: hcpUser!.healthcarePartyId!,\n type: MaintenanceTask.TaskTypeEnum.KeyPairUpdate,\n }),\n async (task) => {\n events.push(task)\n eventReceivedPromiseResolve()\n },\n {\n debug: true,\n }\n )\n\n connection.onConnected(async () => {\n statuses.push('connected')\n await sleep(2_000)\n\n const newPair = await patApis.cryptoApi.primitives.RSA.generateKeyPair()\n const patApisLost = await IcureApi.initialise(\n env.iCureUrl,\n { username: env.dataOwnerDetails[patUsername].user, password: env.dataOwnerDetails[patUsername].password },\n new TestCryptoStrategies(newPair),\n webcrypto as any,\n fetch,\n {\n createMaintenanceTasksOnNewKey: true,\n storage: new TestStorage(),\n keyStorage: new TestKeyStorage(),\n }\n )\n const retrievedPatientLost = await patApisLost.patientApi.getPatientWithUser(patUser, p2.id!)\n const retrievedHeLost = await patApisLost.healthcareElementApi.getHealthElementWithUser(patUser, he.id!)\n expect(retrievedPatientLost).to.not.be.undefined\n expect(retrievedHeLost).to.not.be.undefined\n expect(retrievedPatientLost.note).to.be.undefined\n expect(retrievedHeLost.note).to.be.undefined\n\n await sleep(2_000)\n }).onClosed(async () => {\n statuses.push('closed')\n await sleep(2_000)\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 expect(statuses).to.deep.equal(['connected', 'closed'])\n expect(events.length).to.be.equal(1)\n expect(events[0].taskType).to.equal(MaintenanceTask.TaskTypeEnum.KeyPairUpdate)\n\n }).timeout(60_000)\n})\n"]}
|
|
File without changes
|
|
@@ -0,0 +1,21 @@
|
|
|
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
|
+
describe('CSM-87', function () {
|
|
12
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
13
|
+
it('An hcp should be able to load his key with `loadKeyPairsAsJwkInBrowserLocalStorage` and then create shamir partitions for himself', function () {
|
|
14
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
15
|
+
// This test does not apply to v7 or higher: it was a bug related to a specific method
|
|
16
|
+
this.skip();
|
|
17
|
+
});
|
|
18
|
+
});
|
|
19
|
+
});
|
|
20
|
+
});
|
|
21
|
+
//# sourceMappingURL=CSM-87.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CSM-87.js","sourceRoot":"","sources":["../../../test/support/CSM-87.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,QAAQ,CAAC,QAAQ,EAAE;;QACjB,EAAE,CAAC,mIAAmI,EAAE;;gBACtI,sFAAsF;gBACtF,IAAI,CAAC,IAAI,EAAE,CAAA;YACb,CAAC;SAAA,CAAC,CAAA;IACJ,CAAC;CAAA,CAAC,CAAA","sourcesContent":["describe('CSM-87', async function () {\n it('An hcp should be able to load his key with `loadKeyPairsAsJwkInBrowserLocalStorage` and then create shamir partitions for himself', async function () {\n // This test does not apply to v7 or higher: it was a bug related to a specific method\n this.skip()\n })\n})\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import 'isomorphic-fetch';
|
|
@@ -0,0 +1,111 @@
|
|
|
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 test_utils_1 = require("../utils/test_utils");
|
|
13
|
+
const icc_x_api_1 = require("../../icc-x-api");
|
|
14
|
+
const crypto_1 = require("crypto");
|
|
15
|
+
const chai_1 = require("chai");
|
|
16
|
+
require("isomorphic-fetch");
|
|
17
|
+
const FilterChainMaintenanceTask_1 = require("../../icc-api/model/FilterChainMaintenanceTask");
|
|
18
|
+
const MaintenanceTaskAfterDateFilter_1 = require("../../icc-x-api/filters/MaintenanceTaskAfterDateFilter");
|
|
19
|
+
const Service_1 = require("../../icc-api/model/Service");
|
|
20
|
+
const types_1 = require("@icure/test-setup/types");
|
|
21
|
+
var initApi = test_utils_1.TestUtils.initApi;
|
|
22
|
+
const TestCryptoStrategies_1 = require("../utils/TestCryptoStrategies");
|
|
23
|
+
const KeyPairUpdateRequest_1 = require("../../icc-x-api/maintenance/KeyPairUpdateRequest");
|
|
24
|
+
const TestStorage_1 = require("../utils/TestStorage");
|
|
25
|
+
(0, test_utils_1.setLocalStorage)(fetch);
|
|
26
|
+
let env;
|
|
27
|
+
describe('CSM-93', function () {
|
|
28
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
29
|
+
before(function () {
|
|
30
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
31
|
+
this.timeout(600000);
|
|
32
|
+
const initializer = yield (0, test_utils_1.getEnvironmentInitializer)();
|
|
33
|
+
env = yield initializer.execute((0, types_1.getEnvVariables)());
|
|
34
|
+
});
|
|
35
|
+
});
|
|
36
|
+
it('A patient should be able retrieve existing data after give access back', function () {
|
|
37
|
+
var _a;
|
|
38
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
39
|
+
const hcpApis = yield initApi(env, test_utils_1.hcp1Username);
|
|
40
|
+
const hcpUser = yield hcpApis.userApi.getCurrentUser();
|
|
41
|
+
const patApis = yield initApi(env, test_utils_1.patUsername);
|
|
42
|
+
const patUser = yield patApis.userApi.getCurrentUser();
|
|
43
|
+
const patientNote = 'Some secret note';
|
|
44
|
+
const p2 = yield hcpApis.patientApi.createPatientWithUser(hcpUser, yield hcpApis.patientApi.newInstance(hcpUser, {
|
|
45
|
+
firstName: 'John',
|
|
46
|
+
lastName: 'Doe',
|
|
47
|
+
note: patientNote,
|
|
48
|
+
}, { additionalDelegates: { [patUser.patientId]: 'WRITE' } }));
|
|
49
|
+
const heNote = 'Another secret note';
|
|
50
|
+
const he = yield patApis.healthcareElementApi.createHealthElementWithUser(patUser, yield patApis.healthcareElementApi.newInstance(patUser, p2, { note: heNote }, { additionalDelegates: { [hcpUser.healthcarePartyId]: 'WRITE' } }));
|
|
51
|
+
const ctcData = 'Some data';
|
|
52
|
+
const ctcDescr = 'Some description';
|
|
53
|
+
const ctc = yield hcpApis.contactApi.createContactWithUser(hcpUser, yield hcpApis.contactApi.newInstance(hcpUser, p2, {
|
|
54
|
+
services: [new Service_1.Service({ label: 'svc', content: { fr: { stringValue: ctcData } } })],
|
|
55
|
+
descr: ctcDescr,
|
|
56
|
+
}, { additionalDelegates: { [patUser.patientId]: 'WRITE' } }));
|
|
57
|
+
function checkContactDecrypted(ctc) {
|
|
58
|
+
var _a, _b, _c, _d;
|
|
59
|
+
(0, chai_1.expect)((_d = (_c = (_b = (_a = ctc.services) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.content) === null || _c === void 0 ? void 0 : _c.fr) === null || _d === void 0 ? void 0 : _d.stringValue).to.equal(ctcData);
|
|
60
|
+
(0, chai_1.expect)(ctc.descr).to.equal(ctcDescr);
|
|
61
|
+
}
|
|
62
|
+
function checkContactEncrypted(ctc) {
|
|
63
|
+
var _a, _b;
|
|
64
|
+
(0, chai_1.expect)((_a = ctc.services) === null || _a === void 0 ? void 0 : _a[0]).to.not.be.undefined;
|
|
65
|
+
(0, chai_1.expect)(Object.keys((_b = ctc.services[0].content) !== null && _b !== void 0 ? _b : {})).to.be.empty;
|
|
66
|
+
(0, chai_1.expect)(ctc.descr).to.be.undefined;
|
|
67
|
+
}
|
|
68
|
+
(0, chai_1.expect)((yield hcpApis.patientApi.getPatientWithUser(hcpUser, p2.id)).note).to.equal(patientNote);
|
|
69
|
+
(0, chai_1.expect)((yield patApis.patientApi.getPatientWithUser(patUser, p2.id)).note).to.equal(patientNote);
|
|
70
|
+
(0, chai_1.expect)((yield hcpApis.healthcareElementApi.getHealthElementWithUser(hcpUser, he.id)).note).to.equal(heNote);
|
|
71
|
+
(0, chai_1.expect)((yield patApis.healthcareElementApi.getHealthElementWithUser(patUser, he.id)).note).to.equal(heNote);
|
|
72
|
+
checkContactDecrypted(yield hcpApis.contactApi.getContactWithUser(hcpUser, ctc.id));
|
|
73
|
+
checkContactDecrypted(yield patApis.contactApi.getContactWithUser(patUser, ctc.id));
|
|
74
|
+
const startTimestamp = new Date().getTime();
|
|
75
|
+
const newPair = yield patApis.cryptoApi.primitives.RSA.generateKeyPair();
|
|
76
|
+
const patApisLost = yield icc_x_api_1.IcureApi.initialise(env.iCureUrl, { username: env.dataOwnerDetails[test_utils_1.patUsername].user, password: env.dataOwnerDetails[test_utils_1.patUsername].password }, new TestCryptoStrategies_1.TestCryptoStrategies(newPair), crypto_1.webcrypto, fetch, {
|
|
77
|
+
createMaintenanceTasksOnNewKey: true,
|
|
78
|
+
storage: new TestStorage_1.TestStorage(),
|
|
79
|
+
keyStorage: new TestStorage_1.TestKeyStorage(),
|
|
80
|
+
});
|
|
81
|
+
const retrievedPatientLost = yield patApisLost.patientApi.getPatientWithUser(patUser, p2.id);
|
|
82
|
+
const retrievedHeLost = yield patApisLost.healthcareElementApi.getHealthElementWithUser(patUser, he.id);
|
|
83
|
+
(0, chai_1.expect)(retrievedPatientLost).to.not.be.undefined;
|
|
84
|
+
(0, chai_1.expect)(retrievedHeLost).to.not.be.undefined;
|
|
85
|
+
(0, chai_1.expect)(retrievedPatientLost.note).to.be.undefined;
|
|
86
|
+
(0, chai_1.expect)(retrievedHeLost.note).to.be.undefined;
|
|
87
|
+
checkContactEncrypted(yield patApisLost.contactApi.getContactWithUser(patUser, ctc.id));
|
|
88
|
+
// The patient had to create a new aes exchange key to share the maintenance task with the hcp:
|
|
89
|
+
// If you don't clear the cache of the hcp he will not be able to decrypt the maintenance task
|
|
90
|
+
yield hcpApis.cryptoApi.forceReload();
|
|
91
|
+
const foundTasks = (_a = (yield hcpApis.maintenanceTaskApi.filterMaintenanceTasksByWithUser(hcpUser, undefined, undefined, new FilterChainMaintenanceTask_1.FilterChainMaintenanceTask({
|
|
92
|
+
filter: new MaintenanceTaskAfterDateFilter_1.MaintenanceTaskAfterDateFilter({
|
|
93
|
+
healthcarePartyId: hcpUser.healthcarePartyId,
|
|
94
|
+
date: startTimestamp - 1,
|
|
95
|
+
}),
|
|
96
|
+
}))).rows) !== null && _a !== void 0 ? _a : [];
|
|
97
|
+
(0, chai_1.expect)(foundTasks.length).to.equal(1);
|
|
98
|
+
const task = KeyPairUpdateRequest_1.KeyPairUpdateRequest.fromMaintenanceTask(foundTasks[0]);
|
|
99
|
+
(0, chai_1.expect)(task.concernedDataOwnerId).to.equal(patUser.patientId);
|
|
100
|
+
(0, chai_1.expect)(task.newPublicKey).to.equal((0, icc_x_api_1.ua2hex)(yield hcpApis.cryptoApi.primitives.RSA.exportKey(newPair.publicKey, 'spki')));
|
|
101
|
+
yield hcpApis.icureMaintenanceTaskApi.applyKeyPairUpdate(task);
|
|
102
|
+
// Clear the caches to ensure the user uses the latest version of the exchange keys with the 'give access back' data
|
|
103
|
+
yield patApisLost.cryptoApi.forceReload();
|
|
104
|
+
(0, chai_1.expect)((yield patApisLost.patientApi.getPatientWithUser(patUser, p2.id)).note).to.equal(patientNote);
|
|
105
|
+
(0, chai_1.expect)((yield patApisLost.healthcareElementApi.getHealthElementWithUser(patUser, he.id)).note).to.equal(heNote);
|
|
106
|
+
checkContactDecrypted(yield patApisLost.contactApi.getContactWithUser(patUser, ctc.id));
|
|
107
|
+
});
|
|
108
|
+
});
|
|
109
|
+
});
|
|
110
|
+
});
|
|
111
|
+
//# sourceMappingURL=CSM-93.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CSM-93.js","sourceRoot":"","sources":["../../../test/support/CSM-93.ts"],"names":[],"mappings":"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","sourcesContent":["import { getEnvironmentInitializer, hcp1Username, patUsername, setLocalStorage, TestUtils } from '../utils/test_utils'\nimport { hex2ua, IcureApi, pkcs8ToJwk, ua2hex } from '../../icc-x-api'\nimport { webcrypto } from 'crypto'\nimport { expect } from 'chai'\nimport 'isomorphic-fetch'\nimport { FilterChainMaintenanceTask } from '../../icc-api/model/FilterChainMaintenanceTask'\nimport { MaintenanceTask } from '../../icc-api/model/MaintenanceTask'\nimport { MaintenanceTaskAfterDateFilter } from '../../icc-x-api/filters/MaintenanceTaskAfterDateFilter'\nimport { Service } from '../../icc-api/model/Service'\nimport { Contact } from '../../icc-api/model/Contact'\nimport { getEnvVariables, TestVars } from '@icure/test-setup/types'\nimport initApi = TestUtils.initApi\nimport { TestApi } from '../utils/TestApi'\nimport { TestCryptoStrategies } from '../utils/TestCryptoStrategies'\nimport { IccIcureMaintenanceXApi } from '../../icc-x-api/icc-icure-maintenance-x-api'\nimport { KeyPairUpdateRequest } from '../../icc-x-api/maintenance/KeyPairUpdateRequest'\nimport { TestKeyStorage, TestStorage } from '../utils/TestStorage'\nsetLocalStorage(fetch)\n\nlet env: TestVars\n\ndescribe('CSM-93', async function () {\n before(async function () {\n this.timeout(600000)\n const initializer = await getEnvironmentInitializer()\n env = await initializer.execute(getEnvVariables())\n })\n\n it('A patient should be able retrieve existing data after give access back', async function () {\n const hcpApis = await initApi(env, hcp1Username)\n const hcpUser = await hcpApis.userApi.getCurrentUser()\n const patApis = await initApi(env, patUsername)\n const patUser = await patApis.userApi.getCurrentUser()\n const patientNote = 'Some secret note'\n const p2 = await hcpApis.patientApi.createPatientWithUser(\n hcpUser,\n await hcpApis.patientApi.newInstance(\n hcpUser,\n {\n firstName: 'John',\n lastName: 'Doe',\n note: patientNote,\n },\n { additionalDelegates: { [patUser.patientId!]: 'WRITE' } }\n )\n )\n const heNote = 'Another secret note'\n const he = await patApis.healthcareElementApi.createHealthElementWithUser(\n patUser,\n await patApis.healthcareElementApi.newInstance(\n patUser,\n p2,\n { note: heNote },\n { additionalDelegates: { [hcpUser.healthcarePartyId!]: 'WRITE' } }\n )\n )\n const ctcData = 'Some data'\n const ctcDescr = 'Some description'\n const ctc = await hcpApis.contactApi.createContactWithUser(\n hcpUser,\n await hcpApis.contactApi.newInstance(\n hcpUser,\n p2,\n {\n services: [new Service({ label: 'svc', content: { fr: { stringValue: ctcData } } })],\n descr: ctcDescr,\n },\n { additionalDelegates: { [patUser.patientId!]: 'WRITE' } }\n )\n )\n function checkContactDecrypted(ctc: Contact) {\n expect(ctc.services?.[0]?.content?.fr?.stringValue).to.equal(ctcData)\n expect(ctc.descr).to.equal(ctcDescr)\n }\n function checkContactEncrypted(ctc: Contact) {\n expect(ctc.services?.[0]).to.not.be.undefined\n expect(Object.keys(ctc.services![0].content ?? {})).to.be.empty\n expect(ctc.descr).to.be.undefined\n }\n expect((await hcpApis.patientApi.getPatientWithUser(hcpUser, p2.id!)).note).to.equal(patientNote)\n expect((await patApis.patientApi.getPatientWithUser(patUser, p2.id!)).note).to.equal(patientNote)\n expect((await hcpApis.healthcareElementApi.getHealthElementWithUser(hcpUser, he.id!)).note).to.equal(heNote)\n expect((await patApis.healthcareElementApi.getHealthElementWithUser(patUser, he.id!)).note).to.equal(heNote)\n checkContactDecrypted(await hcpApis.contactApi.getContactWithUser(hcpUser, ctc!.id!))\n checkContactDecrypted(await patApis.contactApi.getContactWithUser(patUser, ctc!.id!))\n const startTimestamp = new Date().getTime()\n const newPair = await patApis.cryptoApi.primitives.RSA.generateKeyPair()\n const patApisLost = await IcureApi.initialise(\n env.iCureUrl,\n { username: env.dataOwnerDetails[patUsername].user, password: env.dataOwnerDetails[patUsername].password },\n new TestCryptoStrategies(newPair),\n webcrypto as any,\n fetch,\n {\n createMaintenanceTasksOnNewKey: true,\n storage: new TestStorage(),\n keyStorage: new TestKeyStorage(),\n }\n )\n const retrievedPatientLost = await patApisLost.patientApi.getPatientWithUser(patUser, p2.id!)\n const retrievedHeLost = await patApisLost.healthcareElementApi.getHealthElementWithUser(patUser, he.id!)\n expect(retrievedPatientLost).to.not.be.undefined\n expect(retrievedHeLost).to.not.be.undefined\n expect(retrievedPatientLost.note).to.be.undefined\n expect(retrievedHeLost.note).to.be.undefined\n checkContactEncrypted(await patApisLost.contactApi.getContactWithUser(patUser, ctc!.id!))\n // The patient had to create a new aes exchange key to share the maintenance task with the hcp:\n // If you don't clear the cache of the hcp he will not be able to decrypt the maintenance task\n await hcpApis.cryptoApi.forceReload()\n const foundTasks =\n (\n await hcpApis.maintenanceTaskApi.filterMaintenanceTasksByWithUser(\n hcpUser,\n undefined,\n undefined,\n new FilterChainMaintenanceTask({\n filter: new MaintenanceTaskAfterDateFilter({\n healthcarePartyId: hcpUser.healthcarePartyId!,\n date: startTimestamp - 1,\n }),\n })\n )\n ).rows ?? []\n expect(foundTasks.length).to.equal(1)\n const task = KeyPairUpdateRequest.fromMaintenanceTask(foundTasks[0] as MaintenanceTask)\n expect(task.concernedDataOwnerId).to.equal(patUser.patientId)\n expect(task.newPublicKey).to.equal(ua2hex(await hcpApis.cryptoApi.primitives.RSA.exportKey(newPair.publicKey, 'spki')))\n await hcpApis.icureMaintenanceTaskApi.applyKeyPairUpdate(task)\n // Clear the caches to ensure the user uses the latest version of the exchange keys with the 'give access back' data\n await patApisLost.cryptoApi.forceReload()\n expect((await patApisLost.patientApi.getPatientWithUser(patUser, p2.id!)).note).to.equal(patientNote)\n expect((await patApisLost.healthcareElementApi.getHealthElementWithUser(patUser, he.id!)).note).to.equal(heNote)\n checkContactDecrypted(await patApisLost.contactApi.getContactWithUser(patUser, ctc!.id!))\n })\n})\n"]}
|
|
@@ -0,0 +1,27 @@
|
|
|
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
|
+
exports.TestApi = void 0;
|
|
13
|
+
const icc_x_api_1 = require("../../icc-x-api");
|
|
14
|
+
const RSA_1 = require("../../icc-x-api/crypto/RSA");
|
|
15
|
+
const TestStorage_1 = require("./TestStorage");
|
|
16
|
+
const TestCryptoStrategies_1 = require("./TestCryptoStrategies");
|
|
17
|
+
const TestApi = function (host, username, password, crypto = typeof window !== 'undefined' ? window.crypto : typeof self !== 'undefined' ? self.crypto : {}, keyPair) {
|
|
18
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
19
|
+
const initialisedKeys = keyPair !== null && keyPair !== void 0 ? keyPair : (yield new RSA_1.RSAUtils(crypto).generateKeyPair());
|
|
20
|
+
return icc_x_api_1.IcureApi.initialise(host, { username, password }, new TestCryptoStrategies_1.TestCryptoStrategies(initialisedKeys), crypto, typeof window !== 'undefined' ? window.fetch : typeof self !== 'undefined' ? self.fetch : fetch, {
|
|
21
|
+
storage: new TestStorage_1.TestStorage(),
|
|
22
|
+
keyStorage: new TestStorage_1.TestKeyStorage(),
|
|
23
|
+
});
|
|
24
|
+
});
|
|
25
|
+
};
|
|
26
|
+
exports.TestApi = TestApi;
|
|
27
|
+
//# sourceMappingURL=TestApi.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TestApi.js","sourceRoot":"","sources":["../../../test/utils/TestApi.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,+CAA0C;AAC1C,oDAA8D;AAC9D,+CAA2D;AAC3D,iEAA6D;AAEtD,MAAM,OAAO,GAAG,UACrB,IAAY,EACZ,QAAgB,EAChB,QAAgB,EAChB,SAAiB,OAAO,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAE,EAAa,EAC3H,OAA4B;;QAE5B,MAAM,eAAe,GAAG,OAAO,aAAP,OAAO,cAAP,OAAO,GAAI,CAAC,MAAM,IAAI,cAAQ,CAAC,MAAM,CAAC,CAAC,eAAe,EAAE,CAAC,CAAA;QACjF,OAAO,oBAAQ,CAAC,UAAU,CACxB,IAAI,EACJ,EAAE,QAAQ,EAAE,QAAQ,EAAE,EACtB,IAAI,2CAAoB,CAAC,eAAe,CAAC,EACzC,MAAM,EACN,OAAO,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,EAC/F;YACE,OAAO,EAAE,IAAI,yBAAW,EAAE;YAC1B,UAAU,EAAE,IAAI,4BAAc,EAAE;SACjC,CACF,CAAA;IACH,CAAC;CAAA,CAAA;AAnBY,QAAA,OAAO,WAmBnB","sourcesContent":["import { IcureApi } from '../../icc-x-api'\nimport { KeyPair, RSAUtils } from '../../icc-x-api/crypto/RSA'\nimport { TestKeyStorage, TestStorage } from './TestStorage'\nimport { TestCryptoStrategies } from './TestCryptoStrategies'\n\nexport const TestApi = async function (\n host: string,\n username: string,\n password: string,\n crypto: Crypto = typeof window !== 'undefined' ? window.crypto : typeof self !== 'undefined' ? self.crypto : ({} as Crypto),\n keyPair?: KeyPair<CryptoKey>\n): Promise<IcureApi> {\n const initialisedKeys = keyPair ?? (await new RSAUtils(crypto).generateKeyPair())\n return IcureApi.initialise(\n host,\n { username, password },\n new TestCryptoStrategies(initialisedKeys),\n crypto,\n typeof window !== 'undefined' ? window.fetch : typeof self !== 'undefined' ? self.fetch : fetch,\n {\n storage: new TestStorage(),\n keyStorage: new TestKeyStorage(),\n }\n )\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const chai_1 = require("chai");
|
|
4
|
+
const collection_utils_1 = require("../../icc-x-api/utils/collection-utils");
|
|
5
|
+
describe('setEquals', () => {
|
|
6
|
+
it('should return true for two empty sets', () => {
|
|
7
|
+
(0, chai_1.expect)((0, collection_utils_1.setEquals)(new Set(), new Set())).to.be.true;
|
|
8
|
+
});
|
|
9
|
+
it('should return true for two sets with the same elements', () => {
|
|
10
|
+
const setA = new Set([1, 2, 3]);
|
|
11
|
+
const setB = new Set([3, 1, 2]);
|
|
12
|
+
(0, chai_1.expect)((0, collection_utils_1.setEquals)(setA, setB)).to.be.true;
|
|
13
|
+
});
|
|
14
|
+
it('should return false for sets with different elements', () => {
|
|
15
|
+
const setA = new Set([1, 2, 3]);
|
|
16
|
+
const setB = new Set([4, 5, 6]);
|
|
17
|
+
(0, chai_1.expect)((0, collection_utils_1.setEquals)(setA, setB)).to.be.false;
|
|
18
|
+
});
|
|
19
|
+
it('should return false for sets of different sizes', () => {
|
|
20
|
+
const setA = new Set([1, 2, 3]);
|
|
21
|
+
const setB = new Set([1, 2]);
|
|
22
|
+
(0, chai_1.expect)((0, collection_utils_1.setEquals)(setA, setB)).to.be.false;
|
|
23
|
+
});
|
|
24
|
+
});
|
|
25
|
+
describe('objectEquals', () => {
|
|
26
|
+
it('should return true for two empty objects', () => {
|
|
27
|
+
(0, chai_1.expect)((0, collection_utils_1.objectEquals)({}, {})).to.be.true;
|
|
28
|
+
});
|
|
29
|
+
it('should return true for identical objects', () => {
|
|
30
|
+
const objA = { a: 1, b: 2 };
|
|
31
|
+
const objB = { a: 1, b: 2 };
|
|
32
|
+
(0, chai_1.expect)((0, collection_utils_1.objectEquals)(objA, objB)).to.be.true;
|
|
33
|
+
});
|
|
34
|
+
it('should return false for objects with different properties', () => {
|
|
35
|
+
const objA = { a: 1, b: 2 };
|
|
36
|
+
const objB = { a: 1, c: 3 };
|
|
37
|
+
(0, chai_1.expect)((0, collection_utils_1.objectEquals)(objA, objB)).to.be.false;
|
|
38
|
+
});
|
|
39
|
+
it('should return true for objects with nested identical objects', () => {
|
|
40
|
+
const objA = { a: 1, b: { c: 3, d: 4 } };
|
|
41
|
+
const objB = { a: 1, b: { c: 3, d: 4 } };
|
|
42
|
+
(0, chai_1.expect)((0, collection_utils_1.objectEquals)(objA, objB)).to.be.true;
|
|
43
|
+
});
|
|
44
|
+
it('should return false for objects with nested different objects', () => {
|
|
45
|
+
const objA = { a: 1, b: { c: 3, d: 4 } };
|
|
46
|
+
const objB = { a: 1, b: { c: 3, d: 5 } };
|
|
47
|
+
(0, chai_1.expect)((0, collection_utils_1.objectEquals)(objA, objB)).to.be.false;
|
|
48
|
+
});
|
|
49
|
+
it('should return true for objects with identical arrays', () => {
|
|
50
|
+
const objA = { a: 1, b: [1, 2, 3] };
|
|
51
|
+
const objB = { a: 1, b: [1, 2, 3] };
|
|
52
|
+
(0, chai_1.expect)((0, collection_utils_1.objectEquals)(objA, objB)).to.be.true;
|
|
53
|
+
});
|
|
54
|
+
it('should return false for objects with different arrays', () => {
|
|
55
|
+
const objA = { a: 1, b: [1, 2, 3] };
|
|
56
|
+
const objB = { a: 1, b: [1, 2, 4] };
|
|
57
|
+
(0, chai_1.expect)((0, collection_utils_1.objectEquals)(objA, objB)).to.be.false;
|
|
58
|
+
});
|
|
59
|
+
it('should return true for deeply nested objects', () => {
|
|
60
|
+
const objA = { a: 1, b: { c: { d: 4, e: 5 } } };
|
|
61
|
+
const objB = { a: 1, b: { c: { d: 4, e: 5 } } };
|
|
62
|
+
(0, chai_1.expect)((0, collection_utils_1.objectEquals)(objA, objB)).to.be.true;
|
|
63
|
+
});
|
|
64
|
+
it('should respect ignoredProperties', () => {
|
|
65
|
+
const objA = { a: 1, b: 2, c: 3 };
|
|
66
|
+
const objB = { a: 1, b: 2, d: 4 };
|
|
67
|
+
(0, chai_1.expect)((0, collection_utils_1.objectEquals)(objA, objB, ['c', 'd'])).to.be.true;
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
describe('arrayEquals', () => {
|
|
71
|
+
it('should return true for two empty arrays', () => {
|
|
72
|
+
(0, chai_1.expect)((0, collection_utils_1.arrayEquals)([], [])).to.be.true;
|
|
73
|
+
});
|
|
74
|
+
it('should return true for two identical arrays of primitives', () => {
|
|
75
|
+
(0, chai_1.expect)((0, collection_utils_1.arrayEquals)(["1", 2, 3], ["1", 2, 3])).to.be.true;
|
|
76
|
+
});
|
|
77
|
+
it('should return false for two different arrays of primitives', () => {
|
|
78
|
+
(0, chai_1.expect)((0, collection_utils_1.arrayEquals)(["1", 2, 3], [1, 2, 3])).to.be.false;
|
|
79
|
+
});
|
|
80
|
+
it('should return false for arrays of different primitives', () => {
|
|
81
|
+
(0, chai_1.expect)((0, collection_utils_1.arrayEquals)([1, 2, 3], [1, 2, 4])).to.be.false;
|
|
82
|
+
});
|
|
83
|
+
it('should return true for nested arrays with the same elements', () => {
|
|
84
|
+
(0, chai_1.expect)((0, collection_utils_1.arrayEquals)([1, [2, 3], 4], [1, [2, 3], 4])).to.be.true;
|
|
85
|
+
});
|
|
86
|
+
it('should return false for nested arrays with different elements', () => {
|
|
87
|
+
(0, chai_1.expect)((0, collection_utils_1.arrayEquals)([1, [2, 3], 4], [1, [2, 4], 4])).to.be.false;
|
|
88
|
+
});
|
|
89
|
+
it('should return true for arrays with identical objects', () => {
|
|
90
|
+
const objA = { a: 1, b: 2 };
|
|
91
|
+
const objB = { a: 1, b: 2 };
|
|
92
|
+
(0, chai_1.expect)((0, collection_utils_1.arrayEquals)([objA], [objB])).to.be.true;
|
|
93
|
+
});
|
|
94
|
+
it('should return false for arrays with different objects', () => {
|
|
95
|
+
const objA = { a: 1, b: 2 };
|
|
96
|
+
const objB = { a: 1, c: 3 };
|
|
97
|
+
(0, chai_1.expect)((0, collection_utils_1.arrayEquals)([objA], [objB])).to.be.false;
|
|
98
|
+
});
|
|
99
|
+
it('should return true for arrays with deeply nested structures', () => {
|
|
100
|
+
const nestedArray = [1, { a: [2, 3, { b: 4 }] }, 5];
|
|
101
|
+
(0, chai_1.expect)((0, collection_utils_1.arrayEquals)(nestedArray, nestedArray)).to.be.true;
|
|
102
|
+
});
|
|
103
|
+
it('should return false for arrays with differently nested structures', () => {
|
|
104
|
+
const nestedArray1 = [1, { a: [2, 3, { b: 4 }] }, 5];
|
|
105
|
+
const nestedArray2 = [1, { a: [2, 3, { b: 5 }] }, 5];
|
|
106
|
+
(0, chai_1.expect)((0, collection_utils_1.arrayEquals)(nestedArray1, nestedArray2)).to.be.false;
|
|
107
|
+
});
|
|
108
|
+
});
|
|
109
|
+
//# sourceMappingURL=TestCollectionUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TestCollectionUtils.js","sourceRoot":"","sources":["../../../test/utils/TestCollectionUtils.ts"],"names":[],"mappings":"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","sourcesContent":["import {expect} from 'chai'\nimport {arrayEquals, objectEquals, setEquals} from \"../../icc-x-api/utils/collection-utils\"\n\ndescribe('setEquals', () => {\n it('should return true for two empty sets', () => {\n expect(setEquals(new Set(), new Set())).to.be.true\n })\n\n it('should return true for two sets with the same elements', () => {\n const setA = new Set([1, 2, 3])\n const setB = new Set([3, 1, 2])\n expect(setEquals(setA, setB)).to.be.true\n })\n\n it('should return false for sets with different elements', () => {\n const setA = new Set([1, 2, 3])\n const setB = new Set([4, 5, 6])\n expect(setEquals(setA, setB)).to.be.false\n })\n\n it('should return false for sets of different sizes', () => {\n const setA = new Set([1, 2, 3])\n const setB = new Set([1, 2])\n expect(setEquals(setA, setB)).to.be.false\n })\n})\n\ndescribe('objectEquals', () => {\n it('should return true for two empty objects', () => {\n expect(objectEquals({}, {})).to.be.true\n })\n\n it('should return true for identical objects', () => {\n const objA = {a: 1, b: 2}\n const objB = {a: 1, b: 2}\n expect(objectEquals(objA, objB)).to.be.true\n })\n\n it('should return false for objects with different properties', () => {\n const objA: any = {a: 1, b: 2}\n const objB: any = {a: 1, c: 3}\n expect(objectEquals(objA, objB)).to.be.false\n })\n\n it('should return true for objects with nested identical objects', () => {\n const objA = {a: 1, b: {c: 3, d: 4}}\n const objB = {a: 1, b: {c: 3, d: 4}}\n expect(objectEquals(objA, objB)).to.be.true\n })\n\n it('should return false for objects with nested different objects', () => {\n const objA = {a: 1, b: {c: 3, d: 4}}\n const objB = {a: 1, b: {c: 3, d: 5}}\n expect(objectEquals(objA, objB)).to.be.false\n })\n\n it('should return true for objects with identical arrays', () => {\n const objA = {a: 1, b: [1, 2, 3]}\n const objB = {a: 1, b: [1, 2, 3]}\n expect(objectEquals(objA, objB)).to.be.true\n })\n\n it('should return false for objects with different arrays', () => {\n const objA = {a: 1, b: [1, 2, 3]}\n const objB = {a: 1, b: [1, 2, 4]}\n expect(objectEquals(objA, objB)).to.be.false\n })\n\n it('should return true for deeply nested objects', () => {\n const objA = {a: 1, b: {c: {d: 4, e: 5}}}\n const objB = {a: 1, b: {c: {d: 4, e: 5}}}\n expect(objectEquals(objA, objB)).to.be.true\n })\n\n it('should respect ignoredProperties', () => {\n const objA: any = {a: 1, b: 2, c: 3}\n const objB: any = {a: 1, b: 2, d: 4}\n expect(objectEquals(objA, objB, ['c', 'd'])).to.be.true\n })\n})\n\ndescribe('arrayEquals', () => {\n it('should return true for two empty arrays', () => {\n expect(arrayEquals([], [])).to.be.true\n })\n\n it('should return true for two identical arrays of primitives', () => {\n expect(arrayEquals([\"1\", 2, 3], [\"1\", 2, 3])).to.be.true\n })\n\n it('should return false for two different arrays of primitives', () => {\n expect(arrayEquals([\"1\", 2, 3], [1, 2, 3])).to.be.false\n })\n\n it('should return false for arrays of different primitives', () => {\n expect(arrayEquals([1, 2, 3], [1, 2, 4])).to.be.false\n })\n\n it('should return true for nested arrays with the same elements', () => {\n expect(arrayEquals([1, [2, 3], 4], [1, [2, 3], 4])).to.be.true\n })\n\n it('should return false for nested arrays with different elements', () => {\n expect(arrayEquals([1, [2, 3], 4], [1, [2, 4], 4])).to.be.false\n })\n\n it('should return true for arrays with identical objects', () => {\n const objA = {a: 1, b: 2}\n const objB = {a: 1, b: 2}\n expect(arrayEquals([objA], [objB])).to.be.true\n })\n\n it('should return false for arrays with different objects', () => {\n const objA: any = {a: 1, b: 2}\n const objB: any = {a: 1, c: 3}\n expect(arrayEquals([objA], [objB])).to.be.false\n })\n\n it('should return true for arrays with deeply nested structures', () => {\n const nestedArray = [1, {a: [2, 3, {b: 4}]}, 5]\n expect(arrayEquals(nestedArray, nestedArray)).to.be.true\n })\n\n it('should return false for arrays with differently nested structures', () => {\n const nestedArray1 = [1, {a: [2, 3, {b: 4}]}, 5]\n const nestedArray2 = [1, {a: [2, 3, {b: 5}]}, 5]\n expect(arrayEquals(nestedArray1, nestedArray2)).to.be.false\n })\n})\n"]}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { CryptoStrategies } from '../../icc-x-api/crypto/CryptoStrategies';
|
|
2
|
+
import { KeyPair } from '../../icc-x-api/crypto/RSA';
|
|
3
|
+
import { CryptoPrimitives } from '../../icc-x-api';
|
|
4
|
+
import { DataOwnerWithType } from '../../icc-api/model/DataOwnerWithType';
|
|
5
|
+
import { CryptoActorStubWithType } from '../../icc-api/model/CryptoActorStub';
|
|
6
|
+
export declare class TestCryptoStrategies implements CryptoStrategies {
|
|
7
|
+
private readonly recoveredParentKeys;
|
|
8
|
+
private readonly keyPair;
|
|
9
|
+
private readonly verifiedSelfKeys;
|
|
10
|
+
private readonly RSA;
|
|
11
|
+
recoverAndVerifyCallsParams: Array<{
|
|
12
|
+
dataOwner: DataOwnerWithType;
|
|
13
|
+
unknownKeys: string[];
|
|
14
|
+
unavailableKeys: string[];
|
|
15
|
+
}[]>;
|
|
16
|
+
constructor(keyPair?: KeyPair<CryptoKey>, verifiedSelfKeys?: {
|
|
17
|
+
[p: string]: boolean;
|
|
18
|
+
}, recoveredParentKeys?: {
|
|
19
|
+
[parentId: string]: KeyPair<string>;
|
|
20
|
+
});
|
|
21
|
+
generateNewKeyForDataOwner(self: DataOwnerWithType): Promise<KeyPair<CryptoKey> | boolean>;
|
|
22
|
+
recoverAndVerifySelfHierarchyKeys(keysData: {
|
|
23
|
+
dataOwner: DataOwnerWithType;
|
|
24
|
+
unknownKeys: string[];
|
|
25
|
+
unavailableKeys: string[];
|
|
26
|
+
}[], cryptoPrimitives: CryptoPrimitives): Promise<{
|
|
27
|
+
[p: string]: {
|
|
28
|
+
recoveredKeys: {
|
|
29
|
+
[p: string]: KeyPair<CryptoKey>;
|
|
30
|
+
};
|
|
31
|
+
keyAuthenticity: {
|
|
32
|
+
[p: string]: boolean;
|
|
33
|
+
};
|
|
34
|
+
};
|
|
35
|
+
}>;
|
|
36
|
+
verifyDelegatePublicKeys(delegate: CryptoActorStubWithType, publicKeys: string[]): Promise<string[]>;
|
|
37
|
+
}
|