@ampersend_ai/ampersend-sdk 0.0.19 → 0.0.22

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 (153) hide show
  1. package/dist/ampersend/client.d.ts +4 -9
  2. package/dist/ampersend/client.d.ts.map +1 -1
  3. package/dist/ampersend/client.js +25 -21
  4. package/dist/ampersend/client.js.map +1 -1
  5. package/dist/ampersend/curated-agent.d.ts +117 -0
  6. package/dist/ampersend/curated-agent.d.ts.map +1 -0
  7. package/dist/ampersend/curated-agent.js +149 -0
  8. package/dist/ampersend/curated-agent.js.map +1 -0
  9. package/dist/ampersend/env.d.ts +0 -15
  10. package/dist/ampersend/env.d.ts.map +1 -1
  11. package/dist/ampersend/env.js +0 -4
  12. package/dist/ampersend/env.js.map +1 -1
  13. package/dist/ampersend/index.d.ts +2 -0
  14. package/dist/ampersend/index.d.ts.map +1 -1
  15. package/dist/ampersend/index.js +2 -0
  16. package/dist/ampersend/index.js.map +1 -1
  17. package/dist/ampersend/marketplace.d.ts +47 -0
  18. package/dist/ampersend/marketplace.d.ts.map +1 -0
  19. package/dist/ampersend/marketplace.js +91 -0
  20. package/dist/ampersend/marketplace.js.map +1 -0
  21. package/dist/ampersend/treasurer.d.ts +14 -79
  22. package/dist/ampersend/treasurer.d.ts.map +1 -1
  23. package/dist/ampersend/treasurer.js +34 -102
  24. package/dist/ampersend/treasurer.js.map +1 -1
  25. package/dist/ampersend/types.d.ts +346 -336
  26. package/dist/ampersend/types.d.ts.map +1 -1
  27. package/dist/ampersend/types.js +112 -149
  28. package/dist/ampersend/types.js.map +1 -1
  29. package/dist/ampersend/zod-bridge.d.ts +15 -0
  30. package/dist/ampersend/zod-bridge.d.ts.map +1 -0
  31. package/dist/ampersend/zod-bridge.js +29 -0
  32. package/dist/ampersend/zod-bridge.js.map +1 -0
  33. package/dist/cli/ampersend.js +2 -0
  34. package/dist/cli/ampersend.js.map +1 -1
  35. package/dist/cli/commands/config.d.ts.map +1 -1
  36. package/dist/cli/commands/config.js +2 -21
  37. package/dist/cli/commands/config.js.map +1 -1
  38. package/dist/cli/commands/fetch.d.ts.map +1 -1
  39. package/dist/cli/commands/fetch.js +1 -6
  40. package/dist/cli/commands/fetch.js.map +1 -1
  41. package/dist/cli/commands/marketplace.d.ts +19 -0
  42. package/dist/cli/commands/marketplace.d.ts.map +1 -0
  43. package/dist/cli/commands/marketplace.js +117 -0
  44. package/dist/cli/commands/marketplace.js.map +1 -0
  45. package/dist/cli/commands/setup.d.ts.map +1 -1
  46. package/dist/cli/commands/setup.js +6 -1
  47. package/dist/cli/commands/setup.js.map +1 -1
  48. package/dist/cli/config.d.ts +0 -10
  49. package/dist/cli/config.d.ts.map +1 -1
  50. package/dist/cli/config.js +5 -30
  51. package/dist/cli/config.js.map +1 -1
  52. package/dist/index.d.ts +2 -1
  53. package/dist/index.d.ts.map +1 -1
  54. package/dist/index.js +1 -1
  55. package/dist/index.js.map +1 -1
  56. package/dist/mcp/client/client.d.ts +0 -3
  57. package/dist/mcp/client/client.d.ts.map +1 -1
  58. package/dist/mcp/client/client.js +10 -14
  59. package/dist/mcp/client/client.js.map +1 -1
  60. package/dist/mcp/client/factory.d.ts +0 -2
  61. package/dist/mcp/client/factory.d.ts.map +1 -1
  62. package/dist/mcp/client/factory.js +0 -3
  63. package/dist/mcp/client/factory.js.map +1 -1
  64. package/dist/mcp/client/middleware.d.ts +0 -3
  65. package/dist/mcp/client/middleware.d.ts.map +1 -1
  66. package/dist/mcp/client/middleware.js +9 -12
  67. package/dist/mcp/client/middleware.js.map +1 -1
  68. package/dist/mcp/client/protocol.d.ts +81 -85
  69. package/dist/mcp/client/protocol.d.ts.map +1 -1
  70. package/dist/mcp/client/protocol.js +17 -15
  71. package/dist/mcp/client/protocol.js.map +1 -1
  72. package/dist/mcp/client/types.d.ts +6 -19
  73. package/dist/mcp/client/types.d.ts.map +1 -1
  74. package/dist/mcp/proxy/cli.d.ts.map +1 -1
  75. package/dist/mcp/proxy/cli.js +0 -1
  76. package/dist/mcp/proxy/cli.js.map +1 -1
  77. package/dist/mcp/proxy/env.d.ts +0 -9
  78. package/dist/mcp/proxy/env.d.ts.map +1 -1
  79. package/dist/mcp/proxy/env.js +0 -2
  80. package/dist/mcp/proxy/env.js.map +1 -1
  81. package/dist/mcp/proxy/factory.d.ts +0 -2
  82. package/dist/mcp/proxy/factory.d.ts.map +1 -1
  83. package/dist/mcp/proxy/factory.js +0 -3
  84. package/dist/mcp/proxy/factory.js.map +1 -1
  85. package/dist/mcp/server/fastmcp/middleware.d.ts +9 -29
  86. package/dist/mcp/server/fastmcp/middleware.d.ts.map +1 -1
  87. package/dist/mcp/server/fastmcp/middleware.js +10 -42
  88. package/dist/mcp/server/fastmcp/middleware.js.map +1 -1
  89. package/dist/version.d.ts +1 -1
  90. package/dist/version.js +1 -1
  91. package/dist/x402/envelopes.d.ts +62 -0
  92. package/dist/x402/envelopes.d.ts.map +1 -0
  93. package/dist/x402/envelopes.js +73 -0
  94. package/dist/x402/envelopes.js.map +1 -0
  95. package/dist/x402/http/client.d.ts +37 -0
  96. package/dist/x402/http/client.d.ts.map +1 -0
  97. package/dist/x402/http/client.js +159 -0
  98. package/dist/x402/http/client.js.map +1 -0
  99. package/dist/x402/http/factory.d.ts +9 -25
  100. package/dist/x402/http/factory.d.ts.map +1 -1
  101. package/dist/x402/http/factory.js +21 -27
  102. package/dist/x402/http/factory.js.map +1 -1
  103. package/dist/x402/http/index.d.ts +4 -1
  104. package/dist/x402/http/index.d.ts.map +1 -1
  105. package/dist/x402/http/index.js +2 -1
  106. package/dist/x402/http/index.js.map +1 -1
  107. package/dist/x402/index.d.ts +4 -1
  108. package/dist/x402/index.d.ts.map +1 -1
  109. package/dist/x402/index.js +3 -2
  110. package/dist/x402/index.js.map +1 -1
  111. package/dist/x402/treasurer.d.ts +22 -47
  112. package/dist/x402/treasurer.d.ts.map +1 -1
  113. package/dist/x402/treasurers/naive.d.ts +4 -40
  114. package/dist/x402/treasurers/naive.d.ts.map +1 -1
  115. package/dist/x402/treasurers/naive.js +7 -44
  116. package/dist/x402/treasurers/naive.js.map +1 -1
  117. package/dist/x402/wallet.d.ts +7 -32
  118. package/dist/x402/wallet.d.ts.map +1 -1
  119. package/dist/x402/wallet.js +0 -3
  120. package/dist/x402/wallet.js.map +1 -1
  121. package/dist/x402/wallets/account/wallet.d.ts +9 -30
  122. package/dist/x402/wallets/account/wallet.d.ts.map +1 -1
  123. package/dist/x402/wallets/account/wallet.js +30 -37
  124. package/dist/x402/wallets/account/wallet.js.map +1 -1
  125. package/dist/x402/wallets/index.d.ts +0 -1
  126. package/dist/x402/wallets/index.d.ts.map +1 -1
  127. package/dist/x402/wallets/index.js +0 -1
  128. package/dist/x402/wallets/index.js.map +1 -1
  129. package/dist/x402/wallets/smart-account/chain.d.ts +4 -0
  130. package/dist/x402/wallets/smart-account/chain.d.ts.map +1 -0
  131. package/dist/x402/wallets/smart-account/chain.js +12 -0
  132. package/dist/x402/wallets/smart-account/chain.js.map +1 -0
  133. package/dist/x402/wallets/smart-account/cosigned.d.ts +7 -33
  134. package/dist/x402/wallets/smart-account/cosigned.d.ts.map +1 -1
  135. package/dist/x402/wallets/smart-account/cosigned.js +28 -51
  136. package/dist/x402/wallets/smart-account/cosigned.js.map +1 -1
  137. package/dist/x402/wallets/smart-account/exact.d.ts +6 -20
  138. package/dist/x402/wallets/smart-account/exact.d.ts.map +1 -1
  139. package/dist/x402/wallets/smart-account/exact.js +33 -43
  140. package/dist/x402/wallets/smart-account/exact.js.map +1 -1
  141. package/dist/x402/wallets/smart-account/wallet.d.ts +6 -39
  142. package/dist/x402/wallets/smart-account/wallet.d.ts.map +1 -1
  143. package/dist/x402/wallets/smart-account/wallet.js +9 -36
  144. package/dist/x402/wallets/smart-account/wallet.js.map +1 -1
  145. package/package.json +4 -4
  146. package/dist/x402/http/adapter.d.ts +0 -38
  147. package/dist/x402/http/adapter.d.ts.map +0 -1
  148. package/dist/x402/http/adapter.js +0 -193
  149. package/dist/x402/http/adapter.js.map +0 -1
  150. package/dist/x402/http/v2-adapter.d.ts +0 -56
  151. package/dist/x402/http/v2-adapter.d.ts.map +0 -1
  152. package/dist/x402/http/v2-adapter.js +0 -94
  153. package/dist/x402/http/v2-adapter.js.map +0 -1
