@icure/api 8.1.2 → 8.1.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.
- package/icc-api/api/IccUserApi.d.ts +2 -0
- package/icc-api/api/IccUserApi.js +21 -0
- package/icc-api/api/IccUserApi.js.map +1 -1
- package/icc-api/model/AccessLog.d.ts +0 -1
- package/icc-api/model/AccessLog.js.map +1 -1
- package/icc-api/model/models.d.ts +1 -0
- package/icc-api/model/models.js +1 -0
- package/icc-api/model/models.js.map +1 -1
- package/icc-x-api/filters/ContactByHcPartyPatientTagCodeDateFilter.d.ts +0 -1
- package/icc-x-api/filters/ContactByHcPartyPatientTagCodeDateFilter.js.map +1 -1
- package/icc-x-api/filters/ServiceByHcPartyTagCodeDateFilter.d.ts +1 -1
- package/icc-x-api/filters/ServiceByHcPartyTagCodeDateFilter.js.map +1 -1
- package/icc-x-api/icc-accesslog-x-api.d.ts +16 -4
- package/icc-x-api/icc-accesslog-x-api.js +29 -39
- package/icc-x-api/icc-accesslog-x-api.js.map +1 -1
- package/icc-x-api/index.d.ts +1 -0
- package/icc-x-api/index.js +3 -1
- package/icc-x-api/index.js.map +1 -1
- package/icc-x-api/utils/websocket.d.ts +1 -0
- package/package.json +1 -1
- package/test/icc-x-api/confidential-entities-test.js.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"confidential-entities-test.js","sourceRoot":"","sources":["../../../test/icc-x-api/confidential-entities-test.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHcpHierarchyApis, getEnvironmentInitializer, isLiteTest, setLocalStorage } from '../utils/test_utils'\nimport { getEnvVariables, TestVars } from '@icure/test-setup/types'\nimport { expect } from 'chai'\nimport 'isomorphic-fetch'\nimport { SecureDelegation } from '../../icc-api/model/SecureDelegation'\nimport { EntityWithDelegationTypeName } from '../../icc-x-api'\nimport { SecretIdUseOption } from '../../icc-x-api/crypto/SecretIdUseOption'\nimport UseAnyConfidential = SecretIdUseOption.UseAnyConfidential\nimport UseAnySharedWithParent = SecretIdUseOption.UseAnySharedWithParent\nimport { randomUUID } from 'crypto'\nimport UseAllConfidential = SecretIdUseOption.UseAllConfidential\nimport UseAllSharedWithParent = SecretIdUseOption.UseAllSharedWithParent\nimport UseNone = SecretIdUseOption.UseNone\n\nsetLocalStorage(fetch)\n\nvar env: TestVars\n\ndescribe('test confidential helement', () => {\n before(async function () {\n this.timeout(600000)\n const initializer = await getEnvironmentInitializer()\n env = await initializer.execute(getEnvVariables())\n })\n\n it('confidential entity should be accessible only to user, non confidential should be accessible also to parent', async () => {\n // Use only the top of the hierarchy for simplicity of the test\n const { parentApi: childApi, parentUser: childUser, grandApi: parentApi, grandUser: parentUser } = await createHcpHierarchyApis(env!)\n\n const pat = await childApi.patientApi.newInstance(childUser, { firstName: 'John', lastName: 'Doe' })\n const modifiedPatient = (await childApi.patientApi.initConfidentialSecretId(pat, childUser))!\n\n const patientSecretIdsForParent = await parentApi.patientApi.decryptSecretIdsOf(modifiedPatient)\n const patientSecretIdsForChild = await childApi.patientApi.decryptSecretIdsOf(modifiedPatient)\n expect(patientSecretIdsForParent).to.have.length(1)\n expect(patientSecretIdsForChild).to.have.length(2)\n expect(patientSecretIdsForChild).to.contain(patientSecretIdsForParent[0])\n expect(patientSecretIdsForChild[0]).to.not.eq(patientSecretIdsForChild[1])\n\n const confidentialHe = await childApi.healthcareElementApi.createHealthElementWithUser(\n childUser,\n await childApi.healthcareElementApi.newInstance(\n childUser,\n modifiedPatient,\n { descr: 'Confidential info' },\n { sfkOption: UseAnyConfidential, ignoreAutoDelegations: true }\n )\n )\n expect(confidentialHe.descr).to.eq('Confidential info')\n const nonConfidentialHe = await childApi.healthcareElementApi.createHealthElementWithUser(\n childUser,\n await childApi.healthcareElementApi.newInstance(\n childUser,\n modifiedPatient,\n { descr: 'Non confidential info' },\n { sfkOption: UseAnySharedWithParent }\n )\n )\n expect(nonConfidentialHe.descr).to.eq('Non confidential info')\n\n const retrievedHesAsUser = await childApi.healthcareElementApi.findBy(childUser.healthcarePartyId!, modifiedPatient)\n expect(retrievedHesAsUser.length).to.equal(2, 'Child should see confidential and non-confidential data created by him')\n expect(retrievedHesAsUser.map((he) => he.id)).to.have.members([confidentialHe.id, nonConfidentialHe.id])\n const retrievedConfidential = retrievedHesAsUser.find((he) => he.id === confidentialHe.id)\n const retrievedNonConfidential = retrievedHesAsUser.find((he) => he.id === nonConfidentialHe.id)\n expect(retrievedConfidential).to.deep.eq(confidentialHe)\n expect(retrievedNonConfidential).to.deep.eq(nonConfidentialHe)\n\n const retrievedHesAsParent = await parentApi.healthcareElementApi.findBy(parentUser.healthcarePartyId!, modifiedPatient)\n expect(retrievedHesAsParent.length).to.equal(1, 'Parent should not see confidential data, but only non-confidential data created by child')\n expect(retrievedHesAsParent[0]).to.deep.eq(nonConfidentialHe)\n let failedToRetrieve = false\n try {\n await parentApi.healthcareElementApi.getHealthElementWithUser(parentUser, confidentialHe.id!)\n } catch (e) {\n console.log(e)\n failedToRetrieve = true\n }\n if (!isLiteTest()) {\n expect(failedToRetrieve).to.equal(true, 'Parent should fail to retrieve confidential data')\n }\n // Even if in some way I could get the contact I should not be able to decrypt it\n expect(\n await parentApi.cryptoApi.xapi.encryptionKeysOf({ entity: confidentialHe!, type: EntityWithDelegationTypeName.HealthElement }, undefined)\n ).to.have.length(0)\n })\n\n it('creation of confidential data should fail if no confidential secret id is available for patient', async () => {\n // Use only the top of the hierarchy for simplicity of the test\n const { parentApi: childApi, parentUser: childUser, grandApi: parentApi, grandUser: parentUser } = await createHcpHierarchyApis(env!)\n\n const pat = await childApi.patientApi.createPatientWithUser(\n childUser,\n await childApi.patientApi.newInstance(childUser, { firstName: 'John', lastName: 'Doe' })\n )\n let failed = false\n try {\n await childApi.healthcareElementApi.newInstance(\n childUser,\n pat,\n { descr: 'Confidential info' },\n { sfkOption: UseAnyConfidential, ignoreAutoDelegations: true }\n )\n } catch {\n failed = true\n }\n expect(failed).to.equal(true, 'Creation of confidential data should fail if no confidential secret id is available for patient')\n })\n\n it('creation of non-confidential data should fail if no secret id is available for parent', async () => {\n // Use only the top of the hierarchy for simplicity of the test\n const { parentApi: childApi, parentUser: childUser, grandApi: parentApi, grandUser: parentUser } = await createHcpHierarchyApis(env!, false)\n\n const pat = await childApi.patientApi.createPatientWithUser(\n childUser,\n await childApi.patientApi.newInstance(childUser, { firstName: 'John', lastName: 'Doe' })\n )\n let failed = false\n try {\n await childApi.healthcareElementApi.newInstance(childUser, pat, { descr: 'Confidential info' }, { sfkOption: UseAnySharedWithParent })\n } catch {\n failed = true\n }\n expect(failed).to.equal(true, 'Creation of confidential data should fail if no non-confidential secret id is available for patient')\n })\n\n it('confidential or non-confidential is irrelevant if api is initialised without parent key initialisation: data created by user is only accessible to him', async () => {\n // Use only the top of the hierarchy for simplicity of the test\n const { parentApi: childApi, parentUser: childUser, grandApi: parentApi, grandUser: parentUser } = await createHcpHierarchyApis(env!, false, true)\n\n const pat = await childApi.patientApi.newInstance(childUser, { firstName: 'John', lastName: 'Doe' })\n\n const confidentialHe = await childApi.healthcareElementApi.createHealthElementWithUser(\n childUser,\n await childApi.healthcareElementApi.newInstance(\n childUser,\n pat,\n { descr: 'Confidential info' },\n { sfkOption: UseAnyConfidential, ignoreAutoDelegations: true }\n )\n )\n expect(confidentialHe.descr).to.eq('Confidential info')\n const nonConfidentialHe = await childApi.healthcareElementApi.createHealthElementWithUser(\n childUser,\n await childApi.healthcareElementApi.newInstance(childUser, pat, { descr: 'Non confidential info' }, { sfkOption: UseAnySharedWithParent })\n )\n expect(nonConfidentialHe.descr).to.eq('Non confidential info')\n\n const retrievedHesAsUser = await childApi.healthcareElementApi.findBy(childUser.healthcarePartyId!, pat)\n expect(retrievedHesAsUser.length).to.equal(2, 'Child should see confidential and non-confidential data created by him')\n expect(retrievedHesAsUser.map((he) => he.id)).to.have.members([confidentialHe.id, nonConfidentialHe.id])\n const retrievedConfidential = retrievedHesAsUser.find((he) => he.id === confidentialHe.id)\n const retrievedNonConfidential = retrievedHesAsUser.find((he) => he.id === nonConfidentialHe.id)\n expect(retrievedConfidential).to.deep.eq(confidentialHe)\n expect(retrievedNonConfidential).to.deep.eq(nonConfidentialHe)\n\n await parentApi.patientApi.decryptSecretIdsOf(pat)\n })\n\n it('sfk confidential option should use one or all secret ids as requested', async () => {\n // Use only the top of the hierarchy for simplicity of the test\n const { parentApi: childApi, parentUser: childUser, grandApi: parentApi, grandUser: parentUser } = await createHcpHierarchyApis(env!)\n\n const pat = await childApi.patientApi.newInstance(childUser, { firstName: 'John', lastName: 'Doe' })\n let modifiedPatient = (await childApi.patientApi.initConfidentialSecretId(pat, childUser))!\n modifiedPatient = await childApi.patientApi.shareWith(childUser.healthcarePartyId!, modifiedPatient, [randomUUID()])\n modifiedPatient = await childApi.patientApi.shareWith(parentUser.healthcarePartyId!, modifiedPatient, [randomUUID()])\n\n const patientSecretIdsForParent = await parentApi.patientApi.decryptSecretIdsOf(modifiedPatient)\n const patientSecretIdsForChild = await childApi.patientApi.decryptSecretIdsOf(modifiedPatient)\n expect(patientSecretIdsForParent).to.have.length(2)\n expect(patientSecretIdsForChild).to.have.length(4)\n const confidentialSecretIds = patientSecretIdsForChild.filter((x) => !patientSecretIdsForParent.includes(x))\n const nonConfidentialSecretIds = patientSecretIdsForParent\n expect(confidentialSecretIds).to.have.length(2)\n expect(await childApi.patientApi.decryptConfidentialSecretIdsOf(modifiedPatient)).to.have.members(confidentialSecretIds)\n expect(await childApi.patientApi.decryptNonConfidentialSecretIdsOf(modifiedPatient)).to.have.members(nonConfidentialSecretIds)\n const anyConfidentialHe = await childApi.healthcareElementApi.newInstance(\n childUser,\n modifiedPatient,\n { descr: 'Confidential info' },\n { sfkOption: UseAnyConfidential, ignoreAutoDelegations: true }\n )\n expect(anyConfidentialHe.secretForeignKeys).to.have.length(1)\n expect(confidentialSecretIds).to.include(anyConfidentialHe.secretForeignKeys![0])\n const allConfidentialHe = await childApi.healthcareElementApi.newInstance(\n childUser,\n modifiedPatient,\n { descr: 'Confidential info' },\n { sfkOption: UseAllConfidential, ignoreAutoDelegations: true }\n )\n expect(allConfidentialHe.secretForeignKeys).to.have.members(confidentialSecretIds)\n const anyNonConfidentialHe = await childApi.healthcareElementApi.newInstance(\n childUser,\n modifiedPatient,\n { descr: 'Confidential info' },\n { sfkOption: UseAnySharedWithParent }\n )\n expect(anyNonConfidentialHe.secretForeignKeys).to.have.length(1)\n expect(nonConfidentialSecretIds).to.include(anyNonConfidentialHe.secretForeignKeys![0])\n const allNonConfidentialHe = await childApi.healthcareElementApi.newInstance(\n childUser,\n modifiedPatient,\n { descr: 'Confidential info' },\n { sfkOption: UseAllSharedWithParent }\n )\n expect(allNonConfidentialHe.secretForeignKeys).to.have.members(nonConfidentialSecretIds)\n })\n\n it('Should allow creation of half-links by using no sfk', async () => {\n const { parentApi: childApi, parentUser: childUser, grandApi: parentApi, grandUser: parentUser } = await createHcpHierarchyApis(env!)\n\n const pat = await childApi.patientApi.newInstance(childUser, { firstName: 'John', lastName: 'Doe' })\n const halfLinkedHe = await childApi.healthcareElementApi.newInstance(\n childUser,\n pat,\n { descr: 'Confidential info' },\n { sfkOption: UseNone, ignoreAutoDelegations: true }\n )\n expect(halfLinkedHe.secretForeignKeys).to.have.length(0)\n const decryptedPatientId = await childApi.healthcareElementApi.decryptPatientIdOf(halfLinkedHe)\n expect(decryptedPatientId).to.have.length(1)\n expect(decryptedPatientId[0]).to.equal(pat.id)\n })\n\n it('Should allow creation of links using the provided sfks', async () => {\n const { parentApi: childApi, parentUser: childUser, grandApi: parentApi, grandUser: parentUser } = await createHcpHierarchyApis(env!)\n\n const pat = await childApi.patientApi.newInstance(childUser, { firstName: 'John', lastName: 'Doe' })\n const modifiedPatient = (await childApi.patientApi.initConfidentialSecretId(pat, childUser))!\n const secretIds = await childApi.patientApi.decryptSecretIdsOf(modifiedPatient)\n expect(secretIds).to.have.length(2)\n const halfLinkedHe = await childApi.healthcareElementApi.newInstance(\n childUser,\n pat,\n { descr: 'Confidential info' },\n { sfkOption: new SecretIdUseOption.Use([]), ignoreAutoDelegations: true }\n )\n expect(halfLinkedHe.secretForeignKeys).to.have.length(0)\n const linkedHeSfk0 = await childApi.healthcareElementApi.newInstance(\n childUser,\n pat,\n { descr: 'Confidential info' },\n { sfkOption: new SecretIdUseOption.Use([secretIds[0]]), ignoreAutoDelegations: true }\n )\n expect(linkedHeSfk0.secretForeignKeys).to.have.members([secretIds[0]])\n const linkedHeSfk1 = await childApi.healthcareElementApi.newInstance(\n childUser,\n pat,\n { descr: 'Confidential info' },\n { sfkOption: new SecretIdUseOption.Use([secretIds[1]]), ignoreAutoDelegations: true }\n )\n expect(linkedHeSfk1.secretForeignKeys).to.have.members([secretIds[1]])\n const linkedHeSfkBoth = await childApi.healthcareElementApi.newInstance(\n childUser,\n pat,\n { descr: 'Confidential info' },\n { sfkOption: new SecretIdUseOption.Use(secretIds), ignoreAutoDelegations: true }\n )\n expect(linkedHeSfkBoth.secretForeignKeys).to.have.members(secretIds)\n })\n})\n"]}
|
|
1
|
+
{"version":3,"file":"confidential-entities-test.js","sourceRoot":"","sources":["../../../test/icc-x-api/confidential-entities-test.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHcpHierarchyApis, getEnvironmentInitializer, isLiteTest, setLocalStorage } from '../utils/test_utils'\nimport { getEnvVariables, TestVars } from '@icure/test-setup/types'\nimport { expect } from 'chai'\nimport 'isomorphic-fetch'\nimport { EntityWithDelegationTypeName } from '../../icc-x-api'\nimport { SecretIdUseOption } from '../../icc-x-api/crypto/SecretIdUseOption'\nimport UseAnyConfidential = SecretIdUseOption.UseAnyConfidential\nimport UseAnySharedWithParent = SecretIdUseOption.UseAnySharedWithParent\nimport { randomUUID } from 'crypto'\nimport UseAllConfidential = SecretIdUseOption.UseAllConfidential\nimport UseAllSharedWithParent = SecretIdUseOption.UseAllSharedWithParent\nimport UseNone = SecretIdUseOption.UseNone\n\nsetLocalStorage(fetch)\n\nvar env: TestVars\n\ndescribe('test confidential helement', () => {\n before(async function () {\n this.timeout(600000)\n const initializer = await getEnvironmentInitializer()\n env = await initializer.execute(getEnvVariables())\n })\n\n it('confidential entity should be accessible only to user, non confidential should be accessible also to parent', async () => {\n // Use only the top of the hierarchy for simplicity of the test\n const { parentApi: childApi, parentUser: childUser, grandApi: parentApi, grandUser: parentUser } = await createHcpHierarchyApis(env!)\n\n const pat = await childApi.patientApi.newInstance(childUser, { firstName: 'John', lastName: 'Doe' })\n const modifiedPatient = (await childApi.patientApi.initConfidentialSecretId(pat, childUser))!\n\n const patientSecretIdsForParent = await parentApi.patientApi.decryptSecretIdsOf(modifiedPatient)\n const patientSecretIdsForChild = await childApi.patientApi.decryptSecretIdsOf(modifiedPatient)\n expect(patientSecretIdsForParent).to.have.length(1)\n expect(patientSecretIdsForChild).to.have.length(2)\n expect(patientSecretIdsForChild).to.contain(patientSecretIdsForParent[0])\n expect(patientSecretIdsForChild[0]).to.not.eq(patientSecretIdsForChild[1])\n\n const confidentialHe = await childApi.healthcareElementApi.createHealthElementWithUser(\n childUser,\n await childApi.healthcareElementApi.newInstance(\n childUser,\n modifiedPatient,\n { descr: 'Confidential info' },\n { sfkOption: UseAnyConfidential, ignoreAutoDelegations: true }\n )\n )\n expect(confidentialHe.descr).to.eq('Confidential info')\n const nonConfidentialHe = await childApi.healthcareElementApi.createHealthElementWithUser(\n childUser,\n await childApi.healthcareElementApi.newInstance(\n childUser,\n modifiedPatient,\n { descr: 'Non confidential info' },\n { sfkOption: UseAnySharedWithParent }\n )\n )\n expect(nonConfidentialHe.descr).to.eq('Non confidential info')\n\n const retrievedHesAsUser = await childApi.healthcareElementApi.findBy(childUser.healthcarePartyId!, modifiedPatient)\n expect(retrievedHesAsUser.length).to.equal(2, 'Child should see confidential and non-confidential data created by him')\n expect(retrievedHesAsUser.map((he) => he.id)).to.have.members([confidentialHe.id, nonConfidentialHe.id])\n const retrievedConfidential = retrievedHesAsUser.find((he) => he.id === confidentialHe.id)\n const retrievedNonConfidential = retrievedHesAsUser.find((he) => he.id === nonConfidentialHe.id)\n expect(retrievedConfidential).to.deep.eq(confidentialHe)\n expect(retrievedNonConfidential).to.deep.eq(nonConfidentialHe)\n\n const retrievedHesAsParent = await parentApi.healthcareElementApi.findBy(parentUser.healthcarePartyId!, modifiedPatient)\n expect(retrievedHesAsParent.length).to.equal(1, 'Parent should not see confidential data, but only non-confidential data created by child')\n expect(retrievedHesAsParent[0]).to.deep.eq(nonConfidentialHe)\n let failedToRetrieve = false\n try {\n await parentApi.healthcareElementApi.getHealthElementWithUser(parentUser, confidentialHe.id!)\n } catch (e) {\n console.log(e)\n failedToRetrieve = true\n }\n if (!isLiteTest()) {\n expect(failedToRetrieve).to.equal(true, 'Parent should fail to retrieve confidential data')\n }\n // Even if in some way I could get the contact I should not be able to decrypt it\n expect(\n await parentApi.cryptoApi.xapi.encryptionKeysOf({ entity: confidentialHe!, type: EntityWithDelegationTypeName.HealthElement }, undefined)\n ).to.have.length(0)\n })\n\n it('creation of confidential data should fail if no confidential secret id is available for patient', async () => {\n // Use only the top of the hierarchy for simplicity of the test\n const { parentApi: childApi, parentUser: childUser, grandApi: parentApi, grandUser: parentUser } = await createHcpHierarchyApis(env!)\n\n const pat = await childApi.patientApi.createPatientWithUser(\n childUser,\n await childApi.patientApi.newInstance(childUser, { firstName: 'John', lastName: 'Doe' })\n )\n let failed = false\n try {\n await childApi.healthcareElementApi.newInstance(\n childUser,\n pat,\n { descr: 'Confidential info' },\n { sfkOption: UseAnyConfidential, ignoreAutoDelegations: true }\n )\n } catch {\n failed = true\n }\n expect(failed).to.equal(true, 'Creation of confidential data should fail if no confidential secret id is available for patient')\n })\n\n it('creation of non-confidential data should fail if no secret id is available for parent', async () => {\n // Use only the top of the hierarchy for simplicity of the test\n const { parentApi: childApi, parentUser: childUser, grandApi: parentApi, grandUser: parentUser } = await createHcpHierarchyApis(env!, false)\n\n const pat = await childApi.patientApi.createPatientWithUser(\n childUser,\n await childApi.patientApi.newInstance(childUser, { firstName: 'John', lastName: 'Doe' })\n )\n let failed = false\n try {\n await childApi.healthcareElementApi.newInstance(childUser, pat, { descr: 'Confidential info' }, { sfkOption: UseAnySharedWithParent })\n } catch {\n failed = true\n }\n expect(failed).to.equal(true, 'Creation of confidential data should fail if no non-confidential secret id is available for patient')\n })\n\n it('confidential or non-confidential is irrelevant if api is initialised without parent key initialisation: data created by user is only accessible to him', async () => {\n // Use only the top of the hierarchy for simplicity of the test\n const { parentApi: childApi, parentUser: childUser, grandApi: parentApi, grandUser: parentUser } = await createHcpHierarchyApis(env!, false, true)\n\n const pat = await childApi.patientApi.newInstance(childUser, { firstName: 'John', lastName: 'Doe' })\n\n const confidentialHe = await childApi.healthcareElementApi.createHealthElementWithUser(\n childUser,\n await childApi.healthcareElementApi.newInstance(\n childUser,\n pat,\n { descr: 'Confidential info' },\n { sfkOption: UseAnyConfidential, ignoreAutoDelegations: true }\n )\n )\n expect(confidentialHe.descr).to.eq('Confidential info')\n const nonConfidentialHe = await childApi.healthcareElementApi.createHealthElementWithUser(\n childUser,\n await childApi.healthcareElementApi.newInstance(childUser, pat, { descr: 'Non confidential info' }, { sfkOption: UseAnySharedWithParent })\n )\n expect(nonConfidentialHe.descr).to.eq('Non confidential info')\n\n const retrievedHesAsUser = await childApi.healthcareElementApi.findBy(childUser.healthcarePartyId!, pat)\n expect(retrievedHesAsUser.length).to.equal(2, 'Child should see confidential and non-confidential data created by him')\n expect(retrievedHesAsUser.map((he) => he.id)).to.have.members([confidentialHe.id, nonConfidentialHe.id])\n const retrievedConfidential = retrievedHesAsUser.find((he) => he.id === confidentialHe.id)\n const retrievedNonConfidential = retrievedHesAsUser.find((he) => he.id === nonConfidentialHe.id)\n expect(retrievedConfidential).to.deep.eq(confidentialHe)\n expect(retrievedNonConfidential).to.deep.eq(nonConfidentialHe)\n\n await parentApi.patientApi.decryptSecretIdsOf(pat)\n })\n\n it('sfk confidential option should use one or all secret ids as requested', async () => {\n // Use only the top of the hierarchy for simplicity of the test\n const { parentApi: childApi, parentUser: childUser, grandApi: parentApi, grandUser: parentUser } = await createHcpHierarchyApis(env!)\n\n const pat = await childApi.patientApi.newInstance(childUser, { firstName: 'John', lastName: 'Doe' })\n let modifiedPatient = (await childApi.patientApi.initConfidentialSecretId(pat, childUser))!\n modifiedPatient = await childApi.patientApi.shareWith(childUser.healthcarePartyId!, modifiedPatient, [randomUUID()])\n modifiedPatient = await childApi.patientApi.shareWith(parentUser.healthcarePartyId!, modifiedPatient, [randomUUID()])\n\n const patientSecretIdsForParent = await parentApi.patientApi.decryptSecretIdsOf(modifiedPatient)\n const patientSecretIdsForChild = await childApi.patientApi.decryptSecretIdsOf(modifiedPatient)\n expect(patientSecretIdsForParent).to.have.length(2)\n expect(patientSecretIdsForChild).to.have.length(4)\n const confidentialSecretIds = patientSecretIdsForChild.filter((x) => !patientSecretIdsForParent.includes(x))\n const nonConfidentialSecretIds = patientSecretIdsForParent\n expect(confidentialSecretIds).to.have.length(2)\n expect(await childApi.patientApi.decryptConfidentialSecretIdsOf(modifiedPatient)).to.have.members(confidentialSecretIds)\n expect(await childApi.patientApi.decryptNonConfidentialSecretIdsOf(modifiedPatient)).to.have.members(nonConfidentialSecretIds)\n const anyConfidentialHe = await childApi.healthcareElementApi.newInstance(\n childUser,\n modifiedPatient,\n { descr: 'Confidential info' },\n { sfkOption: UseAnyConfidential, ignoreAutoDelegations: true }\n )\n expect(anyConfidentialHe.secretForeignKeys).to.have.length(1)\n expect(confidentialSecretIds).to.include(anyConfidentialHe.secretForeignKeys![0])\n const allConfidentialHe = await childApi.healthcareElementApi.newInstance(\n childUser,\n modifiedPatient,\n { descr: 'Confidential info' },\n { sfkOption: UseAllConfidential, ignoreAutoDelegations: true }\n )\n expect(allConfidentialHe.secretForeignKeys).to.have.members(confidentialSecretIds)\n const anyNonConfidentialHe = await childApi.healthcareElementApi.newInstance(\n childUser,\n modifiedPatient,\n { descr: 'Confidential info' },\n { sfkOption: UseAnySharedWithParent }\n )\n expect(anyNonConfidentialHe.secretForeignKeys).to.have.length(1)\n expect(nonConfidentialSecretIds).to.include(anyNonConfidentialHe.secretForeignKeys![0])\n const allNonConfidentialHe = await childApi.healthcareElementApi.newInstance(\n childUser,\n modifiedPatient,\n { descr: 'Confidential info' },\n { sfkOption: UseAllSharedWithParent }\n )\n expect(allNonConfidentialHe.secretForeignKeys).to.have.members(nonConfidentialSecretIds)\n })\n\n it('Should allow creation of half-links by using no sfk', async () => {\n const { parentApi: childApi, parentUser: childUser, grandApi: parentApi, grandUser: parentUser } = await createHcpHierarchyApis(env!)\n\n const pat = await childApi.patientApi.newInstance(childUser, { firstName: 'John', lastName: 'Doe' })\n const halfLinkedHe = await childApi.healthcareElementApi.newInstance(\n childUser,\n pat,\n { descr: 'Confidential info' },\n { sfkOption: UseNone, ignoreAutoDelegations: true }\n )\n expect(halfLinkedHe.secretForeignKeys).to.have.length(0)\n const decryptedPatientId = await childApi.healthcareElementApi.decryptPatientIdOf(halfLinkedHe)\n expect(decryptedPatientId).to.have.length(1)\n expect(decryptedPatientId[0]).to.equal(pat.id)\n })\n\n it('Should allow creation of links using the provided sfks', async () => {\n const { parentApi: childApi, parentUser: childUser, grandApi: parentApi, grandUser: parentUser } = await createHcpHierarchyApis(env!)\n\n const pat = await childApi.patientApi.newInstance(childUser, { firstName: 'John', lastName: 'Doe' })\n const modifiedPatient = (await childApi.patientApi.initConfidentialSecretId(pat, childUser))!\n const secretIds = await childApi.patientApi.decryptSecretIdsOf(modifiedPatient)\n expect(secretIds).to.have.length(2)\n const halfLinkedHe = await childApi.healthcareElementApi.newInstance(\n childUser,\n pat,\n { descr: 'Confidential info' },\n { sfkOption: new SecretIdUseOption.Use([]), ignoreAutoDelegations: true }\n )\n expect(halfLinkedHe.secretForeignKeys).to.have.length(0)\n const linkedHeSfk0 = await childApi.healthcareElementApi.newInstance(\n childUser,\n pat,\n { descr: 'Confidential info' },\n { sfkOption: new SecretIdUseOption.Use([secretIds[0]]), ignoreAutoDelegations: true }\n )\n expect(linkedHeSfk0.secretForeignKeys).to.have.members([secretIds[0]])\n const linkedHeSfk1 = await childApi.healthcareElementApi.newInstance(\n childUser,\n pat,\n { descr: 'Confidential info' },\n { sfkOption: new SecretIdUseOption.Use([secretIds[1]]), ignoreAutoDelegations: true }\n )\n expect(linkedHeSfk1.secretForeignKeys).to.have.members([secretIds[1]])\n const linkedHeSfkBoth = await childApi.healthcareElementApi.newInstance(\n childUser,\n pat,\n { descr: 'Confidential info' },\n { sfkOption: new SecretIdUseOption.Use(secretIds), ignoreAutoDelegations: true }\n )\n expect(linkedHeSfkBoth.secretForeignKeys).to.have.members(secretIds)\n })\n})\n"]}
|