@itachisol/plugin-x402-swarms 0.1.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.
Files changed (175) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +323 -0
  3. package/dist/actions/delegateToSwarm.d.ts +8 -0
  4. package/dist/actions/delegateToSwarm.d.ts.map +1 -0
  5. package/dist/actions/delegateToSwarm.js +296 -0
  6. package/dist/actions/delegateToSwarm.js.map +1 -0
  7. package/dist/actions/delegateToSwarmWithPayment.d.ts +8 -0
  8. package/dist/actions/delegateToSwarmWithPayment.d.ts.map +1 -0
  9. package/dist/actions/delegateToSwarmWithPayment.js +323 -0
  10. package/dist/actions/delegateToSwarmWithPayment.js.map +1 -0
  11. package/dist/actions/discoverServices.d.ts +3 -0
  12. package/dist/actions/discoverServices.d.ts.map +1 -0
  13. package/dist/actions/discoverServices.js +63 -0
  14. package/dist/actions/discoverServices.js.map +1 -0
  15. package/dist/actions/index.d.ts +6 -0
  16. package/dist/actions/index.d.ts.map +1 -0
  17. package/dist/actions/index.js +6 -0
  18. package/dist/actions/index.js.map +1 -0
  19. package/dist/actions/payForService.d.ts +3 -0
  20. package/dist/actions/payForService.d.ts.map +1 -0
  21. package/dist/actions/payForService.js +115 -0
  22. package/dist/actions/payForService.js.map +1 -0
  23. package/dist/actions/runSwarmAgent.d.ts +7 -0
  24. package/dist/actions/runSwarmAgent.d.ts.map +1 -0
  25. package/dist/actions/runSwarmAgent.js +131 -0
  26. package/dist/actions/runSwarmAgent.js.map +1 -0
  27. package/dist/client/index.d.ts +512 -0
  28. package/dist/client/index.d.ts.map +1 -0
  29. package/dist/client/index.js +469 -0
  30. package/dist/client/index.js.map +1 -0
  31. package/dist/evaluators/paymentEvaluator.d.ts +7 -0
  32. package/dist/evaluators/paymentEvaluator.d.ts.map +1 -0
  33. package/dist/evaluators/paymentEvaluator.js +104 -0
  34. package/dist/evaluators/paymentEvaluator.js.map +1 -0
  35. package/dist/index.d.ts +29 -0
  36. package/dist/index.d.ts.map +1 -0
  37. package/dist/index.js +60 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/marketing/index.d.ts +7 -0
  40. package/dist/marketing/index.d.ts.map +1 -0
  41. package/dist/marketing/index.js +7 -0
  42. package/dist/marketing/index.js.map +1 -0
  43. package/dist/marketing/milestoneAgent.d.ts +54 -0
  44. package/dist/marketing/milestoneAgent.d.ts.map +1 -0
  45. package/dist/marketing/milestoneAgent.js +121 -0
  46. package/dist/marketing/milestoneAgent.js.map +1 -0
  47. package/dist/marketing/tweetTemplates.d.ts +32 -0
  48. package/dist/marketing/tweetTemplates.d.ts.map +1 -0
  49. package/dist/marketing/tweetTemplates.js +60 -0
  50. package/dist/marketing/tweetTemplates.js.map +1 -0
  51. package/dist/marketing/xMonitor.d.ts +51 -0
  52. package/dist/marketing/xMonitor.d.ts.map +1 -0
  53. package/dist/marketing/xMonitor.js +141 -0
  54. package/dist/marketing/xMonitor.js.map +1 -0
  55. package/dist/providers/x402Provider.d.ts +7 -0
  56. package/dist/providers/x402Provider.d.ts.map +1 -0
  57. package/dist/providers/x402Provider.js +72 -0
  58. package/dist/providers/x402Provider.js.map +1 -0
  59. package/dist/providers/x402ServerProvider.d.ts +7 -0
  60. package/dist/providers/x402ServerProvider.d.ts.map +1 -0
  61. package/dist/providers/x402ServerProvider.js +48 -0
  62. package/dist/providers/x402ServerProvider.js.map +1 -0
  63. package/dist/routes/advancedRoutes.d.ts +5 -0
  64. package/dist/routes/advancedRoutes.d.ts.map +1 -0
  65. package/dist/routes/advancedRoutes.js +869 -0
  66. package/dist/routes/advancedRoutes.js.map +1 -0
  67. package/dist/routes/batchRoutes.d.ts +13 -0
  68. package/dist/routes/batchRoutes.d.ts.map +1 -0
  69. package/dist/routes/batchRoutes.js +496 -0
  70. package/dist/routes/batchRoutes.js.map +1 -0
  71. package/dist/routes/codeAuditRoutes.d.ts +6 -0
  72. package/dist/routes/codeAuditRoutes.d.ts.map +1 -0
  73. package/dist/routes/codeAuditRoutes.js +415 -0
  74. package/dist/routes/codeAuditRoutes.js.map +1 -0
  75. package/dist/routes/contentRoutes.d.ts +5 -0
  76. package/dist/routes/contentRoutes.d.ts.map +1 -0
  77. package/dist/routes/contentRoutes.js +370 -0
  78. package/dist/routes/contentRoutes.js.map +1 -0
  79. package/dist/routes/cryptoAnalysisRoutes.d.ts +5 -0
  80. package/dist/routes/cryptoAnalysisRoutes.d.ts.map +1 -0
  81. package/dist/routes/cryptoAnalysisRoutes.js +641 -0
  82. package/dist/routes/cryptoAnalysisRoutes.js.map +1 -0
  83. package/dist/routes/cryptoRoutes.d.ts +5 -0
  84. package/dist/routes/cryptoRoutes.d.ts.map +1 -0
  85. package/dist/routes/cryptoRoutes.js +1225 -0
  86. package/dist/routes/cryptoRoutes.js.map +1 -0
  87. package/dist/routes/heliusDataRoutes.d.ts +14 -0
  88. package/dist/routes/heliusDataRoutes.d.ts.map +1 -0
  89. package/dist/routes/heliusDataRoutes.js +388 -0
  90. package/dist/routes/heliusDataRoutes.js.map +1 -0
  91. package/dist/routes/taskRoutes.d.ts +5 -0
  92. package/dist/routes/taskRoutes.d.ts.map +1 -0
  93. package/dist/routes/taskRoutes.js +574 -0
  94. package/dist/routes/taskRoutes.js.map +1 -0
  95. package/dist/routes/tradingRoutes.d.ts +5 -0
  96. package/dist/routes/tradingRoutes.d.ts.map +1 -0
  97. package/dist/routes/tradingRoutes.js +500 -0
  98. package/dist/routes/tradingRoutes.js.map +1 -0
  99. package/dist/routes/walletAnalyzerRoutes.d.ts +12 -0
  100. package/dist/routes/walletAnalyzerRoutes.d.ts.map +1 -0
  101. package/dist/routes/walletAnalyzerRoutes.js +316 -0
  102. package/dist/routes/walletAnalyzerRoutes.js.map +1 -0
  103. package/dist/routes/x402Routes.d.ts +9 -0
  104. package/dist/routes/x402Routes.d.ts.map +1 -0
  105. package/dist/routes/x402Routes.js +474 -0
  106. package/dist/routes/x402Routes.js.map +1 -0
  107. package/dist/schemas/budgetState.d.ts +250 -0
  108. package/dist/schemas/budgetState.d.ts.map +1 -0
  109. package/dist/schemas/budgetState.js +20 -0
  110. package/dist/schemas/budgetState.js.map +1 -0
  111. package/dist/schemas/endpointScores.d.ts +182 -0
  112. package/dist/schemas/endpointScores.d.ts.map +1 -0
  113. package/dist/schemas/endpointScores.js +17 -0
  114. package/dist/schemas/endpointScores.js.map +1 -0
  115. package/dist/schemas/index.d.ts +4 -0
  116. package/dist/schemas/index.d.ts.map +1 -0
  117. package/dist/schemas/index.js +4 -0
  118. package/dist/schemas/index.js.map +1 -0
  119. package/dist/schemas/paymentHistory.d.ts +284 -0
  120. package/dist/schemas/paymentHistory.d.ts.map +1 -0
  121. package/dist/schemas/paymentHistory.js +24 -0
  122. package/dist/schemas/paymentHistory.js.map +1 -0
  123. package/dist/server/index.d.ts +3 -0
  124. package/dist/server/index.d.ts.map +1 -0
  125. package/dist/server/index.js +3 -0
  126. package/dist/server/index.js.map +1 -0
  127. package/dist/server/x402Gate.d.ts +56 -0
  128. package/dist/server/x402Gate.d.ts.map +1 -0
  129. package/dist/server/x402Gate.js +240 -0
  130. package/dist/server/x402Gate.js.map +1 -0
  131. package/dist/server/x402ServerService.d.ts +30 -0
  132. package/dist/server/x402ServerService.d.ts.map +1 -0
  133. package/dist/server/x402ServerService.js +79 -0
  134. package/dist/server/x402ServerService.js.map +1 -0
  135. package/dist/services/paymentMemoryService.d.ts +73 -0
  136. package/dist/services/paymentMemoryService.d.ts.map +1 -0
  137. package/dist/services/paymentMemoryService.js +247 -0
  138. package/dist/services/paymentMemoryService.js.map +1 -0
  139. package/dist/services/swarmsService.d.ts +66 -0
  140. package/dist/services/swarmsService.d.ts.map +1 -0
  141. package/dist/services/swarmsService.js +102 -0
  142. package/dist/services/swarmsService.js.map +1 -0
  143. package/dist/services/x402WalletService.d.ts +57 -0
  144. package/dist/services/x402WalletService.d.ts.map +1 -0
  145. package/dist/services/x402WalletService.js +258 -0
  146. package/dist/services/x402WalletService.js.map +1 -0
  147. package/dist/templates/index.d.ts +24 -0
  148. package/dist/templates/index.d.ts.map +1 -0
  149. package/dist/templates/index.js +51 -0
  150. package/dist/templates/index.js.map +1 -0
  151. package/dist/templates/swarmTemplates.d.ts +22 -0
  152. package/dist/templates/swarmTemplates.d.ts.map +1 -0
  153. package/dist/templates/swarmTemplates.js +225 -0
  154. package/dist/templates/swarmTemplates.js.map +1 -0
  155. package/dist/types.d.ts +197 -0
  156. package/dist/types.d.ts.map +1 -0
  157. package/dist/types.js +2 -0
  158. package/dist/types.js.map +1 -0
  159. package/dist/utils/cache.d.ts +17 -0
  160. package/dist/utils/cache.d.ts.map +1 -0
  161. package/dist/utils/cache.js +32 -0
  162. package/dist/utils/cache.js.map +1 -0
  163. package/dist/utils/llm.d.ts +16 -0
  164. package/dist/utils/llm.d.ts.map +1 -0
  165. package/dist/utils/llm.js +32 -0
  166. package/dist/utils/llm.js.map +1 -0
  167. package/dist/utils/reportStore.d.ts +45 -0
  168. package/dist/utils/reportStore.d.ts.map +1 -0
  169. package/dist/utils/reportStore.js +164 -0
  170. package/dist/utils/reportStore.js.map +1 -0
  171. package/dist/utils/taskQueue.d.ts +54 -0
  172. package/dist/utils/taskQueue.d.ts.map +1 -0
  173. package/dist/utils/taskQueue.js +124 -0
  174. package/dist/utils/taskQueue.js.map +1 -0
  175. package/package.json +69 -0
