2026-01-15 01:13:44 +00:00
|
|
|
<?php
|
|
|
|
|
|
refactor: settings redesign, Spanish translations, language system, strict_types
Settings pages:
- Redesign layout to match Sendkit (max-w-4xl, space-y-12, Separator sections)
- Merge Members page into Workspace settings with Table, invite Dialog, ConfirmDeleteModal
- Add workspace logo upload/delete routes and controller methods
- Translate all hardcoded strings in Workspace.vue modals
Language system:
- Drop languages table, replace language_id FK with locale string column on users
- Create config/languages.php for available languages and default locale
- Add Spanish (es) translations (13 files)
- Simplify HandleInertiaRequests, ProfileController, RegisteredUserController
Code quality:
- Add declare(strict_types=1) to all PHP files
- Fix MastodonPublisher using wrong attribute (filename -> original_filename)
- Fix HasMediaTest for new has_photo/photo_url accessors
- Fix PublishToSocialPlatformTest type error revealed by strict_types
- Remove orphaned Language model from AppServiceProvider morph map
- Update User TypeScript interface (has_photo, photo_url, locale)
- Eager load media relation on workspaces to prevent N+1
- Add 8 new tests for workspace logo upload/delete
- Update workspace settings test to assert members/invitations props
All 710 tests passing.
2026-03-30 03:20:43 +00:00
|
|
|
declare(strict_types=1);
|
|
|
|
|
|
2026-01-15 01:13:44 +00:00
|
|
|
return [
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
| Default Queue Connection Name
|
|
|
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
|
| Laravel's queue supports a variety of backends via a single, unified
|
|
|
|
|
| API, giving you convenient access to each backend using identical
|
|
|
|
|
| syntax for each. The default queue connection is defined below.
|
|
|
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
'default' => env('QUEUE_CONNECTION', 'database'),
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
| Queue Connections
|
|
|
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
|
| Here you may configure the connection options for every queue backend
|
|
|
|
|
| used by your application. An example configuration is provided for
|
|
|
|
|
| each backend supported by Laravel. You're also free to add more.
|
|
|
|
|
|
|
|
|
|
|
| Drivers: "sync", "database", "beanstalkd", "sqs", "redis",
|
|
|
|
|
| "deferred", "background", "failover", "null"
|
|
|
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
'connections' => [
|
|
|
|
|
|
|
|
|
|
'sync' => [
|
|
|
|
|
'driver' => 'sync',
|
|
|
|
|
],
|
|
|
|
|
|
|
|
|
|
'database' => [
|
|
|
|
|
'driver' => 'database',
|
|
|
|
|
'connection' => env('DB_QUEUE_CONNECTION'),
|
|
|
|
|
'table' => env('DB_QUEUE_TABLE', 'jobs'),
|
|
|
|
|
'queue' => env('DB_QUEUE', 'default'),
|
|
|
|
|
'retry_after' => (int) env('DB_QUEUE_RETRY_AFTER', 90),
|
|
|
|
|
'after_commit' => false,
|
|
|
|
|
],
|
|
|
|
|
|
|
|
|
|
'beanstalkd' => [
|
|
|
|
|
'driver' => 'beanstalkd',
|
|
|
|
|
'host' => env('BEANSTALKD_QUEUE_HOST', 'localhost'),
|
|
|
|
|
'queue' => env('BEANSTALKD_QUEUE', 'default'),
|
|
|
|
|
'retry_after' => (int) env('BEANSTALKD_QUEUE_RETRY_AFTER', 90),
|
|
|
|
|
'block_for' => 0,
|
|
|
|
|
'after_commit' => false,
|
|
|
|
|
],
|
|
|
|
|
|
|
|
|
|
'sqs' => [
|
|
|
|
|
'driver' => 'sqs',
|
|
|
|
|
'key' => env('AWS_ACCESS_KEY_ID'),
|
|
|
|
|
'secret' => env('AWS_SECRET_ACCESS_KEY'),
|
|
|
|
|
'prefix' => env('SQS_PREFIX', 'https://sqs.us-east-1.amazonaws.com/your-account-id'),
|
|
|
|
|
'queue' => env('SQS_QUEUE', 'default'),
|
|
|
|
|
'suffix' => env('SQS_SUFFIX'),
|
|
|
|
|
'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
|
|
|
|
|
'after_commit' => false,
|
|
|
|
|
],
|
|
|
|
|
|
|
|
|
|
'redis' => [
|
|
|
|
|
'driver' => 'redis',
|
|
|
|
|
'connection' => env('REDIS_QUEUE_CONNECTION', 'default'),
|
|
|
|
|
'queue' => env('REDIS_QUEUE', 'default'),
|
fix: Pinterest video processing timeout — longer poll + retry (#246)
* fix: give Pinterest video processing more time and retry on timeout
A valid ~54s video pin failed after ~90s of polling while Pinterest was
still processing. Extend the poll window to ~5 minutes and treat timeout
as platform unavailable so PublishToSocialPlatform reschedules instead of
failing the post on the first attempt.
Co-authored-by: Cursor <cursoragent@cursor.com>
* refactor: use Laravel Sleep for Pinterest media processing polls
Co-authored-by: Cursor <cursoragent@cursor.com>
* refactor: inline Pinterest video processing poll constants
Co-authored-by: Cursor <cursoragent@cursor.com>
* refactor: map Pinterest media upload statuses to an enum
Use the official MediaUploadStatus values (registered, processing,
succeeded, failed) instead of comparing raw strings in the publisher.
Co-authored-by: Cursor <cursoragent@cursor.com>
* refactor: trim Pinterest media processing docblock
* fix: cap platform-unavailable retries and recover stuck retrying posts
Stop infinite reschedules after 6 attempts with a user-safe failure
message, keep technical detail in error_context, recover Retrying
platforms in social:recover-stuck-posts, and drop unused isTerminal().
Co-authored-by: Cursor <cursoragent@cursor.com>
* refactor: remove unused failedCount in RecoverStuckPosts
Co-authored-by: Cursor <cursoragent@cursor.com>
* fix: skip final Pinterest poll sleep and localize recover timeout
Co-authored-by: Cursor <cursoragent@cursor.com>
* fix: raise publish job timeout headroom and ignore already-failed platforms
Give social publish jobs 15 minutes so Pinterest media polling fits under
the worker limit, bump Horizon/redis retry_after above that timeout, and
skip handle/failed when the platform is already Failed so delayed jobs
cannot revive posts recovered by social:recover-stuck-posts.
Co-authored-by: Cursor <cursoragent@cursor.com>
* fix: restore social-publishing and ai-assistant horizon supervisors
Co-authored-by: Cursor <cursoragent@cursor.com>
* fix: harden Pinterest 401 handling, unique publish jobs, and recover JSON
Treat media-status 401 as TokenExpired, make PublishToSocialPlatform
unique per platform+attempt so retries still queue, and persist recover
error_context via Eloquent casts instead of manual json_encode.
Co-authored-by: Cursor <cursoragent@cursor.com>
* refactor: mass-update stuck post platforms without per-row each
Eloquent query updates already bind JSON arrays correctly here, so one
UPDATE is enough — no manual json_encode and no N model writes.
Co-authored-by: Cursor <cursoragent@cursor.com>
* refactor: simplify Pinterest media processing poll loop
Co-authored-by: Cursor <cursoragent@cursor.com>
* refactor: simplify publish job retry and terminal status checks
Co-authored-by: Cursor <cursoragent@cursor.com>
* fix: do not finalize posts while platforms are still retrying
Co-authored-by: Cursor <cursoragent@cursor.com>
* test: cover Pinterest timeout, unique jobs, and recover edge cases
Co-authored-by: Cursor <cursoragent@cursor.com>
* fix: retry Pinterest media poll on connection errors and tighten tests
Co-authored-by: Cursor <cursoragent@cursor.com>
* fix: remove ineffective TypeError import that breaks CI
Co-authored-by: Cursor <cursoragent@cursor.com>
---------
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-06 23:49:37 +00:00
|
|
|
'retry_after' => (int) env('REDIS_QUEUE_RETRY_AFTER', 960),
|
2026-01-15 01:13:44 +00:00
|
|
|
'block_for' => null,
|
|
|
|
|
'after_commit' => false,
|
|
|
|
|
],
|
|
|
|
|
|
|
|
|
|
'deferred' => [
|
|
|
|
|
'driver' => 'deferred',
|
|
|
|
|
],
|
|
|
|
|
|
|
|
|
|
'background' => [
|
|
|
|
|
'driver' => 'background',
|
|
|
|
|
],
|
|
|
|
|
|
|
|
|
|
'failover' => [
|
|
|
|
|
'driver' => 'failover',
|
|
|
|
|
'connections' => [
|
|
|
|
|
'database',
|
|
|
|
|
'deferred',
|
|
|
|
|
],
|
|
|
|
|
],
|
|
|
|
|
|
|
|
|
|
],
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
| Job Batching
|
|
|
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
|
| The following options configure the database and table that store job
|
|
|
|
|
| batching information. These options can be updated to any database
|
|
|
|
|
| connection and table which has been defined by your application.
|
|
|
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
'batching' => [
|
|
|
|
|
'database' => env('DB_CONNECTION', 'sqlite'),
|
|
|
|
|
'table' => 'job_batches',
|
|
|
|
|
],
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
| Failed Queue Jobs
|
|
|
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
|
| These options configure the behavior of failed queue job logging so you
|
|
|
|
|
| can control how and where failed jobs are stored. Laravel ships with
|
|
|
|
|
| support for storing failed jobs in a simple file or in a database.
|
|
|
|
|
|
|
|
|
|
|
| Supported drivers: "database-uuids", "dynamodb", "file", "null"
|
|
|
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
'failed' => [
|
|
|
|
|
'driver' => env('QUEUE_FAILED_DRIVER', 'database-uuids'),
|
|
|
|
|
'database' => env('DB_CONNECTION', 'sqlite'),
|
|
|
|
|
'table' => 'failed_jobs',
|
|
|
|
|
],
|
|
|
|
|
|
|
|
|
|
];
|