@atxp/client 0.10.6 → 0.10.8

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.
Files changed (56) hide show
  1. package/dist/_virtual/index10.js +2 -2
  2. package/dist/_virtual/index11.js +2 -2
  3. package/dist/_virtual/index17.js +2 -2
  4. package/dist/_virtual/index18.js +2 -2
  5. package/dist/_virtual/index19.js +2 -2
  6. package/dist/_virtual/index3.js +2 -2
  7. package/dist/_virtual/index4.js +2 -2
  8. package/dist/_virtual/index5.js +2 -2
  9. package/dist/_virtual/index8.js +2 -2
  10. package/dist/_virtual/index9.js +2 -2
  11. package/dist/atxpClient.d.ts +1 -1
  12. package/dist/atxpClient.d.ts.map +1 -1
  13. package/dist/atxpFetcher.d.ts +18 -1
  14. package/dist/atxpFetcher.d.ts.map +1 -1
  15. package/dist/atxpFetcher.js +65 -2
  16. package/dist/atxpFetcher.js.map +1 -1
  17. package/dist/atxpProtocolHandler.d.ts +17 -0
  18. package/dist/atxpProtocolHandler.d.ts.map +1 -0
  19. package/dist/atxpProtocolHandler.js +77 -0
  20. package/dist/atxpProtocolHandler.js.map +1 -0
  21. package/dist/destinationMakers/index.d.ts.map +1 -1
  22. package/dist/destinationMakers/index.js +6 -0
  23. package/dist/destinationMakers/index.js.map +1 -1
  24. package/dist/index.cjs +558 -2
  25. package/dist/index.cjs.map +1 -1
  26. package/dist/index.d.ts +183 -5
  27. package/dist/index.d.ts.map +1 -1
  28. package/dist/index.js +555 -4
  29. package/dist/index.js.map +1 -1
  30. package/dist/mppProtocolHandler.d.ts +46 -0
  31. package/dist/mppProtocolHandler.d.ts.map +1 -0
  32. package/dist/mppProtocolHandler.js +182 -0
  33. package/dist/mppProtocolHandler.js.map +1 -0
  34. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/ajv/dist/compile/codegen/index.js +1 -1
  35. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/ajv/dist/compile/validate/index.js +1 -1
  36. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/ajv/dist/vocabularies/applicator/index.js +1 -1
  37. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/ajv/dist/vocabularies/core/index.js +1 -1
  38. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/ajv/dist/vocabularies/discriminator/index.js +1 -1
  39. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/ajv/dist/vocabularies/format/index.js +1 -1
  40. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/ajv/dist/vocabularies/validation/index.js +1 -1
  41. package/dist/node_modules/ajv-formats/node_modules/ajv/dist/vocabularies/applicator/index.js +1 -1
  42. package/dist/node_modules/ajv-formats/node_modules/ajv/dist/vocabularies/core/index.js +1 -1
  43. package/dist/node_modules/ajv-formats/node_modules/ajv/dist/vocabularies/validation/index.js +1 -1
  44. package/dist/paymentClient.d.ts +55 -0
  45. package/dist/paymentClient.d.ts.map +1 -0
  46. package/dist/paymentClient.js +75 -0
  47. package/dist/paymentClient.js.map +1 -0
  48. package/dist/protocolHandler.d.ts +41 -0
  49. package/dist/protocolHandler.d.ts.map +1 -0
  50. package/dist/types.d.ts +6 -1
  51. package/dist/types.d.ts.map +1 -1
  52. package/dist/x402ProtocolHandler.d.ts +22 -0
  53. package/dist/x402ProtocolHandler.d.ts.map +1 -0
  54. package/dist/x402ProtocolHandler.js +166 -0
  55. package/dist/x402ProtocolHandler.js.map +1 -0
  56. package/package.json +5 -3
