@greenhelix/sdk 1.0.7
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 +97 -0
- package/dist/client.d.ts +195 -0
- package/dist/client.js +467 -0
- package/dist/client.js.map +1 -0
- package/dist/errors.d.ts +32 -0
- package/dist/errors.js +92 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -0
- package/dist/test/client.test.d.ts +7 -0
- package/dist/test/client.test.js +265 -0
- package/dist/test/client.test.js.map +1 -0
- package/dist/test/convenience.test.d.ts +11 -0
- package/dist/test/convenience.test.js +487 -0
- package/dist/test/convenience.test.js.map +1 -0
- package/dist/test/errors.test.d.ts +4 -0
- package/dist/test/errors.test.js +126 -0
- package/dist/test/errors.test.js.map +1 -0
- package/dist/types.d.ts +224 -0
- package/dist/types.js +4 -0
- package/dist/types.js.map +1 -0
- package/package.json +45 -0
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Tests for A2AClient construction and method behavior.
|
|
4
|
+
*
|
|
5
|
+
* Uses a mock HTTP server (node:http) to verify real fetch calls
|
|
6
|
+
* from the client, avoiding mock-coupling to internal implementation.
|
|
7
|
+
*/
|
|
8
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
9
|
+
if (k2 === undefined) k2 = k;
|
|
10
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
11
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
12
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
13
|
+
}
|
|
14
|
+
Object.defineProperty(o, k2, desc);
|
|
15
|
+
}) : (function(o, m, k, k2) {
|
|
16
|
+
if (k2 === undefined) k2 = k;
|
|
17
|
+
o[k2] = m[k];
|
|
18
|
+
}));
|
|
19
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
20
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
21
|
+
}) : function(o, v) {
|
|
22
|
+
o["default"] = v;
|
|
23
|
+
});
|
|
24
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
25
|
+
var ownKeys = function(o) {
|
|
26
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
27
|
+
var ar = [];
|
|
28
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
29
|
+
return ar;
|
|
30
|
+
};
|
|
31
|
+
return ownKeys(o);
|
|
32
|
+
};
|
|
33
|
+
return function (mod) {
|
|
34
|
+
if (mod && mod.__esModule) return mod;
|
|
35
|
+
var result = {};
|
|
36
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
37
|
+
__setModuleDefault(result, mod);
|
|
38
|
+
return result;
|
|
39
|
+
};
|
|
40
|
+
})();
|
|
41
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
42
|
+
const node_test_1 = require("node:test");
|
|
43
|
+
const assert = __importStar(require("node:assert/strict"));
|
|
44
|
+
const http = __importStar(require("node:http"));
|
|
45
|
+
const client_1 = require("../client");
|
|
46
|
+
const errors_1 = require("../errors");
|
|
47
|
+
// ---------------------------------------------------------------------------
|
|
48
|
+
// Test HTTP server
|
|
49
|
+
// ---------------------------------------------------------------------------
|
|
50
|
+
let server;
|
|
51
|
+
let baseUrl;
|
|
52
|
+
/** Route handlers keyed by "METHOD /path". */
|
|
53
|
+
const routes = {};
|
|
54
|
+
function route(method, path, handler) {
|
|
55
|
+
routes[`${method} ${path}`] = handler;
|
|
56
|
+
}
|
|
57
|
+
(0, node_test_1.before)(async () => {
|
|
58
|
+
server = http.createServer((req, res) => {
|
|
59
|
+
let body = "";
|
|
60
|
+
req.on("data", (chunk) => { body += chunk.toString(); });
|
|
61
|
+
req.on("end", () => {
|
|
62
|
+
const key = `${req.method} ${req.url}`;
|
|
63
|
+
const handler = routes[key];
|
|
64
|
+
if (handler) {
|
|
65
|
+
const [status, data] = handler(req, body);
|
|
66
|
+
res.writeHead(status, { "Content-Type": "application/json" });
|
|
67
|
+
res.end(JSON.stringify(data));
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
res.writeHead(404);
|
|
71
|
+
res.end(JSON.stringify({ error: { code: "not_found", message: `No handler for ${key}` } }));
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
await new Promise((resolve) => {
|
|
76
|
+
server.listen(0, "127.0.0.1", () => {
|
|
77
|
+
const addr = server.address();
|
|
78
|
+
baseUrl = `http://127.0.0.1:${addr.port}`;
|
|
79
|
+
resolve();
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
});
|
|
83
|
+
(0, node_test_1.after)(async () => {
|
|
84
|
+
await new Promise((resolve) => server.close(() => resolve()));
|
|
85
|
+
});
|
|
86
|
+
// ---------------------------------------------------------------------------
|
|
87
|
+
// Client construction
|
|
88
|
+
// ---------------------------------------------------------------------------
|
|
89
|
+
(0, node_test_1.describe)("A2AClient construction", () => {
|
|
90
|
+
(0, node_test_1.it)("defaults to localhost:8000", () => {
|
|
91
|
+
const client = new client_1.A2AClient();
|
|
92
|
+
// Can't directly inspect private fields, but health() would go to localhost
|
|
93
|
+
assert.ok(client);
|
|
94
|
+
});
|
|
95
|
+
(0, node_test_1.it)("strips trailing slashes from baseUrl", async () => {
|
|
96
|
+
route("GET", "/v1/health", () => [200, { status: "ok", version: "0.1.0", tools: 10 }]);
|
|
97
|
+
const client = new client_1.A2AClient({ baseUrl: baseUrl + "///", apiKey: "test" });
|
|
98
|
+
const health = await client.health();
|
|
99
|
+
assert.equal(health.status, "ok");
|
|
100
|
+
});
|
|
101
|
+
});
|
|
102
|
+
// ---------------------------------------------------------------------------
|
|
103
|
+
// health()
|
|
104
|
+
// ---------------------------------------------------------------------------
|
|
105
|
+
(0, node_test_1.describe)("health()", () => {
|
|
106
|
+
(0, node_test_1.it)("returns health response", async () => {
|
|
107
|
+
route("GET", "/v1/health", () => [200, { status: "ok", version: "0.1.0", tools: 85 }]);
|
|
108
|
+
const client = new client_1.A2AClient({ baseUrl });
|
|
109
|
+
const health = await client.health();
|
|
110
|
+
assert.equal(health.status, "ok");
|
|
111
|
+
assert.equal(health.version, "0.1.0");
|
|
112
|
+
assert.equal(health.tools, 85);
|
|
113
|
+
});
|
|
114
|
+
});
|
|
115
|
+
// ---------------------------------------------------------------------------
|
|
116
|
+
// pricing()
|
|
117
|
+
// ---------------------------------------------------------------------------
|
|
118
|
+
(0, node_test_1.describe)("pricing()", () => {
|
|
119
|
+
(0, node_test_1.it)("returns tool list", async () => {
|
|
120
|
+
route("GET", "/v1/pricing", () => [200, {
|
|
121
|
+
tools: [
|
|
122
|
+
{ name: "get_balance", service: "billing", description: "Get balance", pricing: { per_call: 0 }, tier_required: "free" },
|
|
123
|
+
],
|
|
124
|
+
}]);
|
|
125
|
+
const client = new client_1.A2AClient({ baseUrl });
|
|
126
|
+
const tools = await client.pricing();
|
|
127
|
+
assert.equal(tools.length, 1);
|
|
128
|
+
assert.equal(tools[0].name, "get_balance");
|
|
129
|
+
});
|
|
130
|
+
(0, node_test_1.it)("caches results on second call", async () => {
|
|
131
|
+
let callCount = 0;
|
|
132
|
+
route("GET", "/v1/pricing", () => {
|
|
133
|
+
callCount++;
|
|
134
|
+
return [200, { tools: [{ name: "cached", service: "test", description: "", pricing: {}, tier_required: "free" }] }];
|
|
135
|
+
});
|
|
136
|
+
const client = new client_1.A2AClient({ baseUrl, pricingCacheTtl: 60_000 });
|
|
137
|
+
await client.pricing();
|
|
138
|
+
await client.pricing();
|
|
139
|
+
assert.equal(callCount, 1); // Second call uses cache
|
|
140
|
+
});
|
|
141
|
+
(0, node_test_1.it)("invalidatePricingCache forces refetch", async () => {
|
|
142
|
+
let callCount = 0;
|
|
143
|
+
route("GET", "/v1/pricing", () => {
|
|
144
|
+
callCount++;
|
|
145
|
+
return [200, { tools: [] }];
|
|
146
|
+
});
|
|
147
|
+
const client = new client_1.A2AClient({ baseUrl, pricingCacheTtl: 60_000 });
|
|
148
|
+
await client.pricing();
|
|
149
|
+
client.invalidatePricingCache();
|
|
150
|
+
await client.pricing();
|
|
151
|
+
assert.equal(callCount, 2);
|
|
152
|
+
});
|
|
153
|
+
});
|
|
154
|
+
// ---------------------------------------------------------------------------
|
|
155
|
+
// execute()
|
|
156
|
+
// ---------------------------------------------------------------------------
|
|
157
|
+
(0, node_test_1.describe)("execute()", () => {
|
|
158
|
+
(0, node_test_1.it)("sends tool and params, returns result", async () => {
|
|
159
|
+
route("POST", "/v1/execute", (_req, body) => {
|
|
160
|
+
const parsed = JSON.parse(body);
|
|
161
|
+
assert.equal(parsed.tool, "get_balance");
|
|
162
|
+
assert.equal(parsed.params.agent_id, "test-agent");
|
|
163
|
+
return [200, { success: true, result: { balance: 42.0 }, charged: 0 }];
|
|
164
|
+
});
|
|
165
|
+
const client = new client_1.A2AClient({ baseUrl, apiKey: "test_key" });
|
|
166
|
+
const resp = await client.execute("get_balance", { agent_id: "test-agent" });
|
|
167
|
+
assert.equal(resp.success, true);
|
|
168
|
+
assert.equal(resp.result.balance, 42.0);
|
|
169
|
+
assert.equal(resp.charged, 0);
|
|
170
|
+
});
|
|
171
|
+
(0, node_test_1.it)("sends Authorization header", async () => {
|
|
172
|
+
route("POST", "/v1/execute", (req) => {
|
|
173
|
+
assert.equal(req.headers.authorization, "Bearer my_secret_key");
|
|
174
|
+
return [200, { success: true, result: {}, charged: 0 }];
|
|
175
|
+
});
|
|
176
|
+
const client = new client_1.A2AClient({ baseUrl, apiKey: "my_secret_key" });
|
|
177
|
+
await client.execute("any_tool", {});
|
|
178
|
+
});
|
|
179
|
+
(0, node_test_1.it)("throws AuthenticationError on 401", async () => {
|
|
180
|
+
route("POST", "/v1/execute", () => [401, { error: { code: "invalid_key", message: "Bad key" } }]);
|
|
181
|
+
const client = new client_1.A2AClient({ baseUrl, apiKey: "bad" });
|
|
182
|
+
await assert.rejects(() => client.execute("get_balance", {}), (err) => err instanceof errors_1.AuthenticationError);
|
|
183
|
+
});
|
|
184
|
+
(0, node_test_1.it)("throws ToolNotFoundError on 400", async () => {
|
|
185
|
+
route("POST", "/v1/execute", () => [400, { error: { code: "unknown_tool", message: "Unknown" } }]);
|
|
186
|
+
const client = new client_1.A2AClient({ baseUrl, apiKey: "key" });
|
|
187
|
+
await assert.rejects(() => client.execute("nonexistent", {}), (err) => err instanceof errors_1.ToolNotFoundError);
|
|
188
|
+
});
|
|
189
|
+
});
|
|
190
|
+
// ---------------------------------------------------------------------------
|
|
191
|
+
// Convenience methods
|
|
192
|
+
// ---------------------------------------------------------------------------
|
|
193
|
+
(0, node_test_1.describe)("Convenience methods", () => {
|
|
194
|
+
(0, node_test_1.it)("getBalance extracts balance from result", async () => {
|
|
195
|
+
route("POST", "/v1/execute", () => [200, { success: true, result: { balance: 99.5 }, charged: 0 }]);
|
|
196
|
+
const client = new client_1.A2AClient({ baseUrl, apiKey: "key" });
|
|
197
|
+
const result = await client.getBalance("agent-1");
|
|
198
|
+
assert.equal(result.balance, 99.5);
|
|
199
|
+
});
|
|
200
|
+
(0, node_test_1.it)("deposit extracts new_balance from result", async () => {
|
|
201
|
+
route("POST", "/v1/execute", () => [200, { success: true, result: { new_balance: 199.5 }, charged: 0 }]);
|
|
202
|
+
const client = new client_1.A2AClient({ baseUrl, apiKey: "key" });
|
|
203
|
+
const newBalance = await client.deposit("agent-1", 100);
|
|
204
|
+
assert.equal(newBalance, 199.5);
|
|
205
|
+
});
|
|
206
|
+
(0, node_test_1.it)("searchServices extracts services array", async () => {
|
|
207
|
+
route("POST", "/v1/execute", () => [200, {
|
|
208
|
+
success: true,
|
|
209
|
+
result: { services: [{ name: "svc1" }, { name: "svc2" }] },
|
|
210
|
+
charged: 0,
|
|
211
|
+
}]);
|
|
212
|
+
const client = new client_1.A2AClient({ baseUrl, apiKey: "key" });
|
|
213
|
+
const services = await client.searchServices({ query: "test" });
|
|
214
|
+
assert.equal(services.length, 2);
|
|
215
|
+
});
|
|
216
|
+
});
|
|
217
|
+
// ---------------------------------------------------------------------------
|
|
218
|
+
// Retry behavior
|
|
219
|
+
// ---------------------------------------------------------------------------
|
|
220
|
+
(0, node_test_1.describe)("Retry behavior", () => {
|
|
221
|
+
(0, node_test_1.it)("retries on 429 then succeeds", async () => {
|
|
222
|
+
let attempt = 0;
|
|
223
|
+
route("POST", "/v1/execute", () => {
|
|
224
|
+
attempt++;
|
|
225
|
+
if (attempt === 1) {
|
|
226
|
+
return [429, { error: { code: "rate_limit", message: "slow down" } }];
|
|
227
|
+
}
|
|
228
|
+
return [200, { success: true, result: { ok: true }, charged: 0 }];
|
|
229
|
+
});
|
|
230
|
+
const client = new client_1.A2AClient({ baseUrl, apiKey: "key", retryBaseDelay: 50 });
|
|
231
|
+
const resp = await client.execute("test", {});
|
|
232
|
+
assert.equal(resp.success, true);
|
|
233
|
+
assert.equal(attempt, 2);
|
|
234
|
+
});
|
|
235
|
+
(0, node_test_1.it)("retries on 500 then succeeds", async () => {
|
|
236
|
+
let attempt = 0;
|
|
237
|
+
route("POST", "/v1/execute", () => {
|
|
238
|
+
attempt++;
|
|
239
|
+
if (attempt === 1) {
|
|
240
|
+
return [500, { error: { code: "internal", message: "oops" } }];
|
|
241
|
+
}
|
|
242
|
+
return [200, { success: true, result: {}, charged: 0 }];
|
|
243
|
+
});
|
|
244
|
+
const client = new client_1.A2AClient({ baseUrl, apiKey: "key", retryBaseDelay: 50 });
|
|
245
|
+
const resp = await client.execute("test", {});
|
|
246
|
+
assert.equal(resp.success, true);
|
|
247
|
+
assert.equal(attempt, 2);
|
|
248
|
+
});
|
|
249
|
+
(0, node_test_1.it)("throws RateLimitError after max retries exhausted", async () => {
|
|
250
|
+
route("POST", "/v1/execute", () => [429, { error: { code: "rate_limit", message: "nope" } }]);
|
|
251
|
+
const client = new client_1.A2AClient({ baseUrl, apiKey: "key", maxRetries: 1, retryBaseDelay: 50 });
|
|
252
|
+
await assert.rejects(() => client.execute("test", {}), (err) => err instanceof errors_1.RateLimitError);
|
|
253
|
+
});
|
|
254
|
+
(0, node_test_1.it)("does not retry on 400", async () => {
|
|
255
|
+
let attempt = 0;
|
|
256
|
+
route("POST", "/v1/execute", () => {
|
|
257
|
+
attempt++;
|
|
258
|
+
return [400, { error: { code: "bad_request", message: "bad" } }];
|
|
259
|
+
});
|
|
260
|
+
const client = new client_1.A2AClient({ baseUrl, apiKey: "key", retryBaseDelay: 50 });
|
|
261
|
+
await assert.rejects(() => client.execute("test", {}));
|
|
262
|
+
assert.equal(attempt, 1); // No retry
|
|
263
|
+
});
|
|
264
|
+
});
|
|
265
|
+
//# sourceMappingURL=client.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.test.js","sourceRoot":"","sources":["../../src/test/client.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tests for ALL convenience methods (Items 4, 11, 12).
|
|
3
|
+
*
|
|
4
|
+
* Each test verifies:
|
|
5
|
+
* 1. The method exists on A2AClient
|
|
6
|
+
* 2. It calls execute() with the correct tool name and params
|
|
7
|
+
* 3. It returns a properly typed response
|
|
8
|
+
*
|
|
9
|
+
* Uses a mock HTTP server to capture actual execute() calls.
|
|
10
|
+
*/
|
|
11
|
+
export {};
|