npm package: @godgpt/auth
Description: Authentication module for GodGPT SDK with pluggable providers
Author: GodGPT
Latest version: 0.1.1

# @godgpt/auth

Authentication module for the GodGPT SDK with support for multiple providers.

## Installation

```bash
npm install @godgpt/core @godgpt/auth
# or
pnpm add @godgpt/core @godgpt/auth
# or
yarn add @godgpt/core @godgpt/auth
```

## Usage

### Basic Setup

```typescript
import { createSDK } from "@godgpt/core";
import { AuthModule } from "@godgpt/auth";

const sdk = createSDK();
const auth = sdk.use(new AuthModule());

await sdk.init();
```

### Registering Auth Providers

```typescript
import { type AuthProviderHandler, type AuthResult } from "@godgpt/auth";

// Create a custom provider
const customProvider: AuthProviderHandler = {
  isAvailable: () => true,

  async signIn(options?: { email?: string; password?: string }): Promise<AuthResult> {
    // Implement your authentication logic
    const response = await fetch("/api/auth/login", {
      method: "POST",
      body: JSON.stringify(options),
    });
    const data = await response.json();

    return {
      success: true,
      state: "success",
      tokens: {
        accessToken: data.accessToken,
        refreshToken: data.refreshToken,
        tokenType: "Bearer",
        expiresIn: 3600,
      },
      user: {
        id: data.user.id,
        email: data.user.email,
        name: data.user.name,
        provider: "custom",
      },
    };
  },

  async signOut(): Promise<void> {
    await fetch("/api/auth/logout", { method: "POST" });
  },
};

auth.registerProvider("custom", customProvider);
```

### Sign In / Sign Out

```typescript
// Sign in
const result = await auth.signIn("custom", {
  email: "user@example.com",
  password: "password123",
});

if (result.success) {
  console.log("Welcome,", result.user?.name);
}

// Sign out
await auth.signOut();
```

### Checking Auth State

```typescript
// Check if authenticated
if (auth.isAuthenticated()) {
  const user = auth.getCurrentUser();
  const token = auth.getAccessToken();
}
```

### Auth Events

```typescript
sdk.on("auth:signIn", ({ user, tokens }) => {
  console.log("User signed in:", user.email);
});

sdk.on("auth:signOut", () => {
  console.log("User signed out");
});

sdk.on("auth:tokenRefreshed", ({ tokens }) => {
  console.log("Token refreshed");
});
```

## API Reference

### AuthModule Methods

- `registerProvider(name, handler)`: Register an auth provider
- `hasProvider(name)`: Check if a provider is registered
- `getProviders()`: Get all registered provider names
- `signIn(provider, options?)`: Sign in with a provider
- `signOut()`: Sign out current user
- `isAuthenticated()`: Check if user is authenticated
- `getCurrentUser()`: Get current user info
- `getAccessToken()`: Get current access token
- `getTokens()`: Get all tokens
- `updateUser(data)`: Update user information

### Events

- `auth:signInStart`: Emitted when sign in starts
- `auth:signIn`: Emitted on successful sign in
- `auth:signOut`: Emitted on sign out
- `auth:tokenRefreshed`: Emitted when token is refreshed
- `auth:userUpdated`: Emitted when user info is updated
- `auth:error`: Emitted on auth errors

## License

MIT