@relai-fi/x402 0.5.39 → 0.6.0-rc.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.
package/dist/index.d.cts CHANGED
@@ -1,5 +1,6 @@
1
- export { B as BridgePluginConfig, D as DynamicPrice, F as FreeTierPluginConfig, b as PaymentInfo, g as PluginContext, h as PluginResult, P as ProtectOptions, R as Relai, d as RelaiIntegritasFlow, e as RelaiIntegritasOptions, f as RelaiPlugin, a as RelaiServerConfig, S as SettleResult, c as StripePayTo, R as default, s as stripePayTo } from './server-CyfEHW9D.cjs';
1
+ export { B as BridgePluginConfig, D as DynamicPrice, j as FeedbackPluginConfig, F as FreeTierPluginConfig, b as PaymentInfo, g as PluginContext, h as PluginResult, P as ProtectOptions, R as Relai, d as RelaiIntegritasFlow, e as RelaiIntegritasOptions, f as RelaiPlugin, a as RelaiServerConfig, i as ScorePluginConfig, S as SettleResult, k as SolanaFeedbackPluginConfig, c as StripePayTo, R as default, s as stripePayTo } from './server-t9nKvoKl.cjs';
2
2
  export { RelayWebSocketFactory, RelayWebSocketLike, X402Client, X402ClientConfig, X402FetchInit, X402IntegritasConfig, X402IntegritasFlow, X402NetworkSelectionMode, X402RelayWsConfig, X402RelayWsError, X402RelayWsResponse, X402RequestOptions, default as createX402Client } from './client.cjs';
3
+ export { RelayFeedbackConfig, submitRelayFeedback } from './relay-feedback.cjs';
3
4
  export { A as AcceptsExtra, B as BASE_MAINNET_NETWORK, C as CAIP2_TO_NETWORK, b as CHAIN_IDS, E as EXPLORER_TX_URL, l as EvmWallet, N as NETWORK_CAIP2, e as NETWORK_LABELS, d as NETWORK_TOKENS, c as NetworkToken, P as PaymentAccept, o as PaymentRequired, R as RELAI_FACILITATOR_URL, h as RELAI_NETWORKS, a as RelaiNetwork, m as ResourceInfo, S as SOLANA_MAINNET_NETWORK, k as SolanaWallet, U as USDC_ADDRESSES, g as USDC_BASE, f as USDC_SOLANA, W as WalletSet, j as isEvm, i as isSolana, n as normalizeNetwork, r as resolveToken } from './types-Y9ni5XwY.cjs';
4
5
  export { BridgeBalances, BridgeQuoteResult, BridgeResult } from './management.cjs';
5
6
  export { NETWORK_V1_TO_V2, NETWORK_V2_TO_V1, convertPayloadToVersion, convertV1ToV2, convertV2ToV1, detectPayloadVersion, formatUsd, fromAtomicUnits, isEvmNetwork, isSolanaNetwork, networkV1ToV2, networkV2ToV1, normalizePaymentHeader, toAtomicUnits } from './utils/index.cjs';
package/dist/index.d.ts CHANGED
@@ -1,5 +1,6 @@
1
- export { B as BridgePluginConfig, D as DynamicPrice, F as FreeTierPluginConfig, b as PaymentInfo, g as PluginContext, h as PluginResult, P as ProtectOptions, R as Relai, d as RelaiIntegritasFlow, e as RelaiIntegritasOptions, f as RelaiPlugin, a as RelaiServerConfig, S as SettleResult, c as StripePayTo, R as default, s as stripePayTo } from './server-CaSmhDnd.js';
1
+ export { B as BridgePluginConfig, D as DynamicPrice, j as FeedbackPluginConfig, F as FreeTierPluginConfig, b as PaymentInfo, g as PluginContext, h as PluginResult, P as ProtectOptions, R as Relai, d as RelaiIntegritasFlow, e as RelaiIntegritasOptions, f as RelaiPlugin, a as RelaiServerConfig, i as ScorePluginConfig, S as SettleResult, k as SolanaFeedbackPluginConfig, c as StripePayTo, R as default, s as stripePayTo } from './server-Dr3JOA0-.js';
2
2
  export { RelayWebSocketFactory, RelayWebSocketLike, X402Client, X402ClientConfig, X402FetchInit, X402IntegritasConfig, X402IntegritasFlow, X402NetworkSelectionMode, X402RelayWsConfig, X402RelayWsError, X402RelayWsResponse, X402RequestOptions, default as createX402Client } from './client.js';
