supafolio-api-docs/supapress-api-analysis.md

357 lines
9.7 KiB
Markdown

# Supapress Plugin API Analysis - Supafolio API Access Guide
## Initial Request
**User:** There is a plugin in /var/www/html/wp-content/plugins/supapress which queries an API with credentials, our credential is $SUPAFOLIO_API_KEY , I want to know, based on the code how we can acces the API with curl?
## Plugin Analysis Process
### Directory Structure Discovery
I first examined the Supapress plugin directory structure to understand the codebase:
```
/var/www/html/wp-content/plugins/supapress/
├── includes/
│ ├── functions.php
│ ├── typesense-functions.php
│ ├── widget.php
│ ├── controller.php
│ └── book.php
├── admin/
│ ├── admin.php
│ └── functions.php
├── views/
├── supapress.php (main plugin file)
└── settings.php
```
### Code Analysis Approach
I searched for API-related patterns and credential usage in the plugin files:
1. **Credential Search:** Looked for the specific credential `$SUPAFOLIO_API_KEY`
2. **API Pattern Analysis:** Searched for `curl`, `wp_remote_get`, `wp_remote_post`, `api_key`, `credential`, `token`
3. **Function Analysis:** Examined the main API calling functions
### Key Findings
#### Two API Systems Discovered
1. **Supafolio API** (default system)
2. **TypeSense API** (alternative system)
#### Main Plugin Configuration
From `supapress.php`:
```php
define('SUPAPRESS_DEFAULT_SERVICE_URL', 'https://api.supafolio.com/v2/');
define('SUPAPRESS_DEFAULT_SERVICE_API', '9819864f6ff0e8a5a097c99224cfd18a');
```
## Detailed API Analysis
### Supafolio API Structure
#### Core Function: `supapress_call_supafolio()`
Located in `includes/functions.php:56-171`:
```php
function supapress_call_supafolio($service, $params, $properties = array(), $cacheCalls = true) {
// Base URL configuration
if ((string)get_option('service_url') !== '') {
$baseUrl = rtrim(get_option('service_url'), '/') . '/';
} else {
$baseUrl = SUPAPRESS_DEFAULT_SERVICE_URL;
}
// API key configuration
if ((string)get_option('api_key') !== '') {
$api = trim(get_option('api_key'));
} else {
$api = SUPAPRESS_DEFAULT_SERVICE_API;
$baseUrl .= 'v2/';
}
// URL construction
$url = $baseUrl . $service;
// Parameter handling
if (count($params) > 0) {
$url .= '?';
foreach ($params as $key => $value) {
$value = urlencode(urldecode($value));
$url .= "$key=$value&";
}
$url = rtrim($url, '&');
}
// HTTP request using WordPress HTTP API
$response = wp_remote_post($url, array(
'method' => 'GET',
'timeout' => 45,
'redirection' => 5,
'httpversion' => '1.0',
'blocking' => true,
'headers' => array('x-apikey' => $api),
'body' => array(),
'cookies' => array()
));
// Response handling
if (is_wp_error($response)) {
return "Something went wrong: " . $response->get_error_message();
} else {
$result = json_decode($response['body']);
// ... error handling and data processing
}
}
```
#### Authentication Method
- **Header:** `x-apikey: {credential}`
- **Method:** GET requests (sent via wp_remote_post with GET method)
- **Content-Type:** application/json
#### Available Endpoints
Based on code analysis throughout the plugin:
1. **`search`** - Book search and ISBN lookup
2. **`book/{isbn}`** - Individual book details
3. **`predictive`** - Predictive search/autocomplete
4. **`searchfilter`** - Filter options and values
### TypeSense API Structure
#### Configuration Function
Located in `includes/typesense-functions.php:168-190`:
```php
function supapress_set_typesense_client() {
$apiKey = (string)get_option('typesense_api_key');
$host = (string)get_option('typesense_host');
if (empty($apiKey) && empty($host)) {
return;
}
$client = new Client([
'nodes' => [
[
'host' => $host,
'port' => '',
'protocol' => 'https'
]
],
'api_key' => $apiKey,
'connection_timeout_seconds' => 2
]);
return $client;
}
```
## Complete Curl Command Templates
### Using Provided Credential: `$SUPAFOLIO_API_KEY`
#### 1. Book Search by ISBN
```bash
curl -X GET "https://api.supafolio.com/v2/search?isbns=9781234567890&amount=100" \
-H "x-apikey: $SUPAFOLIO_API_KEY" \
-H "Content-Type: application/json"
```
#### 2. Bulk ISBN Lookup
```bash
curl -X GET "https://api.supafolio.com/v2/search?isbns=9781234567890,9780987654321,9781111111111&amount=100" \
-H "x-apikey: $SUPAFOLIO_API_KEY" \
-H "Content-Type: application/json"
```
#### 3. Predictive Search/Autocomplete
```bash
curl -X GET "https://api.supafolio.com/v2/predictive?keyword=javascript&amount=10&type=Products" \
-H "x-apikey: $SUPAFOLIO_API_KEY" \
-H "Content-Type: application/json"
```
#### 4. Get Filter Values (e.g., book formats)
```bash
curl -X GET "https://api.supafolio.com/v2/searchfilter?filters=format" \
-H "x-apikey: $SUPAFOLIO_API_KEY" \
-H "Content-Type: application/json"
```
#### 5. Collection Filter Values
```bash
curl -X GET "https://api.supafolio.com/v2/searchfilter?filters=collection" \
-H "x-apikey: $SUPAFOLIO_API_KEY" \
-H "Content-Type: application/json"
```
#### 6. Book Details by ISBN
```bash
curl -X GET "https://api.supafolio.com/v2/book/9781234567890" \
-H "x-apikey: $SUPAFOLIO_API_KEY" \
-H "Content-Type: application/json"
```
#### 7. Search with Collection Filter
```bash
curl -X GET "https://api.supafolio.com/v2/search?collection=fiction&amount=50" \
-H "x-apikey: $SUPAFOLIO_API_KEY" \
-H "Content-Type: application/json"
```
#### 8. Search with Sorting
```bash
curl -X GET "https://api.supafolio.com/v2/search?keyword=programming&order=publishdate-desc&amount=25" \
-H "x-apikey: $SUPAFOLIO_API_KEY" \
-H "Content-Type: application/json"
```
## Parameter Reference
### Common Parameters
- **`isbns`** - Comma-separated ISBN list for bulk lookups
- **`amount`** - Number of results to return (default: 100)
- **`collection`** - Collection name for filtering
- **`keyword`** - Search term for text searches
- **`order`** - Sort order options:
- `as-entered` (default)
- `publishdate-desc` (newest to oldest)
- `publishdate-asc` (oldest to newest)
- `title-az` (A to Z)
- `title-za` (Z to A)
- **`page`** - Pagination for large result sets
- **`filters`** - Filter types for searchfilter endpoint (format, collection, etc.)
- **`type`** - Content type (used with predictive search, e.g., "Products")
### Advanced Parameters
- **Multiple ISBNs:** Use comma-separated values
- **Price filtering:** Available with specific currency parameters
- **Date ranges:** For publication date filtering
## Response Format Documentation
### Success Response
```json
{
"status": "success",
"data": {
// Actual response data here
// Varies by endpoint
}
}
```
### Error Response
```json
{
"status": "error",
"data": {
"errors": [
{
"message": "Error description"
}
]
}
}
```
### Common Error Messages
- "Product not in database"
- "ISBN not found"
- "Something went wrong: [specific error]"
## Testing Strategy
### Recommended Testing Sequence
1. **Authentication Test**
```bash
curl -X GET "https://api.supafolio.com/v2/searchfilter?filters=format" \
-H "x-apikey: $SUPAFOLIO_API_KEY" \
-H "Content-Type: application/json"
```
2. **Simple Book Search**
```bash
curl -X GET "https://api.supafolio.com/v2/search?isbns=9781234567890&amount=10" \
-H "x-apikey: $SUPAFOLIO_API_KEY" \
-H "Content-Type: application/json"
```
3. **Predictive Search Test**
```bash
curl -X GET "https://api.supafolio.com/v2/predictive?keyword=test&amount=5&type=Products" \
-H "x-apikey: $SUPAFOLIO_API_KEY" \
-H "Content-Type: application/json"
```
### Debugging Tips
- Add `?debug` parameter to WordPress URLs to see API call details
- Check WordPress error logs for HTTP request failures
- Verify API key is correctly configured in WordPress settings
- Test with known valid ISBNs first
## Plugin Configuration
### WordPress Settings
The plugin uses these WordPress options:
- **`service_url`** - Custom API endpoint URL
- **`api_key`** - Custom API key (your credential would go here)
- **`typesense_api_key`** - TypeSense API key
- **`typesense_host`** - TypeSense host URL
- **`typesense_catalog`** - TypeSense catalog name
### Default Values
If no custom settings are provided:
- **URL:** `https://api.supafolio.com/v2/`
- **API Key:** `9819864f6ff0e8a5a097c99224cfd18a`
## Security Considerations
- API key is sent in HTTP headers (more secure than URL parameters)
- Plugin implements caching to reduce API calls
- Supports both HTTP and HTTPS protocols
- Custom service URLs can be configured for private deployments
## Alternative: TypeSense API
If using TypeSense instead of Supafolio:
```bash
curl -X GET "https://{typesense-host}/collections/{catalog}/documents/search" \
-H "x-typesense-api-key: $TYPESENSE_API_KEY" \
-H "Content-Type: application/json"
```
## Summary
The Supapress plugin provides comprehensive access to book metadata APIs through two main systems:
1. **Supafolio API** (primary) - Full-featured book data service
2. **TypeSense API** (alternative) - Search-focused service
Your credential `$SUPAFOLIO_API_KEY` can be used with either system, depending on your WordPress plugin configuration.
The curl commands provided above should give you complete access to test and interact with the API endpoints used by the Supapress plugin.
---
**Generated:** 2026-01-24
**Plugin Version:** 2.26.2
**Analysis Scope:** Supafolio API integration in Supapress WordPress plugin