# Jellyfish Client SDK

This is a client side library to interact with the Jellyfish API.
It's meant to provide high level useful functionality to the web UI and any other clients.

# Usage

Below is an example how to use Jellyfish:

```typescript
import { getSdk } from "@balena/jellyfish-client-sdk";

// Create a new SDK instance, providing the API url and prefix
const sdk = getSdk({
    apiUrl: "https://api.ly.fish",
    apiPrefix: "api/v2/",
});

(async () => {
    const sessionContract = await sdk.auth.login({
        username: "jellyfish",
        password: "jellyfish",
    });

    if (sessionContract) {
        // Authorise the SDK
        sdk.setAuthToken(sessionContract.id);

        // Get and output a list of all channel contracts
        const channelContracts = await sdk.card.getAllByType('channel@1.0.0');
        console.log('channelContracts:', JSON.stringify(channelContracts, null, 2));

        // Query for a specific user and output results
        const userContract = await window.sdk.query({
            type: 'object',
            properties: {
                type: {
                    const: 'user@1.0.0',
                },
                slug: {
                    const: 'user-foobar',
                },
            },
        });
        console.log('userContract:', JSON.stringify(userContract, null, 2));

        // Query for a specific user with links and output results
        const userContractWithLinks = await window.sdk.query({
            type: 'object',
            properties: {
                type: {
                    const: 'user@1.0.0',
                },
                slug: {
                    const: 'user-foobar',
                },
            },
            $$links: {
                'is member of': {
                    type: 'object',
                },
            },
        });
        console.log('userContractWithLinks:', JSON.stringify(userContractWithLinks, null, 2));
    }
})();
```
