@icure/api 5.0.1 → 5.0.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.
@@ -11,7 +11,7 @@ export declare class IccHelementXApi extends IccHelementApi {
11
11
  [key: string]: string;
12
12
  }, crypto: IccCryptoXApi, userApi: IccUserXApi, encryptedKeys?: Array<string>, fetchImpl?: (input: RequestInfo, init?: RequestInit) => Promise<Response>);
13
13
  newInstance(user: models.User, patient: models.Patient, h: any, confidential?: boolean, delegates?: string[]): Promise<models.HealthElement>;
14
- initDelegationsAndCryptedForeignKeys(healthElement: models.HealthElement, patient: models.Patient, user: models.User, confidential: boolean, delegates?: string[]): Promise<models.HealthElement>;
14
+ initDelegationsAndEncryptionKeys(healthElement: models.HealthElement, patient: models.Patient, user: models.User, confidential: boolean, delegates?: string[]): Promise<models.HealthElement>;
15
15
  createHealthElement(body?: models.HealthElement): never;
16
16
  createHealthElementWithUser(user: models.User, body?: models.HealthElement): Promise<models.HealthElement | any>;
17
17
  createHealthElements(body?: Array<HealthElement>): never;
@@ -1,4 +1,13 @@
1
1
  "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
2
11
  Object.defineProperty(exports, "__esModule", { value: true });
3
12
  exports.IccHelementXApi = void 0;
4
13
  const icc_api_1 = require("../icc-api");
@@ -32,37 +41,33 @@ class IccHelementXApi extends icc_api_1.IccHelementApi {
32
41
  healthElementId: this.crypto.randomUuid(),
33
42
  openingDate: parseInt(moment().format('YYYYMMDDHHmmss')),
34
43
  }, h || {});
35
- return this.initDelegationsAndCryptedForeignKeys(helement, patient, user, confidential, delegates);
44
+ return this.initDelegationsAndEncryptionKeys(helement, patient, user, confidential, delegates);
36
45
  }