3
+ export { RelayFeedbackConfig, submitRelayFeedback } from './relay-feedback.js';
3
4
  export { A as AcceptsExtra, B as BASE_MAINNET_NETWORK, C as CAIP2_TO_NETWORK, b as CHAIN_IDS, E as EXPLORER_TX_URL, l as EvmWallet, N as NETWORK_CAIP2, e as NETWORK_LABELS, d as NETWORK_TOKENS, c as NetworkToken, P as PaymentAccept, o as PaymentRequired, R as RELAI_FACILITATOR_URL, h as RELAI_NETWORKS, a as RelaiNetwork, m as ResourceInfo, S as SOLANA_MAINNET_NETWORK, k as SolanaWallet, U as USDC_ADDRESSES, g as USDC_BASE, f as USDC_SOLANA, W as WalletSet, j as isEvm, i as isSolana, n as normalizeNetwork, r as resolveToken } from './types-Y9ni5XwY.js';
4
5
  export { BridgeBalances, BridgeQuoteResult, BridgeResult } from './management.js';
5
6
  export { NETWORK_V1_TO_V2, NETWORK_V2_TO_V1, convertPayloadToVersion, convertV1ToV2, convertV2ToV1, detectPayloadVersion, formatUsd, fromAtomicUnits, isEvmNetwork, isSolanaNetwork, networkV1ToV2, networkV2ToV1, normalizePaymentHeader, toAtomicUnits } from './utils/index.js';
