## Installation

`pnpm install`

## Command

1. pnpm dev – Start the development server.
2. pnpm build – Build the project for production.

## Caution!

- **Avoid using [fileName].css** because when Vite bundles the project, it generates a separate CSS file that needs to be manually included in the HTML file. This could potentially affect the parent application. **Use CSS-in-JS instead.** However, if you have a better solution, feel free to suggest one.

## SDK Observer

The SDK includes an Observer pattern implementation for handling events within the SDK. The observer pattern allows components to subscribe to specific events and be notified when those events occur.

### Basic Usage

```typescript
import { SDKObserver } from "@libs/sdk-observer";

// Get the singleton instance
const observer = SDKObserver.getInstance();

// Set observers for different event types
observer.setObserver({
  onNewMessage: (message) => {
    console.log("Message received:", message);
  },
  onAppAction: async (action) => {
    console.log("App action triggered:", action);
    return "Action processed";
  },
  onConfigChange: (config) => {
    console.log("Config changed:", config);
  },
  /**
   * Set observers for various events
   * message: string
   * code: number
   */
  onError: (err) => {
    console.log(err.message);
    console.log(err.code);
  },
});

// When you no longer need an observer, remove it
observer.removeObserver("onConfigChange");
```

### Supported Event Types

- `onNewMessage`: Triggered when a new message is received
- `onAppAction`: Triggered when an app action is performed (returns a Promise)
- `onConfigChange`: Triggered when the app configuration changes
- `onError`: Triggered when an error occurs in the SDK

### Data Types

The observer functions receive typed data based on the event type:

- `onNewMessage`: Receives message data
- `onAppAction`: Receives an object with `action_name` and `action_argument` properties
- `onConfigChange`: Receives a partial config object that conforms to the `IAppConfig` interface
- `onError`: Receives an error object with `message` and `code` properties

## Question

- Do we need to publish this to npm? I'm not sure whether all of our customers use React, Vue, or other frameworks. If they do, publishing to npm would be beneficial, as it would allow them to install it easily.

## URL For Dev

- https://dtbnwho7n6mc0.cloudfront.net/ekoai-sdk.js
- https://dtbnwho7n6mc0.cloudfront.net/ekoai-sdk.umd.cjs
