agentcash 0.5.0 → 0.6.1

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.
@@ -104296,6 +104296,24 @@ function restore2() {
104296
104296
  restore();
104297
104297
  }
104298
104298
 
104299
+ // src/shared/version.ts
104300
+ init_cjs_shims();
104301
+ var import_fs3 = require("fs");
104302
+ var import_path2 = require("path");
104303
+ var import_url = require("url");
104304
+ function getVersion2() {
104305
+ if (true) {
104306
+ return "0.6.1";
104307
+ }
104308
+ const __dirname3 = (0, import_path2.dirname)((0, import_url.fileURLToPath)(importMetaUrl));
104309
+ const pkg = JSON.parse(
104310
+ (0, import_fs3.readFileSync)((0, import_path2.join)(__dirname3, "../../package.json"), "utf-8")
104311
+ );
104312
+ return pkg.version;
104313
+ }
104314
+ var MCP_VERSION = getVersion2();
104315
+ var DIST_TAG = MCP_VERSION.includes("-beta") ? "beta" : "latest";
104316
+
104299
104317
  // src/shared/neverthrow/fetch/index.ts
104300
104318
  init_cjs_shims();
104301
104319
  var import_content_type = __toESM(require_content_type(), 1);
@@ -104448,7 +104466,7 @@ var TEMPO_TOKEN_ADDRESS = "0x20c0000000000000000000000000000000000000";
104448
104466
 
104449
104467
  // src/shared/mpp-enabled.ts
104450
104468
  init_cjs_shims();
104451
- var isMppEnabled = () => "0.5.0".includes("-mpp");
104469
+ var isMppEnabled = () => "0.6.1".includes("-mpp");
104452
104470
 
104453
104471
  // src/shared/operations/fetch-with-payment.ts
104454
104472
  init_cjs_shims();
@@ -110134,7 +110152,7 @@ var registerFetchTool = ({
110134
110152
  });
110135
110153
  }
110136
110154
  };