@@ -0,0 +1,91 @@
1
+ import { Schema } from "effect";
2
+ import { AgentMarketplaceListQueryParams, CuratedAgentDTO } from "./curated-agent.js";
3
+ import { ApiError } from "./types.js";
4
+ const DEFAULT_API_URL = "https://api.ampersend.ai";
5
+ /**
6
+ * Client for the agent marketplace API.
7
+ *
8
+ * Reads from the unauthenticated `/api/v1/agents/marketplace` endpoints
9
+ * to discover curated agents, their endpoints, and their skills.
10
+ *
11
+ * @example
12
+ * ```typescript
13
+ * import { MarketplaceClient } from "@ampersend_ai/ampersend-sdk/ampersend"
14
+ *
15
+ * const client = new MarketplaceClient()
16
+ *
17
+ * const agents = await client.listAgents({ source: "catalog" })
18
+ * const agent = await client.getAgent(agents[0].id)
19
+ * ```
20
+ */
21
+ export class MarketplaceClient {
22
+ baseUrl;
23
+ timeout;
24
+ constructor(options = {}) {
25
+ this.baseUrl = (options.apiUrl ?? DEFAULT_API_URL).replace(/\/$/, "");
26
+ this.timeout = options.timeout ?? 30000;
27
+ }
28
+ /**
29
+ * List curated agents in the marketplace.
30
+ *
31
+ * Filters are optional and combine on the server side. `search` performs a
32
+ * fuzzy match across name, description, tags, and category.
33
+ */
34
+ async listAgents(filters = {}) {
35
+ Schema.decodeUnknownSync(AgentMarketplaceListQueryParams)(filters);
36
+ const query = new URLSearchParams();
37
+ if (filters.source)
38
+ query.set("source", filters.source);
39
+ if (filters.category)
40
+ query.set("category", filters.category);
41
+ if (filters.search)
42
+ query.set("search", filters.search);
43
+ if (filters.network)
44
+ query.set("network", filters.network);
45
+ const qs = query.toString();
46
+ const path = qs ? `/api/v1/agents/marketplace?${qs}` : "/api/v1/agents/marketplace";
47
+ return this.fetch("GET", path, Schema.Array(CuratedAgentDTO));
48
+ }
49
+ /**
50
+ * Get a single curated agent by its id.
51
+ *
52
+ * @throws ApiError with status 404 if the agent is not found.
53
+ */
54
+ async getAgent(id) {
55
+ return this.fetch("GET", `/api/v1/agents/marketplace/${encodeURIComponent(id)}`, CuratedAgentDTO);
56
+ }
57
+ async fetch(method, path, schema) {
58
+ const url = `${this.baseUrl}${path}`;
59
+ try {
60
+ const response = await globalThis.fetch(url, {
61
+ method,
62
+ signal: AbortSignal.timeout(this.timeout),
63
+ });
64
+ if (!response.ok) {
65
+ let errorMessage = `HTTP ${response.status} ${response.statusText}`;
66
+ try {
67
+ const errorBody = await response.text();
68
+ if (errorBody) {
69
+ errorMessage += `: ${errorBody}`;
70
+ }
71
+ }
72
+ catch {
73
+ // Ignore error body parsing failures
74
+ }
75
+ throw new ApiError(errorMessage, response.status, response);
76
+ }
77
+ const data = await response.json();
78
+ return Schema.decodeUnknownSync(schema)(data);
79
+ }
80
+ catch (error) {
81
+ if (error instanceof ApiError) {
82
+ throw error;
83
+ }
84
+ if (error instanceof Error && error.name === "AbortError") {
85
+ throw new ApiError(`Request timeout after ${this.timeout}ms`);
86
+ }
87
+ throw new ApiError(`Request failed: ${error}`);
88
+ }
89
+ }
90
+ }
91
+ //# sourceMappingURL=marketplace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"marketplace.js","sourceRoot":"","sources":["../../src/ampersend/marketplace.ts"],"names":[],"mappings":"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"}
@@ -1,115 +1,50 @@
1
1
  import type { Address, Hex } from "viem";
