Your calm window into the Atmosphere. morgen.blue
rss atproto
3
fork

Configure Feed

Select the types of activity you want to include in your feed.

fix: unblock OAuth login + add Solo for artisan serve on :8000

Wrap the Socialite redirect in Inertia::location so the login form's
XHR submit triggers a full browser navigation instead of following the
302 cross-origin into CORS. Install soloterm/solo (pinned to dev-main
until a tagged release supports Laravel 13) with Serve + Vite as
auto-start commands, because revolution/laravel-bluesky hardcodes
http://127.0.0.1:8000/ as the dev OAuth redirect URI.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

+348 -6
+9 -3
app/Http/Controllers/Auth/AuthenticatedSessionController.php
··· 9 9 use Inertia\Inertia; 10 10 use Inertia\Response; 11 11 use Laravel\Socialite\Facades\Socialite; 12 - use Symfony\Component\HttpFoundation\RedirectResponse as SymfonyRedirectResponse; 12 + use Symfony\Component\HttpFoundation\Response as HttpResponse; 13 13 14 14 class AuthenticatedSessionController extends Controller 15 15 { ··· 18 18 return Inertia::render('auth/login'); 19 19 } 20 20 21 - public function store(Request $request): SymfonyRedirectResponse 21 + public function store(Request $request): HttpResponse 22 22 { 23 23 $validated = $request->validate([ 24 24 'handle' => ['nullable', 'string', 'max:253'], ··· 27 27 $hint = $validated['handle'] ?? null; 28 28 $request->session()->put('atproto.hint', $hint); 29 29 30 - return Socialite::driver('bluesky') 30 + // Inertia submits the login form via XHR. Returning a Symfony redirect 31 + // would make the XHR follow the 302 cross-origin to the OAuth provider 32 + // and fail CORS. Inertia::location triggers a full browser navigation 33 + // instead via the X-Inertia-Location header. 34 + $redirect = Socialite::driver('bluesky') 31 35 ->setScopes(explode(' ', (string) config('bluesky.oauth.metadata.scope'))) 32 36 ->hint($hint) 33 37 ->redirect(); 38 + 39 + return Inertia::location($redirect->getTargetUrl()); 34 40 } 35 41 36 42 public function destroy(Request $request): RedirectResponse
+2 -1
composer.json
··· 27 27 "nunomaduro/collision": "^8.9.3", 28 28 "nunomaduro/pao": "^1.0.3", 29 29 "pestphp/pest": "^4.6", 30 - "pestphp/pest-plugin-laravel": "^4.1" 30 + "pestphp/pest-plugin-laravel": "^4.1", 31 + "soloterm/solo": "dev-main" 31 32 }, 32 33 "autoload": { 33 34 "psr-4": {
+260 -2
composer.lock
··· 4 4 "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", 5 5 "This file is @generated automatically" 6 6 ], 7 - "content-hash": "7f357397d8efb09c4d851aa50565d586", 7 + "content-hash": "5b130edddd4ff6ad57800b4a4fec68f3", 8 8 "packages": [ 9 9 { 10 10 "name": "brick/math", ··· 7142 7142 "time": "2025-03-19T14:43:43+00:00" 7143 7143 }, 7144 7144 { 7145 + "name": "joetannenbaum/chewie", 7146 + "version": "0.1.11", 7147 + "source": { 7148 + "type": "git", 7149 + "url": "https://github.com/joetannenbaum/chewie.git", 7150 + "reference": "7040f1c157e6756f45f49f4a821303cae3cfe424" 7151 + }, 7152 + "dist": { 7153 + "type": "zip", 7154 + "url": "https://api.github.com/repos/joetannenbaum/chewie/zipball/7040f1c157e6756f45f49f4a821303cae3cfe424", 7155 + "reference": "7040f1c157e6756f45f49f4a821303cae3cfe424", 7156 + "shasum": "" 7157 + }, 7158 + "require": { 7159 + "laravel/prompts": "0.x" 7160 + }, 7161 + "require-dev": { 7162 + "pestphp/pest": "^2.33", 7163 + "tightenco/duster": "^2.7" 7164 + }, 7165 + "type": "library", 7166 + "autoload": { 7167 + "files": [ 7168 + "src/helpers.php" 7169 + ], 7170 + "psr-4": { 7171 + "Chewie\\": "src/" 7172 + } 7173 + }, 7174 + "notification-url": "https://packagist.org/downloads/", 7175 + "support": { 7176 + "issues": "https://github.com/joetannenbaum/chewie/issues", 7177 + "source": "https://github.com/joetannenbaum/chewie/tree/0.1.11" 7178 + }, 7179 + "time": "2024-12-07T01:53:54+00:00" 7180 + }, 7181 + { 7145 7182 "name": "laravel/boost", 7146 7183 "version": "v2.4.5", 7147 7184 "source": { ··· 10046 10083 "time": "2026-04-14T03:10:46+00:00" 10047 10084 }, 10048 10085 { 10086 + "name": "soloterm/dumps", 10087 + "version": "v1.1.0", 10088 + "source": { 10089 + "type": "git", 10090 + "url": "https://github.com/soloterm/dumps.git", 10091 + "reference": "829ad564381d8eca34b381c0032656bd7e2a60c6" 10092 + }, 10093 + "dist": { 10094 + "type": "zip", 10095 + "url": "https://api.github.com/repos/soloterm/dumps/zipball/829ad564381d8eca34b381c0032656bd7e2a60c6", 10096 + "reference": "829ad564381d8eca34b381c0032656bd7e2a60c6", 10097 + "shasum": "" 10098 + }, 10099 + "require": { 10100 + "illuminate/console": "^10|^11|^12|^13.0", 10101 + "illuminate/support": "^10|^11|^12|^13.0", 10102 + "php": "^8.1" 10103 + }, 10104 + "require-dev": { 10105 + "illuminate/process": "^10|^11|^12|^13.0", 10106 + "orchestra/testbench": "^8.29|^9.5|^10|^11.0", 10107 + "phpunit/phpunit": "^10.5|^11|^12.5" 10108 + }, 10109 + "type": "library", 10110 + "extra": { 10111 + "laravel": { 10112 + "providers": [ 10113 + "SoloTerm\\Dumps\\Providers\\DumpServiceProvider" 10114 + ] 10115 + } 10116 + }, 10117 + "autoload": { 10118 + "psr-4": { 10119 + "SoloTerm\\Dumps\\": "src/" 10120 + } 10121 + }, 10122 + "notification-url": "https://packagist.org/downloads/", 10123 + "license": [ 10124 + "MIT" 10125 + ], 10126 + "authors": [ 10127 + { 10128 + "name": "Aaron Francis", 10129 + "email": "aarondfrancis@gmail.com" 10130 + } 10131 + ], 10132 + "description": "A Laravel command to intercept dumps from your Laravel application.", 10133 + "support": { 10134 + "issues": "https://github.com/soloterm/dumps/issues", 10135 + "source": "https://github.com/soloterm/dumps/tree/v1.1.0" 10136 + }, 10137 + "time": "2026-03-16T16:57:57+00:00" 10138 + }, 10139 + { 10140 + "name": "soloterm/grapheme", 10141 + "version": "v1.1.1", 10142 + "source": { 10143 + "type": "git", 10144 + "url": "https://github.com/soloterm/grapheme.git", 10145 + "reference": "355a0b90a19b394705fff875417a12c662985b10" 10146 + }, 10147 + "dist": { 10148 + "type": "zip", 10149 + "url": "https://api.github.com/repos/soloterm/grapheme/zipball/355a0b90a19b394705fff875417a12c662985b10", 10150 + "reference": "355a0b90a19b394705fff875417a12c662985b10", 10151 + "shasum": "" 10152 + }, 10153 + "require": { 10154 + "php": "^8.1", 10155 + "symfony/polyfill-intl-grapheme": "^1.27.0", 10156 + "symfony/polyfill-intl-normalizer": "^1.27.0", 10157 + "symfony/polyfill-mbstring": "^1.27.0" 10158 + }, 10159 + "require-dev": { 10160 + "phpunit/phpunit": "^10.5|^11" 10161 + }, 10162 + "suggest": { 10163 + "ext-intl": "For best performance" 10164 + }, 10165 + "type": "library", 10166 + "autoload": { 10167 + "psr-4": { 10168 + "SoloTerm\\Grapheme\\": "src/" 10169 + } 10170 + }, 10171 + "notification-url": "https://packagist.org/downloads/", 10172 + "license": [ 10173 + "MIT" 10174 + ], 10175 + "authors": [ 10176 + { 10177 + "name": "Aaron Francis", 10178 + "email": "aarondfrancis@gmail.com" 10179 + } 10180 + ], 10181 + "description": "A PHP package to measure the width of unicode strings rendered to a terminal.", 10182 + "support": { 10183 + "issues": "https://github.com/soloterm/grapheme/issues", 10184 + "source": "https://github.com/soloterm/grapheme/tree/v1.1.1" 10185 + }, 10186 + "time": "2026-03-16T01:01:20+00:00" 10187 + }, 10188 + { 10189 + "name": "soloterm/screen", 10190 + "version": "v1.1.4", 10191 + "source": { 10192 + "type": "git", 10193 + "url": "https://github.com/soloterm/screen.git", 10194 + "reference": "7a2d097ac7c69bda3c0c92e9d61b51f9b64e2cff" 10195 + }, 10196 + "dist": { 10197 + "type": "zip", 10198 + "url": "https://api.github.com/repos/soloterm/screen/zipball/7a2d097ac7c69bda3c0c92e9d61b51f9b64e2cff", 10199 + "reference": "7a2d097ac7c69bda3c0c92e9d61b51f9b64e2cff", 10200 + "shasum": "" 10201 + }, 10202 + "require": { 10203 + "ext-mbstring": "*", 10204 + "php": "^8.1", 10205 + "soloterm/grapheme": "^v1.1.0" 10206 + }, 10207 + "require-dev": { 10208 + "phpunit/phpunit": "^10.5|^11", 10209 + "symfony/console": "^6.4|^7.0" 10210 + }, 10211 + "type": "library", 10212 + "autoload": { 10213 + "psr-4": { 10214 + "SoloTerm\\Screen\\": "src/" 10215 + } 10216 + }, 10217 + "notification-url": "https://packagist.org/downloads/", 10218 + "license": [ 10219 + "MIT" 10220 + ], 10221 + "authors": [ 10222 + { 10223 + "name": "Aaron Francis", 10224 + "email": "aarondfrancis@gmail.com" 10225 + } 10226 + ], 10227 + "description": "A terminal renderer written in pure PHP.", 10228 + "support": { 10229 + "issues": "https://github.com/soloterm/screen/issues", 10230 + "source": "https://github.com/soloterm/screen/tree/v1.1.4" 10231 + }, 10232 + "time": "2026-03-16T21:58:36+00:00" 10233 + }, 10234 + { 10235 + "name": "soloterm/solo", 10236 + "version": "dev-main", 10237 + "source": { 10238 + "type": "git", 10239 + "url": "https://github.com/soloterm/solo.git", 10240 + "reference": "969190f8bf8fd60483c424306f84a0fd2aacc7a6" 10241 + }, 10242 + "dist": { 10243 + "type": "zip", 10244 + "url": "https://api.github.com/repos/soloterm/solo/zipball/969190f8bf8fd60483c424306f84a0fd2aacc7a6", 10245 + "reference": "969190f8bf8fd60483c424306f84a0fd2aacc7a6", 10246 + "shasum": "" 10247 + }, 10248 + "require": { 10249 + "ext-pcntl": "*", 10250 + "ext-posix": "*", 10251 + "illuminate/console": "^10|^11|^12|^13.0", 10252 + "illuminate/process": "^10|^11|^12|^13.0", 10253 + "illuminate/support": "^10|^11|^12|^13.0", 10254 + "joetannenbaum/chewie": "^0.1", 10255 + "laravel/prompts": "^0.1.21|^0.2|^0.3", 10256 + "php": "^8.2", 10257 + "soloterm/dumps": "^1.1.0", 10258 + "soloterm/grapheme": "^1", 10259 + "soloterm/screen": "^1.1.4" 10260 + }, 10261 + "require-dev": { 10262 + "illuminate/database": "^10|^11|^12|^13.0", 10263 + "larastan/larastan": "^3.9.3@stable", 10264 + "laravel/serializable-closure": "^1.3|^2.0", 10265 + "mockery/mockery": "1.6.12", 10266 + "orchestra/testbench": "^8.29|^9.5|^10|^11.0", 10267 + "phpstan/phpstan": "^2.1.32@stable", 10268 + "phpunit/phpunit": "^10.5|^11|^12.5" 10269 + }, 10270 + "default-branch": true, 10271 + "type": "library", 10272 + "extra": { 10273 + "laravel": { 10274 + "providers": [ 10275 + "SoloTerm\\Solo\\Providers\\SoloServiceProvider" 10276 + ] 10277 + } 10278 + }, 10279 + "autoload": { 10280 + "psr-4": { 10281 + "SoloTerm\\Solo\\": "src/" 10282 + } 10283 + }, 10284 + "notification-url": "https://packagist.org/downloads/", 10285 + "license": [ 10286 + "MIT" 10287 + ], 10288 + "authors": [ 10289 + { 10290 + "name": "Aaron Francis", 10291 + "email": "aarondfrancis@gmail.com" 10292 + } 10293 + ], 10294 + "description": "A Laravel package to run multiple commands at once, to aid in local development.", 10295 + "keywords": [ 10296 + "dev" 10297 + ], 10298 + "support": { 10299 + "issues": "https://github.com/soloterm/solo/issues", 10300 + "source": "https://github.com/soloterm/solo/tree/main" 10301 + }, 10302 + "time": "2026-03-17T16:42:37+00:00" 10303 + }, 10304 + { 10049 10305 "name": "staabm/side-effects-detector", 10050 10306 "version": "1.0.5", 10051 10307 "source": { ··· 10346 10602 ], 10347 10603 "aliases": [], 10348 10604 "minimum-stability": "stable", 10349 - "stability-flags": {}, 10605 + "stability-flags": { 10606 + "soloterm/solo": 20 10607 + }, 10350 10608 "prefer-stable": false, 10351 10609 "prefer-lowest": false, 10352 10610 "platform": {
+77
config/solo.php
··· 1 + <?php 2 + 3 + use SoloTerm\Solo\Commands\Command; 4 + use SoloTerm\Solo\Commands\MakeCommand; 5 + use SoloTerm\Solo\Commands\TestCommand; 6 + use SoloTerm\Solo\Hotkeys; 7 + use SoloTerm\Solo\Themes; 8 + 9 + // Solo may not (should not!) exist in prod, so we have to 10 + // check here first to see if it's installed. 11 + if (! class_exists('\SoloTerm\Solo\Manager')) { 12 + return [ 13 + // 14 + ]; 15 + } 16 + 17 + return [ 18 + /* 19 + |-------------------------------------------------------------------------- 20 + | Themes 21 + |-------------------------------------------------------------------------- 22 + */ 23 + 'theme' => env('SOLO_THEME', 'dark'), 24 + 25 + 'themes' => [ 26 + 'light' => Themes\LightTheme::class, 27 + 'dark' => Themes\DarkTheme::class, 28 + ], 29 + 30 + /* 31 + |-------------------------------------------------------------------------- 32 + | Keybindings 33 + |-------------------------------------------------------------------------- 34 + */ 35 + 'keybinding' => env('SOLO_KEYBINDING', 'default'), 36 + 37 + 'keybindings' => [ 38 + 'default' => Hotkeys\DefaultHotkeys::class, 39 + 'vim' => Hotkeys\VimHotkeys::class, 40 + ], 41 + 42 + /* 43 + |-------------------------------------------------------------------------- 44 + | Commands 45 + |-------------------------------------------------------------------------- 46 + | 47 + */ 48 + 'commands' => [ 49 + 'About' => 'php artisan solo:about', 50 + // Port 8000 is required: the revolution/laravel-bluesky package hardcodes 51 + // http://127.0.0.1:8000/ as the OAuth loopback redirect URI in dev. 52 + 'Serve' => 'php artisan serve --port=8000', 53 + 'Vite' => 'bun run dev', 54 + // For enhanced log viewing with vendor frame collapsing, see soloterm/vtail 55 + 'Logs' => 'tail -f -n 100 '.storage_path('logs/laravel.log'), 56 + 'Make' => new MakeCommand, 57 + 58 + // Lazy commands do not automatically start when Solo starts. 59 + 'Dumps' => Command::from('php artisan solo:dumps')->lazy(), 60 + 'Pint' => Command::from('./vendor/bin/pint --ansi')->lazy(), 61 + 'Queue' => Command::from('php artisan queue:work')->lazy(), 62 + 'Tests' => TestCommand::artisan(), 63 + ], 64 + 65 + /* 66 + |-------------------------------------------------------------------------- 67 + | Miscellaneous 68 + |-------------------------------------------------------------------------- 69 + */ 70 + 71 + /* 72 + * If you run the solo:dumps command, Solo will start a server to receive 73 + * the dumps. This is the address. You probably don't need to change 74 + * this unless the default is already taken for some reason. 75 + */ 76 + 'dump_server_host' => env('SOLO_DUMP_SERVER_HOST', 'tcp://127.0.0.1:9984'), 77 + ];