add API client documentation (#8087)
Some checks are pending
CI / build (push) Waiting to run
CI / svelte-check (push) Blocked by required conditions
CI / formatting (push) Blocked by required conditions
CI / test (push) Blocked by required conditions
CI / uitest (push) Waiting to run
CI / uitest-pg (push) Waiting to run
CI / uitest-qms (push) Waiting to run
CI / uitest-workspaces (push) Waiting to run
CI / docker-build (push) Blocked by required conditions
CI / dist-build (push) Blocked by required conditions

Signed-off-by: Alexander Onnikov <Alexander.Onnikov@xored.com>
This commit is contained in:
Alexander Onnikov 2025-02-25 09:09:35 +03:00 committed by GitHub
parent 4855e94645
commit 815caef82a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -0,0 +1,399 @@
# Huly Platform API Client
A TypeScript client library for interacting with the Huly Platform API.
## Installation
In order to be able to install required packages, you will need to obtain GitHub access token. You can create a token by following the instructions [here](https://docs.github.com/en/packages/working-with-a-github-packages-registry/working-with-the-npm-registry#authenticating-with-a-personal-access-token).
```bash
npm install @hcengineering/api-client
```
## Authentication
There are two ways to connect to the platform, using email and password, or using token.
Parameters:
- `url`: URL of the Huly instance
- `options`: Connection options
- `workspace`: Name of the workspace to connect to
- `token`: Optional authentication token
- `email`: Optional user email
- `password`: Optional user password
- `connectionTimeout`: Optional connection timeout
- `socketFactory`: Optional socket factory
### Using Email and Password
```ts
const client = await connect('http://localhost:8087', {
email: 'user1',
password: '1234',
workspace: 'ws1'
})
...
await client.close()
```
### Using Token
```ts
const client = await connect('http://localhost:8087', {
token: '...',
workspace: 'ws1'
})
...
await client.close()
```
## Example usage
### Fetch API
The client provides two main methods for retrieving documents: `findOne` and `findAll`.
#### findOne
Retrieves a single document matching the query criteria.
Parameters:
- `_class`: Class of the object to find, results will include all subclasses of the targe class
- `query`: Query criteria
- `options`: Find options
- `limit`: Limit the number of results returned
- `sort`: Sorting criteria
- `lookup`: Lookup criteria
- `projection`: Projection criteria
- `total`: If specified total will be returned
Example:
```ts
import contact from '@hcengineering/contact'
...
const person = await client.findOne(
contact.class.Person,
{
_id: 'person-id'
}
)
```
#### findAll
Retrieves multiple document matching the query criteria.
Parameters:
- `_class`: Class of the object to find, results will include all subclasses of the targe class
- `query`: Query criteria
- `options`: Find options
- `limit`: Limit the number of results returned
- `sort`: Sorting criteria
- `lookup`: Lookup criteria
- `projection`: Projection criteria
- `total`: If specified total will be returned
Example:
```ts
import { SortingOrder } from '@hcengineering/core'
import contact from '@hcengineering/contact'
..
const persons = await client.findAll(
contact.class.Person,
{
city: 'New York'
},
{
limit: 10,
sort: {
name: SortingOrder.Ascending
}
}
)
```
### Documents API
The client provides three main methods for managing documents: `createDoc`, `updateDoc`, and `removeDoc`. These methods allow you to perform CRUD operations on documents.
#### createDoc
Creates a new document in the specified space.
Parameters:
- `_class`: Class of the object
- `space`: Space of the object
- `attributes`: Attributes of the object
- `id`: Optional id of the object, if not provided, a new id will be generated
Example:
```ts
import contact, { AvatarType } from '@hcengineering/contact'
..
const personId = await client.createDoc(
contact.class.Person,
contact.space.Contacts,
{
name: 'Doe,John',
city: 'New York',
avatarType: AvatarType.COLOR
}
)
```
#### updateDoc
Updates exising document.
Parameters:
- `_class`: Class of the object
- `space`: Space of the object
- `objectId`: Id of the object
- `operations`: Attributes of the object to update
Example:
```ts
import contact from '@hcengineering/contact'
..
await client.updateDoc(
contact.class.Person,
contact.space.Contacts,
personId,
{
city: 'New York',
}
)
```
#### removeDoc
Removes exising document.
Parameters:
- `_class`: Class of the object
- `space`: Space of the object
- `objectId`: Id of the object
Example:
```ts
import contact from '@hcengineering/contact'
..
await client.removeDoc(
contact.class.Person,
contact.space.Contacts,
personId
)
```
### Collections API
#### addCollection
Creates a new attached document in the specified collection.
Parameters:
- `_class`: Class of the object to create
- `space`: Space of the object to create
- `attachedTo`: Id of the object to attach to
- `attachedToClass`: Class of the object to attach to
- `collection`: Name of the collection containing attached documents
- `attributes`: Attributes of the object
- `id`: Optional id of the object, if not provided, a new id will be generated
Example:
```ts
import contact, { AvatarType } from '@hcengineering/contact'
..
const personId = await client.createDoc(
contact.class.Person,
contact.space.Contacts,
{
name: 'Doe,John',
city: 'New York',
avatarType: AvatarType.COLOR
}
)
await client.addCollection(
contact.class.Channel,
contact.space.Contacts,
personId,
contact.class.Person,
'channels',
{
provider: contact.channelProvider.Email,
value: 'john.doe@example.com'
}
)
```
#### updateCollection
Updates exising attached document in collection.
Parameters:
- `_class`: Class of the object to update
- `space`: Space of the object to update
- `objectId`: Space of the object to update
- `attachedTo`: Id of the parent object
- `attachedToClass`: Class of the parent object
- `collection`: Name of the collection containing attached documents
- `attributes`: Attributes of the object to update
Example:
```ts
import contact from '@hcengineering/contact'
..
await client.updateCollection(
contact.class.Channel,
contact.space.Contacts,
channelId,
personId,
contact.class.Person,
'channels',
{
city: 'New York',
}
)
```
#### removeCollection
Removes exising attached document from collection.
Parameters:
- `_class`: Class of the object to remove
- `space`: Space of the object to remove
- `objectId`: Space of the object to remove
- `attachedTo`: Id of the parent object
- `attachedToClass`: Class of the parent object
- `collection`: Name of the collection containing attached documents
Example:
```ts
import contact from '@hcengineering/contact'
..
await client.removeCollection(
contact.class.Channel,
contact.space.Contacts,
channelId,
personId,
contact.class.Person,
'channels'
)
```
### Mixins API
The client provides two methods for managing mixins: `createMixin` and `updateMixin`.
#### createMixin
Creates a new mixin for a specified document.
Parameters:
- `objectId`: Id of the object the mixin is attached to
- `objectClass`: Class of the object the mixin is attached to
- `objectSpace`: Space of the object the mixin is attached to
- `mixin`: Id of the mixin type to update
- `attributes`: Attributes of the mixin
```ts
import contact, { AvatarType } from '@hcengineering/contact'
..
const personId = await client.createDoc(
contact.class.Person,
contact.space.Contacts,
{
name: 'Doe,John',
city: 'New York',
avatarType: AvatarType.COLOR
}
)
await client.createMixin(
personId,
contact.class.Person,
contact.space.Contacts,
contact.mixin.Employee,
{
active: true,
position: 'CEO'
}
)
```
#### updateMixin
Updates an existing mixin.
Parameters:
- `objectId`: Id of the object the mixin is attached to
- `objectClass`: Class of the object the mixin is attached to
- `objectSpace`: Space of the object the mixin is attached to
- `mixin`: Id of the mixin type to update
- `attributes`: Attributes of the mixin to update
```ts
import contact, { AvatarType } from '@hcengineering/contact'
..
const person = await client.findOne(
contact.class.Person,
{
_id: 'person-id'
}
)
await client.updateMixin(
personId,
contact.class.Person,
contact.space.Contacts,
contact.mixin.Employee,
{
active: false
}
)
```