@xona-labs/xpay 0.1.3 → 0.1.4
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/CHANGELOG.md +41 -1
- package/dist/signers/raw-solana.d.ts.map +1 -1
- package/dist/signers/raw-solana.js +10 -0
- package/dist/signers/raw-solana.js.map +1 -1
- package/dist/types.d.ts +12 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/use/index.d.ts.map +1 -1
- package/dist/use/index.js +33 -8
- package/dist/use/index.js.map +1 -1
- package/dist/x402/svm-payment.d.ts +34 -0
- package/dist/x402/svm-payment.d.ts.map +1 -0
- package/dist/x402/svm-payment.js +60 -0
- package/dist/x402/svm-payment.js.map +1 -0
- package/package.json +4 -1
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,45 @@ versioning follows [Semantic Versioning](https://semver.org/).
|
|
|
6
6
|
|
|
7
7
|
## [Unreleased]
|
|
8
8
|
|
|
9
|
+
## [0.1.4] – 2026-05-26
|
|
10
|
+
|
|
11
|
+
### Fixed
|
|
12
|
+
- **`useByUrl()` against canonical x402 SVM v2 servers** — the SDK now signs
|
|
13
|
+
but does **not** broadcast the USDC transfer, and sends the canonical
|
|
14
|
+
`PaymentPayloadV2` envelope (`{ x402Version, accepted, payload: { transaction } }`)
|
|
15
|
+
base64-encoded in the `X-Payment` header. The facilitator verifies + settles.
|
|
16
|
+
Verified live against `api.xona-agent.com` (200 OK, $0.01 USDC settled, real
|
|
17
|
+
upstream response returned).
|
|
18
|
+
- 0.1.3 was sending a v1-style `txSig`-only header after a client-side
|
|
19
|
+
broadcast, which spec-compliant facilitators (incl. `api.xona-agent.com`)
|
|
20
|
+
reject with `"Unsupported x402 payload"`.
|
|
21
|
+
|
|
22
|
+
### Added
|
|
23
|
+
- New `Signer.getKitSigner?()` (optional, additive) — returns a `@solana/kit`
|
|
24
|
+
`TransactionSigner`. `rawSolanaSigner` implements it out of the box.
|
|
25
|
+
Custom signers (KMS/MPC) implementing it gain canonical x402 v2 support
|
|
26
|
+
for SVM endpoints; existing custom signers without it keep working via
|
|
27
|
+
the legacy broadcast-then-`txSig` path for non-SVM networks.
|
|
28
|
+
- New module `src/x402/svm-payment.ts` — wraps `@x402/svm`'s
|
|
29
|
+
`ExactSvmScheme.createPaymentPayload` and assembles the canonical
|
|
30
|
+
`PaymentPayloadV2` envelope. Used by `useByUrl()` for any network matching
|
|
31
|
+
`solana` / `solana:*` / `solana-*`.
|
|
32
|
+
|
|
33
|
+
### Dependencies
|
|
34
|
+
- `@x402/core`, `@x402/svm` — canonical x402 encoding (no spec drift).
|
|
35
|
+
- `@solana/kit` — pulled in transitively by `@x402/svm`; used to construct
|
|
36
|
+
`TransactionSigner` instances from existing `@solana/web3.js` Keypairs via
|
|
37
|
+
`createKeyPairSignerFromBytes`.
|
|
38
|
+
|
|
39
|
+
### Notes
|
|
40
|
+
- `txSig` in the returned `UseResult` is **undefined** for SVM v2 calls (the
|
|
41
|
+
facilitator broadcasts; we never see the resulting signature client-side).
|
|
42
|
+
Downstream reconciliation can still use the upstream response + your own
|
|
43
|
+
correlationId in your DB.
|
|
44
|
+
- Direct `transfer()` is unchanged — still uses `signer.pay()` (broadcasts
|
|
45
|
+
client-side, returns the real `txSig`), since there's no facilitator in
|
|
46
|
+
the direct-transfer path.
|
|
47
|
+
|
|
9
48
|
## [0.1.3] – 2026-05-26
|
|
10
49
|
|
|
11
50
|
### Fixed
|
|
@@ -74,7 +113,8 @@ Initial public release.
|
|
|
74
113
|
Desktop, Cursor, Codex.
|
|
75
114
|
- LLM tool exporters: `forClaude(xpay)`, `forOpenAI(xpay)`, `forGemini(xpay)`.
|
|
76
115
|
|
|
77
|
-
[Unreleased]: https://github.com/xona-labs/xpay/compare/v0.1.
|
|
116
|
+
[Unreleased]: https://github.com/xona-labs/xpay/compare/v0.1.4...HEAD
|
|
117
|
+
[0.1.4]: https://github.com/xona-labs/xpay/compare/v0.1.3...v0.1.4
|
|
78
118
|
[0.1.3]: https://github.com/xona-labs/xpay/compare/v0.1.2...v0.1.3
|
|
79
119
|
[0.1.2]: https://github.com/xona-labs/xpay/compare/v0.1.0...v0.1.2
|
|
80
120
|
[0.1.0]: https://github.com/xona-labs/xpay/releases/tag/v0.1.0
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"raw-solana.d.ts","sourceRoot":"","sources":["../../src/signers/raw-solana.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAgBH,OAAO,KAAK,EAAsB,MAAM,EAAE,MAAM,aAAa,CAAC;AAO9D,MAAM,WAAW,sBAAsB;IACrC,4DAA4D;IAC5D,SAAS,EAAE,MAAM,GAAG,UAAU,CAAC;IAC/B,4EAA4E;IAC5E,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,sBAAsB,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"raw-solana.d.ts","sourceRoot":"","sources":["../../src/signers/raw-solana.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAgBH,OAAO,KAAK,EAAsB,MAAM,EAAE,MAAM,aAAa,CAAC;AAO9D,MAAM,WAAW,sBAAsB;IACrC,4DAA4D;IAC5D,SAAS,EAAE,MAAM,GAAG,UAAU,CAAC;IAC/B,4EAA4E;IAC5E,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,sBAAsB,GAAG,MAAM,CAwEpE"}
|
|
@@ -23,6 +23,16 @@ export function rawSolanaSigner(opts) {
|
|
|
23
23
|
const sig = nacl.sign.detached(message, keypair.secretKey);
|
|
24
24
|
return sig;
|
|
25
25
|
},
|
|
26
|
+
/**
|
|
27
|
+
* Provide a `@solana/kit` TransactionSigner derived from our Keypair so
|
|
28
|
+
* `useByUrl()` can use `@x402/svm` for canonical x402 SVM v2 payloads.
|
|
29
|
+
*/
|
|
30
|
+
async getKitSigner() {
|
|
31
|
+
// Dynamic import — keeps @solana/signers off the hot path for users
|
|
32
|
+
// who never call useByUrl against an SVM endpoint.
|
|
33
|
+
const { createKeyPairSignerFromBytes } = await import("@solana/signers");
|
|
34
|
+
return createKeyPairSignerFromBytes(keypair.secretKey);
|
|
35
|
+
},
|
|
26
36
|
async balance() {
|
|
27
37
|
try {
|
|
28
38
|
const mint = new PublicKey(USDC_MINT_MAINNET);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"raw-solana.js","sourceRoot":"","sources":["../../src/signers/raw-solana.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"raw-solana.js","sourceRoot":"","sources":["../../src/signers/raw-solana.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -195,5 +195,17 @@ export interface Signer {
|
|
|
195
195
|
* the signer doesn't implement it.
|
|
196
196
|
*/
|
|
197
197
|
balance?(): Promise<number>;
|
|
198
|
+
/**
|
|
199
|
+
* Optional: return a `@solana/kit` `TransactionSigner` for canonical x402
|
|
200
|
+
* SVM v2 payment payloads. When present, `useByUrl()` will sign the
|
|
201
|
+
* payment transaction without broadcasting and let the facilitator settle;
|
|
202
|
+
* when absent, it falls back to the legacy `pay()` (sign + broadcast,
|
|
203
|
+
* txSig in `X-Payment`).
|
|
204
|
+
*
|
|
205
|
+
* For built-in `rawSolanaSigner` this is implemented out of the box. Custom
|
|
206
|
+
* signers (KMS / MPC) that want v2 support implement it against their
|
|
207
|
+
* signing service.
|
|
208
|
+
*/
|
|
209
|
+
getKitSigner?(): Promise<unknown>;
|
|
198
210
|
}
|
|
199
211
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,8FAA8F;AAC9F,MAAM,MAAM,OAAO,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAE/F;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB;IACnC,qDAAqD;;IAErD,yBAAyB;;IAEzB,sEAAsE;;IAEtE,wCAAwC;;IAExC,mFAAmF;;IAEnF,iDAAiD;;;;IAIjD,wEAAwE;;;;;;;;;;;;;;;;;;;;;;EAExE,CAAC;AACH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAE1E;;;;;;GAMG;AACH,eAAO,MAAM,cAAc;IACzB,sDAAsD;;IAEtD,6DAA6D;;IAE7D,6BAA6B;;IAE7B,6CAA6C;;IAE7C,oCAAoC;;QAnCpC,qDAAqD;;QAErD,yBAAyB;;QAEzB,sEAAsE;;QAEtE,wCAAwC;;QAExC,mFAAmF;;QAEnF,iDAAiD;;;;QAIjD,wEAAwE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2BxE,CAAC;AACH,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAEtD,2CAA2C;AAC3C,MAAM,WAAW,SAAS;IACxB,6DAA6D;IAC7D,IAAI,EAAE,OAAO,CAAC;IACd,kDAAkD;IAClD,MAAM,EAAE,MAAM,CAAC;IACf,sCAAsC;IACtC,OAAO,EAAE,OAAO,CAAC;IACjB,0BAA0B;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,oDAAoD;IACpD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,+CAA+C;AAC/C,MAAM,WAAW,eAAe;IAC9B,8EAA8E;IAC9E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iEAAiE;IACjE,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC;IACrB,6BAA6B;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,gDAAgD;AAChD,MAAM,WAAW,MAAM;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,WAAW,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IACtD;;;OAGG;IACH,GAAG,CAAC,GAAG,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9C;;;OAGG;IACH,OAAO,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,8FAA8F;AAC9F,MAAM,MAAM,OAAO,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAE/F;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB;IACnC,qDAAqD;;IAErD,yBAAyB;;IAEzB,sEAAsE;;IAEtE,wCAAwC;;IAExC,mFAAmF;;IAEnF,iDAAiD;;;;IAIjD,wEAAwE;;;;;;;;;;;;;;;;;;;;;;EAExE,CAAC;AACH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAE1E;;;;;;GAMG;AACH,eAAO,MAAM,cAAc;IACzB,sDAAsD;;IAEtD,6DAA6D;;IAE7D,6BAA6B;;IAE7B,6CAA6C;;IAE7C,oCAAoC;;QAnCpC,qDAAqD;;QAErD,yBAAyB;;QAEzB,sEAAsE;;QAEtE,wCAAwC;;QAExC,mFAAmF;;QAEnF,iDAAiD;;;;QAIjD,wEAAwE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2BxE,CAAC;AACH,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAEtD,2CAA2C;AAC3C,MAAM,WAAW,SAAS;IACxB,6DAA6D;IAC7D,IAAI,EAAE,OAAO,CAAC;IACd,kDAAkD;IAClD,MAAM,EAAE,MAAM,CAAC;IACf,sCAAsC;IACtC,OAAO,EAAE,OAAO,CAAC;IACjB,0BAA0B;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,oDAAoD;IACpD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,+CAA+C;AAC/C,MAAM,WAAW,eAAe;IAC9B,8EAA8E;IAC9E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iEAAiE;IACjE,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC;IACrB,6BAA6B;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,gDAAgD;AAChD,MAAM,WAAW,MAAM;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,WAAW,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IACtD;;;OAGG;IACH,GAAG,CAAC,GAAG,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9C;;;OAGG;IACH,OAAO,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5B;;;;;;;;;;OAUG;IACH,YAAY,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;CACnC"}
|
package/dist/use/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/use/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAEL,KAAK,QAAQ,EACb,KAAK,SAAS,EACf,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/use/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAEL,KAAK,QAAQ,EACb,KAAK,SAAS,EACf,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAIvD,MAAM,WAAW,OAAO;IACtB,QAAQ,EAAE,QAAQ,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,SAAS,CAAC;IACrB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED,wBAAsB,GAAG,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC,CAO3D;AAED;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,SAAS,CAAC;IACrB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED,wBAAsB,QAAQ,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC,CAcrE"}
|
package/dist/use/index.js
CHANGED
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
* Both paths converge on the same {@link UseResult}.
|
|
13
13
|
*/
|
|
14
14
|
import { extractRequirements } from "../x402/extract.js";
|
|
15
|
+
import { buildSvmPaymentHeader, isSvmNetwork } from "../x402/svm-payment.js";
|
|
15
16
|
export async function use(args) {
|
|
16
17
|
// If we have accepts up front, take the fast path.
|
|
17
18
|
if (args.resource.accepts.length > 0) {
|
|
@@ -42,11 +43,9 @@ async function useWithRequirements(args, reqs) {
|
|
|
42
43
|
}
|
|
43
44
|
// Guardrail runs *before* signing — this is the security boundary.
|
|
44
45
|
await args.guardrail.check({ resource: args.resource, requirement: req });
|
|
45
|
-
const
|
|
46
|
-
const
|
|
47
|
-
|
|
48
|
-
const res = await callResource(args, paymentHeader(req, txSig, args.resource.x402Version ?? 1));
|
|
49
|
-
return finalize(res, network, req.amount ?? "0", txSig);
|
|
46
|
+
const settled = await settle(args, req, args.resource.x402Version ?? 1);
|
|
47
|
+
const res = await callResource(args, settled.header);
|
|
48
|
+
return finalize(res, settled.network, req.amount ?? "0", settled.txSig);
|
|
50
49
|
}
|
|
51
50
|
async function useWithLiveChallenge(args) {
|
|
52
51
|
// Step 1: probe without payment.
|
|
@@ -66,12 +65,38 @@ async function useWithLiveChallenge(args) {
|
|
|
66
65
|
throw new Error(`xpay.use: ${args.resource.resource} accepts ${reqs.map((r) => r.network).join(", ")} but wallet has no matching signer`);
|
|
67
66
|
}
|
|
68
67
|
await args.guardrail.check({ resource: args.resource, requirement: req });
|
|
68
|
+
const settled = await settle(args, req, 2);
|
|
69
|
+
// Step 3: retry with X-Payment.
|
|
70
|
+
const res = await callResource(args, settled.header);
|
|
71
|
+
return finalize(res, settled.network, req.amount ?? "0", settled.txSig);
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Sign/settle a payment per the requirement and return the X-Payment header
|
|
75
|
+
* value plus accounting fields. Picks the right encoding by network:
|
|
76
|
+
*
|
|
77
|
+
* SVM (solana / solana:*) + signer has getKitSigner →
|
|
78
|
+
* canonical x402 v2 — sign-but-don't-broadcast, header carries the
|
|
79
|
+
* signed tx, facilitator settles. Returns header only (no txSig until
|
|
80
|
+
* the upstream call comes back).
|
|
81
|
+
*
|
|
82
|
+
* Anything else (EVM facilitators, legacy v1 SVM) →
|
|
83
|
+
* legacy path: signer.pay() broadcasts, header carries the txSig.
|
|
84
|
+
*/
|
|
85
|
+
async function settle(args, req, x402Version) {
|
|
69
86
|
const network = normalizeNetwork(req.network);
|
|
70
87
|
const signer = args.wallet.signer(network);
|
|
88
|
+
if (isSvmNetwork(req.network) && typeof signer.getKitSigner === "function") {
|
|
89
|
+
const kitSigner = await signer.getKitSigner();
|
|
90
|
+
const header = await buildSvmPaymentHeader({
|
|
91
|
+
kitSigner,
|
|
92
|
+
requirement: req,
|
|
93
|
+
x402Version,
|
|
94
|
+
});
|
|
95
|
+
return { header, network };
|
|
96
|
+
}
|
|
97
|
+
// Legacy path — sign + broadcast on our side, send txSig in the header.
|
|
71
98
|
const txSig = await signer.pay(req);
|
|
72
|
-
|
|
73
|
-
const res = await callResource(args, paymentHeader(req, txSig, 2));
|
|
74
|
-
return finalize(res, network, req.amount ?? "0", txSig);
|
|
99
|
+
return { header: paymentHeader(req, txSig, x402Version), network, txSig };
|
|
75
100
|
}
|
|
76
101
|
async function callResource(args, paymentHeader) {
|
|
77
102
|
const headers = {
|
package/dist/use/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/use/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AASH,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/use/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Build the canonical x402 SVM v2 `X-Payment` header value using `@x402/svm`.
|
|
3
|
+
*
|
|
4
|
+
* Spec flow:
|
|
5
|
+
* client signs (does NOT broadcast) → header carries the signed tx →
|
|
6
|
+
* facilitator verifies + broadcasts on the server side.
|
|
7
|
+
*
|
|
8
|
+
* This is the path xPay 0.1.4+ takes for Solana endpoints reporting
|
|
9
|
+
* `x402Version >= 2` (CAIP networks like `solana:5eykt4…`). Legacy 0.1.x
|
|
10
|
+
* sent a sign-and-broadcast `txSig` header which is *not* what the
|
|
11
|
+
* canonical x402 servers expect — your endpoint would 4xx on the retry.
|
|
12
|
+
*
|
|
13
|
+
* Inputs (the `PaymentRequirement` xPay parsed from the 402 challenge) are
|
|
14
|
+
* normalized into `@x402/core/types`'s `PaymentRequirements` shape.
|
|
15
|
+
*/
|
|
16
|
+
import type { PaymentRequirement } from "../types.js";
|
|
17
|
+
export interface BuildSvmPaymentArgs {
|
|
18
|
+
/** A `@solana/kit` TransactionSigner — from `signer.getKitSigner()`. */
|
|
19
|
+
kitSigner: unknown;
|
|
20
|
+
/** What the server's 402 told us we owe. */
|
|
21
|
+
requirement: PaymentRequirement;
|
|
22
|
+
/** Optional override RPC URL passed through to `@x402/svm`. */
|
|
23
|
+
rpcUrl?: string;
|
|
24
|
+
/** x402 protocol version observed in the challenge. Defaults to 2. */
|
|
25
|
+
x402Version?: number;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Returns the value of the `X-Payment` header (base64 of canonical JSON
|
|
29
|
+
* envelope), ready to attach to the retry request.
|
|
30
|
+
*/
|
|
31
|
+
export declare function buildSvmPaymentHeader(args: BuildSvmPaymentArgs): Promise<string>;
|
|
32
|
+
/** True when this network requires the canonical x402 SVM v2 payload. */
|
|
33
|
+
export declare function isSvmNetwork(network: string): boolean;
|
|
34
|
+
//# sourceMappingURL=svm-payment.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"svm-payment.d.ts","sourceRoot":"","sources":["../../src/x402/svm-payment.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEtD,MAAM,WAAW,mBAAmB;IAClC,wEAAwE;IACxE,SAAS,EAAE,OAAO,CAAC;IACnB,4CAA4C;IAC5C,WAAW,EAAE,kBAAkB,CAAC;IAChC,+DAA+D;IAC/D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,sEAAsE;IACtE,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,MAAM,CAAC,CAuCtF;AAED,yEAAyE;AACzE,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAErD"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Build the canonical x402 SVM v2 `X-Payment` header value using `@x402/svm`.
|
|
3
|
+
*
|
|
4
|
+
* Spec flow:
|
|
5
|
+
* client signs (does NOT broadcast) → header carries the signed tx →
|
|
6
|
+
* facilitator verifies + broadcasts on the server side.
|
|
7
|
+
*
|
|
8
|
+
* This is the path xPay 0.1.4+ takes for Solana endpoints reporting
|
|
9
|
+
* `x402Version >= 2` (CAIP networks like `solana:5eykt4…`). Legacy 0.1.x
|
|
10
|
+
* sent a sign-and-broadcast `txSig` header which is *not* what the
|
|
11
|
+
* canonical x402 servers expect — your endpoint would 4xx on the retry.
|
|
12
|
+
*
|
|
13
|
+
* Inputs (the `PaymentRequirement` xPay parsed from the 402 challenge) are
|
|
14
|
+
* normalized into `@x402/core/types`'s `PaymentRequirements` shape.
|
|
15
|
+
*/
|
|
16
|
+
import { ExactSvmScheme } from "@x402/svm";
|
|
17
|
+
/**
|
|
18
|
+
* Returns the value of the `X-Payment` header (base64 of canonical JSON
|
|
19
|
+
* envelope), ready to attach to the retry request.
|
|
20
|
+
*/
|
|
21
|
+
export async function buildSvmPaymentHeader(args) {
|
|
22
|
+
const version = args.x402Version ?? 2;
|
|
23
|
+
// Canonical v2 PaymentRequirements (per @x402/core/schemas):
|
|
24
|
+
// { payTo, amount, asset, network, scheme, maxTimeoutSeconds, extra? }
|
|
25
|
+
// Note resource/description/mimeType are on the outer PaymentRequired
|
|
26
|
+
// envelope in v2, NOT on the requirements item itself.
|
|
27
|
+
const requirements = {
|
|
28
|
+
payTo: args.requirement.payTo,
|
|
29
|
+
amount: args.requirement.amount ?? "0",
|
|
30
|
+
asset: args.requirement.asset,
|
|
31
|
+
network: args.requirement.network,
|
|
32
|
+
scheme: args.requirement.scheme || "exact",
|
|
33
|
+
maxTimeoutSeconds: args.requirement.maxTimeoutSeconds ?? 300,
|
|
34
|
+
extra: args.requirement.extra ?? undefined,
|
|
35
|
+
};
|
|
36
|
+
// ExactSvmScheme's signer type is the @solana/kit TransactionSigner. Our
|
|
37
|
+
// public Signer surface keeps it as `unknown` so non-SVM signers don't
|
|
38
|
+
// have to pull @solana/kit's types.
|
|
39
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
40
|
+
const scheme = new ExactSvmScheme(args.kitSigner, args.rpcUrl ? { rpcUrl: args.rpcUrl } : undefined);
|
|
41
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
42
|
+
const partial = await scheme.createPaymentPayload(version, requirements);
|
|
43
|
+
// partial = { x402Version, payload: { transaction: <base64 signed tx> } }
|
|
44
|
+
// Assemble the FULL canonical PaymentPayloadV2 envelope:
|
|
45
|
+
// { x402Version, accepted: <the requirement we're paying>, payload }
|
|
46
|
+
// The `accepted` field is REQUIRED in v2 — it tells the facilitator which
|
|
47
|
+
// of its advertised `accepts[]` items we picked. (Loose top-level
|
|
48
|
+
// scheme/network is v1; v2 nests them inside `accepted`.)
|
|
49
|
+
const envelope = {
|
|
50
|
+
x402Version: partial.x402Version ?? version,
|
|
51
|
+
accepted: requirements,
|
|
52
|
+
payload: partial.payload,
|
|
53
|
+
};
|
|
54
|
+
return Buffer.from(JSON.stringify(envelope), "utf8").toString("base64");
|
|
55
|
+
}
|
|
56
|
+
/** True when this network requires the canonical x402 SVM v2 payload. */
|
|
57
|
+
export function isSvmNetwork(network) {
|
|
58
|
+
return network === "solana" || network.startsWith("solana:") || network.startsWith("solana-");
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=svm-payment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"svm-payment.js","sourceRoot":"","sources":["../../src/x402/svm-payment.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAc3C;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,IAAyB;IACnE,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,IAAI,CAAC,CAAC;IAEtC,6DAA6D;IAC7D,yEAAyE;IACzE,sEAAsE;IACtE,uDAAuD;IACvD,MAAM,YAAY,GAAG;QACnB,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK;QAC7B,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM,IAAI,GAAG;QACtC,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK;QAC7B,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,OAAO;QACjC,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM,IAAI,OAAO;QAC1C,iBAAiB,EAAE,IAAI,CAAC,WAAW,CAAC,iBAAiB,IAAI,GAAG;QAC5D,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK,IAAI,SAAS;KAC3C,CAAC;IAEF,yEAAyE;IACzE,uEAAuE;IACvE,oCAAoC;IACpC,8DAA8D;IAC9D,MAAM,MAAM,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,SAAgB,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAE5G,8DAA8D;IAC9D,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,OAAO,EAAE,YAAmB,CAAC,CAAC;IAChF,0EAA0E;IAE1E,yDAAyD;IACzD,uEAAuE;IACvE,0EAA0E;IAC1E,kEAAkE;IAClE,0DAA0D;IAC1D,MAAM,QAAQ,GAAG;QACf,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,OAAO;QAC3C,QAAQ,EAAE,YAAY;QACtB,OAAO,EAAE,OAAO,CAAC,OAAO;KACzB,CAAC;IAEF,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAC1E,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,YAAY,CAAC,OAAe;IAC1C,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;AAChG,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xona-labs/xpay",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.4",
|
|
4
4
|
"description": "Discovery and usage layer for agentic commerce — multi-network wallet, x402 payments, 20k+ services via PayAI and other catalogs",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -42,8 +42,11 @@
|
|
|
42
42
|
"license": "MIT",
|
|
43
43
|
"dependencies": {
|
|
44
44
|
"@modelcontextprotocol/sdk": "^1.0.0",
|
|
45
|
+
"@solana/kit": "^5.5.1",
|
|
45
46
|
"@solana/spl-token": "^0.4.14",
|
|
46
47
|
"@solana/web3.js": "^1.95.0",
|
|
48
|
+
"@x402/core": "^2.13.0",
|
|
49
|
+
"@x402/svm": "^2.13.0",
|
|
47
50
|
"bip39": "^3.1.0",
|
|
48
51
|
"chalk": "^5.4.1",
|
|
49
52
|
"commander": "^13.1.0",
|