docs/config/packages: add v0.1 release prep, security status, and SDK enhancements
- Add Stage 23 roadmap for v0.1 release preparation with PyPI/npm publishing, deployment automation, and security audit milestones - Document competitive differentiators: zkML/FHE integration, hybrid TEE/ZK verification, on-chain model marketplace, and geo-low-latency matching - Update security documentation with smart contract audit results (0 vulnerabilities, 35 OpenZeppelin warnings) - Add security-first setup
This commit is contained in:
338
packages/js/aitbc-sdk/README.md
Normal file
338
packages/js/aitbc-sdk/README.md
Normal file
@@ -0,0 +1,338 @@
|
||||
# @aitbc/aitbc-sdk
|
||||
|
||||
JavaScript/TypeScript SDK for interacting with AITBC coordinator services, blockchain nodes, and marketplace components.
|
||||
|
||||
## Installation
|
||||
|
||||
```bash
|
||||
npm install @aitbc/aitbc-sdk
|
||||
# or
|
||||
yarn add @aitbc/aitbc-sdk
|
||||
# or
|
||||
pnpm add @aitbc/aitbc-sdk
|
||||
```
|
||||
|
||||
## Quick Start
|
||||
|
||||
```typescript
|
||||
import { createClient } from '@aitbc/aitbc-sdk';
|
||||
|
||||
// Initialize client
|
||||
const client = createClient({
|
||||
baseUrl: 'https://aitbc.bubuit.net',
|
||||
apiKey: 'your-api-key',
|
||||
});
|
||||
|
||||
// Submit a job
|
||||
const job = await client.submitJob({
|
||||
service_type: 'llm_inference',
|
||||
model: 'llama3.2',
|
||||
parameters: {
|
||||
prompt: 'Hello, world!',
|
||||
max_tokens: 100
|
||||
}
|
||||
});
|
||||
|
||||
// Check job status
|
||||
const status = await client.getJobStatus(job.id);
|
||||
console.log(`Job status: ${status.status}`);
|
||||
|
||||
// Get results when complete
|
||||
if (status.status === 'completed') {
|
||||
const result = await client.getJobResult(job.id);
|
||||
console.log(`Result:`, result.output);
|
||||
}
|
||||
```
|
||||
|
||||
## Features
|
||||
|
||||
- **Job Management**: Submit, monitor, and retrieve computation jobs
|
||||
- **Receipt Verification**: Cryptographically verify job completion receipts
|
||||
- **Marketplace Integration**: Browse and participate in GPU marketplace
|
||||
- **Blockchain Integration**: Interact with AITBC blockchain for settlement
|
||||
- **Authentication**: Secure session management for marketplace operations
|
||||
- **Type Safety**: Full TypeScript support with comprehensive type definitions
|
||||
|
||||
## API Reference
|
||||
|
||||
### Client Initialization
|
||||
|
||||
```typescript
|
||||
import { AitbcClient, createClient } from '@aitbc/aitbc-sdk';
|
||||
|
||||
// Method 1: Using createClient helper
|
||||
const client = createClient({
|
||||
baseUrl: 'https://aitbc.bubuit.net',
|
||||
apiKey: 'your-api-key',
|
||||
timeout: 30000,
|
||||
});
|
||||
|
||||
// Method 2: Using class directly
|
||||
const client = new AitbcClient({
|
||||
baseUrl: 'https://aitbc.bubuit.net',
|
||||
apiKey: 'your-api-key',
|
||||
basicAuth: {
|
||||
username: 'user',
|
||||
password: 'pass'
|
||||
},
|
||||
fetchImpl: fetch, // Optional custom fetch implementation
|
||||
timeout: 30000,
|
||||
});
|
||||
```
|
||||
|
||||
### Job Operations
|
||||
|
||||
```typescript
|
||||
// Submit a job
|
||||
const job = await client.submitJob({
|
||||
service_type: 'llm_inference',
|
||||
model: 'llama3.2',
|
||||
parameters: {
|
||||
prompt: 'Explain quantum computing',
|
||||
max_tokens: 500
|
||||
}
|
||||
});
|
||||
|
||||
// Get job details
|
||||
const jobDetails = await client.getJob(job.id);
|
||||
|
||||
// Get job status
|
||||
const status = await client.getJobStatus(job.id);
|
||||
|
||||
// Get job result
|
||||
const result = await client.getJobResult(job.id);
|
||||
|
||||
// Cancel a job
|
||||
await client.cancelJob(job.id);
|
||||
|
||||
// List all jobs
|
||||
const jobs = await client.listJobs();
|
||||
```
|
||||
|
||||
### Receipt Operations
|
||||
|
||||
```typescript
|
||||
// Get job receipts
|
||||
const receipts = await client.getJobReceipts(job.id);
|
||||
|
||||
// Verify receipt authenticity
|
||||
const verification = await client.verifyReceipt(receipts.items[0]);
|
||||
console.log(`Receipt valid: ${verification.valid}`);
|
||||
```
|
||||
|
||||
### Marketplace Operations
|
||||
|
||||
```typescript
|
||||
// Get marketplace statistics
|
||||
const stats = await client.getMarketplaceStats();
|
||||
|
||||
// List available offers
|
||||
const offers = await client.getMarketplaceOffers();
|
||||
|
||||
// Get specific offer details
|
||||
const offer = await client.getMarketplaceOffer(offer.id);
|
||||
|
||||
// Submit a bid
|
||||
await client.submitMarketplaceBid({
|
||||
provider: 'gpu-provider-123',
|
||||
capacity: 1000,
|
||||
price: 0.05,
|
||||
notes: 'Need GPU for ML training'
|
||||
});
|
||||
```
|
||||
|
||||
### Blockchain Explorer
|
||||
|
||||
```typescript
|
||||
// Get latest blocks
|
||||
const blocks = await client.getBlocks();
|
||||
|
||||
// Get specific block
|
||||
const block = await client.getBlock(12345);
|
||||
|
||||
// Get transactions
|
||||
const transactions = await client.getTransactions();
|
||||
|
||||
// Get address details
|
||||
const address = await client.getAddress('0x1234...abcd');
|
||||
```
|
||||
|
||||
### Authentication
|
||||
|
||||
```typescript
|
||||
// Login for marketplace operations
|
||||
const session = await client.login({
|
||||
username: 'user@example.com',
|
||||
password: 'secure-password'
|
||||
});
|
||||
|
||||
// Logout
|
||||
await client.logout();
|
||||
```
|
||||
|
||||
### Coordinator API
|
||||
|
||||
```typescript
|
||||
// Health check
|
||||
const health = await client.health();
|
||||
console.log(`Service status: ${health.status}`);
|
||||
|
||||
// Get metrics
|
||||
const metrics = await client.metrics();
|
||||
console.log(`Raw metrics: ${metrics.raw}`);
|
||||
|
||||
// Find matching miners
|
||||
const matches = await client.match({
|
||||
jobId: 'job-123',
|
||||
requirements: {
|
||||
gpu_memory: '8GB',
|
||||
compute_capability: '7.5'
|
||||
},
|
||||
topK: 3
|
||||
});
|
||||
```
|
||||
|
||||
## Error Handling
|
||||
|
||||
The SDK throws descriptive errors for failed requests:
|
||||
|
||||
```typescript
|
||||
try {
|
||||
const job = await client.submitJob(jobData);
|
||||
} catch (error) {
|
||||
if (error instanceof Error) {
|
||||
console.error(`Job submission failed: ${error.message}`);
|
||||
// Handle specific error codes
|
||||
if (error.message.includes('400')) {
|
||||
// Bad request - invalid parameters
|
||||
} else if (error.message.includes('401')) {
|
||||
// Unauthorized - invalid API key
|
||||
} else if (error.message.includes('500')) {
|
||||
// Server error - try again later
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Configuration
|
||||
|
||||
### Environment Variables
|
||||
|
||||
```bash
|
||||
# Optional: Set default base URL
|
||||
AITBC_BASE_URL=https://aitbc.bubuit.net
|
||||
|
||||
# Optional: Set default API key
|
||||
AITBC_API_KEY=your-api-key
|
||||
```
|
||||
|
||||
### Advanced Configuration
|
||||
|
||||
```typescript
|
||||
const client = createClient({
|
||||
baseUrl: process.env.AITBC_BASE_URL || 'https://aitbc.bubuit.net',
|
||||
apiKey: process.env.AITBC_API_KEY,
|
||||
timeout: 30000,
|
||||
fetchImpl: async (url, options) => {
|
||||
// Custom fetch implementation (e.g., with retry logic)
|
||||
return fetch(url, options);
|
||||
}
|
||||
});
|
||||
```
|
||||
|
||||
## TypeScript Support
|
||||
|
||||
The SDK provides comprehensive TypeScript definitions:
|
||||
|
||||
```typescript
|
||||
import type {
|
||||
Job,
|
||||
JobSubmission,
|
||||
MarketplaceOffer,
|
||||
ReceiptSummary,
|
||||
BlockSummary
|
||||
} from '@aitbc/aitbc-sdk';
|
||||
|
||||
// Full type safety and IntelliSense support
|
||||
const job: Job = await client.getJob(jobId);
|
||||
const offers: MarketplaceOffer[] = await client.getMarketplaceOffers();
|
||||
```
|
||||
|
||||
## Browser Support
|
||||
|
||||
The SDK works in all modern browsers with native `fetch` support. For older browsers, include a fetch polyfill:
|
||||
|
||||
```html
|
||||
<!-- For older browsers -->
|
||||
<script src="https://cdn.jsdelivr.net/npm/whatwg-fetch@3.6.2/dist/fetch.umd.js"></script>
|
||||
```
|
||||
|
||||
## Node.js Usage
|
||||
|
||||
In Node.js environments, the SDK uses the built-in `fetch` (Node.js 18+) or requires a fetch polyfill:
|
||||
|
||||
```bash
|
||||
npm install node-fetch
|
||||
```
|
||||
|
||||
```typescript
|
||||
import fetch from 'node-fetch';
|
||||
|
||||
const client = createClient({
|
||||
baseUrl: 'https://aitbc.bubuit.net',
|
||||
fetchImpl: fetch as any,
|
||||
});
|
||||
```
|
||||
|
||||
## Development
|
||||
|
||||
Install in development mode:
|
||||
|
||||
```bash
|
||||
git clone https://github.com/oib/AITBC.git
|
||||
cd AITBC/packages/js/aitbc-sdk
|
||||
npm install
|
||||
npm run build
|
||||
```
|
||||
|
||||
Run tests:
|
||||
|
||||
```bash
|
||||
npm test
|
||||
```
|
||||
|
||||
Run tests in watch mode:
|
||||
|
||||
```bash
|
||||
npm run test:watch
|
||||
```
|
||||
|
||||
## License
|
||||
|
||||
MIT License - see LICENSE file for details.
|
||||
|
||||
## Support
|
||||
|
||||
- **Documentation**: https://aitbc.bubuit.net/docs/
|
||||
- **Issues**: https://github.com/oib/AITBC/issues
|
||||
- **Discussions**: https://github.com/oib/AITBC/discussions
|
||||
- **Email**: team@aitbc.dev
|
||||
|
||||
## Contributing
|
||||
|
||||
1. Fork the repository
|
||||
2. Create a feature branch
|
||||
3. Make your changes
|
||||
4. Add tests
|
||||
5. Submit a pull request
|
||||
|
||||
## Changelog
|
||||
|
||||
### 0.1.0
|
||||
- Initial release
|
||||
- Full TypeScript support
|
||||
- Job management API
|
||||
- Marketplace integration
|
||||
- Blockchain explorer
|
||||
- Receipt verification
|
||||
- Authentication support
|
||||
@@ -1,25 +1,68 @@
|
||||
{
|
||||
"name": "@aitbc/aitbc-sdk",
|
||||
"version": "0.1.0",
|
||||
"description": "AITBC JavaScript SDK for coordinator receipts",
|
||||
"description": "AITBC JavaScript/TypeScript SDK for coordinator services, blockchain, and marketplace",
|
||||
"type": "module",
|
||||
"main": "dist/index.js",
|
||||
"module": "dist/index.js",
|
||||
"types": "dist/index.d.ts",
|
||||
"files": [
|
||||
"dist",
|
||||
"README.md",
|
||||
"LICENSE"
|
||||
],
|
||||
"scripts": {
|
||||
"build": "tsc -p tsconfig.json",
|
||||
"test": "vitest run",
|
||||
"test:watch": "vitest"
|
||||
"test:watch": "vitest",
|
||||
"lint": "eslint src --ext .ts,.tsx",
|
||||
"lint:fix": "eslint src --ext .ts,.tsx --fix",
|
||||
"format": "prettier --write src/**/*.ts",
|
||||
"prepublishOnly": "npm run build && npm test"
|
||||
},
|
||||
"dependencies": {
|
||||
"cross-fetch": "^4.0.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/node": "^20.11.30",
|
||||
"@typescript-eslint/eslint-plugin": "^7.0.0",
|
||||
"@typescript-eslint/parser": "^7.0.0",
|
||||
"eslint": "^8.57.0",
|
||||
"prettier": "^3.2.0",
|
||||
"typescript": "^5.4.5",
|
||||
"vitest": "^1.6.0"
|
||||
},
|
||||
"keywords": ["aitbc", "sdk", "receipts"],
|
||||
"author": "AITBC Team",
|
||||
"license": "MIT"
|
||||
"keywords": [
|
||||
"aitbc",
|
||||
"sdk",
|
||||
"ai-compute",
|
||||
"blockchain",
|
||||
"gpu-marketplace",
|
||||
"zk-proofs",
|
||||
"receipts",
|
||||
"marketplace",
|
||||
"coordinator",
|
||||
"typescript"
|
||||
],
|
||||
"author": {
|
||||
"name": "AITBC Team",
|
||||
"email": "team@aitbc.dev",
|
||||
"url": "https://aitbc.bubuit.net"
|
||||
},
|
||||
"license": "MIT",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/oib/AITBC.git",
|
||||
"directory": "packages/js/aitbc-sdk"
|
||||
},
|
||||
"bugs": {
|
||||
"url": "https://github.com/oib/AITBC/issues"
|
||||
},
|
||||
"homepage": "https://aitbc.bubuit.net/docs/",
|
||||
"engines": {
|
||||
"node": ">=18.0.0"
|
||||
},
|
||||
"publishConfig": {
|
||||
"access": "public"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,6 +7,22 @@ import type {
|
||||
WalletSignRequest,
|
||||
WalletSignResponse,
|
||||
RequestOptions,
|
||||
BlockSummary,
|
||||
BlockListResponse,
|
||||
TransactionSummary,
|
||||
TransactionListResponse,
|
||||
AddressSummary,
|
||||
AddressListResponse,
|
||||
ReceiptSummary,
|
||||
ReceiptListResponse,
|
||||
MarketplaceOffer,
|
||||
MarketplaceStats,
|
||||
MarketplaceBid,
|
||||
MarketplaceSession,
|
||||
JobSubmission,
|
||||
Job,
|
||||
JobStatus,
|
||||
JobResult,
|
||||
} from "./types";
|
||||
|
||||
const DEFAULT_HEADERS = {
|
||||
@@ -19,14 +35,17 @@ export class AitbcClient {
|
||||
private readonly apiKey?: string;
|
||||
private readonly basicAuth?: ClientOptions["basicAuth"];
|
||||
private readonly fetchImpl: typeof fetch;
|
||||
private readonly timeout?: number;
|
||||
|
||||
constructor(options: ClientOptions) {
|
||||
this.baseUrl = options.baseUrl.replace(/\/$/, "");
|
||||
this.apiKey = options.apiKey;
|
||||
this.basicAuth = options.basicAuth;
|
||||
this.fetchImpl = options.fetchImpl ?? fetch;
|
||||
this.timeout = options.timeout;
|
||||
}
|
||||
|
||||
// Coordinator API Methods
|
||||
async match(payload: MatchRequest, options?: RequestOptions): Promise<MatchResponse> {
|
||||
const raw = await this.request<any>("POST", "/v1/match", {
|
||||
...options,
|
||||
@@ -79,6 +98,107 @@ export class AitbcClient {
|
||||
});
|
||||
}
|
||||
|
||||
// Job Management Methods
|
||||
async submitJob(job: JobSubmission, options?: RequestOptions): Promise<Job> {
|
||||
return this.request<Job>("POST", "/v1/jobs", {
|
||||
...options,
|
||||
body: JSON.stringify(job),
|
||||
});
|
||||
}
|
||||
|
||||
async getJob(jobId: string, options?: RequestOptions): Promise<Job> {
|
||||
return this.request<Job>("GET", `/v1/jobs/${jobId}`, options);
|
||||
}
|
||||
|
||||
async getJobStatus(jobId: string, options?: RequestOptions): Promise<JobStatus> {
|
||||
return this.request<JobStatus>("GET", `/v1/jobs/${jobId}/status`, options);
|
||||
}
|
||||
|
||||
async getJobResult(jobId: string, options?: RequestOptions): Promise<JobResult> {
|
||||
return this.request<JobResult>("GET", `/v1/jobs/${jobId}/result`, options);
|
||||
}
|
||||
|
||||
async cancelJob(jobId: string, options?: RequestOptions): Promise<void> {
|
||||
await this.request<void>("DELETE", `/v1/jobs/${jobId}`, options);
|
||||
}
|
||||
|
||||
async listJobs(options?: RequestOptions): Promise<{ items: Job[]; next_offset?: string }> {
|
||||
return this.request<{ items: Job[]; next_offset?: string }>("GET", "/v1/jobs", options);
|
||||
}
|
||||
|
||||
// Receipt Methods
|
||||
async getJobReceipts(jobId: string, options?: RequestOptions): Promise<ReceiptListResponse> {
|
||||
return this.request<ReceiptListResponse>("GET", `/v1/jobs/${jobId}/receipts`, options);
|
||||
}
|
||||
|
||||
async verifyReceipt(receipt: ReceiptSummary, options?: RequestOptions): Promise<{ valid: boolean }> {
|
||||
return this.request<{ valid: boolean }>("POST", "/v1/receipts/verify", {
|
||||
...options,
|
||||
body: JSON.stringify(receipt),
|
||||
});
|
||||
}
|
||||
|
||||
// Blockchain Explorer Methods
|
||||
async getBlocks(options?: RequestOptions): Promise<BlockListResponse> {
|
||||
return this.request<BlockListResponse>("GET", "/v1/explorer/blocks", options);
|
||||
}
|
||||
|
||||
async getBlock(height: string | number, options?: RequestOptions): Promise<BlockSummary> {
|
||||
return this.request<BlockSummary>("GET", `/v1/explorer/blocks/${height}`, options);
|
||||
}
|
||||
|
||||
async getTransactions(options?: RequestOptions): Promise<TransactionListResponse> {
|
||||
return this.request<TransactionListResponse>("GET", "/v1/explorer/transactions", options);
|
||||
}
|
||||
|
||||
async getTransaction(hash: string, options?: RequestOptions): Promise<TransactionSummary> {
|
||||
return this.request<TransactionSummary>("GET", `/v1/explorer/transactions/${hash}`, options);
|
||||
}
|
||||
|
||||
async getAddresses(options?: RequestOptions): Promise<AddressListResponse> {
|
||||
return this.request<AddressListResponse>("GET", "/v1/explorer/addresses", options);
|
||||
}
|
||||
|
||||
async getAddress(address: string, options?: RequestOptions): Promise<AddressSummary> {
|
||||
return this.request<AddressSummary>("GET", `/v1/explorer/addresses/${address}`, options);
|
||||
}
|
||||
|
||||
async getReceipts(options?: RequestOptions): Promise<ReceiptListResponse> {
|
||||
return this.request<ReceiptListResponse>("GET", "/v1/explorer/receipts", options);
|
||||
}
|
||||
|
||||
// Marketplace Methods
|
||||
async getMarketplaceStats(options?: RequestOptions): Promise<MarketplaceStats> {
|
||||
return this.request<MarketplaceStats>("GET", "/v1/marketplace/stats", options);
|
||||
}
|
||||
|
||||
async getMarketplaceOffers(options?: RequestOptions): Promise<MarketplaceOffer[]> {
|
||||
return this.request<MarketplaceOffer[]>("GET", "/v1/marketplace/offers", options);
|
||||
}
|
||||
|
||||
async getMarketplaceOffer(offerId: string, options?: RequestOptions): Promise<MarketplaceOffer> {
|
||||
return this.request<MarketplaceOffer>("GET", `/v1/marketplace/offers/${offerId}`, options);
|
||||
}
|
||||
|
||||
async submitMarketplaceBid(bid: MarketplaceBid, options?: RequestOptions): Promise<void> {
|
||||
await this.request<void>("POST", "/v1/marketplace/bids", {
|
||||
...options,
|
||||
body: JSON.stringify(bid),
|
||||
});
|
||||
}
|
||||
|
||||
// Authentication Methods
|
||||
async login(credentials: { username: string; password: string }, options?: RequestOptions): Promise<MarketplaceSession> {
|
||||
return this.request<MarketplaceSession>("POST", "/v1/users/login", {
|
||||
...options,
|
||||
body: JSON.stringify(credentials),
|
||||
});
|
||||
}
|
||||
|
||||
async logout(options?: RequestOptions): Promise<void> {
|
||||
await this.request<void>("POST", "/v1/users/logout", options);
|
||||
}
|
||||
|
||||
private async request<T>(method: string, path: string, options: RequestOptions = {}): Promise<T> {
|
||||
const response = await this.rawRequest(method, path, options);
|
||||
const text = await response.text();
|
||||
@@ -92,11 +212,21 @@ export class AitbcClient {
|
||||
const url = this.buildUrl(path, options.query);
|
||||
const headers = this.buildHeaders(options.headers);
|
||||
|
||||
return this.fetchImpl(url, {
|
||||
method,
|
||||
...options,
|
||||
headers,
|
||||
});
|
||||
const controller = new AbortController();
|
||||
const timeoutId = this.timeout ? setTimeout(() => controller.abort(), this.timeout) : undefined;
|
||||
|
||||
try {
|
||||
return await this.fetchImpl(url, {
|
||||
method,
|
||||
signal: controller.signal,
|
||||
...options,
|
||||
headers,
|
||||
});
|
||||
} finally {
|
||||
if (timeoutId) {
|
||||
clearTimeout(timeoutId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private buildUrl(path: string, query?: RequestOptions["query"]): string {
|
||||
|
||||
47
packages/js/aitbc-sdk/src/index.ts
Normal file
47
packages/js/aitbc-sdk/src/index.ts
Normal file
@@ -0,0 +1,47 @@
|
||||
// Main exports
|
||||
export { AitbcClient } from "./client";
|
||||
|
||||
// Type exports
|
||||
export type {
|
||||
ClientOptions,
|
||||
RequestOptions,
|
||||
MatchRequest,
|
||||
MatchResponse,
|
||||
HealthResponse,
|
||||
MetricsResponse,
|
||||
WalletSignRequest,
|
||||
WalletSignResponse,
|
||||
BlockSummary,
|
||||
BlockListResponse,
|
||||
TransactionSummary,
|
||||
TransactionListResponse,
|
||||
AddressSummary,
|
||||
AddressListResponse,
|
||||
ReceiptSummary,
|
||||
ReceiptListResponse,
|
||||
MarketplaceOffer,
|
||||
MarketplaceStats,
|
||||
MarketplaceBid,
|
||||
MarketplaceSession,
|
||||
JobSubmission,
|
||||
Job,
|
||||
JobStatus,
|
||||
JobResult,
|
||||
} from "./types";
|
||||
|
||||
import { AitbcClient } from "./client";
|
||||
import type { ClientOptions } from "./types";
|
||||
|
||||
// Utility functions
|
||||
export function createClient(options: ClientOptions): AitbcClient {
|
||||
return new AitbcClient(options);
|
||||
}
|
||||
|
||||
// Default configuration
|
||||
export const DEFAULT_CONFIG = {
|
||||
baseUrl: "https://aitbc.bubuit.net",
|
||||
timeout: 30000,
|
||||
} as const;
|
||||
|
||||
// Version
|
||||
export const VERSION = "0.1.0";
|
||||
@@ -44,6 +44,155 @@ export interface WalletSignResponse {
|
||||
signatureBase64: string;
|
||||
}
|
||||
|
||||
// Blockchain Types
|
||||
export interface BlockSummary {
|
||||
height: number;
|
||||
hash: string;
|
||||
timestamp: string;
|
||||
txCount: number;
|
||||
proposer: string;
|
||||
}
|
||||
|
||||
export interface BlockListResponse {
|
||||
items: BlockSummary[];
|
||||
next_offset?: number | string | null;
|
||||
}
|
||||
|
||||
export interface TransactionSummary {
|
||||
hash: string;
|
||||
block: number | string;
|
||||
from: string;
|
||||
to: string | null;
|
||||
value: string;
|
||||
status: string;
|
||||
}
|
||||
|
||||
export interface TransactionListResponse {
|
||||
items: TransactionSummary[];
|
||||
next_offset?: number | string | null;
|
||||
}
|
||||
|
||||
export interface AddressSummary {
|
||||
address: string;
|
||||
balance: string;
|
||||
txCount: number;
|
||||
lastActive: string;
|
||||
recentTransactions?: string[];
|
||||
}
|
||||
|
||||
export interface AddressListResponse {
|
||||
items: AddressSummary[];
|
||||
next_offset?: number | string | null;
|
||||
}
|
||||
|
||||
export interface ReceiptSummary {
|
||||
receiptId: string;
|
||||
jobId?: string;
|
||||
miner: string;
|
||||
coordinator: string;
|
||||
issuedAt: string;
|
||||
status: string;
|
||||
payload?: {
|
||||
job_id?: string;
|
||||
provider?: string;
|
||||
client?: string;
|
||||
units?: number;
|
||||
unit_type?: string;
|
||||
unit_price?: number;
|
||||
price?: number;
|
||||
minerSignature?: string;
|
||||
coordinatorSignature?: string;
|
||||
signature?: {
|
||||
alg?: string;
|
||||
key_id?: string;
|
||||
sig?: string;
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
export interface ReceiptListResponse {
|
||||
jobId: string;
|
||||
items: ReceiptSummary[];
|
||||
}
|
||||
|
||||
// Marketplace Types
|
||||
export interface MarketplaceOffer {
|
||||
id: string;
|
||||
provider: string;
|
||||
capacity: number;
|
||||
price: number;
|
||||
sla: string;
|
||||
status: string;
|
||||
created_at?: string;
|
||||
gpu_model?: string;
|
||||
gpu_memory_gb?: number;
|
||||
gpu_count?: number;
|
||||
cuda_version?: string;
|
||||
price_per_hour?: number;
|
||||
region?: string;
|
||||
attributes?: {
|
||||
ollama_host?: string;
|
||||
models?: string[];
|
||||
vram_mb?: number;
|
||||
driver?: string;
|
||||
[key: string]: unknown;
|
||||
};
|
||||
}
|
||||
|
||||
export interface MarketplaceStats {
|
||||
totalOffers: number;
|
||||
openCapacity: number;
|
||||
averagePrice: number;
|
||||
activeBids: number;
|
||||
}
|
||||
|
||||
export interface MarketplaceBid {
|
||||
provider: string;
|
||||
capacity: number;
|
||||
price: number;
|
||||
notes?: string;
|
||||
}
|
||||
|
||||
export interface MarketplaceSession {
|
||||
token: string;
|
||||
expiresAt: number;
|
||||
}
|
||||
|
||||
// Job Management Types
|
||||
export interface JobSubmission {
|
||||
service_type: string;
|
||||
model?: string;
|
||||
parameters?: Record<string, unknown>;
|
||||
requirements?: Record<string, unknown>;
|
||||
}
|
||||
|
||||
export interface Job {
|
||||
id: string;
|
||||
status: "queued" | "running" | "completed" | "failed";
|
||||
createdAt: string;
|
||||
updatedAt: string;
|
||||
serviceType: string;
|
||||
model?: string;
|
||||
parameters?: Record<string, unknown>;
|
||||
result?: unknown;
|
||||
error?: string;
|
||||
}
|
||||
|
||||
export interface JobStatus {
|
||||
id: string;
|
||||
status: Job["status"];
|
||||
progress?: number;
|
||||
estimatedCompletion?: string;
|
||||
}
|
||||
|
||||
export interface JobResult {
|
||||
id: string;
|
||||
output: unknown;
|
||||
metadata?: Record<string, unknown>;
|
||||
receipts?: ReceiptSummary[];
|
||||
}
|
||||
|
||||
// Client Configuration
|
||||
export interface ClientOptions {
|
||||
baseUrl: string;
|
||||
apiKey?: string;
|
||||
@@ -52,6 +201,7 @@ export interface ClientOptions {
|
||||
password: string;
|
||||
};
|
||||
fetchImpl?: typeof fetch;
|
||||
timeout?: number;
|
||||
}
|
||||
|
||||
export interface RequestOptions extends RequestInit {
|
||||
|
||||
Reference in New Issue
Block a user