# @taktik/icc-api

> Typescript version of iCure standalone API client

Latest version **3.0.80** (published 2021-10-07) · MIT license · 0 weekly downloads

## Install

```sh
npm install @taktik/icc-api
pnpm add @taktik/icc-api
yarn add @taktik/icc-api
bun add @taktik/icc-api
```

## Health

**Score 25/100 (F)** — status: abandoned.

Positive: has types; no vulnerabilities; high quality score.

Warnings: low downloads; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 3.0.80 |
| Published | 2021-10-07 |
| First published | 2020-03-30 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | CommonJS |
| Dependencies | 8 |
| Unpacked size | 3.7 MB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 4 |
| Author | Taktik sa - B12 Consulting |
| Maintainers | aduchate, aop1624, lomancel, dani_rocha, arnaugathy, summys, jduqn |

## Links

- npm: https://www.npmjs.com/package/@taktik/icc-api
- Repository: https://github.com/taktik/icc-api
- Homepage: https://github.com/taktik/icc-api#readme
- Issues: https://github.com/taktik/icc-api/issues
- npm.io page: https://npm.io/package/@taktik/icc-api

## Dependencies (8)

- [lodash](https://npm.io/package/lodash.md) ^4.17.12
- [moment](https://npm.io/package/moment.md) ^2.22.1
- [base64-js](https://npm.io/package/base64-js.md) ^1.3.0
- [uuid-encoder](https://npm.io/package/uuid-encoder.md) ^1.1.0
- [text-encoding](https://npm.io/package/text-encoding.md) ^0.7.0
- [@taktik/fhc-api](https://npm.io/package/@taktik/fhc-api.md) ^0.3.9
- [libphonenumber-js](https://npm.io/package/libphonenumber-js.md) ^1.7.18
- [node-webcrypto-ossl](https://npm.io/package/node-webcrypto-ossl.md) ^1.0.48

## Recent versions

- 3.0.80 (latest) — 2021-10-07
- 3.0.79 — 2021-10-06
- 3.0.77 — 2021-08-26
- 3.0.76 — 2021-08-03
- 3.0.75 — 2021-07-15
- 3.0.74 — 2021-07-15
- 3.0.72 — 2021-07-07
- 3.0.71 — 2021-07-07
- 3.0.70 — 2021-06-25
- 3.0.69 — 2021-06-25
- 3.0.68 — 2021-06-25
- 3.0.67 — 2021-06-24
- 3.0.66 — 2021-05-03
- 3.0.65 — 2021-04-26
- 3.0.64 — 2021-03-15
- … 57 more at https://npm.io/package/@taktik/icc-api/versions

## README

# Crypto model in iCure

## Lexic

- `"ABCD"` is a **non** encrypted key (uuid, ...)
- `{AB}` is the encryption key of the pair `AB`, where hcParty `A` gives delegation to hcParty `B`.
  The encryption key is stored encrypted in the hcPartyKeys of hcParty `A` document (see below)
- `<ABCD>_{AB}` is the key `ABCD` encrypted with encryption key `{AB}`
- `<{AB}>_{A}` is the encryption key `{AB}` encrypted with the public key of hcParty `A`

The encryption keys are stored in the hcParty document that gives delegation to other user, since only the user can modify his hcParty document in CouchDB.
The hcParty `B` needs to access the hcParty `A` document to decrypt (with his private key) the encryption key `{AB}` stored in the field hcPartyKeys.

```
## HCP A ##
hcPartyKeys: {
   A: [ <{AA}>_{A}, <{AA}>_{A} ]
   B: [ <{AB}>_{A}, <{AB}>_{B} ]
}
```

## Document type relations

```
## Patient 1234 ##
ID: "1234"
Delegations: { A->A: <ABCD>_{AA}, A->B: <ABCD>_{AB} }
EncryptionKeys: { A->A: <DCBA>_{AA}, A->B: <DCBA>_{AB} }
```

```
## Contact 4567 ##
ID: "4567"
SecretForeignKeys: [ "ABCD" ]
CryptedForeignKeys: { A->A: <1234>_{AA}, A->B: <1234>_{AB} }
EncryptionKeys: { A->A: <EFGH>_{AA}, A->B: <EFGH>_{AB} }
```

The **delegations** of the **patient** document store the encrypted secretForeignKeys that you find in clear in the **contact** document. And allows, once decrypted, to find the contacts of a patient.

On the other side, the **cryptedForeignKeys** of the **contact** document allows, once decrypted, to find the corresponding **patient** document.

The **encryptionKeys** of a document are used to encrypt the content of the corresponding document. As for the delegations, the document encryption keys are stored encrypted with the encryption keys `{AA}`, `{AB}`, ...

The **healthElement** documents are linked to patient documents in the same way as the contact. This means that the healthElement documents have also **SecretForeignKeys** and **CryptedForeignKeys**, beside the **encryptionKeys**.

## Delegations

- Delegations === encrypted foreign key of all patient icureStoredDocument => it makes the link from a patient to a storedDocument
- CryptedForeignKeys === encrypted patient.ID => it makes the link from a storedDocument to a patient
- EncryptionKeys === encrypted encryptionKey (probably symmetric)

## Multi profession

Contacts and delegations need to be segmented.
=> need to have segmented auto-delegations

# Usage

## Instalation

Install from npm

```
npm install --save icc-api
```

## ES6 import

Example
ES6 include

```javaScript
import * as IccApi from 'icc-api'
```

---
_Source: https://npm.io/package/@taktik/icc-api · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
