@clawpay-hedera/sdk 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 (102) hide show
  1. package/README.md +294 -0
  2. package/dist/cli/index.d.ts +3 -0
  3. package/dist/cli/index.d.ts.map +1 -0
  4. package/dist/cli/index.js +137 -0
  5. package/dist/cli/index.js.map +1 -0
  6. package/dist/client/hedera-payment.d.ts +25 -0
  7. package/dist/client/hedera-payment.d.ts.map +1 -0
  8. package/dist/client/hedera-payment.js +68 -0
  9. package/dist/client/hedera-payment.js.map +1 -0
  10. package/dist/client/with-x402-client.d.ts +27 -0
  11. package/dist/client/with-x402-client.d.ts.map +1 -0
  12. package/dist/client/with-x402-client.js +136 -0
  13. package/dist/client/with-x402-client.js.map +1 -0
  14. package/dist/client.d.ts +2 -0
  15. package/dist/client.d.ts.map +1 -0
  16. package/dist/client.js +2 -0
  17. package/dist/client.js.map +1 -0
  18. package/dist/handler/proxy/hooks/analytics-hook.d.ts +299 -0
  19. package/dist/handler/proxy/hooks/analytics-hook.d.ts.map +1 -0
  20. package/dist/handler/proxy/hooks/analytics-hook.js +133 -0
  21. package/dist/handler/proxy/hooks/analytics-hook.js.map +1 -0
  22. package/dist/handler/proxy/hooks/auth-headers-hook.d.ts +20 -0
  23. package/dist/handler/proxy/hooks/auth-headers-hook.d.ts.map +1 -0
  24. package/dist/handler/proxy/hooks/auth-headers-hook.js +34 -0
  25. package/dist/handler/proxy/hooks/auth-headers-hook.js.map +1 -0
  26. package/dist/handler/proxy/hooks/hcs-audit-hook.d.ts +133 -0
  27. package/dist/handler/proxy/hooks/hcs-audit-hook.d.ts.map +1 -0
  28. package/dist/handler/proxy/hooks/hcs-audit-hook.js +138 -0
  29. package/dist/handler/proxy/hooks/hcs-audit-hook.js.map +1 -0
  30. package/dist/handler/proxy/hooks/logging-hook.d.ts +100 -0
  31. package/dist/handler/proxy/hooks/logging-hook.d.ts.map +1 -0
  32. package/dist/handler/proxy/hooks/logging-hook.js +14 -0
  33. package/dist/handler/proxy/hooks/logging-hook.js.map +1 -0
  34. package/dist/handler/proxy/hooks/x402-hook.d.ts +246 -0
  35. package/dist/handler/proxy/hooks/x402-hook.d.ts.map +1 -0
  36. package/dist/handler/proxy/hooks/x402-hook.js +219 -0
  37. package/dist/handler/proxy/hooks/x402-hook.js.map +1 -0
  38. package/dist/handler/proxy/hooks.d.ts +12111 -0
  39. package/dist/handler/proxy/hooks.d.ts.map +1 -0
  40. package/dist/handler/proxy/hooks.js +142 -0
  41. package/dist/handler/proxy/hooks.js.map +1 -0
  42. package/dist/handler/proxy/index.d.ts +3 -0
  43. package/dist/handler/proxy/index.d.ts.map +1 -0
  44. package/dist/handler/proxy/index.js +489 -0
  45. package/dist/handler/proxy/index.js.map +1 -0
  46. package/dist/handler/server/index.d.ts +25 -0
  47. package/dist/handler/server/index.d.ts.map +1 -0
  48. package/dist/handler/server/index.js +38 -0
  49. package/dist/handler/server/index.js.map +1 -0
  50. package/dist/handler/server/platform-detection.d.ts +32 -0
  51. package/dist/handler/server/platform-detection.d.ts.map +1 -0
  52. package/dist/handler/server/platform-detection.js +441 -0
  53. package/dist/handler/server/platform-detection.js.map +1 -0
  54. package/dist/handler/server/plugins/with-x402.d.ts +21 -0
  55. package/dist/handler/server/plugins/with-x402.d.ts.map +1 -0
  56. package/dist/handler/server/plugins/with-x402.js +290 -0
  57. package/dist/handler/server/plugins/with-x402.js.map +1 -0
  58. package/dist/handler/server/templates/x402-server.d.ts +16 -0
  59. package/dist/handler/server/templates/x402-server.d.ts.map +1 -0
  60. package/dist/handler/server/templates/x402-server.js +13 -0
  61. package/dist/handler/server/templates/x402-server.js.map +1 -0
  62. package/dist/handler/shared/hedera-price.d.ts +26 -0
  63. package/dist/handler/shared/hedera-price.d.ts.map +1 -0
  64. package/dist/handler/shared/hedera-price.js +54 -0
  65. package/dist/handler/shared/hedera-price.js.map +1 -0
  66. package/dist/handler.d.ts +14 -0
  67. package/dist/handler.d.ts.map +1 -0
  68. package/dist/handler.js +12 -0
  69. package/dist/handler.js.map +1 -0
  70. package/dist/index.d.ts +7 -0
  71. package/dist/index.d.ts.map +1 -0
  72. package/dist/index.js +5 -0
  73. package/dist/index.js.map +1 -0
  74. package/dist/networks/hedera.d.ts +52 -0
  75. package/dist/networks/hedera.d.ts.map +1 -0
  76. package/dist/networks/hedera.js +61 -0
  77. package/dist/networks/hedera.js.map +1 -0
  78. package/dist/server/stdio/index.d.ts +2 -0
  79. package/dist/server/stdio/index.d.ts.map +1 -0
  80. package/dist/server/stdio/index.js +91 -0
  81. package/dist/server/stdio/index.js.map +1 -0
  82. package/dist/server/stdio/proxy-server.d.ts +9 -0
  83. package/dist/server/stdio/proxy-server.d.ts.map +1 -0
  84. package/dist/server/stdio/proxy-server.js +53 -0
  85. package/dist/server/stdio/proxy-server.js.map +1 -0
  86. package/dist/server/stdio/start-stdio-server.d.ts +28 -0
  87. package/dist/server/stdio/start-stdio-server.d.ts.map +1 -0
  88. package/dist/server/stdio/start-stdio-server.js +84 -0
  89. package/dist/server/stdio/start-stdio-server.js.map +1 -0
  90. package/dist/server.d.ts +6 -0
  91. package/dist/server.d.ts.map +1 -0
  92. package/dist/server.js +4 -0
  93. package/dist/server.js.map +1 -0
  94. package/dist/utils/signer.d.ts +4 -0
  95. package/dist/utils/signer.d.ts.map +1 -0
  96. package/dist/utils/signer.js +58 -0
  97. package/dist/utils/signer.js.map +1 -0
  98. package/dist/utils.d.ts +2 -0
  99. package/dist/utils.d.ts.map +1 -0
  100. package/dist/utils.js +2 -0
  101. package/dist/utils.js.map +1 -0
  102. package/package.json +86 -0
