@relai-fi/x402 0.6.1-rc.2 → 0.6.1-rc.3

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,4 +1,4 @@
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';
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-8gWh9oky.cjs';
2
2
  export { RelayWebSocketFactory, RelayWebSocketLike, X402Client, X402ClientConfig, X402FetchInit, X402IntegritasConfig, X402IntegritasFlow, X402NetworkSelectionMode, X402RelayWsConfig, X402RelayWsError, X402RelayWsResponse, X402RequestOptions, default as createX402Client } from './client.cjs';
3
3
  export { RelayFeedbackConfig, submitRelayFeedback } from './relay-feedback.cjs';
4
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';
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
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';
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-JtlTglrW.js';
2
2
  export { RelayWebSocketFactory, RelayWebSocketLike, X402Client, X402ClientConfig, X402FetchInit, X402IntegritasConfig, X402IntegritasFlow, X402NetworkSelectionMode, X402RelayWsConfig, X402RelayWsError, X402RelayWsResponse, X402RequestOptions, default as createX402Client } from './client.js';
3
3
  export { RelayFeedbackConfig, submitRelayFeedback } from './relay-feedback.js';
4
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';
package/dist/plugins.cjs CHANGED
@@ -39,6 +39,7 @@ __export(plugins_exports, {
39
39
  score: () => score,
40
40
  shield: () => shield,
41
41
  solanaFeedback: () => solanaFeedback,
42
+ solanaScore: () => solanaScore,
42
43
  submitRelayFeedback: () => submitRelayFeedback
43
44
  });
44
45
  module.exports = __toCommonJS(plugins_exports);
@@ -1001,6 +1002,128 @@ function solanaFeedback(config) {
1001
1002
  }
1002
1003
  };
1003
1004
  }
