44
55namespace Calliostro \Discogs ;
66
7+ use Exception ;
78use GuzzleHttp \Client as GuzzleClient ;
89
910/**
@@ -33,7 +34,19 @@ private static function getConfig(): array
3334 */
3435 public static function create (array |GuzzleClient $ optionsOrClient = []): DiscogsApiClient
3536 {
36- return new DiscogsApiClient ($ optionsOrClient );
37+ // If GuzzleClient is passed directly, return it as-is
38+ if ($ optionsOrClient instanceof GuzzleClient) {
39+ return new DiscogsApiClient ($ optionsOrClient );
40+ }
41+
42+ $ config = self ::getConfig ();
43+
44+ // Merge user options with base configuration
45+ $ clientOptions = array_merge ($ optionsOrClient , [
46+ 'base_uri ' => $ config ['baseUrl ' ],
47+ ]);
48+
49+ return new DiscogsApiClient (new GuzzleClient ($ clientOptions ));
3750 }
3851
3952 /**
@@ -45,6 +58,8 @@ public static function create(array|GuzzleClient $optionsOrClient = []): Discogs
4558 * @param string $accessToken OAuth access token
4659 * @param string $accessTokenSecret OAuth access token secret
4760 * @param array<string, mixed>|GuzzleClient $optionsOrClient
61+ *
62+ * @throws Exception If secure random number generation fails (PHP 8.2+: \Random\RandomException)
4863 */
4964 public static function createWithOAuth (
5065 string $ consumerKey ,
@@ -63,7 +78,7 @@ public static function createWithOAuth(
6378 $ oauthParams = [
6479 'oauth_consumer_key ' => $ consumerKey ,
6580 'oauth_token ' => $ accessToken ,
66- 'oauth_nonce ' => bin2hex (random_bytes (16 )), // Cryptographically secure nonce
81+ 'oauth_nonce ' => bin2hex (random_bytes (16 )),
6782 'oauth_signature_method ' => 'PLAINTEXT ' ,
6883 'oauth_timestamp ' => (string ) time (),
6984 'oauth_version ' => '1.0 ' ,
@@ -116,14 +131,10 @@ public static function createWithConsumerCredentials(
116131 * Create a client authenticated with Personal Access Token
117132 * Uses Discogs-specific authentication format
118133 *
119- * @param string $consumerKey OAuth consumer key (required for rate limiting)
120- * @param string $consumerSecret OAuth consumer secret (required for rate limiting)
121134 * @param string $personalAccessToken Personal Access Token from Discogs
122135 * @param array<string, mixed>|GuzzleClient $optionsOrClient
123136 */
124137 public static function createWithPersonalAccessToken (
125- string $ consumerKey ,
126- string $ consumerSecret ,
127138 string $ personalAccessToken ,
128139 array |GuzzleClient $ optionsOrClient = []
129140 ): DiscogsApiClient {
@@ -134,8 +145,8 @@ public static function createWithPersonalAccessToken(
134145 }
135146
136147 // Discogs-specific authentication format for Personal Access Tokens
137- // Requires both token and consumer credentials for proper API access
138- $ authHeader = 'Discogs token= ' . $ personalAccessToken . ' , key= ' . $ consumerKey . ' , secret= ' . $ consumerSecret ;
148+ // Personal Access Token should work standalone without consumer credentials
149+ $ authHeader = 'Discogs token= ' . $ personalAccessToken ;
139150
140151 return self ::createClientWithAuth ($ authHeader , $ optionsOrClient );
141152 }
0 commit comments