@@ -0,0 +1,219 @@
1
+ import { decodePayment as decodeX402Payment } from "x402/schemes";
2
+ import { findMatchingPaymentRequirements, processPriceToAtomicAmount } from "x402/shared";
3
+ import { useFacilitator } from "x402/verify";
4
+ import { getAddress } from "viem";
5
+ import { isHederaNetwork, hederaPriceToAtomicAmount } from "../../shared/hedera-price.js";
6
+ /** Use local Hedera conversion for Hedera networks, x402 for others */
7
+ function safeProcessPrice(price, network) {
8
+ if (isHederaNetwork(network))
9
+ return hederaPriceToAtomicAmount(price, network);
10
+ return processPriceToAtomicAmount(price, network);
11
+ }
12
+ // Hedera networks only
13
+ const HEDERA_EVM_NETWORKS = [
14
+ 'hedera-testnet',
15
+ 'hedera',
16
+ ];
17
+ export class X402MonetizationHook {
18
+ name = "x402-monetization";
19
+ cfg;
20
+ verify;
21
+ settle;
22
+ x402Version;
23
+ constructor(cfg) {
24
+ this.cfg = cfg;
25
+ const { verify, settle } = useFacilitator(cfg.facilitator);
26
+ this.verify = verify;
27
+ this.settle = settle;
28
+ this.x402Version = cfg.version ?? 1;
29
+ }
30
+ normalizeRecipients(r) {
31
+ if (!r || typeof r !== "object")
32
+ return {};
33
+ const out = {};
34
+ const isTestnetNetwork = (network) => network.includes("testnet");
35
+ const maybeFamily = r;
36
+ if (maybeFamily.evm?.address) {
37
+ const useTestnet = maybeFamily.evm.isTestnet;
38
+ for (const net of HEDERA_EVM_NETWORKS) {
39
+ if (useTestnet === undefined || isTestnetNetwork(net) === !!useTestnet) {
40
+ out[net] = maybeFamily.evm.address;
41
+ }
42
+ }
43
+ }
44
+ for (const [key, value] of Object.entries(r)) {
45
+ if (typeof value === "string" && HEDERA_EVM_NETWORKS.includes(key)) {
46
+ out[key] = value;
47
+ }
48
+ }
49
+ return out;
50
+ }
51
+ async buildRequirements(toolName, description, price) {
52
+ const recipientsByNetwork = this.normalizeRecipients(this.cfg.recipient);
53
+ const reqs = [];
54
+ const networks = Object.keys(recipientsByNetwork);
55
+ for (const network of networks) {
56
+ const payTo = recipientsByNetwork[network];
57
+ if (!network || !payTo)
58
+ continue;
59
+ const atomic = safeProcessPrice(price, network);
60
+ if ("error" in atomic)
61
+ continue;
62
+ const { maxAmountRequired, asset } = atomic;
63
+ const extra = ("eip712" in asset ? asset.eip712 : undefined);
64
+ const normalizedPayTo = getAddress(String(payTo));
65
+ const normalizedAsset = getAddress(String(asset.address));
66
+ reqs.push({
67
+ scheme: "exact",
68
+ network,
69
+ maxAmountRequired,
70
+ payTo: normalizedPayTo,
71
+ asset: normalizedAsset,
72
+ maxTimeoutSeconds: 300,
73
+ resource: `mcp://${toolName}`,
74
+ mimeType: "application/json",
75
+ description,
76
+ extra,
77
+ });
78
+ }
79
+ return reqs;
80
+ }
81
+ paymentRequired(accepts, reason, extraFields = {}) {
82
+ const payload = { x402Version: this.x402Version, error: reason, accepts, ...extraFields };
83
+ return {
84
+ isError: true,
85
+ _meta: { "x402/error": payload },
86
+ content: [{ type: "text", text: JSON.stringify(payload) }],
87
+ };
88
+ }
89
+ async processCallToolRequest(req, extra) {
90
+ const name = String(req?.params?.name ?? "");
91
+ if (!name)
92
+ return { resultType: "continue", request: req };
93
+ const price = this.cfg.prices[name];
94
+ if (!price)
95
+ return { resultType: "continue", request: req };
96
+ const description = `Paid access to ${name}`;
97
+ const accepts = await this.buildRequirements(name, description, price);
98
+ if (!accepts.length) {
99
+ return { resultType: "respond", response: this.paymentRequired(accepts, "PRICE_COMPUTE_FAILED") };
100
+ }
101
+ const params = (req.params ?? {});
102
+ const meta = params._meta ?? {};
103
+ const token = typeof meta["x402/payment"] === "string" ? meta["x402/payment"] : undefined;
104
+ if (!token) {
105
+ return { resultType: "respond", response: this.paymentRequired(accepts, "PAYMENT_REQUIRED") };
106
+ }
107
+ let decoded;
108
+ try {
109
+ decoded = decodeX402Payment(token);
110
+ decoded.x402Version = this.x402Version;
111
+ }
112
+ catch {
113
+ return { resultType: "respond", response: this.paymentRequired(accepts, "INVALID_PAYMENT") };
114
+ }
115
+ const selected = findMatchingPaymentRequirements(accepts, decoded);
116
+ if (!selected) {
117
+ return { resultType: "respond", response: this.paymentRequired(accepts, "UNABLE_TO_MATCH_PAYMENT_REQUIREMENTS") };
118
+ }
119
+ const vr = await this.verify(decoded, selected);
120
+ if (!vr.isValid) {
121
+ return {
122
+ resultType: "respond",
123
+ response: this.paymentRequired(accepts, vr.invalidReason ?? "INVALID_PAYMENT", { payer: vr.payer }),
124
+ };
125
+ }
126
+ return { resultType: "continue", request: req };
127
+ }
128
+ async processCallToolResult(res, original, extra) {
129
+ const name = String(original?.params?.name ?? "");
130
+ const price = name ? this.cfg.prices[name] : undefined;
131
+ const params = (original.params ?? {});
132
+ const meta = params._meta ?? {};
133
+ const token = typeof meta["x402/payment"] === "string" ? meta["x402/payment"] : undefined;
134
+ if (!name || !price || !token)
135
+ return { resultType: "continue", response: res };
136
+ const failed = !!res?.isError ||
137
+ (Array.isArray(res?.content) && res.content.length === 1 && typeof res.content[0]?.text === "string" &&
138
+ res.content[0].text.includes("error"));
139
+ if (failed)
140
+ return { resultType: "continue", response: res };
141
+ try {
142
+ const accepts = await this.buildRequirements(name, `Paid access to ${name}`, price);
143
+ let decoded;
144
+ try {
145
+ decoded = decodeX402Payment(token);
146
+ decoded.x402Version = this.x402Version;
147
+ }
148
+ catch {
149
+ return { resultType: "continue", response: res };
150
+ }
151
+ const selected = findMatchingPaymentRequirements(accepts, decoded);
152
+ if (!selected)
153
+ return { resultType: "continue", response: res };
154
+ const s = await this.settle(decoded, selected);
155
+ if (s.success) {
156
+ const meta = (res._meta ?? {});
157
+ meta["x402/payment-response"] = {
158
+ success: true,
159
+ transaction: s.transaction,
160
+ network: s.network,
161
+ payer: s.payer,
162
+ };
163
+ const content = [];
164
+ if (Array.isArray(res.content))
165
+ content.push(...res.content);
166
+ content.push({ type: "text", text: `Payment settled on ${s.network} (tx: ${s.transaction ?? "n/a"}).` });
167
+ return { resultType: "continue", response: { ...res, _meta: meta, content } };
168
+ }
169
+ return { resultType: "continue", response: this.paymentRequired([], s.errorReason ?? "SETTLEMENT_FAILED") };
170
+ }
171
+ catch {
172
+ return { resultType: "continue", response: this.paymentRequired([], "SETTLEMENT_FAILED") };
173
+ }
174
+ }
175
+ async processListToolsResult(result, originalRequest, extra) {
176
+ if (result.tools) {
177
+ result.tools = result.tools.map((tool) => {
178
+ const price = this.cfg.prices[tool.name];
179
+ if (!price)
180
+ return tool;
181
+ const recipientsByNetwork = this.normalizeRecipients(this.cfg.recipient);
182
+ const paymentNetworks = [];
183
+ const networks = Object.keys(recipientsByNetwork);
184
+ for (const network of networks) {
185
+ const payTo = recipientsByNetwork[network];
186
+ if (!network || !payTo)
187
+ continue;
188
+ const atomic = safeProcessPrice(price, network);
189
+ if ("error" in atomic)
190
+ continue;
191
+ const { maxAmountRequired, asset } = atomic;
192
+ paymentNetworks.push({
193
+ network,
194
+ recipient: payTo,
195
+ maxAmountRequired: maxAmountRequired.toString(),
196
+ asset: {
197
+ address: asset.address,
198
+ symbol: 'symbol' in asset ? asset.symbol : undefined,
199
+ decimals: 'decimals' in asset ? asset.decimals : undefined
200
+ },
201
+ type: 'hedera'
202
+ });
203
+ }
204
+ return {
205
+ ...tool,
206
+ annotations: {
207
+ ...tool.annotations,
208
+ paymentHint: true,
209
+ paymentPriceUSD: price,
210
+ paymentNetworks,
211
+ paymentVersion: this.x402Version
212
+ }
213
+ };
214
+ });
215
+ }
216
+ return { resultType: "continue", response: result };
217
+ }
218
+ }
219
+ //# sourceMappingURL=x402-hook.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"x402-hook.js","sourceRoot":"","sources":["../../../../src/handler/proxy/hooks/x402-hook.ts"],"names":[],"mappings":"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"}