@key0ai/key0 0.1.1 → 0.2.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 +38 -8
- package/dist/__tests__/e2e.test.js +1 -1
- package/dist/__tests__/e2e.test.js.map +1 -1
- package/dist/core/__tests__/agent-card.test.js +14 -12
- package/dist/core/__tests__/agent-card.test.js.map +1 -1
- package/dist/core/agent-card.d.ts.map +1 -1
- package/dist/core/agent-card.js +25 -10
- package/dist/core/agent-card.js.map +1 -1
- package/dist/core/index.d.ts +1 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +1 -1
- package/dist/core/index.js.map +1 -1
- package/dist/integrations/express.d.ts.map +1 -1
- package/dist/integrations/express.js +7 -16
- package/dist/integrations/express.js.map +1 -1
- package/dist/integrations/fastify.d.ts.map +1 -1
- package/dist/integrations/fastify.js +8 -7
- package/dist/integrations/fastify.js.map +1 -1
- package/dist/integrations/hono.d.ts.map +1 -1
- package/dist/integrations/hono.js +8 -7
- package/dist/integrations/hono.js.map +1 -1
- package/dist/types/agent-card.d.ts +16 -0
- package/dist/types/agent-card.d.ts.map +1 -1
- package/package.json +2 -1
- package/src/__tests__/e2e.test.ts +1 -1
- package/src/core/__tests__/agent-card.test.ts +15 -12
- package/src/core/agent-card.ts +26 -10
- package/src/core/index.ts +1 -1
- package/src/integrations/express.ts +9 -24
- package/src/integrations/fastify.ts +10 -9
- package/src/integrations/hono.ts +13 -9
- package/src/types/agent-card.ts +13 -2
- package/src/types/config.ts +1 -1
package/README.md
CHANGED
|
@@ -376,8 +376,11 @@ fastify.listen({ port: 3000 });
|
|
|
376
376
|
| `network` | `"testnet" \| "mainnet"` | ✅ | — | Base Sepolia or Base |
|
|
377
377
|
| `plans` | `Plan[]` | ✅ | — | Pricing plans |
|
|
378
378
|
| `fetchResourceCredentials` | `(params) => Promise<TokenIssuanceResult>` | ✅ | — | Issue the credential after payment |
|
|
379
|
+
| `tokenIssueTimeoutMs` | `number` | | `15000` | Timeout for `fetchResourceCredentials` callback (ms) |
|
|
380
|
+
| `tokenIssueRetries` | `number` | | `2` | Max retries for `fetchResourceCredentials` on transient failure |
|
|
379
381
|
| `challengeTTLSeconds` | `number` | | `900` | Challenge validity window |
|
|
380
|
-
| `
|
|
382
|
+
| `version` | `string` | | `"1.0.0"` | Agent version shown in agent card and MCP discovery |
|
|
383
|
+
| `basePath` | `string` | | `"/agent"` | Path prefix for resource endpoint URLs |
|
|
381
384
|
| `resourceEndpointTemplate` | `string` | | auto | URL template (use `{resourceId}`) |
|
|
382
385
|
| `gasWalletPrivateKey` | `0x${string}` | | — | Private key for self-contained settlement |
|
|
383
386
|
| `redis` | `IRedisLockClient` | | — | Redis client for distributed gas wallet settlement locking across replicas |
|
|
@@ -454,6 +457,17 @@ await queue.add("process", {}, { repeat: { every: 60_000 } });
|
|
|
454
457
|
> The `walletPrivateKey` must correspond to `walletAddress` — the wallet that received the USDC payments.
|
|
455
458
|
> Without Redis, a plain `setInterval` works for single-instance deployments (the atomic `PAID → REFUND_PENDING` CAS transition prevents double-refunds even with multiple overlapping ticks).
|
|
456
459
|
|
|
460
|
+
**Retrying failed refunds:**
|
|
461
|
+
|
|
462
|
+
If a refund fails (e.g. network error), the record moves to `REFUND_FAILED`. Use `retryFailedRefunds` to re-queue them:
|
|
463
|
+
|
|
464
|
+
```typescript
|
|
465
|
+
import { retryFailedRefunds } from "@key0ai/key0";
|
|
466
|
+
|
|
467
|
+
// Re-queue specific failed refunds — they'll be picked up by the next processRefunds run
|
|
468
|
+
const requeued = await retryFailedRefunds(store, ["challengeId-1", "challengeId-2"]);
|
|
469
|
+
```
|
|
470
|
+
|
|
457
471
|
### Environment Variables
|
|
458
472
|
|
|
459
473
|
```bash
|
|
@@ -523,9 +537,9 @@ Client Agent Seller Server
|
|
|
523
537
|
```
|
|
524
538
|
Client Seller Server
|
|
525
539
|
| |
|
|
526
|
-
| 1.
|
|
540
|
+
| 1. GET /discovery |
|
|
527
541
|
|------------------------------------->|
|
|
528
|
-
| <--
|
|
542
|
+
| <-- 200 + all plans |
|
|
529
543
|
| (discovery, no PENDING record) |
|
|
530
544
|
| |
|
|
531
545
|
| 2. POST /x402/access |
|
|
@@ -551,7 +565,7 @@ Client Seller Server
|
|
|
551
565
|
| <-- Protected content |
|
|
552
566
|
```
|
|
553
567
|
|
|
554
|
-
1. **Discovery (optional)** — Client
|
|
568
|
+
1. **Discovery (optional)** — Client calls `GET /discovery` to receive a 200 response listing all available plans and pricing. No `PENDING` record is created. `POST /x402/access` without a `planId` returns 400 and directs clients to `GET /discovery`.
|
|
555
569
|
2. **Challenge** — Client POSTs `{ planId }` (and optionally `requestId`, `resourceId`). Server creates a `PENDING` record and returns HTTP 402 with x402 `PaymentRequirements` for that plan. `requestId` is auto-generated if omitted.
|
|
556
570
|
3. **Payment + Settlement** — Client resends with the same `{ planId, requestId }` plus a `PAYMENT-SIGNATURE` header containing a signed EIP-3009 authorization. The gas wallet or facilitator settles on-chain; server transitions `PENDING → PAID → DELIVERED` and returns an `AccessGrant`.
|
|
557
571
|
4. **Access** — Client uses the token as a Bearer header to access the protected resource.
|
|
@@ -682,6 +696,21 @@ fetchResourceCredentials: async (params) => {
|
|
|
682
696
|
const decoded = await issuer.verifyWithFallback(token, [process.env.PREVIOUS_SECRET!]);
|
|
683
697
|
```
|
|
684
698
|
|
|
699
|
+
### Lightweight Token Validator (Backend Services)
|
|
700
|
+
|
|
701
|
+
If your backend only needs to validate Key0 tokens without the full SDK, use `validateKey0Token`:
|
|
702
|
+
|
|
703
|
+
```typescript
|
|
704
|
+
import { validateKey0Token } from "@key0ai/key0";
|
|
705
|
+
|
|
706
|
+
const payload = await validateKey0Token(req.headers.authorization, {
|
|
707
|
+
secret: process.env.ACCESS_TOKEN_SECRET!,
|
|
708
|
+
});
|
|
709
|
+
// payload: { sub, jti, resourceId, planId, txHash, ... }
|
|
710
|
+
```
|
|
711
|
+
|
|
712
|
+
Supports both HS256 (shared secret) and RS256 (public key) algorithms. No blockchain connection needed.
|
|
713
|
+
|
|
685
714
|
### Settlement Strategies
|
|
686
715
|
|
|
687
716
|
**Facilitator (default)** — Coinbase CDP executes an EIP-3009 `transferWithAuthorization` on-chain:
|
|
@@ -701,10 +730,10 @@ The gas wallet must hold ETH on Base to pay transaction fees.
|
|
|
701
730
|
|
|
702
731
|
## Networks
|
|
703
732
|
|
|
704
|
-
| Network | Chain | Chain ID | USDC Contract | EIP-712 Domain Name |
|
|
705
|
-
|
|
706
|
-
| `testnet` | Base Sepolia | 84532 | `0x036CbD53842c5426634e7929541eC2318f3dCF7e` | `
|
|
707
|
-
| `mainnet` | Base | 8453 | `0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913` | `
|
|
733
|
+
| Network | Chain | Chain ID | USDC Contract | EIP-712 Domain Name | EIP-712 Version |
|
|
734
|
+
|---|---|---|---|---|---|
|
|
735
|
+
| `testnet` | Base Sepolia | 84532 | `0x036CbD53842c5426634e7929541eC2318f3dCF7e` | `USDC` | `2` |
|
|
736
|
+
| `mainnet` | Base | 8453 | `0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913` | `USDC` | `2` |
|
|
708
737
|
|
|
709
738
|
---
|
|
710
739
|
|
|
@@ -739,6 +768,7 @@ bun run start
|
|
|
739
768
|
| [`examples/refund-cron-example`](./examples/refund-cron-example) | BullMQ refund cron with Redis-backed storage |
|
|
740
769
|
| [`examples/backend-integration`](./examples/backend-integration) | Key0 service + backend API coordination |
|
|
741
770
|
| [`examples/client-agent`](./examples/client-agent) | Buyer agent with real on-chain USDC payments |
|
|
771
|
+
| [`examples/simple-x402-client.ts`](./examples/simple-x402-client.ts) | Minimal x402 HTTP client example (single file) |
|
|
742
772
|
|
|
743
773
|
---
|
|
744
774
|
|
|
@@ -131,7 +131,7 @@ describe("E2E: Full Key0 lifecycle (x402 Extension)", () => {
|
|
|
131
131
|
// Agent card check — two A2A spec-compliant skills
|
|
132
132
|
expect(agentCard.name).toBe("E2E Test Agent");
|
|
133
133
|
expect(agentCard.skills).toHaveLength(2);
|
|
134
|
-
expect(agentCard.skills[0].id).toBe("discover-
|
|
134
|
+
expect(agentCard.skills[0].id).toBe("discover-plans");
|
|
135
135
|
expect(agentCard.skills[1].id).toBe("request-access");
|
|
136
136
|
// Skills should NOT have pricing (A2A spec compliance)
|
|
137
137
|
expect(agentCard.skills[0].pricing).toBeUndefined();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"e2e.test.js","sourceRoot":"","sources":["../../src/__tests__/e2e.test.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"e2e.test.js","sourceRoot":"","sources":["../../src/__tests__/e2e.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -52,23 +52,22 @@ describe("buildAgentCard", () => {
|
|
|
52
52
|
test("has two A2A spec-compliant skills", () => {
|
|
53
53
|
const card = buildAgentCard(makeConfig());
|
|
54
54
|
expect(card.skills).toHaveLength(2);
|
|
55
|
-
expect(card.skills[0].id).toBe("discover-
|
|
55
|
+
expect(card.skills[0].id).toBe("discover-plans");
|
|
56
56
|
expect(card.skills[1].id).toBe("request-access");
|
|
57
57
|
});
|
|
58
|
-
test("discover-
|
|
58
|
+
test("discover-plans skill has correct structure", () => {
|
|
59
59
|
const card = buildAgentCard(makeConfig());
|
|
60
60
|
const skill = card.skills[0];
|
|
61
|
-
expect(skill.id).toBe("discover-
|
|
62
|
-
expect(skill.name).toBe("Discover
|
|
63
|
-
expect(skill.description).toContain("Browse available
|
|
64
|
-
expect(skill.description).toContain("/
|
|
61
|
+
expect(skill.id).toBe("discover-plans");
|
|
62
|
+
expect(skill.name).toBe("Discover Plans");
|
|
63
|
+
expect(skill.description).toContain("Browse available");
|
|
64
|
+
expect(skill.description).toContain("/discovery");
|
|
65
65
|
expect(skill.tags).toContain("discovery");
|
|
66
66
|
expect(skill.tags).toContain("catalog");
|
|
67
67
|
expect(skill.examples).toBeDefined();
|
|
68
68
|
expect(skill.examples.length).toBeGreaterThan(0);
|
|
69
|
-
// A2A spec: skills should NOT have pricing,
|
|
69
|
+
// A2A spec: skills should NOT have pricing, outputSchema, url
|
|
70
70
|
expect(skill.pricing).toBeUndefined();
|
|
71
|
-
expect(skill.inputSchema).toBeUndefined();
|
|
72
71
|
expect(skill.outputSchema).toBeUndefined();
|
|
73
72
|
expect(skill.url).toBeUndefined();
|
|
74
73
|
});
|
|
@@ -84,9 +83,12 @@ describe("buildAgentCard", () => {
|
|
|
84
83
|
expect(skill.tags).toContain("purchase");
|
|
85
84
|
expect(skill.examples).toBeDefined();
|
|
86
85
|
expect(skill.examples.length).toBeGreaterThan(0);
|
|
87
|
-
//
|
|
86
|
+
// inputSchema is present for machine-readable validation
|
|
87
|
+
expect(skill.inputSchema).toBeDefined();
|
|
88
|
+
expect(skill.inputSchema.required).toContain("planId");
|
|
89
|
+
expect(skill.inputSchema.required).toContain("requestId");
|
|
90
|
+
// A2A spec: skills should NOT have pricing, outputSchema, url
|
|
88
91
|
expect(skill.pricing).toBeUndefined();
|
|
89
|
-
expect(skill.inputSchema).toBeUndefined();
|
|
90
92
|
expect(skill.outputSchema).toBeUndefined();
|
|
91
93
|
expect(skill.url).toBeUndefined();
|
|
92
94
|
});
|
|
@@ -95,7 +97,7 @@ describe("buildAgentCard", () => {
|
|
|
95
97
|
const discoverSkill = card.skills[0];
|
|
96
98
|
expect(discoverSkill.examples).toBeDefined();
|
|
97
99
|
expect(discoverSkill.examples.length).toBeGreaterThan(0);
|
|
98
|
-
expect(discoverSkill.examples.some((ex) => ex.includes("/
|
|
100
|
+
expect(discoverSkill.examples.some((ex) => ex.includes("/discovery"))).toBe(true);
|
|
99
101
|
const requestSkill = card.skills[1];
|
|
100
102
|
expect(requestSkill.examples).toBeDefined();
|
|
101
103
|
expect(requestSkill.examples.length).toBeGreaterThan(0);
|
|
@@ -126,7 +128,7 @@ describe("buildAgentCard", () => {
|
|
|
126
128
|
const card = buildAgentCard(config);
|
|
127
129
|
// Still just two skills regardless of tier count
|
|
128
130
|
expect(card.skills).toHaveLength(2);
|
|
129
|
-
expect(card.skills[0].id).toBe("discover-
|
|
131
|
+
expect(card.skills[0].id).toBe("discover-plans");
|
|
130
132
|
expect(card.skills[1].id).toBe("request-access");
|
|
131
133
|
});
|
|
132
134
|
test("mainnet configuration works", () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-card.test.js","sourceRoot":"","sources":["../../../src/core/__tests__/agent-card.test.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"agent-card.test.js","sourceRoot":"","sources":["../../../src/core/__tests__/agent-card.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-card.d.ts","sourceRoot":"","sources":["../../src/core/agent-card.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAA8B,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAG7F,wBAAgB,cAAc,CAAC,MAAM,EAAE,YAAY,GAAG,SAAS,
|
|
1
|
+
{"version":3,"file":"agent-card.d.ts","sourceRoot":"","sources":["../../src/core/agent-card.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAA8B,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAG7F,wBAAgB,cAAc,CAAC,MAAM,EAAE,YAAY,GAAG,SAAS,CAuF9D"}
|
package/dist/core/agent-card.js
CHANGED
|
@@ -3,30 +3,29 @@ export function buildAgentCard(config) {
|
|
|
3
3
|
const networkConfig = CHAIN_CONFIGS[config.network];
|
|
4
4
|
const networkName = CHAIN_ID_TO_NETWORK[networkConfig.chainId] ?? `chain-${networkConfig.chainId}`;
|
|
5
5
|
const baseUrl = config.agentUrl.replace(/\/$/, "");
|
|
6
|
-
|
|
6
|
+
const planIds = config.plans.map((p) => p.planId);
|
|
7
|
+
// Two A2A spec-compliant skills
|
|
7
8
|
// Skill 1: Discovery (free) — browse the product catalog
|
|
8
9
|
// Skill 2: Purchase (x402-gated) — buy an access token
|
|
9
10
|
const skills = [
|
|
10
11
|
{
|
|
11
|
-
id: "discover-
|
|
12
|
-
name: "Discover
|
|
12
|
+
id: "discover-plans",
|
|
13
|
+
name: "Discover Plans",
|
|
13
14
|
description: [
|
|
14
|
-
`Browse available
|
|
15
|
+
`Browse available plans and pricing for ${config.agentName}.`,
|
|
15
16
|
`Returns the product catalog with plan IDs, prices (USDC on ${networkName}), wallet address, and chain ID.`,
|
|
16
|
-
`
|
|
17
|
+
`GET to ${baseUrl}/discovery to discover plans.`,
|
|
17
18
|
].join(" "),
|
|
18
19
|
tags: ["discovery", "catalog", "x402"],
|
|
19
|
-
examples: [
|
|
20
|
-
|
|
21
|
-
`Or call without planId to get 402 response with product catalog`,
|
|
22
|
-
],
|
|
20
|
+
examples: [`GET ${baseUrl}/discovery`],
|
|
21
|
+
endpoint: { url: `${baseUrl}/discovery`, method: "GET" },
|
|
23
22
|
},
|
|
24
23
|
{
|
|
25
24
|
id: "request-access",
|
|
26
25
|
name: "Request Access",
|
|
27
26
|
description: [
|
|
28
27
|
`Purchase access to a ${config.agentName} product plan via x402 payment on ${networkName}.`,
|
|
29
|
-
`First call discover-
|
|
28
|
+
`First call discover-plans to get available plans.`,
|
|
30
29
|
`Then POST to ${baseUrl}/x402/access with planId and requestId to initiate purchase.`,
|
|
31
30
|
`Server responds with x402 payment challenge.`,
|
|
32
31
|
`Complete payment on-chain and include PAYMENT-SIGNATURE header to receive access token.`,
|
|
@@ -38,6 +37,22 @@ export function buildAgentCard(config) {
|
|
|
38
37
|
`Pay USDC on-chain, retry same request with PAYMENT-SIGNATURE header`,
|
|
39
38
|
`Receive 200 with access token`,
|
|
40
39
|
],
|
|
40
|
+
endpoint: { url: `${baseUrl}/x402/access`, method: "POST" },
|
|
41
|
+
inputSchema: {
|
|
42
|
+
type: "object",
|
|
43
|
+
required: ["planId", "requestId"],
|
|
44
|
+
properties: {
|
|
45
|
+
planId: { type: "string", enum: planIds },
|
|
46
|
+
requestId: { type: "string", format: "uuid" },
|
|
47
|
+
},
|
|
48
|
+
},
|
|
49
|
+
workflow: [
|
|
50
|
+
"POST body with planId + requestId to endpoint.url — expect 402",
|
|
51
|
+
"Extract payment requirements from 402 response body",
|
|
52
|
+
`Sign and broadcast USDC transfer on ${networkName}`,
|
|
53
|
+
"Retry same POST with PAYMENT-SIGNATURE header containing the transaction hash",
|
|
54
|
+
"Receive 200 with accessToken",
|
|
55
|
+
],
|
|
41
56
|
},
|
|
42
57
|
];
|
|
43
58
|
const x402Extension = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-card.js","sourceRoot":"","sources":["../../src/core/agent-card.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAE3F,MAAM,UAAU,cAAc,CAAC,MAAoB;IAClD,MAAM,aAAa,GAAG,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACpD,MAAM,WAAW,GAChB,mBAAmB,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,SAAS,aAAa,CAAC,OAAO,EAAE,CAAC;IAEhF,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAEnD,
|
|
1
|
+
{"version":3,"file":"agent-card.js","sourceRoot":"","sources":["../../src/core/agent-card.ts"],"names":[],"mappings":"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"}
|
package/dist/core/index.d.ts
CHANGED
|
@@ -5,7 +5,7 @@ export type { ChallengeEngineConfig } from "./challenge-engine.js";
|
|
|
5
5
|
export { ChallengeEngine } from "./challenge-engine.js";
|
|
6
6
|
export { validateSellerConfig } from "./config-validation.js";
|
|
7
7
|
export type { RefundConfig, RefundResult } from "./refund.js";
|
|
8
|
-
export { processRefunds } from "./refund.js";
|
|
8
|
+
export { processRefunds, retryFailedRefunds } from "./refund.js";
|
|
9
9
|
export type { PostgresStoreConfig } from "./storage/postgres.js";
|
|
10
10
|
export { PostgresAuditStore, PostgresChallengeStore, PostgresSeenTxStore, } from "./storage/postgres.js";
|
|
11
11
|
export type { RedisStoreConfig } from "./storage/redis.js";
|
package/dist/core/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAEA,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAElE,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEtD,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,YAAY,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAEnE,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE9D,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAEA,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAElE,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEtD,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,YAAY,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAEnE,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE9D,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjE,YAAY,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAEjE,OAAO,EACN,kBAAkB,EAClB,sBAAsB,EACtB,mBAAmB,GACnB,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE3D,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC5F,OAAO,EACN,eAAe,EACf,oBAAoB,EACpB,gBAAgB,EAChB,cAAc,EACd,YAAY,GACZ,MAAM,iBAAiB,CAAC"}
|
package/dist/core/index.js
CHANGED
|
@@ -8,7 +8,7 @@ export { ChallengeEngine } from "./challenge-engine.js";
|
|
|
8
8
|
// Config Validation
|
|
9
9
|
export { validateSellerConfig } from "./config-validation.js";
|
|
10
10
|
// Refund Utility
|
|
11
|
-
export { processRefunds } from "./refund.js";
|
|
11
|
+
export { processRefunds, retryFailedRefunds } from "./refund.js";
|
|
12
12
|
// Storage — Postgres
|
|
13
13
|
export { PostgresAuditStore, PostgresChallengeStore, PostgresSeenTxStore, } from "./storage/postgres.js";
|
|
14
14
|
// Storage — Redis
|
package/dist/core/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,aAAa;AAGb,eAAe;AACf,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,aAAa;AACb,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEjD,mBAAmB;AACnB,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,oBAAoB;AACpB,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE9D,iBAAiB;AACjB,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,aAAa;AAGb,eAAe;AACf,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,aAAa;AACb,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEjD,mBAAmB;AACnB,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,oBAAoB;AACpB,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE9D,iBAAiB;AACjB,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEjE,qBAAqB;AACrB,OAAO,EACN,kBAAkB,EAClB,sBAAsB,EACtB,mBAAmB,GACnB,MAAM,uBAAuB,CAAC;AAE/B,kBAAkB;AAClB,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC5F,OAAO,EACN,eAAe,EACf,oBAAoB,EACpB,gBAAgB,EAChB,cAAc,EACd,YAAY,GACZ,MAAM,iBAAiB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"express.d.ts","sourceRoot":"","sources":["../../src/integrations/express.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjF,OAAO,EAAc,KAAK,UAAU,EAAE,MAAM,eAAe,CAAC;AAC5D,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAYlE;;;;;;;;;;;;GAYG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"express.d.ts","sourceRoot":"","sources":["../../src/integrations/express.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjF,OAAO,EAAc,KAAK,UAAU,EAAE,MAAM,eAAe,CAAC;AAC5D,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAYlE;;;;;;;;;;;;GAYG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAgQnD;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,yBAAyB,IACtD,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,mBAc7D;AAED,YAAY,EAAE,yBAAyB,EAAE,CAAC"}
|
|
@@ -67,23 +67,10 @@ export function key0Router(opts) {
|
|
|
67
67
|
// Fall through to discovery — the signature might be malformed
|
|
68
68
|
}
|
|
69
69
|
}
|
|
70
|
-
// ===== CASE 1: No planId →
|
|
70
|
+
// ===== CASE 1: No planId → 400 pointing to GET /discovery =====
|
|
71
71
|
if (!planId) {
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
console.log("[x402-access] Discovery response:", JSON.stringify(discoveryResponse, null, 2));
|
|
75
|
-
// Encode as base64 for PAYMENT-REQUIRED header
|
|
76
|
-
const encoded = Buffer.from(JSON.stringify(discoveryResponse)).toString("base64");
|
|
77
|
-
res.setHeader("payment-required", encoded);
|
|
78
|
-
// Add www-authenticate header for HTTP spec compliance
|
|
79
|
-
const authHeader = `Payment realm="${opts.config.agentUrl}", accept="exact"`;
|
|
80
|
-
res.setHeader("www-authenticate", authHeader);
|
|
81
|
-
console.log(`[x402-access] payment-required header set (${encoded.length} bytes)`);
|
|
82
|
-
console.log(`[x402-access] www-authenticate header set`);
|
|
83
|
-
console.log("[x402-access] → Returning HTTP 402 Payment Required (Discovery)");
|
|
84
|
-
return res.status(402).json({
|
|
85
|
-
...discoveryResponse,
|
|
86
|
-
error: "Payment required",
|
|
72
|
+
return res.status(400).json({
|
|
73
|
+
error: "Please select a plan from the discovery API response to purchase access. Endpoint: GET /discovery",
|
|
87
74
|
});
|
|
88
75
|
}
|
|
89
76
|
// Auto-generate requestId if not provided (for simplicity)
|
|
@@ -216,6 +203,10 @@ export function key0Router(opts) {
|
|
|
216
203
|
},
|
|
217
204
|
// A2A JSON-RPC fallback: reached when X-A2A-Extensions header is present
|
|
218
205
|
jsonRpcHandler({ requestHandler, userBuilder: UserBuilder.noAuthentication }));
|
|
206
|
+
router.get("/discovery", (_req, res) => {
|
|
207
|
+
const discoveryResponse = buildDiscoveryResponse(opts.config, networkConfig);
|
|
208
|
+
return res.status(200).json({ discoveryResponse });
|
|
209
|
+
});
|
|
219
210
|
// MCP routes (when mcp: true)
|
|
220
211
|
if (opts.config.mcp) {
|
|
221
212
|
mountMcpRoutes(router, engine, opts.config);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"express.js","sourceRoot":"","sources":["../../src/integrations/express.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"express.js","sourceRoot":"","sources":["../../src/integrations/express.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fastify.d.ts","sourceRoot":"","sources":["../../src/integrations/fastify.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAc,KAAK,UAAU,EAAE,MAAM,eAAe,CAAC;AAC5D,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAWlE;;;;;;;;;GASG;AACH,wBAAsB,UAAU,CAAC,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"fastify.d.ts","sourceRoot":"","sources":["../../src/integrations/fastify.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAc,KAAK,UAAU,EAAE,MAAM,eAAe,CAAC;AAC5D,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAWlE;;;;;;;;;GASG;AACH,wBAAsB,UAAU,CAAC,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CA2J1F;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,yBAAyB,IAC7D,SAAS,cAAc,EAAE,OAAO,YAAY,wBAa1D"}
|
|
@@ -47,14 +47,11 @@ export async function key0Plugin(fastify, opts) {
|
|
|
47
47
|
// Fall through to discovery
|
|
48
48
|
}
|
|
49
49
|
}
|
|
50
|
-
// CASE 1: No planId →
|
|
50
|
+
// CASE 1: No planId → 400 pointing to GET /discovery
|
|
51
51
|
if (!planId) {
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
reply.header("payment-required", encoded);
|
|
56
|
-
reply.header("www-authenticate", `Payment realm="${opts.config.agentUrl}", accept="exact"`);
|
|
57
|
-
return reply.code(402).send({ ...discoveryResponse, error: "Payment required" });
|
|
52
|
+
return reply.code(400).send({
|
|
53
|
+
error: "Please select a plan from the discovery API response to purchase access. Endpoint: GET /discovery",
|
|
54
|
+
});
|
|
58
55
|
}
|
|
59
56
|
// Auto-generate requestId
|
|
60
57
|
if (!requestId) {
|
|
@@ -128,6 +125,10 @@ export async function key0Plugin(fastify, opts) {
|
|
|
128
125
|
console.log(`[x402-access/fastify] Request completed in ${Date.now() - startTime}ms`);
|
|
129
126
|
}
|
|
130
127
|
});
|
|
128
|
+
fastify.get("/discovery", async (_request, reply) => {
|
|
129
|
+
const discoveryResponse = buildDiscoveryResponse(opts.config, networkConfig);
|
|
130
|
+
return reply.send({ discoveryResponse });
|
|
131
|
+
});
|
|
131
132
|
}
|
|
132
133
|
/**
|
|
133
134
|
* Fastify onRequest hook to validate access tokens.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fastify.js","sourceRoot":"","sources":["../../src/integrations/fastify.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C,OAAO,EAAE,UAAU,EAAmB,MAAM,eAAe,CAAC;AAE5D,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EACN,sBAAsB,EACtB,4BAA4B,EAC5B,sBAAsB,EACtB,aAAa,GACb,MAAM,iBAAiB,CAAC;AAEzB;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,OAAwB,EAAE,IAAgB;IAC1E,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAC/C,MAAM,aAAa,GAAG,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAEzD,aAAa;IACb,OAAO,CAAC,GAAG,CAAC,IAAI,eAAe,EAAE,EAAE,KAAK,EAAE,QAAwB,EAAE,KAAmB,EAAE,EAAE;QAC1F,OAAO,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,GAAG,CAAC,yBAAyB,EAAE,KAAK,EAAE,QAAwB,EAAE,KAAmB,EAAE,EAAE;QAC9F,OAAO,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEH,wBAAwB;IACxB,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,KAAK,EAAE,OAAuB,EAAE,KAAmB,EAAE,EAAE;QACnF,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,IAAI,CAAC;YACJ,OAAO,CAAC,GAAG,CAAC,2DAA2D,CAAC,CAAC;YAEzE,MAAM,IAAI,GAAI,OAAO,CAAC,IAAgC,IAAI,EAAE,CAAC;YAC7D,IAAI,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAuB,CAAC;YAClD,IAAI,SAAS,GAAG,IAAI,CAAC,WAAW,CAAuB,CAAC;YACxD,MAAM,UAAU,GAAI,IAAI,CAAC,YAAY,CAAY,IAAI,SAAS,CAAC;YAE/D,MAAM,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC,mBAAmB,CAAuB,CAAC;YAEpF,uDAAuD;YACvD,IAAI,CAAC,MAAM,IAAI,gBAAgB,EAAE,CAAC;gBACjC,IAAI,CAAC;oBACJ,MAAM,OAAO,GAAG,sBAAsB,CAAC,gBAAgB,CAAC,CAAC;oBACzD,MAAM,SAAS,GAAG,OAAO,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC,QAAQ,CAAuB,CAAC;oBAC5E,IAAI,SAAS,EAAE,CAAC;wBACf,OAAO,CAAC,GAAG,CACV,2CAA2C,SAAS,0BAA0B,CAC9E,CAAC;wBACF,MAAM,GAAG,SAAS,CAAC;oBACpB,CAAC;gBACF,CAAC;gBAAC,MAAM,CAAC;oBACR,4BAA4B;gBAC7B,CAAC;YACF,CAAC;YAED,
|
|
1
|
+
{"version":3,"file":"fastify.js","sourceRoot":"","sources":["../../src/integrations/fastify.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hono.d.ts","sourceRoot":"","sources":["../../src/integrations/hono.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAc,KAAK,UAAU,EAAE,MAAM,eAAe,CAAC;AAC5D,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAWlE;;;;;;;;;GASG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"hono.d.ts","sourceRoot":"","sources":["../../src/integrations/hono.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAc,KAAK,UAAU,EAAE,MAAM,eAAe,CAAC;AAC5D,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAWlE;;;;;;;;;GASG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,CAgK9C;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,yBAAyB,IAEvE,GAAG;IACF,GAAG,EAAE;QAAE,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAA;KAAE,CAAC;IACtD,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IAC3C,IAAI,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,KAAK,QAAQ,CAAC;CAClD,EACD,MAAM,MAAM,OAAO,CAAC,IAAI,CAAC,mCAa1B"}
|
|
@@ -44,14 +44,11 @@ export function key0App(opts) {
|
|
|
44
44
|
// Fall through to discovery
|
|
45
45
|
}
|
|
46
46
|
}
|
|
47
|
-
// CASE 1: No planId →
|
|
47
|
+
// CASE 1: No planId → 400 pointing to GET /discovery
|
|
48
48
|
if (!planId) {
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
c.header("payment-required", encoded);
|
|
53
|
-
c.header("www-authenticate", `Payment realm="${opts.config.agentUrl}", accept="exact"`);
|
|
54
|
-
return c.json({ ...discoveryResponse, error: "Payment required" }, 402);
|
|
49
|
+
return c.json({
|
|
50
|
+
error: "Please select a plan from the discovery API response to purchase access. Endpoint: GET /discovery",
|
|
51
|
+
}, 400);
|
|
55
52
|
}
|
|
56
53
|
// Auto-generate requestId
|
|
57
54
|
if (!requestId) {
|
|
@@ -123,6 +120,10 @@ export function key0App(opts) {
|
|
|
123
120
|
console.log(`[x402-access/hono] Request completed in ${Date.now() - startTime}ms`);
|
|
124
121
|
}
|
|
125
122
|
});
|
|
123
|
+
app.get("/discovery", (c) => {
|
|
124
|
+
const discoveryResponse = buildDiscoveryResponse(opts.config, networkConfig);
|
|
125
|
+
return c.json({ discoveryResponse });
|
|
126
|
+
});
|
|
126
127
|
return app;
|
|
127
128
|
}
|
|
128
129
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hono.js","sourceRoot":"","sources":["../../src/integrations/hono.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAmB,MAAM,eAAe,CAAC;AAE5D,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EACN,sBAAsB,EACtB,4BAA4B,EAC5B,sBAAsB,EACtB,aAAa,GACb,MAAM,iBAAiB,CAAC;AAEzB;;;;;;;;;GASG;AACH,MAAM,UAAU,OAAO,CAAC,IAAgB;IACvC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAC/C,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IACvB,MAAM,aAAa,GAAG,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAEzD,aAAa;IACb,GAAG,CAAC,GAAG,CAAC,IAAI,eAAe,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;IACzD,GAAG,CAAC,GAAG,CAAC,yBAAyB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;IAE7D,wBAAwB;IACxB,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QACpC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,IAAI,CAAC;YACJ,OAAO,CAAC,GAAG,CAAC,wDAAwD,CAAC,CAAC;YAEtE,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAClD,IAAI,EAAE,MAAM,EAAE,UAAU,GAAG,SAAS,EAAE,GAAG,IAGxC,CAAC;YACF,IAAI,EAAE,SAAS,EAAE,GAAG,IAA8B,CAAC;YAEnD,MAAM,gBAAgB,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;YAE3D,uDAAuD;YACvD,IAAI,CAAC,MAAM,IAAI,gBAAgB,EAAE,CAAC;gBACjC,IAAI,CAAC;oBACJ,MAAM,OAAO,GAAG,sBAAsB,CAAC,gBAAgB,CAAC,CAAC;oBACzD,MAAM,SAAS,GAAG,OAAO,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC,QAAQ,CAAuB,CAAC;oBAC5E,IAAI,SAAS,EAAE,CAAC;wBACf,OAAO,CAAC,GAAG,CACV,wCAAwC,SAAS,0BAA0B,CAC3E,CAAC;wBACF,MAAM,GAAG,SAAS,CAAC;oBACpB,CAAC;gBACF,CAAC;gBAAC,MAAM,CAAC;oBACR,4BAA4B;gBAC7B,CAAC;YACF,CAAC;YAED,
|
|
1
|
+
{"version":3,"file":"hono.js","sourceRoot":"","sources":["../../src/integrations/hono.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,11 @@
|
|
|
1
1
|
export type PaymentProtocol = "x402" | "stripe" | "lightning";
|
|
2
|
+
/**
|
|
3
|
+
* A2A AgentSkill with Key0 extensions.
|
|
4
|
+
*
|
|
5
|
+
* Standard A2A fields: id, name, description, tags, examples, inputModes, outputModes, security.
|
|
6
|
+
* Key0 extensions: endpoint, inputSchema, workflow — these provide machine-readable
|
|
7
|
+
* metadata for automated agent clients.
|
|
8
|
+
*/
|
|
2
9
|
export type AgentSkill = {
|
|
3
10
|
readonly id: string;
|
|
4
11
|
readonly name: string;
|
|
@@ -8,6 +15,15 @@ export type AgentSkill = {
|
|
|
8
15
|
readonly inputModes?: readonly string[];
|
|
9
16
|
readonly outputModes?: readonly string[];
|
|
10
17
|
readonly security?: Record<string, string[]>;
|
|
18
|
+
/** @key0 Direct endpoint URL and HTTP method for this skill. */
|
|
19
|
+
readonly endpoint?: {
|
|
20
|
+
readonly url: string;
|
|
21
|
+
readonly method: "GET" | "POST";
|
|
22
|
+
};
|
|
23
|
+
/** @key0 JSON Schema for the skill's input parameters. */
|
|
24
|
+
readonly inputSchema?: Record<string, unknown>;
|
|
25
|
+
/** @key0 Step-by-step workflow instructions for automated clients. */
|
|
26
|
+
readonly workflow?: readonly string[];
|
|
11
27
|
};
|
|
12
28
|
export type AgentInterface = {
|
|
13
29
|
readonly url: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-card.d.ts","sourceRoot":"","sources":["../../src/types/agent-card.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,QAAQ,GAAG,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"agent-card.d.ts","sourceRoot":"","sources":["../../src/types/agent-card.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,QAAQ,GAAG,WAAW,CAAC;AAE9D;;;;;;GAMG;AACH,MAAM,MAAM,UAAU,GAAG;IACxB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACxC,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACzC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAC7C,gEAAgE;IAChE,QAAQ,CAAC,QAAQ,CAAC,EAAE;QAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,GAAG,MAAM,CAAA;KAAE,CAAC;IAC9E,0DAA0D;IAC1D,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/C,sEAAsE;IACtE,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACtC,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC5B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,SAAS,EAAE,SAAS,GAAG,WAAW,GAAG,MAAM,CAAC;CACrD,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC5B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC1C,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,YAAY,EAAE;QACtB,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,cAAc,EAAE,CAAC;QAChD,QAAQ,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAC;QACrC,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;QAC7B,QAAQ,CAAC,sBAAsB,CAAC,EAAE,OAAO,CAAC;KAC1C,CAAC;IACF,QAAQ,CAAC,iBAAiB,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9C,QAAQ,CAAC,kBAAkB,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/C,QAAQ,CAAC,MAAM,EAAE,SAAS,UAAU,EAAE,CAAC;IACvC,QAAQ,CAAC,QAAQ,CAAC,EAAE;QACnB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;QAC9B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,QAAQ,CAAC,oBAAoB,CAAC,EAAE,SAAS,cAAc,EAAE,CAAC;CAC1D,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@key0ai/key0",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./src/index.ts",
|
|
6
6
|
"types": "./src/index.ts",
|
|
@@ -69,6 +69,7 @@
|
|
|
69
69
|
"fastify": "^5.0.0",
|
|
70
70
|
"hono": "^4.6.0",
|
|
71
71
|
"ioredis": "^5.0.0",
|
|
72
|
+
"mintlify": "^3.0.98",
|
|
72
73
|
"postgres": "^3.4.8",
|
|
73
74
|
"typescript": "^5.7.0"
|
|
74
75
|
}
|
|
@@ -158,7 +158,7 @@ describe("E2E: Full Key0 lifecycle (x402 Extension)", () => {
|
|
|
158
158
|
// Agent card check — two A2A spec-compliant skills
|
|
159
159
|
expect(agentCard.name).toBe("E2E Test Agent");
|
|
160
160
|
expect(agentCard.skills).toHaveLength(2);
|
|
161
|
-
expect(agentCard.skills[0]!.id).toBe("discover-
|
|
161
|
+
expect(agentCard.skills[0]!.id).toBe("discover-plans");
|
|
162
162
|
expect(agentCard.skills[1]!.id).toBe("request-access");
|
|
163
163
|
|
|
164
164
|
// Skills should NOT have pricing (A2A spec compliance)
|
|
@@ -62,26 +62,25 @@ describe("buildAgentCard", () => {
|
|
|
62
62
|
test("has two A2A spec-compliant skills", () => {
|
|
63
63
|
const card = buildAgentCard(makeConfig());
|
|
64
64
|
expect(card.skills).toHaveLength(2);
|
|
65
|
-
expect(card.skills[0]!.id).toBe("discover-
|
|
65
|
+
expect(card.skills[0]!.id).toBe("discover-plans");
|
|
66
66
|
expect(card.skills[1]!.id).toBe("request-access");
|
|
67
67
|
});
|
|
68
68
|
|
|
69
|
-
test("discover-
|
|
69
|
+
test("discover-plans skill has correct structure", () => {
|
|
70
70
|
const card = buildAgentCard(makeConfig());
|
|
71
71
|
const skill = card.skills[0]!;
|
|
72
72
|
|
|
73
|
-
expect(skill.id).toBe("discover-
|
|
74
|
-
expect(skill.name).toBe("Discover
|
|
75
|
-
expect(skill.description).toContain("Browse available
|
|
76
|
-
expect(skill.description).toContain("/
|
|
73
|
+
expect(skill.id).toBe("discover-plans");
|
|
74
|
+
expect(skill.name).toBe("Discover Plans");
|
|
75
|
+
expect(skill.description).toContain("Browse available");
|
|
76
|
+
expect(skill.description).toContain("/discovery");
|
|
77
77
|
expect(skill.tags).toContain("discovery");
|
|
78
78
|
expect(skill.tags).toContain("catalog");
|
|
79
79
|
expect(skill.examples).toBeDefined();
|
|
80
80
|
expect(skill.examples!.length).toBeGreaterThan(0);
|
|
81
81
|
|
|
82
|
-
// A2A spec: skills should NOT have pricing,
|
|
82
|
+
// A2A spec: skills should NOT have pricing, outputSchema, url
|
|
83
83
|
expect((skill as any).pricing).toBeUndefined();
|
|
84
|
-
expect((skill as any).inputSchema).toBeUndefined();
|
|
85
84
|
expect((skill as any).outputSchema).toBeUndefined();
|
|
86
85
|
expect((skill as any).url).toBeUndefined();
|
|
87
86
|
});
|
|
@@ -100,9 +99,13 @@ describe("buildAgentCard", () => {
|
|
|
100
99
|
expect(skill.examples).toBeDefined();
|
|
101
100
|
expect(skill.examples!.length).toBeGreaterThan(0);
|
|
102
101
|
|
|
103
|
-
//
|
|
102
|
+
// inputSchema is present for machine-readable validation
|
|
103
|
+
expect((skill as any).inputSchema).toBeDefined();
|
|
104
|
+
expect((skill as any).inputSchema.required).toContain("planId");
|
|
105
|
+
expect((skill as any).inputSchema.required).toContain("requestId");
|
|
106
|
+
|
|
107
|
+
// A2A spec: skills should NOT have pricing, outputSchema, url
|
|
104
108
|
expect((skill as any).pricing).toBeUndefined();
|
|
105
|
-
expect((skill as any).inputSchema).toBeUndefined();
|
|
106
109
|
expect((skill as any).outputSchema).toBeUndefined();
|
|
107
110
|
expect((skill as any).url).toBeUndefined();
|
|
108
111
|
});
|
|
@@ -113,7 +116,7 @@ describe("buildAgentCard", () => {
|
|
|
113
116
|
const discoverSkill = card.skills[0]!;
|
|
114
117
|
expect(discoverSkill.examples).toBeDefined();
|
|
115
118
|
expect(discoverSkill.examples!.length).toBeGreaterThan(0);
|
|
116
|
-
expect(discoverSkill.examples!.some((ex) => ex.includes("/
|
|
119
|
+
expect(discoverSkill.examples!.some((ex) => ex.includes("/discovery"))).toBe(true);
|
|
117
120
|
|
|
118
121
|
const requestSkill = card.skills[1]!;
|
|
119
122
|
expect(requestSkill.examples).toBeDefined();
|
|
@@ -150,7 +153,7 @@ describe("buildAgentCard", () => {
|
|
|
150
153
|
|
|
151
154
|
// Still just two skills regardless of tier count
|
|
152
155
|
expect(card.skills).toHaveLength(2);
|
|
153
|
-
expect(card.skills[0]!.id).toBe("discover-
|
|
156
|
+
expect(card.skills[0]!.id).toBe("discover-plans");
|
|
154
157
|
expect(card.skills[1]!.id).toBe("request-access");
|
|
155
158
|
});
|
|
156
159
|
|
package/src/core/agent-card.ts
CHANGED
|
@@ -8,30 +8,30 @@ export function buildAgentCard(config: SellerConfig): AgentCard {
|
|
|
8
8
|
|
|
9
9
|
const baseUrl = config.agentUrl.replace(/\/$/, "");
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
const planIds = config.plans.map((p) => p.planId);
|
|
12
|
+
|
|
13
|
+
// Two A2A spec-compliant skills
|
|
12
14
|
// Skill 1: Discovery (free) — browse the product catalog
|
|
13
15
|
// Skill 2: Purchase (x402-gated) — buy an access token
|
|
14
16
|
const skills: AgentSkill[] = [
|
|
15
17
|
{
|
|
16
|
-
id: "discover-
|
|
17
|
-
name: "Discover
|
|
18
|
+
id: "discover-plans",
|
|
19
|
+
name: "Discover Plans",
|
|
18
20
|
description: [
|
|
19
|
-
`Browse available
|
|
21
|
+
`Browse available plans and pricing for ${config.agentName}.`,
|
|
20
22
|
`Returns the product catalog with plan IDs, prices (USDC on ${networkName}), wallet address, and chain ID.`,
|
|
21
|
-
`
|
|
23
|
+
`GET to ${baseUrl}/discovery to discover plans.`,
|
|
22
24
|
].join(" "),
|
|
23
25
|
tags: ["discovery", "catalog", "x402"],
|
|
24
|
-
examples: [
|
|
25
|
-
|
|
26
|
-
`Or call without planId to get 402 response with product catalog`,
|
|
27
|
-
],
|
|
26
|
+
examples: [`GET ${baseUrl}/discovery`],
|
|
27
|
+
endpoint: { url: `${baseUrl}/discovery`, method: "GET" },
|
|
28
28
|
},
|
|
29
29
|
{
|
|
30
30
|
id: "request-access",
|
|
31
31
|
name: "Request Access",
|
|
32
32
|
description: [
|
|
33
33
|
`Purchase access to a ${config.agentName} product plan via x402 payment on ${networkName}.`,
|
|
34
|
-
`First call discover-
|
|
34
|
+
`First call discover-plans to get available plans.`,
|
|
35
35
|
`Then POST to ${baseUrl}/x402/access with planId and requestId to initiate purchase.`,
|
|
36
36
|
`Server responds with x402 payment challenge.`,
|
|
37
37
|
`Complete payment on-chain and include PAYMENT-SIGNATURE header to receive access token.`,
|
|
@@ -43,6 +43,22 @@ export function buildAgentCard(config: SellerConfig): AgentCard {
|
|
|
43
43
|
`Pay USDC on-chain, retry same request with PAYMENT-SIGNATURE header`,
|
|
44
44
|
`Receive 200 with access token`,
|
|
45
45
|
],
|
|
46
|
+
endpoint: { url: `${baseUrl}/x402/access`, method: "POST" },
|
|
47
|
+
inputSchema: {
|
|
48
|
+
type: "object",
|
|
49
|
+
required: ["planId", "requestId"],
|
|
50
|
+
properties: {
|
|
51
|
+
planId: { type: "string", enum: planIds },
|
|
52
|
+
requestId: { type: "string", format: "uuid" },
|
|
53
|
+
},
|
|
54
|
+
},
|
|
55
|
+
workflow: [
|
|
56
|
+
"POST body with planId + requestId to endpoint.url — expect 402",
|
|
57
|
+
"Extract payment requirements from 402 response body",
|
|
58
|
+
`Sign and broadcast USDC transfer on ${networkName}`,
|
|
59
|
+
"Retry same POST with PAYMENT-SIGNATURE header containing the transaction hash",
|
|
60
|
+
"Receive 200 with accessToken",
|
|
61
|
+
],
|
|
46
62
|
},
|
|
47
63
|
];
|
|
48
64
|
|
package/src/core/index.ts
CHANGED
|
@@ -12,7 +12,7 @@ export { ChallengeEngine } from "./challenge-engine.js";
|
|
|
12
12
|
export { validateSellerConfig } from "./config-validation.js";
|
|
13
13
|
export type { RefundConfig, RefundResult } from "./refund.js";
|
|
14
14
|
// Refund Utility
|
|
15
|
-
export { processRefunds } from "./refund.js";
|
|
15
|
+
export { processRefunds, retryFailedRefunds } from "./refund.js";
|
|
16
16
|
export type { PostgresStoreConfig } from "./storage/postgres.js";
|
|
17
17
|
// Storage — Postgres
|
|
18
18
|
export {
|
|
@@ -89,31 +89,11 @@ export function key0Router(opts: Key0Config): Router {
|
|
|
89
89
|
}
|
|
90
90
|
}
|
|
91
91
|
|
|
92
|
-
// ===== CASE 1: No planId →
|
|
92
|
+
// ===== CASE 1: No planId → 400 pointing to GET /discovery =====
|
|
93
93
|
if (!planId) {
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
console.log(
|
|
98
|
-
"[x402-access] Discovery response:",
|
|
99
|
-
JSON.stringify(discoveryResponse, null, 2),
|
|
100
|
-
);
|
|
101
|
-
|
|
102
|
-
// Encode as base64 for PAYMENT-REQUIRED header
|
|
103
|
-
const encoded = Buffer.from(JSON.stringify(discoveryResponse)).toString("base64");
|
|
104
|
-
res.setHeader("payment-required", encoded);
|
|
105
|
-
|
|
106
|
-
// Add www-authenticate header for HTTP spec compliance
|
|
107
|
-
const authHeader = `Payment realm="${opts.config.agentUrl}", accept="exact"`;
|
|
108
|
-
res.setHeader("www-authenticate", authHeader);
|
|
109
|
-
|
|
110
|
-
console.log(`[x402-access] payment-required header set (${encoded.length} bytes)`);
|
|
111
|
-
console.log(`[x402-access] www-authenticate header set`);
|
|
112
|
-
console.log("[x402-access] → Returning HTTP 402 Payment Required (Discovery)");
|
|
113
|
-
|
|
114
|
-
return res.status(402).json({
|
|
115
|
-
...discoveryResponse,
|
|
116
|
-
error: "Payment required",
|
|
94
|
+
return res.status(400).json({
|
|
95
|
+
error:
|
|
96
|
+
"Please select a plan from the discovery API response to purchase access. Endpoint: GET /discovery",
|
|
117
97
|
});
|
|
118
98
|
}
|
|
119
99
|
|
|
@@ -292,6 +272,11 @@ export function key0Router(opts: Key0Config): Router {
|
|
|
292
272
|
jsonRpcHandler({ requestHandler, userBuilder: UserBuilder.noAuthentication }),
|
|
293
273
|
);
|
|
294
274
|
|
|
275
|
+
router.get("/discovery", (_req: Request, res: Response) => {
|
|
276
|
+
const discoveryResponse = buildDiscoveryResponse(opts.config, networkConfig);
|
|
277
|
+
return res.status(200).json({ discoveryResponse });
|
|
278
|
+
});
|
|
279
|
+
|
|
295
280
|
// MCP routes (when mcp: true)
|
|
296
281
|
if (opts.config.mcp) {
|
|
297
282
|
mountMcpRoutes(router, engine, opts.config);
|
|
@@ -63,16 +63,12 @@ export async function key0Plugin(fastify: FastifyInstance, opts: Key0Config): Pr
|
|
|
63
63
|
}
|
|
64
64
|
}
|
|
65
65
|
|
|
66
|
-
// CASE 1: No planId →
|
|
66
|
+
// CASE 1: No planId → 400 pointing to GET /discovery
|
|
67
67
|
if (!planId) {
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
reply.header("payment-required", encoded);
|
|
73
|
-
reply.header("www-authenticate", `Payment realm="${opts.config.agentUrl}", accept="exact"`);
|
|
74
|
-
|
|
75
|
-
return reply.code(402).send({ ...discoveryResponse, error: "Payment required" });
|
|
68
|
+
return reply.code(400).send({
|
|
69
|
+
error:
|
|
70
|
+
"Please select a plan from the discovery API response to purchase access. Endpoint: GET /discovery",
|
|
71
|
+
});
|
|
76
72
|
}
|
|
77
73
|
|
|
78
74
|
// Auto-generate requestId
|
|
@@ -176,6 +172,11 @@ export async function key0Plugin(fastify: FastifyInstance, opts: Key0Config): Pr
|
|
|
176
172
|
console.log(`[x402-access/fastify] Request completed in ${Date.now() - startTime}ms`);
|
|
177
173
|
}
|
|
178
174
|
});
|
|
175
|
+
|
|
176
|
+
fastify.get("/discovery", async (_request: FastifyRequest, reply: FastifyReply) => {
|
|
177
|
+
const discoveryResponse = buildDiscoveryResponse(opts.config, networkConfig);
|
|
178
|
+
return reply.send({ discoveryResponse });
|
|
179
|
+
});
|
|
179
180
|
}
|
|
180
181
|
|
|
181
182
|
/**
|
package/src/integrations/hono.ts
CHANGED
|
@@ -62,16 +62,15 @@ export function key0App(opts: Key0Config): Hono {
|
|
|
62
62
|
}
|
|
63
63
|
}
|
|
64
64
|
|
|
65
|
-
// CASE 1: No planId →
|
|
65
|
+
// CASE 1: No planId → 400 pointing to GET /discovery
|
|
66
66
|
if (!planId) {
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
return c.json({ ...discoveryResponse, error: "Payment required" }, 402);
|
|
67
|
+
return c.json(
|
|
68
|
+
{
|
|
69
|
+
error:
|
|
70
|
+
"Please select a plan from the discovery API response to purchase access. Endpoint: GET /discovery",
|
|
71
|
+
},
|
|
72
|
+
400,
|
|
73
|
+
);
|
|
75
74
|
}
|
|
76
75
|
|
|
77
76
|
// Auto-generate requestId
|
|
@@ -177,6 +176,11 @@ export function key0App(opts: Key0Config): Hono {
|
|
|
177
176
|
}
|
|
178
177
|
});
|
|
179
178
|
|
|
179
|
+
app.get("/discovery", (c) => {
|
|
180
|
+
const discoveryResponse = buildDiscoveryResponse(opts.config, networkConfig);
|
|
181
|
+
return c.json({ discoveryResponse });
|
|
182
|
+
});
|
|
183
|
+
|
|
180
184
|
return app;
|
|
181
185
|
}
|
|
182
186
|
|
package/src/types/agent-card.ts
CHANGED
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
export type PaymentProtocol = "x402" | "stripe" | "lightning";
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
/**
|
|
4
|
+
* A2A AgentSkill with Key0 extensions.
|
|
5
|
+
*
|
|
6
|
+
* Standard A2A fields: id, name, description, tags, examples, inputModes, outputModes, security.
|
|
7
|
+
* Key0 extensions: endpoint, inputSchema, workflow — these provide machine-readable
|
|
8
|
+
* metadata for automated agent clients.
|
|
9
|
+
*/
|
|
5
10
|
export type AgentSkill = {
|
|
6
11
|
readonly id: string;
|
|
7
12
|
readonly name: string;
|
|
@@ -11,6 +16,12 @@ export type AgentSkill = {
|
|
|
11
16
|
readonly inputModes?: readonly string[];
|
|
12
17
|
readonly outputModes?: readonly string[];
|
|
13
18
|
readonly security?: Record<string, string[]>;
|
|
19
|
+
/** @key0 Direct endpoint URL and HTTP method for this skill. */
|
|
20
|
+
readonly endpoint?: { readonly url: string; readonly method: "GET" | "POST" };
|
|
21
|
+
/** @key0 JSON Schema for the skill's input parameters. */
|
|
22
|
+
readonly inputSchema?: Record<string, unknown>;
|
|
23
|
+
/** @key0 Step-by-step workflow instructions for automated clients. */
|
|
24
|
+
readonly workflow?: readonly string[];
|
|
14
25
|
};
|
|
15
26
|
|
|
16
27
|
export type AgentInterface = {
|
package/src/types/config.ts
CHANGED
|
@@ -83,7 +83,7 @@ export type SellerConfig = {
|
|
|
83
83
|
readonly mcp?: boolean | undefined;
|
|
84
84
|
|
|
85
85
|
// Customization
|
|
86
|
-
readonly basePath?: string; // defaults to "/
|
|
86
|
+
readonly basePath?: string; // defaults to "/agent"
|
|
87
87
|
readonly resourceEndpointTemplate?: string; // e.g. "https://api.example.com/photos/{resourceId}"
|
|
88
88
|
|
|
89
89
|
// Settlement strategy (optional — defaults to facilitatorUrl mode)
|