@atxp/client 0.2.13 → 0.2.15
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 +2 -103
- package/dist/atxpClient.d.ts.map +1 -1
- package/dist/atxpClient.js +11 -2
- package/dist/atxpClient.js.map +1 -1
- package/dist/baseAccount.d.ts +1 -0
- package/dist/baseAccount.d.ts.map +1 -1
- package/dist/baseAccount.js +9 -1
- package/dist/baseAccount.js.map +1 -1
- package/dist/basePaymentMaker.d.ts +10 -8
- package/dist/basePaymentMaker.d.ts.map +1 -1
- package/dist/basePaymentMaker.js +100 -90
- package/dist/basePaymentMaker.js.map +1 -1
- package/dist/solanaPaymentMaker.js +1 -1
- package/dist/solanaPaymentMaker.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -6,107 +6,6 @@ ATXP Client - MCP client with OAuth authentication and payment processing capabi
|
|
|
6
6
|
|
|
7
7
|
The ATXP Client package provides a comprehensive solution for connecting to MCP (Model Context Protocol) servers that require OAuth authentication and payment processing. It handles the complete flow from initial connection through authentication, payment verification, and tool execution.
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
## Getting Started
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
- 🔐 **OAuth Authentication**: Full OAuth 2.0 flow implementation
|
|
14
|
-
- 💰 **Payment Processing**: Solana-based payment integration
|
|
15
|
-
- 🔌 **MCP Protocol**: Complete Model Context Protocol client implementation
|
|
16
|
-
- 📱 **Multi-Platform**: Supports Node.js and React Native/Expo environments
|
|
17
|
-
- 🛡️ **Type Safety**: Full TypeScript support with comprehensive type definitions
|
|
18
|
-
- 🔄 **Event System**: Real-time connection and authentication status updates
|
|
19
|
-
|
|
20
|
-
## Installation
|
|
21
|
-
|
|
22
|
-
```bash
|
|
23
|
-
npm install @atxp/client
|
|
24
|
-
```
|
|
25
|
-
|
|
26
|
-
## Basic Usage
|
|
27
|
-
|
|
28
|
-
```typescript
|
|
29
|
-
import { ATXPClient } from '@atxp/client';
|
|
30
|
-
|
|
31
|
-
const client = new ATXPClient({
|
|
32
|
-
serverUrl: 'http://localhost:3010',
|
|
33
|
-
clientId: 'your-oauth-client-id',
|
|
34
|
-
authServerUrl: 'https://auth.atxp.ai'
|
|
35
|
-
});
|
|
36
|
-
|
|
37
|
-
// Connect and authenticate
|
|
38
|
-
await client.connect();
|
|
39
|
-
|
|
40
|
-
// Call tools that require payment
|
|
41
|
-
const result = await client.callTool('hello_world', {
|
|
42
|
-
name: 'Alice',
|
|
43
|
-
message: 'Hello from ATXP!'
|
|
44
|
-
});
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
## Platform Support
|
|
48
|
-
|
|
49
|
-
- **Node.js**: Full support with in-memory OAuth database (install `@atxp/sqlite` for persistence)
|
|
50
|
-
- **React Native/Expo**: Requires `expo-crypto` peer dependency
|
|
51
|
-
|
|
52
|
-
## Authentication Flow
|
|
53
|
-
|
|
54
|
-
1. Client initiates connection to MCP server
|
|
55
|
-
2. Server responds with OAuth challenge
|
|
56
|
-
3. Client redirects user to authentication server
|
|
57
|
-
4. User completes OAuth flow and returns with authorization code
|
|
58
|
-
5. Client exchanges code for access token
|
|
59
|
-
6. Authenticated requests can now be made to the server
|
|
60
|
-
|
|
61
|
-
## Payment Processing
|
|
62
|
-
|
|
63
|
-
When a tool requires payment, the client automatically:
|
|
64
|
-
|
|
65
|
-
1. Detects payment requirement from server response
|
|
66
|
-
2. Creates Solana payment transaction
|
|
67
|
-
3. Prompts user to approve payment
|
|
68
|
-
4. Submits payment proof to server
|
|
69
|
-
5. Retries original tool call upon payment confirmation
|
|
70
|
-
|
|
71
|
-
## API Reference
|
|
72
|
-
|
|
73
|
-
### ATXPClient
|
|
74
|
-
|
|
75
|
-
Main client class for ATXP protocol communication.
|
|
76
|
-
|
|
77
|
-
#### Constructor Options
|
|
78
|
-
|
|
79
|
-
```typescript
|
|
80
|
-
interface ATXPClientConfig {
|
|
81
|
-
serverUrl: string; // MCP server URL
|
|
82
|
-
clientId: string; // OAuth client ID
|
|
83
|
-
authServerUrl?: string; // Auth server URL (defaults to https://auth.atxp.ai)
|
|
84
|
-
oAuthDb?: OAuthDb; // Custom OAuth database implementation
|
|
85
|
-
}
|
|
86
|
-
```
|
|
87
|
-
|
|
88
|
-
#### Methods
|
|
89
|
-
|
|
90
|
-
- `connect()`: Establish connection to MCP server
|
|
91
|
-
- `disconnect()`: Close connection and cleanup resources
|
|
92
|
-
- `callTool(name, args)`: Execute server tool with automatic auth/payment handling
|
|
93
|
-
- `listTools()`: Get available tools from server
|
|
94
|
-
- `getAuthStatus()`: Check current authentication status
|
|
95
|
-
|
|
96
|
-
#### Events
|
|
97
|
-
|
|
98
|
-
- `authenticated`: Fired when OAuth flow completes successfully
|
|
99
|
-
- `paymentRequired`: Fired when tool execution requires payment
|
|
100
|
-
- `paymentCompleted`: Fired when payment is confirmed
|
|
101
|
-
- `error`: Fired on connection or protocol errors
|
|
102
|
-
|
|
103
|
-
## Examples
|
|
104
|
-
|
|
105
|
-
See the `examples/` directory for complete working examples:
|
|
106
|
-
|
|
107
|
-
- `examples/basic/`: Simple Node.js client implementation
|
|
108
|
-
- `examples/server/`: Compatible MCP server with payment requirements
|
|
109
|
-
|
|
110
|
-
## License
|
|
111
|
-
|
|
112
|
-
MIT
|
|
11
|
+
Learn more about ATXP in [the docs](https://docs.atxp.ai/atxp), and follow the [Agent Quickstart](https://docs.atxp.ai/client) to build your first ATXP-powered agent.
|
package/dist/atxpClient.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"atxpClient.d.ts","sourceRoot":"","sources":["../src/atxpClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAG1C,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,6BAA6B,EAAE,MAAM,oDAAoD,CAAC;AAEnG,KAAK,0BAA0B,GAAG,WAAW,GAAG,SAAS,CAAC;AAC1D,KAAK,oBAAoB,GAAG,IAAI,CAAC,YAAY,EAAE,0BAA0B,CAAC,CAAC;AAC3E,KAAK,oBAAoB,GAAG,IAAI,CAAC,YAAY,EAAE,0BAA0B,CAAC,CAAC;AAC3E,MAAM,MAAM,UAAU,GAAG,oBAAoB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;AAC9E,KAAK,2BAA2B,GAAG,SAAS,GAAG,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"atxpClient.d.ts","sourceRoot":"","sources":["../src/atxpClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAG1C,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,6BAA6B,EAAE,MAAM,oDAAoD,CAAC;AAEnG,KAAK,0BAA0B,GAAG,WAAW,GAAG,SAAS,CAAC;AAC1D,KAAK,oBAAoB,GAAG,IAAI,CAAC,YAAY,EAAE,0BAA0B,CAAC,CAAC;AAC3E,KAAK,oBAAoB,GAAG,IAAI,CAAC,YAAY,EAAE,0BAA0B,CAAC,CAAC;AAC3E,MAAM,MAAM,UAAU,GAAG,oBAAoB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;AAC9E,KAAK,2BAA2B,GAAG,SAAS,GAAG,QAAQ,CAAC;AAYxD,eAAO,MAAM,qBAAqB,EAAE,QAAQ,CAAC,IAAI,CAAC,oBAAoB,EAAE,2BAA2B,CAAC,CAiBnG,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,UAAU,GAAG,YAAY,CAehE;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,UAAU,GAAG,6BAA6B,CAoBxF;AAED,wBAAsB,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAQlE"}
|
package/dist/atxpClient.js
CHANGED
|
@@ -2,11 +2,20 @@ import { MemoryOAuthDb, ConsoleLogger, DEFAULT_AUTHORIZATION_SERVER } from "@atx
|
|
|
2
2
|
import { ATXPFetcher } from "./atxpFetcher.js";
|
|
3
3
|
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
|
|
4
4
|
import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js';
|
|
5
|
+
// Detect if we're in a browser environment and bind fetch appropriately
|
|
6
|
+
const getFetch = () => {
|
|
7
|
+
if (typeof window !== 'undefined' && typeof window.fetch === 'function') {
|
|
8
|
+
// In browser, bind fetch to window to avoid "Illegal invocation" errors
|
|
9
|
+
return fetch.bind(window);
|
|
10
|
+
}
|
|
11
|
+
// In Node.js or other environments, use fetch as-is
|
|
12
|
+
return fetch;
|
|
13
|
+
};
|
|
5
14
|
export const DEFAULT_CLIENT_CONFIG = {
|
|
6
15
|
allowedAuthorizationServers: [DEFAULT_AUTHORIZATION_SERVER],
|
|
7
16
|
approvePayment: async (_p) => true,
|
|
8
|
-
fetchFn:
|
|
9
|
-
oAuthChannelFetch:
|
|
17
|
+
fetchFn: getFetch(),
|
|
18
|
+
oAuthChannelFetch: getFetch(),
|
|
10
19
|
allowHttp: false, // may be overridden in buildClientConfig by process.env.NODE_ENV
|
|
11
20
|
clientInfo: {
|
|
12
21
|
name: 'ATXPClient',
|
package/dist/atxpClient.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"atxpClient.js","sourceRoot":"","sources":["../src/atxpClient.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,4BAA4B,EAAE,MAAM,cAAc,CAAC;AAC1F,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,6BAA6B,EAAE,MAAM,oDAAoD,CAAC;AAQnG,MAAM,CAAC,MAAM,qBAAqB,GAAsE;IACtG,2BAA2B,EAAE,CAAC,4BAA4B,CAAC;IAC3D,cAAc,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,IAAI;IAClC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"atxpClient.js","sourceRoot":"","sources":["../src/atxpClient.ts"],"names":[],"mappings":"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"}
|
package/dist/baseAccount.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"baseAccount.d.ts","sourceRoot":"","sources":["../src/baseAccount.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"baseAccount.d.ts","sourceRoot":"","sources":["../src/baseAccount.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AAM7D,eAAO,MAAM,0BAA0B,+CAA+C,CAAC;AAEvF,qBAAa,WAAY,YAAW,OAAO;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,CAAA;KAAE,CAAC;gBAEnC,UAAU,EAAE,MAAM,EAAE,eAAe,EAAE,GAAG;CAoBrD"}
|
package/dist/baseAccount.js
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import { privateKeyToAccount } from 'viem/accounts';
|
|
2
2
|
import { BasePaymentMaker } from './basePaymentMaker.js';
|
|
3
|
+
import { createWalletClient, http } from 'viem';
|
|
4
|
+
import { base } from 'viem/chains';
|
|
5
|
+
export const USDC_CONTRACT_ADDRESS_BASE = "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"; // USDC on Base mainnet
|
|
3
6
|
export class BaseAccount {
|
|
4
7
|
constructor(baseRPCUrl, sourceSecretKey) {
|
|
5
8
|
if (!baseRPCUrl) {
|
|
@@ -10,8 +13,13 @@ export class BaseAccount {
|
|
|
10
13
|
}
|
|
11
14
|
const account = privateKeyToAccount(sourceSecretKey);
|
|
12
15
|
this.accountId = account.address;
|
|
16
|
+
const walletClient = createWalletClient({
|
|
17
|
+
account: account,
|
|
18
|
+
chain: base,
|
|
19
|
+
transport: http(baseRPCUrl),
|
|
20
|
+
});
|
|
13
21
|
this.paymentMakers = {
|
|
14
|
-
'base': new BasePaymentMaker(baseRPCUrl,
|
|
22
|
+
'base': new BasePaymentMaker(baseRPCUrl, walletClient),
|
|
15
23
|
};
|
|
16
24
|
}
|
|
17
25
|
}
|
package/dist/baseAccount.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"baseAccount.js","sourceRoot":"","sources":["../src/baseAccount.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"baseAccount.js","sourceRoot":"","sources":["../src/baseAccount.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAChD,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAEnC,MAAM,CAAC,MAAM,0BAA0B,GAAG,4CAA4C,CAAC,CAAC,uBAAuB;AAE/G,MAAM,OAAO,WAAW;IAItB,YAAY,UAAkB,EAAE,eAAoB;QAClD,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC9C,CAAC;QACD,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;QACnD,CAAC;QAED,MAAM,OAAO,GAAG,mBAAmB,CAAC,eAAe,CAAC,CAAC;QAErD,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC;QACjC,MAAM,YAAY,GAAG,kBAAkB,CAAC;YACtC,OAAO,EAAE,OAAO;YAChB,KAAK,EAAE,IAAI;YACX,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC;SAC5B,CAAC,CAAC;QACH,IAAI,CAAC,aAAa,GAAG;YACnB,MAAM,EAAE,IAAI,gBAAgB,CAAC,UAAU,EAAE,YAAY,CAAC;SACvD,CAAA;IACH,CAAC;CACF"}
|
|
@@ -1,14 +1,16 @@
|
|
|
1
|
-
import type { PaymentMaker
|
|
1
|
+
import type { PaymentMaker } from './types.js';
|
|
2
2
|
import { Logger, Currency } from '@atxp/common';
|
|
3
|
+
import { WalletClient, PublicActions } from "viem";
|
|
4
|
+
type ExtendedWalletClient = WalletClient & PublicActions;
|
|
3
5
|
export declare class BasePaymentMaker implements PaymentMaker {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
generateJWT: ({ paymentRequestId, codeChallenge }: {
|
|
6
|
+
protected signingClient: ExtendedWalletClient;
|
|
7
|
+
protected logger: Logger;
|
|
8
|
+
constructor(baseRPCUrl: string, walletClient: WalletClient, logger?: Logger);
|
|
9
|
+
generateJWT({ paymentRequestId, codeChallenge }: {
|
|
9
10
|
paymentRequestId: string;
|
|
10
11
|
codeChallenge: string;
|
|
11
|
-
})
|
|
12
|
-
makePayment
|
|
12
|
+
}): Promise<string>;
|
|
13
|
+
makePayment(amount: BigNumber, currency: Currency, receiver: string): Promise<string>;
|
|
13
14
|
}
|
|
15
|
+
export {};
|
|
14
16
|
//# sourceMappingURL=basePaymentMaker.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"basePaymentMaker.d.ts","sourceRoot":"","sources":["../src/basePaymentMaker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,
|
|
1
|
+
{"version":3,"file":"basePaymentMaker.d.ts","sourceRoot":"","sources":["../src/basePaymentMaker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAO,MAAM,YAAY,CAAC;AAEpD,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAEhD,OAAO,EAKL,YAAY,EACZ,aAAa,EACd,MAAM,MAAM,CAAC;AAMd,KAAK,oBAAoB,GAAG,YAAY,GAAG,aAAa,CAAC;AA6CzD,qBAAa,gBAAiB,YAAW,YAAY;IACnD,SAAS,CAAC,aAAa,EAAE,oBAAoB,CAAC;IAC9C,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC;gBAEb,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,CAAC,EAAE,MAAM;IAerE,WAAW,CAAC,EAAC,gBAAgB,EAAE,aAAa,EAAC,EAAE;QAAC,gBAAgB,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAqClH,WAAW,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CA8D5F"}
|
package/dist/basePaymentMaker.js
CHANGED
|
@@ -1,10 +1,18 @@
|
|
|
1
1
|
import { InsufficientFundsError as InsufficientFundsErrorClass, PaymentNetworkError as PaymentNetworkErrorClass } from './types.js';
|
|
2
2
|
import { ConsoleLogger } from '@atxp/common';
|
|
3
|
-
import {
|
|
4
|
-
import { privateKeyToAccount } from "viem/accounts";
|
|
3
|
+
import { parseEther, publicActions, encodeFunctionData, } from "viem";
|
|
5
4
|
import { base } from "viem/chains";
|
|
6
5
|
import { BigNumber } from "bignumber.js";
|
|
7
|
-
|
|
6
|
+
import { USDC_CONTRACT_ADDRESS_BASE } from './baseAccount.js';
|
|
7
|
+
// Helper function to convert to base64url that works in both Node.js and browsers
|
|
8
|
+
function toBase64Url(data) {
|
|
9
|
+
// Convert string to base64
|
|
10
|
+
const base64 = typeof Buffer !== 'undefined'
|
|
11
|
+
? Buffer.from(data).toString('base64')
|
|
12
|
+
: btoa(data);
|
|
13
|
+
// Convert base64 to base64url
|
|
14
|
+
return base64.replace(/\+/g, '-').replace(/\//g, '_').replace(/=/g, '');
|
|
15
|
+
}
|
|
8
16
|
const USDC_DECIMALS = 6;
|
|
9
17
|
const ERC20_ABI = [
|
|
10
18
|
{
|
|
@@ -38,98 +46,100 @@ const ERC20_ABI = [
|
|
|
38
46
|
}
|
|
39
47
|
];
|
|
40
48
|
export class BasePaymentMaker {
|
|
41
|
-
constructor(baseRPCUrl,
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
// We encode the hex string itself (including 0x) as base64url
|
|
65
|
-
const signature = Buffer.from(signResult, 'utf8').toString('base64url');
|
|
66
|
-
return `${header}.${payload}.${signature}`;
|
|
49
|
+
constructor(baseRPCUrl, walletClient, logger) {
|
|
50
|
+
if (!baseRPCUrl) {
|
|
51
|
+
throw new Error('baseRPCUrl was empty');
|
|
52
|
+
}
|
|
53
|
+
if (!walletClient) {
|
|
54
|
+
throw new Error('walletClient was empty');
|
|
55
|
+
}
|
|
56
|
+
if (!walletClient.account) {
|
|
57
|
+
throw new Error('walletClient.account was empty');
|
|
58
|
+
}
|
|
59
|
+
this.signingClient = walletClient.extend(publicActions);
|
|
60
|
+
this.logger = logger ?? new ConsoleLogger();
|
|
61
|
+
}
|
|
62
|
+
async generateJWT({ paymentRequestId, codeChallenge }) {
|
|
63
|
+
const headerObj = { alg: 'ES256K' };
|
|
64
|
+
const payloadObj = {
|
|
65
|
+
sub: this.signingClient.account.address,
|
|
66
|
+
iss: 'accounts.atxp.ai',
|
|
67
|
+
aud: 'https://auth.atxp.ai',
|
|
68
|
+
iat: Math.floor(Date.now() / 1000),
|
|
69
|
+
exp: Math.floor(Date.now() / 1000) + 60 * 60,
|
|
70
|
+
...(codeChallenge ? { code_challenge: codeChallenge } : {}),
|
|
71
|
+
...(paymentRequestId ? { payment_request_id: paymentRequestId } : {}),
|
|
67
72
|
};
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
confirmations: 3 // Wait for 3 confirmations to ensure better propagation
|
|
105
|
-
});
|
|
106
|
-
if (receipt.status === 'reverted') {
|
|
107
|
-
throw new PaymentNetworkErrorClass(`Transaction reverted: ${hash}`, new Error('Transaction reverted on chain'));
|
|
108
|
-
}
|
|
109
|
-
this.logger.info(`Transaction confirmed: ${hash} in block ${receipt.blockNumber}`);
|
|
110
|
-
return hash;
|
|
73
|
+
const header = toBase64Url(JSON.stringify(headerObj));
|
|
74
|
+
const payload = toBase64Url(JSON.stringify(payloadObj));
|
|
75
|
+
const message = `${header}.${payload}`;
|
|
76
|
+
const messageBytes = typeof Buffer !== 'undefined'
|
|
77
|
+
? Buffer.from(message, 'utf8')
|
|
78
|
+
: new TextEncoder().encode(message);
|
|
79
|
+
const signResult = await this.signingClient.signMessage({
|
|
80
|
+
account: this.signingClient.account,
|
|
81
|
+
message: { raw: messageBytes },
|
|
82
|
+
});
|
|
83
|
+
// For ES256K, signature is typically 65 bytes (r,s,v)
|
|
84
|
+
// Server expects the hex signature string (with 0x prefix) to be base64url encoded
|
|
85
|
+
// This creates: base64url("0x6eb2565...") not base64url(rawBytes)
|
|
86
|
+
// Pass the hex string directly to toBase64Url which will UTF-8 encode and base64url it
|
|
87
|
+
const signature = toBase64Url(signResult);
|
|
88
|
+
const jwt = `${header}.${payload}.${signature}`;
|
|
89
|
+
this.logger.info(`Generated ES256K JWT: ${jwt}`);
|
|
90
|
+
return jwt;
|
|
91
|
+
}
|
|
92
|
+
async makePayment(amount, currency, receiver) {
|
|
93
|
+
if (currency.toUpperCase() !== 'USDC') {
|
|
94
|
+
throw new PaymentNetworkErrorClass('Only USDC currency is supported; received ' + currency);
|
|
95
|
+
}
|
|
96
|
+
this.logger.info(`Making payment of ${amount} ${currency} to ${receiver} on Base from ${this.signingClient.account.address}`);
|
|
97
|
+
try {
|
|
98
|
+
// Check balance before attempting payment
|
|
99
|
+
const balanceRaw = await this.signingClient.readContract({
|
|
100
|
+
address: USDC_CONTRACT_ADDRESS_BASE,
|
|
101
|
+
abi: ERC20_ABI,
|
|
102
|
+
functionName: 'balanceOf',
|
|
103
|
+
args: [this.signingClient.account.address],
|
|
104
|
+
});
|
|
105
|
+
const balance = new BigNumber(balanceRaw.toString()).dividedBy(10 ** USDC_DECIMALS);
|
|
106
|
+
if (balance.lt(amount)) {
|
|
107
|
+
this.logger.warn(`Insufficient ${currency} balance for payment. Required: ${amount}, Available: ${balance}`);
|
|
108
|
+
throw new InsufficientFundsErrorClass(currency, amount, balance, 'base');
|
|
111
109
|
}
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
110
|
+
// Convert amount to USDC units (6 decimals) as BigInt
|
|
111
|
+
const amountInUSDCUnits = BigInt(amount.multipliedBy(10 ** USDC_DECIMALS).toFixed(0));
|
|
112
|
+
const data = encodeFunctionData({
|
|
113
|
+
abi: ERC20_ABI,
|
|
114
|
+
functionName: "transfer",
|
|
115
|
+
args: [receiver, amountInUSDCUnits],
|
|
116
|
+
});
|
|
117
|
+
const hash = await this.signingClient.sendTransaction({
|
|
118
|
+
chain: base,
|
|
119
|
+
account: this.signingClient.account,
|
|
120
|
+
to: USDC_CONTRACT_ADDRESS_BASE,
|
|
121
|
+
data: data,
|
|
122
|
+
value: parseEther('0'),
|
|
123
|
+
});
|
|
124
|
+
// Wait for transaction confirmation with more blocks to ensure propagation
|
|
125
|
+
this.logger.info(`Waiting for transaction confirmation: ${hash}`);
|
|
126
|
+
const receipt = await this.signingClient.waitForTransactionReceipt({
|
|
127
|
+
hash: hash,
|
|
128
|
+
confirmations: 3 // Wait for 3 confirmations to ensure better propagation
|
|
129
|
+
});
|
|
130
|
+
if (receipt.status === 'reverted') {
|
|
131
|
+
throw new PaymentNetworkErrorClass(`Transaction reverted: ${hash}`, new Error('Transaction reverted on chain'));
|
|
118
132
|
}
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
throw new Error('Base RPC URL is required');
|
|
133
|
+
this.logger.info(`Transaction confirmed: ${hash} in block ${receipt.blockNumber}`);
|
|
134
|
+
return hash;
|
|
122
135
|
}
|
|
123
|
-
|
|
124
|
-
|
|
136
|
+
catch (error) {
|
|
137
|
+
if (error instanceof InsufficientFundsErrorClass || error instanceof PaymentNetworkErrorClass) {
|
|
138
|
+
throw error;
|
|
139
|
+
}
|
|
140
|
+
// Wrap other errors in PaymentNetworkError
|
|
141
|
+
throw new PaymentNetworkErrorClass(`Payment failed on Base network: ${error.message}`, error);
|
|
125
142
|
}
|
|
126
|
-
this.account = privateKeyToAccount(sourceSecretKey);
|
|
127
|
-
this.signingClient = createWalletClient({
|
|
128
|
-
account: this.account,
|
|
129
|
-
chain: base,
|
|
130
|
-
transport: http(baseRPCUrl),
|
|
131
|
-
}).extend(publicActions);
|
|
132
|
-
this.logger = logger ?? new ConsoleLogger();
|
|
133
143
|
}
|
|
134
144
|
}
|
|
135
145
|
//# sourceMappingURL=basePaymentMaker.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"basePaymentMaker.js","sourceRoot":"","sources":["../src/basePaymentMaker.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,IAAI,2BAA2B,EAAE,mBAAmB,IAAI,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAEpI,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAEL,
|
|
1
|
+
{"version":3,"file":"basePaymentMaker.js","sourceRoot":"","sources":["../src/basePaymentMaker.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,IAAI,2BAA2B,EAAE,mBAAmB,IAAI,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAEpI,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAEL,UAAU,EACV,aAAa,EACb,kBAAkB,GAGnB,MAAM,MAAM,CAAC;AACd,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACnC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;AAK9D,kFAAkF;AAClF,SAAS,WAAW,CAAC,IAAY;IAC/B,2BAA2B;IAC3B,MAAM,MAAM,GAAG,OAAO,MAAM,KAAK,WAAW;QAC1C,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;QACtC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACf,8BAA8B;IAC9B,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AAC1E,CAAC;AAED,MAAM,aAAa,GAAG,CAAC,CAAC;AACxB,MAAM,SAAS,GAAG;IAChB;QACE,QAAQ,EAAE,KAAK;QACf,MAAM,EAAE;YACN,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE;YAChC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE;SACpC;QACD,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QACrC,IAAI,EAAE,UAAU;KACjB;IACD;QACI,UAAU,EAAE,IAAI;QAChB,QAAQ,EAAE;YACN;gBACI,MAAM,EAAE,QAAQ;gBAChB,MAAM,EAAE,SAAS;aACpB;SACJ;QACD,MAAM,EAAE,WAAW;QACnB,SAAS,EAAE;YACP;gBACI,MAAM,EAAE,SAAS;gBACjB,MAAM,EAAE,SAAS;aACpB;SACJ;QACD,SAAS,EAAE,KAAK;QAChB,iBAAiB,EAAE,MAAM;QACzB,MAAM,EAAE,UAAU;KACrB;CACF,CAAC;AAEF,MAAM,OAAO,gBAAgB;IAI3B,YAAY,UAAkB,EAAE,YAA0B,EAAE,MAAe;QACzE,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;QAC1C,CAAC;QACD,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;QAC5C,CAAC;QACD,IAAG,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACpD,CAAC;QAED,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC,MAAM,CAAC,aAAa,CAAyB,CAAC;QAChF,IAAI,CAAC,MAAM,GAAG,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;IAC9C,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,EAAC,gBAAgB,EAAE,aAAa,EAAoD;QACpG,MAAM,SAAS,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC;QAEpC,MAAM,UAAU,GAAG;YACjB,GAAG,EAAE,IAAI,CAAC,aAAa,CAAC,OAAQ,CAAC,OAAO;YACxC,GAAG,EAAE,kBAAkB;YACvB,GAAG,EAAE,sBAAsB;YAC3B,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;YAClC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE;YAC5C,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3D,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC3C,CAAC;QAE7B,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC;QACtD,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC;QACxD,MAAM,OAAO,GAAG,GAAG,MAAM,IAAI,OAAO,EAAE,CAAC;QAEvC,MAAM,YAAY,GAAG,OAAO,MAAM,KAAK,WAAW;YAChD,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC;YAC9B,CAAC,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAEtC,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC;YACtD,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,OAAQ;YACpC,OAAO,EAAE,EAAE,GAAG,EAAE,YAAY,EAAE;SAC/B,CAAC,CAAC;QAEH,sDAAsD;QACtD,mFAAmF;QACnF,kEAAkE;QAClE,uFAAuF;QACvF,MAAM,SAAS,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;QAE1C,MAAM,GAAG,GAAG,GAAG,MAAM,IAAI,OAAO,IAAI,SAAS,EAAE,CAAC;QAChD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,yBAAyB,GAAG,EAAE,CAAC,CAAC;QACjD,OAAO,GAAG,CAAC;IACb,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,MAAiB,EAAE,QAAkB,EAAE,QAAgB;QACvE,IAAI,QAAQ,CAAC,WAAW,EAAE,KAAK,MAAM,EAAE,CAAC;YACtC,MAAM,IAAI,wBAAwB,CAAC,4CAA4C,GAAG,QAAQ,CAAC,CAAC;QAC9F,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,qBAAqB,MAAM,IAAI,QAAQ,OAAO,QAAQ,iBAAiB,IAAI,CAAC,aAAa,CAAC,OAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;QAE/H,IAAI,CAAC;YACH,0CAA0C;YAC1C,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC;gBACvD,OAAO,EAAE,0BAAqC;gBAC9C,GAAG,EAAE,SAAS;gBACd,YAAY,EAAE,WAAW;gBACzB,IAAI,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,OAAQ,CAAC,OAAO,CAAC;aAC5C,CAAW,CAAC;YAEb,MAAM,OAAO,GAAG,IAAI,SAAS,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC,SAAS,CAAC,EAAE,IAAI,aAAa,CAAC,CAAC;YAEpF,IAAI,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;gBACvB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,QAAQ,mCAAmC,MAAM,gBAAgB,OAAO,EAAE,CAAC,CAAC;gBAC7G,MAAM,IAAI,2BAA2B,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;YAC3E,CAAC;YAED,sDAAsD;YACtD,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,IAAI,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;YAEtF,MAAM,IAAI,GAAG,kBAAkB,CAAC;gBAC9B,GAAG,EAAE,SAAS;gBACd,YAAY,EAAE,UAAU;gBACxB,IAAI,EAAE,CAAC,QAAmB,EAAE,iBAAiB,CAAC;aAC/C,CAAC,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC;gBACpD,KAAK,EAAE,IAAI;gBACX,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,OAAQ;gBACpC,EAAE,EAAE,0BAA0B;gBAC9B,IAAI,EAAE,IAAI;gBACV,KAAK,EAAE,UAAU,CAAC,GAAG,CAAC;aACvB,CAAC,CAAC;YAEH,2EAA2E;YAC3E,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,yCAAyC,IAAI,EAAE,CAAC,CAAC;YAClE,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,yBAAyB,CAAC;gBACjE,IAAI,EAAE,IAAW;gBACjB,aAAa,EAAE,CAAC,CAAE,wDAAwD;aAC3E,CAAC,CAAC;YAEH,IAAI,OAAO,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;gBAClC,MAAM,IAAI,wBAAwB,CAAC,yBAAyB,IAAI,EAAE,EAAE,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC,CAAC;YAClH,CAAC;YAED,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,0BAA0B,IAAI,aAAa,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;YAEnF,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,2BAA2B,IAAI,KAAK,YAAY,wBAAwB,EAAE,CAAC;gBAC9F,MAAM,KAAK,CAAC;YACd,CAAC;YAED,2CAA2C;YAC3C,MAAM,IAAI,wBAAwB,CAAC,mCAAoC,KAAe,CAAC,OAAO,EAAE,EAAE,KAAc,CAAC,CAAC;QACpH,CAAC;IACH,CAAC;CACF"}
|
|
@@ -33,7 +33,7 @@ export class SolanaPaymentMaker {
|
|
|
33
33
|
throw new PaymentNetworkError('Only USDC currency is supported; received ' + currency);
|
|
34
34
|
}
|
|
35
35
|
const receiverKey = new PublicKey(receiver);
|
|
36
|
-
this.logger.info(`Making payment of ${amount} ${currency} to ${receiver} on Solana`);
|
|
36
|
+
this.logger.info(`Making payment of ${amount} ${currency} to ${receiver} on Solana from ${this.source.publicKey.toBase58()}`);
|
|
37
37
|
try {
|
|
38
38
|
// Check balance before attempting payment
|
|
39
39
|
const tokenAccountAddress = await getAssociatedTokenAddress(USDC_MINT, this.source.publicKey);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"solanaPaymentMaker.js","sourceRoot":"","sources":["../src/solanaPaymentMaker.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACzE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAClH,OAAO,EAAE,cAAc,EAAE,qBAAqB,IAAI,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAC9F,OAAO,EAAE,UAAU,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAC1E,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,SAAS,MAAM,cAAc,CAAC;AACrC,OAAO,EAAE,WAAW,EAAY,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAEjC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,6DAA6D;AAC7D,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,8CAA8C,CAAC,CAAC;AAEhF,MAAM,CAAC,MAAM,qBAAqB,GAAG,sBAAsB,CAAC;AAE5D,MAAM,OAAO,kBAAkB;IAK7B,YAAY,cAAsB,EAAE,eAAuB,EAAE,MAAe;QAY5E,gBAAW,GAAG,KAAK,EAAC,EAAC,gBAAgB,EAAE,aAAa,EAAoD,EAAmB,EAAE;YAC3H,yCAAyC;YACzC,qEAAqE;YACrE,sDAAsD;YACtD,MAAM,GAAG,GAAG;gBACV,GAAG,EAAE,KAAK;gBACV,GAAG,EAAE,SAAS;gBACd,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC;gBACxE,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC;aACtE,CAAC;YACF,MAAM,UAAU,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YACjD,IAAI,CAAC,CAAC,UAAU,YAAY,SAAS,CAAC,EAAE,CAAC;gBACvC,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;YACvD,CAAC;YACD,OAAO,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,UAAU,EAAE,gBAAgB,IAAI,EAAE,EAAE,aAAa,IAAI,EAAE,CAAC,CAAC;QAChH,CAAC,CAAA;QAED,gBAAW,GAAG,KAAK,EAAE,MAAiB,EAAE,QAAkB,EAAE,QAAgB,EAAmB,EAAE;YAC/F,IAAI,QAAQ,CAAC,WAAW,EAAE,KAAK,MAAM,EAAE,CAAC;gBACtC,MAAM,IAAI,mBAAmB,CAAC,4CAA4C,GAAG,QAAQ,CAAC,CAAC;YACzF,CAAC;YAED,MAAM,WAAW,GAAG,IAAI,SAAS,CAAC,QAAQ,CAAC,CAAC;YAE5C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,qBAAqB,MAAM,IAAI,QAAQ,OAAO,QAAQ,
|
|
1
|
+
{"version":3,"file":"solanaPaymentMaker.js","sourceRoot":"","sources":["../src/solanaPaymentMaker.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@atxp/client",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.15",
|
|
4
4
|
"description": "ATXP Client - MCP client with OAuth authentication and payment processing",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
"test": "vitest run"
|
|
23
23
|
},
|
|
24
24
|
"dependencies": {
|
|
25
|
-
"@atxp/common": "0.2.
|
|
25
|
+
"@atxp/common": "0.2.15",
|
|
26
26
|
"@modelcontextprotocol/sdk": "^1.15.0",
|
|
27
27
|
"@solana/pay": "^0.2.5",
|
|
28
28
|
"@solana/web3.js": "^1.98.1",
|