@icure/api 8.6.3 → 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 (78) 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/utils/binary-utils.js +1 -1
  53. package/icc-x-api/utils/binary-utils.js.map +1 -1
  54. package/package.json +1 -1
  55. package/test/icc-api/api/IccAnonymousAccessApi.js +1 -1
  56. package/test/icc-api/api/IccAnonymousAccessApi.js.map +1 -1
  57. package/test/icc-api/api/IccDocumentApi.js +13 -12
  58. package/test/icc-api/api/IccDocumentApi.js.map +1 -1
  59. package/test/icc-x-api/crud/comprehensive-crud-test.js +2 -2
  60. package/test/icc-x-api/crud/comprehensive-crud-test.js.map +1 -1
  61. package/test/icc-x-api/crypto/crypto-utils.js +1 -1
  62. package/test/icc-x-api/crypto/crypto-utils.js.map +1 -1
  63. package/test/icc-x-api/crypto/soft-deleted-data-owners.js +1 -1
  64. package/test/icc-x-api/crypto/soft-deleted-data-owners.js.map +1 -1
  65. package/test/icc-x-api/crypto/user-encryption-keys-manager-test.js +1 -1
  66. package/test/icc-x-api/crypto/user-encryption-keys-manager-test.js.map +1 -1
  67. package/test/icc-x-api/filters/healthelement.d.ts +1 -0
  68. package/test/icc-x-api/filters/healthelement.js +333 -0
  69. package/test/icc-x-api/filters/healthelement.js.map +1 -0
  70. package/test/icc-x-api/test-legacy-data-support.js +4 -4
  71. package/test/icc-x-api/test-legacy-data-support.js.map +1 -1
  72. package/test/utils/TestCryptoStrategies.js +1 -1
  73. package/test/utils/TestCryptoStrategies.js.map +1 -1
  74. package/test/utils/roles.d.ts +1 -0
  75. package/test/utils/roles.js +1 -0
  76. package/test/utils/roles.js.map +1 -1
  77. package/test/utils/test_utils.js +2 -2
  78. package/test/utils/test_utils.js.map +1 -1
@@ -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":";;;;;;;;;;;AAAA,kDAAwE;AACxE,+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,cAAM,EAAC,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,sBAAU,CAAC,IAAI,CAAC,CAAA;YACzF,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 } 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":"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","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":"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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, 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
  },
