-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #1 from ArthurPatriot/dev
Dev
- Loading branch information
Showing
4 changed files
with
238 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,88 @@ | ||
|
||
# ThePower.io SDK for PHP | ||
|
||
Production ready SDK for ThePower.io API | ||
|
||
|
||
## Installation | ||
|
||
### Install via composer | ||
|
||
```bash | ||
composer require arthurpatriot/thepower-sdk | ||
``` | ||
|
||
### Create new API Client | ||
|
||
```php | ||
use ThePower\PowerClient; | ||
|
||
$client = new PowerClient('{NODE_URL}'); | ||
``` | ||
|
||
Example, `{NODE_URL}` is `https://power-node.allsteeply.com:1443`. | ||
|
||
## Usage | ||
|
||
### Get Status | ||
|
||
```php | ||
$client->status(); | ||
``` | ||
|
||
### Get Node Status | ||
|
||
Get current status of the addressed node | ||
|
||
```php | ||
$client->nodeStatus(); | ||
``` | ||
|
||
### Get Settings | ||
|
||
Get current chain parameters | ||
|
||
```php | ||
$client->settings(); | ||
``` | ||
|
||
### Get Block Info | ||
|
||
Get information about the block without transactions | ||
|
||
```php | ||
$client->blockInfo('{HASH}'); | ||
``` | ||
Where `{HASH}` is hash of the block for which the information is needed. | ||
|
||
### Get Block | ||
|
||
Get information about the block | ||
|
||
```php | ||
$client->block('{HASH}'); | ||
``` | ||
Where `{HASH}` hash of the block for which the information is needed. | ||
|
||
### Where Address | ||
|
||
The definition of chain belonging to address. | ||
|
||
```php | ||
$client->where('{ADDRESS}'); | ||
``` | ||
Where `{ADDRESS}` is the address of the wallet in textual or binary representation in hex format. | ||
|
||
### Get Address Info | ||
|
||
Information about a wallet with a given address. | ||
|
||
```php | ||
$client->address('{ADDRESS}'); | ||
``` | ||
Where `{ADDRESS}` is the address of the wallet in textual or binary representation in hex format. | ||
## Acknowledgements | ||
|
||
- [ThePower.io API Reference](https://doc.thepower.io/docs/Build/api/api-reference) | ||
- [ThePower.io About](https://thepower.io) | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
<?php | ||
|
||
namespace ThePower\Enums; | ||
|
||
enum HttpMethod: string | ||
{ | ||
case GET = 'get'; | ||
case POST = 'post'; | ||
case PUT = 'put'; | ||
case PATCH = 'patch'; | ||
case DELETE = 'delete'; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
<?php | ||
|
||
namespace ThePower\Exceptions; | ||
|
||
use Exception; | ||
|
||
class PowerApiException extends Exception | ||
{ | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,128 @@ | ||
<?php | ||
|
||
namespace ThePower; | ||
|
||
use GuzzleHttp\Client; | ||
use ThePower\Enums\HttpMethod; | ||
use ThePower\Exceptions\PowerApiException; | ||
|
||
class PowerClient | ||
{ | ||
protected Client $client; | ||
|
||
/** | ||
* @param string $apiUrl | ||
* @param array $options | ||
*/ | ||
public function __construct(string $apiUrl, array $options = []) | ||
{ | ||
$this->client = new Client([ | ||
...$options, | ||
'http_errors' => false, | ||
'base_uri' => trim($apiUrl, " \t\n\r\0\x0B\/").'/api/', | ||
]); | ||
} | ||
|
||
/** | ||
* @param HttpMethod $method | ||
* @param string $path | ||
* @param array $payload | ||
* @return array | ||
* @throws PowerApiException | ||
*/ | ||
protected function request(HttpMethod $method, string $path, array $payload = []): array | ||
{ | ||
try { | ||
$response = $this->client->request($method->value, $path, [ | ||
$method === HttpMethod::GET ? 'query' : 'json' => $payload, | ||
]); | ||
} catch (\Throwable $e) { | ||
throw new PowerApiException($e->getMessage(), $e->getCode()); | ||
} | ||
|
||
$data = json_decode($response->getBody()->getContents(), true); | ||
|
||
if (empty($data[ 'ok' ]) || $data[ 'ok' ] !== true) { | ||
throw new PowerApiException($data[ 'msg' ], $data[ 'code' ]); | ||
} | ||
|
||
return $data; | ||
} | ||
|
||
/** | ||
* @return bool | ||
* @throws PowerApiException | ||
*/ | ||
public function status(): bool | ||
{ | ||
$data = $this->request(HttpMethod::GET, 'status'); | ||
|
||
return (bool) $data[ 'ok' ]; | ||
} | ||
|
||
/** | ||
* @return array | ||
* @throws PowerApiException | ||
*/ | ||
public function nodeStatus(): array | ||
{ | ||
$data = $this->request(HttpMethod::GET, 'node/status'); | ||
|
||
return $data[ 'status' ]; | ||
} | ||
|
||
/** | ||
* @return array | ||
* @throws PowerApiException | ||
*/ | ||
public function settings(): array | ||
{ | ||
$data = $this->request(HttpMethod::GET, 'settings'); | ||
|
||
return $data[ 'settings' ]; | ||
} | ||
|
||
/** | ||
* @param string $hash | ||
* @return array | ||
* @throws PowerApiException | ||
*/ | ||
public function blockInfo(string $hash): array | ||
{ | ||
$data = $this->request(HttpMethod::GET, 'blockinfo/'.$hash); | ||
|
||
return $data[ 'block' ]; | ||
} | ||
|
||
/** | ||
* @param string $hash | ||
* @return array | ||
* @throws PowerApiException | ||
*/ | ||
public function block(string $hash): array | ||
{ | ||
$data = $this->request(HttpMethod::GET, 'block/'.$hash); | ||
|
||
return $data[ 'block' ]; | ||
} | ||
|
||
/** | ||
* @param string $address | ||
* @return array | ||
* @throws PowerApiException | ||
*/ | ||
public function where(string $address): array | ||
{ | ||
return $this->request(HttpMethod::GET, 'where/'.$address); | ||
} | ||
|
||
/** | ||
* @param string $address | ||
* @return array | ||
* @throws PowerApiException | ||
*/ | ||
public function address(string $address): array | ||
{ | ||
return $this->request(HttpMethod::GET, 'address/'.$address); | ||
} | ||
} |