@ampersend_ai/ampersend-sdk 0.0.19 → 0.0.21
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/ampersend/client.d.ts +4 -9
- package/dist/ampersend/client.d.ts.map +1 -1
- package/dist/ampersend/client.js +25 -21
- package/dist/ampersend/client.js.map +1 -1
- package/dist/ampersend/treasurer.d.ts +14 -79
- package/dist/ampersend/treasurer.d.ts.map +1 -1
- package/dist/ampersend/treasurer.js +34 -102
- package/dist/ampersend/treasurer.js.map +1 -1
- package/dist/ampersend/types.d.ts +342 -336
- package/dist/ampersend/types.d.ts.map +1 -1
- package/dist/ampersend/types.js +110 -149
- package/dist/ampersend/types.js.map +1 -1
- package/dist/ampersend/zod-bridge.d.ts +15 -0
- package/dist/ampersend/zod-bridge.d.ts.map +1 -0
- package/dist/ampersend/zod-bridge.js +29 -0
- package/dist/ampersend/zod-bridge.js.map +1 -0
- package/dist/cli/commands/fetch.d.ts.map +1 -1
- package/dist/cli/commands/fetch.js.map +1 -1
- package/dist/cli/commands/setup.d.ts.map +1 -1
- package/dist/cli/commands/setup.js +6 -1
- package/dist/cli/commands/setup.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/mcp/client/client.d.ts +0 -3
- package/dist/mcp/client/client.d.ts.map +1 -1
- package/dist/mcp/client/client.js +10 -14
- package/dist/mcp/client/client.js.map +1 -1
- package/dist/mcp/client/factory.d.ts +0 -2
- package/dist/mcp/client/factory.d.ts.map +1 -1
- package/dist/mcp/client/factory.js +0 -3
- package/dist/mcp/client/factory.js.map +1 -1
- package/dist/mcp/client/middleware.d.ts +0 -3
- package/dist/mcp/client/middleware.d.ts.map +1 -1
- package/dist/mcp/client/middleware.js +9 -12
- package/dist/mcp/client/middleware.js.map +1 -1
- package/dist/mcp/client/protocol.d.ts +81 -85
- package/dist/mcp/client/protocol.d.ts.map +1 -1
- package/dist/mcp/client/protocol.js +17 -15
- package/dist/mcp/client/protocol.js.map +1 -1
- package/dist/mcp/client/types.d.ts +6 -19
- package/dist/mcp/client/types.d.ts.map +1 -1
- package/dist/mcp/proxy/cli.d.ts.map +1 -1
- package/dist/mcp/proxy/cli.js +0 -1
- package/dist/mcp/proxy/cli.js.map +1 -1
- package/dist/mcp/proxy/env.d.ts +0 -9
- package/dist/mcp/proxy/env.d.ts.map +1 -1
- package/dist/mcp/proxy/env.js +0 -2
- package/dist/mcp/proxy/env.js.map +1 -1
- package/dist/mcp/proxy/factory.d.ts +0 -2
- package/dist/mcp/proxy/factory.d.ts.map +1 -1
- package/dist/mcp/proxy/factory.js +0 -3
- package/dist/mcp/proxy/factory.js.map +1 -1
- package/dist/mcp/server/fastmcp/middleware.d.ts +9 -29
- package/dist/mcp/server/fastmcp/middleware.d.ts.map +1 -1
- package/dist/mcp/server/fastmcp/middleware.js +10 -42
- package/dist/mcp/server/fastmcp/middleware.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/x402/envelopes.d.ts +62 -0
- package/dist/x402/envelopes.d.ts.map +1 -0
- package/dist/x402/envelopes.js +73 -0
- package/dist/x402/envelopes.js.map +1 -0
- package/dist/x402/http/client.d.ts +37 -0
- package/dist/x402/http/client.d.ts.map +1 -0
- package/dist/x402/http/client.js +159 -0
- package/dist/x402/http/client.js.map +1 -0
- package/dist/x402/http/factory.d.ts +11 -25
- package/dist/x402/http/factory.d.ts.map +1 -1
- package/dist/x402/http/factory.js +11 -22
- package/dist/x402/http/factory.js.map +1 -1
- package/dist/x402/http/index.d.ts +4 -1
- package/dist/x402/http/index.d.ts.map +1 -1
- package/dist/x402/http/index.js +2 -1
- package/dist/x402/http/index.js.map +1 -1
- package/dist/x402/index.d.ts +4 -1
- package/dist/x402/index.d.ts.map +1 -1
- package/dist/x402/index.js +3 -2
- package/dist/x402/index.js.map +1 -1
- package/dist/x402/treasurer.d.ts +22 -47
- package/dist/x402/treasurer.d.ts.map +1 -1
- package/dist/x402/treasurers/naive.d.ts +4 -40
- package/dist/x402/treasurers/naive.d.ts.map +1 -1
- package/dist/x402/treasurers/naive.js +7 -44
- package/dist/x402/treasurers/naive.js.map +1 -1
- package/dist/x402/wallet.d.ts +7 -32
- package/dist/x402/wallet.d.ts.map +1 -1
- package/dist/x402/wallet.js +0 -3
- package/dist/x402/wallet.js.map +1 -1
- package/dist/x402/wallets/account/wallet.d.ts +9 -30
- package/dist/x402/wallets/account/wallet.d.ts.map +1 -1
- package/dist/x402/wallets/account/wallet.js +30 -37
- package/dist/x402/wallets/account/wallet.js.map +1 -1
- package/dist/x402/wallets/index.d.ts +0 -1
- package/dist/x402/wallets/index.d.ts.map +1 -1
- package/dist/x402/wallets/index.js +0 -1
- package/dist/x402/wallets/index.js.map +1 -1
- package/dist/x402/wallets/smart-account/chain.d.ts +4 -0
- package/dist/x402/wallets/smart-account/chain.d.ts.map +1 -0
- package/dist/x402/wallets/smart-account/chain.js +12 -0
- package/dist/x402/wallets/smart-account/chain.js.map +1 -0
- package/dist/x402/wallets/smart-account/cosigned.d.ts +7 -33
- package/dist/x402/wallets/smart-account/cosigned.d.ts.map +1 -1
- package/dist/x402/wallets/smart-account/cosigned.js +28 -51
- package/dist/x402/wallets/smart-account/cosigned.js.map +1 -1
- package/dist/x402/wallets/smart-account/exact.d.ts +6 -20
- package/dist/x402/wallets/smart-account/exact.d.ts.map +1 -1
- package/dist/x402/wallets/smart-account/exact.js +33 -43
- package/dist/x402/wallets/smart-account/exact.js.map +1 -1
- package/dist/x402/wallets/smart-account/wallet.d.ts +6 -39
- package/dist/x402/wallets/smart-account/wallet.d.ts.map +1 -1
- package/dist/x402/wallets/smart-account/wallet.js +9 -36
- package/dist/x402/wallets/smart-account/wallet.js.map +1 -1
- package/package.json +4 -4
- package/dist/x402/http/adapter.d.ts +0 -38
- package/dist/x402/http/adapter.d.ts.map +0 -1
- package/dist/x402/http/adapter.js +0 -193
- package/dist/x402/http/adapter.js.map +0 -1
- package/dist/x402/http/v2-adapter.d.ts +0 -56
- package/dist/x402/http/v2-adapter.d.ts.map +0 -1
- package/dist/x402/http/v2-adapter.js +0 -94
- package/dist/x402/http/v2-adapter.js.map +0 -1
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import
|
|
1
|
+
import type { PaymentAuthorization, PaymentRequest } from "../x402/envelopes.ts";
|
|
2
|
+
import { AgentAuthorizeRequest, AgentAuthorizeResponse, AgentPaymentEventResponse, type Address, type ApiClientOptions, type PaymentEvent } from "./types.js";
|
|
2
3
|
export * from "./types.js";
|
|
3
4
|
/**
|
|
4
5
|
* TypeScript SDK for the API
|
|
@@ -18,14 +19,8 @@ export declare class ApiClient {
|
|
|
18
19
|
* Internal method to perform authentication without mutex (for use within mutex)
|
|
19
20
|
*/
|
|
20
21
|
private performAuthentication;
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
*/
|
|
24
|
-
authorizePayment(requirements: readonly [PaymentRequirements, ...Array<PaymentRequirements>], context?: AgentPaymentAuthRequest["context"]): Promise<AgentPaymentAuthResponse>;
|
|
25
|
-
/**
|
|
26
|
-
* Report a payment lifecycle event
|
|
27
|
-
*/
|
|
28
|
-
reportPaymentEvent(eventId: string, payment: PaymentPayload, event: PaymentEvent): Promise<AgentPaymentEventResponse>;
|
|
22
|
+
authorizePayment(paymentRequest: PaymentRequest, context?: AgentAuthorizeRequest["context"]): Promise<typeof AgentAuthorizeResponse.Type>;
|
|
23
|
+
reportPaymentEvent(eventId: string, payment: PaymentAuthorization, event: PaymentEvent): Promise<AgentPaymentEventResponse>;
|
|
29
24
|
/**
|
|
30
25
|
* Clear the current authentication state
|
|
31
26
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/ampersend/client.ts"],"names":[],"mappings":"AAKA,OAAO,
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/ampersend/client.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAChF,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EAEtB,yBAAyB,EAIzB,KAAK,OAAO,EACZ,KAAK,gBAAgB,EAErB,KAAK,YAAY,EAElB,MAAM,YAAY,CAAA;AAEnB,cAAc,YAAY,CAAA;AAE1B;;;;;GAKG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,oBAAoB,CAA2B;IACvD,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,SAAS,CAAc;IAC/B,OAAO,CAAC,IAAI,CAGX;gBAEW,OAAO,EAAE,gBAAgB;IAOrC;;OAEG;YACW,qBAAqB;IAmE7B,gBAAgB,CACpB,cAAc,EAAE,cAAc,EAC9B,OAAO,CAAC,EAAE,qBAAqB,CAAC,SAAS,CAAC,GACzC,OAAO,CAAC,OAAO,sBAAsB,CAAC,IAAI,CAAC;IAoCxC,kBAAkB,CACtB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,oBAAoB,EAC7B,KAAK,EAAE,YAAY,GAClB,OAAO,CAAC,yBAAyB,CAAC;IAoBrC;;OAEG;IACH,SAAS,IAAI,IAAI;IAOjB;;OAEG;IACH,eAAe,IAAI,OAAO;IAI1B;;OAEG;IACH,eAAe,IAAI,OAAO;IAI1B;;OAEG;YACW,mBAAmB;IAQjC;;OAEG;YACW,KAAK;CAkCpB"}
|
package/dist/ampersend/client.js
CHANGED
|
@@ -2,7 +2,7 @@ import { Mutex } from "async-mutex";
|
|
|
2
2
|
import { DateTime, Schema } from "effect";
|
|
3
3
|
import { SiweMessage } from "siwe";
|
|
4
4
|
import { privateKeyToAccount } from "viem/accounts";
|
|
5
|
-
import {
|
|
5
|
+
import { AgentAuthorizeRequest, AgentAuthorizeResponse, AgentPaymentEventReport, AgentPaymentEventResponse, ApiError, SIWELoginResponse, SIWENonceResponse, } from "./types.js";
|
|
6
6
|
export * from "./types.js";
|
|
7
7
|
/**
|
|
8
8
|
* TypeScript SDK for the API
|
|
@@ -84,41 +84,45 @@ export class ApiClient {
|
|
|
84
84
|
throw new ApiError(`Authentication failed: ${error}`);
|
|
85
85
|
}
|
|
86
86
|
}
|
|
87
|
-
|
|
88
|
-
* Request authorization for a payment
|
|
89
|
-
*/
|
|
90
|
-
async authorizePayment(requirements, context) {
|
|
87
|
+
async authorizePayment(paymentRequest, context) {
|
|
91
88
|
await this.ensureAuthenticated();
|
|
92
|
-
const request = {
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
};
|
|
96
|
-
return this.fetch(`/api/v1/agents/${this.agentAddress}/payment/authorize`, {
|
|
89
|
+
const request = { paymentRequest, context };
|
|
90
|
+
const wireBody = Schema.encodeSync(AgentAuthorizeRequest)(request);
|
|
91
|
+
const response = await this.fetch(`/api/v1/agents/${this.agentAddress}/payment/authorize`, {
|
|
97
92
|
method: "POST",
|
|
98
93
|
headers: {
|
|
99
94
|
"Content-Type": "application/json",
|
|
100
95
|
Authorization: `Bearer ${this.auth.token}`,
|
|
101
96
|
},
|
|
102
|
-
body: JSON.stringify(
|
|
103
|
-
},
|
|
97
|
+
body: JSON.stringify(wireBody),
|
|
98
|
+
}, AgentAuthorizeResponse);
|
|
99
|
+
// A bad acceptsIndex from the server would silently point the wallet at
|
|
100
|
+
// the wrong line-item. Catch it here rather than letting it fall through.
|
|
101
|
+
const acceptsLen = paymentRequest.data.accepts.length;
|
|
102
|
+
const checkIndex = (idx, where) => {
|
|
103
|
+
if (!Number.isInteger(idx) || idx < 0 || idx >= acceptsLen) {
|
|
104
|
+
throw new ApiError(`authorize response: ${where} acceptsIndex=${idx} out of bounds (accepts.length=${acceptsLen})`);
|
|
105
|
+
}
|
|
106
|
+
};
|
|
107
|
+
if (response.authorized.selected)
|
|
108
|
+
checkIndex(response.authorized.selected.acceptsIndex, "selected");
|
|
109
|
+
for (const alt of response.authorized.alternatives)
|
|
110
|
+
checkIndex(alt.acceptsIndex, "alternatives");
|
|
111
|
+
for (const rej of response.rejected)
|
|
112
|
+
checkIndex(rej.acceptsIndex, "rejected");
|
|
113
|
+
return response;
|
|
104
114
|
}
|
|
105
|
-
/**
|
|
106
|
-
* Report a payment lifecycle event
|
|
107
|
-
*/
|
|
108
115
|
async reportPaymentEvent(eventId, payment, event) {
|
|
109
116
|
await this.ensureAuthenticated();
|
|
110
|
-
const report = {
|
|
111
|
-
|
|
112
|
-
payment,
|
|
113
|
-
event,
|
|
114
|
-
};
|
|
117
|
+
const report = { id: eventId, payment, event };
|
|
118
|
+
const wireBody = Schema.encodeSync(AgentPaymentEventReport)(report);
|
|
115
119
|
return this.fetch(`/api/v1/agents/${this.agentAddress}/payment/events`, {
|
|
116
120
|
method: "POST",
|
|
117
121
|
headers: {
|
|
118
122
|
"Content-Type": "application/json",
|
|
119
123
|
Authorization: `Bearer ${this.auth.token}`,
|
|
120
124
|
},
|
|
121
|
-
body: JSON.stringify(
|
|
125
|
+
body: JSON.stringify(wireBody),
|
|
122
126
|
}, AgentPaymentEventResponse);
|
|
123
127
|
}
|
|
124
128
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/ampersend/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,MAAM,CAAA;AAClC,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/ampersend/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,115 +1,50 @@
|
|
|
1
1
|
import type { Address, Hex } from "viem";
|
|
2
|
-
import type
|
|
2
|
+
import { type PaymentRequest } from "../x402/envelopes.ts";
|
|
3
3
|
import { type Authorization, type PaymentContext, type PaymentStatus, type WalletConfig, type X402Treasurer, type X402Wallet } from "../x402/index.ts";
|
|
4
4
|
import { ApiClient } from "./client.ts";
|
|
5
|
-
/**
|
|
6
|
-
* Simplified configuration for quick setup with smart accounts.
|
|
7
|
-
* This is the recommended way to configure the treasurer for most use cases.
|
|
8
|
-
*
|
|
9
|
-
* @example
|
|
10
|
-
* ```typescript
|
|
11
|
-
* const treasurer = createAmpersendTreasurer({
|
|
12
|
-
* smartAccountAddress: "0x...",
|
|
13
|
-
* sessionKeyPrivateKey: "0x...",
|
|
14
|
-
* })
|
|
15
|
-
* ```
|
|
16
|
-
*/
|
|
5
|
+
/** Simplified config for the common "smart account + session key" setup. */
|
|
17
6
|
export interface SimpleAmpersendTreasurerConfig {
|
|
18
|
-
/** Smart account address */
|
|
19
7
|
smartAccountAddress: Address;
|
|
20
|
-
/** Session key private key for signing */
|
|
21
8
|
sessionKeyPrivateKey: Hex;
|
|
22
|
-
/**
|
|
9
|
+
/** Defaults to the production Ampersend API. */
|
|
23
10
|
apiUrl?: string;
|
|
24
|
-
/** Chain ID (defaults to Base mainnet 8453) */
|
|
25
|
-
chainId?: number;
|
|
26
11
|
}
|
|
27
|
-
/**
|
|
28
|
-
* Full configuration for advanced use cases with complete wallet control.
|
|
29
|
-
* Use this when you need EOA wallets or custom authentication settings.
|
|
30
|
-
*/
|
|
12
|
+
/** Full config for EOA wallets or custom SIWE auth. */
|
|
31
13
|
export interface FullAmpersendTreasurerConfig {
|
|
32
|
-
/** Base URL of the Ampersend API server */
|
|
33
14
|
apiUrl: string;
|
|
34
|
-
/** Wallet configuration (EOA or Smart Account) */
|
|
35
15
|
walletConfig: WalletConfig;
|
|
36
|
-
/** Optional authentication configuration */
|
|
37
16
|
authConfig?: {
|
|
38
|
-
/** SIWE domain
|
|
17
|
+
/** SIWE domain. */
|
|
39
18
|
domain?: string;
|
|
40
|
-
/** SIWE statement
|
|
19
|
+
/** SIWE statement. */
|
|
41
20
|
statement?: string;
|
|
42
21
|
};
|
|
43
22
|
}
|
|
44
|
-
/**
|
|
45
|
-
* Configuration for the Ampersend treasurer.
|
|
46
|
-
* Can be either simplified (recommended) or full configuration.
|
|
47
|
-
*/
|
|
48
23
|
export type AmpersendTreasurerConfig = SimpleAmpersendTreasurerConfig | FullAmpersendTreasurerConfig;
|
|
49
24
|
/**
|
|
50
|
-
*
|
|
51
|
-
*
|
|
52
|
-
* This treasurer:
|
|
53
|
-
* 1. Authenticates with the Ampersend API using SIWE
|
|
54
|
-
* 2. Requests payment authorization from the API before creating payments
|
|
55
|
-
* 3. Creates payments only when authorized by the API
|
|
56
|
-
* 4. Reports payment lifecycle events back to the API for tracking
|
|
57
|
-
*
|
|
58
|
-
* @example
|
|
59
|
-
* ```typescript
|
|
60
|
-
* const treasurer = createAmpersendTreasurer({
|
|
61
|
-
* apiUrl: "https://api.example.com",
|
|
62
|
-
* walletConfig: { type: "eoa", privateKey: "0x..." }
|
|
63
|
-
* })
|
|
64
|
-
* await initializeProxyServer({ transport, treasurer })
|
|
65
|
-
* ```
|
|
25
|
+
* Forwards the 402 to the Ampersend API, which applies budget/policy and
|
|
26
|
+
* returns an `acceptsIndex` to sign (plus optional co-signature).
|
|
66
27
|
*/
|
|
67
28
|
export declare class AmpersendTreasurer implements X402Treasurer {
|
|
68
29
|
private apiClient;
|
|
69
30
|
private wallet;
|
|
70
31
|
constructor(apiClient: ApiClient, wallet: X402Wallet);
|
|
71
|
-
|
|
72
|
-
* Requests payment authorization from API before creating payment.
|
|
73
|
-
* Only creates payment if API authorizes it.
|
|
74
|
-
*/
|
|
75
|
-
onPaymentRequired(requirements: ReadonlyArray<PaymentRequirements>, context?: PaymentContext): Promise<Authorization | null>;
|
|
76
|
-
/**
|
|
77
|
-
* Reports payment status updates back to API for tracking.
|
|
78
|
-
* Logs errors but doesn't fail on tracking errors.
|
|
79
|
-
*/
|
|
32
|
+
onPaymentRequired(request: PaymentRequest, context?: PaymentContext): Promise<Authorization | null>;
|
|
80
33
|
onStatus(status: PaymentStatus, authorization: Authorization, _context?: PaymentContext): Promise<void>;
|
|
81
|
-
/**
|
|
82
|
-
* Maps X402 PaymentStatus to legacy PaymentEvent for API compatibility
|
|
83
|
-
*/
|
|
84
34
|
private mapStatusToEvent;
|
|
85
35
|
}
|
|
86
36
|
/**
|
|
87
|
-
*
|
|
88
|
-
*
|
|
89
|
-
* This treasurer:
|
|
90
|
-
* 1. Authenticates with the Ampersend API using SIWE
|
|
91
|
-
* 2. Requests payment authorization from the API
|
|
92
|
-
* 3. Creates payments only when authorized
|
|
93
|
-
* 4. Reports payment lifecycle events back to the API
|
|
94
|
-
*
|
|
95
|
-
* @example Simple setup (recommended):
|
|
37
|
+
* @example Simple (recommended):
|
|
96
38
|
* ```typescript
|
|
97
|
-
*
|
|
98
|
-
* smartAccountAddress: "0x...",
|
|
99
|
-
* sessionKeyPrivateKey: "0x...",
|
|
100
|
-
* })
|
|
39
|
+
* createAmpersendTreasurer({ smartAccountAddress: "0x...", sessionKeyPrivateKey: "0x..." })
|
|
101
40
|
* ```
|
|
102
|
-
*
|
|
103
|
-
* @example Full control:
|
|
41
|
+
* @example Full (EOA or custom auth):
|
|
104
42
|
* ```typescript
|
|
105
|
-
*
|
|
43
|
+
* createAmpersendTreasurer({
|
|
106
44
|
* apiUrl: "https://api.ampersend.ai",
|
|
107
|
-
* walletConfig: { type: "eoa", privateKey: "0x..." }
|
|
45
|
+
* walletConfig: { type: "eoa", privateKey: "0x..." },
|
|
108
46
|
* })
|
|
109
47
|
* ```
|
|
110
|
-
*
|
|
111
|
-
* @param config - Configuration for the Ampersend treasurer
|
|
112
|
-
* @returns An X402Treasurer implementation
|
|
113
48
|
*/
|
|
114
49
|
export declare function createAmpersendTreasurer(config: AmpersendTreasurerConfig): X402Treasurer;
|
|
115
50
|
//# sourceMappingURL=treasurer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"treasurer.d.ts","sourceRoot":"","sources":["../../src/ampersend/treasurer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"treasurer.d.ts","sourceRoot":"","sources":["../../src/ampersend/treasurer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,MAAM,CAAA;AAIxC,OAAO,EAAsD,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAC9G,OAAO,EAEL,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,aAAa,EAElB,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,UAAU,EAChB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAKvC,4EAA4E;AAC5E,MAAM,WAAW,8BAA8B;IAC7C,mBAAmB,EAAE,OAAO,CAAA;IAC5B,oBAAoB,EAAE,GAAG,CAAA;IACzB,gDAAgD;IAChD,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,uDAAuD;AACvD,MAAM,WAAW,4BAA4B;IAC3C,MAAM,EAAE,MAAM,CAAA;IACd,YAAY,EAAE,YAAY,CAAA;IAC1B,UAAU,CAAC,EAAE;QACX,mBAAmB;QACnB,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,sBAAsB;QACtB,SAAS,CAAC,EAAE,MAAM,CAAA;KACnB,CAAA;CACF;AAED,MAAM,MAAM,wBAAwB,GAAG,8BAA8B,GAAG,4BAA4B,CAAA;AAMpG;;;GAGG;AACH,qBAAa,kBAAmB,YAAW,aAAa;IAEpD,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,MAAM;gBADN,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,UAAU;IAGtB,iBAAiB,CAAC,OAAO,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IA4BnG,QAAQ,CAAC,MAAM,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,QAAQ,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAS7G,OAAO,CAAC,gBAAgB;CAczB;AAQD;;;;;;;;;;;;GAYG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,wBAAwB,GAAG,aAAa,CAwCxF"}
|
|
@@ -1,34 +1,15 @@
|
|
|
1
1
|
import { privateKeyToAccount } from "viem/accounts";
|
|
2
2
|
import { OWNABLE_VALIDATOR } from "../smart-account/index.js";
|
|
3
|
+
import { acceptedOf, resourceUrlOf } from "../x402/envelopes.js";
|
|
3
4
|
import { createWalletFromConfig, } from "../x402/index.js";
|
|
4
5
|
import { ApiClient } from "./client.js";
|
|
5
|
-
/** Default Ampersend API URL */
|
|
6
6
|
const DEFAULT_API_URL = "https://api.ampersend.ai";
|
|
7
|
-
/** Default chain ID (Base mainnet) */
|
|
8
|
-
const DEFAULT_CHAIN_ID = 8453;
|
|
9
|
-
/**
|
|
10
|
-
* Type guard to check if config is the simplified format
|
|
11
|
-
*/
|
|
12
7
|
function isSimpleConfig(config) {
|
|
13
8
|
return "smartAccountAddress" in config && "sessionKeyPrivateKey" in config && !("walletConfig" in config);
|
|
14
9
|
}
|
|
15
10
|
/**
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
* This treasurer:
|
|
19
|
-
* 1. Authenticates with the Ampersend API using SIWE
|
|
20
|
-
* 2. Requests payment authorization from the API before creating payments
|
|
21
|
-
* 3. Creates payments only when authorized by the API
|
|
22
|
-
* 4. Reports payment lifecycle events back to the API for tracking
|
|
23
|
-
*
|
|
24
|
-
* @example
|
|
25
|
-
* ```typescript
|
|
26
|
-
* const treasurer = createAmpersendTreasurer({
|
|
27
|
-
* apiUrl: "https://api.example.com",
|
|
28
|
-
* walletConfig: { type: "eoa", privateKey: "0x..." }
|
|
29
|
-
* })
|
|
30
|
-
* await initializeProxyServer({ transport, treasurer })
|
|
31
|
-
* ```
|
|
11
|
+
* Forwards the 402 to the Ampersend API, which applies budget/policy and
|
|
12
|
+
* returns an `acceptsIndex` to sign (plus optional co-signature).
|
|
32
13
|
*/
|
|
33
14
|
export class AmpersendTreasurer {
|
|
34
15
|
apiClient;
|
|
@@ -37,71 +18,39 @@ export class AmpersendTreasurer {
|
|
|
37
18
|
this.apiClient = apiClient;
|
|
38
19
|
this.wallet = wallet;
|
|
39
20
|
}
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
// Structurally compatible at runtime, different type systems
|
|
49
|
-
const response = await this.apiClient.authorizePayment(requirements, context);
|
|
50
|
-
// Check if any requirements were authorized
|
|
51
|
-
if (response.authorized.requirements.length === 0) {
|
|
52
|
-
// Log rejection reasons for debugging
|
|
53
|
-
const reasons = response.rejected.map((r) => `${r.requirement.resource}: ${r.reason}`).join(", ");
|
|
54
|
-
console.log(`[AmpersendTreasurer] No requirements authorized. Reasons: ${reasons || "None provided"}`);
|
|
55
|
-
return null; // Decline
|
|
56
|
-
}
|
|
57
|
-
// Use recommended requirement (or first if recommended is null)
|
|
58
|
-
const recommendedIndex = response.authorized.recommended ?? 0;
|
|
59
|
-
const authorizedReq = response.authorized.requirements[recommendedIndex];
|
|
60
|
-
if (!authorizedReq) {
|
|
61
|
-
throw new Error("Recommended requirement index out of bounds");
|
|
62
|
-
}
|
|
63
|
-
// Check if server provided co-signature (for co-signed keys)
|
|
64
|
-
let payment;
|
|
65
|
-
if (response.payment) {
|
|
66
|
-
// Co-signed path: use server-provided authorization data and signature
|
|
67
|
-
const serverAuth = {
|
|
68
|
-
authorizationData: response.payment.authorizationData,
|
|
69
|
-
serverSignature: response.payment.serverSignature,
|
|
70
|
-
};
|
|
71
|
-
payment = await this.wallet.createPayment(response.payment.requirement, serverAuth);
|
|
72
|
-
}
|
|
73
|
-
else {
|
|
74
|
-
// Full-access path: sign independently
|
|
75
|
-
payment = await this.wallet.createPayment(authorizedReq.requirement);
|
|
76
|
-
}
|
|
77
|
-
return {
|
|
78
|
-
payment,
|
|
79
|
-
authorizationId: crypto.randomUUID(),
|
|
80
|
-
};
|
|
81
|
-
}
|
|
82
|
-
catch (error) {
|
|
83
|
-
console.error("[AmpersendTreasurer] Payment authorization failed:", error);
|
|
21
|
+
async onPaymentRequired(request, context) {
|
|
22
|
+
const response = await this.apiClient.authorizePayment(request, context);
|
|
23
|
+
const selected = response.authorized.selected;
|
|
24
|
+
if (!selected) {
|
|
25
|
+
const reasons = response.rejected
|
|
26
|
+
.map((r) => `${resourceUrlOf(instructionFor(request, r.acceptsIndex))}: ${r.reason}`)
|
|
27
|
+
.join(", ");
|
|
28
|
+
console.log(`[AmpersendTreasurer] No options authorized. Reasons: ${reasons || "None provided"}`);
|
|
84
29
|
return null;
|
|
85
30
|
}
|
|
31
|
+
const instruction = instructionFor(request, selected.acceptsIndex);
|
|
32
|
+
const serverAuth = selected.coSignature
|
|
33
|
+
? {
|
|
34
|
+
authorizationData: selected.coSignature.authorizationData,
|
|
35
|
+
serverSignature: selected.coSignature.serverSignature,
|
|
36
|
+
}
|
|
37
|
+
: undefined;
|
|
38
|
+
const payment = await this.wallet.createPayment(instruction, serverAuth);
|
|
39
|
+
return {
|
|
40
|
+
payment,
|
|
41
|
+
authorizationId: crypto.randomUUID(),
|
|
42
|
+
accepted: acceptedOf(instruction),
|
|
43
|
+
};
|
|
86
44
|
}
|
|
87
|
-
/**
|
|
88
|
-
* Reports payment status updates back to API for tracking.
|
|
89
|
-
* Logs errors but doesn't fail on tracking errors.
|
|
90
|
-
*/
|
|
91
45
|
async onStatus(status, authorization, _context) {
|
|
92
46
|
try {
|
|
93
|
-
// Map status to event type for API
|
|
94
47
|
const event = this.mapStatusToEvent(status);
|
|
95
48
|
await this.apiClient.reportPaymentEvent(authorization.authorizationId, authorization.payment, event);
|
|
96
49
|
}
|
|
97
50
|
catch (error) {
|
|
98
|
-
// Log but don't fail on event tracking errors
|
|
99
51
|
console.error(`[AmpersendTreasurer] Failed to report status ${status}:`, error);
|
|
100
52
|
}
|
|
101
53
|
}
|
|
102
|
-
/**
|
|
103
|
-
* Maps X402 PaymentStatus to legacy PaymentEvent for API compatibility
|
|
104
|
-
*/
|
|
105
54
|
mapStatusToEvent(status) {
|
|
106
55
|
switch (status) {
|
|
107
56
|
case "sending":
|
|
@@ -117,42 +66,30 @@ export class AmpersendTreasurer {
|
|
|
117
66
|
}
|
|
118
67
|
}
|
|
119
68
|
}
|
|
69
|
+
function instructionFor(request, acceptsIndex) {
|
|
70
|
+
return request.protocol === "x402-v1"
|
|
71
|
+
? { protocol: "x402-v1", request: request.data, acceptsIndex }
|
|
72
|
+
: { protocol: "x402-v2", request: request.data, acceptsIndex };
|
|
73
|
+
}
|
|
120
74
|
/**
|
|
121
|
-
*
|
|
122
|
-
*
|
|
123
|
-
* This treasurer:
|
|
124
|
-
* 1. Authenticates with the Ampersend API using SIWE
|
|
125
|
-
* 2. Requests payment authorization from the API
|
|
126
|
-
* 3. Creates payments only when authorized
|
|
127
|
-
* 4. Reports payment lifecycle events back to the API
|
|
128
|
-
*
|
|
129
|
-
* @example Simple setup (recommended):
|
|
75
|
+
* @example Simple (recommended):
|
|
130
76
|
* ```typescript
|
|
131
|
-
*
|
|
132
|
-
* smartAccountAddress: "0x...",
|
|
133
|
-
* sessionKeyPrivateKey: "0x...",
|
|
134
|
-
* })
|
|
77
|
+
* createAmpersendTreasurer({ smartAccountAddress: "0x...", sessionKeyPrivateKey: "0x..." })
|
|
135
78
|
* ```
|
|
136
|
-
*
|
|
137
|
-
* @example Full control:
|
|
79
|
+
* @example Full (EOA or custom auth):
|
|
138
80
|
* ```typescript
|
|
139
|
-
*
|
|
81
|
+
* createAmpersendTreasurer({
|
|
140
82
|
* apiUrl: "https://api.ampersend.ai",
|
|
141
|
-
* walletConfig: { type: "eoa", privateKey: "0x..." }
|
|
83
|
+
* walletConfig: { type: "eoa", privateKey: "0x..." },
|
|
142
84
|
* })
|
|
143
85
|
* ```
|
|
144
|
-
*
|
|
145
|
-
* @param config - Configuration for the Ampersend treasurer
|
|
146
|
-
* @returns An X402Treasurer implementation
|
|
147
86
|
*/
|
|
148
87
|
export function createAmpersendTreasurer(config) {
|
|
149
88
|
if (isSimpleConfig(config)) {
|
|
150
|
-
// Simple config - build wallet config automatically
|
|
151
89
|
const walletConfig = {
|
|
152
90
|
type: "smart-account",
|
|
153
91
|
smartAccountAddress: config.smartAccountAddress,
|
|
154
92
|
sessionKeyPrivateKey: config.sessionKeyPrivateKey,
|
|
155
|
-
chainId: config.chainId ?? DEFAULT_CHAIN_ID,
|
|
156
93
|
validatorAddress: OWNABLE_VALIDATOR,
|
|
157
94
|
};
|
|
158
95
|
const apiClient = new ApiClient({
|
|
@@ -164,15 +101,11 @@ export function createAmpersendTreasurer(config) {
|
|
|
164
101
|
const wallet = createWalletFromConfig(walletConfig);
|
|
165
102
|
return new AmpersendTreasurer(apiClient, wallet);
|
|
166
103
|
}
|
|
167
|
-
// Full config - existing behavior
|
|
168
104
|
const { apiUrl, authConfig, walletConfig } = config;
|
|
169
|
-
// Determine which private key to use for API authentication
|
|
170
105
|
const authPrivateKey = walletConfig.type === "eoa" ? walletConfig.privateKey : walletConfig.sessionKeyPrivateKey;
|
|
171
|
-
// Derive agent address from wallet config
|
|
172
106
|
const agentAddress = walletConfig.type === "smart-account"
|
|
173
107
|
? walletConfig.smartAccountAddress
|
|
174
108
|
: privateKeyToAccount(walletConfig.privateKey).address;
|
|
175
|
-
// Create API client
|
|
176
109
|
const apiClient = new ApiClient({
|
|
177
110
|
baseUrl: apiUrl,
|
|
178
111
|
sessionKeyPrivateKey: authPrivateKey,
|
|
@@ -180,7 +113,6 @@ export function createAmpersendTreasurer(config) {
|
|
|
180
113
|
timeout: 30000,
|
|
181
114
|
...authConfig,
|
|
182
115
|
});
|
|
183
|
-
// Create wallet from configuration
|
|
184
116
|
const wallet = createWalletFromConfig(walletConfig);
|
|
185
117
|
return new AmpersendTreasurer(apiClient, wallet);
|
|
186
118
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"treasurer.js","sourceRoot":"","sources":["../../src/ampersend/treasurer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"treasurer.js","sourceRoot":"","sources":["../../src/ampersend/treasurer.ts"],"names":[],"mappings":"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"}
|