37
- initDelegationsAndCryptedForeignKeys(healthElement, patient, user, confidential, delegates = []) {
46
+ initDelegationsAndEncryptionKeys(healthElement, patient, user, confidential, delegates = []) {
38
47
  let dataOwnerId = this.userApi.getDataOwnerOf(user);
39
- return this.crypto
40
- .extractPreferredSfk(patient, dataOwnerId, confidential)
41
- .then((key) => {
48
+ return this.crypto.extractPreferredSfk(patient, dataOwnerId, confidential).then((key) => __awaiter(this, void 0, void 0, function* () {
42
49
  if (!key) {
43
- console.error(`SFK cannot be found for HealthElement ${healthElement.id}. The health element will not be reachable from the patient side`);
50
+ console.error(`SFK cannot be found for Health element ${key}. The healthElement will not be reachable from the patient side`);
44
51
  }
45
- return this.crypto.initObjectDelegations(healthElement, patient, dataOwnerId, key !== null && key !== void 0 ? key : null);
46
- })
47
- .then((initData) => {
52
+ const dels = yield this.crypto.initObjectDelegations(healthElement, patient, dataOwnerId, key !== null && key !== void 0 ? key : null);
53
+ const eks = yield this.crypto.initEncryptionKeys(healthElement, dataOwnerId);
48
54
  _.extend(healthElement, {
49
- delegations: initData.delegations,
50
- cryptedForeignKeys: initData.cryptedForeignKeys,
51
- secretForeignKeys: initData.secretForeignKeys,
55
+ delegations: dels.delegations,
56
+ cryptedForeignKeys: dels.cryptedForeignKeys,
57
+ secretForeignKeys: dels.secretForeignKeys,
58
+ encryptionKeys: eks.encryptionKeys,
52
59
  });
53
60
  let promise = Promise.resolve(healthElement);
54
- _.uniq(delegates.concat(user.autoDelegations ? (user.autoDelegations.all || []).concat(user.autoDelegations.medicalInformation || []) : [])).forEach((delegateId) => (promise = promise.then((helement) => this.crypto
55
- .extendedDelegationsAndCryptedForeignKeys(helement, patient, dataOwnerId, delegateId, initData.secretId)
56
- .then((extraData) => _.extend(helement, {
57
- delegations: extraData.delegations,
58
- cryptedForeignKeys: extraData.cryptedForeignKeys,
59
- }))
60
- .catch((e) => {
61
+ _.uniq(delegates.concat(user.autoDelegations ? (user.autoDelegations.all || []).concat(user.autoDelegations.medicalInformation || []) : [])).forEach((delegateId) => (promise = promise.then((healthElement) => this.crypto.addDelegationsAndEncryptionKeys(patient, healthElement, dataOwnerId, delegateId, dels.secretId, eks.secretId).catch((e) => {
62
+ console.log(e);
63
+ return healthElement;
64
+ }))));
65
+ (user.autoDelegations && user.autoDelegations.anonymousMedicalInformation ? user.autoDelegations.anonymousMedicalInformation : []).forEach((delegateId) => (promise = promise.then((healthElement) => this.crypto.addDelegationsAndEncryptionKeys(patient, healthElement, dataOwnerId, delegateId, null, eks.secretId).catch((e) => {
61
66
  console.log(e);
62
- return helement;
67
+ return healthElement;
63
68
  }))));
64
69
  return promise;
65
- });
70
+ }));
66
71
  }
67
72
  createHealthElement(body) {
68
73
  throw new Error('Cannot call a method that returns health elements without providing a user for de/encryption');
@@ -256,7 +261,7 @@ class IccHelementXApi extends icc_api_1.IccHelementApi {
256
261
  }
257
262
  resolve(he);
258
263
  }, () => {
259
- console.log('Cannot decrypt contact', he.id);
264
+ console.log('Cannot decrypt health element', he.id);
260
265
  resolve(he);
261
266
  })));
262
267
  }
@@ -1 +1 @@
1
- {"version":3,"file":"icc-helement-x-api.js","sourceRoot":"","sources":["../../icc-x-api/icc-helement-x-api.ts"],"names":[],"mappings":"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","sourcesContent":["import { IccHelementApi } from '../icc-api'\nimport { IccCryptoXApi } from './icc-crypto-x-api'\n\nimport * as models from '../icc-api/model/models'\n\nimport * as _ from 'lodash'\nimport * as moment from 'moment'\nimport { a2b, b2a, hex2ua, string2ua, ua2utf8, utf8_2ua } from './utils/binary-utils'\nimport { HealthElement } from '../icc-api/model/models'\nimport { IccUserXApi } from './icc-user-x-api'\nimport { crypt } from './utils'\n\nexport class IccHelementXApi extends IccHelementApi {\n crypto: IccCryptoXApi\n userApi: IccUserXApi\n\n private readonly encryptedKeys: Array<string>\n\n constructor(\n host: string,\n headers: { [key: string]: string },\n crypto: IccCryptoXApi,\n userApi: IccUserXApi,\n encryptedKeys: Array<string> = ['descr', 'note'],\n fetchImpl: (input: RequestInfo, init?: RequestInit) => Promise<Response> = typeof window !== 'undefined'\n ? window.fetch\n : typeof self !== 'undefined'\n ? self.fetch\n : fetch\n ) {\n super(host, headers, fetchImpl)\n this.crypto = crypto\n this.userApi = userApi\n this.encryptedKeys = encryptedKeys\n }\n\n newInstance(user: models.User, patient: models.Patient, h: any, confidential = false, delegates: string[] = []) {\n const dataOwnerId = this.userApi.getDataOwnerOf(user)\n const helement = _.assign(\n {\n id: this.crypto.randomUuid(),\n _type: 'org.taktik.icure.entities.HealthElement',\n created: new Date().getTime(),\n modified: new Date().getTime(),\n responsible: dataOwnerId,\n author: user.id,\n codes: [],\n tags: [],\n healthElementId: this.crypto.randomUuid(),\n openingDate: parseInt(moment().format('YYYYMMDDHHmmss')),\n },\n h || {}\n )\n\n return this.initDelegationsAndCryptedForeignKeys(helement, patient, user, confidential, delegates)\n }\n\n initDelegationsAndCryptedForeignKeys(\n healthElement: models.HealthElement,\n patient: models.Patient,\n user: models.User,\n confidential: boolean,\n delegates: string[] = []\n ): Promise<models.HealthElement> {\n let dataOwnerId = this.userApi.getDataOwnerOf(user)\n\n return this.crypto\n .extractPreferredSfk(patient, dataOwnerId, confidential)\n .then((key) => {\n if (!key) {\n console.error(`SFK cannot be found for HealthElement ${healthElement.id}. The health element will not be reachable from the patient side`)\n }\n\n return this.crypto.initObjectDelegations(healthElement, patient, dataOwnerId, key ?? null)\n })\n .then((initData) => {\n _.extend(healthElement, {\n delegations: initData.delegations,\n cryptedForeignKeys: initData.cryptedForeignKeys,\n secretForeignKeys: initData.secretForeignKeys,\n })\n\n let promise = Promise.resolve(healthElement)\n _.uniq(\n delegates.concat(user.autoDelegations ? (user.autoDelegations.all || []).concat(user.autoDelegations.medicalInformation || []) : [])\n ).forEach(\n (delegateId) =>\n (promise = promise.then((helement) =>\n this.crypto\n .extendedDelegationsAndCryptedForeignKeys(helement, patient, dataOwnerId, delegateId, initData.secretId)\n .then((extraData) =>\n _.extend(helement, {\n delegations: extraData.delegations,\n cryptedForeignKeys: extraData.cryptedForeignKeys,\n })\n )\n .catch((e) => {\n console.log(e)\n return helement\n })\n ))\n )\n return promise\n })\n }\n\n createHealthElement(body?: models.HealthElement): never {\n throw new Error('Cannot call a method that returns health elements without providing a user for de/encryption')\n }\n\n createHealthElementWithUser(user: models.User, body?: models.HealthElement): Promise<models.HealthElement | any> {\n return body\n ? this.encrypt(user, [_.cloneDeep(body)])\n .then((hes) => super.createHealthElement(hes[0]))\n .then((he) => this.decryptWithUser(user, [he]))\n .then((hes) => hes[0])\n : Promise.resolve(null)\n }\n\n createHealthElements(body?: Array<HealthElement>): never {\n throw new Error('Cannot call a method that returns health elements without providing a user for de/encryption')\n }\n\n createHealthElementsWithUser(user: models.User, bodies?: models.HealthElement[]): Promise<models.HealthElement[] | any> {\n return bodies\n ? this.encrypt(\n user,\n bodies.map((c) => _.cloneDeep(c))\n )\n .then((hes) => super.createHealthElements(hes))\n .then((hes) => this.decrypt(this.userApi.getDataOwnerOf(user), hes))\n : Promise.resolve(null)\n }\n\n getHealthElement(healthElementId: string): never {\n throw new Error('Cannot call a method that returns health element without providing a user for de/encryption')\n }\n\n getHealthElementWithUser(user: models.User, healthElementId: string): Promise<models.HealthElement> {\n return super\n .getHealthElement(healthElementId)\n .then((he) => this.decryptWithUser(user, [he]))\n .then((hes) => hes[0])\n }\n\n getHealthElements(body?: models.ListOfIds): never {\n throw new Error('Cannot call a method that returns health elements without providing a user for de/encryption')\n }\n\n getHealthElementsWithUser(user: models.User, body?: models.ListOfIds): Promise<models.HealthElement[]> {\n return super.getHealthElements(body).then((hes) => this.decrypt(this.userApi.getDataOwnerOf(user), hes))\n }\n\n newHealthElementDelegations(healthElementId: string, body?: Array<models.Delegation>): never {\n throw new Error('Cannot call a method that returns health element without providing a user for de/encryption')\n }\n\n newHealthElementDelegationsWithUser(user: models.User, healthElementId: string, body?: Array<models.Delegation>): Promise<models.HealthElement> {\n return super\n .newHealthElementDelegations(healthElementId, body)\n .then((he) => this.decryptWithUser(user, [he]))\n .then((he) => he[0])\n }\n\n findHealthElementsByHCPartyPatientForeignKeys(hcPartyId: string, secretFKeys: string): never {\n throw new Error('Cannot call a method that returns health element without providing a user for de/encryption')\n }\n\n findHealthElementsByHCPartyPatientForeignKeysWithUser(user: models.User, hcPartyId: string, secretFKeys: string): Promise<HealthElement[]> {\n return super.findHealthElementsByHCPartyPatientForeignKeys(hcPartyId, secretFKeys).then((hes) => this.decryptWithUser(user, hes))\n }\n\n findHealthElementsByHCPartyAndPatientWithUser(user: models.User, hcPartyId: string, patient: models.Patient): Promise<models.HealthElement[]> {\n return this.crypto.extractSFKsHierarchyFromDelegations(patient, hcPartyId).then((keysAndHcPartyId) => {\n const keys = keysAndHcPartyId.find((secretForeignKeys) => secretForeignKeys.hcpartyId == hcPartyId)?.extractedKeys\n\n if (keys == undefined) {\n throw Error('No delegation for user')\n }\n\n return this.findHealthElementsByHCPartyPatientForeignKeysWithUser(user, hcPartyId, keys.join(','))\n })\n }\n\n modifyHealthElement(body?: HealthElement): never {\n throw new Error('Cannot call a method that returns health element without providing a user for de/encryption')\n }\n\n modifyHealthElementWithUser(user: models.User, body?: HealthElement): Promise<HealthElement | any> {\n return body\n ? this.encrypt(user, [_.cloneDeep(body)])\n .then((hes) => super.modifyHealthElement(hes[0]))\n .then((he) => this.decryptWithUser(user, [he]))\n .then((hes) => hes[0])\n : Promise.resolve(null)\n }\n\n modifyHealthElements(body?: Array<HealthElement>): never {\n throw new Error('Cannot call a method that returns health elements without providing a user for de/encryption')\n }\n\n modifyHealthElementsWithUser(user: models.User, bodies?: HealthElement[]): Promise<HealthElement[] | any> {\n return bodies\n ? this.encrypt(\n user,\n bodies.map((c) => _.cloneDeep(c))\n )\n .then((hes) => super.modifyHealthElements(hes))\n .then((hes) => this.decrypt(this.userApi.getDataOwnerOf(user), hes))\n : Promise.resolve(null)\n }\n\n // noinspection JSUnusedGlobalSymbols\n /**\n * 1. Check whether there is a delegation with 'hcpartyId' or not.\n * 2. 'fetchHcParty[hcpartyId][1]': is encrypted AES exchange key by RSA public key of him.\n * 3. Obtain the AES exchange key, by decrypting the previous step value with hcparty private key\n * 3.1. KeyPair should be fetch from cache (in jwk)\n * 3.2. if it doesn't exist in the cache, it has to be loaded from Browser Local store, and then import it to WebCrypto\n * 4. Obtain the array of delegations which are delegated to his ID (hcpartyId) in this patient\n * 5. Decrypt and collect all keys (secretForeignKeys) within delegations of previous step (with obtained AES key of step 4)\n * 6. Do the REST call to get all helements with (allSecretForeignKeysDelimitedByComa, hcpartyId)\n *\n * After these painful steps, you have the helements of the patient.\n *\n * @param hcpartyId\n * @param patient (Promise)\n * @param keepObsoleteVersions\n */\n\n findBy(hcpartyId: string, patient: models.Patient, keepObsoleteVersions = false) {\n return this.crypto\n .extractSFKsHierarchyFromDelegations(patient, hcpartyId)\n .then((secretForeignKeys) =>\n secretForeignKeys && secretForeignKeys.length > 0\n ? Promise.all(\n secretForeignKeys\n .reduce((acc, level) => {\n return acc.concat([\n {\n hcpartyId: level.hcpartyId,\n extractedKeys: level.extractedKeys.filter((key) => !acc.some((previousLevel) => previousLevel.extractedKeys.includes(key))),\n },\n ])\n }, [] as Array<{ hcpartyId: string; extractedKeys: Array<string> }>)\n .filter((l) => l.extractedKeys.length > 0)\n .map(({ hcpartyId, extractedKeys }) => this.findByHCPartyPatientSecretFKeys(hcpartyId, _.uniq(extractedKeys).join(',')))\n ).then((results) => _.uniqBy(_.flatMap(results), (x) => x.id))\n : Promise.resolve([])\n )\n .then((decryptedHelements: Array<models.HealthElement>) => {\n const byIds: { [key: string]: models.HealthElement } = {}\n\n if (keepObsoleteVersions) {\n return decryptedHelements\n } else {\n decryptedHelements.forEach((he) => {\n if (he.healthElementId) {\n const phe = byIds[he.healthElementId]\n if (!phe || !phe.modified || (he.modified && phe.modified < he.modified)) {\n byIds[he.healthElementId] = he\n }\n }\n })\n return _.values(byIds).filter((s: any) => !s.endOfLife)\n }\n })\n }\n\n findByHCPartyPatientSecretFKeys(hcPartyId: string, secretFKeys: string): Promise<Array<models.Contact> | any> {\n return super.findHealthElementsByHCPartyPatientForeignKeys(hcPartyId, secretFKeys).then((helements) => this.decrypt(hcPartyId, helements))\n }\n\n encrypt(user: models.User, healthElements: Array<models.HealthElement>): Promise<Array<models.HealthElement>> {\n let dataOwnerId = this.userApi.getDataOwnerOf(user)\n return Promise.all(\n healthElements.map((he) =>\n (he.encryptionKeys && Object.keys(he.encryptionKeys).some((k) => !!he.encryptionKeys![k].length)\n ? Promise.resolve(he)\n : this.initEncryptionKeys(user, he)\n )\n .then((healthElement: HealthElement) =>\n this.crypto.extractKeysFromDelegationsForHcpHierarchy(dataOwnerId, healthElement.id!, healthElement.encryptionKeys!)\n )\n .then((sfks: { extractedKeys: Array<string>; hcpartyId: string }) =>\n this.crypto.AES.importKey('raw', hex2ua(sfks.extractedKeys[0].replace(/-/g, '')))\n )\n .then((key: CryptoKey) =>\n crypt(\n he,\n (obj: { [key: string]: string }) =>\n this.crypto.AES.encrypt(\n key,\n utf8_2ua(\n JSON.stringify(obj, (k, v) => {\n return v instanceof ArrayBuffer || v instanceof Uint8Array\n ? b2a(new Uint8Array(v).reduce((d, b) => d + String.fromCharCode(b), ''))\n : v\n })\n )\n ),\n this.encryptedKeys\n )\n )\n )\n )\n }\n\n initEncryptionKeys(user: models.User, he: models.HealthElement): Promise<models.HealthElement> {\n const dataOwnerId = this.userApi.getDataOwnerOf(user)\n return this.crypto.initEncryptionKeys(he, dataOwnerId!).then((eks) => {\n let promise = Promise.resolve(\n _.extend(he, {\n encryptionKeys: eks.encryptionKeys,\n })\n )\n ;(user.autoDelegations ? (user.autoDelegations.all || []).concat(user.autoDelegations.medicalInformation || []) : []).forEach(\n (delegateId) =>\n (promise = promise.then((healthElement) =>\n this.crypto\n .appendEncryptionKeys(healthElement, dataOwnerId!, delegateId, eks.secretId)\n .then((extraEks) => {\n return _.extend(healthElement, {\n encryptionKeys: extraEks.encryptionKeys,\n })\n })\n .catch((e) => {\n console.log(e.message)\n return healthElement\n })\n ))\n )\n return promise\n })\n }\n\n decryptWithUser(user: models.User, hes: Array<models.HealthElement>): Promise<Array<models.HealthElement>> {\n return this.decrypt(this.userApi.getDataOwnerOf(user), hes)\n }\n\n decrypt(dataOwnerId: string, hes: Array<models.HealthElement>): Promise<Array<models.HealthElement>> {\n return Promise.all(\n hes.map((he) =>\n this.crypto\n .extractKeysFromDelegationsForHcpHierarchy(dataOwnerId, he.id!, _.size(he.encryptionKeys) ? he.encryptionKeys! : he.delegations!)\n .then(({ extractedKeys: sfks }) => {\n if (!sfks || !sfks.length) {\n console.log('Cannot decrypt helement', he.id)\n return Promise.resolve(he)\n }\n if (he.encryptedSelf) {\n return this.crypto.AES.importKey('raw', hex2ua(sfks[0].replace(/-/g, ''))).then(\n (key) =>\n new Promise((resolve: (value: any) => any) =>\n this.crypto.AES.decrypt(key, string2ua(a2b(he.encryptedSelf!))).then(\n (dec) => {\n let jsonContent\n try {\n jsonContent = dec && ua2utf8(dec)\n jsonContent && _.assign(he, JSON.parse(jsonContent))\n } catch (e) {\n console.log('Cannot parse he', he.id, jsonContent || '<- Invalid encoding')\n }\n resolve(he)\n },\n () => {\n console.log('Cannot decrypt contact', he.id)\n resolve(he)\n }\n )\n )\n )\n } else {\n return Promise.resolve(he)\n }\n })\n )\n )\n }\n\n // noinspection JSUnusedGlobalSymbols\n serviceToHealthElement(user: models.User, patient: models.Patient, heSvc: models.Service, descr: string) {\n return this.newInstance(user, patient, {\n idService: heSvc.id,\n author: heSvc.author,\n responsible: heSvc.responsible,\n openingDate: heSvc.valueDate || heSvc.openingDate,\n descr: descr,\n idOpeningContact: heSvc.contactId,\n modified: heSvc.modified,\n created: heSvc.created,\n codes: heSvc.codes,\n tags: heSvc.tags,\n }).then((he) => {\n return this.createHealthElement(he)\n })\n }\n\n // noinspection JSUnusedGlobalSymbols, JSMethodCanBeStatic\n stringToCode(code: string) {\n const c = code.split('|')\n return new models.Code({\n type: c[0],\n code: c[1],\n version: c[2],\n id: code,\n })\n }\n}\n"]}
1
+ {"version":3,"file":"icc-helement-x-api.js","sourceRoot":"","sources":["../../icc-x-api/icc-helement-x-api.ts"],"names":[],"mappings":"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","sourcesContent":["import { IccHelementApi } from '../icc-api'\nimport { IccCryptoXApi } from './icc-crypto-x-api'\n\nimport * as models from '../icc-api/model/models'\n\nimport * as _ from 'lodash'\nimport * as moment from 'moment'\nimport { a2b, b2a, hex2ua, string2ua, ua2utf8, utf8_2ua } from './utils/binary-utils'\nimport { HealthElement } from '../icc-api/model/models'\nimport { IccUserXApi } from './icc-user-x-api'\nimport { crypt } from './utils'\n\nexport class IccHelementXApi extends IccHelementApi {\n crypto: IccCryptoXApi\n userApi: IccUserXApi\n\n private readonly encryptedKeys: Array<string>\n\n constructor(\n host: string,\n headers: { [key: string]: string },\n crypto: IccCryptoXApi,\n userApi: IccUserXApi,\n encryptedKeys: Array<string> = ['descr', 'note'],\n fetchImpl: (input: RequestInfo, init?: RequestInit) => Promise<Response> = typeof window !== 'undefined'\n ? window.fetch\n : typeof self !== 'undefined'\n ? self.fetch\n : fetch\n ) {\n super(host, headers, fetchImpl)\n this.crypto = crypto\n this.userApi = userApi\n this.encryptedKeys = encryptedKeys\n }\n\n newInstance(user: models.User, patient: models.Patient, h: any, confidential = false, delegates: string[] = []) {\n const dataOwnerId = this.userApi.getDataOwnerOf(user)\n const helement = _.assign(\n {\n id: this.crypto.randomUuid(),\n _type: 'org.taktik.icure.entities.HealthElement',\n created: new Date().getTime(),\n modified: new Date().getTime(),\n responsible: dataOwnerId,\n author: user.id,\n codes: [],\n tags: [],\n healthElementId: this.crypto.randomUuid(),\n openingDate: parseInt(moment().format('YYYYMMDDHHmmss')),\n },\n h || {}\n )\n\n return this.initDelegationsAndEncryptionKeys(helement, patient, user, confidential, delegates)\n }\n\n initDelegationsAndEncryptionKeys(\n healthElement: models.HealthElement,\n patient: models.Patient,\n user: models.User,\n confidential: boolean,\n delegates: string[] = []\n ): Promise<models.HealthElement> {\n let dataOwnerId = this.userApi.getDataOwnerOf(user)\n\n return this.crypto.extractPreferredSfk(patient, dataOwnerId!, confidential).then(async (key) => {\n if (!key) {\n console.error(`SFK cannot be found for Health element ${key}. The healthElement will not be reachable from the patient side`)\n }\n const dels = await this.crypto.initObjectDelegations(healthElement, patient, dataOwnerId!, key ?? null)\n const eks = await this.crypto.initEncryptionKeys(healthElement, dataOwnerId!)\n _.extend(healthElement, {\n delegations: dels.delegations,\n cryptedForeignKeys: dels.cryptedForeignKeys,\n secretForeignKeys: dels.secretForeignKeys,\n encryptionKeys: eks.encryptionKeys,\n })\n\n let promise = Promise.resolve(healthElement)\n _.uniq(\n delegates.concat(user.autoDelegations ? (user.autoDelegations.all || []).concat(user.autoDelegations.medicalInformation || []) : [])\n ).forEach(\n (delegateId) =>\n (promise = promise.then((healthElement) =>\n this.crypto.addDelegationsAndEncryptionKeys(patient, healthElement, dataOwnerId!, delegateId, dels.secretId, eks.secretId).catch((e) => {\n console.log(e)\n return healthElement\n })\n ))\n )\n ;(user.autoDelegations && user.autoDelegations.anonymousMedicalInformation ? user.autoDelegations.anonymousMedicalInformation : []).forEach(\n (delegateId) =>\n (promise = promise.then((healthElement) =>\n this.crypto.addDelegationsAndEncryptionKeys(patient, healthElement, dataOwnerId!, delegateId, null, eks.secretId).catch((e) => {\n console.log(e)\n return healthElement\n })\n ))\n )\n return promise\n })\n }\n\n createHealthElement(body?: models.HealthElement): never {\n throw new Error('Cannot call a method that returns health elements without providing a user for de/encryption')\n }\n\n createHealthElementWithUser(user: models.User, body?: models.HealthElement): Promise<models.HealthElement | any> {\n return body\n ? this.encrypt(user, [_.cloneDeep(body)])\n .then((hes) => super.createHealthElement(hes[0]))\n .then((he) => this.decryptWithUser(user, [he]))\n .then((hes) => hes[0])\n : Promise.resolve(null)\n }\n\n createHealthElements(body?: Array<HealthElement>): never {\n throw new Error('Cannot call a method that returns health elements without providing a user for de/encryption')\n }\n\n createHealthElementsWithUser(user: models.User, bodies?: models.HealthElement[]): Promise<models.HealthElement[] | any> {\n return bodies\n ? this.encrypt(\n user,\n bodies.map((c) => _.cloneDeep(c))\n )\n .then((hes) => super.createHealthElements(hes))\n .then((hes) => this.decrypt(this.userApi.getDataOwnerOf(user), hes))\n : Promise.resolve(null)\n }\n\n getHealthElement(healthElementId: string): never {\n throw new Error('Cannot call a method that returns health element without providing a user for de/encryption')\n }\n\n getHealthElementWithUser(user: models.User, healthElementId: string): Promise<models.HealthElement> {\n return super\n .getHealthElement(healthElementId)\n .then((he) => this.decryptWithUser(user, [he]))\n .then((hes) => hes[0])\n }\n\n getHealthElements(body?: models.ListOfIds): never {\n throw new Error('Cannot call a method that returns health elements without providing a user for de/encryption')\n }\n\n getHealthElementsWithUser(user: models.User, body?: models.ListOfIds): Promise<models.HealthElement[]> {\n return super.getHealthElements(body).then((hes) => this.decrypt(this.userApi.getDataOwnerOf(user), hes))\n }\n\n newHealthElementDelegations(healthElementId: string, body?: Array<models.Delegation>): never {\n throw new Error('Cannot call a method that returns health element without providing a user for de/encryption')\n }\n\n newHealthElementDelegationsWithUser(user: models.User, healthElementId: string, body?: Array<models.Delegation>): Promise<models.HealthElement> {\n return super\n .newHealthElementDelegations(healthElementId, body)\n .then((he) => this.decryptWithUser(user, [he]))\n .then((he) => he[0])\n }\n\n findHealthElementsByHCPartyPatientForeignKeys(hcPartyId: string, secretFKeys: string): never {\n throw new Error('Cannot call a method that returns health element without providing a user for de/encryption')\n }\n\n findHealthElementsByHCPartyPatientForeignKeysWithUser(user: models.User, hcPartyId: string, secretFKeys: string): Promise<HealthElement[]> {\n return super.findHealthElementsByHCPartyPatientForeignKeys(hcPartyId, secretFKeys).then((hes) => this.decryptWithUser(user, hes))\n }\n\n findHealthElementsByHCPartyAndPatientWithUser(user: models.User, hcPartyId: string, patient: models.Patient): Promise<models.HealthElement[]> {\n return this.crypto.extractSFKsHierarchyFromDelegations(patient, hcPartyId).then((keysAndHcPartyId) => {\n const keys = keysAndHcPartyId.find((secretForeignKeys) => secretForeignKeys.hcpartyId == hcPartyId)?.extractedKeys\n\n if (keys == undefined) {\n throw Error('No delegation for user')\n }\n\n return this.findHealthElementsByHCPartyPatientForeignKeysWithUser(user, hcPartyId, keys.join(','))\n })\n }\n\n modifyHealthElement(body?: HealthElement): never {\n throw new Error('Cannot call a method that returns health element without providing a user for de/encryption')\n }\n\n modifyHealthElementWithUser(user: models.User, body?: HealthElement): Promise<HealthElement | any> {\n return body\n ? this.encrypt(user, [_.cloneDeep(body)])\n .then((hes) => super.modifyHealthElement(hes[0]))\n .then((he) => this.decryptWithUser(user, [he]))\n .then((hes) => hes[0])\n : Promise.resolve(null)\n }\n\n modifyHealthElements(body?: Array<HealthElement>): never {\n throw new Error('Cannot call a method that returns health elements without providing a user for de/encryption')\n }\n\n modifyHealthElementsWithUser(user: models.User, bodies?: HealthElement[]): Promise<HealthElement[] | any> {\n return bodies\n ? this.encrypt(\n user,\n bodies.map((c) => _.cloneDeep(c))\n )\n .then((hes) => super.modifyHealthElements(hes))\n .then((hes) => this.decrypt(this.userApi.getDataOwnerOf(user), hes))\n : Promise.resolve(null)\n }\n\n // noinspection JSUnusedGlobalSymbols\n /**\n * 1. Check whether there is a delegation with 'hcpartyId' or not.\n * 2. 'fetchHcParty[hcpartyId][1]': is encrypted AES exchange key by RSA public key of him.\n * 3. Obtain the AES exchange key, by decrypting the previous step value with hcparty private key\n * 3.1. KeyPair should be fetch from cache (in jwk)\n * 3.2. if it doesn't exist in the cache, it has to be loaded from Browser Local store, and then import it to WebCrypto\n * 4. Obtain the array of delegations which are delegated to his ID (hcpartyId) in this patient\n * 5. Decrypt and collect all keys (secretForeignKeys) within delegations of previous step (with obtained AES key of step 4)\n * 6. Do the REST call to get all helements with (allSecretForeignKeysDelimitedByComa, hcpartyId)\n *\n * After these painful steps, you have the helements of the patient.\n *\n * @param hcpartyId\n * @param patient (Promise)\n * @param keepObsoleteVersions\n */\n\n findBy(hcpartyId: string, patient: models.Patient, keepObsoleteVersions = false) {\n return this.crypto\n .extractSFKsHierarchyFromDelegations(patient, hcpartyId)\n .then((secretForeignKeys) =>\n secretForeignKeys && secretForeignKeys.length > 0\n ? Promise.all(\n secretForeignKeys\n .reduce((acc, level) => {\n return acc.concat([\n {\n hcpartyId: level.hcpartyId,\n extractedKeys: level.extractedKeys.filter((key) => !acc.some((previousLevel) => previousLevel.extractedKeys.includes(key))),\n },\n ])\n }, [] as Array<{ hcpartyId: string; extractedKeys: Array<string> }>)\n .filter((l) => l.extractedKeys.length > 0)\n .map(({ hcpartyId, extractedKeys }) => this.findByHCPartyPatientSecretFKeys(hcpartyId, _.uniq(extractedKeys).join(',')))\n ).then((results) => _.uniqBy(_.flatMap(results), (x) => x.id))\n : Promise.resolve([])\n )\n .then((decryptedHelements: Array<models.HealthElement>) => {\n const byIds: { [key: string]: models.HealthElement } = {}\n\n if (keepObsoleteVersions) {\n return decryptedHelements\n } else {\n decryptedHelements.forEach((he) => {\n if (he.healthElementId) {\n const phe = byIds[he.healthElementId]\n if (!phe || !phe.modified || (he.modified && phe.modified < he.modified)) {\n byIds[he.healthElementId] = he\n }\n }\n })\n return _.values(byIds).filter((s: any) => !s.endOfLife)\n }\n })\n }\n\n findByHCPartyPatientSecretFKeys(hcPartyId: string, secretFKeys: string): Promise<Array<models.Contact> | any> {\n return super.findHealthElementsByHCPartyPatientForeignKeys(hcPartyId, secretFKeys).then((helements) => this.decrypt(hcPartyId, helements))\n }\n\n encrypt(user: models.User, healthElements: Array<models.HealthElement>): Promise<Array<models.HealthElement>> {\n let dataOwnerId = this.userApi.getDataOwnerOf(user)\n return Promise.all(\n healthElements.map((he) =>\n (he.encryptionKeys && Object.keys(he.encryptionKeys).some((k) => !!he.encryptionKeys![k].length)\n ? Promise.resolve(he)\n : this.initEncryptionKeys(user, he)\n )\n .then((healthElement: HealthElement) =>\n this.crypto.extractKeysFromDelegationsForHcpHierarchy(dataOwnerId, healthElement.id!, healthElement.encryptionKeys!)\n )\n .then((sfks: { extractedKeys: Array<string>; hcpartyId: string }) =>\n this.crypto.AES.importKey('raw', hex2ua(sfks.extractedKeys[0].replace(/-/g, '')))\n )\n .then((key: CryptoKey) =>\n crypt(\n he,\n (obj: { [key: string]: string }) =>\n this.crypto.AES.encrypt(\n key,\n utf8_2ua(\n JSON.stringify(obj, (k, v) => {\n return v instanceof ArrayBuffer || v instanceof Uint8Array\n ? b2a(new Uint8Array(v).reduce((d, b) => d + String.fromCharCode(b), ''))\n : v\n })\n )\n ),\n this.encryptedKeys\n )\n )\n )\n )\n }\n\n initEncryptionKeys(user: models.User, he: models.HealthElement): Promise<models.HealthElement> {\n const dataOwnerId = this.userApi.getDataOwnerOf(user)\n return this.crypto.initEncryptionKeys(he, dataOwnerId!).then((eks) => {\n let promise = Promise.resolve(\n _.extend(he, {\n encryptionKeys: eks.encryptionKeys,\n })\n )\n ;(user.autoDelegations ? (user.autoDelegations.all || []).concat(user.autoDelegations.medicalInformation || []) : []).forEach(\n (delegateId) =>\n (promise = promise.then((healthElement) =>\n this.crypto\n .appendEncryptionKeys(healthElement, dataOwnerId!, delegateId, eks.secretId)\n .then((extraEks) => {\n return _.extend(healthElement, {\n encryptionKeys: extraEks.encryptionKeys,\n })\n })\n .catch((e) => {\n console.log(e.message)\n return healthElement\n })\n ))\n )\n return promise\n })\n }\n\n decryptWithUser(user: models.User, hes: Array<models.HealthElement>): Promise<Array<models.HealthElement>> {\n return this.decrypt(this.userApi.getDataOwnerOf(user), hes)\n }\n\n decrypt(dataOwnerId: string, hes: Array<models.HealthElement>): Promise<Array<models.HealthElement>> {\n return Promise.all(\n hes.map((he) =>\n this.crypto\n .extractKeysFromDelegationsForHcpHierarchy(dataOwnerId, he.id!, _.size(he.encryptionKeys) ? he.encryptionKeys! : he.delegations!)\n .then(({ extractedKeys: sfks }) => {\n if (!sfks || !sfks.length) {\n console.log('Cannot decrypt helement', he.id)\n return Promise.resolve(he)\n }\n if (he.encryptedSelf) {\n return this.crypto.AES.importKey('raw', hex2ua(sfks[0].replace(/-/g, ''))).then(\n (key) =>\n new Promise((resolve: (value: any) => any) =>\n this.crypto.AES.decrypt(key, string2ua(a2b(he.encryptedSelf!))).then(\n (dec) => {\n let jsonContent\n try {\n jsonContent = dec && ua2utf8(dec)\n jsonContent && _.assign(he, JSON.parse(jsonContent))\n } catch (e) {\n console.log('Cannot parse he', he.id, jsonContent || '<- Invalid encoding')\n }\n resolve(he)\n },\n () => {\n console.log('Cannot decrypt health element', he.id)\n resolve(he)\n }\n )\n )\n )\n } else {\n return Promise.resolve(he)\n }\n })\n )\n )\n }\n\n // noinspection JSUnusedGlobalSymbols\n serviceToHealthElement(user: models.User, patient: models.Patient, heSvc: models.Service, descr: string) {\n return this.newInstance(user, patient, {\n idService: heSvc.id,\n author: heSvc.author,\n responsible: heSvc.responsible,\n openingDate: heSvc.valueDate || heSvc.openingDate,\n descr: descr,\n idOpeningContact: heSvc.contactId,\n modified: heSvc.modified,\n created: heSvc.created,\n codes: heSvc.codes,\n tags: heSvc.tags,\n }).then((he) => {\n return this.createHealthElement(he)\n })\n }\n\n // noinspection JSUnusedGlobalSymbols, JSMethodCanBeStatic\n stringToCode(code: string) {\n const c = code.split('|')\n return new models.Code({\n type: c[0],\n code: c[1],\n version: c[2],\n id: code,\n })\n }\n}\n"]}
@@ -43,6 +43,7 @@ const icc_time_table_x_api_1 = require("./icc-time-table-x-api");
43
43
  const IccDeviceApi_1 = require("../icc-api/api/IccDeviceApi");
44
44
  const icc_code_x_api_1 = require("./icc-code-x-api");
45
45
  const icc_maintenance_task_x_api_1 = require("./icc-maintenance-task-x-api");
46
+ const utils_1 = require("./utils");
46
47
  __exportStar(require("./icc-accesslog-x-api"), exports);
47
48
  __exportStar(require("./icc-bekmehr-x-api"), exports);
48
49
  __exportStar(require("./icc-calendar-item-x-api"), exports);
@@ -101,7 +102,7 @@ const Api = function (host, username, password, crypto = typeof window !== 'unde
101
102
  const messageApi = new icc_message_x_api_1.IccMessageXApi(host, headers, cryptoApi, userApi, fetchImpl);
102
103
  const maintenanceTaskApi = new icc_maintenance_task_x_api_1.IccMaintenanceTaskXApi(host, headers, cryptoApi, userApi, healthcarePartyApi, ['properties'], fetchImpl);
103
104
  try {
104
- yield authApi.login({ username, password });
105
+ yield (0, utils_1.retry)(() => authApi.login({ username, password }), 3, 1000, 1.5);
105
106
  }
106
107
  catch (e) {
107
108
  console.error('Incorrect user and password used to instantiate Api, or network problem', e);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../icc-x-api/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { IccAgendaApi, IccAuthApi, IccEntityrefApi, IccGroupApi, IccInsuranceApi, IccPatientApi, IccPermissionApi } from '../icc-api'\nimport { IccUserXApi } from './icc-user-x-api'\nimport { IccCryptoXApi } from './icc-crypto-x-api'\nimport { IccContactXApi } from './icc-contact-x-api'\nimport { IccInvoiceXApi } from './icc-invoice-x-api'\nimport { IccDocumentXApi } from './icc-document-x-api'\nimport { IccHcpartyXApi } from './icc-hcparty-x-api'\nimport { IccFormXApi } from './icc-form-x-api'\nimport { IccHelementXApi } from './icc-helement-x-api'\nimport { IccClassificationXApi } from './icc-classification-x-api'\nimport { IccCalendarItemXApi } from './icc-calendar-item-x-api'\nimport { IccPatientXApi } from './icc-patient-x-api'\nimport { IccMessageXApi } from './icc-message-x-api'\nimport { IccReceiptXApi } from './icc-receipt-x-api'\nimport { IccAccesslogXApi } from './icc-accesslog-x-api'\nimport { IccTimeTableXApi } from './icc-time-table-x-api'\nimport { IccDeviceApi } from '../icc-api/api/IccDeviceApi'\nimport { IccCodeXApi } from './icc-code-x-api'\nimport { IccMaintenanceTaskXApi } from './icc-maintenance-task-x-api'\n\nexport * from './icc-accesslog-x-api'\nexport * from './icc-bekmehr-x-api'\nexport * from './icc-calendar-item-x-api'\nexport * from './icc-classification-x-api'\nexport * from './icc-code-x-api'\nexport * from './icc-contact-x-api'\nexport * from './icc-crypto-x-api'\nexport * from './icc-doctemplate-x-api'\nexport * from './icc-document-x-api'\nexport * from './icc-form-x-api'\nexport * from './icc-hcparty-x-api'\nexport * from './icc-helement-x-api'\nexport * from './icc-invoice-x-api'\nexport * from './icc-message-x-api'\nexport * from './icc-patient-x-api'\nexport * from './icc-user-x-api'\nexport * from './icc-time-table-x-api'\nexport * from './icc-receipt-x-api'\nexport * from './utils'\n\nexport const apiHeaders = function (username: string, password: string, forceBasic: boolean = false) {\n return {\n Authorization: `Basic ${\n typeof btoa !== 'undefined' ? btoa(`${username}:${password}`) : Buffer.from(`${username}:${password}`).toString('base64')\n }`,\n 'force-authentication': forceBasic ? 'true' : 'false',\n }\n}\n\nexport interface Apis {\n authApi: IccAuthApi\n codeApi: IccCodeXApi\n entityReferenceApi: IccEntityrefApi\n userApi: IccUserXApi\n permissionApi: IccPermissionApi\n healthcarePartyApi: IccHcpartyXApi\n deviceApi: IccDeviceApi\n cryptoApi: IccCryptoXApi\n accessLogApi: IccAccesslogXApi\n agendaApi: IccAgendaApi\n contactApi: IccContactXApi\n formApi: IccFormXApi\n groupApi: IccGroupApi\n invoiceApi: IccInvoiceXApi\n insuranceApi: IccInsuranceApi\n documentApi: IccDocumentXApi\n healthcareElementApi: IccHelementXApi\n classificationApi: IccClassificationXApi\n calendarItemApi: IccCalendarItemXApi\n receiptApi: IccReceiptXApi\n timetableApi: IccTimeTableXApi\n patientApi: IccPatientXApi\n messageApi: IccMessageXApi\n maintenanceTaskApi: IccMaintenanceTaskXApi\n}\n\nexport const Api = async function (\n host: string,\n username: string,\n password: string,\n crypto: Crypto = typeof window !== 'undefined' ? window.crypto : typeof self !== 'undefined' ? self.crypto : ({} as Crypto),\n fetchImpl: (input: RequestInfo, init?: RequestInit) => Promise<Response> = typeof window !== 'undefined'\n ? window.fetch\n : typeof self !== 'undefined'\n ? self.fetch\n : fetch,\n forceBasic: boolean = false\n): Promise<Apis> {\n const headers = apiHeaders(username, password, forceBasic)\n const authApi = new IccAuthApi(host, headers, fetchImpl)\n const codeApi = new IccCodeXApi(host, headers, fetchImpl)\n const entityReferenceApi = new IccEntityrefApi(host, headers, fetchImpl)\n const userApi = new IccUserXApi(host, headers, fetchImpl)\n const permissionApi = new IccPermissionApi(host, headers, fetchImpl)\n const healthcarePartyApi = new IccHcpartyXApi(host, headers, fetchImpl)\n const deviceApi = new IccDeviceApi(host, headers, fetchImpl)\n const cryptoApi = new IccCryptoXApi(host, headers, healthcarePartyApi, new IccPatientApi(host, headers, fetchImpl), deviceApi, crypto)\n const accessLogApi = new IccAccesslogXApi(host, headers, cryptoApi, userApi, fetchImpl)\n const agendaApi = new IccAgendaApi(host, headers, fetchImpl)\n const contactApi = new IccContactXApi(host, headers, cryptoApi, userApi, fetchImpl)\n const formApi = new IccFormXApi(host, headers, cryptoApi, userApi, fetchImpl)\n const groupApi = new IccGroupApi(host, headers)\n const invoiceApi = new IccInvoiceXApi(host, headers, cryptoApi, entityReferenceApi, userApi, fetchImpl)\n const insuranceApi = new IccInsuranceApi(host, headers, fetchImpl)\n const documentApi = new IccDocumentXApi(host, headers, cryptoApi, authApi, userApi, fetchImpl)\n const healthcareElementApi = new IccHelementXApi(host, headers, cryptoApi, userApi, ['descr', 'note'], fetchImpl)\n const classificationApi = new IccClassificationXApi(host, headers, cryptoApi, userApi, fetchImpl)\n const calendarItemApi = new IccCalendarItemXApi(host, headers, cryptoApi, userApi, ['details', 'title', 'patientId'], fetchImpl)\n const receiptApi = new IccReceiptXApi(host, headers, cryptoApi, userApi, fetchImpl)\n const timetableApi = new IccTimeTableXApi(host, headers, cryptoApi, userApi, fetchImpl)\n const patientApi = new IccPatientXApi(\n host,\n headers,\n cryptoApi,\n contactApi,\n formApi,\n healthcareElementApi,\n invoiceApi,\n documentApi,\n healthcarePartyApi,\n classificationApi,\n userApi,\n calendarItemApi,\n ['note'],\n fetchImpl\n )\n const messageApi = new IccMessageXApi(host, headers, cryptoApi, userApi, fetchImpl)\n const maintenanceTaskApi = new IccMaintenanceTaskXApi(host, headers, cryptoApi, userApi, healthcarePartyApi, ['properties'], fetchImpl)\n\n try {\n await authApi.login({ username, password })\n } catch (e) {\n console.error('Incorrect user and password used to instantiate Api, or network problem', e)\n }\n\n return {\n cryptoApi,\n authApi,\n codeApi,\n userApi,\n permissionApi,\n patientApi,\n healthcarePartyApi,\n deviceApi,\n accessLogApi,\n contactApi,\n healthcareElementApi,\n documentApi,\n formApi,\n invoiceApi,\n insuranceApi,\n messageApi,\n entityReferenceApi,\n receiptApi,\n agendaApi,\n calendarItemApi,\n classificationApi,\n timetableApi,\n groupApi,\n maintenanceTaskApi,\n }\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../icc-x-api/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { IccAgendaApi, IccAuthApi, IccEntityrefApi, IccGroupApi, IccInsuranceApi, IccPatientApi, IccPermissionApi } from '../icc-api'\nimport { IccUserXApi } from './icc-user-x-api'\nimport { IccCryptoXApi } from './icc-crypto-x-api'\nimport { IccContactXApi } from './icc-contact-x-api'\nimport { IccInvoiceXApi } from './icc-invoice-x-api'\nimport { IccDocumentXApi } from './icc-document-x-api'\nimport { IccHcpartyXApi } from './icc-hcparty-x-api'\nimport { IccFormXApi } from './icc-form-x-api'\nimport { IccHelementXApi } from './icc-helement-x-api'\nimport { IccClassificationXApi } from './icc-classification-x-api'\nimport { IccCalendarItemXApi } from './icc-calendar-item-x-api'\nimport { IccPatientXApi } from './icc-patient-x-api'\nimport { IccMessageXApi } from './icc-message-x-api'\nimport { IccReceiptXApi } from './icc-receipt-x-api'\nimport { IccAccesslogXApi } from './icc-accesslog-x-api'\nimport { IccTimeTableXApi } from './icc-time-table-x-api'\nimport { IccDeviceApi } from '../icc-api/api/IccDeviceApi'\nimport { IccCodeXApi } from './icc-code-x-api'\nimport { IccMaintenanceTaskXApi } from './icc-maintenance-task-x-api'\nimport { retry } from './utils'\n\nexport * from './icc-accesslog-x-api'\nexport * from './icc-bekmehr-x-api'\nexport * from './icc-calendar-item-x-api'\nexport * from './icc-classification-x-api'\nexport * from './icc-code-x-api'\nexport * from './icc-contact-x-api'\nexport * from './icc-crypto-x-api'\nexport * from './icc-doctemplate-x-api'\nexport * from './icc-document-x-api'\nexport * from './icc-form-x-api'\nexport * from './icc-hcparty-x-api'\nexport * from './icc-helement-x-api'\nexport * from './icc-invoice-x-api'\nexport * from './icc-message-x-api'\nexport * from './icc-patient-x-api'\nexport * from './icc-user-x-api'\nexport * from './icc-time-table-x-api'\nexport * from './icc-receipt-x-api'\nexport * from './utils'\n\nexport const apiHeaders = function (username: string, password: string, forceBasic: boolean = false) {\n return {\n Authorization: `Basic ${\n typeof btoa !== 'undefined' ? btoa(`${username}:${password}`) : Buffer.from(`${username}:${password}`).toString('base64')\n }`,\n 'force-authentication': forceBasic ? 'true' : 'false',\n }\n}\n\nexport interface Apis {\n authApi: IccAuthApi\n codeApi: IccCodeXApi\n entityReferenceApi: IccEntityrefApi\n userApi: IccUserXApi\n permissionApi: IccPermissionApi\n healthcarePartyApi: IccHcpartyXApi\n deviceApi: IccDeviceApi\n cryptoApi: IccCryptoXApi\n accessLogApi: IccAccesslogXApi\n agendaApi: IccAgendaApi\n contactApi: IccContactXApi\n formApi: IccFormXApi\n groupApi: IccGroupApi\n invoiceApi: IccInvoiceXApi\n insuranceApi: IccInsuranceApi\n documentApi: IccDocumentXApi\n healthcareElementApi: IccHelementXApi\n classificationApi: IccClassificationXApi\n calendarItemApi: IccCalendarItemXApi\n receiptApi: IccReceiptXApi\n timetableApi: IccTimeTableXApi\n patientApi: IccPatientXApi\n messageApi: IccMessageXApi\n maintenanceTaskApi: IccMaintenanceTaskXApi\n}\n\nexport const Api = async function (\n host: string,\n username: string,\n password: string,\n crypto: Crypto = typeof window !== 'undefined' ? window.crypto : typeof self !== 'undefined' ? self.crypto : ({} as Crypto),\n fetchImpl: (input: RequestInfo, init?: RequestInit) => Promise<Response> = typeof window !== 'undefined'\n ? window.fetch\n : typeof self !== 'undefined'\n ? self.fetch\n : fetch,\n forceBasic: boolean = false\n): Promise<Apis> {\n const headers = apiHeaders(username, password, forceBasic)\n const authApi = new IccAuthApi(host, headers, fetchImpl)\n const codeApi = new IccCodeXApi(host, headers, fetchImpl)\n const entityReferenceApi = new IccEntityrefApi(host, headers, fetchImpl)\n const userApi = new IccUserXApi(host, headers, fetchImpl)\n const permissionApi = new IccPermissionApi(host, headers, fetchImpl)\n const healthcarePartyApi = new IccHcpartyXApi(host, headers, fetchImpl)\n const deviceApi = new IccDeviceApi(host, headers, fetchImpl)\n const cryptoApi = new IccCryptoXApi(host, headers, healthcarePartyApi, new IccPatientApi(host, headers, fetchImpl), deviceApi, crypto)\n const accessLogApi = new IccAccesslogXApi(host, headers, cryptoApi, userApi, fetchImpl)\n const agendaApi = new IccAgendaApi(host, headers, fetchImpl)\n const contactApi = new IccContactXApi(host, headers, cryptoApi, userApi, fetchImpl)\n const formApi = new IccFormXApi(host, headers, cryptoApi, userApi, fetchImpl)\n const groupApi = new IccGroupApi(host, headers)\n const invoiceApi = new IccInvoiceXApi(host, headers, cryptoApi, entityReferenceApi, userApi, fetchImpl)\n const insuranceApi = new IccInsuranceApi(host, headers, fetchImpl)\n const documentApi = new IccDocumentXApi(host, headers, cryptoApi, authApi, userApi, fetchImpl)\n const healthcareElementApi = new IccHelementXApi(host, headers, cryptoApi, userApi, ['descr', 'note'], fetchImpl)\n const classificationApi = new IccClassificationXApi(host, headers, cryptoApi, userApi, fetchImpl)\n const calendarItemApi = new IccCalendarItemXApi(host, headers, cryptoApi, userApi, ['details', 'title', 'patientId'], fetchImpl)\n const receiptApi = new IccReceiptXApi(host, headers, cryptoApi, userApi, fetchImpl)\n const timetableApi = new IccTimeTableXApi(host, headers, cryptoApi, userApi, fetchImpl)\n const patientApi = new IccPatientXApi(\n host,\n headers,\n cryptoApi,\n contactApi,\n formApi,\n healthcareElementApi,\n invoiceApi,\n documentApi,\n healthcarePartyApi,\n classificationApi,\n userApi,\n calendarItemApi,\n ['note'],\n fetchImpl\n )\n const messageApi = new IccMessageXApi(host, headers, cryptoApi, userApi, fetchImpl)\n const maintenanceTaskApi = new IccMaintenanceTaskXApi(host, headers, cryptoApi, userApi, healthcarePartyApi, ['properties'], fetchImpl)\n\n try {\n await retry(() => authApi.login({ username, password }), 3, 1000, 1.5)\n } catch (e) {\n console.error('Incorrect user and password used to instantiate Api, or network problem', e)\n }\n\n return {\n cryptoApi,\n authApi,\n codeApi,\n userApi,\n permissionApi,\n patientApi,\n healthcarePartyApi,\n deviceApi,\n accessLogApi,\n contactApi,\n healthcareElementApi,\n documentApi,\n formApi,\n invoiceApi,\n insuranceApi,\n messageApi,\n entityReferenceApi,\n receiptApi,\n agendaApi,\n calendarItemApi,\n classificationApi,\n timetableApi,\n groupApi,\n maintenanceTaskApi,\n }\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@icure/api",
3
- "version": "5.0.1",
3
+ "version": "5.0.4",
4
4
  "description": "Typescript version of iCure standalone API client",
5
5
  "main": "index.js",
6
6
  "types": "index.d.ts",