1005
+ function solanaScore(config) {
1006
+ const assetPubkey = config.assetPubkey;
1007
+ const cacheTtlMs = config.cacheTtlMs ?? 5 * 60 * 1e3;
1008
+ if (!assetPubkey || String(assetPubkey) === "undefined") {
1009
+ console.warn("[relai:solanaScore] assetPubkey not set \u2014 solanaScore plugin is a no-op");
1010
+ return { name: "solanaScore", async onInit() {
1011
+ } };
1012
+ }
1013
+ let cached = null;
1014
+ function getCluster() {
1015
+ return config.cluster ?? (typeof process !== "undefined" ? process.env?.SOLANA_8004_CLUSTER : void 0) ?? "mainnet-beta";
1016
+ }
1017
+ function getRpcUrl() {
1018
+ return config.rpcUrl ?? (typeof process !== "undefined" ? process.env?.SOLANA_8004_RPC_URL : void 0);
1019
+ }
1020
+ async function fetchScore() {
1021
+ if (cached && Date.now() < cached.expiresAt) return cached.score;
1022
+ let SolanaSDK;
1023
+ try {
1024
+ const mod = await import("8004-solana");
1025
+ SolanaSDK = mod.SolanaSDK;
1026
+ } catch {
1027
+ console.warn("[relai:solanaScore] 8004-solana package not installed \u2014 run: npm install 8004-solana");
1028
+ return null;
1029
+ }
1030
+ try {
1031
+ const { PublicKey } = await import("@solana/web3.js");
1032
+ const cluster = getCluster();
1033
+ const rpcUrl = getRpcUrl();
1034
+ const sdk = new SolanaSDK({ cluster, ...rpcUrl ? { rpcUrl } : {} });
1035
+ const pubkey = new PublicKey(assetPubkey);
1036
+ let feedbackCount = 0;
1037
+ let successRate = null;
1038
+ let avgResponseMs = null;
1039
+ const endpoints = {};
1040
+ let allFeedbacks = [];
1041
+ try {
1042
+ allFeedbacks = await sdk.readAllFeedback(pubkey);
1043
+ } catch {
1044
+ }
1045
+ if (allFeedbacks.length > 0) {
1046
+ const byEndpoint = {};
1047
+ let globalSuccessValues = [];
1048
+ let globalResponseTimes = [];
1049
+ for (const entry of allFeedbacks) {
1050
+ const tag1 = entry.tag1 ?? "";
1051
+ const rawValue = entry.value ?? entry.score ?? 0;
1052
+ const value = typeof rawValue === "bigint" ? Number(rawValue) : Number(rawValue);
1053
+ const ep = entry.endpoint ?? "";
1054
+ if (!byEndpoint[ep]) byEndpoint[ep] = { successValues: [], responseTimes: [] };
1055
+ if (tag1 === "successRate") {
1056
+ globalSuccessValues.push(value);
1057
+ byEndpoint[ep].successValues.push(value);
1058
+ } else if (tag1 === "responseTime") {
1059
+ globalResponseTimes.push(value);
1060
+ byEndpoint[ep].responseTimes.push(value);
1061
+ }
1062
+ }
1063
+ feedbackCount = globalSuccessValues.length;
1064
+ if (feedbackCount > 0) {
1065
+ const avgSuccess = globalSuccessValues.reduce((a, b) => a + b, 0) / feedbackCount;
1066
+ successRate = Math.round(avgSuccess / 1e4 * 100);
1067
+ }
1068
+ if (globalResponseTimes.length > 0) {
1069
+ avgResponseMs = Math.round(globalResponseTimes.reduce((a, b) => a + b, 0) / globalResponseTimes.length);
1070
+ }
1071
+ for (const [ep, data] of Object.entries(byEndpoint)) {
1072
+ const epCount = data.successValues.length;
1073
+ const epAvgSuccess = epCount > 0 ? data.successValues.reduce((a, b) => a + b, 0) / epCount : null;
1074
+ const epAvgMs = data.responseTimes.length > 0 ? Math.round(data.responseTimes.reduce((a, b) => a + b, 0) / data.responseTimes.length) : null;
1075
+ endpoints[ep || "/"] = {
1076
+ feedbackCount: epCount,
1077
+ successRate: epAvgSuccess !== null ? Math.round(epAvgSuccess / 1e4 * 100) : null,
1078
+ avgResponseMs: epAvgMs
1079
+ };
1080
+ }
1081
+ } else {
1082
+ try {
1083
+ const summary = await sdk.getReputationSummary(pubkey);
1084
+ feedbackCount = summary.count ?? 0;
1085
+ if (feedbackCount > 0) {
1086
+ const avg = summary.averageScore ?? 0;
1087
+ successRate = Math.round(avg / 1e4 * 100);
1088
+ }
1089
+ } catch {
1090
+ }
1091
+ }
1092
+ const scoreObj = {
1093
+ feedbackCount,
1094
+ successRate,
1095
+ avgResponseMs,
1096
+ assetPubkey,
1097
+ source: "8004-solana",
1098
+ cluster,
1099
+ ...Object.keys(endpoints).length > 0 ? { endpoints } : {}
1100
+ };
1101
+ cached = { score: scoreObj, expiresAt: Date.now() + cacheTtlMs };
1102
+ return scoreObj;
1103
+ } catch (err) {
1104
+ console.warn(`[relai:solanaScore] fetch error (non-fatal): ${err?.message}`);
1105
+ return null;
1106
+ }
1107
+ }
1108
+ return {
1109
+ name: "solanaScore",
1110
+ async onInit() {
1111
+ try {
1112
+ await import("8004-solana");
1113
+ console.log(`[relai:solanaScore] Initialized \u2014 asset=${assetPubkey.slice(0, 8)}... cluster=${config.cluster ?? process.env?.SOLANA_8004_CLUSTER ?? "mainnet-beta"}`);
1114
+ } catch {
1115
+ console.warn("[relai:solanaScore] 8004-solana package not installed \u2014 run: npm install 8004-solana");
1116
+ }
1117
+ },
1118
+ async enrich402Response(response) {
1119
+ const scoreData = await fetchScore();
1120
+ if (!scoreData) return response;
1121
+ response.extensions = response.extensions || {};
1122
+ response.extensions.score = scoreData;
1123
+ return response;
1124
+ }
1125
+ };
1126
+ }
1004
1127
  // Annotate the CommonJS export names for ESM import in node:
1005
1128
  0 && (module.exports = {
1006
1129
  bridge,
@@ -1012,6 +1135,7 @@ function solanaFeedback(config) {
1012
1135
  score,
1013
1136
  shield,
1014
1137
  solanaFeedback,
1138
+ solanaScore,
1015
1139
  submitRelayFeedback
1016
1140
  });
1017
1141
  //# sourceMappingURL=plugins.cjs.map