Skip to content

Commit

Permalink
Merge pull request #1 from ArthurPatriot/dev
Browse files Browse the repository at this point in the history
Dev
  • Loading branch information
ArthurPatriot authored Nov 14, 2022
2 parents fb6c907 + 6fd9144 commit 95b9c29
Show file tree
Hide file tree
Showing 4 changed files with 238 additions and 0 deletions.
88 changes: 88 additions & 0 deletions README.md
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)

12 changes: 12 additions & 0 deletions src/Enums/HttpMethod.php
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';
}
10 changes: 10 additions & 0 deletions src/Exceptions/PowerApiException.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<?php

namespace ThePower\Exceptions;

use Exception;

class PowerApiException extends Exception
{

}
128 changes: 128 additions & 0 deletions src/PowerClient.php
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);
}
}

0 comments on commit 95b9c29

Please sign in to comment.