Skip to content

Commit 07bf312

Browse files
authored
feat: Add support for credential providers (#7)
1 parent f16c924 commit 07bf312

File tree

3 files changed

+31
-10
lines changed

3 files changed

+31
-10
lines changed

README.md

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,15 @@ Add the following to your Prism configuration (`config/prism.php`):
2828

2929
```php
3030
'bedrock' => [ // Key should match Bedrock::KEY
31-
'api_key' => env('AWS_ACCESS_KEY_ID'),
32-
'api_secret' => env('AWS_SECRET_ACCESS_KEY'),
3331
'region' => env('AWS_REGION', 'us-east-1')
32+
33+
// Set to true to ignore other auth configuration and use the AWS SDK default credential chain
34+
// read more at https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/guide_credentials_default_chain.html
35+
'use_default_credential_provider' => env('AWS_USE_DEFAULT_CREDENTIAL_PROVIDER', false),
36+
37+
'api_key' => env('AWS_ACCESS_KEY_ID'), // Ignored with `use_default_credential_provider` === true
38+
'api_secret' => env('AWS_SECRET_ACCESS_KEY'), // Ignored with `use_default_credential_provider` === true
39+
'session_token' => env('AWS_SESSION_TOKEN'), // Only required for temporary credentials. Ignored with `use_default_credential_provider` === true
3440
],
3541
```
3642

src/Bedrock.php

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,7 @@ class Bedrock implements Provider
2424
const KEY = 'bedrock';
2525

2626
public function __construct(
27-
#[\SensitiveParameter] protected string $apiKey,
28-
#[\SensitiveParameter] protected string $apiSecret,
27+
#[\SensitiveParameter] protected Credentials $credentials,
2928
protected string $region
3029
) {}
3130

@@ -141,10 +140,7 @@ protected function client(TextRequest|StructuredRequest|EmbeddingRequest $reques
141140

142141
$signature = new SignatureV4('bedrock', $this->region);
143142

144-
return $signature->signRequest($request, new Credentials(
145-
key: $this->apiKey,
146-
secret: $this->apiSecret
147-
));
143+
return $signature->signRequest($request, $this->credentials);
148144
})
149145
->throw();
150146
}

src/BedrockServiceProvider.php

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
namespace Prism\Bedrock;
44

5+
use Aws\Credentials\CredentialProvider;
6+
use Aws\Credentials\Credentials;
57
use Illuminate\Support\ServiceProvider;
68

79
class BedrockServiceProvider extends ServiceProvider
@@ -11,11 +13,28 @@ public function boot(): void
1113
$this->registerWithPrism();
1214
}
1315

16+
/**
17+
* @param array<string,mixed> $config
18+
*/
19+
public static function getCredentials(array $config): Credentials
20+
{
21+
if ($config['use_default_credential_provider'] ?? false) {
22+
$provider = CredentialProvider::defaultProvider();
23+
} else {
24+
$provider = CredentialProvider::fromCredentials(new Credentials(
25+
key: $config['api_key'],
26+
secret: $config['api_secret'],
27+
token: $config['session_token'] ?? null,
28+
));
29+
}
30+
31+
return $provider()->wait();
32+
}
33+
1434
protected function registerWithPrism(): void
1535
{
1636
$this->app->get('prism-manager')->extend(Bedrock::KEY, fn ($app, $config): \Prism\Bedrock\Bedrock => new Bedrock(
17-
apiKey: $config['api_key'],
18-
apiSecret: $config['api_secret'],
37+
credentials: BedrockServiceProvider::getCredentials($config),
1938
region: $config['region']
2039
));
2140
}

0 commit comments

Comments
 (0)