dovuofficial / guardian-php-sdk
A PHP SDK to work with The Guardian
Fund package maintenance!
jonwood2
Requires
- php: ^8.1
- guzzlehttp/guzzle: ^7.4
- nesbot/carbon: ^2.60
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.0
- pestphp/pest: ^2.25
- spatie/ray: ^1.28
- symfony/var-dumper: ^6.1
This package is auto-updated.
Last update: 2024-04-17 09:30:23 UTC
README
This SDK lets you perform API calls to Dovu's Guardian API middleware. Making working with Hedera Guardian more streamlined.
Installation
You can install the package via composer:
composer require dovuofficial/guardian-php-sdk
Usage with Raw SDK
$sdk = new Dovu\GuardianPhpSdk(); $sdk->setGuardianBaseUrl('http://localhost:3001/api/'); $sdk->setHmacSecret('hmac_secret'); $sdk->addNotification(['slack' => 'https://hooks.slack.com/services/xxxxxxx']); $response = $sdk->accounts->create('username','password'); $response = $sdk->accounts->login('username','password');
Usage with Guardian SDK Helper
$sdk = new Dovu\GuardianPhpSdk(); $sdk->setGuardianBaseUrl('http://localhost:3001/api/'); $this->helper = new GuardianSDKHelper($sdk); $registrant = $this->helper->createNewUser('username', 'secret'); $supplier_token = $registrant['data']['accessToken']; $this->helper->setApiKey($supplier_token); // Step two: Set the role for a user $this->helper->setRole(GuardianRole::SUPPLIER); // With a $project json $project = [ 'uuid' => \Ramsey\Uuid\Uuid::uuid4(), 'field1' => 'data' ]; $result = (object) $this->helper->createProject($project); $project_uuid = json_decode($project, true)['uuid']; /** * Waiting query for the registry to scan for the newly created project */ $waiting_query = EntityStateWaitingQuery::instance() ->query(StateQuery::PROJECTS) ->status(EntityStatus::WAITING) ->filter($project_uuid); // Step four: approve the through the standard registry $result = (object) GuardianSDKHelper::actions( fn () => $this->helper->accessTokenForRegistry(), fn ($token) => $this->helper->setApiKey($token), fn () => $this->helper->stateEntityListener($waiting_query), fn ($query) => $this->helper->approveProject($query->id) )();
V2 Example Flow
Run this following test to understand how the Guardian SDK Helper can aid in simpler development of consuming the Guardian.
./vendor/bin/pest --filter ElvGuardianPolicyIntegrationTest
The class primarily is a range of decorator helper functions but there a number of core features that are helpful.
Namely:
- StateEntityListener
- Actions
The StateEntityListener expects a EntityStateWaitingQuery this will continually scan the guardian for an expected state after an action has occurred.
So, if you have created a "project" document, you can automate the scanning of guardian state for a "project" that is in the "waiting" state to be approved. As the guardian has alot of side-effects it can be slow to finalise state when compared to a regular REST API.
The Actions from the helper allows you to chain composable units logic together so, as above the action states.
- Retrieve the access, token for the registry
- Set the API key
- Create a waiting query to scan for expected state.
- Approve the project Using the results from the query.
Recommendation: As the Guardian platform is asynchronous, and you cannot necessarily know when data will be available. We recommend that UUIDs are set ahead of time within documents, this gives you a unique value that ensures you can scan for a unique entity (at DOVU our approach is to set this within field0 or uuid fields).
V1 Example Flow (Deprecated)
Assumes a Standard Registry account already exists which has published a policy.
- Create A New Registrant Account
- Create A New Verifier Account
- Assign The New Accounts To A Policy
- Login With The Registrant Account
- Submit An Application
- Login With The Standard Registry Account
- Approve The Application
- Login With The Registrant Account
- Submit An Ecological Project
- Login With The Standard Registry Account
- Approve The Ecological Project
- Login With The Registrant Account
- Submit A New MRV Request
- Login With The Verifier Account
- Approve The MRV Request
After the MRV request is approved, tokens will automatically be minted that represent the carbon described in the MRV for this Ecological Project.
Testing
composer test
Changelog
Please see CHANGELOG for more information on what has changed recently.
Contributing
Please see CONTRIBUTING for details.
Security Vulnerabilities
Please review our security policy on how to report security vulnerabilities.
Credits
License
The MIT License (MIT). Please see License File for more information.