mppx 0.7.0 → 0.8.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/CHANGELOG.md +33 -0
- package/README.md +20 -11
- package/dist/Challenge.d.ts.map +1 -1
- package/dist/Challenge.js +18 -6
- package/dist/Challenge.js.map +1 -1
- package/dist/Mcp.d.ts +3 -0
- package/dist/Mcp.d.ts.map +1 -1
- package/dist/Mcp.js +2 -0
- package/dist/Mcp.js.map +1 -1
- package/dist/PaymentRequest.d.ts +10 -10
- package/dist/PaymentRequest.js +8 -8
- package/dist/client/Mppx.js +2 -2
- package/dist/client/Mppx.js.map +1 -1
- package/dist/client/Transport.d.ts +11 -16
- package/dist/client/Transport.d.ts.map +1 -1
- package/dist/client/Transport.js +55 -75
- package/dist/client/Transport.js.map +1 -1
- package/dist/client/index.d.ts +3 -0
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +1 -0
- package/dist/client/index.js.map +1 -1
- package/dist/client/internal/Fetch.d.ts.map +1 -1
- package/dist/client/internal/Fetch.js +46 -7
- package/dist/client/internal/Fetch.js.map +1 -1
- package/dist/client/internal/protocols/Mcp.d.ts +7 -0
- package/dist/client/internal/protocols/Mcp.d.ts.map +1 -0
- package/dist/client/internal/protocols/Mcp.js +159 -0
- package/dist/client/internal/protocols/Mcp.js.map +1 -0
- package/dist/client/internal/protocols/Mpp.d.ts +4 -0
- package/dist/client/internal/protocols/Mpp.d.ts.map +1 -0
- package/dist/client/internal/protocols/Mpp.js +18 -0
- package/dist/client/internal/protocols/Mpp.js.map +1 -0
- package/dist/client/internal/protocols/Protocol.d.ts +10 -0
- package/dist/client/internal/protocols/Protocol.d.ts.map +1 -0
- package/dist/client/internal/protocols/Protocol.js +2 -0
- package/dist/client/internal/protocols/Protocol.js.map +1 -0
- package/dist/client/internal/protocols/Shared.d.ts +5 -0
- package/dist/client/internal/protocols/Shared.d.ts.map +1 -0
- package/dist/client/internal/protocols/Shared.js +20 -0
- package/dist/client/internal/protocols/Shared.js.map +1 -0
- package/dist/client/internal/protocols/X402.d.ts +8 -0
- package/dist/client/internal/protocols/X402.d.ts.map +1 -0
- package/dist/client/internal/protocols/X402.js +39 -0
- package/dist/client/internal/protocols/X402.js.map +1 -0
- package/dist/evm/client/index.d.ts +1 -0
- package/dist/evm/client/index.d.ts.map +1 -1
- package/dist/evm/client/index.js +1 -0
- package/dist/evm/client/index.js.map +1 -1
- package/dist/evm/index.d.ts +2 -0
- package/dist/evm/index.d.ts.map +1 -1
- package/dist/evm/index.js +2 -0
- package/dist/evm/index.js.map +1 -1
- package/dist/evm/server/index.d.ts +1 -0
- package/dist/evm/server/index.d.ts.map +1 -1
- package/dist/evm/server/index.js +1 -0
- package/dist/evm/server/index.js.map +1 -1
- package/dist/mcp/client/McpClient.d.ts +101 -0
- package/dist/mcp/client/McpClient.d.ts.map +1 -0
- package/dist/mcp/client/McpClient.js +162 -0
- package/dist/mcp/client/McpClient.js.map +1 -0
- package/dist/mcp/client/index.d.ts.map +1 -0
- package/dist/mcp/client/index.js.map +1 -0
- package/dist/mcp/server/Transport.d.ts.map +1 -0
- package/dist/mcp/server/Transport.js.map +1 -0
- package/dist/mcp/server/index.d.ts.map +1 -0
- package/dist/mcp/server/index.js.map +1 -0
- package/dist/server/Mppx.d.ts +1 -1
- package/dist/server/Mppx.d.ts.map +1 -1
- package/dist/server/Mppx.js +9 -0
- package/dist/server/Mppx.js.map +1 -1
- package/dist/server/Transport.d.ts +1 -1
- package/dist/server/Transport.d.ts.map +1 -1
- package/dist/server/Transport.js +1 -1
- package/dist/server/Transport.js.map +1 -1
- package/dist/stripe/server/internal/html.gen.d.ts +1 -1
- package/dist/stripe/server/internal/html.gen.d.ts.map +1 -1
- package/dist/stripe/server/internal/html.gen.js +1 -1
- package/dist/stripe/server/internal/html.gen.js.map +1 -1
- package/dist/tempo/Proof.d.ts +85 -1
- package/dist/tempo/Proof.d.ts.map +1 -1
- package/dist/tempo/Proof.js +35 -0
- package/dist/tempo/Proof.js.map +1 -1
- package/dist/tempo/client/Charge.d.ts +13 -1
- package/dist/tempo/client/Charge.d.ts.map +1 -1
- package/dist/tempo/client/Charge.js +38 -25
- package/dist/tempo/client/Charge.js.map +1 -1
- package/dist/tempo/client/Methods.d.ts +5 -3
- package/dist/tempo/client/Methods.d.ts.map +1 -1
- package/dist/tempo/client/Methods.js +4 -2
- package/dist/tempo/client/Methods.js.map +1 -1
- package/dist/tempo/client/ResolveAccount.d.ts +40 -0
- package/dist/tempo/client/ResolveAccount.d.ts.map +1 -0
- package/dist/tempo/client/ResolveAccount.js +2 -0
- package/dist/tempo/client/ResolveAccount.js.map +1 -0
- package/dist/tempo/internal/fee-payer.d.ts +9 -1
- package/dist/tempo/internal/fee-payer.d.ts.map +1 -1
- package/dist/tempo/internal/fee-payer.js +35 -6
- package/dist/tempo/internal/fee-payer.js.map +1 -1
- package/dist/tempo/internal/proof.d.ts +71 -5
- package/dist/tempo/internal/proof.d.ts.map +1 -1
- package/dist/tempo/internal/proof.js +42 -6
- package/dist/tempo/internal/proof.js.map +1 -1
- package/dist/tempo/legacy/client/SessionManager.d.ts.map +1 -1
- package/dist/tempo/legacy/client/SessionManager.js +10 -3
- package/dist/tempo/legacy/client/SessionManager.js.map +1 -1
- package/dist/tempo/server/Charge.d.ts.map +1 -1
- package/dist/tempo/server/Charge.js +42 -18
- package/dist/tempo/server/Charge.js.map +1 -1
- package/dist/tempo/server/Methods.d.ts +4 -2
- package/dist/tempo/server/Methods.d.ts.map +1 -1
- package/dist/tempo/server/Methods.js +4 -2
- package/dist/tempo/server/Methods.js.map +1 -1
- package/dist/tempo/server/Subscription.d.ts +10 -0
- package/dist/tempo/server/Subscription.d.ts.map +1 -1
- package/dist/tempo/server/Subscription.js +135 -23
- package/dist/tempo/server/Subscription.js.map +1 -1
- package/dist/tempo/server/internal/html.gen.d.ts +1 -1
- package/dist/tempo/server/internal/html.gen.d.ts.map +1 -1
- package/dist/tempo/server/internal/html.gen.js +1 -1
- package/dist/tempo/server/internal/html.gen.js.map +1 -1
- package/dist/tempo/session/client/ChannelOps.d.ts +2 -3
- package/dist/tempo/session/client/ChannelOps.d.ts.map +1 -1
- package/dist/tempo/session/client/ChannelOps.js +7 -10
- package/dist/tempo/session/client/ChannelOps.js.map +1 -1
- package/dist/tempo/session/client/ChannelStore.d.ts +51 -0
- package/dist/tempo/session/client/ChannelStore.d.ts.map +1 -0
- package/dist/tempo/session/client/ChannelStore.js +63 -0
- package/dist/tempo/session/client/ChannelStore.js.map +1 -0
- package/dist/tempo/session/client/CredentialState.d.ts +7 -24
- package/dist/tempo/session/client/CredentialState.d.ts.map +1 -1
- package/dist/tempo/session/client/CredentialState.js +51 -49
- package/dist/tempo/session/client/CredentialState.js.map +1 -1
- package/dist/tempo/session/client/Session.d.ts +8 -2
- package/dist/tempo/session/client/Session.d.ts.map +1 -1
- package/dist/tempo/session/client/Session.js +22 -8
- package/dist/tempo/session/client/Session.js.map +1 -1
- package/dist/tempo/session/client/SessionManager.d.ts +4 -40
- package/dist/tempo/session/client/SessionManager.d.ts.map +1 -1
- package/dist/tempo/session/client/SessionManager.js +124 -174
- package/dist/tempo/session/client/SessionManager.js.map +1 -1
- package/dist/tempo/session/client/index.d.ts +3 -4
- package/dist/tempo/session/client/index.d.ts.map +1 -1
- package/dist/tempo/session/client/index.js +1 -0
- package/dist/tempo/session/client/index.js.map +1 -1
- package/dist/tempo/session/precompile/Voucher.d.ts +3 -3
- package/dist/tempo/session/precompile/Voucher.d.ts.map +1 -1
- package/dist/tempo/session/precompile/Voucher.js +24 -25
- package/dist/tempo/session/precompile/Voucher.js.map +1 -1
- package/dist/tempo/session/server/Settlement.d.ts.map +1 -1
- package/dist/tempo/session/server/Settlement.js +4 -2
- package/dist/tempo/session/server/Settlement.js.map +1 -1
- package/dist/tempo/session/server/Sse.d.ts.map +1 -1
- package/dist/tempo/session/server/Sse.js.map +1 -1
- package/dist/tempo/session/server/Ws.d.ts.map +1 -1
- package/dist/tempo/session/server/Ws.js.map +1 -1
- package/dist/tempo/subscription/KeyAuthorization.d.ts +712 -1
- package/dist/tempo/subscription/KeyAuthorization.d.ts.map +1 -1
- package/dist/tempo/subscription/Store.d.ts +2 -0
- package/dist/tempo/subscription/Store.d.ts.map +1 -1
- package/dist/tempo/subscription/Store.js +16 -1
- package/dist/tempo/subscription/Store.js.map +1 -1
- package/dist/x402/index.d.ts +1 -0
- package/dist/x402/index.d.ts.map +1 -1
- package/dist/x402/index.js +1 -0
- package/dist/x402/index.js.map +1 -1
- package/package.json +21 -10
- package/src/Challenge.test.ts +40 -0
- package/src/Challenge.ts +19 -6
- package/src/Mcp.ts +4 -0
- package/src/PaymentRequest.ts +10 -10
- package/src/cli/cli.test.ts +15 -15
- package/src/client/Mppx.test-d.ts +21 -1
- package/src/client/Mppx.test.ts +1 -1
- package/src/client/Mppx.ts +2 -2
- package/src/client/Transport.test.ts +225 -178
- package/src/client/Transport.ts +77 -83
- package/src/client/index.ts +14 -0
- package/src/client/internal/Fetch.test.ts +207 -2
- package/src/client/internal/Fetch.ts +52 -6
- package/src/client/internal/protocols/Mcp.test.ts +220 -0
- package/src/client/internal/protocols/Mcp.ts +162 -0
- package/src/client/internal/protocols/Mpp.ts +21 -0
- package/src/client/internal/protocols/Protocol.ts +10 -0
- package/src/client/internal/protocols/Shared.ts +25 -0
- package/src/client/internal/protocols/X402.ts +42 -0
- package/src/discovery/OpenApi.test.ts +1 -1
- package/src/evm/PublicInterface.test-d.ts +1 -1
- package/src/evm/client/index.ts +1 -0
- package/src/evm/index.ts +2 -0
- package/src/evm/server/Charge.test.ts +1 -1
- package/src/evm/server/index.ts +1 -0
- package/src/{mcp-sdk → mcp}/client/McpClient.integration.test.ts +10 -4
- package/src/{mcp-sdk → mcp}/client/McpClient.test-d.ts +45 -18
- package/src/{mcp-sdk → mcp}/client/McpClient.test.ts +211 -5
- package/src/mcp/client/McpClient.ts +307 -0
- package/src/{mcp-sdk → mcp}/client/McpClient.unit.test.ts +9 -5
- package/src/middlewares/elysia.test.ts +1 -1
- package/src/middlewares/express.test.ts +1 -1
- package/src/middlewares/hono.test.ts +1 -1
- package/src/middlewares/internal/mppx.test.ts +1 -1
- package/src/middlewares/nextjs.test.ts +1 -1
- package/src/proxy/Proxy.test.ts +1 -1
- package/src/proxy/services/anthropic.test.ts +1 -1
- package/src/proxy/services/openai.test.ts +1 -1
- package/src/proxy/services/stripe.test.ts +1 -1
- package/src/server/Mppx.authorize.test.ts +1 -1
- package/src/server/Mppx.test-d.ts +1 -1
- package/src/server/Mppx.test.ts +20 -2
- package/src/server/Mppx.ts +14 -1
- package/src/server/Transport.test.ts +6 -6
- package/src/server/Transport.ts +1 -1
- package/src/stripe/Charge.integration.test.ts +1 -1
- package/src/stripe/client/Charge.test.ts +1 -1
- package/src/stripe/server/Charge.test.ts +1 -1
- package/src/stripe/server/internal/html/package.json +1 -1
- package/src/stripe/server/internal/html.gen.ts +1 -1
- package/src/tempo/Proof.conformance.test.ts +146 -0
- package/src/tempo/Proof.test-d.ts +15 -0
- package/src/tempo/Proof.ts +52 -1
- package/src/tempo/Subscription.integration.test.ts +1 -1
- package/src/tempo/client/Charge.test.ts +173 -0
- package/src/tempo/client/Charge.ts +65 -36
- package/src/tempo/client/Methods.ts +4 -2
- package/src/tempo/client/ResolveAccount.ts +46 -0
- package/src/tempo/internal/fee-payer.test.ts +65 -10
- package/src/tempo/internal/fee-payer.ts +42 -6
- package/src/tempo/internal/proof.test.ts +12 -4
- package/src/tempo/internal/proof.ts +55 -6
- package/src/tempo/legacy/client/SessionManager.ts +11 -3
- package/src/tempo/legacy/server/Session.test.ts +91 -26
- package/src/tempo/server/Charge.test.ts +388 -17
- package/src/tempo/server/Charge.ts +46 -24
- package/src/tempo/server/Methods.ts +4 -2
- package/src/tempo/server/Subscription.test.ts +465 -3
- package/src/tempo/server/Subscription.ts +174 -19
- package/src/tempo/server/internal/html/package.json +2 -2
- package/src/tempo/server/internal/html.gen.ts +1 -1
- package/src/tempo/session/client/ChannelOps.ts +5 -19
- package/src/tempo/session/client/ChannelStore.ts +111 -0
- package/src/tempo/session/client/CredentialState.test.ts +206 -62
- package/src/tempo/session/client/CredentialState.ts +58 -73
- package/src/tempo/session/client/Session.test.ts +41 -1
- package/src/tempo/session/client/Session.ts +36 -10
- package/src/tempo/session/client/SessionManager.test.ts +154 -65
- package/src/tempo/session/client/SessionManager.ts +141 -235
- package/src/tempo/session/client/index.ts +8 -5
- package/src/tempo/session/precompile/Voucher.test.ts +45 -7
- package/src/tempo/session/precompile/Voucher.ts +27 -25
- package/src/tempo/session/server/Session.test.ts +4 -4
- package/src/tempo/session/server/Settlement.test.ts +88 -1
- package/src/tempo/session/server/Settlement.ts +2 -1
- package/src/tempo/session/server/Sse.ts +0 -2
- package/src/tempo/session/server/Ws.ts +0 -4
- package/src/tempo/subscription/Store.ts +27 -9
- package/src/x402/Exact.e2e.test.ts +1 -1
- package/src/x402/PublicInterface.test-d.ts +1 -1
- package/src/x402/index.ts +1 -0
- package/dist/mcp-sdk/client/McpClient.d.ts +0 -85
- package/dist/mcp-sdk/client/McpClient.d.ts.map +0 -1
- package/dist/mcp-sdk/client/McpClient.js +0 -118
- package/dist/mcp-sdk/client/McpClient.js.map +0 -1
- package/dist/mcp-sdk/client/index.d.ts.map +0 -1
- package/dist/mcp-sdk/client/index.js.map +0 -1
- package/dist/mcp-sdk/server/Transport.d.ts.map +0 -1
- package/dist/mcp-sdk/server/Transport.js.map +0 -1
- package/dist/mcp-sdk/server/index.d.ts.map +0 -1
- package/dist/mcp-sdk/server/index.js.map +0 -1
- package/src/mcp-sdk/client/McpClient.ts +0 -228
- /package/dist/{mcp-sdk → mcp}/client/index.d.ts +0 -0
- /package/dist/{mcp-sdk → mcp}/client/index.js +0 -0
- /package/dist/{mcp-sdk → mcp}/server/Transport.d.ts +0 -0
- /package/dist/{mcp-sdk → mcp}/server/Transport.js +0 -0
- /package/dist/{mcp-sdk → mcp}/server/index.d.ts +0 -0
- /package/dist/{mcp-sdk → mcp}/server/index.js +0 -0
- /package/src/{mcp-sdk → mcp}/client/index.ts +0 -0
- /package/src/{mcp-sdk → mcp}/server/Transport.test.ts +0 -0
- /package/src/{mcp-sdk → mcp}/server/Transport.ts +0 -0
- /package/src/{mcp-sdk → mcp}/server/index.ts +0 -0
|
@@ -1,228 +0,0 @@
|
|
|
1
|
-
import type { Client } from '@modelcontextprotocol/sdk/client/index.js'
|
|
2
|
-
import type { McpError } from '@modelcontextprotocol/sdk/types.js'
|
|
3
|
-
|
|
4
|
-
import type * as Challenge from '../../Challenge.js'
|
|
5
|
-
import * as Credential from '../../Credential.js'
|
|
6
|
-
import * as Expires from '../../Expires.js'
|
|
7
|
-
import * as AcceptPayment from '../../internal/AcceptPayment.js'
|
|
8
|
-
import * as core_Mcp from '../../Mcp.js'
|
|
9
|
-
import type * as Method from '../../Method.js'
|
|
10
|
-
import type * as z from '../../zod.js'
|
|
11
|
-
|
|
12
|
-
type AnyClient = Method.Client<any, any>
|
|
13
|
-
|
|
14
|
-
export type CallToolParameters = {
|
|
15
|
-
name: string
|
|
16
|
-
arguments?: Record<string, unknown>
|
|
17
|
-
_meta?: Record<string, unknown>
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
export type OnPaymentRequired = (challenge: Challenge.Challenge) => boolean | Promise<boolean>
|
|
21
|
-
|
|
22
|
-
/**
|
|
23
|
-
* Result of a tool call with payment handling.
|
|
24
|
-
* Extends the SDK's callTool return type with an optional payment receipt.
|
|
25
|
-
*/
|
|
26
|
-
export type CallToolResult = Awaited<ReturnType<Client['callTool']>> & {
|
|
27
|
-
/** Payment receipt if payment was made. */
|
|
28
|
-
receipt: core_Mcp.Receipt | undefined
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
/**
|
|
32
|
-
* Creates a payment-aware wrapper around an MCP SDK client.
|
|
33
|
-
*
|
|
34
|
-
* Similar to `Fetch.from()` for HTTP, this wraps an MCP client's `callTool`
|
|
35
|
-
* method to automatically handle payment challenges.
|
|
36
|
-
*
|
|
37
|
-
* @example
|
|
38
|
-
* ```ts
|
|
39
|
-
* import { Client } from '@modelcontextprotocol/sdk/client'
|
|
40
|
-
* import { McpClient, tempo } from 'mppx/mcp-sdk/client'
|
|
41
|
-
* import { privateKeyToAccount } from 'viem/accounts'
|
|
42
|
-
*
|
|
43
|
-
* const client = new Client({ name: 'my-client', version: '1.0.0' })
|
|
44
|
-
* await client.connect(transport)
|
|
45
|
-
*
|
|
46
|
-
* const mcp = McpClient.wrap(client, {
|
|
47
|
-
* methods: [
|
|
48
|
-
* tempo({
|
|
49
|
-
* account: privateKeyToAccount('0x...'),
|
|
50
|
-
* }),
|
|
51
|
-
* ],
|
|
52
|
-
* })
|
|
53
|
-
*
|
|
54
|
-
* // Automatically handles payment challenges
|
|
55
|
-
* const result = await mcp.callTool({ name: 'premium_tool', arguments: {} })
|
|
56
|
-
* console.log(result.content, result.receipt)
|
|
57
|
-
* ```
|
|
58
|
-
*/
|
|
59
|
-
export function wrap<
|
|
60
|
-
const client extends Pick<Client, 'callTool'>,
|
|
61
|
-
const methods extends readonly Method.AnyClient[],
|
|
62
|
-
>(client: client, config: wrap.Config<methods>): wrap.McpClient<client, methods> {
|
|
63
|
-
const { methods } = config
|
|
64
|
-
const paymentPreferences = AcceptPayment.resolve(methods)
|
|
65
|
-
|
|
66
|
-
const callTool = (async (
|
|
67
|
-
first: CallToolParameters | OnPaymentRequired | null | undefined,
|
|
68
|
-
second?: CallToolParameters | wrap.CallToolOptions<methods>,
|
|
69
|
-
third?: wrap.CallToolOptions<methods>,
|
|
70
|
-
) => {
|
|
71
|
-
const hasApprovalArgument = typeof first === 'function' || first === null || first === undefined
|
|
72
|
-
const params = (hasApprovalArgument ? second : first) as CallToolParameters
|
|
73
|
-
const options = (hasApprovalArgument ? third : second) as
|
|
74
|
-
| wrap.CallToolOptions<methods>
|
|
75
|
-
| undefined
|
|
76
|
-
const onPaymentRequired =
|
|
77
|
-
first === null
|
|
78
|
-
? undefined
|
|
79
|
-
: hasApprovalArgument
|
|
80
|
-
? ((first as OnPaymentRequired | undefined) ?? config.onPaymentRequired)
|
|
81
|
-
: config.onPaymentRequired
|
|
82
|
-
const context = options?.context
|
|
83
|
-
const timeout = options?.timeout
|
|
84
|
-
|
|
85
|
-
try {
|
|
86
|
-
const result = await client.callTool(
|
|
87
|
-
params,
|
|
88
|
-
undefined,
|
|
89
|
-
timeout !== undefined ? { timeout } : undefined,
|
|
90
|
-
)
|
|
91
|
-
|
|
92
|
-
return {
|
|
93
|
-
...result,
|
|
94
|
-
receipt: result._meta?.[core_Mcp.receiptMetaKey] as core_Mcp.Receipt | undefined,
|
|
95
|
-
}
|
|
96
|
-
} catch (error) {
|
|
97
|
-
// Check if this is a payment required error
|
|
98
|
-
if (!isPaymentRequiredError(error)) throw error
|
|
99
|
-
|
|
100
|
-
const challenges = (error.data as { challenges?: Challenge.Challenge[] })?.challenges
|
|
101
|
-
if (!challenges?.length) throw error
|
|
102
|
-
|
|
103
|
-
const selected = AcceptPayment.selectChallenge(
|
|
104
|
-
challenges,
|
|
105
|
-
methods,
|
|
106
|
-
paymentPreferences.entries,
|
|
107
|
-
)
|
|
108
|
-
if (!selected) {
|
|
109
|
-
const available = challenges.map((c) => `${c.method}.${c.intent}`).join(', ')
|
|
110
|
-
const installed = methods.map((m) => `${m.name}.${m.intent}`).join(', ')
|
|
111
|
-
throw new Error(
|
|
112
|
-
`No compatible payment method. Server offers: ${available}. Client has: ${installed}`,
|
|
113
|
-
{ cause: error },
|
|
114
|
-
)
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
if (selected.challenge.expires)
|
|
118
|
-
Expires.assert(selected.challenge.expires, selected.challenge.id)
|
|
119
|
-
|
|
120
|
-
if (onPaymentRequired) {
|
|
121
|
-
const approved = await onPaymentRequired(selected.challenge)
|
|
122
|
-
if (!approved) throw new Error('Payment declined.', { cause: error })
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
const credential = await createCredential(selected.challenge, {
|
|
126
|
-
context,
|
|
127
|
-
methods,
|
|
128
|
-
})
|
|
129
|
-
const parsed = Credential.deserialize(credential)
|
|
130
|
-
|
|
131
|
-
const retryResult = await client.callTool(
|
|
132
|
-
{
|
|
133
|
-
...params,
|
|
134
|
-
_meta: {
|
|
135
|
-
...params._meta,
|
|
136
|
-
[core_Mcp.credentialMetaKey]: parsed,
|
|
137
|
-
},
|
|
138
|
-
},
|
|
139
|
-
undefined,
|
|
140
|
-
timeout !== undefined ? { timeout } : undefined,
|
|
141
|
-
)
|
|
142
|
-
|
|
143
|
-
return {
|
|
144
|
-
...retryResult,
|
|
145
|
-
receipt: retryResult._meta?.[core_Mcp.receiptMetaKey] as core_Mcp.Receipt | undefined,
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
}) as wrap.McpClient<client, methods>['callTool']
|
|
149
|
-
|
|
150
|
-
return { ...client, callTool } as wrap.McpClient<client, methods>
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
/** Union of all context types from all methods that have context schemas. */
|
|
154
|
-
type AnyContextFor<methods extends readonly AnyClient[]> = {
|
|
155
|
-
[key in keyof methods]: methods[key] extends Method.Client<any, infer context>
|
|
156
|
-
? context extends z.ZodMiniType
|
|
157
|
-
? z.input<context>
|
|
158
|
-
: undefined
|
|
159
|
-
: undefined
|
|
160
|
-
}[number]
|
|
161
|
-
|
|
162
|
-
export declare namespace wrap {
|
|
163
|
-
type Config<methods extends readonly Method.AnyClient[] = readonly Method.AnyClient[]> = {
|
|
164
|
-
/** Array of methods to use. */
|
|
165
|
-
methods: methods
|
|
166
|
-
/** Optional approval hook called before creating a payment credential. */
|
|
167
|
-
onPaymentRequired?: OnPaymentRequired
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
type McpClient<
|
|
171
|
-
client extends Pick<Client, 'callTool'> = Pick<Client, 'callTool'>,
|
|
172
|
-
methods extends readonly AnyClient[] = readonly AnyClient[],
|
|
173
|
-
> = Omit<client, 'callTool'> & {
|
|
174
|
-
/** Call a tool with automatic payment handling. */
|
|
175
|
-
callTool: {
|
|
176
|
-
(params: CallToolParameters, options?: CallToolOptions<methods>): Promise<CallToolResult>
|
|
177
|
-
(
|
|
178
|
-
onPaymentRequired: OnPaymentRequired | null | undefined,
|
|
179
|
-
params: CallToolParameters,
|
|
180
|
-
options?: CallToolOptions<methods>,
|
|
181
|
-
): Promise<CallToolResult>
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
type CallToolOptions<methods extends readonly AnyClient[] = readonly AnyClient[]> = {
|
|
186
|
-
/** Context to pass to the method intent's createCredential. */
|
|
187
|
-
context?: AnyContextFor<methods>
|
|
188
|
-
/** Request timeout in milliseconds. */
|
|
189
|
-
timeout?: number
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
/**
|
|
194
|
-
* Checks if an error is a payment required error.
|
|
195
|
-
*/
|
|
196
|
-
export function isPaymentRequiredError(
|
|
197
|
-
error: unknown,
|
|
198
|
-
): error is McpError & { data: { challenges: Challenge.Challenge[] } } {
|
|
199
|
-
if (typeof error !== 'object' || error === null) return false
|
|
200
|
-
if (!('code' in error) || !('message' in error)) return false
|
|
201
|
-
if ((error as { code: unknown }).code !== core_Mcp.paymentRequiredCode) return false
|
|
202
|
-
const data = (error as { data?: { challenges?: unknown } }).data
|
|
203
|
-
return Array.isArray(data?.challenges) && data.challenges.length > 0
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
/** @internal */
|
|
207
|
-
async function createCredential<methods extends readonly Method.AnyClient[]>(
|
|
208
|
-
challenge: Challenge.Challenge,
|
|
209
|
-
config: {
|
|
210
|
-
context?: unknown
|
|
211
|
-
methods: methods
|
|
212
|
-
},
|
|
213
|
-
): Promise<string> {
|
|
214
|
-
const { context, methods } = config
|
|
215
|
-
|
|
216
|
-
const mi = methods.find((m) => m.name === challenge.method && m.intent === challenge.intent)
|
|
217
|
-
if (!mi)
|
|
218
|
-
throw new Error(
|
|
219
|
-
`No method found for "${challenge.method}.${challenge.intent}". Available: ${methods.map((m) => `${m.name}.${m.intent}`).join(', ')}`,
|
|
220
|
-
)
|
|
221
|
-
|
|
222
|
-
if (challenge.expires) Expires.assert(challenge.expires, challenge.id)
|
|
223
|
-
|
|
224
|
-
const parsedContext = mi.context && context !== undefined ? mi.context.parse(context) : undefined
|
|
225
|
-
return mi.createCredential(
|
|
226
|
-
parsedContext !== undefined ? { challenge, context: parsedContext } : ({ challenge } as never),
|
|
227
|
-
)
|
|
228
|
-
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|