110137
- const provider = flags.provider ?? account.address;
110155
+ const provider = flags.provider ?? `agentcash@${MCP_VERSION}`;
110138
110156
  const request = buildRequest2({
110139
110157
  input,
110140
110158
  address: account.address,
@@ -110172,6 +110190,9 @@ var registerFetchTool = ({
110172
110190
  // src/server/tools/auth-fetch.ts
110173
110191
  init_cjs_shims();
110174
110192
 
110193
+ // src/shared/operations/fetch-with-auth.ts
110194
+ init_cjs_shims();
110195
+
110175
110196
  // src/server/lib/x402-extensions.ts
110176
110197
  init_cjs_shims();
110177
110198
  var getBazaarExtension = (extensions) => {
@@ -110198,6 +110219,54 @@ var getSiwxExtension = (extensions) => {
110198
110219
  };
110199
110220
  };
110200
110221
 
110222
+ // src/shared/operations/fetch-with-auth.ts
110223
+ function createFetchWithAuth(options) {
110224
+ const { surface: surface2, account, timeout = DEFAULT_USER_FETCH_TIMEOUT } = options;
110225
+ return async (request) => {
110226
+ const retryRequest = request.clone();
110227
+ const httpClient = new x402HTTPClient(new x402Client());
110228
+ const firstResult = await safeFetch(surface2, request, timeout);
110229
+ if (firstResult.isErr()) return firstResult;
110230
+ const firstResponse = firstResult.value;
110231
+ if (firstResponse.status !== 402) {
110232
+ return fetchOk({
110233
+ outcome: "response",
110234
+ response: firstResponse,
110235
+ authenticated: false
110236
+ });
110237
+ }
110238
+ const paymentRequiredResult = await safeGetPaymentRequired(
110239
+ surface2,
110240
+ httpClient,
110241
+ firstResponse
110242
+ );
110243
+ if (paymentRequiredResult.isErr()) return paymentRequiredResult;
110244
+ const paymentRequired = paymentRequiredResult.value;
110245
+ const siwxExtension = getSiwxExtension(paymentRequired.extensions);
110246
+ if (!siwxExtension) {
110247
+ return fetchOk({
110248
+ outcome: "no_siwx_extension",
110249
+ extensions: Object.keys(paymentRequired.extensions ?? {})
110250
+ });
110251
+ }
110252
+ const payloadResult = await safeCreateSIWxPayload(
110253
+ surface2,
110254
+ siwxExtension,
110255
+ account
110256
+ );
110257
+ if (payloadResult.isErr()) return payloadResult;
110258
+ const siwxHeader = encodeSIWxHeader(payloadResult.value);
110259
+ retryRequest.headers.set("SIGN-IN-WITH-X", siwxHeader);
110260
+ return (await safeFetch(surface2, retryRequest, timeout)).andThen(
110261
+ (response) => fetchOk({
110262
+ outcome: "response",
110263
+ response,
110264
+ authenticated: true
110265
+ })
110266
+ );
110267
+ };
110268
+ }
110269
+
110201
110270
  // src/server/tools/auth-fetch.ts
110202
110271
  var toolName2 = "fetch_with_auth";
110203
110272
  var registerAuthTools = ({
@@ -110219,78 +110288,28 @@ var registerAuthTools = ({
110219
110288
  }
110220
110289
  },
110221
110290
  async (input) => {
110222
- const httpClient = new x402HTTPClient(new x402Client());
110223
- const firstResult = await safeFetch(
110224
- toolName2,
110225
- buildRequest2({ input, address: account.address, sessionId }),
110226
- input.timeout ?? DEFAULT_USER_FETCH_TIMEOUT
110227
- );
110228
- if (firstResult.isErr()) {
110229
- return mcpError(firstResult);
110230
- }
110231
- const firstResponse = firstResult.value;
110232
- if (firstResponse.status !== 402) {
110233
- if (!firstResponse.ok) {
110234
- return mcpErrorFetch(toolName2, firstResponse);
110235
- }
110236
- const parseResponseResult2 = await safeParseResponse(
110237
- toolName2,
110238
- firstResponse
110239
- );
110240
- if (parseResponseResult2.isErr()) {
110241
- return mcpError(parseResponseResult2);
110242
- }
110243
- return mcpSuccessResponse(parseResponseResult2.value);
110244
- }
110245
- const getPaymentRequiredResult = await safeGetPaymentRequired(
110246
- toolName2,
110247
- httpClient,
110248
- firstResponse
110249
- );
110250
- if (getPaymentRequiredResult.isErr()) {
110251
- return mcpError(getPaymentRequiredResult);
110291
+ const result = await createFetchWithAuth({
110292
+ surface: toolName2,
110293
+ account,
110294
+ timeout: input.timeout ?? DEFAULT_USER_FETCH_TIMEOUT
110295
+ })(buildRequest2({ input, address: account.address, sessionId }));
110296
+ if (result.isErr()) {
110297
+ return mcpError(result);
110252
110298
  }
110253
- const paymentRequired = getPaymentRequiredResult.value;
110254
- const siwxExtension = getSiwxExtension(paymentRequired.extensions);
110255
- if (!siwxExtension) {
110299
+ const value = result.value;
110300
+ if (value.outcome === "no_siwx_extension") {
110256
110301
  return mcpSuccessJson({
110257
110302
  error: "Endpoint returned 402 but no sign-in-with-x extension found",
110258
110303
  statusCode: 402,
110259
- extensions: Object.keys(paymentRequired.extensions ?? {}),
110304
+ extensions: value.extensions,
110260
110305
  hint: "This endpoint may require payment instead of authentication. Use execute_call for paid requests."
110261
110306
  });
110262
110307
  }
110263
- const payloadResult = await safeCreateSIWxPayload(
110264
- toolName2,
110265
- siwxExtension,
110266
- account
110267
- );
110268
- if (payloadResult.isErr()) {
110269
- return mcpError(payloadResult);
110270
- }
110271
- const siwxHeader = encodeSIWxHeader(payloadResult.value);
110272
- const authedRequest = buildRequest2({
110273
- input,
110274
- address: account.address,
110275
- sessionId
110276
- });
110277
- authedRequest.headers.set("SIGN-IN-WITH-X", siwxHeader);
110278
- const authedResult = await safeFetch(
110279
- toolName2,
110280
- authedRequest,
110281
- input.timeout ?? DEFAULT_USER_FETCH_TIMEOUT
110282
- );
110283
- if (authedResult.isErr()) {
110284
- return mcpError(authedResult);
110285
- }
110286
- const authedResponse = authedResult.value;
110287
- if (!authedResponse.ok) {
110288
- return mcpErrorFetch(toolName2, authedResponse);
110308
+ const { response } = value;
110309
+ if (!response.ok) {
110310
+ return mcpErrorFetch(toolName2, response);
110289
110311
  }
110290
- const parseResponseResult = await safeParseResponse(
110291
- toolName2,
110292
- authedResponse
110293
- );
110312
+ const parseResponseResult = await safeParseResponse(toolName2, response);
110294
110313
  if (parseResponseResult.isErr()) {
110295
110314
  return mcpError(parseResponseResult);
110296
110315
  }
@@ -110903,18 +110922,18 @@ init_cjs_shims();
110903
110922
 
110904
110923
  // src/shared/state.ts
110905
110924
  init_cjs_shims();
110906
- var import_fs3 = __toESM(require("fs"), 1);
110925
+ var import_fs4 = __toESM(require("fs"), 1);
110907
110926
  var STATE_FILE = configFile("state.json");
110908
110927
  var stateSchema = zod_default.looseObject({
110909
110928
  redeemedCodes: zod_default.array(zod_default.string())
110910
110929
  }).partial();
110911
110930
  var getState = () => {
110912
- const stateFileExists = import_fs3.default.existsSync(STATE_FILE);
110931
+ const stateFileExists = import_fs4.default.existsSync(STATE_FILE);
110913
110932
  if (!stateFileExists) {
110914
- import_fs3.default.writeFileSync(STATE_FILE, "{}");
110933
+ import_fs4.default.writeFileSync(STATE_FILE, "{}");
110915
110934
  return {};
110916
110935
  }
110917
- const stateFileContent = import_fs3.default.readFileSync(STATE_FILE, "utf-8");
110936
+ const stateFileContent = import_fs4.default.readFileSync(STATE_FILE, "utf-8");
110918
110937
  const result = stateSchema.safeParse(JSON.parse(stateFileContent));
110919
110938
  if (!result.success) {
110920
110939
  return {};
@@ -110924,7 +110943,7 @@ var getState = () => {
110924
110943
  var setState = (state) => {
110925
110944
  const existing = getState();
110926
110945
  const newState = stateSchema.parse({ ...existing, ...state });
110927
- import_fs3.default.writeFileSync(STATE_FILE, JSON.stringify(newState, null, 2));
110946
+ import_fs4.default.writeFileSync(STATE_FILE, JSON.stringify(newState, null, 2));
110928
110947
  };
110929
110948
 
110930
110949
  // src/shared/redeem-invite.ts
@@ -111021,26 +111040,6 @@ init_cjs_shims();
111021
111040
 
111022
111041
  // src/shared/operations/report-error.ts
111023
111042
  init_cjs_shims();
111024
-
111025
- // src/shared/version.ts
111026
- init_cjs_shims();
111027
- var import_fs5 = require("fs");
111028
- var import_path2 = require("path");
111029
- var import_url = require("url");
111030
- function getVersion2() {
111031
- if (true) {
111032
- return "0.5.0";
111033
- }
111034
- const __dirname3 = (0, import_path2.dirname)((0, import_url.fileURLToPath)(importMetaUrl));
111035
- const pkg = JSON.parse(
111036
- (0, import_fs5.readFileSync)((0, import_path2.join)(__dirname3, "../../package.json"), "utf-8")
111037
- );
111038
- return pkg.version;
111039
- }
111040
- var MCP_VERSION = getVersion2();
111041
- var DIST_TAG = MCP_VERSION.includes("-beta") ? "beta" : "latest";
111042
-
111043
- // src/shared/operations/report-error.ts
111044
111043
  async function submitErrorReport(surface2, input, address, dev) {
111045
111044
  const telemetryResult = await safeFetchJson(
111046
111045
  surface2,
@@ -111149,16 +111148,15 @@ init_cjs_shims();
111149
111148
  // src/shared/origins.ts
111150
111149
  init_cjs_shims();
111151
111150
  var ORIGINS = [
111152
- "https://enrichx402.com" /* EnrichX402 */,
111153
- "https://stablestudio.io" /* StableStudio */,
111154
- "https://socialx402.com" /* SocialX402 */,
111155
- "https://agentupload.dev" /* AgentUpload */,
111156
- "https://x402email.com" /* X402Email */,
111151
+ "https://stableenrich.dev" /* StableEnrich */,
111152
+ "https://stablesocial.dev" /* StableSocial */,
111153
+ "https://stablestudio.dev" /* StableStudio */,
111154
+ "https://stableupload.dev" /* StableUpload */,
111155
+ "https://stableemail.dev" /* StableEmail */,
111156
+ "https://stablejobs.dev" /* StableJobs */,
111157
111157
  "https://x402scan.com" /* X402Scan */,
111158
111158
  "https://shirt.sh" /* Shirt */,
111159
- "https://x402puppet.com" /* X402Puppet */,
111160
- "https://x402facilitator.com" /* X402Facilitator */,
111161
- "https://stablejobs.dev" /* StableJobs */
111159
+ "https://x402puppet.com" /* X402Puppet */
111162
111160
  ];
111163
111161
 
111164
111162
  // src/shared/operations/discover.ts
@@ -111227,7 +111225,7 @@ function registerDiscoveryTools(server) {
111227
111225
  description: `Find payment-protected resources on an origin. Returns a list of resource URLs.
111228
111226
  Use check_endpoint_schema separately to get detailed pricing/schema info for specific resources.
111229
111227
  Known default origins with resource packs. Discover if more needed:
111230
- - ${"https://enrichx402.com" /* EnrichX402 */} ->
111228
+ - ${"https://stableenrich.dev" /* StableEnrich */} ->
111231
111229
  People + Org search
111232
111230
  Google Maps (places + locations)
111233
111231
  Grok twitter search
@@ -111238,10 +111236,10 @@ function registerDiscoveryTools(server) {
111238
111236
  Email enrichment
111239
111237
  Influencer email/username enrichment
111240
111238
  Hunter email verifier
111241
- - ${"https://socialx402.com" /* SocialX402 */} -> social media data for twitter, instagram, tiktok, youtube, facebook, reddit.
111242
- - ${"https://stablestudio.io" /* StableStudio */} -> generate and edit images / videos
111243
- - ${"https://agentupload.dev" /* AgentUpload */} -> upload and share files with others.
111244
- - ${"https://x402email.com" /* X402Email */} -> send emails.
111239
+ - ${"https://stablesocial.dev" /* StableSocial */} -> social media data for twitter, instagram, tiktok, youtube, facebook, reddit.
111240
+ - ${"https://stablestudio.dev" /* StableStudio */} -> generate and edit images / videos
111241
+ - ${"https://stableupload.dev" /* StableUpload */} -> upload and share files with others.
111242
+ - ${"https://stableemail.dev" /* StableEmail */} -> send emails.
111245
111243
  `,
111246
111244
  inputSchema: external_exports3.object({
111247
111245
  url: external_exports3.url().describe(
@@ -111294,26 +111292,30 @@ function registerDiscoveryTools(server) {
111294
111292
  // src/server/resources/origins.ts
111295
111293
  init_cjs_shims();
111296
111294
  var ORIGIN_METADATA = {
111297
- ["https://enrichx402.com" /* EnrichX402 */]: {
111298
- title: "EnrichX402",
111295
+ ["https://stableenrich.dev" /* StableEnrich */]: {
111296
+ title: "StableEnrich",
111299
111297
  description: "People/org search, Google Maps, Grok twitter search, Exa web search, LinkedIn data, Firecrawl scrape, WhitePages, email enrichment"
111300
111298
  },
111301
- ["https://socialx402.com" /* SocialX402 */]: {
111302
- title: "SocialX402",
111299
+ ["https://stablesocial.dev" /* StableSocial */]: {
111300
+ title: "StableSocial",
111303
111301
  description: "Social media data for Twitter, Instagram, TikTok, YouTube, Facebook, Reddit"
111304
111302
  },
111305
- ["https://stablestudio.io" /* StableStudio */]: {
111303
+ ["https://stablestudio.dev" /* StableStudio */]: {
111306
111304
  title: "StableStudio",
111307
111305
  description: "Generate and edit images and videos"
111308
111306
  },
111309
- ["https://agentupload.dev" /* AgentUpload */]: {
111307
+ ["https://stableupload.dev" /* StableUpload */]: {
111310
111308
  title: "AgentUpload",
111311
111309
  description: "Upload and share files"
111312
111310
  },
111313
- ["https://x402email.com" /* X402Email */]: {
111314
- title: "X402 Email",
111311
+ ["https://stableemail.dev" /* StableEmail */]: {
111312
+ title: "StableEmail",
111315
111313
  description: "Send emails"
111316
111314
  },
111315
+ ["https://stablejobs.dev" /* StableJobs */]: {
111316
+ title: "StableJobs",
111317
+ description: "Search job postings"
111318
+ },
111317
111319
  ["https://x402scan.com" /* X402Scan */]: {
111318
111320
  title: "X402 Scan",
111319
111321
  description: "x402 protocol explorer"
@@ -111583,8 +111585,8 @@ If the user has an invite code, use \`redeem_invite\` to claim free USDC credits
111583
111585
 
111584
111586
  Use \`discover_api_endpoints\` to find x402-protected endpoints on a target origin. For example:
111585
111587
 
111586
- - \`${"https://enrichx402.com" /* EnrichX402 */}\` - Data enrichment APIs
111587
- - \`${"https://stablestudio.io" /* StableStudio */}\` - AI image generation APIs
111588
+ - \`${"https://stableenrich.dev" /* StableEnrich */}\` - Data enrichment APIs
111589
+ - \`${"https://stablestudio.dev" /* StableStudio */}\` - AI image generation APIs
111588
111590
 
111589
111591
  This returns a list of available endpoints with their pricing and schemas.
111590
111592
 
@@ -111652,7 +111654,7 @@ var registerGettingStartedPrompt = ({ server }) => {
111652
111654
 
111653
111655
  // src/server/prompts/enrich.ts
111654
111656
  init_cjs_shims();
111655
- var PROMPT_CONTENT2 = `To start, you should check this resource page: ${"https://enrichx402.com" /* EnrichX402 */}/llms.txt, which has access to all of the paid endpoints.
111657
+ var PROMPT_CONTENT2 = `To start, you should check this resource page: ${"https://stableenrich.dev" /* StableEnrich */}/llms.txt, which has access to all of the paid endpoints.
111656
111658
 
111657
111659
  - You have access to the agentcash MCP server, which allows you to call paid endpoints which contain potentially extremely useful information.
111658
111660
  - Here are the tools you have access to:
@@ -111698,16 +111700,16 @@ var PROMPT_CONTENT2 = `To start, you should check this resource page: ${"https:/
111698
111700
  - You should use these paid endpoints to find useful information whenever possible.
111699
111701
  - Opt to use the paid endpoints as often as possible, as they speed up your research and provide higher quality information than traditional WebFetch.
111700
111702
 
111701
- - **IMPORTANT:** All the API endpoints below (Exa, Firecrawl, Clado, Google Maps, Apollo, Grok, Whitepages, Hunter) are accessed via mcp__x402__fetch. They are NOT separate MCP tools. Call them like: mcp__x402__fetch(url="${"https://enrichx402.com" /* EnrichX402 */}/api/clado/contacts-enrich", method="POST", body={...})
111703
+ - **IMPORTANT:** All the API endpoints below (Exa, Firecrawl, Clado, Google Maps, Apollo, Grok, Whitepages, Hunter) are accessed via mcp__x402__fetch. They are NOT separate MCP tools. Call them like: mcp__x402__fetch(url="${"https://stableenrich.dev" /* StableEnrich */}/api/clado/contacts-enrich", method="POST", body={...})
111702
111704
  - Use the Exa and Firecrawl endpoints as advanced / better WebFetch. They will often return data that would otherwise return only javascript or blocked content.
111703
111705
  - If you get a 403 or error when using WebSearch or WebFetch on a website, try with Exa/Firecrawl endpoints immediately as they likely can get around the blockage.
111704
111706
  - Use the Clado endpoints (/api/clado/contacts-enrich, /api/clado/linkedin-scrape) to enrich information about people and find their linkedin or email addresses. If linkedin returns an error code, immediately try with the Clado endpoints.
111705
111707
  - Use the Google Maps endpoints to find reviews, or other local information. Always attempt to include review information in your findings if relevant.
111706
- - **Google Maps text-search/full endpoint:** When calling POST ${"https://enrichx402.com" /* EnrichX402 */}/api/google-maps/text-search/full, ALWAYS use maxResultCount=1-3, never 5. Using 5 produces too much context. If you get excessive context in the response, retry with maxResultCount=1.
111708
+ - **Google Maps text-search/full endpoint:** When calling POST ${"https://stableenrich.dev" /* StableEnrich */}/api/google-maps/text-search/full, ALWAYS use maxResultCount=1-3, never 5. Using 5 produces too much context. If you get excessive context in the response, retry with maxResultCount=1.
111707
111709
  - All these are REST API endpoints called via mcp__x402__fetch - do NOT attempt to call mcp__clado__*, mcp__exa__*, mcp__google_maps__*, etc. Those tools do not exist.
111708
111710
 
111709
111711
  PAID ENDPOINTS:
111710
- These endpoints are always available at ${"https://enrichx402.com" /* EnrichX402 */}. You should always fetch from this domain.`;
111712
+ These endpoints are always available at ${"https://stableenrich.dev" /* StableEnrich */}. You should always fetch from this domain.`;
111711
111713
  var INFER_TASK_INSTRUCTIONS = `No specific query was provided.
111712
111714
 
111713
111715
  Your task:
@@ -111773,7 +111775,7 @@ var import_path3 = require("path");
111773
111775
  var import_url2 = require("url");
111774
111776
  function getVersion3() {
111775
111777
  if (true) {
111776
- return "0.5.0";
111778
+ return "0.6.1";
111777
111779
  }
111778
111780
  const __dirname3 = (0, import_path3.dirname)((0, import_url2.fileURLToPath)(importMetaUrl));
111779
111781
  const pkg = JSON.parse(
@@ -111788,11 +111790,11 @@ var DIST_TAG2 = MCP_VERSION2.includes("-beta") ? "beta" : "latest";
111788
111790
  init_cjs_shims();
111789
111791
  function buildServerInstructions() {
111790
111792
  return `Known API origins:
111791
- - ${"https://enrichx402.com" /* EnrichX402 */} \u2014 People/org search, Google Maps, Grok twitter search, Exa web search, LinkedIn data, Firecrawl scrape, WhitePages, email enrichment, Hunter email verifier
111792
- - ${"https://socialx402.com" /* SocialX402 */} \u2014 Social media data (Twitter, Instagram, TikTok, YouTube, Facebook, Reddit)
111793
- - ${"https://stablestudio.io" /* StableStudio */} \u2014 Generate and edit images/videos
111794
- - ${"https://agentupload.dev" /* AgentUpload */} \u2014 Upload and share files
111795
- - ${"https://x402email.com" /* X402Email */} \u2014 Send emails
111793
+ - ${"https://stableenrich.dev" /* StableEnrich */} \u2014 People/org search, Google Maps, Grok twitter search, Exa web search, LinkedIn data, Firecrawl scrape, WhitePages, email enrichment, Hunter email verifier
111794
+ - ${"https://stablesocial.dev" /* StableSocial */} \u2014 Social media data (Twitter, Instagram, TikTok, YouTube, Facebook, Reddit)
111795
+ - ${"https://stablestudio.dev" /* StableStudio */} \u2014 Generate and edit images/videos
111796
+ - ${"https://stableupload.dev" /* StableUpload */} \u2014 Upload and share files
111797
+ - ${"https://stableemail.dev" /* StableEmail */} \u2014 Send emails
111796
111798
 
111797
111799
  Workflow:
111798
111800
  1. Use discover_api_endpoints to find available endpoints on an origin.
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  isMppEnabled
3
- } from "./chunk-3APKEOT5.js";
3
+ } from "./chunk-J42QBBCK.js";
4
4
  import {
5
5
  MCP_VERSION
6
- } from "./chunk-ZA22MAAS.js";
6
+ } from "./chunk-TILJ7XBO.js";
7
7
  import {
8
8
  getBalance,
9
9
  getBaseUrl,
@@ -119,4 +119,4 @@ export {
119
119
  getWalletInfo,
120
120
  submitErrorReport
121
121
  };
122
- //# sourceMappingURL=chunk-GFY6TVGD.js.map
122
+ //# sourceMappingURL=chunk-GFGSZCZI.js.map
@@ -0,0 +1,7 @@
1
+ // src/shared/mpp-enabled.ts
2
+ var isMppEnabled = () => "0.6.1".includes("-mpp");
3
+
4
+ export {
5
+ isMppEnabled
6
+ };
7
+ //# sourceMappingURL=chunk-J42QBBCK.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  isMppEnabled
3
- } from "./chunk-3APKEOT5.js";
3
+ } from "./chunk-J42QBBCK.js";
4
4
  import {
5
5
  DEFAULT_FETCH_TIMEOUT,
6
6
  err,
@@ -645,4 +645,4 @@ export {
645
645
  checkEndpoint,
646
646
  discoverResources
647
647
  };
648
- //# sourceMappingURL=chunk-X2RMQONA.js.map
648
+ //# sourceMappingURL=chunk-LXQ32DT5.js.map
@@ -4,7 +4,7 @@ import { dirname, join } from "path";
4
4
  import { fileURLToPath } from "url";
5
5
  function getVersion() {
6
6
  if (true) {
7
- return "0.5.0";
7
+ return "0.6.1";
8
8
  }
9
9
  const __dirname2 = dirname(fileURLToPath(import.meta.url));
10
10
  const pkg = JSON.parse(
@@ -19,4 +19,4 @@ export {
19
19
  MCP_VERSION,
20
20
  DIST_TAG
21
21
  };
22
- //# sourceMappingURL=chunk-ZA22MAAS.js.map
22
+ //# sourceMappingURL=chunk-TILJ7XBO.js.map
@@ -1,19 +1,22 @@
1
1
  import {
2
2
  getTempoBalance
3
- } from "./chunk-GFY6TVGD.js";
3
+ } from "./chunk-GFGSZCZI.js";
4
4
  import {
5
5
  detectPaymentProtocols,
6
+ getSiwxExtension,
6
7
  safeCreatePaymentPayload,
8
+ safeCreateSIWxPayload,
7
9
  safeGetPaymentRequired,
8
10
  safeGetPaymentSettlement,
9
11
  tokenStringToNumber,
10
12
  x402Err,
11
13
  x402Ok
12
- } from "./chunk-X2RMQONA.js";
14
+ } from "./chunk-LXQ32DT5.js";
13
15
  import {
14
16
  getBalance
15
17
  } from "./chunk-UFSCGP67.js";
16
18
  import {
19
+ DEFAULT_USER_FETCH_TIMEOUT,
17
20
  err,
18
21
  fetchErr,
19
22
  fetchOk,
@@ -351,10 +354,61 @@ async function handleMppPayment(surface, response, clonedRequest, options) {
351
354
  );
352
355
  }
353
356
 
357
+ // src/shared/operations/fetch-with-auth.ts
358
+ import { x402Client, x402HTTPClient } from "@x402/core/client";
359
+ import { encodeSIWxHeader } from "@x402/extensions/sign-in-with-x";
360
+ function createFetchWithAuth(options) {
361
+ const { surface, account, timeout = DEFAULT_USER_FETCH_TIMEOUT } = options;
362
+ return async (request) => {
363
+ const retryRequest = request.clone();
364
+ const httpClient = new x402HTTPClient(new x402Client());
365
+ const firstResult = await safeFetch(surface, request, timeout);
366
+ if (firstResult.isErr()) return firstResult;
367
+ const firstResponse = firstResult.value;
368
+ if (firstResponse.status !== 402) {
369
+ return fetchOk({
370
+ outcome: "response",
371
+ response: firstResponse,
372
+ authenticated: false
373
+ });
374
+ }
375
+ const paymentRequiredResult = await safeGetPaymentRequired(
376
+ surface,
377
+ httpClient,
378
+ firstResponse
379
+ );
380
+ if (paymentRequiredResult.isErr()) return paymentRequiredResult;
381
+ const paymentRequired = paymentRequiredResult.value;
382
+ const siwxExtension = getSiwxExtension(paymentRequired.extensions);
383
+ if (!siwxExtension) {
384
+ return fetchOk({
385
+ outcome: "no_siwx_extension",
386
+ extensions: Object.keys(paymentRequired.extensions ?? {})
387
+ });
388
+ }
389
+ const payloadResult = await safeCreateSIWxPayload(
390
+ surface,
391
+ siwxExtension,
392
+ account
393
+ );
394
+ if (payloadResult.isErr()) return payloadResult;
395
+ const siwxHeader = encodeSIWxHeader(payloadResult.value);
396
+ retryRequest.headers.set("SIGN-IN-WITH-X", siwxHeader);
397
+ return (await safeFetch(surface, retryRequest, timeout)).andThen(
398
+ (response) => fetchOk({
399
+ outcome: "response",
400
+ response,
401
+ authenticated: true
402
+ })
403
+ );
404
+ };
405
+ }
406
+
354
407
  export {
355
408
  requestSchema,
356
409
  buildRequest,
357
410
  safeGetMppChallenge,
358
- createFetchWithPayment
411
+ createFetchWithPayment,
412
+ createFetchWithAuth
359
413
  };
360
- //# sourceMappingURL=chunk-VNUJXNUN.js.map
414
+ //# sourceMappingURL=chunk-UDNRXMYT.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/server/tools/lib/request.ts","../../src/shared/neverthrow/mpp/index.ts","../../src/shared/operations/fetch-with-payment.ts","../../src/shared/operations/fetch-with-auth.ts"],"sourcesContent":["import z from 'zod';\n\nimport type { Address } from 'viem';\n\nexport const requestSchema = z.object({\n url: z.url().describe('The endpoint URL'),\n method: z\n .enum(['GET', 'POST', 'PUT', 'DELETE', 'PATCH'])\n .optional()\n .describe('HTTP method. Defaults to GET for fetch operations.'),\n body: z\n .unknown()\n .optional()\n .describe('Request body for POST/PUT/PATCH methods'),\n headers: z\n .record(z.string(), z.string())\n .optional()\n .describe('Additional headers to include')\n .default({}),\n timeout: z\n .number()\n .int()\n .positive()\n .optional()\n .describe('Request timeout in milliseconds'),\n});\n\ninterface BuildRequestProps {\n input: z.infer<typeof requestSchema>;\n address?: Address;\n sessionId?: string;\n provider?: string;\n}\n\nexport const buildRequest = ({\n input,\n address,\n sessionId,\n provider,\n}: BuildRequestProps) => {\n return new Request(input.url, {\n method: input.method ?? 'GET',\n body: input.body\n ? typeof input.body === 'string'\n ? input.body\n : JSON.stringify(input.body)\n : undefined,\n headers: {\n ...(input.body ? { 'Content-Type': 'application/json' } : {}),\n ...input.headers,\n ...(address\n ? { 'X-Wallet-Address': address, 'X-Client-ID': provider }\n : {}),\n ...(sessionId ? { 'X-Session-ID': sessionId } : {}),\n },\n });\n};\n","import { Challenge, Receipt } from 'mppx';\nimport {\n err,\n ok,\n resultFromPromise,\n resultFromThrowable,\n} from '@agentcash/neverthrow';\n\nimport type { BaseMppError } from './types';\nconst errorType = 'mpp';\n\nexport const mppOk = <T>(value: T) => ok(value);\nexport const mppErr = (surface: string, error: BaseMppError) =>\n err(errorType, surface, error);\n\nconst mppResultFromPromise = <T>(\n surface: string,\n promise: Promise<T>,\n error: (e: unknown) => BaseMppError\n) => resultFromPromise(errorType, surface, promise, error);\n\nconst mppResultFromThrowable = <T>(\n surface: string,\n fn: () => T,\n error: (e: unknown) => BaseMppError\n) => resultFromThrowable(errorType, surface, fn, error);\n\nexport const safeGetMppChallenge = (surface: string, response: Response) => {\n return mppResultFromThrowable(\n surface,\n () => Challenge.fromResponse(response),\n error => ({\n cause: 'parse_mpp_challenge',\n message:\n error instanceof Error\n ? error.message\n : 'Failed to parse MPP challenge from response',\n })\n );\n};\n\nexport const safeCreateMppCredential = (\n surface: string,\n mppxClient: { createCredential: (response: Response) => Promise<string> },\n response: Response\n) => {\n return mppResultFromPromise(\n surface,\n mppxClient.createCredential(response),\n error => ({\n cause: 'create_mpp_credential',\n message:\n error instanceof Error\n ? error.message\n : 'Failed to create MPP credential',\n })\n );\n};\n\nexport const safeGetMppReceipt = (surface: string, response: Response) => {\n return mppResultFromThrowable(\n surface,\n () => Receipt.fromResponse(response),\n error => ({\n cause: 'parse_mpp_receipt',\n message:\n error instanceof Error\n ? error.message\n : 'Failed to parse MPP receipt from response',\n })\n );\n};\n","import { formatUnits } from 'viem';\n\nimport type { x402HTTPClient } from '@x402/core/client';\nimport type { Address } from 'viem';\nimport type { GlobalFlags } from '@/types';\n\nimport { resultFromPromise } from '@agentcash/neverthrow';\n\nimport { fetchErr, fetchOk, safeFetch } from '@/shared/neverthrow/fetch';\nimport {\n safeCreatePaymentPayload,\n safeGetPaymentRequired,\n safeGetPaymentSettlement,\n x402Err,\n x402Ok,\n} from '@/shared/neverthrow/x402';\nimport {\n safeGetMppChallenge,\n safeCreateMppCredential,\n safeGetMppReceipt,\n mppErr,\n mppOk,\n} from '@/shared/neverthrow/mpp';\n\nimport { log } from '@/shared/log';\nimport { detectPaymentProtocols } from '@/shared/protocol';\nimport { tokenStringToNumber } from '@/shared/token';\nimport { getBalance } from '@/shared/balance';\nimport { getTempoBalance } from '@/shared/tempo-balance';\n\n/**\n * Hook called before a payment is executed.\n * Throw to abort. Return to proceed.\n * Matches existing checkBalance/checkTempoBalance throw-to-abort behavior.\n */\nexport type BeforePaymentHook = (ctx: {\n protocol: 'x402' | 'mpp';\n amount: number;\n currency: string;\n network: string;\n}) => Promise<void>;\n\nexport interface PaymentClients {\n x402: x402HTTPClient;\n mpp: { createCredential: (response: Response) => Promise<string> };\n}\n\nexport interface PaymentInfo {\n protocol: 'x402' | 'mpp';\n price?: string;\n payment?: {\n success: boolean;\n transactionHash?: string;\n };\n}\n\nexport interface FetchWithPaymentResult {\n response: Response;\n paymentInfo: PaymentInfo | null;\n}\n\nexport interface FetchWithPaymentOptions {\n surface: string;\n clients: PaymentClients;\n paymentMethod: 'x402' | 'mpp' | 'auto';\n account: { address: Address };\n flags: GlobalFlags;\n beforePayment?: BeforePaymentHook;\n timeout?: number;\n}\n\n/**\n * Create a fetch function with automatic dual-protocol payment handling.\n *\n * 1. Makes initial request\n * 2. If 402 response, detects protocol(s)\n * 3. Calls beforePayment hook (for balance checks)\n * 4. Creates payment credential/payload\n * 5. Retries request with payment headers\n */\nexport function createFetchWithPayment(options: FetchWithPaymentOptions) {\n const { surface, clients, paymentMethod, beforePayment, timeout } = options;\n\n return async (request: Request) => {\n const clonedRequest = request.clone();\n const fallbackRequest = request.clone();\n\n const probeResult = await safeFetch(surface, request, timeout);\n\n if (probeResult.isErr()) {\n return fetchErr(surface, probeResult.error);\n }\n\n // Not a 402 response — return as-is\n if (probeResult.value.status !== 402) {\n return probeResult.andThen(response =>\n fetchOk<FetchWithPaymentResult>({ response, paymentInfo: null })\n );\n }\n\n const response = probeResult.value;\n\n // User explicitly chose a protocol — use that, no fallback\n if (paymentMethod !== 'auto') {\n if (paymentMethod === 'mpp') {\n return handleMppPayment(surface, response, clonedRequest, options);\n }\n return handleX402Payment(\n surface,\n response,\n clonedRequest,\n clients.x402,\n beforePayment,\n timeout\n );\n }\n\n // Auto: detect available protocols, pick by higher balance\n const available = detectPaymentProtocols(response);\n\n let preferred: 'x402' | 'mpp';\n\n if (available.length === 1) {\n preferred = available[0]!;\n } else {\n // Both protocols available — pick by balance\n preferred = await pickByBalance(surface, response, options);\n }\n\n const fallback =\n available.length > 1 ? (preferred === 'mpp' ? 'x402' : 'mpp') : null;\n\n const result =\n preferred === 'mpp'\n ? await handleMppPayment(surface, response, clonedRequest, options)\n : await handleX402Payment(\n surface,\n response,\n clonedRequest,\n clients.x402,\n beforePayment,\n timeout\n );\n\n if (result.isErr() && fallback) {\n // Preferred failed — try fallback with a fresh request clone\n return fallback === 'mpp'\n ? handleMppPayment(surface, response, fallbackRequest, options)\n : handleX402Payment(\n surface,\n response,\n fallbackRequest,\n clients.x402,\n beforePayment,\n timeout\n );\n }\n\n return result;\n };\n}\n\n/**\n * Pick the preferred protocol by comparing wallet balances.\n * Falls back to 'mpp' if both balances fail to fetch.\n */\nasync function pickByBalance(\n surface: string,\n response: Response,\n options: FetchWithPaymentOptions\n): Promise<'x402' | 'mpp'> {\n const { account } = options;\n\n // Get x402 (USDC on Base) balance\n const x402BalanceResult = await resultFromPromise(\n 'balance',\n surface,\n getBalance({\n address: account.address,\n surface,\n }).then(r => (r.isOk() ? r.value.balance : 0)),\n () => ({\n cause: 'x402_balance' as const,\n message: 'Failed to get x402 balance',\n })\n );\n\n if (x402BalanceResult.isErr()) {\n log.debug('Balance comparison failed, defaulting to mpp');\n return 'mpp';\n }\n\n const x402Balance = x402BalanceResult.value;\n\n // Get MPP (Tempo) balance — need token address from the challenge\n let mppBalance = 0;\n const challengeResult = safeGetMppChallenge(surface, response);\n if (challengeResult.isOk()) {\n const currency = challengeResult.value.request.currency as\n | string\n | undefined;\n const decimals =\n (challengeResult.value.request.decimals as number | undefined) ?? 6;\n if (currency) {\n const tempoResult = await resultFromPromise(\n 'tempo',\n surface,\n getTempoBalance({\n address: account.address,\n tokenAddress: currency as Address,\n }),\n () => ({\n cause: 'tempo_balance' as const,\n message: 'Tempo balance check failed',\n })\n );\n if (tempoResult.isOk()) {\n mppBalance = Number(formatUnits(tempoResult.value.balance, decimals));\n }\n }\n }\n\n log.info(`Protocol selection — x402: $${x402Balance}, mpp: $${mppBalance}`);\n return x402Balance >= mppBalance ? 'x402' : 'mpp';\n}\n\nasync function handleX402Payment(\n surface: string,\n response: Response,\n clonedRequest: Request,\n client: x402HTTPClient,\n beforePayment?: BeforePaymentHook,\n timeout?: number\n) {\n const paymentRequiredResult = await safeGetPaymentRequired(\n surface,\n client,\n response\n );\n\n if (paymentRequiredResult.isErr()) {\n return paymentRequiredResult;\n }\n\n const paymentRequired = paymentRequiredResult.value;\n\n // Call beforePayment hook (e.g. balance check) before signing\n if (beforePayment) {\n const accept = paymentRequired.accepts[0];\n if (accept) {\n const amount = tokenStringToNumber(accept.amount);\n const hookResult = await resultFromPromise(\n 'x402',\n surface,\n beforePayment({\n protocol: 'x402',\n amount,\n currency: 'USDC',\n network: accept.network,\n }),\n e => ({\n cause: 'payment_already_attempted' as const,\n message:\n e instanceof Error ? e.message : 'Before-payment hook failed',\n })\n );\n if (hookResult.isErr()) {\n return x402Err(surface, hookResult.error);\n }\n }\n }\n\n const paymentPayloadResult = await safeCreatePaymentPayload(\n surface,\n client,\n paymentRequired\n );\n\n if (paymentPayloadResult.isErr()) {\n return paymentPayloadResult;\n }\n\n const paymentPayload = paymentPayloadResult.value;\n\n // Encode payment header\n const paymentHeaders = client.encodePaymentSignatureHeader(paymentPayload);\n\n // Check if this is already a retry to prevent infinite loops\n if (\n clonedRequest.headers.has('PAYMENT-SIGNATURE') ||\n clonedRequest.headers.has('X-PAYMENT')\n ) {\n return x402Err(surface, {\n cause: 'payment_already_attempted',\n message: 'Payment already attempted',\n });\n }\n\n // Add payment headers to cloned request\n for (const [key, value] of Object.entries(paymentHeaders)) {\n clonedRequest.headers.set(key, value);\n }\n clonedRequest.headers.set(\n 'Access-Control-Expose-Headers',\n 'PAYMENT-RESPONSE,X-PAYMENT-RESPONSE'\n );\n\n // Retry the request with payment\n return await safeFetch(surface, clonedRequest, timeout).andThen(\n paidResponse => {\n const settlementResult = safeGetPaymentSettlement(\n surface,\n client,\n paidResponse\n );\n\n return x402Ok<FetchWithPaymentResult>({\n response: paidResponse,\n paymentInfo: {\n protocol: 'x402',\n price: tokenStringToNumber(\n paymentPayload.accepted.amount\n ).toLocaleString('en-US', {\n style: 'currency',\n currency: 'USD',\n }),\n ...(settlementResult.isOk()\n ? {\n payment: {\n success: settlementResult.value.success,\n transactionHash: settlementResult.value.transaction,\n },\n }\n : {}),\n },\n });\n }\n );\n}\n\nasync function handleMppPayment(\n surface: string,\n response: Response,\n clonedRequest: Request,\n options: FetchWithPaymentOptions\n) {\n const { clients, beforePayment, timeout } = options;\n const mppxClient = clients.mpp;\n\n // Prevent retry loops\n if (clonedRequest.headers.has('Authorization')) {\n return mppErr(surface, {\n cause: 'mpp_payment_already_attempted',\n message: 'MPP payment already attempted',\n });\n }\n\n // Parse the challenge from the WWW-Authenticate header\n const challengeResult = safeGetMppChallenge(surface, response);\n\n if (challengeResult.isErr()) {\n return challengeResult;\n }\n\n const challenge = challengeResult.value;\n\n // Extract payment info from challenge request\n const amount = challenge.request.amount as string | undefined;\n const decimals = (challenge.request.decimals as number | undefined) ?? 6;\n const currency = challenge.request.currency as string | undefined;\n\n // Call beforePayment hook (e.g. balance check)\n if (beforePayment && amount && currency) {\n const numericAmount = Number(formatUnits(BigInt(amount), decimals));\n const hookResult = await resultFromPromise(\n 'mpp',\n surface,\n beforePayment({\n protocol: 'mpp',\n amount: numericAmount,\n currency,\n network: `tempo:${challenge.method}`,\n }),\n e => ({\n cause: 'mpp_payment_already_attempted' as const,\n message: e instanceof Error ? e.message : 'Before-payment hook failed',\n })\n );\n if (hookResult.isErr()) {\n return mppErr(surface, hookResult.error);\n }\n }\n\n // Create credential (signs transaction on Tempo)\n const credentialResult = await safeCreateMppCredential(\n surface,\n mppxClient,\n response\n );\n\n if (credentialResult.isErr()) {\n return credentialResult;\n }\n\n const credential = credentialResult.value;\n\n // Set Authorization header on cloned request\n clonedRequest.headers.set('Authorization', credential);\n\n // Retry the fetch with the credential\n return await safeFetch(surface, clonedRequest, timeout).andThen(\n paidResponse => {\n // Parse the receipt for transaction hash\n const receiptResult = safeGetMppReceipt(surface, paidResponse);\n\n const priceDisplay = amount\n ? Number(formatUnits(BigInt(amount), decimals)).toLocaleString(\n 'en-US',\n {\n style: 'currency',\n currency: 'USD',\n }\n )\n : undefined;\n\n return mppOk<FetchWithPaymentResult>({\n response: paidResponse,\n paymentInfo: {\n protocol: 'mpp',\n ...(priceDisplay ? { price: priceDisplay } : {}),\n ...(receiptResult.isOk()\n ? {\n payment: {\n success: true,\n transactionHash: receiptResult.value.reference,\n },\n }\n : {}),\n },\n });\n }\n );\n}\n","import { x402Client, x402HTTPClient } from '@x402/core/client';\nimport { encodeSIWxHeader } from '@x402/extensions/sign-in-with-x';\n\nimport type { PrivateKeyAccount } from 'viem';\n\nimport {\n DEFAULT_USER_FETCH_TIMEOUT,\n fetchOk,\n safeFetch,\n} from '@/shared/neverthrow/fetch';\nimport {\n safeCreateSIWxPayload,\n safeGetPaymentRequired,\n} from '@/shared/neverthrow/x402';\nimport { getSiwxExtension } from '@/server/lib/x402-extensions';\n\nexport type FetchWithAuthResult =\n | { outcome: 'response'; response: Response; authenticated: boolean }\n | { outcome: 'no_siwx_extension'; extensions: string[] };\n\nexport interface FetchWithAuthOptions {\n surface: string;\n account: PrivateKeyAccount;\n timeout?: number;\n}\n\n/**\n * Create a fetch function with automatic SIWX (Sign-In With X) authentication.\n *\n * 1. Makes initial request\n * 2. If 402, parses for SIWX extension\n * 3. Creates signed wallet proof\n * 4. Retries with SIGN-IN-WITH-X header\n *\n * Returns a discriminated result:\n * - `outcome: 'response'` — a Response (authenticated or not), consumer handles ok/error\n * - `outcome: 'no_siwx_extension'` — 402 without SIWX, consumer decides how to present\n */\nexport function createFetchWithAuth(options: FetchWithAuthOptions) {\n const { surface, account, timeout = DEFAULT_USER_FETCH_TIMEOUT } = options;\n\n return async (request: Request) => {\n const retryRequest = request.clone();\n const httpClient = new x402HTTPClient(new x402Client());\n\n const firstResult = await safeFetch(surface, request, timeout);\n\n if (firstResult.isErr()) return firstResult;\n\n const firstResponse = firstResult.value;\n\n if (firstResponse.status !== 402) {\n return fetchOk<FetchWithAuthResult>({\n outcome: 'response',\n response: firstResponse,\n authenticated: false,\n });\n }\n\n const paymentRequiredResult = await safeGetPaymentRequired(\n surface,\n httpClient,\n firstResponse\n );\n\n if (paymentRequiredResult.isErr()) return paymentRequiredResult;\n\n const paymentRequired = paymentRequiredResult.value;\n const siwxExtension = getSiwxExtension(paymentRequired.extensions);\n\n if (!siwxExtension) {\n return fetchOk<FetchWithAuthResult>({\n outcome: 'no_siwx_extension',\n extensions: Object.keys(paymentRequired.extensions ?? {}),\n });\n }\n\n const payloadResult = await safeCreateSIWxPayload(\n surface,\n siwxExtension,\n account\n );\n\n if (payloadResult.isErr()) return payloadResult;\n\n const siwxHeader = encodeSIWxHeader(payloadResult.value);\n\n retryRequest.headers.set('SIGN-IN-WITH-X', siwxHeader);\n\n return (await safeFetch(surface, retryRequest, timeout)).andThen(response =>\n fetchOk<FetchWithAuthResult>({\n outcome: 'response',\n response,\n authenticated: true,\n })\n );\n };\n}\n"],"mappings":"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","names":["response"]}