# @vendia/client - a type-safe client for Vendia Share

The Client SDK is a type-safe **TypeScript & JavaScript** client for your Uni's API with **auto-generated code customized to match your Uni's schema!**

If you're new to Vendia and wondering what a "Uni" is? This is a great place to start: [What is a Uni?](https://docs.vendia.com/platform/vendia-terminology#uni).

The official Vendia client is the easiest way to start working with your Uni. Enjoy autocomplete (intellisense) in your favorite IDE, built-in support for both HTTP and websocket GraphQL APIs (see [Realtime Data](#realtime-data-graphql-subscriptions)), multiple authentication methods, file upload/download, and additional conveniences. The client is _[isomorphic](https://en.wikipedia.org/wiki/Isomorphic_JavaScript)_ — it can be used in both the **browser** and **server (node.js)**.

**What does "auto-generated code" mean?**

Code based on your Uni's schema will be generated automatically during installation (you can read more about how it works [in the appendix below](#code-generation-details)). If your schema included a "product" entity, for example, your generated client would include the following methods:

```tsx
// List all the products
const listProductsResponse = await client.entities.product.list()

// Add a new product
const addProductResponse = await client.entities.product.add({
  name: 'super-widget',
  inventory: 100,
})

// Get a product by ID
const getProductResponse = await client.entities.product.get('abc-123')
```

# Docs

**Please visit the [Vendia Client SDK docs](https://docs.vendia.com/platform/cli/vendia-client-sdk) to learn more!**

# Manually Generating the Client via CLI

There are currently (2) commands that exist within the executable script for `@vendia/client`, `generate` and `generate-app`. Both commands can be run directly within the same package root directory (contains package.json) via `npx` either via the terminal or an NPM script.

### generate

The `generate` command will re-run the automatic client creation within the `node_modules/@vendia/client` directory, similar to the `postInstall` script.

```bash
npx @vendia/client generate
```

or

```json
{
  "scripts": {
    "generate-client": "npx @vendia/client generate"
  }
}
```

### generate-app

The `generate-app` will create the `.vendia-client` locally to the application.

The script takes (3) optional args:

1. `root`, `r` : The root directory of the package to build. Defaults to `process.cwd()`
2. `destination`, `d` : The path, relative to the root directory, that the script should place the generated client code. Defaults to `lib/.vendia-client`
3. `config`, `c`: The path, relative to the root directory, of the directory containing the client configuration. Defaults to `.vendia`

```bash
npx @vendia/client generate-app

npx @vendia/client generate-app -r ~/Dev/projects/my-project -d src/generated -c config/vendia-config
```

or

```json
{
  "scripts": {
    "generate-client": "npx @vendia/client generate-app"
  }
}
```
