@icure/api 8.10.2 → 8.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/icc-api/api/IccPatientApi.d.ts +1 -1
- package/icc-api/api/IccPatientApi.js +4 -2
- package/icc-api/api/IccPatientApi.js.map +1 -1
- package/icc-x-api/crypto/ExtendedApisUtilsImpl.d.ts +11 -0
- package/icc-x-api/crypto/ExtendedApisUtilsImpl.js +75 -13
- package/icc-x-api/crypto/ExtendedApisUtilsImpl.js.map +1 -1
- package/icc-x-api/crypto/SecurityMetadataDecryptor.d.ts +14 -0
- package/icc-x-api/crypto/SecurityMetadataDecryptor.js +28 -0
- package/icc-x-api/crypto/SecurityMetadataDecryptor.js.map +1 -1
- package/icc-x-api/icc-patient-x-api.d.ts +4 -1
- package/icc-x-api/icc-patient-x-api.js +5 -2
- package/icc-x-api/icc-patient-x-api.js.map +1 -1
- package/package.json +1 -1
- package/test/benchmarks/lzma-benchmark.spec.d.ts +1 -0
- package/test/benchmarks/lzma-benchmark.spec.js +131 -0
- package/test/benchmarks/lzma-benchmark.spec.js.map +1 -0
- package/test/benchmarks/lzma-compat.spec.d.ts +1 -0
- package/test/benchmarks/lzma-compat.spec.js +187 -0
- package/test/benchmarks/lzma-compat.spec.js.map +1 -0
- package/test/benchmarks/playwright.config.d.ts +2 -0
- package/test/benchmarks/playwright.config.js +18 -0
- package/test/benchmarks/playwright.config.js.map +1 -0
- package/test/icc-api/api/IccAgendaApi.d.ts +1 -0
- package/test/icc-api/api/IccAgendaApi.js +64 -0
- package/test/icc-api/api/IccAgendaApi.js.map +1 -0
- 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/IccCalendarItemApi.d.ts +1 -0
- package/test/icc-api/api/IccCalendarItemApi.js +67 -0
- package/test/icc-api/api/IccCalendarItemApi.js.map +1 -0
- package/test/icc-api/api/IccCalendarItemTypeApi.d.ts +1 -0
- package/test/icc-api/api/IccCalendarItemTypeApi.js +96 -0
- package/test/icc-api/api/IccCalendarItemTypeApi.js.map +1 -0
- package/test/icc-api/api/IccCodeApi.d.ts +1 -0
- package/test/icc-api/api/IccCodeApi.js +38 -0
- package/test/icc-api/api/IccCodeApi.js.map +1 -0
- package/test/icc-api/api/IccDocumentApi.d.ts +1 -0
- package/test/icc-api/api/IccDocumentApi.js +199 -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/IccKeywordApi.d.ts +1 -0
- package/test/icc-api/api/IccKeywordApi.js +64 -0
- package/test/icc-api/api/IccKeywordApi.js.map +1 -0
- package/test/icc-api/api/IccMedicalLocationApi.d.ts +1 -0
- package/test/icc-api/api/IccMedicalLocationApi.js +64 -0
- package/test/icc-api/api/IccMedicalLocationApi.js.map +1 -0
- package/test/icc-api/api/IccPlaceApi.d.ts +1 -0
- package/test/icc-api/api/IccPlaceApi.js +64 -0
- package/test/icc-api/api/IccPlaceApi.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 +112 -0
- package/test/icc-x-api/auth/jwt-concurrency-test.js.map +1 -0
- package/test/icc-x-api/auth/jwt-provider-test.d.ts +1 -0
- package/test/icc-x-api/auth/jwt-provider-test.js +197 -0
- package/test/icc-x-api/auth/jwt-provider-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 +122 -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 +168 -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 +407 -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 +587 -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 +79 -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 +402 -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 +674 -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 +454 -0
- package/test/icc-x-api/crypto/full-crypto-test.js.map +1 -0
- package/test/icc-x-api/crypto/legacy-metadata-migration-test.d.ts +1 -0
- package/test/icc-x-api/crypto/legacy-metadata-migration-test.js +379 -0
- package/test/icc-x-api/crypto/legacy-metadata-migration-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 +278 -0
- package/test/icc-x-api/crypto/secure-delegations-manager-test.js.map +1 -0
- package/test/icc-x-api/crypto/shamir.d.ts +2 -0
- package/test/icc-x-api/crypto/shamir.js +167 -0
- package/test/icc-x-api/crypto/shamir.js.map +1 -0
- package/test/icc-x-api/crypto/share-deduplication-test.d.ts +1 -0
- package/test/icc-x-api/crypto/share-deduplication-test.js +250 -0
- package/test/icc-x-api/crypto/share-deduplication-test.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/soft-deleted-data-owners.d.ts +2 -0
- package/test/icc-x-api/crypto/soft-deleted-data-owners.js +113 -0
- package/test/icc-x-api/crypto/soft-deleted-data-owners.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/filters/healthelement.d.ts +1 -0
- package/test/icc-x-api/filters/healthelement.js +333 -0
- package/test/icc-x-api/filters/healthelement.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-application-settings-x-api.d.ts +1 -0
- package/test/icc-x-api/icc-application-settings-x-api.js +91 -0
- package/test/icc-x-api/icc-application-settings-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-code-x-api-test.d.ts +1 -0
- package/test/icc-x-api/icc-code-x-api-test.js +74 -0
- package/test/icc-x-api/icc-code-x-api-test.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 +355 -0
- package/test/icc-x-api/icc-contact-x-api.js.map +1 -0
- package/test/icc-x-api/icc-document-x-api.d.ts +1 -0
- package/test/icc-x-api/icc-document-x-api.js +76 -0
- package/test/icc-x-api/icc-document-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 +413 -0
- package/test/icc-x-api/icc-form-x-api.js.map +1 -0
- package/test/icc-x-api/icc-hcparty-x-api-test.d.ts +1 -0
- package/test/icc-x-api/icc-hcparty-x-api-test.js +43 -0
- package/test/icc-x-api/icc-hcparty-x-api-test.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 +155 -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 +222 -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 +54 -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 +209 -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 +175 -0
- package/test/icc-x-api/icc-recovery-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/keyless-api.d.ts +1 -0
- package/test/icc-x-api/keyless-api.js +125 -0
- package/test/icc-x-api/keyless-api.js.map +1 -0
- package/test/icc-x-api/patient-user.d.ts +2 -0
- package/test/icc-x-api/patient-user.js +103 -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 +375 -0
- package/test/icc-x-api/test-legacy-data-support.js.map +1 -0
- package/test/icc-x-api/utils/date-encode-test.d.ts +1 -0
- package/test/icc-x-api/utils/date-encode-test.js +150 -0
- package/test/icc-x-api/utils/date-encode-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/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/icc-x-api/utils/lzma-benchmark-test.d.ts +1 -0
- package/test/icc-x-api/utils/lzma-benchmark-test.js +132 -0
- package/test/icc-x-api/utils/lzma-benchmark-test.js.map +1 -0
- package/test/icc-x-api/utils/lzma-compat-test.d.ts +1 -0
- package/test/icc-x-api/utils/lzma-compat-test.js +218 -0
- package/test/icc-x-api/utils/lzma-compat-test.js.map +1 -0
- package/test/icc-x-api/utils/mutex-test.d.ts +1 -0
- package/test/icc-x-api/utils/mutex-test.js +114 -0
- package/test/icc-x-api/utils/mutex-test.js.map +1 -0
- package/test/icc-x-api/utils/to-moment-test.d.ts +1 -0
- package/test/icc-x-api/utils/to-moment-test.js +110 -0
- package/test/icc-x-api/utils/to-moment-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-543.d.ts +1 -0
- package/test/support/CSM-543.js +164 -0
- package/test/support/CSM-543.js.map +1 -0
- package/test/support/CSM-729.d.ts +1 -0
- package/test/support/CSM-729.js +225 -0
- package/test/support/CSM-729.js.map +1 -0
- package/test/support/CSM-814.d.ts +1 -0
- package/test/support/CSM-814.js +475 -0
- package/test/support/CSM-814.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 +36 -0
- package/test/utils/FakeEncryptionKeysManager.js +97 -0
- package/test/utils/FakeEncryptionKeysManager.js.map +1 -0
- package/test/utils/FakeExchangeDataApi.d.ts +32 -0
- package/test/utils/FakeExchangeDataApi.js +92 -0
- package/test/utils/FakeExchangeDataApi.js.map +1 -0
- package/test/utils/FakeExchangeDataManager.d.ts +48 -0
- package/test/utils/FakeExchangeDataManager.js +82 -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/KeylessCryptoStrategies.d.ts +23 -0
- package/test/utils/KeylessCryptoStrategies.js +26 -0
- package/test/utils/KeylessCryptoStrategies.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 +310 -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/roles.d.ts +14 -0
- package/test/utils/roles.js +345 -0
- package/test/utils/roles.js.map +1 -0
- package/test/utils/test_utils.d.ts +87 -0
- package/test/utils/test_utils.js +452 -0
- package/test/utils/test_utils.js.map +1 -0
|
@@ -0,0 +1,30 @@
|
|
|
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 TestStorage_1 = require("./TestStorage");
|
|
15
|
+
const TestCryptoStrategies_1 = require("./TestCryptoStrategies");
|
|
16
|
+
require("isomorphic-fetch");
|
|
17
|
+
const TestApi = function (host_1, username_1, password_1) {
|
|
18
|
+
return __awaiter(this, arguments, void 0, function* (host, username, password, crypto = typeof window !== 'undefined' ? window.crypto : typeof self !== 'undefined' ? self.crypto : {}, keyPair, options = {}) {
|
|
19
|
+
const initialisedKeys = keyPair !== null && keyPair !== void 0 ? keyPair : (yield new icc_x_api_1.RSAUtilsImpl(crypto).generateKeyPair(icc_x_api_1.ShaVersion.Sha256));
|
|
20
|
+
return icc_x_api_1.IcureApi.initialise(host, {
|
|
21
|
+
username,
|
|
22
|
+
password,
|
|
23
|
+
}, new TestCryptoStrategies_1.TestCryptoStrategies(initialisedKeys), crypto, typeof window !== 'undefined' ? window.fetch : typeof self !== 'undefined' ? self.fetch : fetch, Object.assign({
|
|
24
|
+
storage: new TestStorage_1.TestStorage(),
|
|
25
|
+
keyStorage: new TestStorage_1.TestKeyStorage(),
|
|
26
|
+
}, options));
|
|
27
|
+
});
|
|
28
|
+
};
|
|
29
|
+
exports.TestApi = TestApi;
|
|
30
|
+
//# sourceMappingURL=TestApi.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TestApi.js","sourceRoot":"","sources":["../../../test/utils/TestApi.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,+CAAwG;AACxG,+CAA2D;AAC3D,iEAA6D;AAC7D,4BAAyB;AAElB,MAAM,OAAO,GAAG;yDACrB,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,EAC5B,UAA2B,EAAE;QAE7B,MAAM,eAAe,GAAG,OAAO,aAAP,OAAO,cAAP,OAAO,GAAI,CAAC,MAAM,IAAI,wBAAY,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,sBAAU,CAAC,MAAM,CAAC,CAAC,CAAA;QACtG,OAAO,oBAAQ,CAAC,UAAU,CACxB,IAAI,EACJ;YACE,QAAQ;YACR,QAAQ;SACT,EACD,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,gBAE1F;YACD,OAAO,EAAE,IAAI,yBAAW,EAAE;YAC1B,UAAU,EAAE,IAAI,4BAAc,EAAE;SACjC,EACE,OAAO,EAEb,CAAA;IACH,CAAC;CAAA,CAAA;AA1BY,QAAA,OAAO,WA0BnB","sourcesContent":["import { IcureApi, IcureApiOptions, KeyPair, RSAUtils, RSAUtilsImpl, ShaVersion } from '../../icc-x-api'\nimport { TestKeyStorage, TestStorage } from './TestStorage'\nimport { TestCryptoStrategies } from './TestCryptoStrategies'\nimport 'isomorphic-fetch'\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 options: IcureApiOptions = {}\n): Promise<IcureApi> {\n const initialisedKeys = keyPair ?? (await new RSAUtilsImpl(crypto).generateKeyPair(ShaVersion.Sha256))\n return IcureApi.initialise(\n host,\n {\n username,\n password,\n },\n new TestCryptoStrategies(initialisedKeys),\n crypto,\n typeof window !== 'undefined' ? window.fetch : typeof self !== 'undefined' ? self.fetch : fetch,\n {\n ...{\n storage: new TestStorage(),\n keyStorage: new TestKeyStorage(),\n },\n ...options,\n }\n )\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,310 @@
|
|
|
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
|
+
describe('cloneDeep', () => {
|
|
110
|
+
describe('primitives', () => {
|
|
111
|
+
it('should return primitives unchanged', () => {
|
|
112
|
+
(0, chai_1.expect)((0, collection_utils_1.cloneDeep)(42)).to.equal(42);
|
|
113
|
+
(0, chai_1.expect)((0, collection_utils_1.cloneDeep)('hello')).to.equal('hello');
|
|
114
|
+
(0, chai_1.expect)((0, collection_utils_1.cloneDeep)(true)).to.equal(true);
|
|
115
|
+
(0, chai_1.expect)((0, collection_utils_1.cloneDeep)(null)).to.equal(null);
|
|
116
|
+
(0, chai_1.expect)((0, collection_utils_1.cloneDeep)(undefined)).to.equal(undefined);
|
|
117
|
+
});
|
|
118
|
+
it('should preserve NaN, Infinity and -0', () => {
|
|
119
|
+
(0, chai_1.expect)(Number.isNaN((0, collection_utils_1.cloneDeep)(NaN))).to.be.true;
|
|
120
|
+
(0, chai_1.expect)((0, collection_utils_1.cloneDeep)(Infinity)).to.equal(Infinity);
|
|
121
|
+
(0, chai_1.expect)(Object.is((0, collection_utils_1.cloneDeep)(-0), -0)).to.be.true;
|
|
122
|
+
});
|
|
123
|
+
it('should clone bigint and symbol values by reference', () => {
|
|
124
|
+
const big = BigInt(9007199254740993);
|
|
125
|
+
(0, chai_1.expect)((0, collection_utils_1.cloneDeep)(big)).to.equal(big);
|
|
126
|
+
const sym = Symbol('s');
|
|
127
|
+
(0, chai_1.expect)((0, collection_utils_1.cloneDeep)(sym)).to.equal(sym);
|
|
128
|
+
});
|
|
129
|
+
});
|
|
130
|
+
describe('plain objects and arrays', () => {
|
|
131
|
+
it('should deep clone a plain object', () => {
|
|
132
|
+
const original = { a: 1, b: { c: 2, d: [3, 4] } };
|
|
133
|
+
const clone = (0, collection_utils_1.cloneDeep)(original);
|
|
134
|
+
(0, chai_1.expect)(clone).to.deep.equal(original);
|
|
135
|
+
(0, chai_1.expect)(clone).to.not.equal(original);
|
|
136
|
+
(0, chai_1.expect)(clone.b).to.not.equal(original.b);
|
|
137
|
+
(0, chai_1.expect)(clone.b.d).to.not.equal(original.b.d);
|
|
138
|
+
});
|
|
139
|
+
it('should not affect the original when mutating a nested clone', () => {
|
|
140
|
+
const original = { a: 1, b: { c: 2 }, list: [1, 2, 3] };
|
|
141
|
+
const clone = (0, collection_utils_1.cloneDeep)(original);
|
|
142
|
+
clone.b.c = 99;
|
|
143
|
+
clone.list.push(4);
|
|
144
|
+
(0, chai_1.expect)(original.b.c).to.equal(2);
|
|
145
|
+
(0, chai_1.expect)(original.list).to.deep.equal([1, 2, 3]);
|
|
146
|
+
});
|
|
147
|
+
it('should deep clone arrays including nested objects', () => {
|
|
148
|
+
const original = [1, { a: 2 }, [3, 4]];
|
|
149
|
+
const clone = (0, collection_utils_1.cloneDeep)(original);
|
|
150
|
+
(0, chai_1.expect)(clone).to.deep.equal(original);
|
|
151
|
+
(0, chai_1.expect)(clone).to.not.equal(original);
|
|
152
|
+
(0, chai_1.expect)(clone[1]).to.not.equal(original[1]);
|
|
153
|
+
(0, chai_1.expect)(clone[2]).to.not.equal(original[2]);
|
|
154
|
+
});
|
|
155
|
+
it('should preserve the prototype of class instances', () => {
|
|
156
|
+
class Foo {
|
|
157
|
+
constructor(value) {
|
|
158
|
+
this.value = value;
|
|
159
|
+
}
|
|
160
|
+
double() {
|
|
161
|
+
return this.value * 2;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
const original = new Foo(21);
|
|
165
|
+
const clone = (0, collection_utils_1.cloneDeep)(original);
|
|
166
|
+
(0, chai_1.expect)(clone).to.be.instanceOf(Foo);
|
|
167
|
+
(0, chai_1.expect)(clone.double()).to.equal(42);
|
|
168
|
+
(0, chai_1.expect)(clone).to.not.equal(original);
|
|
169
|
+
});
|
|
170
|
+
it('should preserve undefined-valued own keys', () => {
|
|
171
|
+
const original = { a: undefined, b: 1 };
|
|
172
|
+
const clone = (0, collection_utils_1.cloneDeep)(original);
|
|
173
|
+
(0, chai_1.expect)(Object.keys(clone)).to.have.members(['a', 'b']);
|
|
174
|
+
(0, chai_1.expect)(clone.a).to.be.undefined;
|
|
175
|
+
});
|
|
176
|
+
});
|
|
177
|
+
describe('Date and RegExp', () => {
|
|
178
|
+
it('should clone a Date to a distinct instance with the same time', () => {
|
|
179
|
+
const original = new Date(1600000000000);
|
|
180
|
+
const clone = (0, collection_utils_1.cloneDeep)(original);
|
|
181
|
+
(0, chai_1.expect)(clone).to.be.instanceOf(Date);
|
|
182
|
+
(0, chai_1.expect)(clone).to.not.equal(original);
|
|
183
|
+
(0, chai_1.expect)(clone.getTime()).to.equal(original.getTime());
|
|
184
|
+
});
|
|
185
|
+
it('should clone a RegExp preserving source and flags', () => {
|
|
186
|
+
const original = /ab+c/gi;
|
|
187
|
+
const clone = (0, collection_utils_1.cloneDeep)(original);
|
|
188
|
+
(0, chai_1.expect)(clone).to.be.instanceOf(RegExp);
|
|
189
|
+
(0, chai_1.expect)(clone).to.not.equal(original);
|
|
190
|
+
(0, chai_1.expect)(clone.source).to.equal(original.source);
|
|
191
|
+
(0, chai_1.expect)(clone.flags).to.equal(original.flags);
|
|
192
|
+
});
|
|
193
|
+
});
|
|
194
|
+
describe('Set and Map', () => {
|
|
195
|
+
it('should deep clone a Set', () => {
|
|
196
|
+
const inner = { a: 1 };
|
|
197
|
+
const original = new Set([1, 'two', inner]);
|
|
198
|
+
const clone = (0, collection_utils_1.cloneDeep)(original);
|
|
199
|
+
(0, chai_1.expect)(clone).to.be.instanceOf(Set);
|
|
200
|
+
(0, chai_1.expect)(clone).to.not.equal(original);
|
|
201
|
+
(0, chai_1.expect)(clone.size).to.equal(3);
|
|
202
|
+
(0, chai_1.expect)(clone.has(1)).to.be.true;
|
|
203
|
+
(0, chai_1.expect)(clone.has('two')).to.be.true;
|
|
204
|
+
const clonedInner = [...clone].find((v) => typeof v === 'object');
|
|
205
|
+
(0, chai_1.expect)(clonedInner).to.deep.equal(inner);
|
|
206
|
+
(0, chai_1.expect)(clonedInner).to.not.equal(inner);
|
|
207
|
+
});
|
|
208
|
+
it('should deep clone a Map including object keys and values', () => {
|
|
209
|
+
const keyObj = { k: 1 };
|
|
210
|
+
const valObj = { v: 2 };
|
|
211
|
+
const original = new Map([
|
|
212
|
+
['a', valObj],
|
|
213
|
+
[keyObj, 3],
|
|
214
|
+
]);
|
|
215
|
+
const clone = (0, collection_utils_1.cloneDeep)(original);
|
|
216
|
+
(0, chai_1.expect)(clone).to.be.instanceOf(Map);
|
|
217
|
+
(0, chai_1.expect)(clone).to.not.equal(original);
|
|
218
|
+
(0, chai_1.expect)(clone.size).to.equal(2);
|
|
219
|
+
const clonedVal = clone.get('a');
|
|
220
|
+
(0, chai_1.expect)(clonedVal).to.deep.equal(valObj);
|
|
221
|
+
(0, chai_1.expect)(clonedVal).to.not.equal(valObj);
|
|
222
|
+
const clonedKey = [...clone.keys()].find((k) => typeof k === 'object');
|
|
223
|
+
(0, chai_1.expect)(clonedKey).to.deep.equal(keyObj);
|
|
224
|
+
(0, chai_1.expect)(clonedKey).to.not.equal(keyObj);
|
|
225
|
+
});
|
|
226
|
+
});
|
|
227
|
+
describe('ArrayBuffer and typed arrays', () => {
|
|
228
|
+
it('should clone a raw ArrayBuffer into a distinct buffer with the same bytes', () => {
|
|
229
|
+
const original = new ArrayBuffer(8);
|
|
230
|
+
new Uint8Array(original).set([1, 2, 3, 4, 5, 6, 7, 8]);
|
|
231
|
+
const clone = (0, collection_utils_1.cloneDeep)(original);
|
|
232
|
+
(0, chai_1.expect)(clone).to.be.instanceOf(ArrayBuffer);
|
|
233
|
+
(0, chai_1.expect)(clone).to.not.equal(original);
|
|
234
|
+
(0, chai_1.expect)(clone.byteLength).to.equal(8);
|
|
235
|
+
(0, chai_1.expect)([...new Uint8Array(clone)]).to.deep.equal([1, 2, 3, 4, 5, 6, 7, 8]);
|
|
236
|
+
// Mutating the clone must not affect the original
|
|
237
|
+
new Uint8Array(clone)[0] = 99;
|
|
238
|
+
(0, chai_1.expect)(new Uint8Array(original)[0]).to.equal(1);
|
|
239
|
+
});
|
|
240
|
+
it('should clone a Uint8Array into a distinct, independent view', () => {
|
|
241
|
+
const original = new Uint8Array([10, 20, 30, 40]);
|
|
242
|
+
const clone = (0, collection_utils_1.cloneDeep)(original);
|
|
243
|
+
(0, chai_1.expect)(clone).to.be.instanceOf(Uint8Array);
|
|
244
|
+
(0, chai_1.expect)(clone).to.not.equal(original);
|
|
245
|
+
(0, chai_1.expect)([...clone]).to.deep.equal([10, 20, 30, 40]);
|
|
246
|
+
clone[0] = 255;
|
|
247
|
+
(0, chai_1.expect)(original[0]).to.equal(10);
|
|
248
|
+
});
|
|
249
|
+
it('should not alias the underlying buffer of a cloned typed array', () => {
|
|
250
|
+
const original = new Uint8Array([1, 2, 3]);
|
|
251
|
+
const clone = (0, collection_utils_1.cloneDeep)(original);
|
|
252
|
+
(0, chai_1.expect)(clone.buffer).to.not.equal(original.buffer);
|
|
253
|
+
});
|
|
254
|
+
it('should clone other typed array types preserving element type', () => {
|
|
255
|
+
const original = new Float64Array([1.5, 2.5, 3.5]);
|
|
256
|
+
const clone = (0, collection_utils_1.cloneDeep)(original);
|
|
257
|
+
(0, chai_1.expect)(clone).to.be.instanceOf(Float64Array);
|
|
258
|
+
(0, chai_1.expect)([...clone]).to.deep.equal([1.5, 2.5, 3.5]);
|
|
259
|
+
(0, chai_1.expect)(clone).to.not.equal(original);
|
|
260
|
+
});
|
|
261
|
+
it('should clone a typed array that is a partial view of a larger buffer', () => {
|
|
262
|
+
const buffer = new ArrayBuffer(8);
|
|
263
|
+
new Uint8Array(buffer).set([0, 1, 2, 3, 4, 5, 6, 7]);
|
|
264
|
+
const view = new Uint8Array(buffer, 2, 3); // bytes [2, 3, 4]
|
|
265
|
+
const clone = (0, collection_utils_1.cloneDeep)(view);
|
|
266
|
+
(0, chai_1.expect)(clone).to.be.instanceOf(Uint8Array);
|
|
267
|
+
(0, chai_1.expect)([...clone]).to.deep.equal([2, 3, 4]);
|
|
268
|
+
clone[0] = 200;
|
|
269
|
+
(0, chai_1.expect)(new Uint8Array(buffer)[2]).to.equal(2);
|
|
270
|
+
});
|
|
271
|
+
it('should clone a DataView into an independent view', () => {
|
|
272
|
+
const buffer = new ArrayBuffer(4);
|
|
273
|
+
const original = new DataView(buffer);
|
|
274
|
+
original.setUint32(0, 0xdeadbeef);
|
|
275
|
+
const clone = (0, collection_utils_1.cloneDeep)(original);
|
|
276
|
+
(0, chai_1.expect)(clone).to.be.instanceOf(DataView);
|
|
277
|
+
(0, chai_1.expect)(clone).to.not.equal(original);
|
|
278
|
+
(0, chai_1.expect)(clone.getUint32(0)).to.equal(0xdeadbeef);
|
|
279
|
+
clone.setUint32(0, 0);
|
|
280
|
+
(0, chai_1.expect)(original.getUint32(0)).to.equal(0xdeadbeef);
|
|
281
|
+
});
|
|
282
|
+
it('should clone a Node Buffer without sharing memory', () => {
|
|
283
|
+
const original = Buffer.from([1, 2, 3, 4]);
|
|
284
|
+
const clone = (0, collection_utils_1.cloneDeep)(original);
|
|
285
|
+
(0, chai_1.expect)(Buffer.isBuffer(clone)).to.be.true;
|
|
286
|
+
(0, chai_1.expect)(clone).to.not.equal(original);
|
|
287
|
+
(0, chai_1.expect)([...clone]).to.deep.equal([1, 2, 3, 4]);
|
|
288
|
+
clone[0] = 99;
|
|
289
|
+
(0, chai_1.expect)(original[0]).to.equal(1);
|
|
290
|
+
});
|
|
291
|
+
it('should deep clone an ArrayBuffer nested inside an object without aliasing', () => {
|
|
292
|
+
const picture = new Uint8Array([9, 8, 7, 6]).buffer;
|
|
293
|
+
const original = { id: 'x', picture };
|
|
294
|
+
const clone = (0, collection_utils_1.cloneDeep)(original);
|
|
295
|
+
(0, chai_1.expect)(clone.picture).to.not.equal(original.picture);
|
|
296
|
+
(0, chai_1.expect)([...new Uint8Array(clone.picture)]).to.deep.equal([9, 8, 7, 6]);
|
|
297
|
+
new Uint8Array(clone.picture)[0] = 0;
|
|
298
|
+
(0, chai_1.expect)(new Uint8Array(original.picture)[0]).to.equal(9);
|
|
299
|
+
});
|
|
300
|
+
});
|
|
301
|
+
describe('non-cloneable values', () => {
|
|
302
|
+
it('should copy functions by reference', () => {
|
|
303
|
+
const fn = () => 42;
|
|
304
|
+
const original = { fn };
|
|
305
|
+
const clone = (0, collection_utils_1.cloneDeep)(original);
|
|
306
|
+
(0, chai_1.expect)(clone.fn).to.equal(original.fn);
|
|
307
|
+
});
|
|
308
|
+
});
|
|
309
|
+
});
|
|
310
|
+
//# 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, cloneDeep, 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\ndescribe('cloneDeep', () => {\n describe('primitives', () => {\n it('should return primitives unchanged', () => {\n expect(cloneDeep(42)).to.equal(42)\n expect(cloneDeep('hello')).to.equal('hello')\n expect(cloneDeep(true)).to.equal(true)\n expect(cloneDeep(null)).to.equal(null)\n expect(cloneDeep(undefined)).to.equal(undefined)\n })\n\n it('should preserve NaN, Infinity and -0', () => {\n expect(Number.isNaN(cloneDeep(NaN))).to.be.true\n expect(cloneDeep(Infinity)).to.equal(Infinity)\n expect(Object.is(cloneDeep(-0), -0)).to.be.true\n })\n\n it('should clone bigint and symbol values by reference', () => {\n const big = BigInt(9007199254740993)\n expect(cloneDeep(big)).to.equal(big)\n const sym = Symbol('s')\n expect(cloneDeep(sym)).to.equal(sym)\n })\n })\n\n describe('plain objects and arrays', () => {\n it('should deep clone a plain object', () => {\n const original = { a: 1, b: { c: 2, d: [3, 4] } }\n const clone = cloneDeep(original)\n expect(clone).to.deep.equal(original)\n expect(clone).to.not.equal(original)\n expect(clone.b).to.not.equal(original.b)\n expect(clone.b.d).to.not.equal(original.b.d)\n })\n\n it('should not affect the original when mutating a nested clone', () => {\n const original = { a: 1, b: { c: 2 }, list: [1, 2, 3] }\n const clone = cloneDeep(original)\n clone.b.c = 99\n clone.list.push(4)\n expect(original.b.c).to.equal(2)\n expect(original.list).to.deep.equal([1, 2, 3])\n })\n\n it('should deep clone arrays including nested objects', () => {\n const original = [1, { a: 2 }, [3, 4]]\n const clone = cloneDeep(original)\n expect(clone).to.deep.equal(original)\n expect(clone).to.not.equal(original)\n expect(clone[1]).to.not.equal(original[1])\n expect(clone[2]).to.not.equal(original[2])\n })\n\n it('should preserve the prototype of class instances', () => {\n class Foo {\n constructor(public value: number) {}\n double() {\n return this.value * 2\n }\n }\n const original = new Foo(21)\n const clone = cloneDeep(original)\n expect(clone).to.be.instanceOf(Foo)\n expect(clone.double()).to.equal(42)\n expect(clone).to.not.equal(original)\n })\n\n it('should preserve undefined-valued own keys', () => {\n const original = { a: undefined, b: 1 }\n const clone = cloneDeep(original)\n expect(Object.keys(clone)).to.have.members(['a', 'b'])\n expect(clone.a).to.be.undefined\n })\n })\n\n describe('Date and RegExp', () => {\n it('should clone a Date to a distinct instance with the same time', () => {\n const original = new Date(1600000000000)\n const clone = cloneDeep(original)\n expect(clone).to.be.instanceOf(Date)\n expect(clone).to.not.equal(original)\n expect(clone.getTime()).to.equal(original.getTime())\n })\n\n it('should clone a RegExp preserving source and flags', () => {\n const original = /ab+c/gi\n const clone = cloneDeep(original)\n expect(clone).to.be.instanceOf(RegExp)\n expect(clone).to.not.equal(original)\n expect(clone.source).to.equal(original.source)\n expect(clone.flags).to.equal(original.flags)\n })\n })\n\n describe('Set and Map', () => {\n it('should deep clone a Set', () => {\n const inner = { a: 1 }\n const original = new Set<any>([1, 'two', inner])\n const clone = cloneDeep(original)\n expect(clone).to.be.instanceOf(Set)\n expect(clone).to.not.equal(original)\n expect(clone.size).to.equal(3)\n expect(clone.has(1)).to.be.true\n expect(clone.has('two')).to.be.true\n const clonedInner = [...clone].find((v) => typeof v === 'object')\n expect(clonedInner).to.deep.equal(inner)\n expect(clonedInner).to.not.equal(inner)\n })\n\n it('should deep clone a Map including object keys and values', () => {\n const keyObj = { k: 1 }\n const valObj = { v: 2 }\n const original = new Map<any, any>([\n ['a', valObj],\n [keyObj, 3],\n ])\n const clone = cloneDeep(original)\n expect(clone).to.be.instanceOf(Map)\n expect(clone).to.not.equal(original)\n expect(clone.size).to.equal(2)\n const clonedVal = clone.get('a')\n expect(clonedVal).to.deep.equal(valObj)\n expect(clonedVal).to.not.equal(valObj)\n const clonedKey = [...clone.keys()].find((k) => typeof k === 'object')\n expect(clonedKey).to.deep.equal(keyObj)\n expect(clonedKey).to.not.equal(keyObj)\n })\n })\n\n describe('ArrayBuffer and typed arrays', () => {\n it('should clone a raw ArrayBuffer into a distinct buffer with the same bytes', () => {\n const original = new ArrayBuffer(8)\n new Uint8Array(original).set([1, 2, 3, 4, 5, 6, 7, 8])\n const clone = cloneDeep(original)\n expect(clone).to.be.instanceOf(ArrayBuffer)\n expect(clone).to.not.equal(original)\n expect(clone.byteLength).to.equal(8)\n expect([...new Uint8Array(clone)]).to.deep.equal([1, 2, 3, 4, 5, 6, 7, 8])\n // Mutating the clone must not affect the original\n new Uint8Array(clone)[0] = 99\n expect(new Uint8Array(original)[0]).to.equal(1)\n })\n\n it('should clone a Uint8Array into a distinct, independent view', () => {\n const original = new Uint8Array([10, 20, 30, 40])\n const clone = cloneDeep(original)\n expect(clone).to.be.instanceOf(Uint8Array)\n expect(clone).to.not.equal(original)\n expect([...clone]).to.deep.equal([10, 20, 30, 40])\n clone[0] = 255\n expect(original[0]).to.equal(10)\n })\n\n it('should not alias the underlying buffer of a cloned typed array', () => {\n const original = new Uint8Array([1, 2, 3])\n const clone = cloneDeep(original)\n expect(clone.buffer).to.not.equal(original.buffer)\n })\n\n it('should clone other typed array types preserving element type', () => {\n const original = new Float64Array([1.5, 2.5, 3.5])\n const clone = cloneDeep(original)\n expect(clone).to.be.instanceOf(Float64Array)\n expect([...clone]).to.deep.equal([1.5, 2.5, 3.5])\n expect(clone).to.not.equal(original)\n })\n\n it('should clone a typed array that is a partial view of a larger buffer', () => {\n const buffer = new ArrayBuffer(8)\n new Uint8Array(buffer).set([0, 1, 2, 3, 4, 5, 6, 7])\n const view = new Uint8Array(buffer, 2, 3) // bytes [2, 3, 4]\n const clone = cloneDeep(view)\n expect(clone).to.be.instanceOf(Uint8Array)\n expect([...clone]).to.deep.equal([2, 3, 4])\n clone[0] = 200\n expect(new Uint8Array(buffer)[2]).to.equal(2)\n })\n\n it('should clone a DataView into an independent view', () => {\n const buffer = new ArrayBuffer(4)\n const original = new DataView(buffer)\n original.setUint32(0, 0xdeadbeef)\n const clone = cloneDeep(original)\n expect(clone).to.be.instanceOf(DataView)\n expect(clone).to.not.equal(original)\n expect(clone.getUint32(0)).to.equal(0xdeadbeef)\n clone.setUint32(0, 0)\n expect(original.getUint32(0)).to.equal(0xdeadbeef)\n })\n\n it('should clone a Node Buffer without sharing memory', () => {\n const original = Buffer.from([1, 2, 3, 4])\n const clone = cloneDeep(original)\n expect(Buffer.isBuffer(clone)).to.be.true\n expect(clone).to.not.equal(original)\n expect([...clone]).to.deep.equal([1, 2, 3, 4])\n clone[0] = 99\n expect(original[0]).to.equal(1)\n })\n\n it('should deep clone an ArrayBuffer nested inside an object without aliasing', () => {\n const picture = new Uint8Array([9, 8, 7, 6]).buffer\n const original = { id: 'x', picture }\n const clone = cloneDeep(original)\n expect(clone.picture).to.not.equal(original.picture)\n expect([...new Uint8Array(clone.picture)]).to.deep.equal([9, 8, 7, 6])\n new Uint8Array(clone.picture)[0] = 0\n expect(new Uint8Array(original.picture)[0]).to.equal(9)\n })\n })\n\n describe('non-cloneable values', () => {\n it('should copy functions by reference', () => {\n const fn = () => 42\n const original = { fn }\n const clone = cloneDeep(original)\n expect(clone.fn).to.equal(original.fn)\n })\n })\n})\n"]}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { CryptoStrategies } from '../../icc-x-api/crypto/CryptoStrategies';
|
|
2
|
+
import { KeyPair, ShaVersion } from '../../icc-x-api/crypto/RSA';
|
|
3
|
+
import { CryptoPrimitives } from '../../icc-x-api';
|
|
4
|
+
import { CryptoActorStubWithType } from '../../icc-api/model/CryptoActorStub';
|
|
5
|
+
import { DataOwnerWithType } from '../../icc-api/model/DataOwnerWithType';
|
|
6
|
+
export declare class TestCryptoStrategies implements CryptoStrategies {
|
|
7
|
+
private readonly keyPair?;
|
|
8
|
+
private readonly verifiedSelfKeys;
|
|
9
|
+
private readonly limitVerifiedDelegatesKeys?;
|
|
10
|
+
private readonly recoveredParentKeys;
|
|
11
|
+
private readonly RSA;
|
|
12
|
+
recoverAndVerifyCallsParams: Array<{
|
|
13
|
+
dataOwner: DataOwnerWithType;
|
|
14
|
+
unknownKeys: string[];
|
|
15
|
+
unavailableKeys: string[];
|
|
16
|
+
}[]>;
|
|
17
|
+
constructor(keyPair?: KeyPair<CryptoKey> | undefined, verifiedSelfKeys?: {
|
|
18
|
+
[p: string]: boolean;
|
|
19
|
+
}, limitVerifiedDelegatesKeys?: Set<string> | undefined, recoveredParentKeys?: {
|
|
20
|
+
[parentId: string]: {
|
|
21
|
+
pair: KeyPair<string>;
|
|
22
|
+
shaVersion: ShaVersion;
|
|
23
|
+
};
|
|
24
|
+
});
|
|
25
|
+
generateNewKeyForDataOwner(self: DataOwnerWithType): Promise<KeyPair<CryptoKey> | boolean>;
|
|
26
|
+
recoverAndVerifySelfHierarchyKeys(keysData: {
|
|
27
|
+
dataOwner: DataOwnerWithType;
|
|
28
|
+
unknownKeys: string[];
|
|
29
|
+
unavailableKeys: string[];
|
|
30
|
+
}[], cryptoPrimitives: CryptoPrimitives): Promise<{
|
|
31
|
+
[p: string]: {
|
|
32
|
+
recoveredKeys: {
|
|
33
|
+
[p: string]: KeyPair<CryptoKey>;
|
|
34
|
+
};
|
|
35
|
+
keyAuthenticity: {
|
|
36
|
+
[p: string]: boolean;
|
|
37
|
+
};
|
|
38
|
+
};
|
|
39
|
+
}>;
|
|
40
|
+
verifyDelegatePublicKeys(delegate: CryptoActorStubWithType, publicKeys: string[]): Promise<string[]>;
|
|
41
|
+
dataOwnerRequiresAnonymousDelegation(dataOwner: CryptoActorStubWithType): boolean;
|
|
42
|
+
}
|
|
@@ -0,0 +1,80 @@
|
|
|
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.TestCryptoStrategies = void 0;
|
|
13
|
+
const RSA_1 = require("../../icc-x-api/crypto/RSA");
|
|
14
|
+
const utils_1 = require("../../icc-x-api/crypto/utils");
|
|
15
|
+
const crypto_1 = require("crypto");
|
|
16
|
+
const icc_x_api_1 = require("../../icc-x-api");
|
|
17
|
+
class TestCryptoStrategies {
|
|
18
|
+
constructor(keyPair, verifiedSelfKeys = {}, limitVerifiedDelegatesKeys, recoveredParentKeys = {}) {
|
|
19
|
+
this.keyPair = keyPair;
|
|
20
|
+
this.verifiedSelfKeys = verifiedSelfKeys;
|
|
21
|
+
this.limitVerifiedDelegatesKeys = limitVerifiedDelegatesKeys;
|
|
22
|
+
this.recoveredParentKeys = recoveredParentKeys;
|
|
23
|
+
this.RSA = new RSA_1.RSAUtilsImpl(crypto_1.webcrypto);
|
|
24
|
+
this.recoverAndVerifyCallsParams = [];
|
|
25
|
+
}
|
|
26
|
+
generateNewKeyForDataOwner(self) {
|
|
27
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
28
|
+
if (!this.keyPair)
|
|
29
|
+
return false;
|
|
30
|
+
const knownKeys = new Set([...(0, utils_1.hexPublicKeysWithSha1Of)(self), ...(0, utils_1.hexPublicKeysWithSha256Of)(self)]);
|
|
31
|
+
const publicKey = (0, icc_x_api_1.ua2hex)(yield this.RSA.exportKey(this.keyPair.publicKey, 'spki'));
|
|
32
|
+
return knownKeys.has(publicKey) ? false : this.keyPair;
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
recoverAndVerifySelfHierarchyKeys(keysData, cryptoPrimitives) {
|
|
36
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
37
|
+
this.recoverAndVerifyCallsParams.push(keysData);
|
|
38
|
+
const self = keysData[keysData.length - 1].dataOwner;
|
|
39
|
+
const knownKeys = new Set([...(0, utils_1.hexPublicKeysWithSha1Of)(self.dataOwner), ...(0, utils_1.hexPublicKeysWithSha256Of)(self.dataOwner)]);
|
|
40
|
+
const publicKey = this.keyPair ? (0, icc_x_api_1.ua2hex)(yield this.RSA.exportKey(this.keyPair.publicKey, 'spki')) : undefined;
|
|
41
|
+
return Object.fromEntries(yield Promise.all(keysData.map((currData) => __awaiter(this, void 0, void 0, function* () {
|
|
42
|
+
if (currData.dataOwner.dataOwner.id !== self.dataOwner.id) {
|
|
43
|
+
const recoveredKey = this.recoveredParentKeys[currData.dataOwner.dataOwner.id];
|
|
44
|
+
return [
|
|
45
|
+
currData.dataOwner.dataOwner.id,
|
|
46
|
+
{
|
|
47
|
+
recoveredKeys: recoveredKey
|
|
48
|
+
? {
|
|
49
|
+
[recoveredKey.pair.publicKey.slice(-32)]: yield cryptoPrimitives.RSA.importKeyPair('pkcs8', (0, icc_x_api_1.ua2ab)((0, icc_x_api_1.hex2ua)(recoveredKey.pair.privateKey)), 'spki', (0, icc_x_api_1.ua2ab)((0, icc_x_api_1.hex2ua)(recoveredKey.pair.publicKey)), recoveredKey.shaVersion),
|
|
50
|
+
}
|
|
51
|
+
: {},
|
|
52
|
+
keyAuthenticity: {},
|
|
53
|
+
},
|
|
54
|
+
];
|
|
55
|
+
}
|
|
56
|
+
else if (publicKey === undefined || !knownKeys.has(publicKey)) {
|
|
57
|
+
return [currData.dataOwner.dataOwner.id, { recoveredKeys: {}, keyAuthenticity: this.verifiedSelfKeys }];
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
return [
|
|
61
|
+
currData.dataOwner.dataOwner.id,
|
|
62
|
+
{ recoveredKeys: { [publicKey.slice(-32)]: this.keyPair }, keyAuthenticity: this.verifiedSelfKeys },
|
|
63
|
+
];
|
|
64
|
+
}
|
|
65
|
+
}))));
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
verifyDelegatePublicKeys(delegate, publicKeys) {
|
|
69
|
+
if (this.limitVerifiedDelegatesKeys) {
|
|
70
|
+
return Promise.resolve(publicKeys.filter((x) => this.limitVerifiedDelegatesKeys.has(x)));
|
|
71
|
+
}
|
|
72
|
+
else
|
|
73
|
+
return Promise.resolve(publicKeys);
|
|
74
|
+
}
|
|
75
|
+
dataOwnerRequiresAnonymousDelegation(dataOwner) {
|
|
76
|
+
return dataOwner.type !== 'hcp';
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
exports.TestCryptoStrategies = TestCryptoStrategies;
|
|
80
|
+
//# sourceMappingURL=TestCryptoStrategies.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TestCryptoStrategies.js","sourceRoot":"","sources":["../../../test/utils/TestCryptoStrategies.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,oDAAwF;AACxF,wDAAiG;AACjG,mCAAkC;AAClC,+CAAyE;AAIzE,MAAa,oBAAoB;IAI/B,YACmB,OAA4B,EAC5B,mBAA6C,EAAE,EAC/C,0BAAwC,EACxC,sBAAiG,EAAE;QAHnG,YAAO,GAAP,OAAO,CAAqB;QAC5B,qBAAgB,GAAhB,gBAAgB,CAA+B;QAC/C,+BAA0B,GAA1B,0BAA0B,CAAc;QACxC,wBAAmB,GAAnB,mBAAmB,CAAgF;QAPrG,QAAG,GAAG,IAAI,kBAAY,CAAC,kBAAgB,CAAC,CAAA;QACzD,gCAA2B,GAAgG,EAAE,CAAA;IAO1H,CAAC;IAEE,0BAA0B,CAAC,IAAuB;;YACtD,IAAI,CAAC,IAAI,CAAC,OAAO;gBAAE,OAAO,KAAK,CAAA;YAC/B,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,IAAA,+BAAuB,EAAC,IAAI,CAAC,EAAE,GAAG,IAAA,iCAAyB,EAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YACjG,MAAM,SAAS,GAAG,IAAA,kBAAM,EAAC,MAAM,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAA;YAClF,OAAO,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAA;QACxD,CAAC;KAAA;IAEK,iCAAiC,CACrC,QAA8F,EAC9F,gBAAkC;;YAElC,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;YAC/C,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,SAAS,CAAA;YACpD,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,IAAA,+BAAuB,EAAC,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,IAAA,iCAAyB,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;YACrH,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAA,kBAAM,EAAC,MAAM,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;YAC7G,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,OAAO,CAAC,GAAG,CACf,QAAQ,CAAC,GAAG,CAAC,CAAO,QAAQ,EAAE,EAAE;gBAC9B,IAAI,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,EAAG,KAAK,IAAI,CAAC,SAAS,CAAC,EAAG,EAAE,CAAC;oBAC5D,MAAM,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,EAAG,CAAC,CAAA;oBAC/E,OAAO;wBACL,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,EAAG;wBAChC;4BACE,aAAa,EAAE,YAAY;gCACzB,CAAC,CAAC;oCACE,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,gBAAgB,CAAC,GAAG,CAAC,aAAa,CAChF,OAAO,EACP,IAAA,iBAAK,EAAC,IAAA,kBAAM,EAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,EAC3C,MAAM,EACN,IAAA,iBAAK,EAAC,IAAA,kBAAM,EAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAC1C,YAAY,CAAC,UAAU,CACxB;iCACF;gCACH,CAAC,CAAC,EAAE;4BACN,eAAe,EAAE,EAAE;yBACpB;qBACF,CAAA;gBACH,CAAC;qBAAM,IAAI,SAAS,KAAK,SAAS,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;oBAChE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,EAAG,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,eAAe,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAA;gBAC1G,CAAC;qBAAM,CAAC;oBACN,OAAO;wBACL,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,EAAG;wBAChC,EAAE,aAAa,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,eAAe,EAAE,IAAI,CAAC,gBAAgB,EAAE;qBACpG,CAAA;gBACH,CAAC;YACH,CAAC,CAAA,CAAC,CACH,CACF,CAAA;QACH,CAAC;KAAA;IAED,wBAAwB,CAAC,QAAiC,EAAE,UAAoB;QAC9E,IAAI,IAAI,CAAC,0BAA0B,EAAE,CAAC;YACpC,OAAO,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,0BAA2B,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QAC3F,CAAC;;YAAM,OAAO,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;IAC3C,CAAC;IAED,oCAAoC,CAAC,SAAkC;QACrE,OAAO,SAAS,CAAC,IAAI,KAAK,KAAK,CAAA;IACjC,CAAC;CACF;AAtED,oDAsEC","sourcesContent":["import { CryptoStrategies } from '../../icc-x-api/crypto/CryptoStrategies'\nimport { KeyPair, RSAUtils, RSAUtilsImpl, ShaVersion } from '../../icc-x-api/crypto/RSA'\nimport { hexPublicKeysWithSha1Of, hexPublicKeysWithSha256Of } from '../../icc-x-api/crypto/utils'\nimport { webcrypto } from 'crypto'\nimport { CryptoPrimitives, hex2ua, ua2ab, ua2hex } from '../../icc-x-api'\nimport { CryptoActorStubWithType } from '../../icc-api/model/CryptoActorStub'\nimport { DataOwnerWithType } from '../../icc-api/model/DataOwnerWithType'\n\nexport class TestCryptoStrategies implements CryptoStrategies {\n private readonly RSA = new RSAUtilsImpl(webcrypto as any)\n recoverAndVerifyCallsParams: Array<{ dataOwner: DataOwnerWithType; unknownKeys: string[]; unavailableKeys: string[] }[]> = []\n\n constructor(\n private readonly keyPair?: KeyPair<CryptoKey>,\n private readonly verifiedSelfKeys: { [p: string]: boolean } = {},\n private readonly limitVerifiedDelegatesKeys?: Set<string>,\n private readonly recoveredParentKeys: { [parentId: string]: { pair: KeyPair<string>; shaVersion: ShaVersion } } = {}\n ) {}\n\n async generateNewKeyForDataOwner(self: DataOwnerWithType): Promise<KeyPair<CryptoKey> | boolean> {\n if (!this.keyPair) return false\n const knownKeys = new Set([...hexPublicKeysWithSha1Of(self), ...hexPublicKeysWithSha256Of(self)])\n const publicKey = ua2hex(await this.RSA.exportKey(this.keyPair.publicKey, 'spki'))\n return knownKeys.has(publicKey) ? false : this.keyPair\n }\n\n async recoverAndVerifySelfHierarchyKeys(\n keysData: { dataOwner: DataOwnerWithType; unknownKeys: string[]; unavailableKeys: string[] }[],\n cryptoPrimitives: CryptoPrimitives\n ): Promise<{ [p: string]: { recoveredKeys: { [p: string]: KeyPair<CryptoKey> }; keyAuthenticity: { [p: string]: boolean } } }> {\n this.recoverAndVerifyCallsParams.push(keysData)\n const self = keysData[keysData.length - 1].dataOwner\n const knownKeys = new Set([...hexPublicKeysWithSha1Of(self.dataOwner), ...hexPublicKeysWithSha256Of(self.dataOwner)])\n const publicKey = this.keyPair ? ua2hex(await this.RSA.exportKey(this.keyPair.publicKey, 'spki')) : undefined\n return Object.fromEntries(\n await Promise.all(\n keysData.map(async (currData) => {\n if (currData.dataOwner.dataOwner.id! !== self.dataOwner.id!) {\n const recoveredKey = this.recoveredParentKeys[currData.dataOwner.dataOwner.id!]\n return [\n currData.dataOwner.dataOwner.id!,\n {\n recoveredKeys: recoveredKey\n ? {\n [recoveredKey.pair.publicKey.slice(-32)]: await cryptoPrimitives.RSA.importKeyPair(\n 'pkcs8',\n ua2ab(hex2ua(recoveredKey.pair.privateKey)),\n 'spki',\n ua2ab(hex2ua(recoveredKey.pair.publicKey)),\n recoveredKey.shaVersion\n ),\n }\n : {},\n keyAuthenticity: {},\n },\n ]\n } else if (publicKey === undefined || !knownKeys.has(publicKey)) {\n return [currData.dataOwner.dataOwner.id!, { recoveredKeys: {}, keyAuthenticity: this.verifiedSelfKeys }]\n } else {\n return [\n currData.dataOwner.dataOwner.id!,\n { recoveredKeys: { [publicKey.slice(-32)]: this.keyPair }, keyAuthenticity: this.verifiedSelfKeys },\n ]\n }\n })\n )\n )\n }\n\n verifyDelegatePublicKeys(delegate: CryptoActorStubWithType, publicKeys: string[]): Promise<string[]> {\n if (this.limitVerifiedDelegatesKeys) {\n return Promise.resolve(publicKeys.filter((x) => this.limitVerifiedDelegatesKeys!.has(x)))\n } else return Promise.resolve(publicKeys)\n }\n\n dataOwnerRequiresAnonymousDelegation(dataOwner: CryptoActorStubWithType): boolean {\n return dataOwner.type !== 'hcp'\n }\n}\n"]}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { KeyStorageFacade, KeyStorageImpl, StorageFacade } from '../../icc-x-api';
|
|
2
|
+
import { KeyPair, ShaVersion } from '../../icc-x-api/crypto/RSA';
|
|
3
|
+
import { StorageEntryKeysFactory } from '../../icc-x-api/storage/StorageEntryKeysFactory';
|
|
4
|
+
export declare class TestStorage implements StorageFacade<string> {
|
|
5
|
+
private readonly data;
|
|
6
|
+
getItem(key: string): Promise<string | undefined>;
|
|
7
|
+
removeItem(key: string): Promise<void>;
|
|
8
|
+
setItem(key: string, valueToStore: string): Promise<void>;
|
|
9
|
+
}
|
|
10
|
+
export declare class TestKeyStorage extends KeyStorageImpl {
|
|
11
|
+
constructor();
|
|
12
|
+
}
|
|
13
|
+
export declare function testStorageWithKeys(data: {
|
|
14
|
+
dataOwnerId: string;
|
|
15
|
+
pairs: {
|
|
16
|
+
keyPair: KeyPair<string>;
|
|
17
|
+
shaVersion: ShaVersion;
|
|
18
|
+
}[];
|
|
19
|
+
}[]): Promise<{
|
|
20
|
+
keyStorage: KeyStorageFacade;
|
|
21
|
+
storage: StorageFacade<string>;
|
|
22
|
+
keyFactory: StorageEntryKeysFactory;
|
|
23
|
+
}>;
|