authorizeCurrentWorkspace( $request, 'createPost', 'Not authorized to upload media.', ); if (! $workspace instanceof Workspace) { return $workspace; } $workspaceId = $workspace->id; $ttlMinutes = (int) config('trypost.media.signed_upload_url_ttl_minutes'); $token = (string) Str::uuid(); $expiresAt = CarbonImmutable::now()->addMinutes($ttlMinutes); $uploadUrl = URL::temporarySignedRoute( 'api.uploads.store', $expiresAt, ['token' => $token, 'workspace_id' => $workspaceId], ); return Response::structured([ 'upload_token' => $token, 'upload_url' => $uploadUrl, 'expires_at' => $expiresAt->toIso8601String(), 'max_bytes' => MediaType::Video->maxSizeInBytes(), 'max_bytes_by_type' => [ 'image' => MediaType::Image->maxSizeInBytes(), 'video' => MediaType::Video->maxSizeInBytes(), 'document' => MediaType::Document->maxSizeInBytes(), ], 'field_name' => 'media', ]); } public function schema(JsonSchema $schema): array { return []; } }