@@ -0,0 +1,166 @@
1
+ import { ATXPPaymentError } from './errors.js';
2
+ import { BigNumber } from 'bignumber.js';
3
+ import { PaymentClient, buildPaymentHeaders } from './paymentClient.js';
4
+
5
+ function isX402Challenge(obj) {
6
+ if (typeof obj !== 'object' || obj === null)
7
+ return false;
8
+ const candidate = obj;
9
+ return (typeof candidate.x402Version !== 'undefined' &&
10
+ Array.isArray(candidate.accepts));
11
+ }
12
+ /**
13
+ * Protocol handler for X402 payment challenges.
14
+ *
15
+ * Detects HTTP 402 responses with x402Version in the JSON body.
16
+ * Creates payment headers using the x402 library and retries the request.
17
+ */
18
+ class X402ProtocolHandler {
19
+ constructor(config) {
20
+ this.protocol = 'x402';
21
+ this.accountsServer = config?.accountsServer ?? 'https://accounts.atxp.ai';
22
+ }
23
+ async canHandle(response) {
24
+ if (response.status !== 402)
25
+ return false;
26
+ try {
27
+ const cloned = response.clone();
28
+ const body = await cloned.text();
29
+ const parsed = JSON.parse(body);
30
+ return isX402Challenge(parsed);
31
+ }
32
+ catch {
33
+ return false;
34
+ }
35
+ }
36
+ async handlePaymentChallenge(response, originalRequest, config) {
37
+ const { account, logger, fetchFn, approvePayment, onPayment, onPaymentFailure } = config;
38
+ const responseBody = await response.text();
39
+ let paymentChallenge;
40
+ try {
41
+ paymentChallenge = JSON.parse(responseBody);
42
+ }
43
+ catch {
44
+ logger.error('X402: failed to parse challenge body');
45
+ return null;
46
+ }
47
+ if (!isX402Challenge(paymentChallenge)) {
48
+ return null;
49
+ }
50
+ try {
51
+ const { selectPaymentRequirements } = await import('x402/client');
52
+ const selectedPaymentRequirements = selectPaymentRequirements(paymentChallenge.accepts, undefined, 'exact');
53
+ if (!selectedPaymentRequirements) {
54
+ logger.info('X402: no suitable payment option found');
55
+ return this.reconstructResponse(responseBody, response);
56
+ }
57
+ const amountInUsdc = Number(selectedPaymentRequirements.maxAmountRequired) / (10 ** 6);
58
+ const network = selectedPaymentRequirements.network;
59
+ logger.debug(`X402: payment required: ${amountInUsdc} USDC on ${network} to ${selectedPaymentRequirements.payTo}`);
60
+ const url = typeof originalRequest.url === 'string' ? originalRequest.url : originalRequest.url.toString();
61
+ const accountId = await account.getAccountId();
62
+ const prospectivePayment = {
63
+ accountId,
64
+ resourceUrl: url,
65
+ resourceName: selectedPaymentRequirements.description || url,
66
+ currency: 'USDC',
67
+ amount: new BigNumber(amountInUsdc),
68
+ iss: selectedPaymentRequirements.payTo
69
+ };
70
+ const approved = await approvePayment(prospectivePayment);
71
+ if (!approved) {
72
+ logger.info('X402: payment not approved');
73
+ const error = new Error('Payment not approved');
74
+ await onPaymentFailure({
75
+ payment: prospectivePayment,
76
+ error,
77
+ attemptedNetworks: [network],
78
+ failureReasons: new Map([[network, error]]),
79
+ retryable: true,
80
+ timestamp: new Date()
81
+ });
82
+ return this.reconstructResponse(responseBody, response);
83
+ }
84
+ // Authorize via account.authorize() — ATXPAccount calls the accounts
85
+ // service, BaseAccount signs locally. No fallback — each account type
86
+ // handles authorization according to its capabilities.
87
+ const client = new PaymentClient({
88
+ accountsServer: this.accountsServer,
89
+ logger,
90
+ fetchFn,
91
+ });
92
+ const authorizeResult = await client.authorize({
93
+ account,
94
+ userId: accountId,
95
+ destination: url,
96
+ protocol: 'x402',
97
+ paymentRequirements: selectedPaymentRequirements,
98
+ });
99
+ const paymentHeader = authorizeResult.credential;
100
+ // Retry with X-PAYMENT header
101
+ const retryHeaders = buildPaymentHeaders({ protocol: 'x402', credential: paymentHeader }, originalRequest.init?.headers);
102
+ const retryInit = { ...originalRequest.init, headers: retryHeaders };
103
+ logger.info('X402: retrying request with X-PAYMENT header');
104
+ const retryResponse = await fetchFn(originalRequest.url, retryInit);
105
+ if (retryResponse.ok) {
106
+ logger.info('X402: payment accepted');
107
+ await onPayment({
108
+ payment: prospectivePayment,
109
+ transactionHash: paymentHeader.substring(0, 66),
110
+ network
111
+ });
112
+ }
113
+ else {
114
+ logger.warn(`X402: request failed after payment with status ${retryResponse.status}`);
115
+ const error = new Error(`Request failed with status ${retryResponse.status}`);
116
+ await onPaymentFailure({
117
+ payment: prospectivePayment,
118
+ error,
119
+ attemptedNetworks: [network],
120
+ failureReasons: new Map([[network, error]]),
121
+ retryable: false,
122
+ timestamp: new Date()
123
+ });
124
+ }
125
+ return retryResponse;
126
+ }
127
+ catch (error) {
128
+ logger.error(`X402: failed to handle payment challenge: ${error}`);
129
+ if (isX402Challenge(paymentChallenge) && paymentChallenge.accepts[0]) {
130
+ const firstOption = paymentChallenge.accepts[0];
131
+ const amount = firstOption.maxAmountRequired ? Number(firstOption.maxAmountRequired) / (10 ** 6) : 0;
132
+ const url = typeof originalRequest.url === 'string' ? originalRequest.url : originalRequest.url.toString();
133
+ const accountId = await account.getAccountId();
134
+ const errorNetwork = firstOption.network || 'unknown';
135
+ const typedError = error;
136
+ const isRetryable = typedError instanceof ATXPPaymentError ? typedError.retryable : true;
137
+ await onPaymentFailure({
138
+ payment: {
139
+ accountId,
140
+ resourceUrl: url,
141
+ resourceName: firstOption.description || url,
142
+ currency: 'USDC',
143
+ amount: new BigNumber(amount),
144
+ iss: firstOption.payTo || ''
145
+ },
146
+ error: typedError,
147
+ attemptedNetworks: [errorNetwork],
148
+ failureReasons: new Map([[errorNetwork, typedError]]),
149
+ retryable: isRetryable,
150
+ timestamp: new Date()
151
+ });
152
+ }
153
+ return this.reconstructResponse(responseBody, response);
154
+ }
155
+ }
156
+ reconstructResponse(body, original) {
157
+ return new Response(body, {
158
+ status: original.status,
159
+ statusText: original.statusText,
160
+ headers: original.headers
161
+ });
162
+ }
163
+ }
164
+
165
+ export { X402ProtocolHandler };
166
+ //# sourceMappingURL=x402ProtocolHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"x402ProtocolHandler.js","sources":["../src/x402ProtocolHandler.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atxp/client",
3
- "version": "0.10.6",
3
+ "version": "0.10.8",
4
4
  "description": "ATXP Client - MCP client with OAuth authentication and payment processing",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -33,10 +33,12 @@
33
33
  "pack:dry": "npm pack --dry-run"
34
34
  },
35
35
  "dependencies": {
36
- "@atxp/common": "0.10.6",
36
+ "@atxp/common": "0.10.8",
37
+ "@atxp/mpp": "0.10.7",
37
38
  "@modelcontextprotocol/sdk": "^1.15.0",
38
39
  "bignumber.js": "^9.3.0",
39
- "oauth4webapi": "^3.8.3"
40
+ "oauth4webapi": "^3.8.3",
41
+ "x402": "^1.1.0"
40
42
  },
41
43
  "peerDependencies": {
42
44
  "expo-crypto": ">=14.0.0",