@agentcash/router 0.5.1 → 0.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -43,25 +43,26 @@ async function createX402Server(config) {
43
43
  const { facilitator: defaultFacilitator } = await import("@coinbase/x402");
44
44
  const raw = config.facilitatorUrl ?? defaultFacilitator;
45
45
  const facilitatorConfig = typeof raw === "string" ? { url: raw } : raw;
46
- const client = new HTTPFacilitatorClient(facilitatorConfig);
46
+ const httpClient = new HTTPFacilitatorClient(facilitatorConfig);
47
+ const network = config.network ?? "eip155:8453";
48
+ const client = cachedClient(httpClient, network);
47
49
  const server = new x402ResourceServer(client);
48
50
  registerExactEvmScheme(server);
49
51
  server.registerExtension(bazaarResourceServerExtension);
50
52
  server.registerExtension(siwxResourceServerExtension);
51
- const initPromise = retryInit(server);
53
+ const initPromise = server.initialize();
52
54
  return { server, initPromise };
53
55
  }
54
- async function retryInit(server, maxAttempts = 3, backoff = [1e3, 2e3, 4e3]) {
55
- for (let attempt = 0; attempt < maxAttempts; attempt++) {
56
- try {
57
- await server.initialize();
58
- return;
59
- } catch (err) {
60
- const is429 = err instanceof Error && (err.message.includes("429") || err.message.includes("rate limit"));
61
- if (!is429 || attempt === maxAttempts - 1) throw err;
62
- await new Promise((r) => setTimeout(r, backoff[attempt] ?? 4e3));
63
- }
64
- }
56
+ function cachedClient(inner, network) {
57
+ return {
58
+ verify: inner.verify.bind(inner),
59
+ settle: inner.settle.bind(inner),
60
+ getSupported: async () => ({
61
+ kinds: [{ x402Version: 2, scheme: "exact", network }],
62
+ extensions: [],
63
+ signers: {}
64
+ })
65
+ };
65
66
  }
66
67
  var init_server = __esm({
67
68
  "src/server.ts"() {
@@ -1019,11 +1020,15 @@ async function build402(request, routeEntry, deps, meta, pluginCtx, bodyData) {
1019
1020
  );
1020
1021
  response.headers.set("PAYMENT-REQUIRED", encoded);
1021
1022
  } catch (err) {
1023
+ const message = `x402 challenge build failed: ${err instanceof Error ? err.message : String(err)}`;
1022
1024
  firePluginHook(deps.plugin, "onAlert", pluginCtx, {
1023
1025
  level: "critical",
1024
- message: `x402 challenge build failed: ${err instanceof Error ? err.message : String(err)}`,
1026
+ message,
1025
1027
  route: routeEntry.key
1026
1028
  });
1029
+ const errorResponse = import_server2.NextResponse.json({ success: false, error: message }, { status: 500 });
1030
+ firePluginResponse(deps, pluginCtx, meta, errorResponse);
1031
+ return errorResponse;
1027
1032
  }
1028
1033
  }
1029
1034
  if (routeEntry.protocols.includes("mpp") && deps.mppx) {
package/dist/index.js CHANGED
@@ -21,25 +21,26 @@ async function createX402Server(config) {
21
21
  const { facilitator: defaultFacilitator } = await import("@coinbase/x402");
22
22
  const raw = config.facilitatorUrl ?? defaultFacilitator;
23
23
  const facilitatorConfig = typeof raw === "string" ? { url: raw } : raw;
24
- const client = new HTTPFacilitatorClient(facilitatorConfig);
24
+ const httpClient = new HTTPFacilitatorClient(facilitatorConfig);
25
+ const network = config.network ?? "eip155:8453";
26
+ const client = cachedClient(httpClient, network);
25
27
  const server = new x402ResourceServer(client);
26
28
  registerExactEvmScheme(server);
27
29
  server.registerExtension(bazaarResourceServerExtension);
28
30
  server.registerExtension(siwxResourceServerExtension);
29
- const initPromise = retryInit(server);
31
+ const initPromise = server.initialize();
30
32
  return { server, initPromise };
31
33
  }
32
- async function retryInit(server, maxAttempts = 3, backoff = [1e3, 2e3, 4e3]) {
33
- for (let attempt = 0; attempt < maxAttempts; attempt++) {
34
- try {
35
- await server.initialize();
36
- return;
37
- } catch (err) {
38
- const is429 = err instanceof Error && (err.message.includes("429") || err.message.includes("rate limit"));
39
- if (!is429 || attempt === maxAttempts - 1) throw err;
40
- await new Promise((r) => setTimeout(r, backoff[attempt] ?? 4e3));
41
- }
42
- }
34
+ function cachedClient(inner, network) {
35
+ return {
36
+ verify: inner.verify.bind(inner),
37
+ settle: inner.settle.bind(inner),
38
+ getSupported: async () => ({
39
+ kinds: [{ x402Version: 2, scheme: "exact", network }],
40
+ extensions: [],
41
+ signers: {}
42
+ })
43
+ };
43
44
  }
44
45
  var init_server = __esm({
45
46
  "src/server.ts"() {
@@ -982,11 +983,15 @@ async function build402(request, routeEntry, deps, meta, pluginCtx, bodyData) {
982
983
  );
983
984
  response.headers.set("PAYMENT-REQUIRED", encoded);
984
985
  } catch (err) {
986
+ const message = `x402 challenge build failed: ${err instanceof Error ? err.message : String(err)}`;
985
987
  firePluginHook(deps.plugin, "onAlert", pluginCtx, {
986
988
  level: "critical",
987
- message: `x402 challenge build failed: ${err instanceof Error ? err.message : String(err)}`,
989
+ message,
988
990
  route: routeEntry.key
989
991
  });
992
+ const errorResponse = NextResponse2.json({ success: false, error: message }, { status: 500 });
993
+ firePluginResponse(deps, pluginCtx, meta, errorResponse);
994
+ return errorResponse;
990
995
  }
991
996
  }
992
997
  if (routeEntry.protocols.includes("mpp") && deps.mppx) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agentcash/router",
3
- "version": "0.5.1",
3
+ "version": "0.5.2",
4
4
  "description": "Unified route builder for Next.js App Router APIs with x402, MPP, SIWX, and API key auth",
5
5
  "type": "module",
6
6
  "exports": {