# @taktik/icc-api-legacy

> Typescript version of iCure standalone API client

Latest version **1.0.242** (published 2021-02-11) · MIT license · 0 weekly downloads

## Install

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

## 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 | 1.0.242 |
| Published | 2021-02-11 |
| First published | 2020-04-15 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | CommonJS |
| Dependencies | 8 |
| Unpacked size | 3.5 MB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Author | Taktik sa - B12 Consulting |
| Maintainers | aduchate, lomancel, dani_rocha, arnaugathy, summys, jasonvnm, jduqn |

## Links

- npm: https://www.npmjs.com/package/@taktik/icc-api-legacy
- 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-legacy

## Dependencies (8)

- [lodash](https://npm.io/package/lodash.md) ^4.17.12
- [moment](https://npm.io/package/moment.md) ^2.22.1
- [fhc-api](https://npm.io/package/fhc-api.md) ^1.0.44
- [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
- [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

- 1.0.242 (latest) — 2021-02-11
- 1.0.240 — 2021-02-10
- 1.0.238 — 2020-07-13
- 1.0.237 — 2020-07-13
- 1.0.235 — 2020-04-20
- 1.0.232 — 2020-04-15

## 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-legacy · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
