dome-embedded-app-sdk
Version:
Build Dome cards and document viewers with a single SDK. Cards let you extend a dome with custom functionality, while viewers let you render and edit documents inside Dome.
163 lines (112 loc) • 5.08 kB
Markdown
# Card SDK Guide
The Card SDK powers embedded card experiences inside a dome.
## Install
```bash
npm install dome-embedded-app-sdk
```
## Starter projects
- React card starter: <https://github.com/InTouchSO/card-react_starter>
- Angular card starter: <https://github.com/InTouchSO/card-angular_starter>
## Initialize
```JavaScript
import { CardSdk, getKeyFromBlob } from "dome-embedded-app-sdk";
const my_card_decryption_blob = {...};
CardSdk.init(getKeyFromBlob(my_card_decryption_blob), {
onInit: (data) => {
console.debug("onInit payload", data);
},
onInitError: ({ error_code, message }) => {
console.error("Initialization error", error_code, message);
}
onError: ({ error_code, message }) => {
console.error("Card error", error_code, message);
}
}).then((sdk) => this.sdk = sdk);
```
`onInit` receives the user payload, permissions, role, container info, and UI metadata.
### onInit payload
The payload is a `CardInitData` object with these commonly used fields:
- `api_token`: token for authenticated API calls.
- `iuid`: card instance identifier.
- `user`: current user profile (see `CardUser`), includes `name`, `photo`, `organization`, and `getFullName()`.
- `perms_v2`: permission map keyed by role abbreviation.
- `role`: role metadata for the current user.
- `container`: container metadata (includes `iuid`).
- `ui`: UI metadata including `ui.theme`
Use the exported `CardInitData` and `CardUser` types for full payload typing.
## Events
- `onInit(data)`: Fired after the card payload is decrypted.
- `onInitError(data)`: Fired when initialization fails.
- `onError(data)`: Fired for runtime errors.
## Card permissions
```JavaScript
import { CardPermission, cardPermission } from "dome-embedded-app-sdk";
```
- `CardPermission`: enum of permission codes (`READ`, `WRITE`, `FORWARD`, `SHARE`, `DOWNLOAD`).
- `cardPermission`: convenience alias for the enum.
- `hasPerm(permission)`: Check for a specific `CardPermission`.
- `canRead()` / `canWrite()`: Convenience permission checks.
## CardFS error codes
```JavaScript
import { CardFsErrorCode } from "dome-embedded-app-sdk";
```
`CardFsErrorCode` provides standardized error codes for cardFS operations:
`NO_INTERNET`, `NO_PERMISSION`, `NOT_FOUND`, `SERVER_ERROR`, `TIMEOUT`, `INVALID_REQUEST`, `UNKNOWN`.
## CardFS (file storage)
`cardFS` is a high-level API for reading, writing, deleting, and listing files. Each method either returns a promise or uses handlers for streaming updates.
### Understanding `is_stale`, `is_complete`, `is_dirty`
- `is_stale`: the payload may be from cache and could be outdated; a fresh payload can arrive later.
- `is_complete`: no more updates are expected for this request (final chunk or last page).
- `is_dirty`: the file/listing has pending local changes that aren’t yet synchronized.
#### Common scenarios
- **Cached read**: `is_stale: true`, `is_complete: true` (cached result only).
- **Cached + live read**: first payload `is_stale: true`, then a later payload `is_stale: false`.
- **Streaming read/list**: intermediate updates `is_complete: false`, final update `is_complete: true`.
### Read
```JavaScript
sdk.cardFS.read("my-journal.json", {
next: (payload) => {
console.debug("Read payload", payload);
},
error: (err) => {
console.error("Read error", err);
}
});
```
- `read(name, handler, allowStale?)`
- `readById(iuid, handler, allowStale?)`
`read` and `readById` fetch a file by name or id and stream updates through the handler until `is_complete` is true.
`payload` includes `object`, `data`, `is_stale`, `is_complete`, and `is_dirty` flags.
### Write
```JavaScript
import { CardFsFileType } from "dome-embedded-app-sdk";
sdk.cardFS.write("my-journal.json", { text: "Hello" }, CardFsFileType.JSON, (update) => {
console.debug("Upload status", update.status, update.progress);
});
```
- `write(name, fileData, fileType, onUpdate?)`
- `writeById(iuid, fileData, fileType, onUpdate?)`
`write` and `writeById` upload new data for a file and optionally report progress through `onUpdate`.
`fileType` can be `CardFsFileType.JSON`, `CardFsFileType.TEXT`, or `CardFsFileType.BINARY`.
`onUpdate` receives `{ status, progress, uploaded_bytes }` when available.
### Delete
- `delete(name, onUpdate?)`
- `deleteById(iuid, onUpdate?)`
`delete` and `deleteById` remove a file by name or id and optionally report progress.
### List
When listing folders, the folder name should not start with `/` and must end with `/` (for example: `notes/`).
```JavaScript
sdk.cardFS.list("notes/", {
next: (payload) => {
console.debug("Folder listing", payload.documents);
},
error: (err) => {
console.error("List error", err);
}
});
```
`list(folderName, handler)` yields the folder data with `documents`, `is_stale`, and `is_complete` flags.
`list` retrieves a folder listing and streams page updates until the final page is reached.
## Utilities
- `openDeepLink(url)`: Ask the host to open a supported deep link.
- `getKeyFromBlob(blob)`: Decode a `CardKeyBlob` into the secret string.