package/dist/index.js CHANGED
@@ -508,6 +508,9 @@ var Relai = class {
508
508
  const self = this;
509
509
  return async (req, res, next) => {
510
510
  try {
511
+ if (req.headers["x-preflight"] === "true" || req.headers["x-preflight"] === "1") {
512
+ return res.status(200).json({ status: "ok", preflight: true });
513
+ }
511
514
  const resolvedPrice = typeof options.price === "function" ? await options.price(req) : options.price;
512
515
  if (typeof resolvedPrice !== "number" || !isFinite(resolvedPrice) || resolvedPrice <= 0) {
513
516
  return res.status(400).json({ error: "Invalid price configuration" });
@@ -570,6 +573,18 @@ var Relai = class {
570
573
  if (!plugin.beforePaymentCheck) continue;
571
574
  try {
572
575
  const pluginResult = await plugin.beforePaymentCheck(req, pluginCtx);
576
+ if (pluginResult?.reject) {
577
+ const rejectStatus = pluginResult.rejectStatus || 503;
578
+ if (pluginResult.headers) {
579
+ for (const [k, v] of Object.entries(pluginResult.headers)) {
580
+ res.setHeader(k, v);
581
+ }
582
+ }
583
+ return res.status(rejectStatus).json({
584
+ error: pluginResult.rejectMessage || "Service unavailable",
585
+ plugin: plugin.name
586
+ });
587
+ }
573
588
  if (pluginResult?.skip) {
574
589
  if (pluginResult.headers) {
575
590
  for (const [k, v] of Object.entries(pluginResult.headers)) {
@@ -1897,6 +1912,64 @@ function createX402Client(config) {
1897
1912
  return { fetch: x402Fetch };
1898
1913
  }
1899
1914
 
1915
+ // src/relay-feedback.ts
1916
+ import { ethers } from "ethers";
1917
+ var RELAY_FEEDBACK_REPUTATION_ABI = [
1918
+ "function giveFeedback(uint256 agentId, int128 value, uint8 valueDecimals, string tag1, string tag2, string endpoint, string feedbackURI, bytes32 feedbackHash) external"
1919
+ ];
1920
+ function submitRelayFeedback(config) {
1921
+ const agentId = String(config.agentId);
1922
+ const endpoint = config.endpoint ?? "";
1923
+ const responseTimeMs = config.responseTimeMs ?? 0;
1924
+ const privateKey = config.feedbackWalletPrivateKey ?? (typeof process !== "undefined" ? process.env?.FEEDBACK_WALLET_PRIVATE_KEY ?? process.env?.ERC8004_FEEDBACK_WALLET_PRIVATE_KEY : void 0);
1925
+ const reputationAddress = config.reputationRegistryAddress ?? (typeof process !== "undefined" ? process.env?.ERC8004_REPUTATION_REGISTRY : void 0);
1926
+ const rpcUrl = config.rpcUrl ?? (typeof process !== "undefined" ? process.env?.ERC8004_RPC_URL : void 0) ?? "https://base-sepolia-testnet.skalenodes.com/v1/jubilant-horrible-ancha";
1927
+ if (!privateKey || !reputationAddress) {
1928
+ console.warn("[relai:submitRelayFeedback] FEEDBACK_WALLET_PRIVATE_KEY or ERC8004_REPUTATION_REGISTRY not set \u2014 skipping");
1929
+ return;
1930
+ }
1931
+ const provider = new ethers.JsonRpcProvider(rpcUrl);
1932
+ const signer = new ethers.Wallet(privateKey, provider);
1933
+ const reputation = new ethers.Contract(reputationAddress, RELAY_FEEDBACK_REPUTATION_ABI, signer);
1934
+ const id = BigInt(agentId);
1935
+ (async () => {
1936
+ const successValue = config.success ? 10000n : 0n;
1937
+ try {
1938
+ const srTx = await reputation.giveFeedback(
1939
+ id,
1940
+ successValue,
1941
+ 2,
1942
+ "successRate",
1943
+ "",
1944
+ endpoint,
1945
+ "",
1946
+ ethers.ZeroHash
1947
+ );
1948
+ await srTx.wait();
1949
+ console.log(`[relai:submitRelayFeedback] successRate confirmed agentId=${agentId} success=${config.success}`);
1950
+ } catch (err) {
1951
+ console.warn(`[relai:submitRelayFeedback] successRate failed (non-fatal): ${err?.message}`);
1952
+ }
1953
+ if (responseTimeMs > 0) {
1954
+ try {
1955
+ const rtTx = await reputation.giveFeedback(
1956
+ id,
1957
+ BigInt(Math.max(0, Math.round(responseTimeMs))),
1958
+ 0,
1959
+ "responseTime",
1960
+ "",
1961
+ endpoint,
1962
+ "",
1963
+ ethers.ZeroHash
1964
+ );
1965
+ console.log(`[relai:submitRelayFeedback] responseTime sent agentId=${agentId} ms=${responseTimeMs} tx=${rtTx.hash}`);
1966
+ } catch (err) {
1967
+ console.warn(`[relai:submitRelayFeedback] responseTime failed (non-fatal): ${err?.message}`);
1968
+ }
1969
+ }
1970
+ })();
1971
+ }
1972
+
1900
1973
  // src/utils/payload-converter.ts
1901
1974
  var NETWORK_V1_TO_V2 = {
1902
1975
  "solana": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
@@ -2071,6 +2144,7 @@ export {
2071
2144
  normalizePaymentHeader,
2072
2145
  resolveToken,
2073
2146
  stripePayTo,
2147
+ submitRelayFeedback,
2074
2148
  toAtomicUnits
2075
2149
  };
2076
2150
  //# sourceMappingURL=index.js.map