agentwallet-sdk 6.0.5 → 6.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 +201 -1
- package/dist/bridge/solana.d.ts.map +1 -1
- package/dist/bridge/types.d.ts.map +1 -1
- package/dist/identity/index.d.ts +2 -0
- package/dist/identity/index.d.ts.map +1 -1
- package/dist/identity/index.js +2 -0
- package/dist/identity/index.js.map +1 -1
- package/dist/identity/uaid.d.ts +193 -0
- package/dist/identity/uaid.d.ts.map +1 -0
- package/dist/identity/uaid.js +296 -0
- package/dist/identity/uaid.js.map +1 -0
- package/dist/index.d.ts +4994 -13961
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- package/dist/policy/UptoBillingPolicy.d.ts +88 -0
- package/dist/policy/UptoBillingPolicy.d.ts.map +1 -0
- package/dist/policy/UptoBillingPolicy.js +183 -0
- package/dist/policy/UptoBillingPolicy.js.map +1 -0
- package/dist/policy/UptoBillingPolicy.test.d.ts +2 -0
- package/dist/policy/UptoBillingPolicy.test.d.ts.map +1 -0
- package/dist/policy/UptoBillingPolicy.test.js +102 -0
- package/dist/policy/UptoBillingPolicy.test.js.map +1 -0
- package/dist/router/PaymentRouter.d.ts +79 -0
- package/dist/router/PaymentRouter.d.ts.map +1 -0
- package/dist/router/PaymentRouter.js +144 -0
- package/dist/router/PaymentRouter.js.map +1 -0
- package/dist/router/index.d.ts +3 -0
- package/dist/router/index.d.ts.map +1 -0
- package/dist/router/index.js +2 -0
- package/dist/router/index.js.map +1 -0
- package/dist/swap/SwapModule.d.ts +2 -2
- package/dist/swap/SwapModule.d.ts.map +1 -1
- package/dist/swap/types.d.ts.map +1 -1
- package/dist/tokens/solana.d.ts.map +1 -1
- package/package.json +2 -2
- package/dist/x402/chains/stellar/index.d.ts +0 -149
- package/dist/x402/chains/stellar/index.d.ts.map +0 -1
- package/dist/x402/chains/stellar/index.js +0 -199
- package/dist/x402/chains/stellar/index.js.map +0 -1
|
@@ -1,199 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Stellar x402 Payment Adapter
|
|
3
|
-
*
|
|
4
|
-
* Implements x402 payment protocol on Stellar network.
|
|
5
|
-
* Stellar x402 support went live March 11, 2026.
|
|
6
|
-
*
|
|
7
|
-
* Chain identifiers:
|
|
8
|
-
* - Stellar Mainnet: "stellar:pubnet"
|
|
9
|
-
* - Stellar Testnet: "stellar:testnet"
|
|
10
|
-
*
|
|
11
|
-
* Key differences from EVM chains:
|
|
12
|
-
* - Uses Ed25519 keypairs (not secp256k1)
|
|
13
|
-
* - Transaction format: Stellar XDR (not EVM tx)
|
|
14
|
-
* - Settlement: ~5 seconds (1 ledger close)
|
|
15
|
-
* - Fees: ~0.00001 XLM per operation (effectively free at scale)
|
|
16
|
-
* - USDC: Circle-issued USDC on Stellar
|
|
17
|
-
*/
|
|
18
|
-
// ─── Stellar Chain Constants ─────────────────────────────────────────────────
|
|
19
|
-
export const STELLAR_NETWORK = {
|
|
20
|
-
pubnet: {
|
|
21
|
-
horizonUrl: 'https://horizon.stellar.org',
|
|
22
|
-
networkPassphrase: 'Public Global Stellar Network ; September 2015',
|
|
23
|
-
chainId: 'stellar:pubnet',
|
|
24
|
-
},
|
|
25
|
-
testnet: {
|
|
26
|
-
horizonUrl: 'https://horizon-testnet.stellar.org',
|
|
27
|
-
networkPassphrase: 'Test SDF Network ; September 2015',
|
|
28
|
-
chainId: 'stellar:testnet',
|
|
29
|
-
},
|
|
30
|
-
};
|
|
31
|
-
/**
|
|
32
|
-
* Circle USDC on Stellar (Mainnet)
|
|
33
|
-
* Asset code: USDC
|
|
34
|
-
* Issuer: GA5ZSEJYB37JRC5AVCIA5MOP4RHTM335X2KGX3IHOJAPP5RE34K4KZVN
|
|
35
|
-
*/
|
|
36
|
-
export const STELLAR_USDC = {
|
|
37
|
-
pubnet: {
|
|
38
|
-
code: 'USDC',
|
|
39
|
-
issuer: 'GA5ZSEJYB37JRC5AVCIA5MOP4RHTM335X2KGX3IHOJAPP5RE34K4KZVN',
|
|
40
|
-
},
|
|
41
|
-
testnet: {
|
|
42
|
-
code: 'USDC',
|
|
43
|
-
issuer: 'GBBD47IF6LWK7P7MDEVSCWR7DPUWV3NY3DTQEVFL4NAT4AQH3ZLLFLA5',
|
|
44
|
-
},
|
|
45
|
-
};
|
|
46
|
-
// ─── Stellar x402 Payment Adapter ────────────────────────────────────────────
|
|
47
|
-
/**
|
|
48
|
-
* StellarX402Adapter
|
|
49
|
-
*
|
|
50
|
-
* Handles x402 payment flow for Stellar network.
|
|
51
|
-
*
|
|
52
|
-
* Usage (with stellar-sdk):
|
|
53
|
-
* ```typescript
|
|
54
|
-
* import { StellarX402Adapter } from 'agentwallet-sdk/x402/stellar';
|
|
55
|
-
* import { Keypair, Networks } from '@stellar/stellar-sdk';
|
|
56
|
-
*
|
|
57
|
-
* const adapter = new StellarX402Adapter({ network: 'pubnet' });
|
|
58
|
-
* const result = await adapter.pay({
|
|
59
|
-
* destination: 'GDESTWVX3VMLQCXPHPVLS3FMNMG2X7L5IGGQT7BQMIZXZZ4V7KBQVS',
|
|
60
|
-
* amount: '0.50',
|
|
61
|
-
* sourcePublicKey: keypair.publicKey(),
|
|
62
|
-
* resource: '/api/data-endpoint',
|
|
63
|
-
* }, keypair.secret());
|
|
64
|
-
* ```
|
|
65
|
-
*
|
|
66
|
-
* Note: stellar-sdk must be installed separately:
|
|
67
|
-
* npm install @stellar/stellar-sdk
|
|
68
|
-
*/
|
|
69
|
-
export class StellarX402Adapter {
|
|
70
|
-
constructor(config = {}) {
|
|
71
|
-
this.network = config.network ?? 'pubnet';
|
|
72
|
-
this.horizonUrl = config.horizonUrl ?? STELLAR_NETWORK[this.network].horizonUrl;
|
|
73
|
-
}
|
|
74
|
-
/**
|
|
75
|
-
* Parse an x402 402 response and extract Stellar payment details.
|
|
76
|
-
* The 402 response should include X-Payment-Chains: stellar:pubnet
|
|
77
|
-
* and X-Payment-Amount, X-Payment-Destination headers.
|
|
78
|
-
*/
|
|
79
|
-
parseX402Response(headers) {
|
|
80
|
-
const chains = headers['x-payment-chains'] ?? headers['X-Payment-Chains'] ?? '';
|
|
81
|
-
const chainId = STELLAR_NETWORK[this.network].chainId;
|
|
82
|
-
if (!chains.includes(chainId) && !chains.includes('stellar')) {
|
|
83
|
-
return { supported: false };
|
|
84
|
-
}
|
|
85
|
-
return {
|
|
86
|
-
supported: true,
|
|
87
|
-
destination: headers['x-payment-destination'] ?? headers['X-Payment-Destination'],
|
|
88
|
-
amount: headers['x-payment-amount'] ?? headers['X-Payment-Amount'],
|
|
89
|
-
resource: headers['x-payment-resource'] ?? headers['X-Payment-Resource'],
|
|
90
|
-
};
|
|
91
|
-
}
|
|
92
|
-
/**
|
|
93
|
-
* Build a Stellar USDC payment transaction.
|
|
94
|
-
*
|
|
95
|
-
* Requires @stellar/stellar-sdk to be installed:
|
|
96
|
-
* npm install @stellar/stellar-sdk
|
|
97
|
-
*
|
|
98
|
-
* Returns the XDR-encoded transaction envelope for signing and submission.
|
|
99
|
-
*/
|
|
100
|
-
async buildPaymentTransaction(request) {
|
|
101
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
102
|
-
let StellarSdk;
|
|
103
|
-
try {
|
|
104
|
-
// @ts-expect-error — @stellar/stellar-sdk is an optional peer dependency
|
|
105
|
-
StellarSdk = await import('@stellar/stellar-sdk');
|
|
106
|
-
}
|
|
107
|
-
catch {
|
|
108
|
-
throw new Error('Stellar support requires @stellar/stellar-sdk: npm install @stellar/stellar-sdk');
|
|
109
|
-
}
|
|
110
|
-
const networkConfig = STELLAR_NETWORK[request.network ?? this.network];
|
|
111
|
-
const usdcAsset = STELLAR_USDC[request.network ?? this.network];
|
|
112
|
-
// Load source account sequence number from Horizon
|
|
113
|
-
const account = await this._loadAccount(request.sourcePublicKey, networkConfig.horizonUrl);
|
|
114
|
-
const stellarAccount = new StellarSdk.Account(request.sourcePublicKey, account.sequence);
|
|
115
|
-
const asset = new StellarSdk.Asset(usdcAsset.code, usdcAsset.issuer);
|
|
116
|
-
const memoText = request.resource
|
|
117
|
-
? request.resource.slice(0, 28) // Stellar memo max 28 bytes
|
|
118
|
-
: 'x402-payment';
|
|
119
|
-
const transaction = new StellarSdk.TransactionBuilder(stellarAccount, {
|
|
120
|
-
fee: StellarSdk.BASE_FEE,
|
|
121
|
-
networkPassphrase: networkConfig.networkPassphrase,
|
|
122
|
-
})
|
|
123
|
-
.addOperation(StellarSdk.Operation.payment({
|
|
124
|
-
destination: request.destination,
|
|
125
|
-
asset,
|
|
126
|
-
amount: request.amount,
|
|
127
|
-
}))
|
|
128
|
-
.addMemo(StellarSdk.Memo.text(memoText))
|
|
129
|
-
.setTimeout(300) // 5 minute window
|
|
130
|
-
.build();
|
|
131
|
-
return transaction.toXDR();
|
|
132
|
-
}
|
|
133
|
-
/**
|
|
134
|
-
* Submit a signed Stellar transaction to Horizon.
|
|
135
|
-
*/
|
|
136
|
-
async submitTransaction(signedXdr) {
|
|
137
|
-
const networkConfig = STELLAR_NETWORK[this.network];
|
|
138
|
-
const body = new URLSearchParams({ tx: signedXdr }).toString();
|
|
139
|
-
const resp = await fetch(`${networkConfig.horizonUrl}/transactions`, {
|
|
140
|
-
method: 'POST',
|
|
141
|
-
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
|
|
142
|
-
body,
|
|
143
|
-
});
|
|
144
|
-
if (!resp.ok) {
|
|
145
|
-
const err = await resp.text();
|
|
146
|
-
throw new Error(`Stellar transaction failed: ${resp.status} ${err.slice(0, 200)}`);
|
|
147
|
-
}
|
|
148
|
-
const result = await resp.json();
|
|
149
|
-
return {
|
|
150
|
-
hash: result.hash,
|
|
151
|
-
ledger: result.ledger,
|
|
152
|
-
successful: result.successful ?? true,
|
|
153
|
-
network: this.network,
|
|
154
|
-
};
|
|
155
|
-
}
|
|
156
|
-
async _loadAccount(publicKey, horizonUrl) {
|
|
157
|
-
const resp = await fetch(`${horizonUrl}/accounts/${publicKey}`);
|
|
158
|
-
if (!resp.ok) {
|
|
159
|
-
throw new Error(`Cannot load Stellar account ${publicKey}: ${resp.status}. ` +
|
|
160
|
-
`Ensure the account exists and has a USDC trustline established.`);
|
|
161
|
-
}
|
|
162
|
-
const data = await resp.json();
|
|
163
|
-
return { sequence: data.sequence };
|
|
164
|
-
}
|
|
165
|
-
/** Chain ID for this adapter (e.g. "stellar:pubnet") */
|
|
166
|
-
get chainId() {
|
|
167
|
-
return STELLAR_NETWORK[this.network].chainId;
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
// ─── x402 Auto-Pay Helper ────────────────────────────────────────────────────
|
|
171
|
-
/**
|
|
172
|
-
* Full x402 payment flow for Stellar.
|
|
173
|
-
* 1. Detects 402 response from API
|
|
174
|
-
* 2. Parses Stellar payment details from headers
|
|
175
|
-
* 3. Builds, signs, and submits Stellar USDC payment
|
|
176
|
-
* 4. Retries the original request with payment proof
|
|
177
|
-
*
|
|
178
|
-
* Requires stellar-sdk: npm install @stellar/stellar-sdk
|
|
179
|
-
*/
|
|
180
|
-
export async function stellarX402Pay(params) {
|
|
181
|
-
const adapter = new StellarX402Adapter({ network: params.network ?? 'pubnet' });
|
|
182
|
-
const details = adapter.parseX402Response(params.responseHeaders);
|
|
183
|
-
if (!details.supported) {
|
|
184
|
-
throw new Error('This endpoint does not support Stellar x402 payments');
|
|
185
|
-
}
|
|
186
|
-
if (!details.destination || !details.amount) {
|
|
187
|
-
throw new Error('x402 response missing destination or amount headers');
|
|
188
|
-
}
|
|
189
|
-
const xdr = await adapter.buildPaymentTransaction({
|
|
190
|
-
destination: details.destination,
|
|
191
|
-
amount: details.amount,
|
|
192
|
-
sourcePublicKey: params.sourcePublicKey,
|
|
193
|
-
resource: details.resource,
|
|
194
|
-
network: params.network ?? 'pubnet',
|
|
195
|
-
});
|
|
196
|
-
const signedXdr = await params.sign(xdr);
|
|
197
|
-
return adapter.submitTransaction(signedXdr);
|
|
198
|
-
}
|
|
199
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/x402/chains/stellar/index.ts"],"names":[],"mappings":"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"}
|