@icure/api 8.6.2 → 8.6.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. package/icc-api/model/ModelHelper.d.ts +1 -1
  2. package/icc-api/model/ModelHelper.js +15 -2
  3. package/icc-api/model/ModelHelper.js.map +1 -1
  4. package/icc-api/model/User.d.ts +1 -0
  5. package/icc-api/model/User.js.map +1 -1
  6. package/icc-x-api/crypto/AES.js +1 -1
  7. package/icc-x-api/crypto/AES.js.map +1 -1
  8. package/icc-x-api/crypto/BaseExchangeDataManager.js +14 -14
  9. package/icc-x-api/crypto/BaseExchangeDataManager.js.map +1 -1
  10. package/icc-x-api/crypto/BaseExchangeKeysManager.js +1 -1
  11. package/icc-x-api/crypto/BaseExchangeKeysManager.js.map +1 -1
  12. package/icc-x-api/crypto/CryptoPrimitives.js +3 -2
  13. package/icc-x-api/crypto/CryptoPrimitives.js.map +1 -1
  14. package/icc-x-api/crypto/ExchangeDataManager.js +3 -3
  15. package/icc-x-api/crypto/ExchangeDataManager.js.map +1 -1
  16. package/icc-x-api/crypto/ExtendedApisUtilsImpl.js +1 -1
  17. package/icc-x-api/crypto/ExtendedApisUtilsImpl.js.map +1 -1
  18. package/icc-x-api/crypto/KeyRecovery.js +3 -3
  19. package/icc-x-api/crypto/KeyRecovery.js.map +1 -1
  20. package/icc-x-api/crypto/NativeCryptoPrimitivesBridge.js +13 -13
  21. package/icc-x-api/crypto/NativeCryptoPrimitivesBridge.js.map +1 -1
  22. package/icc-x-api/crypto/RSA.js +2 -2
  23. package/icc-x-api/crypto/RSA.js.map +1 -1
  24. package/icc-x-api/crypto/RecoveryDataEncryption.js +5 -5
  25. package/icc-x-api/crypto/RecoveryDataEncryption.js.map +1 -1
  26. package/icc-x-api/crypto/SecureDelegationsManager.js +1 -1
  27. package/icc-x-api/crypto/SecureDelegationsManager.js.map +1 -1
  28. package/icc-x-api/crypto/ShamirKeysManager.js +1 -1
  29. package/icc-x-api/crypto/ShamirKeysManager.js.map +1 -1
  30. package/icc-x-api/crypto/utils.js +1 -1
  31. package/icc-x-api/crypto/utils.js.map +1 -1
  32. package/icc-x-api/filters/HealthElementByHcPartyCodeFilter.d.ts +24 -0
  33. package/icc-x-api/filters/HealthElementByHcPartyCodeFilter.js +24 -0
  34. package/icc-x-api/filters/HealthElementByHcPartyCodeFilter.js.map +1 -0
  35. package/icc-x-api/filters/HealthElementByHcPartyIdentifiersVersioningFilter.d.ts +22 -0
  36. package/icc-x-api/filters/HealthElementByHcPartyIdentifiersVersioningFilter.js +24 -0
  37. package/icc-x-api/filters/HealthElementByHcPartyIdentifiersVersioningFilter.js.map +1 -0
  38. package/icc-x-api/filters/HealthElementByHcPartyStatusVersioningFilter.d.ts +21 -0
  39. package/icc-x-api/filters/HealthElementByHcPartyStatusVersioningFilter.js +24 -0
  40. package/icc-x-api/filters/HealthElementByHcPartyStatusVersioningFilter.js.map +1 -0
  41. package/icc-x-api/filters/HealthElementByHcPartyTagFilter.d.ts +24 -0
  42. package/icc-x-api/filters/HealthElementByHcPartyTagFilter.js +24 -0
  43. package/icc-x-api/filters/HealthElementByHcPartyTagFilter.js.map +1 -0
  44. package/icc-x-api/filters/VersionFiltering.d.ts +14 -0
  45. package/icc-x-api/filters/VersionFiltering.js +19 -0
  46. package/icc-x-api/filters/VersionFiltering.js.map +1 -0
  47. package/icc-x-api/filters/filters.d.ts +8 -4
  48. package/icc-x-api/filters/filters.js +4 -0
  49. package/icc-x-api/filters/filters.js.map +1 -1
  50. package/icc-x-api/icc-receipt-x-api.js +1 -1
  51. package/icc-x-api/icc-receipt-x-api.js.map +1 -1
  52. package/icc-x-api/index.d.ts +9 -6
  53. package/icc-x-api/index.js +4 -0
  54. package/icc-x-api/index.js.map +1 -1
  55. package/icc-x-api/utils/binary-utils.js +1 -1
  56. package/icc-x-api/utils/binary-utils.js.map +1 -1
  57. package/package.json +1 -1
  58. package/test/icc-api/api/IccAnonymousAccessApi.js +1 -1
  59. package/test/icc-api/api/IccAnonymousAccessApi.js.map +1 -1
  60. package/test/icc-api/api/IccDocumentApi.js +13 -12
  61. package/test/icc-api/api/IccDocumentApi.js.map +1 -1
  62. package/test/icc-x-api/crud/comprehensive-crud-test.js +2 -2
  63. package/test/icc-x-api/crud/comprehensive-crud-test.js.map +1 -1
  64. package/test/icc-x-api/crypto/crypto-utils.js +1 -1
  65. package/test/icc-x-api/crypto/crypto-utils.js.map +1 -1
  66. package/test/icc-x-api/crypto/soft-deleted-data-owners.js +1 -1
  67. package/test/icc-x-api/crypto/soft-deleted-data-owners.js.map +1 -1
  68. package/test/icc-x-api/crypto/user-encryption-keys-manager-test.js +1 -1
  69. package/test/icc-x-api/crypto/user-encryption-keys-manager-test.js.map +1 -1
  70. package/test/icc-x-api/filters/healthelement.d.ts +1 -0
  71. package/test/icc-x-api/filters/healthelement.js +333 -0
  72. package/test/icc-x-api/filters/healthelement.js.map +1 -0
  73. package/test/icc-x-api/test-legacy-data-support.js +4 -4
  74. package/test/icc-x-api/test-legacy-data-support.js.map +1 -1
  75. package/test/utils/TestCryptoStrategies.js +1 -1
  76. package/test/utils/TestCryptoStrategies.js.map +1 -1
  77. package/test/utils/roles.d.ts +1 -0
  78. package/test/utils/roles.js +1 -0
  79. package/test/utils/roles.js.map +1 -1
  80. package/test/utils/test_utils.js +2 -2
  81. package/test/utils/test_utils.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"IccAnonymousAccessApi.js","sourceRoot":"","sources":["../../../../test/icc-api/api/IccAnonymousAccessApi.ts"],"names":[],"mappings":"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","sourcesContent":["import { randomUUID } from 'crypto'\nimport { describeNoLite, getEnvironmentInitializer, isLiteTest, setLocalStorage, TestUtils } from '../../utils/test_utils'\nimport 'isomorphic-fetch'\nimport initMasterApi = TestUtils.initMasterApi\nimport { expect } from 'chai'\nimport { getEnvVariables, TestVars } from '@icure/test-setup/types'\nimport { MedicalLocation } from '../../../icc-api/model/MedicalLocation'\n\nsetLocalStorage(fetch)\n\nlet env: TestVars\n\ndescribeNoLite('Anonymous Access', () => {\n before(async function () {\n this.timeout(600000)\n const initializer = await getEnvironmentInitializer()\n env = await initializer.execute(getEnvVariables())\n })\n\n it('should be able to retrieve publicly available informations of medicalLocation', async () => {\n const { medicalLocationApi, anonymousAccessApi } = await initMasterApi(env)\n\n const createdMedicalLocation = await medicalLocationApi.createMedicalLocation(\n new MedicalLocation({\n id: randomUUID(),\n name: 'private medicalLocation ' + randomUUID(),\n description: 'private medicalLocation description ' + randomUUID(),\n })\n )\n\n const createdMedicalLocationWithPublicInfo = await medicalLocationApi.createMedicalLocation(\n new MedicalLocation({\n id: randomUUID(),\n name: 'public medicalLocation ' + randomUUID(),\n description: 'public medicalLocation description ' + randomUUID(),\n publicInformations: {\n address: 'public address',\n phone: '+32 2 555 55 55',\n },\n })\n )\n\n const groupId = getEnvVariables().testGroupId\n\n const paginatedMedicalLocations = await anonymousAccessApi.getPublicMedicalLocationsByGroupId(groupId)\n\n expect(paginatedMedicalLocations.rows?.length).to.be.greaterThan(0)\n\n const publicMedicalLocationIds = paginatedMedicalLocations.rows?.map((medicalLocation) => medicalLocation.id)\n expect(publicMedicalLocationIds).to.include(createdMedicalLocationWithPublicInfo.id)\n expect(publicMedicalLocationIds).not.to.include(createdMedicalLocation.id)\n\n const publicMedicalLocation: MedicalLocation = paginatedMedicalLocations.rows!.find(\n (medicalLocation) => medicalLocation.id === createdMedicalLocationWithPublicInfo.id\n )!\n expect(publicMedicalLocation).to.be.not.undefined\n expect(publicMedicalLocation?.name).to.be.undefined\n expect(publicMedicalLocation?.description).to.be.undefined\n })\n})\n"]}
1
+ {"version":3,"file":"IccAnonymousAccessApi.js","sourceRoot":"","sources":["../../../../test/icc-api/api/IccAnonymousAccessApi.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,mCAAmC;AACnC,uDAA0H;AAC1H,4BAAyB;AACzB,IAAO,aAAa,GAAG,sBAAS,CAAC,aAAa,CAAA;AAC9C,+BAA6B;AAC7B,mDAAmE;AACnE,4EAAwE;AAExE,IAAA,4BAAe,EAAC,KAAK,CAAC,CAAA;AAEtB,IAAI,GAAa,CAAA;AAEjB,IAAA,2BAAc,EAAC,kBAAkB,EAAE,GAAG,EAAE;IACtC,MAAM,CAAC;;YACL,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;YACpB,MAAM,WAAW,GAAG,MAAM,IAAA,sCAAyB,GAAE,CAAA;YACrD,GAAG,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,IAAA,uBAAe,GAAE,CAAC,CAAA;QACpD,CAAC;KAAA,CAAC,CAAA;IAEF,EAAE,CAAC,+EAA+E,EAAE,GAAS,EAAE;;QAC7F,MAAM,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,GAAG,MAAM,aAAa,CAAC,GAAG,CAAC,CAAA;QAE3E,MAAM,sBAAsB,GAAG,MAAM,kBAAkB,CAAC,qBAAqB,CAC3E,IAAI,iCAAe,CAAC;YAClB,EAAE,EAAE,IAAA,mBAAU,GAAE;YAChB,IAAI,EAAE,0BAA0B,GAAG,IAAA,mBAAU,GAAE;YAC/C,WAAW,EAAE,sCAAsC,GAAG,IAAA,mBAAU,GAAE;SACnE,CAAC,CACH,CAAA;QAED,MAAM,oCAAoC,GAAG,MAAM,kBAAkB,CAAC,qBAAqB,CACzF,IAAI,iCAAe,CAAC;YAClB,EAAE,EAAE,IAAA,mBAAU,GAAE;YAChB,IAAI,EAAE,yBAAyB,GAAG,IAAA,mBAAU,GAAE;YAC9C,WAAW,EAAE,qCAAqC,GAAG,IAAA,mBAAU,GAAE;YACjE,kBAAkB,EAAE;gBAClB,OAAO,EAAE,gBAAgB;gBACzB,KAAK,EAAE,iBAAiB;aACzB;SACF,CAAC,CACH,CAAA;QAED,MAAM,OAAO,GAAG,GAAG,CAAC,WAAW,CAAA;QAE/B,MAAM,yBAAyB,GAAG,MAAM,kBAAkB,CAAC,kCAAkC,CAAC,OAAO,CAAC,CAAA;QAEtG,IAAA,aAAM,EAAC,MAAA,yBAAyB,CAAC,IAAI,0CAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,CAAA;QAEnE,MAAM,wBAAwB,GAAG,MAAA,yBAAyB,CAAC,IAAI,0CAAE,GAAG,CAAC,CAAC,eAAe,EAAE,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC,CAAA;QAC7G,IAAA,aAAM,EAAC,wBAAwB,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,oCAAoC,CAAC,EAAE,CAAC,CAAA;QACpF,IAAA,aAAM,EAAC,wBAAwB,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,sBAAsB,CAAC,EAAE,CAAC,CAAA;QAE1E,MAAM,qBAAqB,GAAoB,yBAAyB,CAAC,IAAK,CAAC,IAAI,CACjF,CAAC,eAAe,EAAE,EAAE,CAAC,eAAe,CAAC,EAAE,KAAK,oCAAoC,CAAC,EAAE,CACnF,CAAA;QACF,IAAA,aAAM,EAAC,qBAAqB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,SAAS,CAAA;QACjD,IAAA,aAAM,EAAC,qBAAqB,aAArB,qBAAqB,uBAArB,qBAAqB,CAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAA;QACnD,IAAA,aAAM,EAAC,qBAAqB,aAArB,qBAAqB,uBAArB,qBAAqB,CAAE,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAA;IAC5D,CAAC,CAAA,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA","sourcesContent":["import { randomUUID } from 'crypto'\nimport { describeNoLite, getEnvironmentInitializer, isLiteTest, setLocalStorage, TestUtils } from '../../utils/test_utils'\nimport 'isomorphic-fetch'\nimport initMasterApi = TestUtils.initMasterApi\nimport { expect } from 'chai'\nimport { getEnvVariables, TestVars } from '@icure/test-setup/types'\nimport { MedicalLocation } from '../../../icc-api/model/MedicalLocation'\n\nsetLocalStorage(fetch)\n\nlet env: TestVars\n\ndescribeNoLite('Anonymous Access', () => {\n before(async function () {\n this.timeout(600000)\n const initializer = await getEnvironmentInitializer()\n env = await initializer.execute(getEnvVariables())\n })\n\n it('should be able to retrieve publicly available informations of medicalLocation', async () => {\n const { medicalLocationApi, anonymousAccessApi } = await initMasterApi(env)\n\n const createdMedicalLocation = await medicalLocationApi.createMedicalLocation(\n new MedicalLocation({\n id: randomUUID(),\n name: 'private medicalLocation ' + randomUUID(),\n description: 'private medicalLocation description ' + randomUUID(),\n })\n )\n\n const createdMedicalLocationWithPublicInfo = await medicalLocationApi.createMedicalLocation(\n new MedicalLocation({\n id: randomUUID(),\n name: 'public medicalLocation ' + randomUUID(),\n description: 'public medicalLocation description ' + randomUUID(),\n publicInformations: {\n address: 'public address',\n phone: '+32 2 555 55 55',\n },\n })\n )\n\n const groupId = env.testGroupId\n\n const paginatedMedicalLocations = await anonymousAccessApi.getPublicMedicalLocationsByGroupId(groupId)\n\n expect(paginatedMedicalLocations.rows?.length).to.be.greaterThan(0)\n\n const publicMedicalLocationIds = paginatedMedicalLocations.rows?.map((medicalLocation) => medicalLocation.id)\n expect(publicMedicalLocationIds).to.include(createdMedicalLocationWithPublicInfo.id)\n expect(publicMedicalLocationIds).not.to.include(createdMedicalLocation.id)\n\n const publicMedicalLocation: MedicalLocation = paginatedMedicalLocations.rows!.find(\n (medicalLocation) => medicalLocation.id === createdMedicalLocationWithPublicInfo.id\n )!\n expect(publicMedicalLocation).to.be.not.undefined\n expect(publicMedicalLocation?.name).to.be.undefined\n expect(publicMedicalLocation?.description).to.be.undefined\n })\n})\n"]}
@@ -9,6 +9,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
9
9
  });
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
+ const icc_x_api_1 = require("../../../icc-x-api");
12
13
  const Document_1 = require("../../../icc-api/model/Document");
13
14
  const chai_1 = require("chai");
14
15
  const crypto_1 = require("crypto");
@@ -80,7 +81,7 @@ describe('Document api', () => {
80
81
  const updated = yield documentApi.setMainDocumentAttachmentWithUser(undefined, document.id, document.rev, data);
81
82
  (0, chai_1.expect)(updated).to.not.be.undefined;
82
83
  const retrievedData = yield documentApi.getMainDocumentAttachment(document.id);
83
- (0, chai_1.assert)(bufferEquals(retrievedData, data));
84
+ (0, chai_1.assert)(bufferEquals(retrievedData, (0, icc_x_api_1.ua2ab)(data)));
84
85
  }));