2
- import type { PaymentRequirements } from "x402/types";
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
- /** Ampersend API URL (defaults to production) */
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 for authentication */
17
+ /** SIWE domain. */
39
18
  domain?: string;
40
- /** SIWE statement for authentication */
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
- * AmpersendTreasurer - Ampersend API-based payment authorization with X402Treasurer pattern
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
- * Creates an Ampersend treasurer that consults the Ampersend API before making payments.
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
- * const treasurer = createAmpersendTreasurer({
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
- * const treasurer = createAmpersendTreasurer({
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;AAExC,OAAO,KAAK,EAAkB,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAIrE,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;AASvC;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,8BAA8B;IAC7C,4BAA4B;IAC5B,mBAAmB,EAAE,OAAO,CAAA;IAC5B,0CAA0C;IAC1C,oBAAoB,EAAE,GAAG,CAAA;IACzB,iDAAiD;IACjD,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,+CAA+C;IAC/C,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED;;;GAGG;AACH,MAAM,WAAW,4BAA4B;IAC3C,2CAA2C;IAC3C,MAAM,EAAE,MAAM,CAAA;IACd,kDAAkD;IAClD,YAAY,EAAE,YAAY,CAAA;IAC1B,4CAA4C;IAC5C,UAAU,CAAC,EAAE;QACX,qCAAqC;QACrC,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,wCAAwC;QACxC,SAAS,CAAC,EAAE,MAAM,CAAA;KACnB,CAAA;CACF;AAED;;;GAGG;AACH,MAAM,MAAM,wBAAwB,GAAG,8BAA8B,GAAG,4BAA4B,CAAA;AASpG;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,kBAAmB,YAAW,aAAa;IAEpD,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,MAAM;gBADN,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,UAAU;IAG5B;;;OAGG;IACG,iBAAiB,CACrB,YAAY,EAAE,aAAa,CAAC,mBAAmB,CAAC,EAChD,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAkDhC;;;OAGG;IACG,QAAQ,CAAC,MAAM,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,QAAQ,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAW7G;;OAEG;IACH,OAAO,CAAC,gBAAgB;CAczB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,wBAAwB,GAAG,aAAa,CA+CxF"}
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
- * AmpersendTreasurer - Ampersend API-based payment authorization with X402Treasurer pattern
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
- * Requests payment authorization from API before creating payment.
42
- * Only creates payment if API authorizes it.
43
- */
44
- async onPaymentRequired(requirements, context) {
45
- try {
46
- // Authorize payment with API
47
- // Cast needed: x402 PaymentRequirements (zod) ampersend PaymentRequirements (Effect Schema)
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
- * Creates an Ampersend treasurer that consults the Ampersend API before making payments.
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
- * const treasurer = createAmpersendTreasurer({
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
- * const treasurer = createAmpersendTreasurer({
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":"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"}
1
+ {"version":3,"file":"treasurer.js","sourceRoot":"","sources":["../../src/ampersend/treasurer.ts"],"names":[],"mappings":"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"}