spatie/laravel-harvest-sdk
Laravel-friendly SDK for the Harvest.com API. Configure account ID, access token, and user agent, then resolve the Harvest client from the container or facade to call API endpoints. Not a complete implementation; PRs welcome.
HarvestClient, TimeEntry, Project models), enabling incremental adoption.harvest.time-entry.created) for reactive workflows.$client = app(HarvestClient::class);
$timeEntry = $client->timeEntries()->create([...]);
.env for API keys/credentials (e.g., HARVEST_API_KEY), aligning with Laravel conventions.TimeEntry as Eloquent), but requires custom mapping logic.harvest.sdk.fallback_used metric).TimeEntry)?config)?spatie/array-to-object) is viable.HarvestServiceProvider) with bound interfaces.Harvest::timeEntries() for fluent syntax (if SDK supports it).config/harvest.php for API endpoints, timeouts, and retries.TimeEntry table with harvest_id foreign key).projects table with harvest_project_id).harvest:sync-time-entries) to avoid timeouts.spatie/queueable-side-effects for idempotency if retries are needed.Mockery or Laravel’s HTTP testing to stub SDK calls.TimeEntryService).spatie/laravel-caching) for frequent API calls.spatie/laravel-webhooks.laravel-debugbar for API call metrics).composer.json for supported Laravel versions (e.g., ^10.0). Test against your version.RouteServiceProvider).README or composer.json for version pins.guzzlehttp/guzzle version mismatches).config/services.php is configured for third-party services.composer require spatie/laravel-harvest-sdk
php artisan vendor:publish --provider="Spatie\HarvestSdk\HarvestServiceProvider"
.env:
HARVEST_API_KEY=your_key_here
HARVEST_ACCOUNT_ID=your_account_id
TimeEntryTest).spatie/laravel-harvest-sdk for updates (e.g., via dependabot).spatie/circuit-breaker) for SDK failures.spend_rate field").How can I help you explore Laravel packages today?