@atxp/client 0.7.3 → 0.8.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/dist/atxpAccount.d.ts +20 -0
- package/dist/atxpAccount.d.ts.map +1 -0
- package/dist/atxpAccount.js +82 -19
- package/dist/atxpAccount.js.map +1 -1
- package/dist/atxpClient.d.ts +12 -0
- package/dist/atxpClient.d.ts.map +1 -0
- package/dist/atxpClient.js +18 -2
- package/dist/atxpClient.js.map +1 -1
- package/dist/atxpFetcher.d.ts +77 -0
- package/dist/atxpFetcher.d.ts.map +1 -0
- package/dist/atxpFetcher.js +95 -140
- package/dist/atxpFetcher.js.map +1 -1
- package/dist/atxpLocalAccount.d.ts +50 -0
- package/dist/atxpLocalAccount.d.ts.map +1 -0
- package/dist/baseAccount.d.ts +20 -0
- package/dist/baseAccount.d.ts.map +1 -0
- package/dist/baseAccount.js +15 -4
- package/dist/baseAccount.js.map +1 -1
- package/dist/baseConstants.d.ts +10 -0
- package/dist/baseConstants.d.ts.map +1 -0
- package/dist/basePaymentMaker.d.ts +23 -0
- package/dist/basePaymentMaker.d.ts.map +1 -0
- package/dist/basePaymentMaker.js +23 -3
- package/dist/basePaymentMaker.js.map +1 -1
- package/dist/clientTestHelpers.d.ts +6 -0
- package/dist/clientTestHelpers.d.ts.map +1 -0
- package/dist/destinationMakers/atxpDestinationMaker.d.ts +15 -0
- package/dist/destinationMakers/atxpDestinationMaker.d.ts.map +1 -0
- package/dist/destinationMakers/atxpDestinationMaker.js +128 -0
- package/dist/destinationMakers/atxpDestinationMaker.js.map +1 -0
- package/dist/destinationMakers/index.d.ts +9 -0
- package/dist/destinationMakers/index.d.ts.map +1 -0
- package/dist/destinationMakers/index.js +42 -0
- package/dist/destinationMakers/index.js.map +1 -0
- package/dist/destinationMakers/passthroughDestinationMaker.d.ts +8 -0
- package/dist/destinationMakers/passthroughDestinationMaker.d.ts.map +1 -0
- package/dist/destinationMakers/passthroughDestinationMaker.js +27 -0
- package/dist/destinationMakers/passthroughDestinationMaker.js.map +1 -0
- package/dist/index.cjs +793 -454
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +111 -36
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +788 -456
- package/dist/index.js.map +1 -1
- package/dist/oAuth.d.ts +44 -0
- package/dist/oAuth.d.ts.map +1 -0
- package/dist/polygonConstants.d.ts +46 -0
- package/dist/polygonConstants.d.ts.map +1 -0
- package/dist/polygonConstants.js +54 -0
- package/dist/polygonConstants.js.map +1 -0
- package/dist/setup.expo.d.ts +2 -0
- package/dist/setup.expo.d.ts.map +1 -0
- package/dist/solanaAccount.d.ts +13 -0
- package/dist/solanaAccount.d.ts.map +1 -0
- package/dist/solanaAccount.js +16 -4
- package/dist/solanaAccount.js.map +1 -1
- package/dist/solanaPaymentMaker.d.ts +25 -0
- package/dist/solanaPaymentMaker.d.ts.map +1 -0
- package/dist/solanaPaymentMaker.js +27 -5
- package/dist/solanaPaymentMaker.js.map +1 -1
- package/dist/types.d.ts +63 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js.map +1 -1
- package/dist/worldConstants.d.ts +53 -0
- package/dist/worldConstants.d.ts.map +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { Account, PaymentMaker } from './types.js';
|
|
2
|
+
import type { FetchLike, AccountId, Source } from '@atxp/common';
|
|
3
|
+
import { LocalAccount } from 'viem';
|
|
4
|
+
export declare class ATXPAccount implements Account {
|
|
5
|
+
accountId: AccountId;
|
|
6
|
+
paymentMakers: PaymentMaker[];
|
|
7
|
+
origin: string;
|
|
8
|
+
token: string;
|
|
9
|
+
fetchFn: FetchLike;
|
|
10
|
+
private unqualifiedAccountId;
|
|
11
|
+
constructor(connectionString: string, opts?: {
|
|
12
|
+
fetchFn?: FetchLike;
|
|
13
|
+
});
|
|
14
|
+
getSigner(): Promise<LocalAccount>;
|
|
15
|
+
/**
|
|
16
|
+
* Get sources for this account by calling the accounts service
|
|
17
|
+
*/
|
|
18
|
+
getSources(): Promise<Source[]>;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=atxpAccount.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"atxpAccount.d.ts","sourceRoot":"","sources":["../src/atxpAccount.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,KAAK,EAAE,SAAS,EAAY,SAAS,EAAyC,MAAM,EAAE,MAAM,cAAc,CAAC;AAElH,OAAO,EAAE,YAAY,EAAE,MAAM,MAAM,CAAC;AA2IpC,qBAAa,WAAY,YAAW,OAAO;IACzC,SAAS,EAAE,SAAS,CAAC;IACrB,aAAa,EAAE,YAAY,EAAE,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,SAAS,CAAC;IACnB,OAAO,CAAC,oBAAoB,CAAS;gBAEzB,gBAAgB,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,SAAS,CAAC;KAAE;IAmB/D,SAAS,IAAI,OAAO,CAAC,YAAY,CAAC;IAQxC;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;CAuBtC"}
|
package/dist/atxpAccount.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { crypto } from '@atxp/common';
|
|
2
1
|
import { ATXPLocalAccount } from './atxpLocalAccount.js';
|
|
3
2
|
|
|
4
3
|
function toBasicAuth(token) {
|
|
@@ -14,6 +13,9 @@ function parseConnectionString(connectionString) {
|
|
|
14
13
|
if (!token) {
|
|
15
14
|
throw new Error('ATXPAccount: connection string missing connection token');
|
|
16
15
|
}
|
|
16
|
+
if (!accountId) {
|
|
17
|
+
throw new Error('ATXPAccount: connection string missing account id');
|
|
18
|
+
}
|
|
17
19
|
return { origin, token, accountId };
|
|
18
20
|
}
|
|
19
21
|
class ATXPHttpPaymentMaker {
|
|
@@ -22,8 +24,33 @@ class ATXPHttpPaymentMaker {
|
|
|
22
24
|
this.token = token;
|
|
23
25
|
this.fetchFn = fetchFn;
|
|
24
26
|
}
|
|
25
|
-
async
|
|
26
|
-
//
|
|
27
|
+
async getSourceAddress(params) {
|
|
28
|
+
// Call the /address_for_payment endpoint to get the source address for this account
|
|
29
|
+
const response = await this.fetchFn(`${this.origin}/address_for_payment`, {
|
|
30
|
+
method: 'POST',
|
|
31
|
+
headers: {
|
|
32
|
+
'Authorization': toBasicAuth(this.token),
|
|
33
|
+
'Content-Type': 'application/json',
|
|
34
|
+
},
|
|
35
|
+
body: JSON.stringify({
|
|
36
|
+
amount: params.amount.toString(),
|
|
37
|
+
currency: params.currency,
|
|
38
|
+
receiver: params.receiver,
|
|
39
|
+
memo: params.memo,
|
|
40
|
+
}),
|
|
41
|
+
});
|
|
42
|
+
if (!response.ok) {
|
|
43
|
+
const text = await response.text();
|
|
44
|
+
throw new Error(`ATXPAccount: /address_for_payment failed: ${response.status} ${response.statusText} ${text}`);
|
|
45
|
+
}
|
|
46
|
+
const json = await response.json();
|
|
47
|
+
if (!json?.sourceAddress) {
|
|
48
|
+
throw new Error('ATXPAccount: /address_for_payment did not return sourceAddress');
|
|
49
|
+
}
|
|
50
|
+
return json.sourceAddress;
|
|
51
|
+
}
|
|
52
|
+
async makePayment(destinations, memo, paymentRequestId) {
|
|
53
|
+
// Make a payment via the /pay endpoint with multiple destinations
|
|
27
54
|
const response = await this.fetchFn(`${this.origin}/pay`, {
|
|
28
55
|
method: 'POST',
|
|
29
56
|
headers: {
|
|
@@ -31,10 +58,14 @@ class ATXPHttpPaymentMaker {
|
|
|
31
58
|
'Content-Type': 'application/json',
|
|
32
59
|
},
|
|
33
60
|
body: JSON.stringify({
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
61
|
+
destinations: destinations.map(d => ({
|
|
62
|
+
chain: d.chain,
|
|
63
|
+
address: d.address,
|
|
64
|
+
amount: d.amount.toString(),
|
|
65
|
+
currency: d.currency
|
|
66
|
+
})),
|
|
37
67
|
memo,
|
|
68
|
+
...(paymentRequestId && { paymentRequestId })
|
|
38
69
|
}),
|
|
39
70
|
});
|
|
40
71
|
if (!response.ok) {
|
|
@@ -42,10 +73,22 @@ class ATXPHttpPaymentMaker {
|
|
|
42
73
|
throw new Error(`ATXPAccount: /pay failed: ${response.status} ${response.statusText} ${text}`);
|
|
43
74
|
}
|
|
44
75
|
const json = await response.json();
|
|
45
|
-
|
|
46
|
-
|
|
76
|
+
const transactionId = json.transactionId;
|
|
77
|
+
if (!transactionId) {
|
|
78
|
+
throw new Error('ATXPAccount: /pay did not return transactionId or txHash');
|
|
47
79
|
}
|
|
48
|
-
|
|
80
|
+
if (!json?.chain) {
|
|
81
|
+
throw new Error('ATXPAccount: /pay did not return chain');
|
|
82
|
+
}
|
|
83
|
+
if (!json?.currency) {
|
|
84
|
+
throw new Error('ATXPAccount: /pay did not return currency');
|
|
85
|
+
}
|
|
86
|
+
return {
|
|
87
|
+
transactionId,
|
|
88
|
+
...(json.transactionSubId ? { transactionSubId: json.transactionSubId } : {}),
|
|
89
|
+
chain: json.chain,
|
|
90
|
+
currency: json.currency
|
|
91
|
+
};
|
|
49
92
|
}
|
|
50
93
|
async generateJWT(params) {
|
|
51
94
|
const response = await this.fetchFn(`${this.origin}/sign`, {
|
|
@@ -57,6 +100,7 @@ class ATXPHttpPaymentMaker {
|
|
|
57
100
|
body: JSON.stringify({
|
|
58
101
|
paymentRequestId: params.paymentRequestId,
|
|
59
102
|
codeChallenge: params.codeChallenge,
|
|
103
|
+
...(params.accountId ? { accountId: params.accountId } : {}),
|
|
60
104
|
}),
|
|
61
105
|
});
|
|
62
106
|
if (!response.ok) {
|
|
@@ -74,24 +118,43 @@ class ATXPAccount {
|
|
|
74
118
|
constructor(connectionString, opts) {
|
|
75
119
|
const { origin, token, accountId } = parseConnectionString(connectionString);
|
|
76
120
|
const fetchFn = opts?.fetchFn ?? fetch;
|
|
77
|
-
const network = opts?.network ?? 'base';
|
|
78
121
|
// Store for use in X402 payment creation
|
|
79
122
|
this.origin = origin;
|
|
80
123
|
this.token = token;
|
|
81
124
|
this.fetchFn = fetchFn;
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
[network]: new ATXPHttpPaymentMaker(origin, token, fetchFn),
|
|
90
|
-
};
|
|
125
|
+
// Format accountId as network:address
|
|
126
|
+
// Connection string provides just the atxp_acct_xxx part (no prefix for UI)
|
|
127
|
+
this.unqualifiedAccountId = accountId;
|
|
128
|
+
this.accountId = `atxp:${accountId}`;
|
|
129
|
+
this.paymentMakers = [
|
|
130
|
+
new ATXPHttpPaymentMaker(origin, token, fetchFn)
|
|
131
|
+
];
|
|
91
132
|
}
|
|
92
133
|
async getSigner() {
|
|
93
134
|
return ATXPLocalAccount.create(this.origin, this.token, this.fetchFn);
|
|
94
135
|
}
|
|
136
|
+
/**
|
|
137
|
+
* Get sources for this account by calling the accounts service
|
|
138
|
+
*/
|
|
139
|
+
async getSources() {
|
|
140
|
+
// Use the unqualified account ID (without atxp: prefix) for the API call
|
|
141
|
+
const response = await this.fetchFn(`${this.origin}/account/${this.unqualifiedAccountId}/sources`, {
|
|
142
|
+
method: 'GET',
|
|
143
|
+
headers: {
|
|
144
|
+
'Accept': 'application/json',
|
|
145
|
+
}
|
|
146
|
+
});
|
|
147
|
+
if (!response.ok) {
|
|
148
|
+
const text = await response.text();
|
|
149
|
+
throw new Error(`ATXPAccount: /account/${this.unqualifiedAccountId}/sources failed: ${response.status} ${response.statusText} ${text}`);
|
|
150
|
+
}
|
|
151
|
+
const json = await response.json();
|
|
152
|
+
// The accounts service returns the sources array directly, not wrapped in an object
|
|
153
|
+
if (!Array.isArray(json)) {
|
|
154
|
+
throw new Error(`ATXPAccount: /account/${this.unqualifiedAccountId}/sources did not return sources array`);
|
|
155
|
+
}
|
|
156
|
+
return json;
|
|
157
|
+
}
|
|
95
158
|
}
|
|
96
159
|
|
|
97
160
|
export { ATXPAccount };
|
package/dist/atxpAccount.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"atxpAccount.js","sources":["../src/atxpAccount.ts"],"sourcesContent":[null],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"atxpAccount.js","sources":["../src/atxpAccount.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { ClientConfig, ClientArgs } from "./types.js";
|
|
2
|
+
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
|
|
3
|
+
import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js';
|
|
4
|
+
type RequiredClientConfigFields = 'mcpServer' | 'account';
|
|
5
|
+
type OptionalClientConfig = Omit<ClientConfig, RequiredClientConfigFields>;
|
|
6
|
+
type BuildableClientConfigFields = 'oAuthDb' | 'logger' | 'destinationMakers';
|
|
7
|
+
export declare const DEFAULT_CLIENT_CONFIG: Required<Omit<OptionalClientConfig, BuildableClientConfigFields>>;
|
|
8
|
+
export declare function buildClientConfig(args: ClientArgs): ClientConfig;
|
|
9
|
+
export declare function buildStreamableTransport(args: ClientArgs): StreamableHTTPClientTransport;
|
|
10
|
+
export declare function atxpClient(args: ClientArgs): Promise<Client>;
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=atxpClient.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"atxpClient.d.ts","sourceRoot":"","sources":["../src/atxpClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAGtD,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,6BAA6B,EAAE,MAAM,oDAAoD,CAAC;AAKnG,KAAK,0BAA0B,GAAG,WAAW,GAAG,SAAS,CAAC;AAC1D,KAAK,oBAAoB,GAAG,IAAI,CAAC,YAAY,EAAE,0BAA0B,CAAC,CAAC;AAC3E,KAAK,2BAA2B,GAAG,SAAS,GAAG,QAAQ,GAAG,mBAAmB,CAAC;AAY9E,eAAO,MAAM,qBAAqB,EAAE,QAAQ,CAAC,IAAI,CAAC,oBAAoB,EAAE,2BAA2B,CAAC,CAkBnG,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,UAAU,GAAG,YAAY,CA8BhE;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,UAAU,GAAG,6BAA6B,CAQxF;AAED,wBAAsB,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAQlE"}
|
package/dist/atxpClient.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
import { DEFAULT_AUTHORIZATION_SERVER, ConsoleLogger, MemoryOAuthDb } from '@atxp/common';
|
|
1
|
+
import { DEFAULT_ATXP_ACCOUNTS_SERVER, DEFAULT_AUTHORIZATION_SERVER, ConsoleLogger, MemoryOAuthDb } from '@atxp/common';
|
|
2
2
|
import { atxpFetch } from './atxpFetcher.js';
|
|
3
3
|
import { Client } from './node_modules/@modelcontextprotocol/sdk/dist/esm/client/index.js';
|
|
4
4
|
import { StreamableHTTPClientTransport } from './node_modules/@modelcontextprotocol/sdk/dist/esm/client/streamableHttp.js';
|
|
5
|
+
import { createDestinationMakers } from './destinationMakers/index.js';
|
|
6
|
+
import { ATXPAccount } from './atxpAccount.js';
|
|
5
7
|
|
|
6
8
|
// Detect if we're in a browser environment and bind fetch appropriately
|
|
7
9
|
const getFetch = () => {
|
|
@@ -14,6 +16,7 @@ const getFetch = () => {
|
|
|
14
16
|
};
|
|
15
17
|
const DEFAULT_CLIENT_CONFIG = {
|
|
16
18
|
allowedAuthorizationServers: [DEFAULT_AUTHORIZATION_SERVER],
|
|
19
|
+
atxpAccountsServer: DEFAULT_ATXP_ACCOUNTS_SERVER,
|
|
17
20
|
approvePayment: async (_p) => true,
|
|
18
21
|
fetchFn: getFetch(),
|
|
19
22
|
oAuthChannelFetch: getFetch(),
|
|
@@ -43,7 +46,20 @@ function buildClientConfig(args) {
|
|
|
43
46
|
const withDefaults = { ...envDefaults, ...args };
|
|
44
47
|
const logger = withDefaults.logger ?? new ConsoleLogger();
|
|
45
48
|
const oAuthDb = withDefaults.oAuthDb ?? new MemoryOAuthDb({ logger });
|
|
46
|
-
const
|
|
49
|
+
const fetchFn = withDefaults.fetchFn;
|
|
50
|
+
// Build destination makers if not provided
|
|
51
|
+
let accountsServer = withDefaults.atxpAccountsServer;
|
|
52
|
+
// QoL hack for unspecified accounts server - if the caller is passing an atxpAccount, then assume the origin for that
|
|
53
|
+
// is what we should use for the accounts server. In practice, the only option is accounts.atxp.ai,
|
|
54
|
+
// but this supports staging environment
|
|
55
|
+
if (args.atxpAccountsServer === undefined && withDefaults.account && withDefaults.account instanceof ATXPAccount) {
|
|
56
|
+
accountsServer = withDefaults.account.origin;
|
|
57
|
+
}
|
|
58
|
+
const destinationMakers = withDefaults.destinationMakers ?? createDestinationMakers({
|
|
59
|
+
atxpAccountsServer: accountsServer,
|
|
60
|
+
fetchFn
|
|
61
|
+
});
|
|
62
|
+
const built = { oAuthDb, logger, destinationMakers };
|
|
47
63
|
return Object.freeze({ ...withDefaults, ...built });
|
|
48
64
|
}
|
|
49
65
|
function buildStreamableTransport(args) {
|
package/dist/atxpClient.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"atxpClient.js","sources":["../src/atxpClient.ts"],"sourcesContent":[null],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"atxpClient.js","sources":["../src/atxpClient.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { OAuthAuthenticationRequiredError, OAuthClient } from './oAuth.js';
|
|
2
|
+
import { AccessToken, AuthorizationServerUrl, FetchLike, OAuthDb, PaymentRequestData, Logger, Network, DestinationMaker, Account } from '@atxp/common';
|
|
3
|
+
import type { PaymentMaker, ProspectivePayment, ClientConfig } from './types.js';
|
|
4
|
+
import { McpError } from '@modelcontextprotocol/sdk/types.js';
|
|
5
|
+
/**
|
|
6
|
+
* Creates an ATXP fetch wrapper that handles OAuth authentication and payments.
|
|
7
|
+
* This follows the wrapper pattern for fetch functions.
|
|
8
|
+
*
|
|
9
|
+
* @param config - The client configuration
|
|
10
|
+
* @returns A wrapped fetch function that handles ATXP protocol
|
|
11
|
+
*/
|
|
12
|
+
export declare function atxpFetch(config: ClientConfig): FetchLike;
|
|
13
|
+
export declare class ATXPFetcher {
|
|
14
|
+
protected oauthClient: OAuthClient;
|
|
15
|
+
protected account: Account;
|
|
16
|
+
protected destinationMakers: Map<Network, DestinationMaker>;
|
|
17
|
+
protected sideChannelFetch: FetchLike;
|
|
18
|
+
protected db: OAuthDb;
|
|
19
|
+
protected allowedAuthorizationServers: AuthorizationServerUrl[];
|
|
20
|
+
protected approvePayment: (payment: ProspectivePayment) => Promise<boolean>;
|
|
21
|
+
protected logger: Logger;
|
|
22
|
+
protected onAuthorize: (args: {
|
|
23
|
+
authorizationServer: AuthorizationServerUrl;
|
|
24
|
+
userId: string;
|
|
25
|
+
}) => Promise<void>;
|
|
26
|
+
protected onAuthorizeFailure: (args: {
|
|
27
|
+
authorizationServer: AuthorizationServerUrl;
|
|
28
|
+
userId: string;
|
|
29
|
+
error: Error;
|
|
30
|
+
}) => Promise<void>;
|
|
31
|
+
protected onPayment: (args: {
|
|
32
|
+
payment: ProspectivePayment;
|
|
33
|
+
}) => Promise<void>;
|
|
34
|
+
protected onPaymentFailure: (args: {
|
|
35
|
+
payment: ProspectivePayment;
|
|
36
|
+
error: Error;
|
|
37
|
+
}) => Promise<void>;
|
|
38
|
+
constructor(config: {
|
|
39
|
+
account: Account;
|
|
40
|
+
db: OAuthDb;
|
|
41
|
+
destinationMakers: Map<Network, DestinationMaker>;
|
|
42
|
+
fetchFn?: FetchLike;
|
|
43
|
+
sideChannelFetch?: FetchLike;
|
|
44
|
+
strict?: boolean;
|
|
45
|
+
allowInsecureRequests?: boolean;
|
|
46
|
+
allowedAuthorizationServers?: AuthorizationServerUrl[];
|
|
47
|
+
approvePayment?: (payment: ProspectivePayment) => Promise<boolean>;
|
|
48
|
+
logger?: Logger;
|
|
49
|
+
onAuthorize?: (args: {
|
|
50
|
+
authorizationServer: AuthorizationServerUrl;
|
|
51
|
+
userId: string;
|
|
52
|
+
}) => Promise<void>;
|
|
53
|
+
onAuthorizeFailure?: (args: {
|
|
54
|
+
authorizationServer: AuthorizationServerUrl;
|
|
55
|
+
userId: string;
|
|
56
|
+
error: Error;
|
|
57
|
+
}) => Promise<void>;
|
|
58
|
+
onPayment?: (args: {
|
|
59
|
+
payment: ProspectivePayment;
|
|
60
|
+
}) => Promise<void>;
|
|
61
|
+
onPaymentFailure?: (args: {
|
|
62
|
+
payment: ProspectivePayment;
|
|
63
|
+
error: Error;
|
|
64
|
+
}) => Promise<void>;
|
|
65
|
+
});
|
|
66
|
+
private defaultPaymentFailureHandler;
|
|
67
|
+
protected handleMultiDestinationPayment: (paymentRequestData: PaymentRequestData, paymentRequestUrl: string, paymentRequestId: string) => Promise<boolean>;
|
|
68
|
+
protected handlePaymentRequestError: (paymentRequestError: McpError) => Promise<boolean>;
|
|
69
|
+
protected getPaymentRequestData: (paymentRequestUrl: string) => Promise<PaymentRequestData | null>;
|
|
70
|
+
protected isAllowedAuthServer: (url: string | URL) => boolean;
|
|
71
|
+
protected makeAuthRequestWithPaymentMaker: (authorizationUrl: URL, paymentMaker: PaymentMaker) => Promise<string>;
|
|
72
|
+
protected authToService: (error: OAuthAuthenticationRequiredError) => Promise<void>;
|
|
73
|
+
protected exchangeToken: (myToken: AccessToken, newResourceUrl: string) => Promise<AccessToken>;
|
|
74
|
+
protected checkForATXPResponse: (response: Response) => Promise<void>;
|
|
75
|
+
fetch: FetchLike;
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=atxpFetcher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"atxpFetcher.d.ts","sourceRoot":"","sources":["../src/atxpFetcher.ts"],"names":[],"mappings":"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"}
|