@@ -0,0 +1,57 @@
1
+ import { Service, type IAgentRuntime } from "@elizaos/core";
2
+ import { type BudgetAccount, type PaymentReceipt } from "@dexterai/x402/client";
3
+ import type { X402PaymentConfig } from "../types.js";
4
+ export interface PayForResourceOptions {
5
+ method?: string;
6
+ headers?: Record<string, string>;
7
+ body?: string;
8
+ }
9
+ export interface PayForResourceResult {
10
+ txHash: string;
11
+ network: string | undefined;
12
+ payer: string | undefined;
13
+ amountUsd: number;
14
+ receipt: PaymentReceipt | undefined;
15
+ response: Response;
16
+ }
17
+ /**
18
+ * Manages the agent's x402 payment wallet via the Dexter SDK.
19
+ * Uses BudgetAccount for automatic spending controls and payment tracking.
20
+ */
21
+ export declare class X402WalletService extends Service {
22
+ static serviceType: string;
23
+ capabilityDescription: string;
24
+ private paymentConfig;
25
+ private budgetAccount;
26
+ private x402Fetch;
27
+ private agentRuntime;
28
+ static start(runtime: IAgentRuntime): Promise<X402WalletService>;
29
+ stop(): Promise<void>;
30
+ initialize(runtime: IAgentRuntime): Promise<void>;
31
+ /**
32
+ * Get the x402-wrapped fetch that auto-pays for 402 responses.
33
+ */
34
+ getX402Fetch(): typeof globalThis.fetch;
35
+ /**
36
+ * Get the budget-controlled fetch for autonomous agent spending.
37
+ */
38
+ getBudgetAccount(): BudgetAccount | null;
39
+ /**
40
+ * Pay for an x402-protected resource using the budget account.
41
+ * The Dexter SDK handles the 402 → sign → retry flow automatically.
42
+ * Supports arbitrary HTTP methods and bodies.
43
+ */
44
+ payForResource(endpoint: string, options?: PayForResourceOptions): Promise<PayForResourceResult>;
45
+ private mapX402Error;
46
+ getPaymentHistory(): Array<{
47
+ amount: number;
48
+ domain: string;
49
+ network: string;
50
+ timestamp: number;
51
+ }>;
52
+ getTotalSpentUsd(): number;
53
+ getRemainingBudget(): number;
54
+ getHourlySpend(): number;
55
+ getConfig(): X402PaymentConfig;
56
+ }
57
+ //# sourceMappingURL=x402WalletService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"x402WalletService.d.ts","sourceRoot":"","sources":["../../src/services/x402WalletService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,eAAe,CAAC;AAC5D,OAAO,EAKL,KAAK,aAAa,EAElB,KAAK,cAAc,EACpB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,iBAAiB,EAAwB,MAAM,aAAa,CAAC;AAG3E,MAAM,WAAW,qBAAqB;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,cAAc,GAAG,SAAS,CAAC;IACpC,QAAQ,EAAE,QAAQ,CAAC;CACpB;AAED;;;GAGG;AACH,qBAAa,iBAAkB,SAAQ,OAAO;IAC5C,MAAM,CAAC,WAAW,SAAiB;IACnC,qBAAqB,SACwF;IAE7G,OAAO,CAAC,aAAa,CAAqB;IAC1C,OAAO,CAAC,aAAa,CAA8B;IACnD,OAAO,CAAC,SAAS,CAAwC;IACzD,OAAO,CAAC,YAAY,CAA8B;WAErC,KAAK,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAMhE,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAMrB,UAAU,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IA4GvD;;OAEG;IACH,YAAY,IAAI,OAAO,UAAU,CAAC,KAAK;IAOvC;;OAEG;IACH,gBAAgB,IAAI,aAAa,GAAG,IAAI;IAIxC;;;;OAIG;IACG,cAAc,CAClB,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,qBAAqB,GAC9B,OAAO,CAAC,oBAAoB,CAAC;IA4GhC,OAAO,CAAC,YAAY;IAsBpB,iBAAiB,IAAI,KAAK,CAAC;QACzB,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IAKF,gBAAgB,IAAI,MAAM;IAI1B,kBAAkB,IAAI,MAAM;IAI5B,cAAc,IAAI,MAAM;IAIxB,SAAS,IAAI,iBAAiB;CAG/B"}
@@ -0,0 +1,258 @@
1
+ import { Service } from "@elizaos/core";
2
+ import { wrapFetch, createBudgetAccount, getPaymentReceipt, X402Error, } from "@dexterai/x402/client";
3
+ /**
4
+ * Manages the agent's x402 payment wallet via the Dexter SDK.
5
+ * Uses BudgetAccount for automatic spending controls and payment tracking.
6
+ */
7
+ export class X402WalletService extends Service {
8
+ static serviceType = "X402_WALLET";
9
+ capabilityDescription = "Manages x402 micropayments via Dexter SDK with budget controls, access passes, and marketplace discovery";
10
+ paymentConfig;
11
+ budgetAccount = null;
12
+ x402Fetch = null;
13
+ agentRuntime = null;
14
+ static async start(runtime) {
15
+ const instance = new X402WalletService(runtime);
16
+ await instance.initialize(runtime);
17
+ return instance;
18
+ }
19
+ async stop() {
20
+ this.budgetAccount = null;
21
+ this.x402Fetch = null;
22
+ this.agentRuntime = null;
23
+ }
24
+ async initialize(runtime) {
25
+ this.agentRuntime = runtime;
26
+ const networkRaw = runtime.getSetting("X402_NETWORK_ID");
27
+ const receiveRaw = runtime.getSetting("X402_RECEIVE_ADDRESS");
28
+ const maxPayRaw = runtime.getSetting("X402_MAX_AUTO_PAY_USD");
29
+ const solanaKey = runtime.getSetting("SOLANA_PRIVATE_KEY");
30
+ const evmKey = runtime.getSetting("EVM_PRIVATE_KEY");
31
+ const budgetRaw = runtime.getSetting("X402_BUDGET_USD");
32
+ const facilitatorRaw = runtime.getSetting("X402_FACILITATOR_URL");
33
+ const accessTierRaw = runtime.getSetting("X402_ACCESS_PASS_TIER");
34
+ const accessMaxSpendRaw = runtime.getSetting("X402_ACCESS_PASS_MAX_SPEND");
35
+ this.paymentConfig = {
36
+ networkId: networkRaw ?? "base-mainnet",
37
+ receiveAddress: receiveRaw != null ? String(receiveRaw) : "",
38
+ maxAutoPayUsd: parseFloat(maxPayRaw != null ? String(maxPayRaw) : "0.10"),
39
+ solanaPrivateKey: solanaKey != null ? String(solanaKey) : undefined,
40
+ evmPrivateKey: evmKey != null ? String(evmKey) : undefined,
41
+ accessPassTier: accessTierRaw != null ? String(accessTierRaw) : undefined,
42
+ accessPassMaxSpend: accessMaxSpendRaw != null ? String(accessMaxSpendRaw) : undefined,
43
+ };
44
+ const hasWallet = !!this.paymentConfig.solanaPrivateKey ||
45
+ !!this.paymentConfig.evmPrivateKey;
46
+ if (!hasWallet) {
47
+ runtime.logger.warn("[X402WalletService] No wallet key configured (SOLANA_PRIVATE_KEY or EVM_PRIVATE_KEY). Payment features disabled.");
48
+ return;
49
+ }
50
+ // Build wrapFetch options
51
+ const fetchOpts = {
52
+ verbose: false,
53
+ };
54
+ if (this.paymentConfig.solanaPrivateKey) {
55
+ fetchOpts.walletPrivateKey = this.paymentConfig.solanaPrivateKey;
56
+ }
57
+ if (this.paymentConfig.evmPrivateKey) {
58
+ fetchOpts.evmPrivateKey = this.paymentConfig.evmPrivateKey;
59
+ }
60
+ if (facilitatorRaw) {
61
+ fetchOpts.facilitatorUrl = String(facilitatorRaw);
62
+ }
63
+ // Access Pass configuration
64
+ if (this.paymentConfig.accessPassTier) {
65
+ fetchOpts.accessPass = {
66
+ preferTier: this.paymentConfig.accessPassTier,
67
+ maxSpend: this.paymentConfig.accessPassMaxSpend ?? "2.00",
68
+ autoRenew: true,
69
+ };
70
+ }
71
+ // Determine preferred network from config
72
+ const networkMap = {
73
+ "base-mainnet": "eip155:8453",
74
+ "base-sepolia": "eip155:84532",
75
+ "ethereum-mainnet": "eip155:1",
76
+ "solana-mainnet": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
77
+ "polygon-mainnet": "eip155:137",
78
+ "arbitrum-mainnet": "eip155:42161",
79
+ };
80
+ const preferred = networkMap[String(networkRaw ?? "base-mainnet")];
81
+ if (preferred) {
82
+ fetchOpts.preferredNetwork = preferred;
83
+ }
84
+ // Create BudgetAccount for spending controls
85
+ const totalBudget = budgetRaw != null ? String(budgetRaw) : "10.00";
86
+ const perRequest = String(this.paymentConfig.maxAutoPayUsd.toFixed(2));
87
+ this.budgetAccount = createBudgetAccount({
88
+ ...fetchOpts,
89
+ budget: {
90
+ total: totalBudget,
91
+ perRequest,
92
+ perHour: String(Math.min(parseFloat(totalBudget), this.paymentConfig.maxAutoPayUsd * 100).toFixed(2)),
93
+ },
94
+ });
95
+ // Also create a plain wrapFetch for direct use
96
+ this.x402Fetch = wrapFetch(fetch, fetchOpts);
97
+ runtime.logger.info({
98
+ network: this.paymentConfig.networkId,
99
+ maxAutoPayUsd: this.paymentConfig.maxAutoPayUsd,
100
+ totalBudget,
101
+ hasSolana: !!this.paymentConfig.solanaPrivateKey,
102
+ hasEvm: !!this.paymentConfig.evmPrivateKey,
103
+ accessPass: !!this.paymentConfig.accessPassTier,
104
+ }, "[X402WalletService] Initialized with Dexter SDK");
105
+ }
106
+ /**
107
+ * Get the x402-wrapped fetch that auto-pays for 402 responses.
108
+ */
109
+ getX402Fetch() {
110
+ if (!this.x402Fetch) {
111
+ throw new Error("X402 wallet not initialized — no wallet key configured");
112
+ }
113
+ return this.x402Fetch;
114
+ }
115
+ /**
116
+ * Get the budget-controlled fetch for autonomous agent spending.
117
+ */
118
+ getBudgetAccount() {
119
+ return this.budgetAccount;
120
+ }
121
+ /**
122
+ * Pay for an x402-protected resource using the budget account.
123
+ * The Dexter SDK handles the 402 → sign → retry flow automatically.
124
+ * Supports arbitrary HTTP methods and bodies.
125
+ */
126
+ async payForResource(endpoint, options) {
127
+ if (!this.budgetAccount) {
128
+ throw new Error("X402 wallet not initialized — no wallet key configured");
129
+ }
130
+ // Capture local references so that stop() during an in-flight payment
131
+ // doesn't null them out from under us.
132
+ const budgetAccount = this.budgetAccount;
133
+ const runtime = this.agentRuntime;
134
+ const spentBefore = budgetAccount.spentAmount;
135
+ let response;
136
+ const startTime = Date.now();
137
+ try {
138
+ const init = {};
139
+ if (options?.method)
140
+ init.method = options.method;
141
+ if (options?.headers)
142
+ init.headers = options.headers;
143
+ if (options?.body)
144
+ init.body = options.body;
145
+ response = await budgetAccount.fetch(endpoint, Object.keys(init).length > 0 ? init : undefined);
146
+ }
147
+ catch (err) {
148
+ if (err instanceof X402Error) {
149
+ const friendly = this.mapX402Error(err);
150
+ throw new Error(friendly);
151
+ }
152
+ throw err;
153
+ }
154
+ const responseTimeMs = Date.now() - startTime;
155
+ const spentAfter = budgetAccount.spentAmount;
156
+ const amountPaid = spentAfter - spentBefore;
157
+ // Extract real on-chain receipt from response
158
+ const receipt = getPaymentReceipt(response);
159
+ const result = {
160
+ txHash: receipt?.transaction ?? "no-payment-required",
161
+ network: receipt?.network,
162
+ payer: receipt?.payer,
163
+ amountUsd: amountPaid,
164
+ receipt,
165
+ response,
166
+ };
167
+ // Log payment details
168
+ if (amountPaid > 0 && runtime) {
169
+ runtime.logger.info({
170
+ endpoint,
171
+ txHash: result.txHash,
172
+ network: result.network,
173
+ payer: result.payer,
174
+ amountUsd: amountPaid,
175
+ remainingBudget: budgetAccount.remainingAmount,
176
+ }, "[X402WalletService] Payment completed");
177
+ }
178
+ // Record payment in persistent memory (fire-and-forget)
179
+ try {
180
+ const memoryService = runtime?.getService("PAYMENT_MEMORY");
181
+ if (memoryService) {
182
+ let domain;
183
+ try {
184
+ domain = new URL(endpoint).hostname;
185
+ }
186
+ catch {
187
+ domain = "unknown";
188
+ }
189
+ const responsePreview = await response
190
+ .clone()
191
+ .text()
192
+ .catch(() => "")
193
+ .then((t) => t.slice(0, 200));
194
+ const record = {
195
+ id: crypto.randomUUID(),
196
+ agentId: runtime?.agentId ?? "unknown",
197
+ endpoint,
198
+ domain,
199
+ method: options?.method ?? "GET",
200
+ amountUsd: amountPaid,
201
+ txHash: result.txHash,
202
+ network: result.network,
203
+ payer: result.payer,
204
+ status: "confirmed",
205
+ responseStatus: response.status,
206
+ responseTimeMs,
207
+ responsePreview,
208
+ createdAt: Date.now(),
209
+ };
210
+ // Catch async rejection so it never becomes an unhandled promise rejection
211
+ void memoryService.recordPayment(record).catch(() => { });
212
+ }
213
+ }
214
+ catch {
215
+ // Recording failure must never break the payment flow
216
+ }
217
+ return result;
218
+ }
219
+ mapX402Error(err) {
220
+ switch (err.code) {
221
+ case "insufficient_balance":
222
+ return `Insufficient USDC balance. Fund your wallet. ${err.message}`;
223
+ case "amount_exceeds_max":
224
+ return `Payment exceeds per-request limit ($${this.paymentConfig.maxAutoPayUsd}). ${err.message}`;
225
+ case "payment_rejected":
226
+ return `Payment rejected (budget exhausted or domain blocked). ${err.message}`;
227
+ case "facilitator_settle_failed":
228
+ return `On-chain settlement failed. ${err.message}`;
229
+ case "facilitator_timeout":
230
+ case "rpc_timeout":
231
+ return `Network timeout during payment. Retry may succeed. ${err.message}`;
232
+ case "user_rejected_signature":
233
+ return `Payment signature rejected. ${err.message}`;
234
+ case "access_pass_expired":
235
+ return `Access pass expired. A new one will be purchased on next call. ${err.message}`;
236
+ default:
237
+ return `x402 error [${err.code}]: ${err.message}`;
238
+ }
239
+ }
240
+ getPaymentHistory() {
241
+ if (!this.budgetAccount)
242
+ return [];
243
+ return [...this.budgetAccount.ledger];
244
+ }
245
+ getTotalSpentUsd() {
246
+ return this.budgetAccount?.spentAmount ?? 0;
247
+ }
248
+ getRemainingBudget() {
249
+ return this.budgetAccount?.remainingAmount ?? 0;
250
+ }
251
+ getHourlySpend() {
252
+ return this.budgetAccount?.hourlySpend ?? 0;
253
+ }
254
+ getConfig() {
255
+ return { ...this.paymentConfig };
256
+ }
257
+ }
258
+ //# sourceMappingURL=x402WalletService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"x402WalletService.js","sourceRoot":"","sources":["../../src/services/x402WalletService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import type { SwarmTemplate } from "../types.js";
2
+ export { researchPipelineTemplate, analysisPanelTemplate, codeReviewTemplate, debateAndDecideTemplate, } from "./swarmTemplates.js";
3
+ /**
4
+ * Registry of all available swarm templates.
5
+ * Ordered by specificity — more specific patterns first to avoid false matches.
6
+ */
7
+ export declare const SWARM_TEMPLATES: SwarmTemplate[];
8
+ /**
9
+ * Find the first matching template based on regex trigger patterns.
10
+ * Templates are checked in specificity order (most specific first).
11
+ * Returns null if no template matches.
12
+ */
13
+ export declare function findMatchingTemplate(text: string): SwarmTemplate | null;
14
+ /**
15
+ * Register a custom swarm template at runtime.
16
+ * Custom templates are appended to the end of the registry (lowest priority).
17
+ */
18
+ export declare function registerSwarmTemplate(template: SwarmTemplate): void;
19
+ /**
20
+ * Build a classification prompt listing all available templates.
21
+ * Used when keyword matching is ambiguous or fails.
22
+ */
23
+ export declare function buildClassificationPrompt(userMessage: string): string;
24
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/templates/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAQjD,OAAO,EACL,wBAAwB,EACxB,qBAAqB,EACrB,kBAAkB,EAClB,uBAAuB,GACxB,MAAM,qBAAqB,CAAC;AAE7B;;;GAGG;AACH,eAAO,MAAM,eAAe,EAAE,aAAa,EAK1C,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAQvE;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI,CAEnE;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAcrE"}
@@ -0,0 +1,51 @@
1
+ import { codeReviewTemplate, debateAndDecideTemplate, researchPipelineTemplate, analysisPanelTemplate, } from "./swarmTemplates.js";
2
+ export { researchPipelineTemplate, analysisPanelTemplate, codeReviewTemplate, debateAndDecideTemplate, } from "./swarmTemplates.js";
3
+ /**
4
+ * Registry of all available swarm templates.
5
+ * Ordered by specificity — more specific patterns first to avoid false matches.
6
+ */
7
+ export const SWARM_TEMPLATES = [
8
+ codeReviewTemplate, // Most specific triggers (code+review, audit, contract)
9
+ debateAndDecideTemplate, // Specific triggers (should I, pros/cons, debate)
10
+ researchPipelineTemplate, // Broader triggers (research, report, summarize)
11
+ analysisPanelTemplate, // Broadest triggers (analyze, evaluate, assess)
12
+ ];
13
+ /**
14
+ * Find the first matching template based on regex trigger patterns.
15
+ * Templates are checked in specificity order (most specific first).
16
+ * Returns null if no template matches.
17
+ */
18
+ export function findMatchingTemplate(text) {
19
+ if (!text)
20
+ return null;
21
+ for (const template of SWARM_TEMPLATES) {
22
+ if (template.triggerPatterns.some((pattern) => pattern.test(text))) {
23
+ return template;
24
+ }
25
+ }
26
+ return null;
27
+ }
28
+ /**
29
+ * Register a custom swarm template at runtime.
30
+ * Custom templates are appended to the end of the registry (lowest priority).
31
+ */
32
+ export function registerSwarmTemplate(template) {
33
+ SWARM_TEMPLATES.push(template);
34
+ }
35
+ /**
36
+ * Build a classification prompt listing all available templates.
37
+ * Used when keyword matching is ambiguous or fails.
38
+ */
39
+ export function buildClassificationPrompt(userMessage) {
40
+ const templateList = SWARM_TEMPLATES.map((t) => `- "${t.id}": ${t.description}`).join("\n");
41
+ return `Classify the user's request into one of these swarm templates, or "custom" if none fit:
42
+ ${templateList}
43
+ - "custom": None of the above — needs a custom swarm configuration
44
+
45
+ Return JSON: { "templateId": "<id or custom>", "task": "<the specific task to perform>" }
46
+
47
+ User message: "${userMessage}"
48
+
49
+ Return only valid JSON, no markdown.`;
50
+ }
51
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/templates/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,kBAAkB,EAClB,uBAAuB,EACvB,wBAAwB,EACxB,qBAAqB,GACtB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,wBAAwB,EACxB,qBAAqB,EACrB,kBAAkB,EAClB,uBAAuB,GACxB,MAAM,qBAAqB,CAAC;AAE7B;;;GAGG;AACH,MAAM,CAAC,MAAM,eAAe,GAAoB;IAC9C,kBAAkB,EAAQ,wDAAwD;IAClF,uBAAuB,EAAG,kDAAkD;IAC5E,wBAAwB,EAAE,iDAAiD;IAC3E,qBAAqB,EAAK,gDAAgD;CAC3E,CAAC;AAEF;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAAY;IAC/C,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,KAAK,MAAM,QAAQ,IAAI,eAAe,EAAE,CAAC;QACvC,IAAI,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;YACnE,OAAO,QAAQ,CAAC;QAClB,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,QAAuB;IAC3D,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACjC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,yBAAyB,CAAC,WAAmB;IAC3D,MAAM,YAAY,GAAG,eAAe,CAAC,GAAG,CACtC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,WAAW,EAAE,CACvC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,OAAO;EACP,YAAY;;;;;iBAKG,WAAW;;qCAES,CAAC;AACtC,CAAC"}
@@ -0,0 +1,22 @@
1
+ import type { SwarmTemplate } from "../types.js";
2
+ /**
3
+ * ResearchPipeline — Sequential chain: Researcher → FactChecker → Writer
4
+ * Use for: research tasks, report writing, investigation, summarization
5
+ */
6
+ export declare const researchPipelineTemplate: SwarmTemplate;
7
+ /**
8
+ * AnalysisPanel — MixtureOfAgents: 3 domain experts + 1 synthesizer
9
+ * Use for: multi-perspective analysis, evaluation, assessment
10
+ */
11
+ export declare const analysisPanelTemplate: SwarmTemplate;
12
+ /**
13
+ * CodeReview — ConcurrentWorkflow: 3 parallel reviewers
14
+ * Use for: code review, smart contract audit, security check
15
+ */
16
+ export declare const codeReviewTemplate: SwarmTemplate;
17
+ /**
18
+ * DebateAndDecide — MajorityVoting: Proponent + Opponent + Judge
19
+ * Use for: decision-making, pros/cons analysis, should-I questions
20
+ */
21
+ export declare const debateAndDecideTemplate: SwarmTemplate;
22
+ //# sourceMappingURL=swarmTemplates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"swarmTemplates.d.ts","sourceRoot":"","sources":["../../src/templates/swarmTemplates.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD;;;GAGG;AACH,eAAO,MAAM,wBAAwB,EAAE,aAsDtC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,qBAAqB,EAAE,aA4DnC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,EAAE,aAoDhC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,uBAAuB,EAAE,aAoDrC,CAAC"}