@targe/sdk 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +152 -0
- package/dist/cjs/auth.js +30 -0
- package/dist/cjs/auth.js.map +1 -0
- package/dist/cjs/client.js +84 -0
- package/dist/cjs/client.js.map +1 -0
- package/dist/cjs/errors.js +82 -0
- package/dist/cjs/errors.js.map +1 -0
- package/dist/cjs/index.js +183 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/sse.js +87 -0
- package/dist/cjs/sse.js.map +1 -0
- package/dist/cjs/types.js +4 -0
- package/dist/cjs/types.js.map +1 -0
- package/dist/esm/auth.js +26 -0
- package/dist/esm/auth.js.map +1 -0
- package/dist/esm/client.js +77 -0
- package/dist/esm/client.js.map +1 -0
- package/dist/esm/errors.js +71 -0
- package/dist/esm/errors.js.map +1 -0
- package/dist/esm/index.js +162 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/sse.js +84 -0
- package/dist/esm/sse.js.map +1 -0
- package/dist/esm/types.js +3 -0
- package/dist/esm/types.js.map +1 -0
- package/dist/types/auth.d.ts +8 -0
- package/dist/types/auth.d.ts.map +1 -0
- package/dist/types/client.d.ts +18 -0
- package/dist/types/client.d.ts.map +1 -0
- package/dist/types/errors.d.ts +27 -0
- package/dist/types/errors.d.ts.map +1 -0
- package/dist/types/index.d.ts +43 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/sse.d.ts +3 -0
- package/dist/types/sse.d.ts.map +1 -0
- package/dist/types/types.d.ts +228 -0
- package/dist/types/types.d.ts.map +1 -0
- package/package.json +62 -0
package/README.md
ADDED
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
# @targe/sdk
|
|
2
|
+
|
|
3
|
+
TypeScript SDK for [Targe](https://api.targe.io) — the LLM key sharing marketplace for AI agents. Pay per token in USDC on Base.
|
|
4
|
+
|
|
5
|
+
## Install
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @targe/sdk ethers
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Quick Start
|
|
12
|
+
|
|
13
|
+
```typescript
|
|
14
|
+
import { Targe } from '@targe/sdk';
|
|
15
|
+
|
|
16
|
+
const targe = new Targe({ privateKey: process.env.WALLET_KEY! });
|
|
17
|
+
|
|
18
|
+
// Call Claude via the LLM key pool
|
|
19
|
+
const result = await targe.proxyPool('anthropic', '/v1/messages', {
|
|
20
|
+
model: 'claude-sonnet-4-5-20250929',
|
|
21
|
+
max_tokens: 256,
|
|
22
|
+
messages: [{ role: 'user', content: 'Hello!' }],
|
|
23
|
+
});
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## Streaming
|
|
27
|
+
|
|
28
|
+
```typescript
|
|
29
|
+
const { stream } = await targe.proxyPoolStream('anthropic', '/v1/messages', {
|
|
30
|
+
model: 'claude-sonnet-4-5-20250929',
|
|
31
|
+
max_tokens: 1024,
|
|
32
|
+
messages: [{ role: 'user', content: 'Tell me a story' }],
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
for await (const event of stream) {
|
|
36
|
+
if (event.data === '[DONE]') break;
|
|
37
|
+
const parsed = JSON.parse(event.data);
|
|
38
|
+
if (parsed.delta?.text) process.stdout.write(parsed.delta.text);
|
|
39
|
+
}
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## Share Your LLM Keys (Earn 90%)
|
|
43
|
+
|
|
44
|
+
```typescript
|
|
45
|
+
const { key } = await targe.registerKey({
|
|
46
|
+
llmProvider: 'anthropic',
|
|
47
|
+
baseUrl: 'https://api.anthropic.com',
|
|
48
|
+
apiKey: process.env.ANTHROPIC_API_KEY!,
|
|
49
|
+
models: ['claude-sonnet-4-5-20250929'],
|
|
50
|
+
rateLimits: { tpm: 100000, rpm: 60 },
|
|
51
|
+
pricing: { mode: 'cost_plus', markupPercent: 20 },
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
// Check earnings
|
|
55
|
+
const earnings = await targe.getKeyEarnings(key.id);
|
|
56
|
+
console.log(`Earned: ${earnings.totalEarnings} USDC`);
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## API Reference
|
|
60
|
+
|
|
61
|
+
### Constructor
|
|
62
|
+
|
|
63
|
+
```typescript
|
|
64
|
+
new Targe({
|
|
65
|
+
privateKey: string, // Wallet private key
|
|
66
|
+
baseUrl?: string, // Default: 'https://api.targe.io'
|
|
67
|
+
timeout?: number, // Default: 30000ms
|
|
68
|
+
streamTimeout?: number, // Default: 120000ms
|
|
69
|
+
retries?: number, // Default: 1 (retries on 5xx)
|
|
70
|
+
})
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### Account Management
|
|
74
|
+
|
|
75
|
+
| Method | Description |
|
|
76
|
+
|--------|-------------|
|
|
77
|
+
| `register()` | Register agent wallet |
|
|
78
|
+
| `getBalance()` | Get USDC balance |
|
|
79
|
+
| `getDepositAddress()` | Get platform deposit address |
|
|
80
|
+
| `getDeposits()` | View deposit history |
|
|
81
|
+
| `getTransactions(opts?)` | View transaction history |
|
|
82
|
+
|
|
83
|
+
### Proxy (Paid API Calls)
|
|
84
|
+
|
|
85
|
+
| Method | Description |
|
|
86
|
+
|--------|-------------|
|
|
87
|
+
| `proxy(keyId, path, opts?)` | Proxy to a specific shared key |
|
|
88
|
+
| `proxyPool(provider, path, body)` | Pool proxy — auto-selects best key |
|
|
89
|
+
| `proxyStream(keyId, path, body)` | Streaming proxy to a specific key |
|
|
90
|
+
| `proxyPoolStream(provider, path, body)` | Streaming pool proxy |
|
|
91
|
+
|
|
92
|
+
### LLM Key Sharing
|
|
93
|
+
|
|
94
|
+
| Method | Description |
|
|
95
|
+
|--------|-------------|
|
|
96
|
+
| `registerKey(opts)` | Register a shared LLM key |
|
|
97
|
+
| `listKeys()` | List your shared keys |
|
|
98
|
+
| `getKey(id)` | Get key details + pool position |
|
|
99
|
+
| `updateKey(id, updates)` | Update pricing/limits/credentials |
|
|
100
|
+
| `pauseKey(id)` | Pause sharing |
|
|
101
|
+
| `resumeKey(id)` | Resume sharing |
|
|
102
|
+
| `reclaimKey(id)` | Permanently reclaim key |
|
|
103
|
+
| `getKeyEarnings(id)` | View earnings breakdown |
|
|
104
|
+
|
|
105
|
+
### Permit2
|
|
106
|
+
|
|
107
|
+
| Method | Description |
|
|
108
|
+
|--------|-------------|
|
|
109
|
+
| `registerPermit(opts)` | Register Permit2 permit |
|
|
110
|
+
| `getPermit()` | View active permit |
|
|
111
|
+
| `revokePermit()` | Revoke permit |
|
|
112
|
+
| `getNonce()` | Get on-chain nonce |
|
|
113
|
+
| `getTab()` | View current tab |
|
|
114
|
+
| `settleTab()` | Request settlement |
|
|
115
|
+
| `getTabHistory()` | View settlement history |
|
|
116
|
+
|
|
117
|
+
### Public (No Wallet Required)
|
|
118
|
+
|
|
119
|
+
| Method | Description |
|
|
120
|
+
|--------|-------------|
|
|
121
|
+
| `Targe.getCatalog(baseUrl?)` | List available APIs and key pools |
|
|
122
|
+
| `Targe.getHealth(baseUrl?)` | Gateway health check |
|
|
123
|
+
| `Targe.getStats(baseUrl?)` | Gateway statistics |
|
|
124
|
+
| `Targe.getLeaderboard(baseUrl?)` | Top agents |
|
|
125
|
+
|
|
126
|
+
## Error Handling
|
|
127
|
+
|
|
128
|
+
```typescript
|
|
129
|
+
import { Targe, InsufficientBalanceError, RateLimitError } from '@targe/sdk';
|
|
130
|
+
|
|
131
|
+
try {
|
|
132
|
+
await targe.proxyPool('anthropic', '/v1/messages', body);
|
|
133
|
+
} catch (err) {
|
|
134
|
+
if (err instanceof InsufficientBalanceError) {
|
|
135
|
+
console.log('Top up your balance first');
|
|
136
|
+
} else if (err instanceof RateLimitError) {
|
|
137
|
+
console.log(`Rate limited. Retry after ${err.retryAfter}s`);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
## Supported Providers
|
|
143
|
+
|
|
144
|
+
| Provider | Pool Proxy Path |
|
|
145
|
+
|----------|----------------|
|
|
146
|
+
| Anthropic | `/proxy/pool/anthropic/v1/messages` |
|
|
147
|
+
| OpenAI | `/proxy/pool/openai/v1/chat/completions` |
|
|
148
|
+
| Google | `/proxy/pool/google/v1beta/models/{model}:generateContent` |
|
|
149
|
+
|
|
150
|
+
## License
|
|
151
|
+
|
|
152
|
+
MIT
|
package/dist/cjs/auth.js
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AuthBuilder = void 0;
|
|
4
|
+
const ethers_1 = require("ethers");
|
|
5
|
+
class AuthBuilder {
|
|
6
|
+
constructor(privateKey) {
|
|
7
|
+
this.wallet = new ethers_1.ethers.Wallet(privateKey);
|
|
8
|
+
}
|
|
9
|
+
get address() {
|
|
10
|
+
return this.wallet.address;
|
|
11
|
+
}
|
|
12
|
+
async buildAgentAuth(action) {
|
|
13
|
+
const timestamp = Date.now();
|
|
14
|
+
const challenge = `targe-provider:${action}:${timestamp}`;
|
|
15
|
+
const signature = await this.wallet.signMessage(challenge);
|
|
16
|
+
const payload = {
|
|
17
|
+
address: this.wallet.address,
|
|
18
|
+
signature,
|
|
19
|
+
timestamp,
|
|
20
|
+
action,
|
|
21
|
+
};
|
|
22
|
+
return Buffer.from(JSON.stringify(payload)).toString('base64');
|
|
23
|
+
}
|
|
24
|
+
buildPaymentSignature() {
|
|
25
|
+
const payload = { from: this.wallet.address };
|
|
26
|
+
return Buffer.from(JSON.stringify(payload)).toString('base64');
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
exports.AuthBuilder = AuthBuilder;
|
|
30
|
+
//# sourceMappingURL=auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/auth.ts"],"names":[],"mappings":";;;AAAA,mCAAgC;AAEhC,MAAa,WAAW;IAGtB,YAAY,UAAkB;QAC5B,IAAI,CAAC,MAAM,GAAG,IAAI,eAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAC9C,CAAC;IAED,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,MAAc;QACjC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,MAAM,SAAS,GAAG,kBAAkB,MAAM,IAAI,SAAS,EAAE,CAAC;QAC1D,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;QAC3D,MAAM,OAAO,GAAG;YACd,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO;YAC5B,SAAS;YACT,SAAS;YACT,MAAM;SACP,CAAC;QACF,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACjE,CAAC;IAED,qBAAqB;QACnB,MAAM,OAAO,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QAC9C,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACjE,CAAC;CACF;AA5BD,kCA4BC"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.TargeClient = void 0;
|
|
7
|
+
const axios_1 = __importDefault(require("axios"));
|
|
8
|
+
const errors_1 = require("./errors");
|
|
9
|
+
class TargeClient {
|
|
10
|
+
constructor(baseUrl, timeout, retries) {
|
|
11
|
+
this.retries = retries;
|
|
12
|
+
this.http = axios_1.default.create({
|
|
13
|
+
baseURL: baseUrl,
|
|
14
|
+
timeout,
|
|
15
|
+
headers: { 'Content-Type': 'application/json' },
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
async request(method, path, opts = {}) {
|
|
19
|
+
let lastError;
|
|
20
|
+
for (let attempt = 0; attempt <= this.retries; attempt++) {
|
|
21
|
+
try {
|
|
22
|
+
const response = await this.http.request({
|
|
23
|
+
method,
|
|
24
|
+
url: path,
|
|
25
|
+
data: opts.body,
|
|
26
|
+
headers: opts.headers,
|
|
27
|
+
timeout: opts.timeout,
|
|
28
|
+
});
|
|
29
|
+
return response.data;
|
|
30
|
+
}
|
|
31
|
+
catch (err) {
|
|
32
|
+
const mapped = this.handleError(err);
|
|
33
|
+
lastError = mapped;
|
|
34
|
+
if (mapped.status < 500 || attempt === this.retries) {
|
|
35
|
+
throw mapped;
|
|
36
|
+
}
|
|
37
|
+
// Exponential backoff before retry
|
|
38
|
+
await this.sleep(1000 * Math.pow(2, attempt));
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
throw lastError;
|
|
42
|
+
}
|
|
43
|
+
async streamRequest(method, path, opts = {}) {
|
|
44
|
+
try {
|
|
45
|
+
const response = await this.http.request({
|
|
46
|
+
method,
|
|
47
|
+
url: path,
|
|
48
|
+
data: opts.body,
|
|
49
|
+
headers: opts.headers,
|
|
50
|
+
timeout: opts.timeout,
|
|
51
|
+
responseType: 'stream',
|
|
52
|
+
});
|
|
53
|
+
const headers = {};
|
|
54
|
+
for (const [key, value] of Object.entries(response.headers)) {
|
|
55
|
+
if (typeof value === 'string')
|
|
56
|
+
headers[key] = value;
|
|
57
|
+
}
|
|
58
|
+
return { stream: response.data, headers };
|
|
59
|
+
}
|
|
60
|
+
catch (err) {
|
|
61
|
+
throw this.handleError(err);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
handleError(err) {
|
|
65
|
+
if (err instanceof errors_1.TargeError)
|
|
66
|
+
return err;
|
|
67
|
+
if (axios_1.default.isAxiosError(err)) {
|
|
68
|
+
const axErr = err;
|
|
69
|
+
if (axErr.response) {
|
|
70
|
+
return (0, errors_1.mapHttpError)(axErr.response.status, axErr.response.data);
|
|
71
|
+
}
|
|
72
|
+
if (axErr.code === 'ECONNABORTED' || axErr.code === 'ETIMEDOUT') {
|
|
73
|
+
return new errors_1.TargeError('Request timeout', 408, 'TIMEOUT');
|
|
74
|
+
}
|
|
75
|
+
return new errors_1.TargeError(axErr.message, 0, 'NETWORK_ERROR');
|
|
76
|
+
}
|
|
77
|
+
return new errors_1.TargeError(String(err), 0, 'UNKNOWN_ERROR');
|
|
78
|
+
}
|
|
79
|
+
sleep(ms) {
|
|
80
|
+
return new Promise(resolve => setTimeout(resolve, ms));
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
exports.TargeClient = TargeClient;
|
|
84
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.UpstreamError = exports.KeyNotAvailableError = exports.NotFoundError = exports.RateLimitError = exports.AuthenticationError = exports.InsufficientBalanceError = exports.TargeError = void 0;
|
|
4
|
+
exports.mapHttpError = mapHttpError;
|
|
5
|
+
class TargeError extends Error {
|
|
6
|
+
constructor(message, status, code, details) {
|
|
7
|
+
super(message);
|
|
8
|
+
this.name = 'TargeError';
|
|
9
|
+
this.status = status;
|
|
10
|
+
this.code = code;
|
|
11
|
+
this.details = details;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
exports.TargeError = TargeError;
|
|
15
|
+
class InsufficientBalanceError extends TargeError {
|
|
16
|
+
constructor(message, details) {
|
|
17
|
+
super(message, 402, 'INSUFFICIENT_BALANCE', details);
|
|
18
|
+
this.name = 'InsufficientBalanceError';
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
exports.InsufficientBalanceError = InsufficientBalanceError;
|
|
22
|
+
class AuthenticationError extends TargeError {
|
|
23
|
+
constructor(message, details) {
|
|
24
|
+
super(message, 401, 'AUTHENTICATION_ERROR', details);
|
|
25
|
+
this.name = 'AuthenticationError';
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
exports.AuthenticationError = AuthenticationError;
|
|
29
|
+
class RateLimitError extends TargeError {
|
|
30
|
+
constructor(message, retryAfter, details) {
|
|
31
|
+
super(message, 429, 'RATE_LIMITED', details);
|
|
32
|
+
this.name = 'RateLimitError';
|
|
33
|
+
this.retryAfter = retryAfter;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
exports.RateLimitError = RateLimitError;
|
|
37
|
+
class NotFoundError extends TargeError {
|
|
38
|
+
constructor(message, details) {
|
|
39
|
+
super(message, 404, 'NOT_FOUND', details);
|
|
40
|
+
this.name = 'NotFoundError';
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
exports.NotFoundError = NotFoundError;
|
|
44
|
+
class KeyNotAvailableError extends TargeError {
|
|
45
|
+
constructor(message, status = 503, details) {
|
|
46
|
+
super(message, status, 'KEY_NOT_AVAILABLE', details);
|
|
47
|
+
this.name = 'KeyNotAvailableError';
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
exports.KeyNotAvailableError = KeyNotAvailableError;
|
|
51
|
+
class UpstreamError extends TargeError {
|
|
52
|
+
constructor(message, details) {
|
|
53
|
+
super(message, 502, 'UPSTREAM_ERROR', details);
|
|
54
|
+
this.name = 'UpstreamError';
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
exports.UpstreamError = UpstreamError;
|
|
58
|
+
function mapHttpError(status, body) {
|
|
59
|
+
const message = body?.error || body?.message || `HTTP ${status}`;
|
|
60
|
+
const details = typeof body === 'object' ? body : undefined;
|
|
61
|
+
switch (status) {
|
|
62
|
+
case 401:
|
|
63
|
+
return new AuthenticationError(message, details);
|
|
64
|
+
case 402:
|
|
65
|
+
return new InsufficientBalanceError(message, details);
|
|
66
|
+
case 404:
|
|
67
|
+
return new NotFoundError(message, details);
|
|
68
|
+
case 410:
|
|
69
|
+
return new KeyNotAvailableError(message, 410, details);
|
|
70
|
+
case 429: {
|
|
71
|
+
const retryAfter = body?.retryAfter ?? body?.retry_after;
|
|
72
|
+
return new RateLimitError(message, retryAfter, details);
|
|
73
|
+
}
|
|
74
|
+
case 502:
|
|
75
|
+
return new UpstreamError(message, details);
|
|
76
|
+
case 503:
|
|
77
|
+
return new KeyNotAvailableError(message, 503, details);
|
|
78
|
+
default:
|
|
79
|
+
return new TargeError(message, status, `HTTP_${status}`, details);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.Targe = exports.parseSSEStream = exports.TargeClient = exports.AuthBuilder = void 0;
|
|
18
|
+
const auth_1 = require("./auth");
|
|
19
|
+
const client_1 = require("./client");
|
|
20
|
+
const sse_1 = require("./sse");
|
|
21
|
+
var auth_2 = require("./auth");
|
|
22
|
+
Object.defineProperty(exports, "AuthBuilder", { enumerable: true, get: function () { return auth_2.AuthBuilder; } });
|
|
23
|
+
var client_2 = require("./client");
|
|
24
|
+
Object.defineProperty(exports, "TargeClient", { enumerable: true, get: function () { return client_2.TargeClient; } });
|
|
25
|
+
var sse_2 = require("./sse");
|
|
26
|
+
Object.defineProperty(exports, "parseSSEStream", { enumerable: true, get: function () { return sse_2.parseSSEStream; } });
|
|
27
|
+
__exportStar(require("./errors"), exports);
|
|
28
|
+
__exportStar(require("./types"), exports);
|
|
29
|
+
const DEFAULT_BASE_URL = 'https://api.targe.io';
|
|
30
|
+
const DEFAULT_TIMEOUT = 30000;
|
|
31
|
+
const DEFAULT_STREAM_TIMEOUT = 120000;
|
|
32
|
+
const DEFAULT_RETRIES = 1;
|
|
33
|
+
class Targe {
|
|
34
|
+
constructor(opts) {
|
|
35
|
+
this.auth = new auth_1.AuthBuilder(opts.privateKey);
|
|
36
|
+
this.address = this.auth.address;
|
|
37
|
+
this.streamTimeout = opts.streamTimeout ?? DEFAULT_STREAM_TIMEOUT;
|
|
38
|
+
this.client = new client_1.TargeClient(opts.baseUrl ?? DEFAULT_BASE_URL, opts.timeout ?? DEFAULT_TIMEOUT, opts.retries ?? DEFAULT_RETRIES);
|
|
39
|
+
}
|
|
40
|
+
// ── Account Management (Agent Auth) ──────────────────────────────
|
|
41
|
+
async register() {
|
|
42
|
+
return this.agentRequest('POST', '/agent/register', 'register');
|
|
43
|
+
}
|
|
44
|
+
async getBalance() {
|
|
45
|
+
return this.agentRequest('GET', '/agent/balance', 'get-balance');
|
|
46
|
+
}
|
|
47
|
+
async getDepositAddress() {
|
|
48
|
+
return this.agentRequest('GET', '/agent/deposit-address', 'get-deposit-address');
|
|
49
|
+
}
|
|
50
|
+
async getDeposits() {
|
|
51
|
+
return this.agentRequest('GET', '/agent/deposits', 'get-deposits');
|
|
52
|
+
}
|
|
53
|
+
async getTransactions(opts) {
|
|
54
|
+
let path = '/agent/transactions';
|
|
55
|
+
const params = [];
|
|
56
|
+
if (opts?.limit)
|
|
57
|
+
params.push(`limit=${opts.limit}`);
|
|
58
|
+
if (opts?.offset)
|
|
59
|
+
params.push(`offset=${opts.offset}`);
|
|
60
|
+
if (params.length)
|
|
61
|
+
path += '?' + params.join('&');
|
|
62
|
+
return this.agentRequest('GET', path, 'get-transactions');
|
|
63
|
+
}
|
|
64
|
+
// ── Proxy (Payment Signature) ────────────────────────────────────
|
|
65
|
+
async proxy(keyId, path, opts) {
|
|
66
|
+
const method = opts?.method ?? 'GET';
|
|
67
|
+
const cleanPath = path.startsWith('/') ? path.slice(1) : path;
|
|
68
|
+
return this.client.request(method, `/proxy/${keyId}/${cleanPath}`, {
|
|
69
|
+
headers: {
|
|
70
|
+
'Payment-Signature': this.auth.buildPaymentSignature(),
|
|
71
|
+
...opts?.headers,
|
|
72
|
+
},
|
|
73
|
+
body: opts?.body,
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
async proxyPool(provider, path, body) {
|
|
77
|
+
const cleanPath = path.startsWith('/') ? path.slice(1) : path;
|
|
78
|
+
return this.client.request('POST', `/proxy/pool/${provider}/${cleanPath}`, {
|
|
79
|
+
headers: {
|
|
80
|
+
'Payment-Signature': this.auth.buildPaymentSignature(),
|
|
81
|
+
},
|
|
82
|
+
body,
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
async proxyStream(keyId, path, body) {
|
|
86
|
+
const cleanPath = path.startsWith('/') ? path.slice(1) : path;
|
|
87
|
+
const streamBody = { ...body, stream: true };
|
|
88
|
+
const { stream, headers } = await this.client.streamRequest('POST', `/proxy/${keyId}/${cleanPath}`, {
|
|
89
|
+
headers: {
|
|
90
|
+
'Payment-Signature': this.auth.buildPaymentSignature(),
|
|
91
|
+
},
|
|
92
|
+
body: streamBody,
|
|
93
|
+
timeout: this.streamTimeout,
|
|
94
|
+
});
|
|
95
|
+
return { stream: (0, sse_1.parseSSEStream)(stream), headers };
|
|
96
|
+
}
|
|
97
|
+
async proxyPoolStream(provider, path, body) {
|
|
98
|
+
const cleanPath = path.startsWith('/') ? path.slice(1) : path;
|
|
99
|
+
const streamBody = { ...body, stream: true };
|
|
100
|
+
const { stream, headers } = await this.client.streamRequest('POST', `/proxy/pool/${provider}/${cleanPath}`, {
|
|
101
|
+
headers: {
|
|
102
|
+
'Payment-Signature': this.auth.buildPaymentSignature(),
|
|
103
|
+
},
|
|
104
|
+
body: streamBody,
|
|
105
|
+
timeout: this.streamTimeout,
|
|
106
|
+
});
|
|
107
|
+
return { stream: (0, sse_1.parseSSEStream)(stream), headers };
|
|
108
|
+
}
|
|
109
|
+
// ── Key Sharing (Agent Auth) ─────────────────────────────────────
|
|
110
|
+
async registerKey(opts) {
|
|
111
|
+
return this.agentRequest('POST', '/agent/keys', 'register-shared-key', opts);
|
|
112
|
+
}
|
|
113
|
+
async listKeys() {
|
|
114
|
+
return this.agentRequest('GET', '/agent/keys', 'list-shared-keys');
|
|
115
|
+
}
|
|
116
|
+
async getKey(id) {
|
|
117
|
+
return this.agentRequest('GET', `/agent/keys/${id}`, 'get-shared-key');
|
|
118
|
+
}
|
|
119
|
+
async updateKey(id, updates) {
|
|
120
|
+
return this.agentRequest('PATCH', `/agent/keys/${id}`, 'update-shared-key', updates);
|
|
121
|
+
}
|
|
122
|
+
async pauseKey(id) {
|
|
123
|
+
return this.agentRequest('POST', `/agent/keys/${id}/pause`, 'pause-shared-key');
|
|
124
|
+
}
|
|
125
|
+
async resumeKey(id) {
|
|
126
|
+
return this.agentRequest('POST', `/agent/keys/${id}/resume`, 'resume-shared-key');
|
|
127
|
+
}
|
|
128
|
+
async reclaimKey(id) {
|
|
129
|
+
return this.agentRequest('POST', `/agent/keys/${id}/reclaim`, 'reclaim-shared-key');
|
|
130
|
+
}
|
|
131
|
+
async getKeyEarnings(id) {
|
|
132
|
+
return this.agentRequest('GET', `/agent/keys/${id}/earnings`, 'get-key-earnings');
|
|
133
|
+
}
|
|
134
|
+
// ── Permit2 (Agent Auth) ─────────────────────────────────────────
|
|
135
|
+
async registerPermit(opts) {
|
|
136
|
+
return this.agentRequest('POST', '/agent/permit', 'register-permit', opts);
|
|
137
|
+
}
|
|
138
|
+
async getPermit() {
|
|
139
|
+
return this.agentRequest('GET', '/agent/permit', 'get-permit');
|
|
140
|
+
}
|
|
141
|
+
async revokePermit() {
|
|
142
|
+
await this.agentRequest('DELETE', '/agent/permit', 'revoke-permit');
|
|
143
|
+
}
|
|
144
|
+
async getNonce() {
|
|
145
|
+
return this.agentRequest('GET', '/agent/permit/nonce', 'get-nonce');
|
|
146
|
+
}
|
|
147
|
+
async getTab() {
|
|
148
|
+
return this.agentRequest('GET', '/agent/tab', 'get-tab');
|
|
149
|
+
}
|
|
150
|
+
async settleTab() {
|
|
151
|
+
return this.agentRequest('POST', '/agent/tab/settle', 'settle-tab');
|
|
152
|
+
}
|
|
153
|
+
async getTabHistory() {
|
|
154
|
+
return this.agentRequest('GET', '/agent/tab/history', 'tab-history');
|
|
155
|
+
}
|
|
156
|
+
// ── Public (Static, No Auth) ─────────────────────────────────────
|
|
157
|
+
static async getCatalog(baseUrl) {
|
|
158
|
+
const client = new client_1.TargeClient(baseUrl ?? DEFAULT_BASE_URL, DEFAULT_TIMEOUT, 0);
|
|
159
|
+
return client.request('GET', '/catalog');
|
|
160
|
+
}
|
|
161
|
+
static async getHealth(baseUrl) {
|
|
162
|
+
const client = new client_1.TargeClient(baseUrl ?? DEFAULT_BASE_URL, DEFAULT_TIMEOUT, 0);
|
|
163
|
+
return client.request('GET', '/health');
|
|
164
|
+
}
|
|
165
|
+
static async getStats(baseUrl) {
|
|
166
|
+
const client = new client_1.TargeClient(baseUrl ?? DEFAULT_BASE_URL, DEFAULT_TIMEOUT, 0);
|
|
167
|
+
return client.request('GET', '/stats');
|
|
168
|
+
}
|
|
169
|
+
static async getLeaderboard(baseUrl) {
|
|
170
|
+
const client = new client_1.TargeClient(baseUrl ?? DEFAULT_BASE_URL, DEFAULT_TIMEOUT, 0);
|
|
171
|
+
return client.request('GET', '/leaderboard');
|
|
172
|
+
}
|
|
173
|
+
// ── Internal ─────────────────────────────────────────────────────
|
|
174
|
+
async agentRequest(method, path, action, body) {
|
|
175
|
+
const authHeader = await this.auth.buildAgentAuth(action);
|
|
176
|
+
return this.client.request(method, path, {
|
|
177
|
+
headers: { 'X-Agent-Auth': authHeader },
|
|
178
|
+
body,
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
exports.Targe = Targe;
|
|
183
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/cjs/sse.js
ADDED
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseSSEStream = parseSSEStream;
|
|
4
|
+
async function* parseSSEStream(readable) {
|
|
5
|
+
let buffer = '';
|
|
6
|
+
let currentEvent = {};
|
|
7
|
+
for await (const chunk of readable) {
|
|
8
|
+
buffer += typeof chunk === 'string' ? chunk : chunk.toString('utf-8');
|
|
9
|
+
const lines = buffer.split('\n');
|
|
10
|
+
// Keep the last incomplete line in the buffer
|
|
11
|
+
buffer = lines.pop() || '';
|
|
12
|
+
for (const line of lines) {
|
|
13
|
+
if (line === '') {
|
|
14
|
+
// Blank line = event boundary
|
|
15
|
+
if (currentEvent.data !== undefined) {
|
|
16
|
+
yield {
|
|
17
|
+
event: currentEvent.event,
|
|
18
|
+
data: currentEvent.data,
|
|
19
|
+
id: currentEvent.id,
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
currentEvent = {};
|
|
23
|
+
continue;
|
|
24
|
+
}
|
|
25
|
+
if (line.startsWith(':')) {
|
|
26
|
+
// Comment line, skip
|
|
27
|
+
continue;
|
|
28
|
+
}
|
|
29
|
+
const colonIndex = line.indexOf(':');
|
|
30
|
+
let field;
|
|
31
|
+
let value;
|
|
32
|
+
if (colonIndex === -1) {
|
|
33
|
+
field = line;
|
|
34
|
+
value = '';
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
field = line.slice(0, colonIndex);
|
|
38
|
+
value = line.slice(colonIndex + 1);
|
|
39
|
+
// Remove single leading space if present
|
|
40
|
+
if (value.startsWith(' '))
|
|
41
|
+
value = value.slice(1);
|
|
42
|
+
}
|
|
43
|
+
switch (field) {
|
|
44
|
+
case 'event':
|
|
45
|
+
currentEvent.event = value;
|
|
46
|
+
break;
|
|
47
|
+
case 'data':
|
|
48
|
+
// Multi-line data: concatenate with newline
|
|
49
|
+
currentEvent.data = currentEvent.data !== undefined
|
|
50
|
+
? currentEvent.data + '\n' + value
|
|
51
|
+
: value;
|
|
52
|
+
break;
|
|
53
|
+
case 'id':
|
|
54
|
+
currentEvent.id = value;
|
|
55
|
+
break;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
// Flush any remaining event in the buffer
|
|
60
|
+
if (buffer) {
|
|
61
|
+
const lines = buffer.split('\n');
|
|
62
|
+
for (const line of lines) {
|
|
63
|
+
if (line === '')
|
|
64
|
+
continue;
|
|
65
|
+
const colonIndex = line.indexOf(':');
|
|
66
|
+
if (colonIndex !== -1) {
|
|
67
|
+
const field = line.slice(0, colonIndex);
|
|
68
|
+
let value = line.slice(colonIndex + 1);
|
|
69
|
+
if (value.startsWith(' '))
|
|
70
|
+
value = value.slice(1);
|
|
71
|
+
if (field === 'data') {
|
|
72
|
+
currentEvent.data = currentEvent.data !== undefined
|
|
73
|
+
? currentEvent.data + '\n' + value
|
|
74
|
+
: value;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
if (currentEvent.data !== undefined) {
|
|
80
|
+
yield {
|
|
81
|
+
event: currentEvent.event,
|
|
82
|
+
data: currentEvent.data,
|
|
83
|
+
id: currentEvent.id,
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=sse.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sse.js","sourceRoot":"","sources":["../../src/sse.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":";AAAA,wEAAwE"}
|