@iris-technologies/api
A TypeScript client library for the Iris advertising API with automatic impression and click URL generation.
Features
- Smart Ad Retrieval: Get contextually relevant advertisements
- Automatic URL Generation: Impression and click tracking URLs included
- Error Handling: Graceful fallbacks and comprehensive error logging
- TypeScript Support: Full type safety with detailed type definitions
- Configurable Topics: Exclude unwanted ad categories
- Comprehensive Testing: 21 test cases covering all functionality
Installation
npm install @iris-technologies/api
Quick Start
import { IrisClient } from '@iris-technologies/api';
const client = new IrisClient('your-api-key', ['politics', 'gambling']);
const ad = await client.getAd(
'user looking for weather information',
'showing current weather conditions',
'user-123'
);
if (ad) {
console.log('Ad text:', ad.text);
console.log('Landing page:', ad.url);
console.log('Impression URL:', ad.impUrl);
console.log('Click URL:', ad.clickUrl);
console.log('Publisher payout:', ad.payout);
} else {
console.log('No ad available');
}
API Reference
IrisClient
Constructor
new IrisClient(apiKey: string, excludedTopics: string[])
Parameters:
apiKey
: Your Iris API key for authentication
excludedTopics
: Array of topic strings to exclude from ads (e.g., ['politics', 'adult', 'gambling']
)
Methods
getAd(inputPrompt: string, responsePrompt: string, userId: string): Promise<AdResponse | null>
Retrieves a targeted advertisement with automatic tracking URL generation.
Parameters:
inputPrompt
: The user's input context (what they asked about)
responsePrompt
: The assistant's response context (what you're telling them)
userId
: Unique identifier for the user (for personalization)
Returns:
AdResponse | null
: Advertisement object with tracking URLs, or null
if no ad is available
Example:
const ad = await client.getAd(
'How do I learn guitar?',
'Here are some tips for learning guitar...',
'user-456'
);
updateExcludedTopics(excludedTopics: string[]): void
Updates the list of excluded ad topics.
client.updateExcludedTopics(['politics', 'crypto', 'dating']);
getExcludedTopics(): string[]
Returns a copy of the current excluded topics array.
const currentExclusions = client.getExcludedTopics();
console.log('Excluding:', currentExclusions);
Response Types
AdResponse
interface AdResponse {
text: string;
url: string;
impUrl?: string;
clickUrl?: string;
payout?: number;
}
Example Response
{
text: "Learn guitar online with interactive lessons!",
url: "https://guitarlessons.com/signup",
impUrl: "https://api.iris.tech/impression?id=abc123&price=0.15",
clickUrl: "https://api.iris.tech/click?id=abc123&redirect=https://guitarlessons.com/signup",
payout: 0.075
}
Advanced Usage
Error Handling
The client handles errors gracefully and logs detailed information:
const ad = await client.getAd('context', 'response', 'user');
if (!ad) {
console.log('No ad available - could be network error, no inventory, or excluded topic');
}
Dynamic Topic Management
const client = new IrisClient('api-key', ['politics']);
const userPreferences = getUserAdPreferences();
if (userPreferences.excludeGambling) {
const current = client.getExcludedTopics();
client.updateExcludedTopics([...current, 'gambling', 'casino']);
}
const ad = await client.getAd(context, response, userId);
Integration with React Component
Perfect pairing with @iris-technologies/react:
import { IrisClient } from '@iris-technologies/api';
import { IrisAd } from '@iris-technologies/react';
const client = new IrisClient('your-api-key', ['politics']);
function AdContainer({ userInput, botResponse, userId }) {
const [ad, setAd] = useState(null);
useEffect(() => {
client.getAd(userInput, botResponse, userId)
.then(setAd);
}, [userInput, botResponse, userId]);
return ad ? <IrisAd ad={ad} /> : null;
}
Configuration
API Endpoint
The client connects to https://api.iristech.dev
by default. The endpoint includes:
- Authentication via Bearer token
- 10-second request timeout
- JSON content type headers
- Error logging for debugging
Excluded Topics
Common topic exclusions:
const excludedTopics = [
'politics',
'adult',
'gambling',
'crypto',
'dating',
'religion',
'health',
'financial',
];
const client = new IrisClient('api-key', excludedTopics);
Testing
This package includes comprehensive test coverage (21 test cases):
npm test
npm run test:watch
npm run test:coverage
What's Tested
- ✅ API response parsing and URL extraction
- ✅ HTTP error handling (404, 500, timeouts)
- ✅ Network error handling
- ✅ Invalid response data handling
- ✅ Excluded topics management
- ✅ Configuration and authentication
- ✅ Edge cases (missing URLs, special characters)
Error Handling
The client provides comprehensive error handling:
Network Errors
const ad = await client.getAd(context, response, userId);
HTTP Errors
Invalid Data
Development
npm install
npm run build
npm run dev
npm run clean
npm test
Publishing
Version Management
npm run version:patch
npm run version:minor
npm run version:major
Publishing to NPM
npm run publish:dry-run
npm run publish:patch
npm run publish:beta
TypeScript
Full TypeScript support with exported types:
import {
IrisClient,
AdResponse,
GetAdParams,
IrisClientConfig
} from '@iris-technologies/api';
const client: IrisClient = new IrisClient('key', []);
const ad: AdResponse | null = await client.getAd('', '', '');
License
ISC