{"id":28511181,"url":"https://github.com/asachs01/autotask-node","last_synced_at":"2026-02-10T20:16:48.518Z","repository":{"id":294338002,"uuid":"986646989","full_name":"asachs01/autotask-node","owner":"asachs01","description":"A community-supported nodejs library for working with Kaseya Autotask. ","archived":false,"fork":false,"pushed_at":"2026-01-23T20:18:19.000Z","size":4461,"stargazers_count":2,"open_issues_count":1,"forks_count":2,"subscribers_count":2,"default_branch":"main","last_synced_at":"2026-01-24T09:26:19.343Z","etag":null,"topics":["msp"],"latest_commit_sha":null,"homepage":"https://npmjs.com/package/autotask-node","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/asachs01.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-05-19T23:33:57.000Z","updated_at":"2026-01-23T20:18:22.000Z","dependencies_parsed_at":"2025-06-08T19:25:44.596Z","dependency_job_id":"23438505-f5f4-4e0b-9931-42d864e39187","html_url":"https://github.com/asachs01/autotask-node","commit_stats":null,"previous_names":["asachs01/autotask-node"],"tags_count":11,"template":false,"template_full_name":null,"purl":"pkg:github/asachs01/autotask-node","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/asachs01%2Fautotask-node","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/asachs01%2Fautotask-node/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/asachs01%2Fautotask-node/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/asachs01%2Fautotask-node/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/asachs01","download_url":"https://codeload.github.com/asachs01/autotask-node/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/asachs01%2Fautotask-node/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29314704,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-10T17:48:59.043Z","status":"ssl_error","status_checked_at":"2026-02-10T17:45:37.240Z","response_time":65,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["msp"],"created_at":"2025-06-08T23:38:08.828Z","updated_at":"2026-02-10T20:16:48.478Z","avatar_url":"https://github.com/asachs01.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Autotask Node SDK\n\nA TypeScript/Node.js SDK for the Kaseya Autotask PSA REST API with business logic validation, performance optimization, and production monitoring.\n\n[![GitHub package version](https://img.shields.io/github/package-json/v/asachs01/autotask-node?label=version)](https://github.com/asachs01/autotask-node/packages)\n[![TypeScript](https://img.shields.io/badge/TypeScript-Ready-blue.svg)](https://www.typescriptlang.org/)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![API Coverage](https://img.shields.io/badge/API%20Coverage-100%25-brightgreen)](./docs/ENTITIES.md)\n\n## Features\n\n- **215+ Autotask Entities**: Full CRUD operations across the entire Autotask API\n- **Business Logic Engine**: Validation, workflow automation, and relationship management\n- **Security \u0026 Compliance**: XSS/SQL injection protection, GDPR/SOX/PCI compliance validation\n- **Performance**: Request queuing, caching, circuit breakers, and retry strategies\n- **Type-Safe**: Complete TypeScript coverage with auto-completion support\n\n## Quick Start\n\n### Installation\n\nThis package is published to GitHub Packages. Configure npm to use GitHub's registry for this package:\n\n```bash\n# Configure npm to use GitHub Packages for @asachs01 scope\necho \"@asachs01:registry=https://npm.pkg.github.com\" \u003e\u003e .npmrc\n\n# Install the package\nnpm install @asachs01/autotask-node\n```\n\n**Note**: You may need to authenticate with GitHub Packages. See [GitHub's documentation](https://docs.github.com/en/packages/working-with-a-github-packages-registry/working-with-the-npm-registry#authenticating-to-github-packages) for details.\n\n### Basic Usage\n\n```typescript\nimport { AutotaskClient } from '@asachs01/autotask-node';\n\n// Automatic zone detection - no configuration needed\nconst client = await AutotaskClient.create({\n  username: 'your-api-user@domain.com',\n  integrationCode: 'YOUR_INTEGRATION_CODE',\n  secret: 'YOUR_SECRET',\n});\n\n// Create a ticket\nconst ticket = await client.tickets.create({\n  title: 'Network connectivity issue',\n  description: 'User cannot access shared drives',\n  companyId: 123,\n  status: 1, // New\n  priority: 2, // High\n});\n\n// Advanced querying with the powerful query builder\nconst urgentTickets = await client.tickets\n  .query()\n  .where('priority', 'lte', 2) // High or Critical priority\n  .where('status', 'in', [1, 5, 8]) // New, In Progress, Waiting Customer\n  .where('dueDateTime', 'gte', new Date().toISOString())\n  .include('Company', ['companyName'])\n  .include('AssignedResource', ['firstName', 'lastName'])\n  .orderBy('dueDateTime', 'asc')\n  .execute();\n```\n\n### Advanced Usage with Business Logic\n\n```typescript\nimport {\n  AutotaskClient,\n  BusinessLogicEngine,\n  QueueManager,\n} from 'autotask-node';\n\n// Initialize enterprise client with all systems enabled\nconst client = await AutotaskClient.create({\n  username: process.env.AUTOTASK_USERNAME!,\n  integrationCode: process.env.AUTOTASK_INTEGRATION_CODE!,\n  secret: process.env.AUTOTASK_SECRET!,\n\n  // Enable enterprise features\n  enableBusinessLogic: true,\n  enableValidation: true,\n  enableCompliance: true,\n  enablePerformanceMonitoring: true,\n\n  // Advanced queue configuration\n  queueConfig: {\n    backend: 'redis',\n    connectionString: 'redis://localhost:6379',\n    persistence: true,\n    circuitBreaker: {\n      failureThreshold: 5,\n      resetTimeout: 30000,\n    },\n  },\n});\n\n// Business-aware ticket creation with validation\nconst businessEngine = client.getBusinessEngine();\nconst ticketResult = await businessEngine.tickets.createTicket(\n  {\n    title: 'Critical Infrastructure Issue',\n    companyId: 123,\n    priority: 1, // Critical\n    description: 'Database server experiencing high memory usage',\n  },\n  {\n    user: { id: 456, roles: ['technician'] },\n    validateSLA: true,\n    enforceBusinessRules: true,\n  }\n);\n\nif (ticketResult.isValid) {\n  // Automatic SLA calculation, resource assignment, and workflow triggers\n  console.log('SLA Due Date:', ticketResult.processedTicket.dueDateTime);\n  console.log(\n    'Auto-assigned to:',\n    ticketResult.processedTicket.assignedResourceName\n  );\n} else {\n  // Detailed validation errors with business context\n  ticketResult.validationResult.errors.forEach(error =\u003e {\n    console.log(`❌ ${error.field}: ${error.message}`);\n    console.log(`💡 Suggestion: ${error.suggestedFix}`);\n  });\n}\n\n// Performance monitoring and health checks\nconst health = await client.getSystemHealth();\nconsole.log('System Status:', health.overall);\nconsole.log('Queue Health:', health.components.queue);\nconsole.log('Cache Hit Ratio:', health.components.cache.hitRatio);\n```\n\n## Feature Details\n\n### API Coverage\n\n- **215+ Autotask Entities**: Full CRUD operations\n- **Automatic Zone Detection**: No manual region configuration needed\n- **Query Builder**: 14 operators, logical grouping, includes, and pagination\n- **Type-Safe**: Complete TypeScript coverage\n\n### Business Logic\n\n- **Validation Engine**: Schema, business rules, and security validation\n- **Workflow Automation**: Tickets, contracts, time tracking, and projects\n- **Entity Relationships**: Referential integrity and cascade operations\n\n### Security\n\n- **Data Sanitization**: XSS, SQL injection protection\n- **Compliance**: GDPR, SOX, PCI-DSS validation\n- **Audit Logging**: Comprehensive security trails\n\n### Performance\n\n- **Queue Manager**: Redis, SQLite, or Memory backends\n- **Circuit Breakers**: Failure isolation and recovery\n- **Caching**: Multi-tier with intelligent invalidation\n- **Retry Strategies**: Exponential backoff with jitter\n\n## Supported Entities\n\nThe SDK provides access to all major Autotask entity categories:\n\n| Category                 | Count | Key Entities                                                            |\n| ------------------------ | ----- | ----------------------------------------------------------------------- |\n| **Core Business**        | 7     | Companies, Contacts, Tickets, Projects, Tasks, Resources, Opportunities |\n| **Contract Management**  | 24    | Contracts, ContractServices, ContractRates, ContractBillingRules        |\n| **Financial**            | 19    | Invoices, Quotes, PurchaseOrders, BillingItems, TimeEntries             |\n| **Configuration**        | 9     | ConfigurationItems, ConfigurationItemTypes, ConfigurationItemCategories |\n| **Time Tracking**        | 11    | TimeEntries, Appointments, Holidays, TimeOffRequests                    |\n| **Inventory**            | 12    | Products, InventoryItems, InventoryLocations, ProductVendors            |\n| **Knowledge Base**       | 19    | Documents, Articles, KnowledgeBaseArticles                              |\n| **+ 10 more categories** | 77    | Attachments, Notes, Service Calls, Surveys, Tags, and more              |\n\n[View complete entity reference →](docs/ENTITIES.md)\n\n## Authentication \u0026 Setup\n\n### Authentication Method\n\nThe SDK uses Autotask's header-based authentication with three required headers:\n\n- `ApiIntegrationCode`: Your Autotask API integration code\n- `UserName`: Your API username (email address)\n- `Secret`: Your API secret/password\n\n**Note:** This SDK does NOT use Basic Authentication. All credentials are sent as separate headers as required by the Autotask REST API.\n\n### Environment Variables (Recommended)\n\n```bash\n# Set these environment variables\nexport AUTOTASK_USERNAME=\"your-api-user@domain.com\"\nexport AUTOTASK_INTEGRATION_CODE=\"YOUR_INTEGRATION_CODE\"\nexport AUTOTASK_SECRET=\"YOUR_SECRET\"\n```\n\nOr create a `.env` file:\n\n```bash\nAUTOTASK_USERNAME=your-api-user@domain.com\nAUTOTASK_INTEGRATION_CODE=YOUR_INTEGRATION_CODE\nAUTOTASK_SECRET=YOUR_SECRET\n```\n\n### Direct Configuration\n\n```typescript\nconst client = await AutotaskClient.create({\n  username: 'your-api-user@domain.com',\n  integrationCode: 'YOUR_INTEGRATION_CODE',\n  secret: 'YOUR_SECRET',\n  performanceConfig: {\n    timeout: 30000,\n    retries: 3,\n    rateLimitThreshold: 80,\n  },\n});\n```\n\n### Zone Detection\n\nThe SDK automatically detects your Autotask API zone - no manual configuration required:\n\n```typescript\n// Zone detection happens automatically during client creation\nconst client = await AutotaskClient.create({\n  username: process.env.AUTOTASK_USERNAME!,\n  integrationCode: process.env.AUTOTASK_INTEGRATION_CODE!,\n  secret: process.env.AUTOTASK_SECRET!,\n  // apiUrl is automatically detected and set\n});\n```\n\n## Usage Examples\n\n### Business-Aware CRUD Operations\n\n```typescript\n// Enterprise ticket creation with business intelligence\nconst businessEngine = client.getBusinessEngine();\n\nconst ticketResult = await businessEngine.tickets.createTicket(\n  {\n    title: 'Server Performance Issue',\n    companyId: 123,\n    priority: 2, // High priority\n    description: 'Database queries taking \u003e5 seconds',\n  },\n  {\n    user: { id: 456, roles: ['senior-technician'] },\n    relatedEntities: {\n      Company: await client.companies.findById(123),\n      Contact: await client.contacts.findById(789),\n    },\n    validateSLA: true,\n    autoAssign: true,\n    triggerWorkflows: true,\n  }\n);\n\nif (ticketResult.isValid) {\n  // Business logic automatically calculated SLA, assigned resource, triggered workflows\n  console.log('✅ Ticket created with business intelligence');\n  console.log('📅 SLA Due:', ticketResult.processedTicket.dueDateTime);\n  console.log(\n    '👤 Assigned to:',\n    ticketResult.processedTicket.assignedResourceName\n  );\n  console.log('🔄 Workflows triggered:', ticketResult.triggeredWorkflows);\n} else {\n  console.log(\n    '❌ Business validation failed:',\n    ticketResult.validationResult.errors\n  );\n}\n\n// Contract management with business rules\nconst contractResult = await businessEngine.contracts.createContract(\n  {\n    companyId: 123,\n    contractName: 'Managed Services Agreement',\n    startDate: '2025-01-01',\n    endDate: '2025-12-31',\n    contractValue: 120000,\n  },\n  {\n    services: [\n      { name: 'Monitoring', type: 'recurring', monthlyRate: 5000 },\n      { name: 'Support', type: 'hourly', hourlyRate: 150 },\n    ],\n    validateServices: true,\n    calculateBilling: true,\n  }\n);\n\n// Time entry with billing calculation and approval routing\nconst timeResult = await businessEngine.timeEntries.createTimeEntry(\n  {\n    dateWorked: '2025-08-31',\n    hoursWorked: 8.5,\n    resourceId: 456,\n    ticketId: 789,\n    workTypeId: 1,\n  },\n  {\n    billingRates: { 456: 175 }, // $175/hour for this resource\n    contractInfo: { hasHourlyRate: true, rate: 150 },\n    approvalWorkflow: true,\n  }\n);\n\nconsole.log('💰 Billing Amount:', timeResult.billingCalculation.amount);\nconsole.log('📋 Approval Required:', timeResult.approvalRequired);\n```\n\n### Advanced Querying\n\n```typescript\n// Complex filtering with logical grouping\nconst criticalTickets = await client.tickets\n  .query()\n  .where('companyId', 'eq', 123)\n  .and(builder =\u003e {\n    builder\n      .where('priority', 'in', [1, 2]) // Critical or High\n      .or(subBuilder =\u003e {\n        subBuilder\n          .where('status', 'eq', 1) // New tickets\n          .where('estimatedHours', 'gt', 10); // Large tickets\n      });\n  })\n  .include('Company', ['companyName'])\n  .include('AssignedResource', ['firstName', 'lastName'])\n  .orderBy('priority', 'asc')\n  .orderBy('dueDateTime', 'asc')\n  .execute();\n\n// Performance-optimized queries\nconst lightweightTickets = await client.tickets\n  .query()\n  .select('id', 'title', 'status', 'priority') // Only needed fields\n  .where('createDate', 'gte', '2024-01-01')\n  .limit(100)\n  .execute();\n```\n\n### Enterprise Security \u0026 Compliance\n\n```typescript\nimport {\n  ValidationEngine,\n  SecurityValidator,\n  ComplianceValidator,\n} from 'autotask-node';\n\n// Data sanitization and threat detection\nconst sanitizedData = await SecurityValidator.sanitizeInput({\n  companyName: 'Acme Corp \u003cscript\u003ealert(\"xss\")\u003c/script\u003e',\n  description: \"Company info'; DROP TABLE companies; --\",\n});\n\n// GDPR compliance validation for EU customers\nconst complianceResult = await ComplianceValidator.checkCompliance(\n  {\n    firstName: 'John',\n    lastName: 'Doe',\n    emailAddress: 'john.doe@example.com',\n    phone: '+49-123-456-7890',\n  },\n  {\n    jurisdiction: 'EU',\n    processingPurpose: ['service_delivery'],\n    consentStatus: 'granted',\n  }\n);\n\nif (!complianceResult.compliant) {\n  console.log('GDPR violations detected:', complianceResult.violations);\n}\n\n// Business rule validation with detailed error context\nconst validationResult = await ValidationEngine.validateEntity(ticketData, {\n  operation: 'create',\n  entityType: 'Tickets',\n  securityContext: { userId: '123', roles: ['technician'] },\n  businessContext: { company: companyData, slaLevel: 'premium' },\n});\n\nif (!validationResult.isValid) {\n  validationResult.errors.forEach(error =\u003e {\n    console.log(`❌ ${error.field}: ${error.message}`);\n    console.log(`💡 Fix: ${error.suggestedFix}`);\n    console.log(`📊 Context: ${error.businessContext}`);\n  });\n}\n```\n\n### Performance Monitoring \u0026 Analytics\n\n```typescript\n// Real-time performance monitoring\nconst performanceMonitor = client.getPerformanceMonitor();\n\nperformanceMonitor.on('alert', alert =\u003e {\n  if (alert.type === 'high_latency') {\n    console.log(`⚠️ High latency detected: ${alert.value}ms`);\n  } else if (alert.type === 'error_rate_spike') {\n    console.log(`🚨 Error rate spike: ${alert.value}%`);\n  }\n});\n\n// Get comprehensive metrics\nconst metrics = await performanceMonitor.getMetrics();\nconsole.log('📊 Performance Overview:');\nconsole.log(`  Request throughput: ${metrics.throughput.toFixed(2)} req/s`);\nconsole.log(`  Average response time: ${metrics.avgResponseTime}ms`);\nconsole.log(`  Error rate: ${(metrics.errorRate * 100).toFixed(2)}%`);\nconsole.log(`  Cache hit ratio: ${(metrics.cacheHitRatio * 100).toFixed(1)}%`);\nconsole.log(`  Memory usage: ${(metrics.memoryUsage * 100).toFixed(1)}%`);\n\n// Queue health and status\nconst queueHealth = await client.getQueueHealth();\nconsole.log('📋 Queue Status:');\nconsole.log(`  Pending requests: ${queueHealth.pendingRequests}`);\nconsole.log(`  Processing rate: ${queueHealth.processingRate} req/min`);\nconsole.log(`  Circuit breaker status: ${queueHealth.circuitBreakerStatus}`);\n\n// Business intelligence insights\nconst businessMetrics = await businessEngine.getBusinessMetrics();\nconsole.log('🧠 Business Intelligence:');\nconsole.log(`  SLA compliance: ${businessMetrics.slaCompliance}%`);\nconsole.log(`  Ticket resolution time: ${businessMetrics.avgResolutionTime}h`);\nconsole.log(`  Resource utilization: ${businessMetrics.resourceUtilization}%`);\n```\n\n## Command Line Interface\n\nThe SDK includes a full-featured CLI for quick operations:\n\n```bash\n# List open tickets\nnpx autotask-node tickets list '{\"status\": 1}'\n\n# Create a new company\nnpx autotask-node companies create '{\n  \"companyName\": \"New Customer\",\n  \"companyType\": 1,\n  \"isActive\": true\n}'\n\n# Update ticket with complex filter\nnpx autotask-node tickets update 12345 '{\n  \"status\": 5,\n  \"assignedResourceId\": 456\n}'\n\n# Get detailed entity information\nnpx autotask-node tickets get 12345 --include Company,AssignedResource\n```\n\n## Documentation\n\n| Document                                           | Description                                           |\n| -------------------------------------------------- | ----------------------------------------------------- |\n| [API Reference](docs/API.md)                       | Complete API documentation with all methods and types |\n| [Entity Reference](docs/ENTITIES.md)               | Detailed guide to all 215+ supported entities         |\n| [Business Logic Guide](src/business/README.md)     | Enterprise business logic, workflows, and validation  |\n| [Validation Framework](src/validation/README.md)   | Security, compliance, and data quality systems        |\n| [Query Builder Guide](docs/QUERY_BUILDER.md)       | Advanced querying techniques and examples             |\n| [Migration Framework](docs/MIGRATION.md)           | Complete PSA migration system documentation           |\n| [Relationship System](docs/RELATIONSHIP_SYSTEM.md) | Entity relationships and referential integrity        |\n| [Usage Examples](docs/EXAMPLES.md)                 | Real-world scenarios and integration patterns         |\n\n## API Reference\n\n### Core Client Architecture\n\n```typescript\n// Primary client with all enterprise systems\nclass AutotaskClient {\n  // Core entity access\n  companies: CompanyClient;\n  contacts: ContactClient;\n  tickets: TicketClient;\n  projects: ProjectClient;\n  contracts: ContractClient;\n  timeEntries: TimeEntryClient;\n\n  // Enterprise systems access\n  getBusinessEngine(): BusinessLogicEngine;\n  getValidationEngine(): ValidationEngine;\n  getQueueManager(): QueueManager;\n  getPerformanceMonitor(): PerformanceMonitor;\n  getSecurityValidator(): SecurityValidator;\n  getComplianceValidator(): ComplianceValidator;\n\n  // System health and monitoring\n  getSystemHealth(): Promise\u003cSystemHealth\u003e;\n  getMetrics(): Promise\u003cEnterpriseMetrics\u003e;\n\n  // Advanced operations\n  executeBatch(operations: BatchOperation[]): Promise\u003cBatchResult\u003e;\n  migrateFromPSA(config: MigrationConfig): Promise\u003cMigrationResult\u003e;\n}\n```\n\n### Business Logic Engine\n\n```typescript\n// Entity-specific business logic with intelligence\nclass BusinessLogicEngine {\n  tickets: TicketBusinessLogic;\n  timeEntries: TimeEntryBusinessLogic;\n  contracts: ContractBusinessLogic;\n  projects: ProjectBusinessLogic;\n  companies: CompanyBusinessLogic;\n  contacts: ContactBusinessLogic;\n\n  // Analytics and insights\n  generateBusinessMetrics(): Promise\u003cBusinessMetrics\u003e;\n  analyzeEntityRelationships(entityType: string): RelationshipAnalysis;\n  validateWorkflow(\n    workflowId: string,\n    context: WorkflowContext\n  ): WorkflowValidationResult;\n}\n```\n\n### Advanced Queue System\n\n```typescript\n// Enterprise queue manager with multiple backends\nclass QueueManager {\n  // Queue operations\n  enqueue(request: QueueRequest): Promise\u003cQueuedRequest\u003e;\n  enqueueBatch(requests: QueueRequest[]): Promise\u003cQueuedRequest[]\u003e;\n\n  // Monitoring and health\n  getHealth(): Promise\u003cQueueHealth\u003e;\n  getMetrics(): Promise\u003cQueueMetrics\u003e;\n\n  // Configuration and control\n  configureCircuitBreaker(zone: string, config: CircuitBreakerConfig): void;\n  pauseProcessing(): Promise\u003cvoid\u003e;\n  resumeProcessing(): Promise\u003cvoid\u003e;\n  gracefulShutdown(): Promise\u003cvoid\u003e;\n}\n```\n\n## Query Builder\n\n### Operators\n\n| Operator                             | Description          | Example                                                         |\n| ------------------------------------ | -------------------- | --------------------------------------------------------------- |\n| `eq`, `ne`                           | Equals, Not equals   | `.where('status', 'eq', 1)`                                     |\n| `gt`, `gte`, `lt`, `lte`             | Comparison operators | `.where('priority', 'lte', 2)`                                  |\n| `contains`, `startsWith`, `endsWith` | String matching      | `.where('title', 'contains', 'urgent')`                         |\n| `in`, `notIn`                        | Array membership     | `.where('status', 'in', [1, 5, 8])`                             |\n| `isNull`, `isNotNull`                | Null checking        | `.where('assignedResourceId', 'isNull')`                        |\n| `between`                            | Range queries        | `.where('createDate', 'between', ['2024-01-01', '2024-12-31'])` |\n\n## Configuration\n\n### Full Configuration Example\n\n```typescript\nconst client = await AutotaskClient.create({\n  username: process.env.AUTOTASK_USERNAME!,\n  integrationCode: process.env.AUTOTASK_INTEGRATION_CODE!,\n  secret: process.env.AUTOTASK_SECRET!,\n\n  // Business Logic Engine Configuration\n  businessLogicConfig: {\n    enableWorkflows: true,\n    strictValidation: true,\n    enableBusinessRules: true,\n    enableRelationshipValidation: true,\n    workflowTimeout: 300000,\n  },\n\n  // Security \u0026 Compliance Configuration\n  securityConfig: {\n    enableXSSProtection: true,\n    enableSQLInjectionProtection: true,\n    enablePIIDetection: true,\n    enableAuditTrails: true,\n    complianceMode: 'gdpr', // 'gdpr', 'sox', 'pci', 'hipaa'\n    encryptionKey: process.env.ENCRYPTION_KEY,\n  },\n\n  // Advanced Queue Configuration\n  queueConfig: {\n    backend: 'redis', // 'memory', 'sqlite', 'redis'\n    connectionString: process.env.REDIS_URL,\n    persistence: true,\n    batchProcessing: {\n      enabled: true,\n      maxBatchSize: 50,\n      batchTimeout: 5000,\n    },\n    circuitBreaker: {\n      failureThreshold: 5,\n      resetTimeout: 30000,\n      monitoringPeriod: 60000,\n    },\n    retryStrategy: {\n      maxRetries: 5,\n      exponentialBackoff: true,\n      jitter: true,\n      maxDelay: 30000,\n    },\n  },\n\n  // Performance Monitoring Configuration\n  performanceConfig: {\n    enableMonitoring: true,\n    metricsCollectionInterval: 30000,\n    alertingEnabled: true,\n    alertThresholds: {\n      responseTime: 5000,\n      errorRate: 0.05,\n      memoryUsage: 0.8,\n      queueDepth: 1000,\n    },\n    caching: {\n      enabled: true,\n      strategy: 'intelligent', // 'lru', 'ttl', 'intelligent'\n      ttl: 300000,\n      maxSize: 1000,\n    },\n  },\n\n  // Logging Configuration\n  loggingConfig: {\n    level: 'info',\n    enableAuditLogs: true,\n    enablePerformanceLogs: true,\n    enableSecurityLogs: true,\n    logFile: './logs/autotask-sdk.log',\n  },\n});\n```\n\n### Environment Variables\n\nAll supported environment variables:\n\n```bash\n# Core Authentication\nAUTOTASK_USERNAME=your-api-user@domain.com\nAUTOTASK_INTEGRATION_CODE=YOUR_INTEGRATION_CODE\nAUTOTASK_SECRET=YOUR_SECRET\n\n# Security \u0026 Encryption\nENCRYPTION_KEY=your-256-bit-encryption-key\nSECURITY_AUDIT_ENABLED=true\nCOMPLIANCE_MODE=gdpr\n\n# Queue System Configuration\nQUEUE_BACKEND=redis\nREDIS_URL=redis://localhost:6379\nQUEUE_PERSISTENCE=true\nQUEUE_BATCH_SIZE=50\n\n# Performance Configuration\nPERFORMANCE_MONITORING=true\nCACHE_STRATEGY=intelligent\nCACHE_TTL=300000\nALERT_THRESHOLDS_ERROR_RATE=0.05\n\n# Business Logic Configuration\nBUSINESS_LOGIC_ENABLED=true\nWORKFLOWS_ENABLED=true\nSTRICT_VALIDATION=true\nRELATIONSHIP_VALIDATION=true\n\n# Logging Configuration\nLOG_LEVEL=info\nAUDIT_LOGS_ENABLED=true\nPERFORMANCE_LOGS_ENABLED=true\nSECURITY_LOGS_ENABLED=true\n```\n\n### Logging and Debugging\n\n```typescript\nimport winston from 'winston';\n\nconst logger = winston.createLogger({\n  level: 'debug',\n  format: winston.format.combine(\n    winston.format.timestamp(),\n    winston.format.json()\n  ),\n  transports: [\n    new winston.transports.Console(),\n    new winston.transports.File({ filename: 'autotask.log' }),\n  ],\n});\n\nconst client = await AutotaskClient.create({\n  // ... credentials\n  logger,\n});\n```\n\n## Performance\n\nThe SDK includes batching, caching, and query optimization:\n\n```typescript\n// Optimized batch query\nconst tickets = await client.tickets\n  .query()\n  .where('id', 'between', [1, 1000])\n  .batchSize(50)\n  .execute();\n```\n\n## Testing\n\n```bash\nnpm test                    # All tests\nnpm run test:unit           # Unit tests only\nnpm run test:integration    # Integration tests\nnpm run test:coverage       # Coverage report\n```\n\n## Contributing\n\n1. Fork the repository\n2. Create a feature branch\n3. Implement changes with tests\n4. Run `npm test` to verify\n5. Submit a pull request\n\n```bash\ngit clone https://github.com/asachs01/autotask-node.git\ncd autotask-node\nnpm install\ncp .env.example .env\nnpm test\n```\n\n## Requirements\n\n- **Node.js**: 18.0.0 or higher\n- **TypeScript**: 5.0+ (for development)\n- **Autotask API**: Valid integration credentials\n\n## License\n\nMIT License - see [LICENSE](LICENSE) for details.\n\n## Support\n\n- **Issues**: [GitHub Issues](https://github.com/asachs01/autotask-node/issues)\n- **Documentation**: [docs/](docs/)\n- **Examples**: [docs/EXAMPLES.md](docs/EXAMPLES.md)\n\n## Changelog\n\nSee [CHANGELOG.md](CHANGELOG.md) for release notes.\n\n---\n\n_This SDK is not officially affiliated with Kaseya or Autotask._\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fasachs01%2Fautotask-node","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fasachs01%2Fautotask-node","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fasachs01%2Fautotask-node/lists"}