# CLAUDE.md

This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.

## Common Development Commands

### Build and Development
- `npm run build` - Clean dist, compile TypeScript, and copy icons
- `npm run dev` - Start TypeScript compiler in watch mode
- `tsc` - Direct TypeScript compilation to dist/

### Code Quality
- `npm run lint` - Run ESLint on nodes, credentials, and package.json
- `npm run lintfix` - Auto-fix ESLint issues
- `npm run format` - Format code with Prettier

### Pre-publish
- `npm run prepublishOnly` - Build and lint with stricter rules (.eslintrc.prepublish.js)

## Project Architecture

This is an n8n community node package providing NinjaOne RMM platform integration. The project follows n8n's community node conventions and implements OAuth2 authentication.

### Key Structure
- **Main entry point**: `dist/nodes/NinjaOne/NinjaOne.node.js` (compiled from `nodes/NinjaOne/NinjaOne.node.ts`)
- **Credentials**: OAuth2 implementation in `credentials/NinjaOneOAuth2Api.credentials.ts`
- **Operations**: Modular operation definitions in `nodes/NinjaOne/operations/` (device.ts, ticket.ts)
- **Icons**: SVG files copied from nodes/ to dist/nodes/ during build via gulpfile.js

### Node Implementation Pattern
- Resources (device, ticket) are defined in separate operation files
- Each operation exports arrays of properties and execution logic
- Main node class imports and combines all operations
- Uses n8n's requestDefaults pattern for OAuth2 authentication

### Authentication Flow
- Primary: OAuth2 Client Credentials Flow (`NinjaOneOAuth2Api`)
- Legacy: HMAC-based authentication (`NinjaOneLegacyApi`) for older endpoints
- Base URL configurable per region (default: https://api.ninjaone.com)

### TypeScript Configuration
- Target: ES2019 with strict mode enabled
- Compiled to CommonJS modules in dist/
- Source maps and declarations generated
- Includes credentials/, nodes/, and package.json

### ESLint Rules
- Uses `eslint-plugin-n8n-nodes-base` with specific rulesets for:
  - Community package.json validation
  - Credential class conventions
  - Node class conventions and parameter validation
- Separate prepublish configuration with stricter rules

### Development Notes
- Icons (SVG/PNG) are automatically copied from source to dist during build
- The `new-node-feature-docs/` directory contains API reference documentation for future features
- Package follows n8n community node naming conventions (@username/n8n-nodes-*)
- Node.js 20.15+ required