@@ -1 +1 @@
1
- {"version":3,"file":"user-encryption-keys-manager-test.js","sourceRoot":"","sources":["../../../../test/icc-x-api/crypto/user-encryption-keys-manager-test.ts"],"names":[],"mappings":"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","sourcesContent":["import { v4 as uuid } from 'uuid'\nimport { User } from '../../../icc-api/model/User'\nimport { before, describe, it } from 'mocha'\n\nimport { webcrypto } from 'crypto'\nimport 'isomorphic-fetch'\nimport { expect } from 'chai'\nimport { createHcpHierarchyApis, createNewHcpWithoutKeyAndParentWithKey, getEnvironmentInitializer, setLocalStorage } from '../../utils/test_utils'\nimport { TestKeyStorage, TestStorage, testStorageWithKeys } from '../../utils/TestStorage'\nimport { TestCryptoStrategies } from '../../utils/TestCryptoStrategies'\nimport { getEnvVariables, TestVars, UserDetails } from '@icure/test-setup/types'\nimport { CryptoPrimitives, CryptoStrategies, hex2ua, IcureApi, KeyPair, ShaVersion } from '../../../icc-x-api'\nimport { ua2hex } from '@icure/apiV6'\nimport { DataOwnerWithType } from '../../../icc-api/model/DataOwnerWithType'\nimport { CryptoActorStubWithType } from '../../../icc-api/model/CryptoActorStub'\n\nsetLocalStorage(fetch)\n\nlet env: TestVars\n\ndescribe('Key manager', async function () {\n this.timeout(600000)\n\n before(async function () {\n const initializer = await getEnvironmentInitializer()\n env = await initializer.execute(getEnvVariables())\n })\n\n it(`Should not ask crypto strategies to recover available keys`, async () => {\n const apis = await createHcpHierarchyApis(env)\n const storageWithoutParentKey = await testStorageWithKeys([\n {\n dataOwnerId: apis.grandCredentials.dataOwnerId,\n pairs: [\n { keyPair: { privateKey: apis.grandCredentials.privateKey, publicKey: apis.grandCredentials.publicKey }, shaVersion: ShaVersion.Sha1 },\n ],\n },\n {\n dataOwnerId: apis.childCredentials.dataOwnerId,\n pairs: [\n { keyPair: { privateKey: apis.childCredentials.privateKey, publicKey: apis.childCredentials.publicKey }, shaVersion: ShaVersion.Sha1 },\n ],\n },\n ])\n const cryptoStrats = new TestCryptoStrategies(undefined, {}, undefined, {\n [apis.parentCredentials.dataOwnerId]: {\n pair: { privateKey: apis.parentCredentials.privateKey, publicKey: apis.parentCredentials.publicKey },\n shaVersion: ShaVersion.Sha1,\n },\n })\n await IcureApi.initialise(\n env.iCureUrl,\n { username: apis.childCredentials.user, password: apis.childCredentials.password },\n cryptoStrats,\n webcrypto as any,\n fetch,\n {\n storage: storageWithoutParentKey.storage,\n keyStorage: storageWithoutParentKey.keyStorage,\n entryKeysFactory: storageWithoutParentKey.keyFactory,\n }\n )\n expect(cryptoStrats.recoverAndVerifyCallsParams).to.have.length(1)\n const params = cryptoStrats.recoverAndVerifyCallsParams[0]\n expect(params).to.have.length(3)\n expect(params[0].dataOwner.dataOwner.id).to.equal(apis.grandCredentials.dataOwnerId)\n expect(params[0].unavailableKeys).to.be.empty\n expect(params[0].unknownKeys).to.be.empty\n expect(params[1].dataOwner.dataOwner.id).to.equal(apis.parentCredentials.dataOwnerId)\n expect(params[1].unavailableKeys).to.have.members([apis.parentCredentials.publicKey])\n expect(params[1].unknownKeys).to.have.members([apis.parentCredentials.publicKey])\n expect(params[2].dataOwner.dataOwner.id).to.equal(apis.childCredentials.dataOwnerId)\n expect(params[2].unavailableKeys).to.be.empty\n expect(params[2].unknownKeys).to.be.empty\n })\n\n it('Should not ask crypto strategies to recover keys if all keys are available', async () => {\n const apis = await createHcpHierarchyApis(env)\n const storageWithoutParentKey = await testStorageWithKeys([\n {\n dataOwnerId: apis.grandCredentials.dataOwnerId,\n pairs: [\n { keyPair: { privateKey: apis.grandCredentials.privateKey, publicKey: apis.grandCredentials.publicKey }, shaVersion: ShaVersion.Sha1 },\n ],\n },\n {\n dataOwnerId: apis.parentCredentials.dataOwnerId,\n pairs: [\n { keyPair: { privateKey: apis.parentCredentials.privateKey, publicKey: apis.parentCredentials.publicKey }, shaVersion: ShaVersion.Sha1 },\n ],\n },\n {\n dataOwnerId: apis.childCredentials.dataOwnerId,\n pairs: [\n { keyPair: { privateKey: apis.childCredentials.privateKey, publicKey: apis.childCredentials.publicKey }, shaVersion: ShaVersion.Sha1 },\n ],\n },\n ])\n const cryptoStrats = new TestCryptoStrategies()\n await IcureApi.initialise(\n env.iCureUrl,\n { username: apis.childCredentials.user, password: apis.childCredentials.password },\n cryptoStrats,\n webcrypto as any,\n fetch,\n {\n storage: storageWithoutParentKey.storage,\n keyStorage: storageWithoutParentKey.keyStorage,\n entryKeysFactory: storageWithoutParentKey.keyFactory,\n }\n )\n expect(cryptoStrats.recoverAndVerifyCallsParams).to.have.length(0)\n })\n\n it('Should allow to retrieve all keys for a data owner and his parents', async () => {\n const apis = await createHcpHierarchyApis(env)\n const keysData = await apis.childApi.cryptoApi.getEncryptionDecryptionKeypairsForDataOwnerHierarchy()\n async function checkKey(userDetails: UserDetails, key: KeyPair<CryptoKey>) {\n const exportedPrivateKey = ua2hex(await apis.childApi.cryptoApi.primitives.RSA.exportKey(key.privateKey, 'pkcs8'))\n const exportedPublicKey = ua2hex(await apis.childApi.cryptoApi.primitives.RSA.exportKey(key.publicKey, 'spki'))\n expect(exportedPublicKey).to.equal(userDetails.publicKey)\n expect(exportedPrivateKey).to.equal(userDetails.privateKey)\n }\n expect(keysData.self.dataOwnerId).to.equal(apis.childCredentials.dataOwnerId)\n expect(keysData.self.keys).to.have.length(1)\n expect(keysData.self.keys[0].verified).to.be.true\n await checkKey(apis.childCredentials, keysData.self.keys[0].pair)\n expect(keysData.parents).to.have.length(2)\n expect(keysData.parents[0].dataOwnerId).to.equal(apis.grandCredentials.dataOwnerId)\n expect(keysData.parents[0].keys).to.have.length(1)\n await checkKey(apis.grandCredentials, keysData.parents[0].keys[0].pair)\n expect(keysData.parents[1].dataOwnerId).to.equal(apis.parentCredentials.dataOwnerId)\n expect(keysData.parents[1].keys).to.have.length(1)\n await checkKey(apis.parentCredentials, keysData.parents[1].keys[0].pair)\n })\n\n it('If a HCP has no key yet, but the parent does the crypto strategies should first ask to recover the keys for the parent then ask for the generation of a new key to the data owner', async () => {\n const hcpsInfo = await createNewHcpWithoutKeyAndParentWithKey(env)\n const cryptoStrats = new (class implements CryptoStrategies {\n generateNewKeyCalled: boolean = false\n recoverCalled: boolean = false\n generatedKeyPair: KeyPair<CryptoKey> | undefined = undefined\n\n async generateNewKeyForDataOwner(self: DataOwnerWithType, cryptoPrimitives: CryptoPrimitives): Promise<KeyPair<CryptoKey> | boolean> {\n if (this.generateNewKeyCalled) throw new Error('generateNewKeyForDataOwner called twice')\n if (!this.recoverCalled) throw new Error('generateNewKeyForDataOwner called before recoverAndVerifySelfHierarchyKeys')\n this.generateNewKeyCalled = true\n expect(self.dataOwner.id).to.equal(hcpsInfo.childDataOwnerId)\n return (this.generatedKeyPair = await cryptoPrimitives.RSA.generateKeyPair(ShaVersion.Sha256))\n }\n\n async recoverAndVerifySelfHierarchyKeys(\n keysData: {\n dataOwner: DataOwnerWithType\n unknownKeys: string[]\n unavailableKeys: string[]\n }[],\n cryptoPrimitives: CryptoPrimitives\n ): Promise<{\n [p: string]: { recoveredKeys: { [p: string]: KeyPair<CryptoKey> }; keyAuthenticity: { [p: string]: boolean } }\n }> {\n if (this.recoverCalled) throw new Error('recoverAndVerifySelfHierarchyKeys called twice')\n this.recoverCalled = true\n expect(keysData).to.have.length(2)\n expect(keysData[0].dataOwner.dataOwner.id).to.equal(hcpsInfo.parentCredentials.dataOwnerId)\n expect(keysData[0].unknownKeys).to.have.members([hcpsInfo.parentCredentials.publicKey])\n expect(keysData[0].unavailableKeys).to.have.members([hcpsInfo.parentCredentials.publicKey])\n expect(keysData[1].dataOwner.dataOwner.id).to.equal(hcpsInfo.childDataOwnerId)\n expect(keysData[1].unknownKeys).to.be.empty\n expect(keysData[1].unavailableKeys).to.be.empty\n return {\n [hcpsInfo.parentCredentials.dataOwnerId]: {\n recoveredKeys: {\n [hcpsInfo.parentCredentials.publicKey.slice(-32)]: await cryptoPrimitives.RSA.importKeyPair(\n 'pkcs8',\n hex2ua(hcpsInfo.parentCredentials.privateKey),\n 'spki',\n hex2ua(hcpsInfo.parentCredentials.publicKey),\n ShaVersion.Sha1\n ),\n },\n keyAuthenticity: {},\n },\n [hcpsInfo.childDataOwnerId]: {\n recoveredKeys: {},\n keyAuthenticity: {},\n },\n }\n }\n\n verifyDelegatePublicKeys(delegate: CryptoActorStubWithType, publicKeys: string[], cryptoPrimitives: CryptoPrimitives): Promise<string[]> {\n throw new Error('This method should not be called by this test')\n }\n\n dataOwnerRequiresAnonymousDelegation(dataOwner: CryptoActorStubWithType): boolean {\n return false\n }\n })()\n const childApi = await IcureApi.initialise(\n env.iCureUrl,\n { username: hcpsInfo.childUser, password: hcpsInfo.childPassword },\n cryptoStrats,\n webcrypto as any,\n fetch,\n {\n storage: new TestStorage(),\n keyStorage: new TestKeyStorage(),\n }\n )\n expect(cryptoStrats.generateNewKeyCalled).to.be.true\n expect(cryptoStrats.recoverCalled).to.be.true\n const keys = Array.from(childApi.dataOwnerApi.getHexPublicKeysOf((await childApi.dataOwnerApi.getCurrentDataOwner()).dataOwner))\n expect(keys).to.have.length(1)\n expect(Array.from(keys)[0]).to.equal(ua2hex(await childApi.cryptoApi.primitives.RSA.exportKey(cryptoStrats.generatedKeyPair!.publicKey, 'spki')))\n })\n\n it('If a HCP has no key yet, but the parent does and the key is available the crypto strategies should ask for the generation of a new key to the data owner', async () => {\n async function doTest(initialiseEmptyKeyForChild: boolean) {\n const hcpsInfo = await createNewHcpWithoutKeyAndParentWithKey(env, { initialiseEmptyKeyForChild })\n const cryptoStrats = new (class implements CryptoStrategies {\n generateNewKeyCalled: boolean = false\n generatedKeyPair: KeyPair<CryptoKey> | undefined = undefined\n\n async generateNewKeyForDataOwner(self: DataOwnerWithType, cryptoPrimitives: CryptoPrimitives): Promise<KeyPair<CryptoKey> | boolean> {\n if (this.generateNewKeyCalled) throw new Error('generateNewKeyForDataOwner called twice')\n this.generateNewKeyCalled = true\n expect(self.dataOwner.id).to.equal(hcpsInfo.childDataOwnerId)\n return (this.generatedKeyPair = await cryptoPrimitives.RSA.generateKeyPair(ShaVersion.Sha256))\n }\n\n async recoverAndVerifySelfHierarchyKeys(\n keysData: {\n dataOwner: DataOwnerWithType\n unknownKeys: string[]\n unavailableKeys: string[]\n }[],\n cryptoPrimitives: CryptoPrimitives\n ): Promise<{\n [p: string]: { recoveredKeys: { [p: string]: KeyPair<CryptoKey> }; keyAuthenticity: { [p: string]: boolean } }\n }> {\n throw new Error('This method should not be called by this test')\n }\n\n dataOwnerRequiresAnonymousDelegation(dataOwner: CryptoActorStubWithType): boolean {\n return false\n }\n\n verifyDelegatePublicKeys(delegate: CryptoActorStubWithType, publicKeys: string[], cryptoPrimitives: CryptoPrimitives): Promise<string[]> {\n throw new Error('This method should not be called by this test')\n }\n })()\n const storages = await testStorageWithKeys([\n {\n dataOwnerId: hcpsInfo.parentCredentials.dataOwnerId,\n pairs: [\n {\n keyPair: { privateKey: hcpsInfo.parentCredentials.privateKey, publicKey: hcpsInfo.parentCredentials.publicKey },\n shaVersion: ShaVersion.Sha1,\n },\n ],\n },\n ])\n const childApi = await IcureApi.initialise(\n env.iCureUrl,\n { username: hcpsInfo.childUser, password: hcpsInfo.childPassword },\n cryptoStrats,\n webcrypto as any,\n fetch,\n {\n storage: storages.storage,\n keyStorage: storages.keyStorage,\n entryKeysFactory: storages.keyFactory,\n }\n )\n expect(cryptoStrats.generateNewKeyCalled).to.be.true\n const initialisedHcp = (await childApi.dataOwnerApi.getCurrentDataOwner()).dataOwner\n const keys = Array.from(childApi.dataOwnerApi.getHexPublicKeysOf(initialisedHcp))\n expect(keys).to.have.length(1)\n expect(keys[0]).to.equal(ua2hex(await childApi.cryptoApi.primitives.RSA.exportKey(cryptoStrats.generatedKeyPair!.publicKey, 'spki')))\n }\n await doTest(false)\n await doTest(true)\n })\n})\n"]}
1
+ {"version":3,"file":"user-encryption-keys-manager-test.js","sourceRoot":"","sources":["../../../../test/icc-x-api/crypto/user-encryption-keys-manager-test.ts"],"names":[],"mappings":"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","sourcesContent":["import { v4 as uuid } from 'uuid'\nimport { User } from '../../../icc-api/model/User'\nimport { before, describe, it } from 'mocha'\n\nimport { webcrypto } from 'crypto'\nimport 'isomorphic-fetch'\nimport { expect } from 'chai'\nimport { createHcpHierarchyApis, createNewHcpWithoutKeyAndParentWithKey, getEnvironmentInitializer, setLocalStorage } from '../../utils/test_utils'\nimport { TestKeyStorage, TestStorage, testStorageWithKeys } from '../../utils/TestStorage'\nimport { TestCryptoStrategies } from '../../utils/TestCryptoStrategies'\nimport { getEnvVariables, TestVars, UserDetails } from '@icure/test-setup/types'\nimport { CryptoPrimitives, CryptoStrategies, hex2ua, IcureApi, KeyPair, ShaVersion, ua2ab } from '../../../icc-x-api'\nimport { ua2hex } from '@icure/apiV6'\nimport { DataOwnerWithType } from '../../../icc-api/model/DataOwnerWithType'\nimport { CryptoActorStubWithType } from '../../../icc-api/model/CryptoActorStub'\n\nsetLocalStorage(fetch)\n\nlet env: TestVars\n\ndescribe('Key manager', async function () {\n this.timeout(600000)\n\n before(async function () {\n const initializer = await getEnvironmentInitializer()\n env = await initializer.execute(getEnvVariables())\n })\n\n it(`Should not ask crypto strategies to recover available keys`, async () => {\n const apis = await createHcpHierarchyApis(env)\n const storageWithoutParentKey = await testStorageWithKeys([\n {\n dataOwnerId: apis.grandCredentials.dataOwnerId,\n pairs: [\n { keyPair: { privateKey: apis.grandCredentials.privateKey, publicKey: apis.grandCredentials.publicKey }, shaVersion: ShaVersion.Sha1 },\n ],\n },\n {\n dataOwnerId: apis.childCredentials.dataOwnerId,\n pairs: [\n { keyPair: { privateKey: apis.childCredentials.privateKey, publicKey: apis.childCredentials.publicKey }, shaVersion: ShaVersion.Sha1 },\n ],\n },\n ])\n const cryptoStrats = new TestCryptoStrategies(undefined, {}, undefined, {\n [apis.parentCredentials.dataOwnerId]: {\n pair: { privateKey: apis.parentCredentials.privateKey, publicKey: apis.parentCredentials.publicKey },\n shaVersion: ShaVersion.Sha1,\n },\n })\n await IcureApi.initialise(\n env.iCureUrl,\n { username: apis.childCredentials.user, password: apis.childCredentials.password },\n cryptoStrats,\n webcrypto as any,\n fetch,\n {\n storage: storageWithoutParentKey.storage,\n keyStorage: storageWithoutParentKey.keyStorage,\n entryKeysFactory: storageWithoutParentKey.keyFactory,\n }\n )\n expect(cryptoStrats.recoverAndVerifyCallsParams).to.have.length(1)\n const params = cryptoStrats.recoverAndVerifyCallsParams[0]\n expect(params).to.have.length(3)\n expect(params[0].dataOwner.dataOwner.id).to.equal(apis.grandCredentials.dataOwnerId)\n expect(params[0].unavailableKeys).to.be.empty\n expect(params[0].unknownKeys).to.be.empty\n expect(params[1].dataOwner.dataOwner.id).to.equal(apis.parentCredentials.dataOwnerId)\n expect(params[1].unavailableKeys).to.have.members([apis.parentCredentials.publicKey])\n expect(params[1].unknownKeys).to.have.members([apis.parentCredentials.publicKey])\n expect(params[2].dataOwner.dataOwner.id).to.equal(apis.childCredentials.dataOwnerId)\n expect(params[2].unavailableKeys).to.be.empty\n expect(params[2].unknownKeys).to.be.empty\n })\n\n it('Should not ask crypto strategies to recover keys if all keys are available', async () => {\n const apis = await createHcpHierarchyApis(env)\n const storageWithoutParentKey = await testStorageWithKeys([\n {\n dataOwnerId: apis.grandCredentials.dataOwnerId,\n pairs: [\n { keyPair: { privateKey: apis.grandCredentials.privateKey, publicKey: apis.grandCredentials.publicKey }, shaVersion: ShaVersion.Sha1 },\n ],\n },\n {\n dataOwnerId: apis.parentCredentials.dataOwnerId,\n pairs: [\n { keyPair: { privateKey: apis.parentCredentials.privateKey, publicKey: apis.parentCredentials.publicKey }, shaVersion: ShaVersion.Sha1 },\n ],\n },\n {\n dataOwnerId: apis.childCredentials.dataOwnerId,\n pairs: [\n { keyPair: { privateKey: apis.childCredentials.privateKey, publicKey: apis.childCredentials.publicKey }, shaVersion: ShaVersion.Sha1 },\n ],\n },\n ])\n const cryptoStrats = new TestCryptoStrategies()\n await IcureApi.initialise(\n env.iCureUrl,\n { username: apis.childCredentials.user, password: apis.childCredentials.password },\n cryptoStrats,\n webcrypto as any,\n fetch,\n {\n storage: storageWithoutParentKey.storage,\n keyStorage: storageWithoutParentKey.keyStorage,\n entryKeysFactory: storageWithoutParentKey.keyFactory,\n }\n )\n expect(cryptoStrats.recoverAndVerifyCallsParams).to.have.length(0)\n })\n\n it('Should allow to retrieve all keys for a data owner and his parents', async () => {\n const apis = await createHcpHierarchyApis(env)\n const keysData = await apis.childApi.cryptoApi.getEncryptionDecryptionKeypairsForDataOwnerHierarchy()\n async function checkKey(userDetails: UserDetails, key: KeyPair<CryptoKey>) {\n const exportedPrivateKey = ua2hex(await apis.childApi.cryptoApi.primitives.RSA.exportKey(key.privateKey, 'pkcs8'))\n const exportedPublicKey = ua2hex(await apis.childApi.cryptoApi.primitives.RSA.exportKey(key.publicKey, 'spki'))\n expect(exportedPublicKey).to.equal(userDetails.publicKey)\n expect(exportedPrivateKey).to.equal(userDetails.privateKey)\n }\n expect(keysData.self.dataOwnerId).to.equal(apis.childCredentials.dataOwnerId)\n expect(keysData.self.keys).to.have.length(1)\n expect(keysData.self.keys[0].verified).to.be.true\n await checkKey(apis.childCredentials, keysData.self.keys[0].pair)\n expect(keysData.parents).to.have.length(2)\n expect(keysData.parents[0].dataOwnerId).to.equal(apis.grandCredentials.dataOwnerId)\n expect(keysData.parents[0].keys).to.have.length(1)\n await checkKey(apis.grandCredentials, keysData.parents[0].keys[0].pair)\n expect(keysData.parents[1].dataOwnerId).to.equal(apis.parentCredentials.dataOwnerId)\n expect(keysData.parents[1].keys).to.have.length(1)\n await checkKey(apis.parentCredentials, keysData.parents[1].keys[0].pair)\n })\n\n it('If a HCP has no key yet, but the parent does the crypto strategies should first ask to recover the keys for the parent then ask for the generation of a new key to the data owner', async () => {\n const hcpsInfo = await createNewHcpWithoutKeyAndParentWithKey(env)\n const cryptoStrats = new (class implements CryptoStrategies {\n generateNewKeyCalled: boolean = false\n recoverCalled: boolean = false\n generatedKeyPair: KeyPair<CryptoKey> | undefined = undefined\n\n async generateNewKeyForDataOwner(self: DataOwnerWithType, cryptoPrimitives: CryptoPrimitives): Promise<KeyPair<CryptoKey> | boolean> {\n if (this.generateNewKeyCalled) throw new Error('generateNewKeyForDataOwner called twice')\n if (!this.recoverCalled) throw new Error('generateNewKeyForDataOwner called before recoverAndVerifySelfHierarchyKeys')\n this.generateNewKeyCalled = true\n expect(self.dataOwner.id).to.equal(hcpsInfo.childDataOwnerId)\n return (this.generatedKeyPair = await cryptoPrimitives.RSA.generateKeyPair(ShaVersion.Sha256))\n }\n\n async recoverAndVerifySelfHierarchyKeys(\n keysData: {\n dataOwner: DataOwnerWithType\n unknownKeys: string[]\n unavailableKeys: string[]\n }[],\n cryptoPrimitives: CryptoPrimitives\n ): Promise<{\n [p: string]: { recoveredKeys: { [p: string]: KeyPair<CryptoKey> }; keyAuthenticity: { [p: string]: boolean } }\n }> {\n if (this.recoverCalled) throw new Error('recoverAndVerifySelfHierarchyKeys called twice')\n this.recoverCalled = true\n expect(keysData).to.have.length(2)\n expect(keysData[0].dataOwner.dataOwner.id).to.equal(hcpsInfo.parentCredentials.dataOwnerId)\n expect(keysData[0].unknownKeys).to.have.members([hcpsInfo.parentCredentials.publicKey])\n expect(keysData[0].unavailableKeys).to.have.members([hcpsInfo.parentCredentials.publicKey])\n expect(keysData[1].dataOwner.dataOwner.id).to.equal(hcpsInfo.childDataOwnerId)\n expect(keysData[1].unknownKeys).to.be.empty\n expect(keysData[1].unavailableKeys).to.be.empty\n return {\n [hcpsInfo.parentCredentials.dataOwnerId]: {\n recoveredKeys: {\n [hcpsInfo.parentCredentials.publicKey.slice(-32)]: await cryptoPrimitives.RSA.importKeyPair(\n 'pkcs8',\n ua2ab(hex2ua(hcpsInfo.parentCredentials.privateKey)),\n 'spki',\n ua2ab(hex2ua(hcpsInfo.parentCredentials.publicKey)),\n ShaVersion.Sha1\n ),\n },\n keyAuthenticity: {},\n },\n [hcpsInfo.childDataOwnerId]: {\n recoveredKeys: {},\n keyAuthenticity: {},\n },\n }\n }\n\n verifyDelegatePublicKeys(delegate: CryptoActorStubWithType, publicKeys: string[], cryptoPrimitives: CryptoPrimitives): Promise<string[]> {\n throw new Error('This method should not be called by this test')\n }\n\n dataOwnerRequiresAnonymousDelegation(dataOwner: CryptoActorStubWithType): boolean {\n return false\n }\n })()\n const childApi = await IcureApi.initialise(\n env.iCureUrl,\n { username: hcpsInfo.childUser, password: hcpsInfo.childPassword },\n cryptoStrats,\n webcrypto as any,\n fetch,\n {\n storage: new TestStorage(),\n keyStorage: new TestKeyStorage(),\n }\n )\n expect(cryptoStrats.generateNewKeyCalled).to.be.true\n expect(cryptoStrats.recoverCalled).to.be.true\n const keys = Array.from(childApi.dataOwnerApi.getHexPublicKeysOf((await childApi.dataOwnerApi.getCurrentDataOwner()).dataOwner))\n expect(keys).to.have.length(1)\n expect(Array.from(keys)[0]).to.equal(ua2hex(await childApi.cryptoApi.primitives.RSA.exportKey(cryptoStrats.generatedKeyPair!.publicKey, 'spki')))\n })\n\n it('If a HCP has no key yet, but the parent does and the key is available the crypto strategies should ask for the generation of a new key to the data owner', async () => {\n async function doTest(initialiseEmptyKeyForChild: boolean) {\n const hcpsInfo = await createNewHcpWithoutKeyAndParentWithKey(env, { initialiseEmptyKeyForChild })\n const cryptoStrats = new (class implements CryptoStrategies {\n generateNewKeyCalled: boolean = false\n generatedKeyPair: KeyPair<CryptoKey> | undefined = undefined\n\n async generateNewKeyForDataOwner(self: DataOwnerWithType, cryptoPrimitives: CryptoPrimitives): Promise<KeyPair<CryptoKey> | boolean> {\n if (this.generateNewKeyCalled) throw new Error('generateNewKeyForDataOwner called twice')\n this.generateNewKeyCalled = true\n expect(self.dataOwner.id).to.equal(hcpsInfo.childDataOwnerId)\n return (this.generatedKeyPair = await cryptoPrimitives.RSA.generateKeyPair(ShaVersion.Sha256))\n }\n\n async recoverAndVerifySelfHierarchyKeys(\n keysData: {\n dataOwner: DataOwnerWithType\n unknownKeys: string[]\n unavailableKeys: string[]\n }[],\n cryptoPrimitives: CryptoPrimitives\n ): Promise<{\n [p: string]: { recoveredKeys: { [p: string]: KeyPair<CryptoKey> }; keyAuthenticity: { [p: string]: boolean } }\n }> {\n throw new Error('This method should not be called by this test')\n }\n\n dataOwnerRequiresAnonymousDelegation(dataOwner: CryptoActorStubWithType): boolean {\n return false\n }\n\n verifyDelegatePublicKeys(delegate: CryptoActorStubWithType, publicKeys: string[], cryptoPrimitives: CryptoPrimitives): Promise<string[]> {\n throw new Error('This method should not be called by this test')\n }\n })()\n const storages = await testStorageWithKeys([\n {\n dataOwnerId: hcpsInfo.parentCredentials.dataOwnerId,\n pairs: [\n {\n keyPair: { privateKey: hcpsInfo.parentCredentials.privateKey, publicKey: hcpsInfo.parentCredentials.publicKey },\n shaVersion: ShaVersion.Sha1,\n },\n ],\n },\n ])\n const childApi = await IcureApi.initialise(\n env.iCureUrl,\n { username: hcpsInfo.childUser, password: hcpsInfo.childPassword },\n cryptoStrats,\n webcrypto as any,\n fetch,\n {\n storage: storages.storage,\n keyStorage: storages.keyStorage,\n entryKeysFactory: storages.keyFactory,\n }\n )\n expect(cryptoStrats.generateNewKeyCalled).to.be.true\n const initialisedHcp = (await childApi.dataOwnerApi.getCurrentDataOwner()).dataOwner\n const keys = Array.from(childApi.dataOwnerApi.getHexPublicKeysOf(initialisedHcp))\n expect(keys).to.have.length(1)\n expect(keys[0]).to.equal(ua2hex(await childApi.cryptoApi.primitives.RSA.exportKey(cryptoStrats.generatedKeyPair!.publicKey, 'spki')))\n }\n await doTest(false)\n await doTest(true)\n })\n})\n"]}
@@ -0,0 +1 @@
1
+ import 'isomorphic-fetch';