npm package: @sentinel-unturned/create-integration
Description: Scaffold new Sentinel integrations with interactive prompts
Author: Sentinel Team
Latest version: 1.0.0

# @sentinel-unturned/create-integration

Scaffold new Sentinel integrations with interactive prompts.

## Usage

```bash
npx @sentinel-unturned/create-integration my-integration
# or
npm init @sentinel-unturned/integration my-integration
```

## Features

- Interactive prompts for all configuration options
- Event subscription selection from all available Sentinel events
- Configuration field builder with type support
- Generated TypeScript handler with webhook router
- Complete project structure with package.json, tsconfig.json, README

## Interactive Prompts

The CLI guides you through the following configuration:

1. **Project Name** - kebab-case identifier (e.g., `my-integration`)
2. **Display Name** - Human-readable name for the marketplace
3. **Description** - Brief description of what the integration does
4. **Author** - Your name or organization
5. **Version** - Semantic version (default: 1.0.0)
6. **Scope** - Organization or Global
7. **Category** - Notifications, Moderation, Analytics, etc.
8. **Events** - Multi-select from 34+ available events
9. **Config Fields** - Build configuration schema interactively
10. **Webhook URL** - Where to deliver events

## Generated Project Structure

```
my-integration/
├── manifest.json      # Integration manifest for Sentinel
├── package.json       # Node.js package with SDK dependency
├── handler.ts         # Webhook handler with event router
├── README.md          # Generated documentation
├── tsconfig.json      # TypeScript configuration
└── .gitignore         # Standard ignores
```

## Available Events

The CLI provides access to all Sentinel events:

### Player Events
- `player.connected`, `player.disconnected`
- `player.created`, `player.updated`, `player.deleted`
- `player.*` (wildcard)

### Moderation Events
- `moderation.ban.created`, `moderation.ban.removed`
- `moderation.kick.created`, `moderation.warn.created`
- `moderation.mute.created`, `moderation.mute.removed`
- `moderation.*` (wildcard)

### Chat Events
- `chat.message`
- `chat.*` (wildcard)

### Game Server Events
- `gameserver.connected`, `gameserver.disconnected`, `gameserver.updated`
- `gameserver.*` (wildcard)

### Organization Events
- `organization.created`, `organization.updated`, `organization.deleted`
- `organization.member.added`, `organization.member.removed`
- `organization.*` (wildcard)

### Integration Events
- `integration.installed`, `integration.uninstalled`
- `integration.enabled`, `integration.disabled`, `integration.configured`
- `integration.*` (wildcard)

## Configuration Field Types

When building configuration fields, the following types are supported:

- **string** - Text input
- **number** - Numeric input
- **boolean** - Toggle/checkbox

## Example

```bash
$ npx @sentinel-unturned/create-integration discord-alerts

  ╔═══════════════════════════════════════════════╗
  ║     Sentinel Integration Scaffolding CLI     ║
  ╚═══════════════════════════════════════════════╝

◆  create-sentinel-integration
│
◇  What is your integration name?
│  discord-alerts
│
◇  Display name (shown in marketplace)
│  Discord Alerts
│
◇  Description
│  Send game server alerts to Discord
│
◇  Author
│  Your Name
│
◇  Version
│  1.0.0
│
◇  Integration scope
│  Organization
│
◇  Category (for marketplace)
│  Notifications
│
◇  Subscribe to events
│  player.connected, player.disconnected, moderation.ban.created
│
◇  Add configuration fields?
│  Yes
│
◇  Field name (camelCase)
│  webhookUrl
│
...

✓ Integration scaffolded successfully!
```

## Development

```bash
# Install dependencies
npm install

# Build
npm run build

# Build in watch mode
npm run dev

# Type check
npm run typecheck
```

## Requirements

- Node.js 18.0.0 or higher
- npm 7.0.0 or higher

## Related Packages

- [@sentinel-unturned/integration-sdk](https://www.npmjs.com/package/@sentinel-unturned/integration-sdk) - SDK for building Sentinel integrations

## License

MIT