85
86
  it('should allow to update main attachment', () => __awaiter(void 0, void 0, void 0, function* () {
86
87
  const document = yield createDocument();
@@ -89,11 +90,11 @@ describe('Document api', () => {
89
90
  const updated = yield documentApi.setMainDocumentAttachmentWithUser(undefined, document.id, document.rev, data1, sampleUti);
90
91
  (0, chai_1.expect)(updated.mainUti).to.equal(sampleUti[0]);
91
92
  (0, chai_1.assert)(arrayEquals(updated.otherUtis, sampleUti.slice(1)));
92
- (0, chai_1.assert)(bufferEquals(yield documentApi.getMainDocumentAttachment(document.id), data1));
93
+ (0, chai_1.assert)(bufferEquals(yield documentApi.getMainDocumentAttachment(document.id), (0, icc_x_api_1.ua2ab)(data1)));
93
94
  const updated2 = yield documentApi.setMainDocumentAttachmentWithUser(undefined, document.id, updated.rev, data2);
94
95
  (0, chai_1.expect)(updated2.mainUti).to.equal(sampleUti[0]);
95
96
  (0, chai_1.assert)(arrayEquals(updated2.otherUtis, sampleUti.slice(1)));
96
- (0, chai_1.assert)(bufferEquals(yield documentApi.getMainDocumentAttachment(document.id), data2));
97
+ (0, chai_1.assert)(bufferEquals(yield documentApi.getMainDocumentAttachment(document.id), (0, icc_x_api_1.ua2ab)(data2)));
97
98
  }));
98
99
  it('should allow to update utis in main attachment', () => __awaiter(void 0, void 0, void 0, function* () {
99
100
  var _a;
@@ -112,7 +113,7 @@ describe('Document api', () => {
112
113
  (0, chai_1.expect)(updated.secondaryAttachments).to.contain.keys([sampleKey]);
113
114
  (0, chai_1.assert)(arrayEquals(updated.secondaryAttachments[sampleKey].utis, []));
114
115
  const retrievedData = yield documentApi.getSecondaryAttachment(document.id, sampleKey);
115
- (0, chai_1.assert)(bufferEquals(retrievedData, data));
116
+ (0, chai_1.assert)(bufferEquals(retrievedData, (0, icc_x_api_1.ua2ab)(data)));
116
117
  }));
117
118
  it('should allow to initialise utis in secondary attachments', () => __awaiter(void 0, void 0, void 0, function* () {
118
119
  const document = yield createDocument();
@@ -126,10 +127,10 @@ describe('Document api', () => {
126
127
  const data2 = (0, crypto_1.randomBytes)(32);
127
128
  const updated = yield documentApi.setSecondaryAttachmentWithUser(undefined, document.id, sampleKey, document.rev, data1, sampleUti);
128
129
  (0, chai_1.assert)(arrayEquals(updated.secondaryAttachments[sampleKey].utis, sampleUti));
129
- (0, chai_1.assert)(bufferEquals(yield documentApi.getSecondaryAttachment(document.id, sampleKey), data1));
130
+ (0, chai_1.assert)(bufferEquals(yield documentApi.getSecondaryAttachment(document.id, sampleKey), (0, icc_x_api_1.ua2ab)(data1)));
130
131
  const updated2 = yield documentApi.setSecondaryAttachmentWithUser(undefined, document.id, sampleKey, updated.rev, data2);
131
132
  (0, chai_1.assert)(arrayEquals(updated2.secondaryAttachments[sampleKey].utis, sampleUti));
132
- (0, chai_1.assert)(bufferEquals(yield documentApi.getSecondaryAttachment(document.id, sampleKey), data2));
133
+ (0, chai_1.assert)(bufferEquals(yield documentApi.getSecondaryAttachment(document.id, sampleKey), (0, icc_x_api_1.ua2ab)(data2)));
133
134
  }));
134
135
  it('should allow to update utis in secondary attachments', () => __awaiter(void 0, void 0, void 0, function* () {
135
136
  const document = yield createDocument();
@@ -159,25 +160,25 @@ describe('Document api', () => {
159
160
  const data1 = (0, crypto_1.randomBytes)(32);
160
161
  const data2 = (0, crypto_1.randomBytes)(32);
161
162
  const data3 = (0, crypto_1.randomBytes)(32);
162
- (0, chai_1.assert)(!bufferEquals(data1, data2));
163
+ (0, chai_1.assert)(!bufferEquals((0, icc_x_api_1.ua2ab)(data1), (0, icc_x_api_1.ua2ab)(data2)));
163
164
  const updated1 = yield documentApi.setSecondaryAttachmentWithUser(undefined, document.id, sampleKey, document.rev, data1);
164
165
  const updated2 = yield documentApi.setSecondaryAttachmentWithUser(undefined, document.id, sampleKey2, updated1.rev, data2, sampleUti);
165
166
  (0, chai_1.expect)(updated2.secondaryAttachments).to.have.keys([sampleKey, sampleKey2]);
166
167
  (0, chai_1.assert)(arrayEquals(updated2.secondaryAttachments[sampleKey].utis, []));
167
168
  (0, chai_1.assert)(arrayEquals(updated2.secondaryAttachments[sampleKey2].utis, sampleUti));
168
- (0, chai_1.assert)(bufferEquals(yield documentApi.getSecondaryAttachment(document.id, sampleKey), data1));
169
- (0, chai_1.assert)(bufferEquals(yield documentApi.getSecondaryAttachment(document.id, sampleKey2), data2));
169
+ (0, chai_1.assert)(bufferEquals(yield documentApi.getSecondaryAttachment(document.id, sampleKey), (0, icc_x_api_1.ua2ab)(data1)));
170
+ (0, chai_1.assert)(bufferEquals(yield documentApi.getSecondaryAttachment(document.id, sampleKey2), (0, icc_x_api_1.ua2ab)(data2)));
170
171
  const updated3 = yield documentApi.setSecondaryAttachmentWithUser(undefined, document.id, sampleKey, updated2.rev, data3, sampleUti2);
171
172
  (0, chai_1.expect)(updated3.secondaryAttachments).to.have.keys([sampleKey, sampleKey2]);
172
173
  (0, chai_1.assert)(arrayEquals(updated3.secondaryAttachments[sampleKey].utis, sampleUti2));
173
174
  (0, chai_1.assert)(arrayEquals(updated3.secondaryAttachments[sampleKey2].utis, sampleUti));
174
- (0, chai_1.assert)(bufferEquals(yield documentApi.getSecondaryAttachment(document.id, sampleKey), data3));
175
- (0, chai_1.assert)(bufferEquals(yield documentApi.getSecondaryAttachment(document.id, sampleKey2), data2));
175
+ (0, chai_1.assert)(bufferEquals(yield documentApi.getSecondaryAttachment(document.id, sampleKey), (0, icc_x_api_1.ua2ab)(data3)));
176
+ (0, chai_1.assert)(bufferEquals(yield documentApi.getSecondaryAttachment(document.id, sampleKey2), (0, icc_x_api_1.ua2ab)(data2)));
176
177
  (0, chai_1.expect)(updated3.deletedAttachments).to.have.length(1);
177
178
  const updated4 = yield documentApi.deleteSecondaryAttachmentWithUser(undefined, document.id, sampleKey2, updated3.rev);
178
179
  (0, chai_1.expect)(updated4.secondaryAttachments).to.have.keys([sampleKey]);
179
180
  (0, chai_1.expect)(updated4.deletedAttachments).to.have.length(2);
180
- (0, chai_1.assert)(bufferEquals(yield documentApi.getSecondaryAttachment(document.id, sampleKey), data3));
181
+ (0, chai_1.assert)(bufferEquals(yield documentApi.getSecondaryAttachment(document.id, sampleKey), (0, icc_x_api_1.ua2ab)(data3)));
181
182
  yield assertRequestFails(documentApi.getSecondaryAttachment(document.id, sampleKey2), 404);
182
183
  }));
183
184
  it('should refuse update methods which do not provide the latest rev', () => __awaiter(void 0, void 0, void 0, function* () {
@@ -1 +1 @@
1
- {"version":3,"file":"IccDocumentApi.js","sourceRoot":"","sources":["../../../../test/icc-api/api/IccDocumentApi.ts"],"names":[],"mappings":"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","sourcesContent":["import { IccDocumentXApi } from '../../../icc-x-api'\nimport { Document } from '../../../icc-api/model/Document'\nimport { assert, expect } from 'chai'\nimport { randomBytes, randomUUID } from 'crypto'\nimport { getEnvironmentInitializer, hcp1Username, setLocalStorage, TestUtils } from '../../utils/test_utils'\nimport initApi = TestUtils.initApi\nimport { Delegation } from '../../../icc-api/model/Delegation'\nimport { getEnvVariables, TestVars } from '@icure/test-setup/types'\nimport 'isomorphic-fetch'\nimport { User } from '../../../icc-api/model/User'\n\nsetLocalStorage(fetch)\nconst sampleKey = 'thumbnail'\nconst sampleKey2 = 'thumbnail2'\nconst sampleUti = ['uti2', 'uti1', 'uti3']\nconst sampleUti2 = ['uti4']\n\nfunction bufferEquals(buf1: ArrayBuffer, buf2: ArrayBuffer): Boolean {\n if (buf1.byteLength != buf2.byteLength) return false\n const dv1 = new Int8Array(buf1)\n const dv2 = new Int8Array(buf2)\n return arrayEquals(dv1, dv2)\n}\n\nfunction arrayEquals<T>(a1: ArrayLike<T>, a2: ArrayLike<T>): Boolean {\n if (a1.length != a2.length) return false\n for (let i = 0; i < a1.length; i++) {\n if (a1[i] != a2[i]) return false\n }\n return true\n}\n\nasync function assertRequestFails(request: Promise<any>, status: number) {\n let succeeded = false\n try {\n await request\n succeeded = true\n } catch (e: any) {\n expect(e.statusCode).to.equal(status)\n }\n assert(!succeeded, 'Request should have not succeeded')\n}\n\nlet env: TestVars\nlet documentApi: IccDocumentXApi\nlet dataOwnerId: string\nlet user: User\n\ndescribe('Document api', () => {\n before(async function () {\n this.timeout(600000)\n const initializer = await getEnvironmentInitializer()\n env = await initializer.execute(getEnvVariables())\n const api = await initApi(env!, hcp1Username)\n documentApi = api.documentApi\n dataOwnerId = await api.dataOwnerApi.getCurrentDataOwnerId()\n user = await api.userApi.getCurrentUser()\n })\n\n async function createDocument(): Promise<Document> {\n return await documentApi.createDocumentWithUser(\n undefined,\n await documentApi.newInstance(\n user,\n undefined,\n new Document({\n id: randomUUID(),\n })\n )\n )\n }\n\n it('should allow to create and retrieve main attachments', async () => {\n const document = await createDocument()\n const data = randomBytes(32)\n expect(document.rev).to.not.be.undefined\n const updated = await documentApi!.setMainDocumentAttachmentWithUser(undefined, document.id!, document.rev!, data)\n expect(updated).to.not.be.undefined\n const retrievedData = await documentApi!.getMainDocumentAttachment(document.id!)\n assert(bufferEquals(retrievedData, data))\n })\n\n it('should allow to update main attachment', async () => {\n const document = await createDocument()\n const data1 = randomBytes(32)\n const data2 = randomBytes(32)\n const updated = await documentApi!.setMainDocumentAttachmentWithUser(undefined, document.id!, document.rev!, data1, sampleUti)\n expect(updated.mainUti).to.equal(sampleUti[0])\n assert(arrayEquals(updated.otherUtis!, sampleUti.slice(1)))\n assert(bufferEquals(await documentApi!.getMainDocumentAttachment(document.id!), data1))\n const updated2 = await documentApi!.setMainDocumentAttachmentWithUser(undefined, document.id!, updated.rev!, data2)\n expect(updated2.mainUti).to.equal(sampleUti[0])\n assert(arrayEquals(updated2.otherUtis!, sampleUti.slice(1)))\n assert(bufferEquals(await documentApi!.getMainDocumentAttachment(document.id!), data2))\n })\n\n it('should allow to update utis in main attachment', async () => {\n const document = await createDocument()\n const updated = await documentApi!.setMainDocumentAttachmentWithUser(undefined, document.id!, document.rev!, randomBytes(32), [])\n expect(updated.mainUti).to.be.undefined\n expect(updated.otherUtis ?? []).to.be.empty\n const updated2 = await documentApi!.setMainDocumentAttachmentWithUser(undefined, document.id!, updated.rev!, randomBytes(32), sampleUti)\n expect(updated2.mainUti).to.equal(sampleUti[0])\n assert(arrayEquals(updated2.otherUtis!, sampleUti.slice(1)))\n })\n\n it('should allow to create and retrieve secondary attachments', async () => {\n const document = await createDocument()\n const data = randomBytes(32)\n const updated = await documentApi!.setSecondaryAttachmentWithUser(undefined, document.id!, sampleKey, document.rev!, data)\n expect(updated.secondaryAttachments).to.contain.keys([sampleKey])\n assert(arrayEquals(updated.secondaryAttachments![sampleKey].utis!, []))\n const retrievedData = await documentApi!.getSecondaryAttachment(document.id!, sampleKey)\n assert(bufferEquals(retrievedData, data))\n })\n\n it('should allow to initialise utis in secondary attachments', async () => {\n const document = await createDocument()\n const data = randomBytes(32)\n const updated = await documentApi!.setSecondaryAttachmentWithUser(undefined, document.id!, sampleKey, document.rev!, data, sampleUti)\n assert(arrayEquals(updated.secondaryAttachments![sampleKey].utis!, sampleUti))\n })\n\n it('should allow to update secondary attachments', async () => {\n const document = await createDocument()\n const data1 = randomBytes(32)\n const data2 = randomBytes(32)\n const updated = await documentApi!.setSecondaryAttachmentWithUser(undefined, document.id!, sampleKey, document.rev!, data1, sampleUti)\n assert(arrayEquals(updated.secondaryAttachments![sampleKey].utis!, sampleUti))\n assert(bufferEquals(await documentApi!.getSecondaryAttachment(document.id!, sampleKey), data1))\n const updated2 = await documentApi!.setSecondaryAttachmentWithUser(undefined, document.id!, sampleKey, updated.rev!, data2)\n assert(arrayEquals(updated2.secondaryAttachments![sampleKey].utis!, sampleUti))\n assert(bufferEquals(await documentApi!.getSecondaryAttachment(document.id!, sampleKey), data2))\n })\n\n it('should allow to update utis in secondary attachments', async () => {\n const document = await createDocument()\n const updated = await documentApi!.setSecondaryAttachmentWithUser(undefined, document.id!, sampleKey, document.rev!, randomBytes(32))\n assert(arrayEquals(updated.secondaryAttachments![sampleKey].utis!, []))\n const updated2 = await documentApi!.setSecondaryAttachmentWithUser(undefined, document.id!, sampleKey, updated.rev!, randomBytes(32), sampleUti)\n assert(arrayEquals(updated2.secondaryAttachments![sampleKey].utis!, sampleUti))\n })\n\n it('should allow to delete secondary attachments', async () => {\n const document = await createDocument()\n const data = randomBytes(32)\n const updated = await documentApi!.setSecondaryAttachmentWithUser(undefined, document.id!, sampleKey, document.rev!, data)\n const originalAttachment = updated.secondaryAttachments![sampleKey]\n const timeBeforeDelete = Date.now() - 100\n const deleted = await documentApi!.deleteSecondaryAttachmentWithUser(undefined, document.id!, sampleKey, updated.rev!)\n const timeAfterDelete = Date.now() + 100\n expect(deleted.deletedAttachments).to.have.length(1)\n const deletedAttachment = deleted.deletedAttachments![0]\n expect(deletedAttachment.couchDbAttachmentId).to.equal(originalAttachment.couchDbAttachmentId)\n expect(deletedAttachment.objectStoreAttachmentId).to.equal(originalAttachment.objectStoreAttachmentId)\n expect(deletedAttachment.key).to.equal(sampleKey)\n expect(deletedAttachment.deletionTime).to.be.above(timeBeforeDelete).and.below(timeAfterDelete)\n expect(Object.keys(deleted.secondaryAttachments!)).to.be.empty\n })\n\n it('should treat secondary attachments with different keys as different attachments', async () => {\n const document = await createDocument()\n const data1 = randomBytes(32)\n const data2 = randomBytes(32)\n const data3 = randomBytes(32)\n assert(!bufferEquals(data1, data2))\n const updated1 = await documentApi!.setSecondaryAttachmentWithUser(undefined, document.id!, sampleKey, document.rev!, data1)\n const updated2 = await documentApi!.setSecondaryAttachmentWithUser(undefined, document.id!, sampleKey2, updated1.rev!, data2, sampleUti)\n expect(updated2.secondaryAttachments).to.have.keys([sampleKey, sampleKey2])\n assert(arrayEquals(updated2.secondaryAttachments![sampleKey].utis!, []))\n assert(arrayEquals(updated2.secondaryAttachments![sampleKey2].utis!, sampleUti))\n assert(bufferEquals(await documentApi!.getSecondaryAttachment(document.id!, sampleKey), data1))\n assert(bufferEquals(await documentApi!.getSecondaryAttachment(document.id!, sampleKey2), data2))\n const updated3 = await documentApi!.setSecondaryAttachmentWithUser(undefined, document.id!, sampleKey, updated2.rev!, data3, sampleUti2)\n expect(updated3.secondaryAttachments).to.have.keys([sampleKey, sampleKey2])\n assert(arrayEquals(updated3.secondaryAttachments![sampleKey].utis!, sampleUti2))\n assert(arrayEquals(updated3.secondaryAttachments![sampleKey2].utis!, sampleUti))\n assert(bufferEquals(await documentApi!.getSecondaryAttachment(document.id!, sampleKey), data3))\n assert(bufferEquals(await documentApi!.getSecondaryAttachment(document.id!, sampleKey2), data2))\n expect(updated3.deletedAttachments).to.have.length(1)\n const updated4 = await documentApi!.deleteSecondaryAttachmentWithUser(undefined, document.id!, sampleKey2, updated3.rev!)\n expect(updated4.secondaryAttachments).to.have.keys([sampleKey])\n expect(updated4.deletedAttachments).to.have.length(2)\n assert(bufferEquals(await documentApi!.getSecondaryAttachment(document.id!, sampleKey), data3))\n await assertRequestFails(documentApi!.getSecondaryAttachment(document.id!, sampleKey2), 404)\n })\n\n it('should refuse update methods which do not provide the latest rev', async () => {\n const document = await createDocument()\n expect(document.rev).to.not.be.undefined\n expect((await documentApi.modifyDocumentWithUser(undefined, { ...document, name: 'new name' })).rev).to.not.equal(document.rev)\n await assertRequestFails(documentApi!.setMainDocumentAttachmentWithUser(undefined, document.id!, document.rev!, randomBytes(32)), 409)\n await assertRequestFails(documentApi!.setSecondaryAttachmentWithUser(undefined, document.id!, sampleKey, document.rev!, randomBytes(32)), 409)\n await assertRequestFails(documentApi!.deleteSecondaryAttachmentWithUser(undefined, document.id!, sampleKey, document.rev!), 409)\n })\n\n it('should prevent using the document id as an attachment key', async () => {\n const document = await createDocument()\n await assertRequestFails(documentApi!.setSecondaryAttachmentWithUser(undefined, document.id!, document.id!, document.rev!, randomBytes(32)), 400)\n await assertRequestFails(documentApi!.deleteSecondaryAttachmentWithUser(undefined, document.id!, document.id!, document.rev!), 400)\n await assertRequestFails(documentApi!.getSecondaryAttachment(document.id!, document.id!, document.rev!), 400)\n })\n})\n"]}
1
+ {"version":3,"file":"IccDocumentApi.js","sourceRoot":"","sources":["../../../../test/icc-api/api/IccDocumentApi.ts"],"names":[],"mappings":"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","sourcesContent":["import { IccDocumentXApi, ua2ab } from '../../../icc-x-api'\nimport { Document } from '../../../icc-api/model/Document'\nimport { assert, expect } from 'chai'\nimport { randomBytes, randomUUID } from 'crypto'\nimport { getEnvironmentInitializer, hcp1Username, setLocalStorage, TestUtils } from '../../utils/test_utils'\nimport initApi = TestUtils.initApi\nimport { Delegation } from '../../../icc-api/model/Delegation'\nimport { getEnvVariables, TestVars } from '@icure/test-setup/types'\nimport 'isomorphic-fetch'\nimport { User } from '../../../icc-api/model/User'\n\nsetLocalStorage(fetch)\nconst sampleKey = 'thumbnail'\nconst sampleKey2 = 'thumbnail2'\nconst sampleUti = ['uti2', 'uti1', 'uti3']\nconst sampleUti2 = ['uti4']\n\nfunction bufferEquals(buf1: ArrayBuffer, buf2: ArrayBuffer): Boolean {\n if (buf1.byteLength != buf2.byteLength) return false\n const dv1 = new Int8Array(buf1)\n const dv2 = new Int8Array(buf2)\n return arrayEquals(dv1, dv2)\n}\n\nfunction arrayEquals<T>(a1: ArrayLike<T>, a2: ArrayLike<T>): Boolean {\n if (a1.length != a2.length) return false\n for (let i = 0; i < a1.length; i++) {\n if (a1[i] != a2[i]) return false\n }\n return true\n}\n\nasync function assertRequestFails(request: Promise<any>, status: number) {\n let succeeded = false\n try {\n await request\n succeeded = true\n } catch (e: any) {\n expect(e.statusCode).to.equal(status)\n }\n assert(!succeeded, 'Request should have not succeeded')\n}\n\nlet env: TestVars\nlet documentApi: IccDocumentXApi\nlet dataOwnerId: string\nlet user: User\n\ndescribe('Document api', () => {\n before(async function () {\n this.timeout(600000)\n const initializer = await getEnvironmentInitializer()\n env = await initializer.execute(getEnvVariables())\n const api = await initApi(env!, hcp1Username)\n documentApi = api.documentApi\n dataOwnerId = await api.dataOwnerApi.getCurrentDataOwnerId()\n user = await api.userApi.getCurrentUser()\n })\n\n async function createDocument(): Promise<Document> {\n return await documentApi.createDocumentWithUser(\n undefined,\n await documentApi.newInstance(\n user,\n undefined,\n new Document({\n id: randomUUID(),\n })\n )\n )\n }\n\n it('should allow to create and retrieve main attachments', async () => {\n const document = await createDocument()\n const data = randomBytes(32)\n expect(document.rev).to.not.be.undefined\n const updated = await documentApi!.setMainDocumentAttachmentWithUser(undefined, document.id!, document.rev!, data)\n expect(updated).to.not.be.undefined\n const retrievedData = await documentApi!.getMainDocumentAttachment(document.id!)\n assert(bufferEquals(retrievedData, ua2ab(data)))\n })\n\n it('should allow to update main attachment', async () => {\n const document = await createDocument()\n const data1 = randomBytes(32)\n const data2 = randomBytes(32)\n const updated = await documentApi!.setMainDocumentAttachmentWithUser(undefined, document.id!, document.rev!, data1, sampleUti)\n expect(updated.mainUti).to.equal(sampleUti[0])\n assert(arrayEquals(updated.otherUtis!, sampleUti.slice(1)))\n assert(bufferEquals(await documentApi!.getMainDocumentAttachment(document.id!), ua2ab(data1)))\n const updated2 = await documentApi!.setMainDocumentAttachmentWithUser(undefined, document.id!, updated.rev!, data2)\n expect(updated2.mainUti).to.equal(sampleUti[0])\n assert(arrayEquals(updated2.otherUtis!, sampleUti.slice(1)))\n assert(bufferEquals(await documentApi!.getMainDocumentAttachment(document.id!), ua2ab(data2)))\n })\n\n it('should allow to update utis in main attachment', async () => {\n const document = await createDocument()\n const updated = await documentApi!.setMainDocumentAttachmentWithUser(undefined, document.id!, document.rev!, randomBytes(32), [])\n expect(updated.mainUti).to.be.undefined\n expect(updated.otherUtis ?? []).to.be.empty\n const updated2 = await documentApi!.setMainDocumentAttachmentWithUser(undefined, document.id!, updated.rev!, randomBytes(32), sampleUti)\n expect(updated2.mainUti).to.equal(sampleUti[0])\n assert(arrayEquals(updated2.otherUtis!, sampleUti.slice(1)))\n })\n\n it('should allow to create and retrieve secondary attachments', async () => {\n const document = await createDocument()\n const data = randomBytes(32)\n const updated = await documentApi!.setSecondaryAttachmentWithUser(undefined, document.id!, sampleKey, document.rev!, data)\n expect(updated.secondaryAttachments).to.contain.keys([sampleKey])\n assert(arrayEquals(updated.secondaryAttachments![sampleKey].utis!, []))\n const retrievedData = await documentApi!.getSecondaryAttachment(document.id!, sampleKey)\n assert(bufferEquals(retrievedData, ua2ab(data)))\n })\n\n it('should allow to initialise utis in secondary attachments', async () => {\n const document = await createDocument()\n const data = randomBytes(32)\n const updated = await documentApi!.setSecondaryAttachmentWithUser(undefined, document.id!, sampleKey, document.rev!, data, sampleUti)\n assert(arrayEquals(updated.secondaryAttachments![sampleKey].utis!, sampleUti))\n })\n\n it('should allow to update secondary attachments', async () => {\n const document = await createDocument()\n const data1 = randomBytes(32)\n const data2 = randomBytes(32)\n const updated = await documentApi!.setSecondaryAttachmentWithUser(undefined, document.id!, sampleKey, document.rev!, data1, sampleUti)\n assert(arrayEquals(updated.secondaryAttachments![sampleKey].utis!, sampleUti))\n assert(bufferEquals(await documentApi!.getSecondaryAttachment(document.id!, sampleKey), ua2ab(data1)))\n const updated2 = await documentApi!.setSecondaryAttachmentWithUser(undefined, document.id!, sampleKey, updated.rev!, data2)\n assert(arrayEquals(updated2.secondaryAttachments![sampleKey].utis!, sampleUti))\n assert(bufferEquals(await documentApi!.getSecondaryAttachment(document.id!, sampleKey), ua2ab(data2)))\n })\n\n it('should allow to update utis in secondary attachments', async () => {\n const document = await createDocument()\n const updated = await documentApi!.setSecondaryAttachmentWithUser(undefined, document.id!, sampleKey, document.rev!, randomBytes(32))\n assert(arrayEquals(updated.secondaryAttachments![sampleKey].utis!, []))\n const updated2 = await documentApi!.setSecondaryAttachmentWithUser(undefined, document.id!, sampleKey, updated.rev!, randomBytes(32), sampleUti)\n assert(arrayEquals(updated2.secondaryAttachments![sampleKey].utis!, sampleUti))\n })\n\n it('should allow to delete secondary attachments', async () => {\n const document = await createDocument()\n const data = randomBytes(32)\n const updated = await documentApi!.setSecondaryAttachmentWithUser(undefined, document.id!, sampleKey, document.rev!, data)\n const originalAttachment = updated.secondaryAttachments![sampleKey]\n const timeBeforeDelete = Date.now() - 100\n const deleted = await documentApi!.deleteSecondaryAttachmentWithUser(undefined, document.id!, sampleKey, updated.rev!)\n const timeAfterDelete = Date.now() + 100\n expect(deleted.deletedAttachments).to.have.length(1)\n const deletedAttachment = deleted.deletedAttachments![0]\n expect(deletedAttachment.couchDbAttachmentId).to.equal(originalAttachment.couchDbAttachmentId)\n expect(deletedAttachment.objectStoreAttachmentId).to.equal(originalAttachment.objectStoreAttachmentId)\n expect(deletedAttachment.key).to.equal(sampleKey)\n expect(deletedAttachment.deletionTime).to.be.above(timeBeforeDelete).and.below(timeAfterDelete)\n expect(Object.keys(deleted.secondaryAttachments!)).to.be.empty\n })\n\n it('should treat secondary attachments with different keys as different attachments', async () => {\n const document = await createDocument()\n const data1 = randomBytes(32)\n const data2 = randomBytes(32)\n const data3 = randomBytes(32)\n assert(!bufferEquals(ua2ab(data1), ua2ab(data2)))\n const updated1 = await documentApi!.setSecondaryAttachmentWithUser(undefined, document.id!, sampleKey, document.rev!, data1)\n const updated2 = await documentApi!.setSecondaryAttachmentWithUser(undefined, document.id!, sampleKey2, updated1.rev!, data2, sampleUti)\n expect(updated2.secondaryAttachments).to.have.keys([sampleKey, sampleKey2])\n assert(arrayEquals(updated2.secondaryAttachments![sampleKey].utis!, []))\n assert(arrayEquals(updated2.secondaryAttachments![sampleKey2].utis!, sampleUti))\n assert(bufferEquals(await documentApi!.getSecondaryAttachment(document.id!, sampleKey), ua2ab(data1)))\n assert(bufferEquals(await documentApi!.getSecondaryAttachment(document.id!, sampleKey2), ua2ab(data2)))\n const updated3 = await documentApi!.setSecondaryAttachmentWithUser(undefined, document.id!, sampleKey, updated2.rev!, data3, sampleUti2)\n expect(updated3.secondaryAttachments).to.have.keys([sampleKey, sampleKey2])\n assert(arrayEquals(updated3.secondaryAttachments![sampleKey].utis!, sampleUti2))\n assert(arrayEquals(updated3.secondaryAttachments![sampleKey2].utis!, sampleUti))\n assert(bufferEquals(await documentApi!.getSecondaryAttachment(document.id!, sampleKey), ua2ab(data3)))\n assert(bufferEquals(await documentApi!.getSecondaryAttachment(document.id!, sampleKey2), ua2ab(data2)))\n expect(updated3.deletedAttachments).to.have.length(1)\n const updated4 = await documentApi!.deleteSecondaryAttachmentWithUser(undefined, document.id!, sampleKey2, updated3.rev!)\n expect(updated4.secondaryAttachments).to.have.keys([sampleKey])\n expect(updated4.deletedAttachments).to.have.length(2)\n assert(bufferEquals(await documentApi!.getSecondaryAttachment(document.id!, sampleKey), ua2ab(data3)))\n await assertRequestFails(documentApi!.getSecondaryAttachment(document.id!, sampleKey2), 404)\n })\n\n it('should refuse update methods which do not provide the latest rev', async () => {\n const document = await createDocument()\n expect(document.rev).to.not.be.undefined\n expect((await documentApi.modifyDocumentWithUser(undefined, { ...document, name: 'new name' })).rev).to.not.equal(document.rev)\n await assertRequestFails(documentApi!.setMainDocumentAttachmentWithUser(undefined, document.id!, document.rev!, randomBytes(32)), 409)\n await assertRequestFails(documentApi!.setSecondaryAttachmentWithUser(undefined, document.id!, sampleKey, document.rev!, randomBytes(32)), 409)\n await assertRequestFails(documentApi!.deleteSecondaryAttachmentWithUser(undefined, document.id!, sampleKey, document.rev!), 409)\n })\n\n it('should prevent using the document id as an attachment key', async () => {\n const document = await createDocument()\n await assertRequestFails(documentApi!.setSecondaryAttachmentWithUser(undefined, document.id!, document.id!, document.rev!, randomBytes(32)), 400)\n await assertRequestFails(documentApi!.deleteSecondaryAttachmentWithUser(undefined, document.id!, document.id!, document.rev!), 400)\n await assertRequestFails(documentApi!.getSecondaryAttachment(document.id!, document.id!, document.rev!), 400)\n })\n})\n"]}
@@ -47,8 +47,8 @@ describe('CRUD Test', () => {
47
47
  yield masterApi.userApi.setRoles(user.id, ['BASIC_USER']);
48
48
  const RSA = new icc_x_api_1.RSAUtilsImpl(crypto_1.webcrypto);
49
49
  const keys = {
50
- publicKey: yield RSA.importKey('spki', (0, icc_x_api_1.hex2ua)(credentials.publicKey), ['encrypt'], icc_x_api_1.ShaVersion.Sha1),
51
- privateKey: yield RSA.importKey('pkcs8', (0, icc_x_api_1.hex2ua)(credentials.privateKey), ['decrypt'], icc_x_api_1.ShaVersion.Sha1),
50
+ publicKey: yield RSA.importKey('spki', (0, icc_x_api_1.ua2ab)((0, icc_x_api_1.hex2ua)(credentials.publicKey)), ['encrypt'], icc_x_api_1.ShaVersion.Sha1),
51
+ privateKey: yield RSA.importKey('pkcs8', (0, icc_x_api_1.ua2ab)((0, icc_x_api_1.hex2ua)(credentials.privateKey)), ['decrypt'], icc_x_api_1.ShaVersion.Sha1),
52
52
  };
53
53
  noPermissionsApi = yield icc_x_api_1.IcureApi.initialise(env.iCureUrl, { username: credentials.user, password: credentials.password }, new TestCryptoStrategies_1.TestCryptoStrategies(keys), crypto_1.webcrypto, fetch);
54
54
  entitiesPermissions = {
@@ -1 +1 @@
1
- {"version":3,"file":"comprehensive-crud-test.js","sourceRoot":"","sources":["../../../../test/icc-x-api/crud/comprehensive-crud-test.ts"],"names":[],"mappings":"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","sourcesContent":["import 'isomorphic-fetch'\nimport { before } from 'mocha'\nimport {\n createNewHcpApi,\n getEnvironmentInitializer,\n hcp1Username,\n isLiteTest,\n itNoLite,\n patUsername,\n setLocalStorage,\n TestUtils,\n} from '../../utils/test_utils'\nimport { getEnvVariables, TestVars } from '@icure/test-setup/types'\nimport { hex2ua, IcureApi, RSAUtils, RSAUtilsImpl, ShaVersion } from '../../../icc-x-api'\nimport * as chaiAsPromised from 'chai-as-promised'\nimport { expect, use as chaiUse } from 'chai'\nimport { entities } from './entities-crud-test-interface'\nimport { Patient } from '../../../icc-api/model/Patient'\nimport { IdWithRev } from '../../../icc-api/model/IdWithRev'\nimport { randomUUID, webcrypto } from 'crypto'\nimport { TestCryptoStrategies } from '../../utils/TestCryptoStrategies'\nimport initMasterApi = TestUtils.initMasterApi\nimport initApi = TestUtils.initApi\n\nchaiUse(chaiAsPromised)\n\nsetLocalStorage(fetch)\n\ntype OpType = 'create' | 'delete'\ntype ApisWithRole = { allowed: IcureApi; denied?: IcureApi }\n\nlet masterApi: IcureApi\nlet hcpApi: IcureApi\nlet patientApi: IcureApi\nlet noPermissionsApi: IcureApi\nlet patient: Patient\nlet entitiesPermissions: { [key: string]: { [key in OpType]: ApisWithRole } }\n\nlet env: TestVars\n\ndescribe('CRUD Test', () => {\n before(async function () {\n this.timeout(600000)\n const initializer = await getEnvironmentInitializer()\n env = await initializer.execute(getEnvVariables())\n masterApi = await initMasterApi(env)\n hcpApi = await initApi(env, hcp1Username)\n patientApi = await initApi(env, patUsername)\n const patientUser = await patientApi.userApi.getCurrentUser()\n patient = await patientApi.patientApi.getPatientWithUser(patientUser, patientUser.patientId!)\n const { api, credentials, user } = await createNewHcpApi(env)\n if (!isLiteTest()) await masterApi.userApi.setRoles(user.id!, ['BASIC_USER'])\n\n const RSA = new RSAUtilsImpl(webcrypto as any)\n const keys = {\n publicKey: await RSA.importKey('spki', hex2ua(credentials.publicKey), ['encrypt'], ShaVersion.Sha1),\n privateKey: await RSA.importKey('pkcs8', hex2ua(credentials.privateKey), ['decrypt'], ShaVersion.Sha1),\n }\n\n noPermissionsApi = await IcureApi.initialise(\n env.iCureUrl,\n { username: credentials.user, password: credentials.password },\n new TestCryptoStrategies(keys),\n webcrypto as any,\n fetch\n )\n\n entitiesPermissions = {\n AccessLog: {\n create: { allowed: masterApi, denied: noPermissionsApi },\n delete: { allowed: hcpApi, denied: hcpApi },\n },\n Agenda: {\n create: { allowed: masterApi },\n delete: { allowed: hcpApi, denied: patientApi },\n },\n Article: {\n create: { allowed: masterApi, denied: patientApi },\n delete: { allowed: masterApi, denied: hcpApi },\n },\n CalendarItem: {\n create: { allowed: masterApi, denied: noPermissionsApi },\n delete: { allowed: hcpApi, denied: hcpApi },\n },\n CalendarItemType: {\n create: { allowed: masterApi },\n delete: { allowed: hcpApi, denied: patientApi },\n },\n Classification: {\n create: { allowed: masterApi, denied: noPermissionsApi },\n delete: { allowed: hcpApi, denied: hcpApi },\n },\n ClassificationTemplate: {\n create: { allowed: masterApi, denied: patientApi },\n delete: { allowed: masterApi, denied: hcpApi },\n },\n Contact: {\n create: { allowed: masterApi, denied: noPermissionsApi },\n delete: { allowed: hcpApi, denied: hcpApi },\n },\n Device: {\n create: { allowed: masterApi },\n delete: { allowed: hcpApi, denied: patientApi },\n },\n Document: {\n create: { allowed: masterApi, denied: noPermissionsApi },\n delete: { allowed: hcpApi, denied: hcpApi },\n },\n Form: {\n create: { allowed: masterApi, denied: noPermissionsApi },\n delete: { allowed: hcpApi, denied: hcpApi },\n },\n HealthcarePartyInGroup: {\n create: { allowed: masterApi, denied: noPermissionsApi },\n delete: { allowed: masterApi, denied: patientApi },\n },\n HealthcareParty: {\n create: { allowed: masterApi, denied: noPermissionsApi },\n delete: { allowed: masterApi, denied: patientApi },\n },\n HealthcareElement: {\n create: { allowed: masterApi, denied: noPermissionsApi },\n delete: { allowed: hcpApi, denied: hcpApi },\n },\n Insurance: {\n create: { allowed: masterApi, denied: noPermissionsApi },\n delete: { allowed: masterApi, denied: patientApi },\n },\n Invoice: {\n create: { allowed: masterApi, denied: noPermissionsApi },\n delete: { allowed: masterApi, denied: patientApi },\n },\n Keyword: {\n create: { allowed: masterApi, denied: noPermissionsApi },\n delete: { allowed: masterApi, denied: patientApi },\n },\n MaintenanceTask: {\n create: { allowed: masterApi, denied: noPermissionsApi },\n delete: { allowed: hcpApi, denied: hcpApi },\n },\n MedicalLocation: {\n create: { allowed: masterApi, denied: noPermissionsApi },\n delete: { allowed: masterApi, denied: patientApi },\n },\n Message: {\n create: { allowed: masterApi, denied: noPermissionsApi },\n delete: { allowed: hcpApi, denied: hcpApi },\n },\n Patient: {\n create: { allowed: masterApi, denied: noPermissionsApi },\n delete: { allowed: hcpApi, denied: hcpApi },\n },\n Place: {\n create: { allowed: masterApi, denied: noPermissionsApi },\n delete: { allowed: masterApi, denied: patientApi },\n },\n Receipt: {\n create: { allowed: masterApi, denied: noPermissionsApi },\n delete: { allowed: hcpApi, denied: hcpApi },\n },\n TimeTable: {\n create: { allowed: masterApi, denied: noPermissionsApi },\n delete: { allowed: hcpApi, denied: hcpApi },\n },\n Topic: {\n create: { allowed: masterApi, denied: noPermissionsApi },\n delete: { allowed: hcpApi, denied: hcpApi },\n },\n }\n })\n\n Object.entries(entities)\n .filter(([, operations]) => {\n return !isLiteTest() || !operations.cloudOnly\n })\n .forEach(([entityType, operations]) => {\n it(`A user with create permissions can create a ${entityType}`, async () => {\n const api = entitiesPermissions[entityType].create.allowed\n const entity = await operations.create(api, patient)\n expect(entity.rev).not.to.be.undefined\n })\n\n itNoLite(`A user without create permissions cannot create a ${entityType}`, async function () {\n if (!!operations.skipDenied) this.skip()\n const api = entitiesPermissions[entityType].create.denied\n if (!api) this.skip()\n await expect(operations.create(api, patient)).to.be.rejected\n })\n\n it(`A user can delete many ${entityType} if they have access to them`, async function () {\n if (!operations.encryptable) {\n this.skip()\n }\n const creationApi = entitiesPermissions[entityType].create.allowed\n const api = entitiesPermissions[entityType].delete.allowed\n const notAccessibleEntities: IdWithRev[] = []\n for (let i = 0; i <= 5; i++) {\n const entity = await operations.create(creationApi, patient)\n notAccessibleEntities.push(entity)\n }\n const accessibleEntities: IdWithRev[] = []\n for (let i = 0; i <= 5; i++) {\n const entity = await operations.create(creationApi, patient).then((e) => {\n return operations.share(creationApi, api, e)\n })\n accessibleEntities.push(entity)\n }\n const result = await operations.deleteMany(api, isLiteTest() ? accessibleEntities : notAccessibleEntities.concat(accessibleEntities))\n expect(result.length).to.be.equal(accessibleEntities.length)\n result.forEach((el) => {\n expect(accessibleEntities.find((it) => it.id === el.id)).not.to.be.undefined\n })\n })\n\n itNoLite(`A user can delete many ${entityType} if they have the correct role`, async function () {\n if (!!operations.encryptable) this.skip()\n const creationApi = entitiesPermissions[entityType].create.allowed\n const api = entitiesPermissions[entityType].delete.allowed\n const entities: IdWithRev[] = []\n for (let i = 0; i <= 5; i++) {\n const entity = await operations.create(creationApi, patient)\n entities.push(entity)\n }\n const result = await operations.deleteMany(api, entities)\n expect(result.length).to.be.equal(entities.length)\n result.forEach((el) => {\n expect(entities.find((it) => it.id === el.id)).not.to.be.undefined\n })\n })\n\n itNoLite(`A user cannot delete many ${entityType} if they do not have the correct role`, async function () {\n if (!!operations.skipDenied) this.skip()\n const creationApi = entitiesPermissions[entityType].create.allowed\n const api = entitiesPermissions[entityType].delete.denied\n if (!api) {\n throw new Error('An API is required to perform this test')\n }\n const entities: IdWithRev[] = []\n for (let i = 0; i <= 5; i++) {\n const entity = await operations.create(creationApi, patient)\n entities.push(entity)\n }\n await operations.deleteMany(api, entities).then(\n (result) => {\n expect(result).to.be.empty\n },\n () => {\n expect(true).to.be.eq(true, 'Response should be empty or promise rejected')\n }\n )\n })\n\n it(`A user can delete a single ${entityType} if they have access to it`, async function () {\n const creationApi = entitiesPermissions[entityType].create.allowed\n const api = entitiesPermissions[entityType].delete.allowed\n const entity = await operations.create(creationApi, patient).then((e) => {\n return operations.share(creationApi, api, e)\n })\n const result = await operations.delete(api, entity)\n expect(result.id).to.be.equal(entity.id)\n })\n\n itNoLite(`A user cannot delete a single ${entityType} if they do not have access to it`, async function () {\n if (!!operations.skipDenied) {\n this.skip()\n }\n const creationApi = entitiesPermissions[entityType].create.allowed\n const api = entitiesPermissions[entityType].delete.denied\n if (!api) {\n throw new Error('An API is required to perform this test')\n }\n const entity = await operations.create(creationApi, patient)\n await expect(operations.delete(api, entity)).to.be.rejected\n })\n\n it(`A user cannot delete a single ${entityType} that does not exist`, async function () {\n const api = entitiesPermissions[entityType].delete.allowed\n await expect(operations.delete(api, new IdWithRev({ id: randomUUID() }))).to.be.rejected\n })\n })\n})\n"]}
1
+ {"version":3,"file":"comprehensive-crud-test.js","sourceRoot":"","sources":["../../../../test/icc-x-api/crud/comprehensive-crud-test.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,4BAAyB;AACzB,iCAA8B;AAC9B,uDAS+B;AAC/B,mDAAmE;AACnE,kDAAgG;AAChG,mDAAkD;AAClD,+BAA6C;AAC7C,iFAAyD;AAEzD,gEAA4D;AAC5D,mCAA8C;AAC9C,2EAAuE;AACvE,IAAO,aAAa,GAAG,sBAAS,CAAC,aAAa,CAAA;AAC9C,IAAO,OAAO,GAAG,sBAAS,CAAC,OAAO,CAAA;AAElC,IAAA,UAAO,EAAC,cAAc,CAAC,CAAA;AAEvB,IAAA,4BAAe,EAAC,KAAK,CAAC,CAAA;AAKtB,IAAI,SAAmB,CAAA;AACvB,IAAI,MAAgB,CAAA;AACpB,IAAI,UAAoB,CAAA;AACxB,IAAI,gBAA0B,CAAA;AAC9B,IAAI,OAAgB,CAAA;AACpB,IAAI,mBAAyE,CAAA;AAE7E,IAAI,GAAa,CAAA;AAEjB,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;IACzB,IAAA,cAAM,EAAC;;YACL,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;YACpB,MAAM,WAAW,GAAG,MAAM,IAAA,sCAAyB,GAAE,CAAA;YACrD,GAAG,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,IAAA,uBAAe,GAAE,CAAC,CAAA;YAClD,SAAS,GAAG,MAAM,aAAa,CAAC,GAAG,CAAC,CAAA;YACpC,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,EAAE,yBAAY,CAAC,CAAA;YACzC,UAAU,GAAG,MAAM,OAAO,CAAC,GAAG,EAAE,wBAAW,CAAC,CAAA;YAC5C,MAAM,WAAW,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,cAAc,EAAE,CAAA;YAC7D,OAAO,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,kBAAkB,CAAC,WAAW,EAAE,WAAW,CAAC,SAAU,CAAC,CAAA;YAC7F,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,MAAM,IAAA,4BAAe,EAAC,GAAG,CAAC,CAAA;YAC7D,IAAI,CAAC,IAAA,uBAAU,GAAE;gBAAE,MAAM,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAG,EAAE,CAAC,YAAY,CAAC,CAAC,CAAA;YAE7E,MAAM,GAAG,GAAG,IAAI,wBAAY,CAAC,kBAAgB,CAAC,CAAA;YAC9C,MAAM,IAAI,GAAG;gBACX,SAAS,EAAE,MAAM,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,IAAA,iBAAK,EAAC,IAAA,kBAAM,EAAC,WAAW,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,sBAAU,CAAC,IAAI,CAAC;gBAC1G,UAAU,EAAE,MAAM,GAAG,CAAC,SAAS,CAAC,OAAO,EAAE,IAAA,iBAAK,EAAC,IAAA,kBAAM,EAAC,WAAW,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,sBAAU,CAAC,IAAI,CAAC;aAC9G,CAAA;YAED,gBAAgB,GAAG,MAAM,oBAAQ,CAAC,UAAU,CAC1C,GAAG,CAAC,QAAQ,EACZ,EAAE,QAAQ,EAAE,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,WAAW,CAAC,QAAQ,EAAE,EAC9D,IAAI,2CAAoB,CAAC,IAAI,CAAC,EAC9B,kBAAgB,EAChB,KAAK,CACN,CAAA;YAED,mBAAmB,GAAG;gBACpB,SAAS,EAAE;oBACT,MAAM,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,gBAAgB,EAAE;oBACxD,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE;iBAC5C;gBACD,MAAM,EAAE;oBACN,MAAM,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE;oBAC9B,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE;iBAChD;gBACD,OAAO,EAAE;oBACP,MAAM,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE;oBAClD,MAAM,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE;iBAC/C;gBACD,YAAY,EAAE;oBACZ,MAAM,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,gBAAgB,EAAE;oBACxD,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE;iBAC5C;gBACD,gBAAgB,EAAE;oBAChB,MAAM,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE;oBAC9B,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE;iBAChD;gBACD,cAAc,EAAE;oBACd,MAAM,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,gBAAgB,EAAE;oBACxD,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE;iBAC5C;gBACD,sBAAsB,EAAE;oBACtB,MAAM,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE;oBAClD,MAAM,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE;iBAC/C;gBACD,OAAO,EAAE;oBACP,MAAM,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,gBAAgB,EAAE;oBACxD,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE;iBAC5C;gBACD,MAAM,EAAE;oBACN,MAAM,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE;oBAC9B,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE;iBAChD;gBACD,QAAQ,EAAE;oBACR,MAAM,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,gBAAgB,EAAE;oBACxD,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE;iBAC5C;gBACD,IAAI,EAAE;oBACJ,MAAM,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,gBAAgB,EAAE;oBACxD,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE;iBAC5C;gBACD,sBAAsB,EAAE;oBACtB,MAAM,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,gBAAgB,EAAE;oBACxD,MAAM,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE;iBACnD;gBACD,eAAe,EAAE;oBACf,MAAM,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,gBAAgB,EAAE;oBACxD,MAAM,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE;iBACnD;gBACD,iBAAiB,EAAE;oBACjB,MAAM,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,gBAAgB,EAAE;oBACxD,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE;iBAC5C;gBACD,SAAS,EAAE;oBACT,MAAM,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,gBAAgB,EAAE;oBACxD,MAAM,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE;iBACnD;gBACD,OAAO,EAAE;oBACP,MAAM,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,gBAAgB,EAAE;oBACxD,MAAM,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE;iBACnD;gBACD,OAAO,EAAE;oBACP,MAAM,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,gBAAgB,EAAE;oBACxD,MAAM,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE;iBACnD;gBACD,eAAe,EAAE;oBACf,MAAM,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,gBAAgB,EAAE;oBACxD,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE;iBAC5C;gBACD,eAAe,EAAE;oBACf,MAAM,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,gBAAgB,EAAE;oBACxD,MAAM,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE;iBACnD;gBACD,OAAO,EAAE;oBACP,MAAM,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,gBAAgB,EAAE;oBACxD,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE;iBAC5C;gBACD,OAAO,EAAE;oBACP,MAAM,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,gBAAgB,EAAE;oBACxD,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE;iBAC5C;gBACD,KAAK,EAAE;oBACL,MAAM,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,gBAAgB,EAAE;oBACxD,MAAM,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE;iBACnD;gBACD,OAAO,EAAE;oBACP,MAAM,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,gBAAgB,EAAE;oBACxD,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE;iBAC5C;gBACD,SAAS,EAAE;oBACT,MAAM,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,gBAAgB,EAAE;oBACxD,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE;iBAC5C;gBACD,KAAK,EAAE;oBACL,MAAM,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,gBAAgB,EAAE;oBACxD,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE;iBAC5C;aACF,CAAA;QACH,CAAC;KAAA,CAAC,CAAA;IAEF,MAAM,CAAC,OAAO,CAAC,uCAAQ,CAAC;SACrB,MAAM,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,EAAE,EAAE;QACzB,OAAO,CAAC,IAAA,uBAAU,GAAE,IAAI,CAAC,UAAU,CAAC,SAAS,CAAA;IAC/C,CAAC,CAAC;SACD,OAAO,CAAC,CAAC,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE,EAAE;QACpC,EAAE,CAAC,+CAA+C,UAAU,EAAE,EAAE,GAAS,EAAE;YACzE,MAAM,GAAG,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,OAAO,CAAA;YAC1D,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;YACpD,IAAA,aAAM,EAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAA;QACxC,CAAC,CAAA,CAAC,CAAA;QAEF,IAAA,qBAAQ,EAAC,qDAAqD,UAAU,EAAE,EAAE;;gBAC1E,IAAI,CAAC,CAAC,UAAU,CAAC,UAAU;oBAAE,IAAI,CAAC,IAAI,EAAE,CAAA;gBACxC,MAAM,GAAG,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,MAAM,CAAA;gBACzD,IAAI,CAAC,GAAG;oBAAE,IAAI,CAAC,IAAI,EAAE,CAAA;gBACrB,MAAM,IAAA,aAAM,EAAC,UAAU,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAA;YAC9D,CAAC;SAAA,CAAC,CAAA;QAEF,EAAE,CAAC,0BAA0B,UAAU,8BAA8B,EAAE;;gBACrE,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;oBAC5B,IAAI,CAAC,IAAI,EAAE,CAAA;gBACb,CAAC;gBACD,MAAM,WAAW,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,OAAO,CAAA;gBAClE,MAAM,GAAG,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,OAAO,CAAA;gBAC1D,MAAM,qBAAqB,GAAgB,EAAE,CAAA;gBAC7C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC5B,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;oBAC5D,qBAAqB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;gBACpC,CAAC;gBACD,MAAM,kBAAkB,GAAgB,EAAE,CAAA;gBAC1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC5B,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;wBACtE,OAAO,UAAU,CAAC,KAAK,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC,CAAA;oBAC9C,CAAC,CAAC,CAAA;oBACF,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;gBACjC,CAAC;gBACD,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,GAAG,EAAE,IAAA,uBAAU,GAAE,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,qBAAqB,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,CAAA;gBACrI,IAAA,aAAM,EAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAA;gBAC5D,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE;oBACpB,IAAA,aAAM,EAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAA;gBAC9E,CAAC,CAAC,CAAA;YACJ,CAAC;SAAA,CAAC,CAAA;QAEF,IAAA,qBAAQ,EAAC,0BAA0B,UAAU,gCAAgC,EAAE;;gBAC7E,IAAI,CAAC,CAAC,UAAU,CAAC,WAAW;oBAAE,IAAI,CAAC,IAAI,EAAE,CAAA;gBACzC,MAAM,WAAW,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,OAAO,CAAA;gBAClE,MAAM,GAAG,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,OAAO,CAAA;gBAC1D,MAAM,QAAQ,GAAgB,EAAE,CAAA;gBAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC5B,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;oBAC5D,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;gBACvB,CAAC;gBACD,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAA;gBACzD,IAAA,aAAM,EAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;gBAClD,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE;oBACpB,IAAA,aAAM,EAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAA;gBACpE,CAAC,CAAC,CAAA;YACJ,CAAC;SAAA,CAAC,CAAA;QAEF,IAAA,qBAAQ,EAAC,6BAA6B,UAAU,uCAAuC,EAAE;;gBACvF,IAAI,CAAC,CAAC,UAAU,CAAC,UAAU;oBAAE,IAAI,CAAC,IAAI,EAAE,CAAA;gBACxC,MAAM,WAAW,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,OAAO,CAAA;gBAClE,MAAM,GAAG,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,MAAM,CAAA;gBACzD,IAAI,CAAC,GAAG,EAAE,CAAC;oBACT,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAA;gBAC5D,CAAC;gBACD,MAAM,QAAQ,GAAgB,EAAE,CAAA;gBAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC5B,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;oBAC5D,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;gBACvB,CAAC;gBACD,MAAM,UAAU,CAAC,UAAU,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,IAAI,CAC7C,CAAC,MAAM,EAAE,EAAE;oBACT,IAAA,aAAM,EAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAA;gBAC5B,CAAC,EACD,GAAG,EAAE;oBACH,IAAA,aAAM,EAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,8CAA8C,CAAC,CAAA;gBAC7E,CAAC,CACF,CAAA;YACH,CAAC;SAAA,CAAC,CAAA;QAEF,EAAE,CAAC,8BAA8B,UAAU,4BAA4B,EAAE;;gBACvE,MAAM,WAAW,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,OAAO,CAAA;gBAClE,MAAM,GAAG,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,OAAO,CAAA;gBAC1D,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;oBACtE,OAAO,UAAU,CAAC,KAAK,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC,CAAA;gBAC9C,CAAC,CAAC,CAAA;gBACF,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;gBACnD,IAAA,aAAM,EAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;YAC1C,CAAC;SAAA,CAAC,CAAA;QAEF,IAAA,qBAAQ,EAAC,iCAAiC,UAAU,mCAAmC,EAAE;;gBACvF,IAAI,CAAC,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC;oBAC5B,IAAI,CAAC,IAAI,EAAE,CAAA;gBACb,CAAC;gBACD,MAAM,WAAW,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,OAAO,CAAA;gBAClE,MAAM,GAAG,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,MAAM,CAAA;gBACzD,IAAI,CAAC,GAAG,EAAE,CAAC;oBACT,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAA;gBAC5D,CAAC;gBACD,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;gBAC5D,MAAM,IAAA,aAAM,EAAC,UAAU,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAA;YAC7D,CAAC;SAAA,CAAC,CAAA;QAEF,EAAE,CAAC,iCAAiC,UAAU,sBAAsB,EAAE;;gBACpE,MAAM,GAAG,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,OAAO,CAAA;gBAC1D,MAAM,IAAA,aAAM,EAAC,UAAU,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,qBAAS,CAAC,EAAE,EAAE,EAAE,IAAA,mBAAU,GAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAA;YAC1F,CAAC;SAAA,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACN,CAAC,CAAC,CAAA","sourcesContent":["import 'isomorphic-fetch'\nimport { before } from 'mocha'\nimport {\n createNewHcpApi,\n getEnvironmentInitializer,\n hcp1Username,\n isLiteTest,\n itNoLite,\n patUsername,\n setLocalStorage,\n TestUtils,\n} from '../../utils/test_utils'\nimport { getEnvVariables, TestVars } from '@icure/test-setup/types'\nimport { hex2ua, IcureApi, RSAUtils, RSAUtilsImpl, ShaVersion, ua2ab } from '../../../icc-x-api'\nimport * as chaiAsPromised from 'chai-as-promised'\nimport { expect, use as chaiUse } from 'chai'\nimport { entities } from './entities-crud-test-interface'\nimport { Patient } from '../../../icc-api/model/Patient'\nimport { IdWithRev } from '../../../icc-api/model/IdWithRev'\nimport { randomUUID, webcrypto } from 'crypto'\nimport { TestCryptoStrategies } from '../../utils/TestCryptoStrategies'\nimport initMasterApi = TestUtils.initMasterApi\nimport initApi = TestUtils.initApi\n\nchaiUse(chaiAsPromised)\n\nsetLocalStorage(fetch)\n\ntype OpType = 'create' | 'delete'\ntype ApisWithRole = { allowed: IcureApi; denied?: IcureApi }\n\nlet masterApi: IcureApi\nlet hcpApi: IcureApi\nlet patientApi: IcureApi\nlet noPermissionsApi: IcureApi\nlet patient: Patient\nlet entitiesPermissions: { [key: string]: { [key in OpType]: ApisWithRole } }\n\nlet env: TestVars\n\ndescribe('CRUD Test', () => {\n before(async function () {\n this.timeout(600000)\n const initializer = await getEnvironmentInitializer()\n env = await initializer.execute(getEnvVariables())\n masterApi = await initMasterApi(env)\n hcpApi = await initApi(env, hcp1Username)\n patientApi = await initApi(env, patUsername)\n const patientUser = await patientApi.userApi.getCurrentUser()\n patient = await patientApi.patientApi.getPatientWithUser(patientUser, patientUser.patientId!)\n const { api, credentials, user } = await createNewHcpApi(env)\n if (!isLiteTest()) await masterApi.userApi.setRoles(user.id!, ['BASIC_USER'])\n\n const RSA = new RSAUtilsImpl(webcrypto as any)\n const keys = {\n publicKey: await RSA.importKey('spki', ua2ab(hex2ua(credentials.publicKey)), ['encrypt'], ShaVersion.Sha1),\n privateKey: await RSA.importKey('pkcs8', ua2ab(hex2ua(credentials.privateKey)), ['decrypt'], ShaVersion.Sha1),\n }\n\n noPermissionsApi = await IcureApi.initialise(\n env.iCureUrl,\n { username: credentials.user, password: credentials.password },\n new TestCryptoStrategies(keys),\n webcrypto as any,\n fetch\n )\n\n entitiesPermissions = {\n AccessLog: {\n create: { allowed: masterApi, denied: noPermissionsApi },\n delete: { allowed: hcpApi, denied: hcpApi },\n },\n Agenda: {\n create: { allowed: masterApi },\n delete: { allowed: hcpApi, denied: patientApi },\n },\n Article: {\n create: { allowed: masterApi, denied: patientApi },\n delete: { allowed: masterApi, denied: hcpApi },\n },\n CalendarItem: {\n create: { allowed: masterApi, denied: noPermissionsApi },\n delete: { allowed: hcpApi, denied: hcpApi },\n },\n CalendarItemType: {\n create: { allowed: masterApi },\n delete: { allowed: hcpApi, denied: patientApi },\n },\n Classification: {\n create: { allowed: masterApi, denied: noPermissionsApi },\n delete: { allowed: hcpApi, denied: hcpApi },\n },\n ClassificationTemplate: {\n create: { allowed: masterApi, denied: patientApi },\n delete: { allowed: masterApi, denied: hcpApi },\n },\n Contact: {\n create: { allowed: masterApi, denied: noPermissionsApi },\n delete: { allowed: hcpApi, denied: hcpApi },\n },\n Device: {\n create: { allowed: masterApi },\n delete: { allowed: hcpApi, denied: patientApi },\n },\n Document: {\n create: { allowed: masterApi, denied: noPermissionsApi },\n delete: { allowed: hcpApi, denied: hcpApi },\n },\n Form: {\n create: { allowed: masterApi, denied: noPermissionsApi },\n delete: { allowed: hcpApi, denied: hcpApi },\n },\n HealthcarePartyInGroup: {\n create: { allowed: masterApi, denied: noPermissionsApi },\n delete: { allowed: masterApi, denied: patientApi },\n },\n HealthcareParty: {\n create: { allowed: masterApi, denied: noPermissionsApi },\n delete: { allowed: masterApi, denied: patientApi },\n },\n HealthcareElement: {\n create: { allowed: masterApi, denied: noPermissionsApi },\n delete: { allowed: hcpApi, denied: hcpApi },\n },\n Insurance: {\n create: { allowed: masterApi, denied: noPermissionsApi },\n delete: { allowed: masterApi, denied: patientApi },\n },\n Invoice: {\n create: { allowed: masterApi, denied: noPermissionsApi },\n delete: { allowed: masterApi, denied: patientApi },\n },\n Keyword: {\n create: { allowed: masterApi, denied: noPermissionsApi },\n delete: { allowed: masterApi, denied: patientApi },\n },\n MaintenanceTask: {\n create: { allowed: masterApi, denied: noPermissionsApi },\n delete: { allowed: hcpApi, denied: hcpApi },\n },\n MedicalLocation: {\n create: { allowed: masterApi, denied: noPermissionsApi },\n delete: { allowed: masterApi, denied: patientApi },\n },\n Message: {\n create: { allowed: masterApi, denied: noPermissionsApi },\n delete: { allowed: hcpApi, denied: hcpApi },\n },\n Patient: {\n create: { allowed: masterApi, denied: noPermissionsApi },\n delete: { allowed: hcpApi, denied: hcpApi },\n },\n Place: {\n create: { allowed: masterApi, denied: noPermissionsApi },\n delete: { allowed: masterApi, denied: patientApi },\n },\n Receipt: {\n create: { allowed: masterApi, denied: noPermissionsApi },\n delete: { allowed: hcpApi, denied: hcpApi },\n },\n TimeTable: {\n create: { allowed: masterApi, denied: noPermissionsApi },\n delete: { allowed: hcpApi, denied: hcpApi },\n },\n Topic: {\n create: { allowed: masterApi, denied: noPermissionsApi },\n delete: { allowed: hcpApi, denied: hcpApi },\n },\n }\n })\n\n Object.entries(entities)\n .filter(([, operations]) => {\n return !isLiteTest() || !operations.cloudOnly\n })\n .forEach(([entityType, operations]) => {\n it(`A user with create permissions can create a ${entityType}`, async () => {\n const api = entitiesPermissions[entityType].create.allowed\n const entity = await operations.create(api, patient)\n expect(entity.rev).not.to.be.undefined\n })\n\n itNoLite(`A user without create permissions cannot create a ${entityType}`, async function () {\n if (!!operations.skipDenied) this.skip()\n const api = entitiesPermissions[entityType].create.denied\n if (!api) this.skip()\n await expect(operations.create(api, patient)).to.be.rejected\n })\n\n it(`A user can delete many ${entityType} if they have access to them`, async function () {\n if (!operations.encryptable) {\n this.skip()\n }\n const creationApi = entitiesPermissions[entityType].create.allowed\n const api = entitiesPermissions[entityType].delete.allowed\n const notAccessibleEntities: IdWithRev[] = []\n for (let i = 0; i <= 5; i++) {\n const entity = await operations.create(creationApi, patient)\n notAccessibleEntities.push(entity)\n }\n const accessibleEntities: IdWithRev[] = []\n for (let i = 0; i <= 5; i++) {\n const entity = await operations.create(creationApi, patient).then((e) => {\n return operations.share(creationApi, api, e)\n })\n accessibleEntities.push(entity)\n }\n const result = await operations.deleteMany(api, isLiteTest() ? accessibleEntities : notAccessibleEntities.concat(accessibleEntities))\n expect(result.length).to.be.equal(accessibleEntities.length)\n result.forEach((el) => {\n expect(accessibleEntities.find((it) => it.id === el.id)).not.to.be.undefined\n })\n })\n\n itNoLite(`A user can delete many ${entityType} if they have the correct role`, async function () {\n if (!!operations.encryptable) this.skip()\n const creationApi = entitiesPermissions[entityType].create.allowed\n const api = entitiesPermissions[entityType].delete.allowed\n const entities: IdWithRev[] = []\n for (let i = 0; i <= 5; i++) {\n const entity = await operations.create(creationApi, patient)\n entities.push(entity)\n }\n const result = await operations.deleteMany(api, entities)\n expect(result.length).to.be.equal(entities.length)\n result.forEach((el) => {\n expect(entities.find((it) => it.id === el.id)).not.to.be.undefined\n })\n })\n\n itNoLite(`A user cannot delete many ${entityType} if they do not have the correct role`, async function () {\n if (!!operations.skipDenied) this.skip()\n const creationApi = entitiesPermissions[entityType].create.allowed\n const api = entitiesPermissions[entityType].delete.denied\n if (!api) {\n throw new Error('An API is required to perform this test')\n }\n const entities: IdWithRev[] = []\n for (let i = 0; i <= 5; i++) {\n const entity = await operations.create(creationApi, patient)\n entities.push(entity)\n }\n await operations.deleteMany(api, entities).then(\n (result) => {\n expect(result).to.be.empty\n },\n () => {\n expect(true).to.be.eq(true, 'Response should be empty or promise rejected')\n }\n )\n })\n\n it(`A user can delete a single ${entityType} if they have access to it`, async function () {\n const creationApi = entitiesPermissions[entityType].create.allowed\n const api = entitiesPermissions[entityType].delete.allowed\n const entity = await operations.create(creationApi, patient).then((e) => {\n return operations.share(creationApi, api, e)\n })\n const result = await operations.delete(api, entity)\n expect(result.id).to.be.equal(entity.id)\n })\n\n itNoLite(`A user cannot delete a single ${entityType} if they do not have access to it`, async function () {\n if (!!operations.skipDenied) {\n this.skip()\n }\n const creationApi = entitiesPermissions[entityType].create.allowed\n const api = entitiesPermissions[entityType].delete.denied\n if (!api) {\n throw new Error('An API is required to perform this test')\n }\n const entity = await operations.create(creationApi, patient)\n await expect(operations.delete(api, entity)).to.be.rejected\n })\n\n it(`A user cannot delete a single ${entityType} that does not exist`, async function () {\n const api = entitiesPermissions[entityType].delete.allowed\n await expect(operations.delete(api, new IdWithRev({ id: randomUUID() }))).to.be.rejected\n })\n })\n})\n"]}
@@ -67,7 +67,7 @@ describe('ArrayBuffer methods', () => {
67
67
  const pubKey = yield healthcarePartyApi.getCurrentHealthcareParty().then((hcp) => hcp.publicKey);
68
68
  const jwk1 = (0, index_1.spkiToJwk)((0, index_1.hex2ua)(pubKey), icc_x_api_1.ShaVersion.Sha1);
69
69
  const rsaKey1 = yield rsa.importKey('jwk', jwk1, ['encrypt'], icc_x_api_1.ShaVersion.Sha1);
70
- const rsaKey2 = yield rsa.importKey('spki', (0, index_1.hex2ua)(pubKey), ['encrypt'], icc_x_api_1.ShaVersion.Sha1);
70
+ const rsaKey2 = yield rsa.importKey('spki', (0, icc_x_api_1.ua2ab)((0, index_1.hex2ua)(pubKey)), ['encrypt'], icc_x_api_1.ShaVersion.Sha1);
71
71
  const jwk2 = yield rsa.exportKey(rsaKey2, 'jwk');
72
72
  const rsaKey3 = yield rsa.importKey('jwk', jwk2, ['encrypt'], icc_x_api_1.ShaVersion.Sha1);
73
73
  const n1 = (0, index_1.ua2hex)((0, icc_x_api_1.b64Url2ua)(jwk1.n));
@@ -1 +1 @@
1
- {"version":3,"file":"crypto-utils.js","sourceRoot":"","sources":["../../../../test/icc-x-api/crypto/crypto-utils.ts"],"names":[],"mappings":"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","sourcesContent":["import { b64Url2ua, RSAUtilsImpl, ShaVersion } from '../../../icc-x-api'\nimport { expect } from 'chai'\n\nimport 'mocha'\nimport { hex2ua, jwk2pkcs8, jwk2spki, pkcs8ToJwk, spkiToJwk, truncateTrailingNulls, ua2hex } from '../../../index'\nimport { crypto } from '../../../node-compat'\nimport { RSAUtils } from '../../../icc-x-api/crypto/RSA'\nimport { parseAsn1 } from '../../../icc-x-api/utils/asn1-parser'\nimport { getEnvironmentInitializer, hcp1Username } from '../../utils/test_utils'\nimport { TestApi } from '../../utils/TestApi'\nimport { getEnvVariables, TestVars } from '@icure/test-setup/types'\n\nlet env: TestVars\n\ndescribe('ArrayBuffer methods', () => {\n let rsa: RSAUtils\n\n before(async function () {\n this.timeout(600000)\n const initializer = await getEnvironmentInitializer()\n env = await initializer.execute(getEnvVariables())\n rsa = new RSAUtilsImpl(crypto)\n })\n\n describe('truncateTrailingNulls', () => {\n it('should truncate trailing nulls out of an Uint8Array without copying', () => {\n const bytes = [72, 101, 108, 108, 111, 33]\n const originalArray = Uint8Array.from([...bytes, 0, 0])\n const truncatedArray = truncateTrailingNulls(originalArray)\n expect(truncatedArray.buffer).to.equal(originalArray.buffer)\n expect(Array.from(truncatedArray)).to.eql(bytes)\n })\n\n it('should preserve the offset into the buffer', () => {\n const bytes = [72, 101, 108, 108, 111, 33]\n const originalBuffer = new Uint8Array([0, 0, ...bytes, 0, 0]).buffer\n const originalArray = new Uint8Array(originalBuffer, 2, bytes.length)\n const truncatedArray = truncateTrailingNulls(originalArray)\n expect(truncatedArray.buffer).to.equal(originalArray.buffer)\n expect(truncatedArray.byteOffset).to.equal(originalArray.byteOffset)\n expect(Array.from(truncatedArray)).to.eql(bytes)\n })\n })\n\n describe('convertKeysFormat', () => {\n it('should manage jwk conversions for private keys gracefully', async () => {\n const { healthcarePartyApi } = await TestApi(\n env.iCureUrl,\n env.dataOwnerDetails[hcp1Username].user,\n env.dataOwnerDetails[hcp1Username].password,\n crypto\n )\n const privKey = env.dataOwnerDetails[hcp1Username].privateKey\n const parsed = parseAsn1(new Uint8Array(hex2ua(privKey)))\n\n const jwk1 = pkcs8ToJwk(hex2ua(privKey))\n const pkcs8 = jwk2pkcs8(jwk1)\n const jwk2 = pkcs8ToJwk(hex2ua(pkcs8))\n\n expect(jwk1.n).to.equal(jwk2.n)\n\n const pubKey = await healthcarePartyApi.getCurrentHealthcareParty().then((hcp) => hcp.publicKey!)\n const jwk3 = spkiToJwk(hex2ua(pubKey), ShaVersion.Sha1)\n const spki = jwk2spki(jwk3)\n const jwk4 = spkiToJwk(hex2ua(spki), ShaVersion.Sha1)\n\n expect(jwk3.n).to.equal(jwk4.n)\n })\n\n it('should convert spki to jwk in a coherent way', async () => {\n const { healthcarePartyApi } = await TestApi(\n env.iCureUrl,\n env.dataOwnerDetails[hcp1Username].user,\n env.dataOwnerDetails[hcp1Username].password,\n crypto\n )\n const pubKey = await healthcarePartyApi.getCurrentHealthcareParty().then((hcp) => hcp.publicKey!)\n const jwk1 = spkiToJwk(hex2ua(pubKey), ShaVersion.Sha1)\n\n const rsaKey1 = await rsa.importKey('jwk', jwk1, ['encrypt'], ShaVersion.Sha1)\n const rsaKey2 = await rsa.importKey('spki', hex2ua(pubKey), ['encrypt'], ShaVersion.Sha1)\n const jwk2 = await rsa.exportKey(rsaKey2, 'jwk')\n const rsaKey3 = await rsa.importKey('jwk', jwk2, ['encrypt'], ShaVersion.Sha1)\n\n const n1 = ua2hex(b64Url2ua(jwk1.n))\n const n2 = ua2hex(b64Url2ua(jwk2.n!))\n\n expect(jwk1.n).to.equal(jwk2.n)\n })\n })\n})\n"]}
1
+ {"version":3,"file":"crypto-utils.js","sourceRoot":"","sources":["../../../../test/icc-x-api/crypto/crypto-utils.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,kDAA+E;AAC/E,+BAA6B;AAE7B,iBAAc;AACd,0CAAkH;AAClH,sDAA6C;AAE7C,sEAAgE;AAChE,uDAAgF;AAChF,iDAA6C;AAC7C,mDAAmE;AAEnE,IAAI,GAAa,CAAA;AAEjB,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACnC,IAAI,GAAa,CAAA;IAEjB,MAAM,CAAC;;YACL,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;YACpB,MAAM,WAAW,GAAG,MAAM,IAAA,sCAAyB,GAAE,CAAA;YACrD,GAAG,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,IAAA,uBAAe,GAAE,CAAC,CAAA;YAClD,GAAG,GAAG,IAAI,wBAAY,CAAC,oBAAM,CAAC,CAAA;QAChC,CAAC;KAAA,CAAC,CAAA;IAEF,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;QACrC,EAAE,CAAC,qEAAqE,EAAE,GAAG,EAAE;YAC7E,MAAM,KAAK,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,CAAA;YAC1C,MAAM,aAAa,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;YACvD,MAAM,cAAc,GAAG,IAAA,6BAAqB,EAAC,aAAa,CAAC,CAAA;YAC3D,IAAA,aAAM,EAAC,cAAc,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,CAAA;YAC5D,IAAA,aAAM,EAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;QAClD,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;YACpD,MAAM,KAAK,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,CAAA;YAC1C,MAAM,cAAc,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAA;YACpE,MAAM,aAAa,GAAG,IAAI,UAAU,CAAC,cAAc,EAAE,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAA;YACrE,MAAM,cAAc,GAAG,IAAA,6BAAqB,EAAC,aAAa,CAAC,CAAA;YAC3D,IAAA,aAAM,EAAC,cAAc,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,CAAA;YAC5D,IAAA,aAAM,EAAC,cAAc,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,UAAU,CAAC,CAAA;YACpE,IAAA,aAAM,EAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;QAClD,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;QACjC,EAAE,CAAC,2DAA2D,EAAE,GAAS,EAAE;YACzE,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,IAAA,iBAAO,EAC1C,GAAG,CAAC,QAAQ,EACZ,GAAG,CAAC,gBAAgB,CAAC,yBAAY,CAAC,CAAC,IAAI,EACvC,GAAG,CAAC,gBAAgB,CAAC,yBAAY,CAAC,CAAC,QAAQ,EAC3C,oBAAM,CACP,CAAA;YACD,MAAM,OAAO,GAAG,GAAG,CAAC,gBAAgB,CAAC,yBAAY,CAAC,CAAC,UAAU,CAAA;YAC7D,MAAM,MAAM,GAAG,IAAA,uBAAS,EAAC,IAAI,UAAU,CAAC,IAAA,cAAM,EAAC,OAAO,CAAC,CAAC,CAAC,CAAA;YAEzD,MAAM,IAAI,GAAG,IAAA,kBAAU,EAAC,IAAA,cAAM,EAAC,OAAO,CAAC,CAAC,CAAA;YACxC,MAAM,KAAK,GAAG,IAAA,iBAAS,EAAC,IAAI,CAAC,CAAA;YAC7B,MAAM,IAAI,GAAG,IAAA,kBAAU,EAAC,IAAA,cAAM,EAAC,KAAK,CAAC,CAAC,CAAA;YAEtC,IAAA,aAAM,EAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YAE/B,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,yBAAyB,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,SAAU,CAAC,CAAA;YACjG,MAAM,IAAI,GAAG,IAAA,iBAAS,EAAC,IAAA,cAAM,EAAC,MAAM,CAAC,EAAE,sBAAU,CAAC,IAAI,CAAC,CAAA;YACvD,MAAM,IAAI,GAAG,IAAA,gBAAQ,EAAC,IAAI,CAAC,CAAA;YAC3B,MAAM,IAAI,GAAG,IAAA,iBAAS,EAAC,IAAA,cAAM,EAAC,IAAI,CAAC,EAAE,sBAAU,CAAC,IAAI,CAAC,CAAA;YAErD,IAAA,aAAM,EAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjC,CAAC,CAAA,CAAC,CAAA;QAEF,EAAE,CAAC,8CAA8C,EAAE,GAAS,EAAE;YAC5D,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,IAAA,iBAAO,EAC1C,GAAG,CAAC,QAAQ,EACZ,GAAG,CAAC,gBAAgB,CAAC,yBAAY,CAAC,CAAC,IAAI,EACvC,GAAG,CAAC,gBAAgB,CAAC,yBAAY,CAAC,CAAC,QAAQ,EAC3C,oBAAM,CACP,CAAA;YACD,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,yBAAyB,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,SAAU,CAAC,CAAA;YACjG,MAAM,IAAI,GAAG,IAAA,iBAAS,EAAC,IAAA,cAAM,EAAC,MAAM,CAAC,EAAE,sBAAU,CAAC,IAAI,CAAC,CAAA;YAEvD,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,SAAS,CAAC,EAAE,sBAAU,CAAC,IAAI,CAAC,CAAA;YAC9E,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,IAAA,iBAAK,EAAC,IAAA,cAAM,EAAC,MAAM,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,sBAAU,CAAC,IAAI,CAAC,CAAA;YAChG,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;YAChD,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,SAAS,CAAC,EAAE,sBAAU,CAAC,IAAI,CAAC,CAAA;YAE9E,MAAM,EAAE,GAAG,IAAA,cAAM,EAAC,IAAA,qBAAS,EAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;YACpC,MAAM,EAAE,GAAG,IAAA,cAAM,EAAC,IAAA,qBAAS,EAAC,IAAI,CAAC,CAAE,CAAC,CAAC,CAAA;YAErC,IAAA,aAAM,EAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjC,CAAC,CAAA,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA","sourcesContent":["import { b64Url2ua, RSAUtilsImpl, ShaVersion, ua2ab } from '../../../icc-x-api'\nimport { expect } from 'chai'\n\nimport 'mocha'\nimport { hex2ua, jwk2pkcs8, jwk2spki, pkcs8ToJwk, spkiToJwk, truncateTrailingNulls, ua2hex } from '../../../index'\nimport { crypto } from '../../../node-compat'\nimport { RSAUtils } from '../../../icc-x-api/crypto/RSA'\nimport { parseAsn1 } from '../../../icc-x-api/utils/asn1-parser'\nimport { getEnvironmentInitializer, hcp1Username } from '../../utils/test_utils'\nimport { TestApi } from '../../utils/TestApi'\nimport { getEnvVariables, TestVars } from '@icure/test-setup/types'\n\nlet env: TestVars\n\ndescribe('ArrayBuffer methods', () => {\n let rsa: RSAUtils\n\n before(async function () {\n this.timeout(600000)\n const initializer = await getEnvironmentInitializer()\n env = await initializer.execute(getEnvVariables())\n rsa = new RSAUtilsImpl(crypto)\n })\n\n describe('truncateTrailingNulls', () => {\n it('should truncate trailing nulls out of an Uint8Array without copying', () => {\n const bytes = [72, 101, 108, 108, 111, 33]\n const originalArray = Uint8Array.from([...bytes, 0, 0])\n const truncatedArray = truncateTrailingNulls(originalArray)\n expect(truncatedArray.buffer).to.equal(originalArray.buffer)\n expect(Array.from(truncatedArray)).to.eql(bytes)\n })\n\n it('should preserve the offset into the buffer', () => {\n const bytes = [72, 101, 108, 108, 111, 33]\n const originalBuffer = new Uint8Array([0, 0, ...bytes, 0, 0]).buffer\n const originalArray = new Uint8Array(originalBuffer, 2, bytes.length)\n const truncatedArray = truncateTrailingNulls(originalArray)\n expect(truncatedArray.buffer).to.equal(originalArray.buffer)\n expect(truncatedArray.byteOffset).to.equal(originalArray.byteOffset)\n expect(Array.from(truncatedArray)).to.eql(bytes)\n })\n })\n\n describe('convertKeysFormat', () => {\n it('should manage jwk conversions for private keys gracefully', async () => {\n const { healthcarePartyApi } = await TestApi(\n env.iCureUrl,\n env.dataOwnerDetails[hcp1Username].user,\n env.dataOwnerDetails[hcp1Username].password,\n crypto\n )\n const privKey = env.dataOwnerDetails[hcp1Username].privateKey\n const parsed = parseAsn1(new Uint8Array(hex2ua(privKey)))\n\n const jwk1 = pkcs8ToJwk(hex2ua(privKey))\n const pkcs8 = jwk2pkcs8(jwk1)\n const jwk2 = pkcs8ToJwk(hex2ua(pkcs8))\n\n expect(jwk1.n).to.equal(jwk2.n)\n\n const pubKey = await healthcarePartyApi.getCurrentHealthcareParty().then((hcp) => hcp.publicKey!)\n const jwk3 = spkiToJwk(hex2ua(pubKey), ShaVersion.Sha1)\n const spki = jwk2spki(jwk3)\n const jwk4 = spkiToJwk(hex2ua(spki), ShaVersion.Sha1)\n\n expect(jwk3.n).to.equal(jwk4.n)\n })\n\n it('should convert spki to jwk in a coherent way', async () => {\n const { healthcarePartyApi } = await TestApi(\n env.iCureUrl,\n env.dataOwnerDetails[hcp1Username].user,\n env.dataOwnerDetails[hcp1Username].password,\n crypto\n )\n const pubKey = await healthcarePartyApi.getCurrentHealthcareParty().then((hcp) => hcp.publicKey!)\n const jwk1 = spkiToJwk(hex2ua(pubKey), ShaVersion.Sha1)\n\n const rsaKey1 = await rsa.importKey('jwk', jwk1, ['encrypt'], ShaVersion.Sha1)\n const rsaKey2 = await rsa.importKey('spki', ua2ab(hex2ua(pubKey)), ['encrypt'], ShaVersion.Sha1)\n const jwk2 = await rsa.exportKey(rsaKey2, 'jwk')\n const rsaKey3 = await rsa.importKey('jwk', jwk2, ['encrypt'], ShaVersion.Sha1)\n\n const n1 = ua2hex(b64Url2ua(jwk1.n))\n const n2 = ua2hex(b64Url2ua(jwk2.n!))\n\n expect(jwk1.n).to.equal(jwk2.n)\n })\n })\n})\n"]}
@@ -88,7 +88,7 @@ describe('SDL in an environment with soft-deleted data owners', function () {
88
88
  passwordHash: userPw,
89
89
  healthcarePartyId: hcp.id,
90
90
  });
91
- const hcpKeypair = yield primitives.RSA.importKeyPair('pkcs8', (0, icc_x_api_1.hex2ua)(privKeyHex), 'spki', (0, icc_x_api_1.hex2ua)(pubKeyHex), icc_x_api_1.ShaVersion.Sha1);
91
+ const hcpKeypair = yield primitives.RSA.importKeyPair('pkcs8', (0, icc_x_api_1.ua2ab)((0, icc_x_api_1.hex2ua)(privKeyHex)), 'spki', (0, icc_x_api_1.ua2ab)((0, icc_x_api_1.hex2ua)(pubKeyHex)), icc_x_api_1.ShaVersion.Sha1);
92
92
  const testApi = yield (0, TestApi_1.TestApi)(env.iCureUrl, user.email, userPw, crypto_1.webcrypto, hcpKeypair);
93
93
  const selfKeys = yield testApi.cryptoApi.exchangeKeys.getDecryptionExchangeKeysFor(hcp.id, hcp.id);
94
94
  (0, chai_1.expect)(selfKeys.length).to.eq(1);
@@ -1 +1 @@
1
- {"version":3,"file":"soft-deleted-data-owners.js","sourceRoot":"","sources":["../../../../test/icc-x-api/crypto/soft-deleted-data-owners.ts"],"names":[],"mappings":"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","sourcesContent":["import 'isomorphic-fetch'\nimport 'mocha'\nimport { createNewHcpApi, getEnvironmentInitializer, setLocalStorage, TestUtils } from '../../utils/test_utils'\nimport { before } from 'mocha'\nimport { getEnvVariables, TestVars } from '@icure/test-setup/types'\nimport { CryptoPrimitives, hex2ua, IcureApi, ShaVersion, ua2hex } from '../../../icc-x-api'\nimport { randomUUID, webcrypto } from 'crypto'\nimport { HealthcareParty } from '../../../icc-api/model/HealthcareParty'\nimport { TestApi } from '../../utils/TestApi'\nimport { he } from 'date-fns/locale'\nimport { expect } from 'chai'\n\nsetLocalStorage(fetch)\n\ndescribe('SDL in an environment with soft-deleted data owners', async function () {\n this.timeout(600000)\n let env: TestVars\n let masterApi: IcureApi\n let primitives: CryptoPrimitives\n\n // Test values, not real data\n const pubKeyHex =\n '30820122300d06092a864886f70d01010105000382010f003082010a0282010100a53f247f466c8f4e39d04ac72e260949f66d0e6f0aa2875d670f3d7f6c7f45ecbfe8ce31a26abbca8008d75d135339a739ca3e0ee058b9595722db46701cd0dfbb9ef4f96d1ac337cf78fe4449a26be244020464d44ff0d3bf0b7bcb53666750fa76298e832386eb6e5a6e15d2e366e5c8e53acf0a6ecf20a43fd752f708797e58aaa60ceec23cf3ddc5eacca6630a068ef0e7ea52bfdec756456124610b5bcce6025e2cd4a03eb54a7bc2076531348136671102a89ea3a275147b273bfb17f11b759f20c2068c5ba4fa081cc7087b582300d8acb7c6bcc2b8485290d7c165f855180176662fa08af735e64091086d6d5d1f6a2fb1ccc08799369fcd6d68d8250203010001' // pragma: allowlist secret\n const privKeyHex =\n '308204bd020100300d06092a864886f70d0101010500048204a7308204a30201000282010100a53f247f466c8f4e39d04ac72e260949f66d0e6f0aa2875d670f3d7f6c7f45ecbfe8ce31a26abbca8008d75d135339a739ca3e0ee058b9595722db46701cd0dfbb9ef4f96d1ac337cf78fe4449a26be244020464d44ff0d3bf0b7bcb53666750fa76298e832386eb6e5a6e15d2e366e5c8e53acf0a6ecf20a43fd752f708797e58aaa60ceec23cf3ddc5eacca6630a068ef0e7ea52bfdec756456124610b5bcce6025e2cd4a03eb54a7bc2076531348136671102a89ea3a275147b273bfb17f11b759f20c2068c5ba4fa081cc7087b582300d8acb7c6bcc2b8485290d7c165f855180176662fa08af735e64091086d6d5d1f6a2fb1ccc08799369fcd6d68d8250203010001028201000189beeb385a9652e212e03f4e5ca84579f7b5e4aeb2a893e3fbae54db4babf8f2285692fbb206a171e3a32d889a83b4dcc2d725084d8b1c1bc58548f88e2c1b890187c23293c73163cafa82e43490d080558c78ebc8fab2ddda5b829efa1b0813ecb9a24bf22eb54e47a532aacdd70d587b59bac79c146d7759e8c52aeb774603f4b282e699aca98793aa0086233a8aafc8fad58b62df011f33c1dcc6efdfc9aa51f4f11ea450ba5e02f9b69de33c756f3504ff086d2e58c25db871e3c021ee3720837466bb41d886bd4300eeac41742206110158578315d29a527b520e11ec6f7e98558931bdde63a4402635473244fa9764bb3527ff33473ff08f63b3a94102818100c8032014c593f8aecc15287d3dfd6143c75e8fb27faf7944fa030016b26fa5133d8e0d13a5244bcd6155ba29258a498e44fef239dc75dee9db4756c9a2b2be93cf2c67049ff2b2f5cbf949960e44e3fc56c90a66485ec22079a0eb864100404e0d7ea96f21ced9793633d87c49056be4c507768d51c310f69605befec087bbcd02818100d380b7a8cbc5a87c5d91e1497949acfe3c61671b31bc4c54f2f8e8cd8e709a617b49d1e7d6c0333fbb42af119db8660d1a58165e716b976bebdb12104c0dba951719f8c6711e84b704bcdd80248a767609680e4ff125126a23bbee5362f88d881c5c24c5ff0400edde1dd7044fd0d5d06a9cda33a1004daad7df8aa2eb63a5b90281801d0ab721ccfe8b617628ac546327e373a0034f0230201e8fb16db61995973874eebf2d8ee8afb881fddc20c7d0b79fae94be2015deb90ec10e21f1ac1d7faec46f9496f0c8f8c89b801e965cbf7da94cfe9cfa7197988abf8469a5493d2ef8275d36430bebf0c90b1c9fb2937956dc2fbf9c31ce9b4ca3adea62b334f267c3110281806453facb275e6bbe12e4d0697a0f68f070d40384f2e2cf92bc6f367fcbc1be79df71f51074de577133f33df8ad487ba05b8ecd8d9f5fda44676d53f4471f7c129d12c4dfdd690cab84a3d2aea6a6c7ead62b761e95d57016c93caca101a1c6017af27abf316944c79145b66965333b39d258f568e846ac910e360c1d9c6b788102818100879751ba5fe91d86410037ca9df05b2bb689734af710ab50a75b1aa1083dd596f295d710ba630c9fbfe6dcdedd8f0fca22595f8723376e72721c01275572692ebd2d5b39d5715ea052ed0968a9dabb76f7eef7c4c894a5031ae237772c21b62a43322e324c793fccf8b3abe340ca029e54255ed735549918352f3abaaf0850b7' // pragma: allowlist secret\n const deletedOtherId = 'dc88f05e-6f9f-4203-bc8d-59b1737322f4' // pragma: allowlist secret\n const exchangeKeySelf = '6aac0c669a4423d5fed7c8d5a434ddf70e8f9ab34db8104cf88d810a535f2701' // pragma: allowlist secret\n const exchangeKeyOther = '24a58ab4837d2a7dbed477abf03c87816dfbae113604a1e3d93093194291907e' // pragma: allowlist secret\n function makeTestHcp(props: { includeHcPartyKeys?: boolean; includeAesExchangeKeys?: boolean }): HealthcareParty {\n const hcpId = primitives.randomUuid()\n return new HealthcareParty({\n id: hcpId,\n name: `Test-${primitives.randomUuid()}`,\n hcPartyKeys: props.includeHcPartyKeys\n ? {\n [hcpId]: [\n '785fd227c9a4bb185adea3070fdc571696df3f5e513ba7fe3e5f50b0cf5a449def0cbc7e806a626945c441adcd09feaf6c6bf3da6460347efc620be3b81bdbf3804cabdfdeac3f4d5417db0191a3a1032e57670be7db630256c862db0ed87a67454c8660cb30e7bd8bf3d3ec218dae2107616933e3882200add851ae49cb2ec731f0425f1cea7d69a530d6debff6c60e1663733c946e48ac800a70044ecc32bb5cbe184484e4bb6ac3ad42435e80d6c3d2b8684d1cfff9fe77bdb3fdaae71482f018945d878175a12407af3b9ef245cc6128ea956292f8e7f5e2d74368de42445675326b7e1dbd7990502cb098b1abef8e33f3d353a332912221d0039f787c69', // pragma: allowlist secret\n '785fd227c9a4bb185adea3070fdc571696df3f5e513ba7fe3e5f50b0cf5a449def0cbc7e806a626945c441adcd09feaf6c6bf3da6460347efc620be3b81bdbf3804cabdfdeac3f4d5417db0191a3a1032e57670be7db630256c862db0ed87a67454c8660cb30e7bd8bf3d3ec218dae2107616933e3882200add851ae49cb2ec731f0425f1cea7d69a530d6debff6c60e1663733c946e48ac800a70044ecc32bb5cbe184484e4bb6ac3ad42435e80d6c3d2b8684d1cfff9fe77bdb3fdaae71482f018945d878175a12407af3b9ef245cc6128ea956292f8e7f5e2d74368de42445675326b7e1dbd7990502cb098b1abef8e33f3d353a332912221d0039f787c69', // pragma: allowlist secret\n ],\n 'dc88f05e-6f9f-4203-bc8d-59b1737322f4': [\n // pragma: allowlist secret\n '9e8ce2e76f0716a5ff537ea56c6ec7725ed067afc3a8c1eb8ef63f5a6c6de1a901c651c433f558224be3ea6e09748c2dfa535b0d9114a5058126db7803a21ba99dc9877b372e6fbbdacf6d8e3410ee93c985959ab4f0267acf562619fee7723f050542ecfc1642dcf6f5d678994d58d8c83d8be65b5f399af19205777216d9eb28ecbb00c5ce57f253973403845f98b94d86361cccaeb33772aa491b9c1dc1fc95c0a9f74b2d26e895a4ff80d9b32fd318ea42088e6249f027a2b6afe98bd9dece83dc24e454a8a62e78b88952f38a87cdb580dda47c87496e44a5fde0e9886289aeded4a404411a1e28d28fc09fd305f4f43e0bce0c3605eb419b2795be70e7', // pragma: allowlist secret\n '27511848a060104b0b92447df4a6e1a11de92d65892b6d07104eab6add3ce57f664a1fd2431e509818a232e0601f0621ecf35df4492c53b18ceb21747a51cd863852c586fa9f3a0dd4e19b1038540ecc63724115cbb6909793a1ffceea4498dc7ae5e9fd4120912c13b276639036a6d859a2cc836b267aaeb33a876c8d40caa5ae4c5fde2122b1d3107f074ad28c38be6a96b5c899d5fda2e66c8bef4a541c41f177e868d8e521b35be07b96def15a6b15cd5a8d1e6fc2df3ce6fbd280d315082160054d904f71cd8b4d3822a2812a1a5224390ec4591319c0bad98429ccadba3f04f9b602d92a9e95f367bdd03fe5c943d4bc9ea595be27f53797b3d7c00f03', // pragma: allowlist secret\n ],\n }\n : {},\n aesExchangeKeys: props.includeAesExchangeKeys\n ? {\n // pragma: allowlist nextline secret\n '30820122300d06092a864886f70d01010105000382010f003082010a0282010100a53f247f466c8f4e39d04ac72e260949f66d0e6f0aa2875d670f3d7f6c7f45ecbfe8ce31a26abbca8008d75d135339a739ca3e0ee058b9595722db46701cd0dfbb9ef4f96d1ac337cf78fe4449a26be244020464d44ff0d3bf0b7bcb53666750fa76298e832386eb6e5a6e15d2e366e5c8e53acf0a6ecf20a43fd752f708797e58aaa60ceec23cf3ddc5eacca6630a068ef0e7ea52bfdec756456124610b5bcce6025e2cd4a03eb54a7bc2076531348136671102a89ea3a275147b273bfb17f11b759f20c2068c5ba4fa081cc7087b582300d8acb7c6bcc2b8485290d7c165f855180176662fa08af735e64091086d6d5d1f6a2fb1ccc08799369fcd6d68d8250203010001':\n {\n [hcpId]: {\n // pragma: allowlist secret\n ccc08799369fcd6d68d8250203010001:\n '785fd227c9a4bb185adea3070fdc571696df3f5e513ba7fe3e5f50b0cf5a449def0cbc7e806a626945c441adcd09feaf6c6bf3da6460347efc620be3b81bdbf3804cabdfdeac3f4d5417db0191a3a1032e57670be7db630256c862db0ed87a67454c8660cb30e7bd8bf3d3ec218dae2107616933e3882200add851ae49cb2ec731f0425f1cea7d69a530d6debff6c60e1663733c946e48ac800a70044ecc32bb5cbe184484e4bb6ac3ad42435e80d6c3d2b8684d1cfff9fe77bdb3fdaae71482f018945d878175a12407af3b9ef245cc6128ea956292f8e7f5e2d74368de42445675326b7e1dbd7990502cb098b1abef8e33f3d353a332912221d0039f787c69', // pragma: allowlist secret\n },\n 'dc88f05e-6f9f-4203-bc8d-59b1737322f4': {\n // pragma: allowlist secret\n // pragma: allowlist secret\n ccc08799369fcd6d68d8250203010001:\n '9e8ce2e76f0716a5ff537ea56c6ec7725ed067afc3a8c1eb8ef63f5a6c6de1a901c651c433f558224be3ea6e09748c2dfa535b0d9114a5058126db7803a21ba99dc9877b372e6fbbdacf6d8e3410ee93c985959ab4f0267acf562619fee7723f050542ecfc1642dcf6f5d678994d58d8c83d8be65b5f399af19205777216d9eb28ecbb00c5ce57f253973403845f98b94d86361cccaeb33772aa491b9c1dc1fc95c0a9f74b2d26e895a4ff80d9b32fd318ea42088e6249f027a2b6afe98bd9dece83dc24e454a8a62e78b88952f38a87cdb580dda47c87496e44a5fde0e9886289aeded4a404411a1e28d28fc09fd305f4f43e0bce0c3605eb419b2795be70e7', // pragma: allowlist secret\n // pragma: allowlist nextline secret\n '0c8b6fa8a116ecfee683b10203010001':\n '27511848a060104b0b92447df4a6e1a11de92d65892b6d07104eab6add3ce57f664a1fd2431e509818a232e0601f0621ecf35df4492c53b18ceb21747a51cd863852c586fa9f3a0dd4e19b1038540ecc63724115cbb6909793a1ffceea4498dc7ae5e9fd4120912c13b276639036a6d859a2cc836b267aaeb33a876c8d40caa5ae4c5fde2122b1d3107f074ad28c38be6a96b5c899d5fda2e66c8bef4a541c41f177e868d8e521b35be07b96def15a6b15cd5a8d1e6fc2df3ce6fbd280d315082160054d904f71cd8b4d3822a2812a1a5224390ec4591319c0bad98429ccadba3f04f9b602d92a9e95f367bdd03fe5c943d4bc9ea595be27f53797b3d7c00f03', // pragma: allowlist secret\n },\n },\n }\n : {},\n publicKey: pubKeyHex,\n })\n }\n\n before(async function () {\n const initializer = await getEnvironmentInitializer()\n env = await initializer.execute(getEnvVariables())\n masterApi = await TestUtils.initMasterApi(env)\n primitives = masterApi.cryptoApi.primitives\n })\n\n async function doLegacyKeysTestWithDeletedDataOwner(hcp: HealthcareParty) {\n const userPw = primitives.randomUuid()\n const user = await masterApi.userApi.createUser({\n id: primitives.randomUuid(),\n email: `${primitives.randomUuid()}@test.icure.com`,\n passwordHash: userPw,\n healthcarePartyId: hcp.id!,\n })\n const hcpKeypair = await primitives.RSA.importKeyPair('pkcs8', hex2ua(privKeyHex), 'spki', hex2ua(pubKeyHex), ShaVersion.Sha1)\n const testApi = await TestApi(env.iCureUrl, user.email!, userPw, webcrypto as any, hcpKeypair)\n const selfKeys = await testApi.cryptoApi.exchangeKeys.getDecryptionExchangeKeysFor(hcp.id!, hcp.id!)\n expect(selfKeys.length).to.eq(1)\n const selfKeyHex = ua2hex(await primitives.AES.exportKey(selfKeys[0], 'raw'))\n expect(selfKeyHex).to.eq(exchangeKeySelf)\n const delegateKeys = await testApi.cryptoApi.exchangeKeys.getDecryptionExchangeKeysFor(hcp.id!, deletedOtherId)\n expect(delegateKeys.length).to.eq(1)\n const delegateKeysHex = ua2hex(await primitives.AES.exportKey(delegateKeys[0], 'raw'))\n expect(delegateKeysHex).to.eq(exchangeKeyOther)\n }\n\n it('hcp with hcPartyKeys to soft-deleted user', async () => {\n const hcp = await masterApi.healthcarePartyApi.createHealthcareParty(makeTestHcp({ includeHcPartyKeys: true }))\n await doLegacyKeysTestWithDeletedDataOwner(hcp)\n })\n\n it('hcp with aesExchangeKeys to soft-deleted user', async () => {\n const hcp = await masterApi.healthcarePartyApi.createHealthcareParty(makeTestHcp({ includeAesExchangeKeys: true }))\n await doLegacyKeysTestWithDeletedDataOwner(hcp)\n })\n})\n"]}
1
+ {"version":3,"file":"soft-deleted-data-owners.js","sourceRoot":"","sources":["../../../../test/icc-x-api/crypto/soft-deleted-data-owners.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,4BAAyB;AACzB,iBAAc;AACd,uDAA+G;AAC/G,iCAA8B;AAC9B,mDAAmE;AACnE,kDAAkG;AAClG,mCAA8C;AAC9C,4EAAwE;AACxE,iDAA6C;AAE7C,+BAA6B;AAE7B,IAAA,4BAAe,EAAC,KAAK,CAAC,CAAA;AAEtB,QAAQ,CAAC,qDAAqD,EAAE;;QAC9D,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;QACpB,IAAI,GAAa,CAAA;QACjB,IAAI,SAAmB,CAAA;QACvB,IAAI,UAA4B,CAAA;QAEhC,6BAA6B;QAC7B,MAAM,SAAS,GACb,8kBAA8kB,CAAA,CAAC,2BAA2B;QAC5mB,MAAM,UAAU,GACd,o4EAAo4E,CAAA,CAAC,2BAA2B;QACl6E,MAAM,cAAc,GAAG,sCAAsC,CAAA,CAAC,2BAA2B;QACzF,MAAM,eAAe,GAAG,kEAAkE,CAAA,CAAC,2BAA2B;QACtH,MAAM,gBAAgB,GAAG,kEAAkE,CAAA,CAAC,2BAA2B;QACvH,SAAS,WAAW,CAAC,KAAyE;YAC5F,MAAM,KAAK,GAAG,UAAU,CAAC,UAAU,EAAE,CAAA;YACrC,OAAO,IAAI,iCAAe,CAAC;gBACzB,EAAE,EAAE,KAAK;gBACT,IAAI,EAAE,QAAQ,UAAU,CAAC,UAAU,EAAE,EAAE;gBACvC,WAAW,EAAE,KAAK,CAAC,kBAAkB;oBACnC,CAAC,CAAC;wBACE,CAAC,KAAK,CAAC,EAAE;4BACP,kgBAAkgB,EAAE,2BAA2B;4BAC/hB,kgBAAkgB,EAAE,2BAA2B;yBAChiB;wBACD,sCAAsC,EAAE;4BACtC,2BAA2B;4BAC3B,kgBAAkgB,EAAE,2BAA2B;4BAC/hB,kgBAAkgB,EAAE,2BAA2B;yBAChiB;qBACF;oBACH,CAAC,CAAC,EAAE;gBACN,eAAe,EAAE,KAAK,CAAC,sBAAsB;oBAC3C,CAAC,CAAC;wBACE,oCAAoC;wBACpC,8kBAA8kB,EAC5kB;4BACE,CAAC,KAAK,CAAC,EAAE;gCACP,2BAA2B;gCAC3B,gCAAgC,EAC9B,kgBAAkgB,EAAE,2BAA2B;6BACliB;4BACD,sCAAsC,EAAE;gCACtC,2BAA2B;gCAC3B,2BAA2B;gCAC3B,gCAAgC,EAC9B,kgBAAkgB,EAAE,2BAA2B;gCACjiB,oCAAoC;gCACpC,kCAAkC,EAChC,kgBAAkgB,EAAE,2BAA2B;6BACliB;yBACF;qBACJ;oBACH,CAAC,CAAC,EAAE;gBACN,SAAS,EAAE,SAAS;aACrB,CAAC,CAAA;QACJ,CAAC;QAED,IAAA,cAAM,EAAC;;gBACL,MAAM,WAAW,GAAG,MAAM,IAAA,sCAAyB,GAAE,CAAA;gBACrD,GAAG,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,IAAA,uBAAe,GAAE,CAAC,CAAA;gBAClD,SAAS,GAAG,MAAM,sBAAS,CAAC,aAAa,CAAC,GAAG,CAAC,CAAA;gBAC9C,UAAU,GAAG,SAAS,CAAC,SAAS,CAAC,UAAU,CAAA;YAC7C,CAAC;SAAA,CAAC,CAAA;QAEF,SAAe,oCAAoC,CAAC,GAAoB;;gBACtE,MAAM,MAAM,GAAG,UAAU,CAAC,UAAU,EAAE,CAAA;gBACtC,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC;oBAC9C,EAAE,EAAE,UAAU,CAAC,UAAU,EAAE;oBAC3B,KAAK,EAAE,GAAG,UAAU,CAAC,UAAU,EAAE,iBAAiB;oBAClD,YAAY,EAAE,MAAM;oBACpB,iBAAiB,EAAE,GAAG,CAAC,EAAG;iBAC3B,CAAC,CAAA;gBACF,MAAM,UAAU,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,aAAa,CAAC,OAAO,EAAE,IAAA,iBAAK,EAAC,IAAA,kBAAM,EAAC,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,IAAA,iBAAK,EAAC,IAAA,kBAAM,EAAC,SAAS,CAAC,CAAC,EAAE,sBAAU,CAAC,IAAI,CAAC,CAAA;gBAC5I,MAAM,OAAO,GAAG,MAAM,IAAA,iBAAO,EAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAM,EAAE,MAAM,EAAE,kBAAgB,EAAE,UAAU,CAAC,CAAA;gBAC9F,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,YAAY,CAAC,4BAA4B,CAAC,GAAG,CAAC,EAAG,EAAE,GAAG,CAAC,EAAG,CAAC,CAAA;gBACpG,IAAA,aAAM,EAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;gBAChC,MAAM,UAAU,GAAG,IAAA,kBAAM,EAAC,MAAM,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAA;gBAC7E,IAAA,aAAM,EAAC,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,eAAe,CAAC,CAAA;gBACzC,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,YAAY,CAAC,4BAA4B,CAAC,GAAG,CAAC,EAAG,EAAE,cAAc,CAAC,CAAA;gBAC/G,IAAA,aAAM,EAAC,YAAY,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;gBACpC,MAAM,eAAe,GAAG,IAAA,kBAAM,EAAC,MAAM,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAA;gBACtF,IAAA,aAAM,EAAC,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAA;YACjD,CAAC;SAAA;QAED,EAAE,CAAC,2CAA2C,EAAE,GAAS,EAAE;YACzD,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,kBAAkB,CAAC,qBAAqB,CAAC,WAAW,CAAC,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;YAC/G,MAAM,oCAAoC,CAAC,GAAG,CAAC,CAAA;QACjD,CAAC,CAAA,CAAC,CAAA;QAEF,EAAE,CAAC,+CAA+C,EAAE,GAAS,EAAE;YAC7D,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,kBAAkB,CAAC,qBAAqB,CAAC,WAAW,CAAC,EAAE,sBAAsB,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;YACnH,MAAM,oCAAoC,CAAC,GAAG,CAAC,CAAA;QACjD,CAAC,CAAA,CAAC,CAAA;IACJ,CAAC;CAAA,CAAC,CAAA","sourcesContent":["import 'isomorphic-fetch'\nimport 'mocha'\nimport { createNewHcpApi, getEnvironmentInitializer, setLocalStorage, TestUtils } from '../../utils/test_utils'\nimport { before } from 'mocha'\nimport { getEnvVariables, TestVars } from '@icure/test-setup/types'\nimport { CryptoPrimitives, hex2ua, IcureApi, ShaVersion, ua2ab, ua2hex } from '../../../icc-x-api'\nimport { randomUUID, webcrypto } from 'crypto'\nimport { HealthcareParty } from '../../../icc-api/model/HealthcareParty'\nimport { TestApi } from '../../utils/TestApi'\nimport { he } from 'date-fns/locale'\nimport { expect } from 'chai'\n\nsetLocalStorage(fetch)\n\ndescribe('SDL in an environment with soft-deleted data owners', async function () {\n this.timeout(600000)\n let env: TestVars\n let masterApi: IcureApi\n let primitives: CryptoPrimitives\n\n // Test values, not real data\n const pubKeyHex =\n '30820122300d06092a864886f70d01010105000382010f003082010a0282010100a53f247f466c8f4e39d04ac72e260949f66d0e6f0aa2875d670f3d7f6c7f45ecbfe8ce31a26abbca8008d75d135339a739ca3e0ee058b9595722db46701cd0dfbb9ef4f96d1ac337cf78fe4449a26be244020464d44ff0d3bf0b7bcb53666750fa76298e832386eb6e5a6e15d2e366e5c8e53acf0a6ecf20a43fd752f708797e58aaa60ceec23cf3ddc5eacca6630a068ef0e7ea52bfdec756456124610b5bcce6025e2cd4a03eb54a7bc2076531348136671102a89ea3a275147b273bfb17f11b759f20c2068c5ba4fa081cc7087b582300d8acb7c6bcc2b8485290d7c165f855180176662fa08af735e64091086d6d5d1f6a2fb1ccc08799369fcd6d68d8250203010001' // pragma: allowlist secret\n const privKeyHex =\n '308204bd020100300d06092a864886f70d0101010500048204a7308204a30201000282010100a53f247f466c8f4e39d04ac72e260949f66d0e6f0aa2875d670f3d7f6c7f45ecbfe8ce31a26abbca8008d75d135339a739ca3e0ee058b9595722db46701cd0dfbb9ef4f96d1ac337cf78fe4449a26be244020464d44ff0d3bf0b7bcb53666750fa76298e832386eb6e5a6e15d2e366e5c8e53acf0a6ecf20a43fd752f708797e58aaa60ceec23cf3ddc5eacca6630a068ef0e7ea52bfdec756456124610b5bcce6025e2cd4a03eb54a7bc2076531348136671102a89ea3a275147b273bfb17f11b759f20c2068c5ba4fa081cc7087b582300d8acb7c6bcc2b8485290d7c165f855180176662fa08af735e64091086d6d5d1f6a2fb1ccc08799369fcd6d68d8250203010001028201000189beeb385a9652e212e03f4e5ca84579f7b5e4aeb2a893e3fbae54db4babf8f2285692fbb206a171e3a32d889a83b4dcc2d725084d8b1c1bc58548f88e2c1b890187c23293c73163cafa82e43490d080558c78ebc8fab2ddda5b829efa1b0813ecb9a24bf22eb54e47a532aacdd70d587b59bac79c146d7759e8c52aeb774603f4b282e699aca98793aa0086233a8aafc8fad58b62df011f33c1dcc6efdfc9aa51f4f11ea450ba5e02f9b69de33c756f3504ff086d2e58c25db871e3c021ee3720837466bb41d886bd4300eeac41742206110158578315d29a527b520e11ec6f7e98558931bdde63a4402635473244fa9764bb3527ff33473ff08f63b3a94102818100c8032014c593f8aecc15287d3dfd6143c75e8fb27faf7944fa030016b26fa5133d8e0d13a5244bcd6155ba29258a498e44fef239dc75dee9db4756c9a2b2be93cf2c67049ff2b2f5cbf949960e44e3fc56c90a66485ec22079a0eb864100404e0d7ea96f21ced9793633d87c49056be4c507768d51c310f69605befec087bbcd02818100d380b7a8cbc5a87c5d91e1497949acfe3c61671b31bc4c54f2f8e8cd8e709a617b49d1e7d6c0333fbb42af119db8660d1a58165e716b976bebdb12104c0dba951719f8c6711e84b704bcdd80248a767609680e4ff125126a23bbee5362f88d881c5c24c5ff0400edde1dd7044fd0d5d06a9cda33a1004daad7df8aa2eb63a5b90281801d0ab721ccfe8b617628ac546327e373a0034f0230201e8fb16db61995973874eebf2d8ee8afb881fddc20c7d0b79fae94be2015deb90ec10e21f1ac1d7faec46f9496f0c8f8c89b801e965cbf7da94cfe9cfa7197988abf8469a5493d2ef8275d36430bebf0c90b1c9fb2937956dc2fbf9c31ce9b4ca3adea62b334f267c3110281806453facb275e6bbe12e4d0697a0f68f070d40384f2e2cf92bc6f367fcbc1be79df71f51074de577133f33df8ad487ba05b8ecd8d9f5fda44676d53f4471f7c129d12c4dfdd690cab84a3d2aea6a6c7ead62b761e95d57016c93caca101a1c6017af27abf316944c79145b66965333b39d258f568e846ac910e360c1d9c6b788102818100879751ba5fe91d86410037ca9df05b2bb689734af710ab50a75b1aa1083dd596f295d710ba630c9fbfe6dcdedd8f0fca22595f8723376e72721c01275572692ebd2d5b39d5715ea052ed0968a9dabb76f7eef7c4c894a5031ae237772c21b62a43322e324c793fccf8b3abe340ca029e54255ed735549918352f3abaaf0850b7' // pragma: allowlist secret\n const deletedOtherId = 'dc88f05e-6f9f-4203-bc8d-59b1737322f4' // pragma: allowlist secret\n const exchangeKeySelf = '6aac0c669a4423d5fed7c8d5a434ddf70e8f9ab34db8104cf88d810a535f2701' // pragma: allowlist secret\n const exchangeKeyOther = '24a58ab4837d2a7dbed477abf03c87816dfbae113604a1e3d93093194291907e' // pragma: allowlist secret\n function makeTestHcp(props: { includeHcPartyKeys?: boolean; includeAesExchangeKeys?: boolean }): HealthcareParty {\n const hcpId = primitives.randomUuid()\n return new HealthcareParty({\n id: hcpId,\n name: `Test-${primitives.randomUuid()}`,\n hcPartyKeys: props.includeHcPartyKeys\n ? {\n [hcpId]: [\n '785fd227c9a4bb185adea3070fdc571696df3f5e513ba7fe3e5f50b0cf5a449def0cbc7e806a626945c441adcd09feaf6c6bf3da6460347efc620be3b81bdbf3804cabdfdeac3f4d5417db0191a3a1032e57670be7db630256c862db0ed87a67454c8660cb30e7bd8bf3d3ec218dae2107616933e3882200add851ae49cb2ec731f0425f1cea7d69a530d6debff6c60e1663733c946e48ac800a70044ecc32bb5cbe184484e4bb6ac3ad42435e80d6c3d2b8684d1cfff9fe77bdb3fdaae71482f018945d878175a12407af3b9ef245cc6128ea956292f8e7f5e2d74368de42445675326b7e1dbd7990502cb098b1abef8e33f3d353a332912221d0039f787c69', // pragma: allowlist secret\n '785fd227c9a4bb185adea3070fdc571696df3f5e513ba7fe3e5f50b0cf5a449def0cbc7e806a626945c441adcd09feaf6c6bf3da6460347efc620be3b81bdbf3804cabdfdeac3f4d5417db0191a3a1032e57670be7db630256c862db0ed87a67454c8660cb30e7bd8bf3d3ec218dae2107616933e3882200add851ae49cb2ec731f0425f1cea7d69a530d6debff6c60e1663733c946e48ac800a70044ecc32bb5cbe184484e4bb6ac3ad42435e80d6c3d2b8684d1cfff9fe77bdb3fdaae71482f018945d878175a12407af3b9ef245cc6128ea956292f8e7f5e2d74368de42445675326b7e1dbd7990502cb098b1abef8e33f3d353a332912221d0039f787c69', // pragma: allowlist secret\n ],\n 'dc88f05e-6f9f-4203-bc8d-59b1737322f4': [\n // pragma: allowlist secret\n '9e8ce2e76f0716a5ff537ea56c6ec7725ed067afc3a8c1eb8ef63f5a6c6de1a901c651c433f558224be3ea6e09748c2dfa535b0d9114a5058126db7803a21ba99dc9877b372e6fbbdacf6d8e3410ee93c985959ab4f0267acf562619fee7723f050542ecfc1642dcf6f5d678994d58d8c83d8be65b5f399af19205777216d9eb28ecbb00c5ce57f253973403845f98b94d86361cccaeb33772aa491b9c1dc1fc95c0a9f74b2d26e895a4ff80d9b32fd318ea42088e6249f027a2b6afe98bd9dece83dc24e454a8a62e78b88952f38a87cdb580dda47c87496e44a5fde0e9886289aeded4a404411a1e28d28fc09fd305f4f43e0bce0c3605eb419b2795be70e7', // pragma: allowlist secret\n '27511848a060104b0b92447df4a6e1a11de92d65892b6d07104eab6add3ce57f664a1fd2431e509818a232e0601f0621ecf35df4492c53b18ceb21747a51cd863852c586fa9f3a0dd4e19b1038540ecc63724115cbb6909793a1ffceea4498dc7ae5e9fd4120912c13b276639036a6d859a2cc836b267aaeb33a876c8d40caa5ae4c5fde2122b1d3107f074ad28c38be6a96b5c899d5fda2e66c8bef4a541c41f177e868d8e521b35be07b96def15a6b15cd5a8d1e6fc2df3ce6fbd280d315082160054d904f71cd8b4d3822a2812a1a5224390ec4591319c0bad98429ccadba3f04f9b602d92a9e95f367bdd03fe5c943d4bc9ea595be27f53797b3d7c00f03', // pragma: allowlist secret\n ],\n }\n : {},\n aesExchangeKeys: props.includeAesExchangeKeys\n ? {\n // pragma: allowlist nextline secret\n '30820122300d06092a864886f70d01010105000382010f003082010a0282010100a53f247f466c8f4e39d04ac72e260949f66d0e6f0aa2875d670f3d7f6c7f45ecbfe8ce31a26abbca8008d75d135339a739ca3e0ee058b9595722db46701cd0dfbb9ef4f96d1ac337cf78fe4449a26be244020464d44ff0d3bf0b7bcb53666750fa76298e832386eb6e5a6e15d2e366e5c8e53acf0a6ecf20a43fd752f708797e58aaa60ceec23cf3ddc5eacca6630a068ef0e7ea52bfdec756456124610b5bcce6025e2cd4a03eb54a7bc2076531348136671102a89ea3a275147b273bfb17f11b759f20c2068c5ba4fa081cc7087b582300d8acb7c6bcc2b8485290d7c165f855180176662fa08af735e64091086d6d5d1f6a2fb1ccc08799369fcd6d68d8250203010001':\n {\n [hcpId]: {\n // pragma: allowlist secret\n ccc08799369fcd6d68d8250203010001:\n '785fd227c9a4bb185adea3070fdc571696df3f5e513ba7fe3e5f50b0cf5a449def0cbc7e806a626945c441adcd09feaf6c6bf3da6460347efc620be3b81bdbf3804cabdfdeac3f4d5417db0191a3a1032e57670be7db630256c862db0ed87a67454c8660cb30e7bd8bf3d3ec218dae2107616933e3882200add851ae49cb2ec731f0425f1cea7d69a530d6debff6c60e1663733c946e48ac800a70044ecc32bb5cbe184484e4bb6ac3ad42435e80d6c3d2b8684d1cfff9fe77bdb3fdaae71482f018945d878175a12407af3b9ef245cc6128ea956292f8e7f5e2d74368de42445675326b7e1dbd7990502cb098b1abef8e33f3d353a332912221d0039f787c69', // pragma: allowlist secret\n },\n 'dc88f05e-6f9f-4203-bc8d-59b1737322f4': {\n // pragma: allowlist secret\n // pragma: allowlist secret\n ccc08799369fcd6d68d8250203010001:\n '9e8ce2e76f0716a5ff537ea56c6ec7725ed067afc3a8c1eb8ef63f5a6c6de1a901c651c433f558224be3ea6e09748c2dfa535b0d9114a5058126db7803a21ba99dc9877b372e6fbbdacf6d8e3410ee93c985959ab4f0267acf562619fee7723f050542ecfc1642dcf6f5d678994d58d8c83d8be65b5f399af19205777216d9eb28ecbb00c5ce57f253973403845f98b94d86361cccaeb33772aa491b9c1dc1fc95c0a9f74b2d26e895a4ff80d9b32fd318ea42088e6249f027a2b6afe98bd9dece83dc24e454a8a62e78b88952f38a87cdb580dda47c87496e44a5fde0e9886289aeded4a404411a1e28d28fc09fd305f4f43e0bce0c3605eb419b2795be70e7', // pragma: allowlist secret\n // pragma: allowlist nextline secret\n '0c8b6fa8a116ecfee683b10203010001':\n '27511848a060104b0b92447df4a6e1a11de92d65892b6d07104eab6add3ce57f664a1fd2431e509818a232e0601f0621ecf35df4492c53b18ceb21747a51cd863852c586fa9f3a0dd4e19b1038540ecc63724115cbb6909793a1ffceea4498dc7ae5e9fd4120912c13b276639036a6d859a2cc836b267aaeb33a876c8d40caa5ae4c5fde2122b1d3107f074ad28c38be6a96b5c899d5fda2e66c8bef4a541c41f177e868d8e521b35be07b96def15a6b15cd5a8d1e6fc2df3ce6fbd280d315082160054d904f71cd8b4d3822a2812a1a5224390ec4591319c0bad98429ccadba3f04f9b602d92a9e95f367bdd03fe5c943d4bc9ea595be27f53797b3d7c00f03', // pragma: allowlist secret\n },\n },\n }\n : {},\n publicKey: pubKeyHex,\n })\n }\n\n before(async function () {\n const initializer = await getEnvironmentInitializer()\n env = await initializer.execute(getEnvVariables())\n masterApi = await TestUtils.initMasterApi(env)\n primitives = masterApi.cryptoApi.primitives\n })\n\n async function doLegacyKeysTestWithDeletedDataOwner(hcp: HealthcareParty) {\n const userPw = primitives.randomUuid()\n const user = await masterApi.userApi.createUser({\n id: primitives.randomUuid(),\n email: `${primitives.randomUuid()}@test.icure.com`,\n passwordHash: userPw,\n healthcarePartyId: hcp.id!,\n })\n const hcpKeypair = await primitives.RSA.importKeyPair('pkcs8', ua2ab(hex2ua(privKeyHex)), 'spki', ua2ab(hex2ua(pubKeyHex)), ShaVersion.Sha1)\n const testApi = await TestApi(env.iCureUrl, user.email!, userPw, webcrypto as any, hcpKeypair)\n const selfKeys = await testApi.cryptoApi.exchangeKeys.getDecryptionExchangeKeysFor(hcp.id!, hcp.id!)\n expect(selfKeys.length).to.eq(1)\n const selfKeyHex = ua2hex(await primitives.AES.exportKey(selfKeys[0], 'raw'))\n expect(selfKeyHex).to.eq(exchangeKeySelf)\n const delegateKeys = await testApi.cryptoApi.exchangeKeys.getDecryptionExchangeKeysFor(hcp.id!, deletedOtherId)\n expect(delegateKeys.length).to.eq(1)\n const delegateKeysHex = ua2hex(await primitives.AES.exportKey(delegateKeys[0], 'raw'))\n expect(delegateKeysHex).to.eq(exchangeKeyOther)\n }\n\n it('hcp with hcPartyKeys to soft-deleted user', async () => {\n const hcp = await masterApi.healthcarePartyApi.createHealthcareParty(makeTestHcp({ includeHcPartyKeys: true }))\n await doLegacyKeysTestWithDeletedDataOwner(hcp)\n })\n\n it('hcp with aesExchangeKeys to soft-deleted user', async () => {\n const hcp = await masterApi.healthcarePartyApi.createHealthcareParty(makeTestHcp({ includeAesExchangeKeys: true }))\n await doLegacyKeysTestWithDeletedDataOwner(hcp)\n })\n})\n"]}
@@ -157,7 +157,7 @@ let env;
157
157
  return {
158
158
  [hcpsInfo.parentCredentials.dataOwnerId]: {
159
159
  recoveredKeys: {
160
- [hcpsInfo.parentCredentials.publicKey.slice(-32)]: yield cryptoPrimitives.RSA.importKeyPair('pkcs8', (0, icc_x_api_1.hex2ua)(hcpsInfo.parentCredentials.privateKey), 'spki', (0, icc_x_api_1.hex2ua)(hcpsInfo.parentCredentials.publicKey), icc_x_api_1.ShaVersion.Sha1),
160
+ [hcpsInfo.parentCredentials.publicKey.slice(-32)]: yield cryptoPrimitives.RSA.importKeyPair('pkcs8', (0, icc_x_api_1.ua2ab)((0, icc_x_api_1.hex2ua)(hcpsInfo.parentCredentials.privateKey)), 'spki', (0, icc_x_api_1.ua2ab)((0, icc_x_api_1.hex2ua)(hcpsInfo.parentCredentials.publicKey)), icc_x_api_1.ShaVersion.Sha1),
161
161
  },
162
162
  keyAuthenticity: {},
163
163
  },