@shroud-fi/mcp-server 0.1.1 → 0.1.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/package.json +11 -8
- package/src/auth.ts +129 -0
- package/src/bin/http.ts +26 -0
- package/src/bin/stdio.ts +16 -0
- package/src/config.ts +198 -0
- package/src/constants.ts +35 -0
- package/src/errors.ts +68 -0
- package/src/http.ts +217 -0
- package/src/index.ts +41 -0
- package/src/server.ts +103 -0
- package/src/stdio.ts +19 -0
- package/src/tools/balance.ts +66 -0
- package/src/tools/index.ts +42 -0
- package/src/tools/receive.ts +105 -0
- package/src/tools/register.ts +37 -0
- package/src/tools/schema.ts +25 -0
- package/src/tools/send-to-wallet.ts +70 -0
- package/src/tools/send.ts +73 -0
- package/src/tools/status.ts +40 -0
- package/src/tools/sweep.ts +125 -0
- package/src/tools/x402-pay.ts +78 -0
- package/src/tools/x402-serve.ts +142 -0
- package/src/types.ts +74 -0
- package/tsconfig.json +9 -0
- package/dist/cjs/auth.d.ts.map +0 -1
- package/dist/cjs/auth.js.map +0 -1
- package/dist/cjs/bin/http.d.ts.map +0 -1
- package/dist/cjs/bin/http.js.map +0 -1
- package/dist/cjs/bin/stdio.d.ts.map +0 -1
- package/dist/cjs/bin/stdio.js.map +0 -1
- package/dist/cjs/config.d.ts.map +0 -1
- package/dist/cjs/config.js.map +0 -1
- package/dist/cjs/constants.d.ts.map +0 -1
- package/dist/cjs/constants.js.map +0 -1
- package/dist/cjs/errors.d.ts.map +0 -1
- package/dist/cjs/errors.js.map +0 -1
- package/dist/cjs/http.d.ts.map +0 -1
- package/dist/cjs/http.js.map +0 -1
- package/dist/cjs/index.d.ts.map +0 -1
- package/dist/cjs/index.js.map +0 -1
- package/dist/cjs/server.d.ts.map +0 -1
- package/dist/cjs/server.js.map +0 -1
- package/dist/cjs/stdio.d.ts.map +0 -1
- package/dist/cjs/stdio.js.map +0 -1
- package/dist/cjs/tools/balance.d.ts.map +0 -1
- package/dist/cjs/tools/balance.js.map +0 -1
- package/dist/cjs/tools/index.d.ts.map +0 -1
- package/dist/cjs/tools/index.js.map +0 -1
- package/dist/cjs/tools/receive.d.ts.map +0 -1
- package/dist/cjs/tools/receive.js.map +0 -1
- package/dist/cjs/tools/register.d.ts.map +0 -1
- package/dist/cjs/tools/register.js.map +0 -1
- package/dist/cjs/tools/schema.d.ts.map +0 -1
- package/dist/cjs/tools/schema.js.map +0 -1
- package/dist/cjs/tools/send-to-wallet.d.ts.map +0 -1
- package/dist/cjs/tools/send-to-wallet.js.map +0 -1
- package/dist/cjs/tools/send.d.ts.map +0 -1
- package/dist/cjs/tools/send.js.map +0 -1
- package/dist/cjs/tools/status.d.ts.map +0 -1
- package/dist/cjs/tools/status.js.map +0 -1
- package/dist/cjs/tools/sweep.d.ts.map +0 -1
- package/dist/cjs/tools/sweep.js.map +0 -1
- package/dist/cjs/tools/x402-pay.d.ts.map +0 -1
- package/dist/cjs/tools/x402-pay.js.map +0 -1
- package/dist/cjs/tools/x402-serve.d.ts.map +0 -1
- package/dist/cjs/tools/x402-serve.js.map +0 -1
- package/dist/cjs/types.d.ts.map +0 -1
- package/dist/cjs/types.js.map +0 -1
- package/dist/esm/auth.d.ts.map +0 -1
- package/dist/esm/auth.js.map +0 -1
- package/dist/esm/bin/http.d.ts.map +0 -1
- package/dist/esm/bin/http.js.map +0 -1
- package/dist/esm/bin/stdio.d.ts.map +0 -1
- package/dist/esm/bin/stdio.js.map +0 -1
- package/dist/esm/config.d.ts.map +0 -1
- package/dist/esm/config.js.map +0 -1
- package/dist/esm/constants.d.ts.map +0 -1
- package/dist/esm/constants.js.map +0 -1
- package/dist/esm/errors.d.ts.map +0 -1
- package/dist/esm/errors.js.map +0 -1
- package/dist/esm/http.d.ts.map +0 -1
- package/dist/esm/http.js.map +0 -1
- package/dist/esm/index.d.ts.map +0 -1
- package/dist/esm/index.js.map +0 -1
- package/dist/esm/server.d.ts.map +0 -1
- package/dist/esm/server.js.map +0 -1
- package/dist/esm/stdio.d.ts.map +0 -1
- package/dist/esm/stdio.js.map +0 -1
- package/dist/esm/tools/balance.d.ts.map +0 -1
- package/dist/esm/tools/balance.js.map +0 -1
- package/dist/esm/tools/index.d.ts.map +0 -1
- package/dist/esm/tools/index.js.map +0 -1
- package/dist/esm/tools/receive.d.ts.map +0 -1
- package/dist/esm/tools/receive.js.map +0 -1
- package/dist/esm/tools/register.d.ts.map +0 -1
- package/dist/esm/tools/register.js.map +0 -1
- package/dist/esm/tools/schema.d.ts.map +0 -1
- package/dist/esm/tools/schema.js.map +0 -1
- package/dist/esm/tools/send-to-wallet.d.ts.map +0 -1
- package/dist/esm/tools/send-to-wallet.js.map +0 -1
- package/dist/esm/tools/send.d.ts.map +0 -1
- package/dist/esm/tools/send.js.map +0 -1
- package/dist/esm/tools/status.d.ts.map +0 -1
- package/dist/esm/tools/status.js.map +0 -1
- package/dist/esm/tools/sweep.d.ts.map +0 -1
- package/dist/esm/tools/sweep.js.map +0 -1
- package/dist/esm/tools/x402-pay.d.ts.map +0 -1
- package/dist/esm/tools/x402-pay.js.map +0 -1
- package/dist/esm/tools/x402-serve.d.ts.map +0 -1
- package/dist/esm/tools/x402-serve.js.map +0 -1
- package/dist/esm/types.d.ts.map +0 -1
- package/dist/esm/types.js.map +0 -1
- package/dist/tsconfig.cjs.tsbuildinfo +0 -1
- package/dist/tsconfig.esm.tsbuildinfo +0 -1
- package/dist/tsconfig.tsbuildinfo +0 -1
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* shroud_send_to_wallet — pay a recipient by their plain EVM wallet address.
|
|
3
|
+
*
|
|
4
|
+
* The SDK does the ERC-6538 lookup + meta-address decode + stealth derivation.
|
|
5
|
+
* Caller never sees a meta-address.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { z } from 'zod';
|
|
9
|
+
import type { McpTool, McpToolResult } from '../types.js';
|
|
10
|
+
import { McpInvalidArgsError } from '../errors.js';
|
|
11
|
+
import {
|
|
12
|
+
AddressSchema,
|
|
13
|
+
AssetSchema,
|
|
14
|
+
Uint256StringSchema,
|
|
15
|
+
toBigInt,
|
|
16
|
+
} from './schema.js';
|
|
17
|
+
|
|
18
|
+
const ArgsSchema = z
|
|
19
|
+
.object({
|
|
20
|
+
recipient: AddressSchema,
|
|
21
|
+
asset: AssetSchema,
|
|
22
|
+
amount: Uint256StringSchema,
|
|
23
|
+
})
|
|
24
|
+
.strict();
|
|
25
|
+
|
|
26
|
+
export const shroudSendToWalletTool: McpTool = {
|
|
27
|
+
name: 'shroud_send_to_wallet',
|
|
28
|
+
description:
|
|
29
|
+
'Send ETH or an ERC-20 token to a recipient identified by their plain wallet address. The SDK looks up their ERC-6538 stealth meta-address and derives a one-time stealth address automatically. Throws RecipientNotOnboardedError if the wallet has not registered.',
|
|
30
|
+
inputSchema: {
|
|
31
|
+
type: 'object',
|
|
32
|
+
additionalProperties: false,
|
|
33
|
+
properties: {
|
|
34
|
+
recipient: { type: 'string', pattern: '^0x[0-9a-fA-F]{40}$' },
|
|
35
|
+
asset: {
|
|
36
|
+
oneOf: [
|
|
37
|
+
{ type: 'string', enum: ['ETH'] },
|
|
38
|
+
{
|
|
39
|
+
type: 'object',
|
|
40
|
+
properties: { token: { type: 'string', pattern: '^0x[0-9a-fA-F]{40}$' } },
|
|
41
|
+
required: ['token'],
|
|
42
|
+
additionalProperties: false,
|
|
43
|
+
},
|
|
44
|
+
],
|
|
45
|
+
},
|
|
46
|
+
amount: { type: 'string', pattern: '^\\d+$' },
|
|
47
|
+
},
|
|
48
|
+
required: ['recipient', 'asset', 'amount'],
|
|
49
|
+
},
|
|
50
|
+
async handler(ctx, raw): Promise<McpToolResult> {
|
|
51
|
+
const parsed = ArgsSchema.safeParse(raw);
|
|
52
|
+
if (!parsed.success) {
|
|
53
|
+
throw new McpInvalidArgsError();
|
|
54
|
+
}
|
|
55
|
+
const { recipient, asset, amount } = parsed.data;
|
|
56
|
+
const assetArg = asset === 'ETH' ? 'ETH' : { token: asset.token as `0x${string}` };
|
|
57
|
+
const receipt = await ctx.agent.sendToWallet(
|
|
58
|
+
recipient as `0x${string}`,
|
|
59
|
+
assetArg,
|
|
60
|
+
toBigInt(amount),
|
|
61
|
+
);
|
|
62
|
+
return {
|
|
63
|
+
ok: true,
|
|
64
|
+
txHash: receipt.txHash,
|
|
65
|
+
stealthAddress: receipt.stealthAddress,
|
|
66
|
+
ephemeralPubKey: receipt.ephemeralPubKey,
|
|
67
|
+
viewTag: receipt.viewTag,
|
|
68
|
+
};
|
|
69
|
+
},
|
|
70
|
+
};
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* shroud_send — send to a stealth meta-address (the privacy-native form).
|
|
3
|
+
*
|
|
4
|
+
* Uses agent.send (ETH) or agent.sendERC20 (token). Recipient is the encoded
|
|
5
|
+
* meta-address string `st:base:0x…`.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { z } from 'zod';
|
|
9
|
+
import type { McpTool, McpToolResult } from '../types.js';
|
|
10
|
+
import { McpInvalidArgsError } from '../errors.js';
|
|
11
|
+
import { AddressSchema, AssetSchema, Uint256StringSchema, toBigInt } from './schema.js';
|
|
12
|
+
|
|
13
|
+
const ArgsSchema = z
|
|
14
|
+
.object({
|
|
15
|
+
to: z.string().min(1),
|
|
16
|
+
asset: AssetSchema,
|
|
17
|
+
amount: Uint256StringSchema,
|
|
18
|
+
})
|
|
19
|
+
.strict();
|
|
20
|
+
|
|
21
|
+
export const shroudSendTool: McpTool = {
|
|
22
|
+
name: 'shroud_send',
|
|
23
|
+
description:
|
|
24
|
+
'Send ETH or an ERC-20 token to a stealth meta-address. `to` is the encoded `st:base:0x…` string. `asset` is "ETH" or { token: 0x… }. `amount` is a base-units string.',
|
|
25
|
+
inputSchema: {
|
|
26
|
+
type: 'object',
|
|
27
|
+
additionalProperties: false,
|
|
28
|
+
properties: {
|
|
29
|
+
to: { type: 'string', description: 'Encoded stealth meta-address' },
|
|
30
|
+
asset: {
|
|
31
|
+
oneOf: [
|
|
32
|
+
{ type: 'string', enum: ['ETH'] },
|
|
33
|
+
{
|
|
34
|
+
type: 'object',
|
|
35
|
+
properties: { token: { type: 'string', pattern: '^0x[0-9a-fA-F]{40}$' } },
|
|
36
|
+
required: ['token'],
|
|
37
|
+
additionalProperties: false,
|
|
38
|
+
},
|
|
39
|
+
],
|
|
40
|
+
},
|
|
41
|
+
amount: { type: 'string', pattern: '^\\d+$', description: 'Base-units integer' },
|
|
42
|
+
},
|
|
43
|
+
required: ['to', 'asset', 'amount'],
|
|
44
|
+
},
|
|
45
|
+
async handler(ctx, raw): Promise<McpToolResult> {
|
|
46
|
+
const parsed = ArgsSchema.safeParse(raw);
|
|
47
|
+
if (!parsed.success) {
|
|
48
|
+
throw new McpInvalidArgsError();
|
|
49
|
+
}
|
|
50
|
+
const { to, asset, amount } = parsed.data;
|
|
51
|
+
const amountWei = toBigInt(amount);
|
|
52
|
+
|
|
53
|
+
let receipt;
|
|
54
|
+
if (asset === 'ETH') {
|
|
55
|
+
receipt = await ctx.agent.send(to, amountWei);
|
|
56
|
+
} else {
|
|
57
|
+
// Validate the token address shape before dispatch.
|
|
58
|
+
AddressSchema.parse(asset.token);
|
|
59
|
+
receipt = await ctx.agent.sendERC20(
|
|
60
|
+
to,
|
|
61
|
+
asset.token as `0x${string}`,
|
|
62
|
+
amountWei,
|
|
63
|
+
);
|
|
64
|
+
}
|
|
65
|
+
return {
|
|
66
|
+
ok: true,
|
|
67
|
+
txHash: receipt.txHash,
|
|
68
|
+
stealthAddress: receipt.stealthAddress,
|
|
69
|
+
ephemeralPubKey: receipt.ephemeralPubKey,
|
|
70
|
+
viewTag: receipt.viewTag,
|
|
71
|
+
};
|
|
72
|
+
},
|
|
73
|
+
};
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* shroud_status — read-only snapshot of agent + chain + on-chain registration.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import { z } from 'zod';
|
|
6
|
+
import type { McpTool, McpToolResult } from '../types.js';
|
|
7
|
+
import { McpInvalidArgsError } from '../errors.js';
|
|
8
|
+
|
|
9
|
+
const ArgsSchema = z.object({}).strict();
|
|
10
|
+
|
|
11
|
+
export const shroudStatusTool: McpTool = {
|
|
12
|
+
name: 'shroud_status',
|
|
13
|
+
description:
|
|
14
|
+
'Snapshot of the running agent: operator wallet, meta-address, chain id, current block, on-chain registration state, and stealth contract address.',
|
|
15
|
+
inputSchema: {
|
|
16
|
+
type: 'object',
|
|
17
|
+
additionalProperties: false,
|
|
18
|
+
properties: {},
|
|
19
|
+
required: [],
|
|
20
|
+
},
|
|
21
|
+
async handler(ctx, raw): Promise<McpToolResult> {
|
|
22
|
+
const parsed = ArgsSchema.safeParse(raw ?? {});
|
|
23
|
+
if (!parsed.success) {
|
|
24
|
+
throw new McpInvalidArgsError();
|
|
25
|
+
}
|
|
26
|
+
const latest = await ctx.transport.publicClient.getBlock({
|
|
27
|
+
blockTag: 'latest',
|
|
28
|
+
});
|
|
29
|
+
const registered = await ctx.agent.isRegistered();
|
|
30
|
+
return {
|
|
31
|
+
ok: true,
|
|
32
|
+
chainId: ctx.chainId,
|
|
33
|
+
walletAddress: ctx.walletAddress ?? null,
|
|
34
|
+
metaAddress: ctx.agent.metaAddressEncoded,
|
|
35
|
+
stealthContract: ctx.agent.stealthContract,
|
|
36
|
+
latestBlock: (latest.number ?? 0n).toString(),
|
|
37
|
+
registered,
|
|
38
|
+
};
|
|
39
|
+
},
|
|
40
|
+
};
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* shroud_sweep — sweep a previously-detected stealth address to a destination.
|
|
3
|
+
*
|
|
4
|
+
* Caller passes the detection bundle returned by shroud_receive (stealth
|
|
5
|
+
* address + stealth private key + ephemeral pub key + tx coords). We
|
|
6
|
+
* reconstruct a minimal DetectedPayment and dispatch to agent.sweep.
|
|
7
|
+
*
|
|
8
|
+
* Optional flags:
|
|
9
|
+
* - viaRelayer + token → Gelato ERC-20 gasless sweep
|
|
10
|
+
* - viaRelayer (ETH) → EIP-7702 ETH gasless sweep (requires selfHostEndpoint)
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
import { z } from 'zod';
|
|
14
|
+
import type { DetectedPayment } from '@shroud-fi/scanning';
|
|
15
|
+
import type { McpTool, McpToolResult } from '../types.js';
|
|
16
|
+
import { McpInvalidArgsError } from '../errors.js';
|
|
17
|
+
import { AddressSchema, Uint256StringSchema, toBigInt } from './schema.js';
|
|
18
|
+
|
|
19
|
+
const HexSchema = z.string().regex(/^0x[0-9a-fA-F]+$/);
|
|
20
|
+
const Hex32Schema = z.string().regex(/^0x[0-9a-fA-F]{64}$/);
|
|
21
|
+
|
|
22
|
+
const ArgsSchema = z
|
|
23
|
+
.object({
|
|
24
|
+
detection: z.object({
|
|
25
|
+
stealthAddress: AddressSchema,
|
|
26
|
+
ephemeralPubKey: HexSchema,
|
|
27
|
+
stealthPrivateKey: Hex32Schema,
|
|
28
|
+
txHash: Hex32Schema,
|
|
29
|
+
blockNumber: Uint256StringSchema,
|
|
30
|
+
blockHash: Hex32Schema,
|
|
31
|
+
logIndex: z.number().int().nonnegative(),
|
|
32
|
+
finality: z.enum(['safe', 'finalized']).optional(),
|
|
33
|
+
}),
|
|
34
|
+
destination: AddressSchema,
|
|
35
|
+
token: AddressSchema.optional(),
|
|
36
|
+
viaRelayer: z.boolean().optional(),
|
|
37
|
+
ethRelayerEndpoint: z.string().url().optional(),
|
|
38
|
+
})
|
|
39
|
+
.strict();
|
|
40
|
+
|
|
41
|
+
export const shroudSweepTool: McpTool = {
|
|
42
|
+
name: 'shroud_sweep',
|
|
43
|
+
description:
|
|
44
|
+
'Sweep a detected stealth address to a destination wallet. Pass the detection object returned by shroud_receive. Omit `token` for ETH; pass `token` for an ERC-20. Set `viaRelayer: true` for gasless sweep (ERC-20 → Gelato; ETH → requires `ethRelayerEndpoint` to a self-host relayer).',
|
|
45
|
+
inputSchema: {
|
|
46
|
+
type: 'object',
|
|
47
|
+
additionalProperties: false,
|
|
48
|
+
properties: {
|
|
49
|
+
detection: {
|
|
50
|
+
type: 'object',
|
|
51
|
+
additionalProperties: false,
|
|
52
|
+
properties: {
|
|
53
|
+
stealthAddress: { type: 'string', pattern: '^0x[0-9a-fA-F]{40}$' },
|
|
54
|
+
ephemeralPubKey: { type: 'string', pattern: '^0x[0-9a-fA-F]+$' },
|
|
55
|
+
stealthPrivateKey: { type: 'string', pattern: '^0x[0-9a-fA-F]{64}$' },
|
|
56
|
+
txHash: { type: 'string', pattern: '^0x[0-9a-fA-F]{64}$' },
|
|
57
|
+
blockNumber: { type: 'string', pattern: '^\\d+$' },
|
|
58
|
+
blockHash: { type: 'string', pattern: '^0x[0-9a-fA-F]{64}$' },
|
|
59
|
+
logIndex: { type: 'integer', minimum: 0 },
|
|
60
|
+
finality: { type: 'string', enum: ['safe', 'finalized'] },
|
|
61
|
+
},
|
|
62
|
+
required: [
|
|
63
|
+
'stealthAddress',
|
|
64
|
+
'ephemeralPubKey',
|
|
65
|
+
'stealthPrivateKey',
|
|
66
|
+
'txHash',
|
|
67
|
+
'blockNumber',
|
|
68
|
+
'blockHash',
|
|
69
|
+
'logIndex',
|
|
70
|
+
],
|
|
71
|
+
},
|
|
72
|
+
destination: { type: 'string', pattern: '^0x[0-9a-fA-F]{40}$' },
|
|
73
|
+
token: { type: 'string', pattern: '^0x[0-9a-fA-F]{40}$' },
|
|
74
|
+
viaRelayer: { type: 'boolean' },
|
|
75
|
+
ethRelayerEndpoint: { type: 'string' },
|
|
76
|
+
},
|
|
77
|
+
required: ['detection', 'destination'],
|
|
78
|
+
},
|
|
79
|
+
async handler(ctx, raw): Promise<McpToolResult> {
|
|
80
|
+
const parsed = ArgsSchema.safeParse(raw);
|
|
81
|
+
if (!parsed.success) {
|
|
82
|
+
throw new McpInvalidArgsError();
|
|
83
|
+
}
|
|
84
|
+
const { detection, destination, token, viaRelayer, ethRelayerEndpoint } = parsed.data;
|
|
85
|
+
|
|
86
|
+
const dp: DetectedPayment = {
|
|
87
|
+
stealthAddress: detection.stealthAddress as `0x${string}`,
|
|
88
|
+
ephemeralPubKey: detection.ephemeralPubKey as `0x${string}`,
|
|
89
|
+
stealthPrivateKey: detection.stealthPrivateKey as `0x${string}`,
|
|
90
|
+
txHash: detection.txHash as `0x${string}`,
|
|
91
|
+
blockNumber: toBigInt(detection.blockNumber),
|
|
92
|
+
blockHash: detection.blockHash as `0x${string}`,
|
|
93
|
+
logIndex: detection.logIndex,
|
|
94
|
+
finality: detection.finality ?? 'safe',
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
const sweepOpts: Parameters<typeof ctx.agent.sweep>[2] = {};
|
|
98
|
+
if (token !== undefined) sweepOpts.token = token as `0x${string}`;
|
|
99
|
+
if (viaRelayer === true) {
|
|
100
|
+
sweepOpts.viaRelayer = true;
|
|
101
|
+
if (ethRelayerEndpoint !== undefined) {
|
|
102
|
+
sweepOpts.ethRelayerOptions = { selfHostEndpoint: ethRelayerEndpoint };
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
const result = await ctx.agent.sweep(
|
|
107
|
+
dp,
|
|
108
|
+
destination as `0x${string}`,
|
|
109
|
+
sweepOpts,
|
|
110
|
+
);
|
|
111
|
+
const swept = result.swept as Record<string, unknown>;
|
|
112
|
+
const out: Record<string, unknown> = {
|
|
113
|
+
ok: true,
|
|
114
|
+
txHash: swept.txHash,
|
|
115
|
+
destination: swept.destination,
|
|
116
|
+
};
|
|
117
|
+
if (swept.token !== undefined) out.token = swept.token;
|
|
118
|
+
if (swept.blockNumber !== undefined) {
|
|
119
|
+
out.blockNumber = (swept.blockNumber as bigint).toString();
|
|
120
|
+
}
|
|
121
|
+
if (swept.taskId !== undefined) out.taskId = swept.taskId;
|
|
122
|
+
if (swept.status !== undefined) out.status = swept.status;
|
|
123
|
+
return out as McpToolResult;
|
|
124
|
+
},
|
|
125
|
+
};
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* shroud_x402_pay — one-shot HTTP 402 client.
|
|
3
|
+
*
|
|
4
|
+
* Fetches a URL; if the server responds 402, the SDK signs an EIP-3009
|
|
5
|
+
* USDC transferWithAuthorization and retries automatically. Returns the
|
|
6
|
+
* server's final status, the body (if JSON-decodable), and the settled
|
|
7
|
+
* tx hash exposed via X-PAYMENT-RESPONSE when present.
|
|
8
|
+
*
|
|
9
|
+
* `maxPriceUsdcAtomic` is a hard safety cap. If the server demands more,
|
|
10
|
+
* the SDK throws X402AmountMismatchError without signing.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
import { z } from 'zod';
|
|
14
|
+
import { createX402Client } from '@shroud-fi/x402';
|
|
15
|
+
import type { McpTool, McpToolResult } from '../types.js';
|
|
16
|
+
import { McpInvalidArgsError } from '../errors.js';
|
|
17
|
+
import { Uint256StringSchema, toBigInt } from './schema.js';
|
|
18
|
+
|
|
19
|
+
const ArgsSchema = z
|
|
20
|
+
.object({
|
|
21
|
+
url: z.string().url(),
|
|
22
|
+
method: z.enum(['GET', 'POST', 'PUT', 'PATCH', 'DELETE']).optional(),
|
|
23
|
+
body: z.string().optional(),
|
|
24
|
+
headers: z.record(z.string()).optional(),
|
|
25
|
+
maxPriceUsdcAtomic: Uint256StringSchema.optional(),
|
|
26
|
+
})
|
|
27
|
+
.strict();
|
|
28
|
+
|
|
29
|
+
export const shroudX402PayTool: McpTool = {
|
|
30
|
+
name: 'shroud_x402_pay',
|
|
31
|
+
description:
|
|
32
|
+
'Fetch an HTTP URL. If the server responds 402, the SDK auto-signs EIP-3009 USDC payment using the agent operator wallet and retries. Returns final status, response body (if any), and settled tx hash (if X-PAYMENT-RESPONSE was returned). `maxPriceUsdcAtomic` caps how much the client will pay (base units, 6 decimals).',
|
|
33
|
+
inputSchema: {
|
|
34
|
+
type: 'object',
|
|
35
|
+
additionalProperties: false,
|
|
36
|
+
properties: {
|
|
37
|
+
url: { type: 'string' },
|
|
38
|
+
method: { type: 'string', enum: ['GET', 'POST', 'PUT', 'PATCH', 'DELETE'] },
|
|
39
|
+
body: { type: 'string' },
|
|
40
|
+
headers: { type: 'object', additionalProperties: { type: 'string' } },
|
|
41
|
+
maxPriceUsdcAtomic: { type: 'string', pattern: '^\\d+$' },
|
|
42
|
+
},
|
|
43
|
+
required: ['url'],
|
|
44
|
+
},
|
|
45
|
+
async handler(ctx, raw): Promise<McpToolResult> {
|
|
46
|
+
const parsed = ArgsSchema.safeParse(raw);
|
|
47
|
+
if (!parsed.success) {
|
|
48
|
+
throw new McpInvalidArgsError();
|
|
49
|
+
}
|
|
50
|
+
const { url, method, body, headers, maxPriceUsdcAtomic } = parsed.data;
|
|
51
|
+
const client = createX402Client({ transport: ctx.transport });
|
|
52
|
+
const init: RequestInit & { maxPriceAtomic?: bigint } = {
|
|
53
|
+
method: method ?? 'GET',
|
|
54
|
+
...(headers !== undefined ? { headers } : {}),
|
|
55
|
+
...(body !== undefined ? { body } : {}),
|
|
56
|
+
...(maxPriceUsdcAtomic !== undefined
|
|
57
|
+
? { maxPriceAtomic: toBigInt(maxPriceUsdcAtomic) }
|
|
58
|
+
: {}),
|
|
59
|
+
};
|
|
60
|
+
const response = await client.fetch(url, init);
|
|
61
|
+
const text = await response.text();
|
|
62
|
+
let json: unknown;
|
|
63
|
+
try {
|
|
64
|
+
json = JSON.parse(text);
|
|
65
|
+
} catch {
|
|
66
|
+
json = null;
|
|
67
|
+
}
|
|
68
|
+
return {
|
|
69
|
+
ok: response.ok,
|
|
70
|
+
status: response.status,
|
|
71
|
+
bodyText: text.length > 4096 ? text.slice(0, 4096) : text,
|
|
72
|
+
bodyJson: json,
|
|
73
|
+
...(response.x402Settlement !== undefined
|
|
74
|
+
? { settledTxHash: response.x402Settlement.txHash }
|
|
75
|
+
: {}),
|
|
76
|
+
};
|
|
77
|
+
},
|
|
78
|
+
};
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* shroud_x402_serve — server-side x402 primitives.
|
|
3
|
+
*
|
|
4
|
+
* One tool, two ops:
|
|
5
|
+
* - op: 'challenge' → mint a 402 challenge bundle (headers + body) the
|
|
6
|
+
* caller serves from their own HTTP framework. Each challenge derives a
|
|
7
|
+
* FRESH stealth payTo address.
|
|
8
|
+
* - op: 'verify' → verify a client's signed X-PAYMENT payload against a
|
|
9
|
+
* prior challenge. Skip-facilitator mode by default — caller settles
|
|
10
|
+
* the EIP-3009 authorization on-chain themselves.
|
|
11
|
+
*
|
|
12
|
+
* Caller is responsible for transport (Express/Fastify/Next/etc) — this
|
|
13
|
+
* stays framework-agnostic.
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
import { z } from 'zod';
|
|
17
|
+
import { createX402Server } from '@shroud-fi/x402';
|
|
18
|
+
import { getUSDC } from '@shroud-fi/transport';
|
|
19
|
+
import type { McpTool, McpToolResult } from '../types.js';
|
|
20
|
+
import { McpInvalidArgsError } from '../errors.js';
|
|
21
|
+
import { Uint256StringSchema } from './schema.js';
|
|
22
|
+
|
|
23
|
+
const ChallengeArgs = z
|
|
24
|
+
.object({
|
|
25
|
+
op: z.literal('challenge'),
|
|
26
|
+
resource: z.string().min(1),
|
|
27
|
+
description: z.string().optional(),
|
|
28
|
+
priceUsdcAtomic: Uint256StringSchema.optional(),
|
|
29
|
+
})
|
|
30
|
+
.strict();
|
|
31
|
+
|
|
32
|
+
const VerifyArgs = z
|
|
33
|
+
.object({
|
|
34
|
+
op: z.literal('verify'),
|
|
35
|
+
signedPayloadBase64: z.string().min(1),
|
|
36
|
+
challenge: z.object({
|
|
37
|
+
body: z.object({
|
|
38
|
+
x402Version: z.literal(2),
|
|
39
|
+
error: z.string(),
|
|
40
|
+
accepts: z.array(z.any()),
|
|
41
|
+
}),
|
|
42
|
+
headers: z.record(z.string()),
|
|
43
|
+
}),
|
|
44
|
+
skipFacilitator: z.boolean().optional(),
|
|
45
|
+
})
|
|
46
|
+
.strict();
|
|
47
|
+
|
|
48
|
+
const ArgsSchema = z.discriminatedUnion('op', [ChallengeArgs, VerifyArgs]);
|
|
49
|
+
|
|
50
|
+
export const shroudX402ServeTool: McpTool = {
|
|
51
|
+
name: 'shroud_x402_serve',
|
|
52
|
+
description:
|
|
53
|
+
'Server-side x402 primitives. `op: "challenge"` mints a fresh 402 challenge (headers + body + per-call stealth payTo); caller attaches to their HTTP response. `op: "verify"` verifies a client X-PAYMENT payload against a prior challenge. Defaults to skip-facilitator mode (caller settles on-chain themselves).',
|
|
54
|
+
inputSchema: {
|
|
55
|
+
type: 'object',
|
|
56
|
+
oneOf: [
|
|
57
|
+
{
|
|
58
|
+
properties: {
|
|
59
|
+
op: { const: 'challenge' },
|
|
60
|
+
resource: { type: 'string' },
|
|
61
|
+
description: { type: 'string' },
|
|
62
|
+
priceUsdcAtomic: { type: 'string', pattern: '^\\d+$' },
|
|
63
|
+
},
|
|
64
|
+
required: ['op', 'resource'],
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
properties: {
|
|
68
|
+
op: { const: 'verify' },
|
|
69
|
+
signedPayloadBase64: { type: 'string' },
|
|
70
|
+
challenge: { type: 'object' },
|
|
71
|
+
skipFacilitator: { type: 'boolean' },
|
|
72
|
+
},
|
|
73
|
+
required: ['op', 'signedPayloadBase64', 'challenge'],
|
|
74
|
+
},
|
|
75
|
+
],
|
|
76
|
+
},
|
|
77
|
+
async handler(ctx, raw): Promise<McpToolResult> {
|
|
78
|
+
const parsed = ArgsSchema.safeParse(raw);
|
|
79
|
+
if (!parsed.success) {
|
|
80
|
+
throw new McpInvalidArgsError();
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
const usdc = getUSDC(ctx.chainId);
|
|
84
|
+
if (usdc === undefined) {
|
|
85
|
+
throw new McpInvalidArgsError();
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
const server = createX402Server({
|
|
89
|
+
transport: ctx.transport,
|
|
90
|
+
chainId: ctx.chainId,
|
|
91
|
+
recipientMetaAddress: ctx.agent.metaAddressEncoded,
|
|
92
|
+
asset: usdc as `0x${string}`,
|
|
93
|
+
defaultPriceAtomic:
|
|
94
|
+
parsed.data.op === 'challenge' && parsed.data.priceUsdcAtomic !== undefined
|
|
95
|
+
? BigInt(parsed.data.priceUsdcAtomic)
|
|
96
|
+
: 10_000n,
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
if (parsed.data.op === 'challenge') {
|
|
100
|
+
const args: Parameters<typeof server.challenge>[0] = {
|
|
101
|
+
resource: parsed.data.resource,
|
|
102
|
+
};
|
|
103
|
+
if (parsed.data.description !== undefined) args.description = parsed.data.description;
|
|
104
|
+
if (parsed.data.priceUsdcAtomic !== undefined) {
|
|
105
|
+
args.priceAtomic = BigInt(parsed.data.priceUsdcAtomic);
|
|
106
|
+
}
|
|
107
|
+
const ch = await server.challenge(args);
|
|
108
|
+
return {
|
|
109
|
+
ok: true,
|
|
110
|
+
status: ch.status,
|
|
111
|
+
headers: ch.headers,
|
|
112
|
+
body: ch.body,
|
|
113
|
+
announcement: ch.announcement,
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
// op === 'verify' — caller round-trips the same shape they received from
|
|
118
|
+
// the challenge op. Cast through unknown so the schema declaration stays
|
|
119
|
+
// permissive (zod already ran structural checks).
|
|
120
|
+
const verifyResult = await server.verify({
|
|
121
|
+
signedPayload: parsed.data.signedPayloadBase64,
|
|
122
|
+
challenge: parsed.data.challenge as unknown as Parameters<
|
|
123
|
+
typeof server.verify
|
|
124
|
+
>[0]['challenge'],
|
|
125
|
+
skipFacilitator: parsed.data.skipFacilitator ?? true,
|
|
126
|
+
});
|
|
127
|
+
if (verifyResult.valid) {
|
|
128
|
+
return {
|
|
129
|
+
ok: true,
|
|
130
|
+
valid: true,
|
|
131
|
+
...(verifyResult.settledTxHash !== undefined
|
|
132
|
+
? { settledTxHash: verifyResult.settledTxHash }
|
|
133
|
+
: {}),
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
return {
|
|
137
|
+
ok: true,
|
|
138
|
+
valid: false,
|
|
139
|
+
error: verifyResult.error,
|
|
140
|
+
};
|
|
141
|
+
},
|
|
142
|
+
};
|
package/src/types.ts
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Public types for @shroud-fi/mcp-server.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import type { Hex } from 'viem';
|
|
6
|
+
import type { ShroudAgent } from '@shroud-fi/agent-runtime';
|
|
7
|
+
import type { ShroudFiTransport } from '@shroud-fi/transport';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Resolved server context — what every tool handler receives.
|
|
11
|
+
*
|
|
12
|
+
* Built once by createMcpServer/bootstrap and reused for every tool call.
|
|
13
|
+
* No mutable state lives here; the scanner cursor is owned by the agent.
|
|
14
|
+
*/
|
|
15
|
+
export interface McpServerContext {
|
|
16
|
+
readonly agent: ShroudAgent;
|
|
17
|
+
readonly transport: ShroudFiTransport;
|
|
18
|
+
readonly chainId: number;
|
|
19
|
+
/** Resolution of the operator's signing wallet, when present. */
|
|
20
|
+
readonly walletAddress: `0x${string}` | undefined;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/** JSON-safe tool result shape. MCP wraps this in a `content` array. */
|
|
24
|
+
export interface McpToolResult {
|
|
25
|
+
readonly ok: boolean;
|
|
26
|
+
readonly [k: string]: unknown;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Minimal tool descriptor. We mirror the MCP SDK shape but stay decoupled so
|
|
31
|
+
* tests can exercise tools without spinning up the full MCP server.
|
|
32
|
+
*/
|
|
33
|
+
export interface McpTool {
|
|
34
|
+
readonly name: string;
|
|
35
|
+
readonly description: string;
|
|
36
|
+
readonly inputSchema: object;
|
|
37
|
+
readonly handler: (
|
|
38
|
+
ctx: McpServerContext,
|
|
39
|
+
args: unknown,
|
|
40
|
+
) => Promise<McpToolResult>;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* EIP-191 challenge record. The HTTP transport caches outstanding challenges
|
|
45
|
+
* keyed by client wallet address until they expire or are consumed.
|
|
46
|
+
*/
|
|
47
|
+
export interface Eip191Challenge {
|
|
48
|
+
readonly wallet: `0x${string}`;
|
|
49
|
+
readonly nonce: Hex;
|
|
50
|
+
readonly issuedAtMs: number;
|
|
51
|
+
readonly expiresAtMs: number;
|
|
52
|
+
readonly message: string;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/** Resolved server bootstrap config. */
|
|
56
|
+
export interface McpServerBootstrapConfig {
|
|
57
|
+
readonly chainId: number;
|
|
58
|
+
readonly rpcUrl: string;
|
|
59
|
+
readonly privateKey: Hex | undefined;
|
|
60
|
+
readonly startBlock: bigint;
|
|
61
|
+
/**
|
|
62
|
+
* Optional 32-byte deterministic master seed. When supplied, the
|
|
63
|
+
* ShroudAgent's stealth meta-address derivation is identical across every
|
|
64
|
+
* process that loads this config — required for multi-surface deployments
|
|
65
|
+
* (MCP + REST + UI) to agree on the operator's recipient identity. When
|
|
66
|
+
* undefined, ShroudAgent generates a random seed per boot.
|
|
67
|
+
*/
|
|
68
|
+
readonly masterSeed: Uint8Array | undefined;
|
|
69
|
+
/**
|
|
70
|
+
* If non-empty, the HTTP transport rejects every authenticated request
|
|
71
|
+
* whose recovered wallet is not in this set. Stdio transport ignores it.
|
|
72
|
+
*/
|
|
73
|
+
readonly httpAllowedWallets: ReadonlySet<`0x${string}`>;
|
|
74
|
+
}
|
package/tsconfig.json
ADDED
package/dist/cjs/auth.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/auth.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAIH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,MAAM,CAAC;AAOhC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,MAAM,WAAW,SAAS;IACxB,KAAK,CAAC,MAAM,EAAE,KAAK,MAAM,EAAE,GAAG,eAAe,CAAC;IAC9C,gBAAgB,CAAC,IAAI,EAAE;QACrB,MAAM,EAAE,KAAK,MAAM,EAAE,CAAC;QACtB,KAAK,EAAE,GAAG,CAAC;QACX,SAAS,EAAE,GAAG,CAAC;KAChB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClB,0EAA0E;IAC1E,KAAK,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,4CAA4C;IAC5C,IAAI,IAAI,MAAM,CAAC;CAChB;AAID,iBAAS,YAAY,CAAC,MAAM,EAAE,KAAK,MAAM,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAWnF;AAED,wBAAgB,eAAe,CAC7B,KAAK,GAAE,MAAgC,GACtC,SAAS,CAgEX;AAED,eAAO,MAAM,aAAa;;CAAmB,CAAC"}
|
package/dist/cjs/auth.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../../src/bin/http.ts"],"names":[],"mappings":";AACA;;;GAGG"}
|
package/dist/cjs/bin/http.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../../src/bin/http.ts"],"names":[],"mappings":";;AACA;;;GAGG;;AAEH,wCAA2C;AAC3C,4CAAmD;AAEnD,MAAM,IAAI,GAAG,IAAA,+BAAmB,GAAE,CAAC;AAEnC,IAAA,uBAAa,EAAC,EAAE,IAAI,EAAE,CAAC;KACpB,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;IACf,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,mCAAmC,IAAI,IAAI,CAAC,CAAC;IAClE,MAAM,QAAQ,GAAG,GAAS,EAAE;QAC1B,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAClD,CAAC,CAAC;IACF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC/B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;AAClC,CAAC,CAAC;KACD,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;IACtB,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,6BAA8B,GAAyB,CAAC,IAAI,IAAI,SAAS,IAAI,CAC9E,CAAC;IACF,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;AACvB,CAAC,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"stdio.d.ts","sourceRoot":"","sources":["../../../src/bin/stdio.ts"],"names":[],"mappings":";AACA;;;;;GAKG"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"stdio.js","sourceRoot":"","sources":["../../../src/bin/stdio.ts"],"names":[],"mappings":";;AACA;;;;;GAKG;;AAEH,0CAA6C;AAE7C,IAAA,yBAAc,GAAE,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;IACtC,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,8BAA+B,GAAyB,CAAC,IAAI,IAAI,SAAS,IAAI,CAC/E,CAAC;IACF,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;AACvB,CAAC,CAAC,CAAC"}
|
package/dist/cjs/config.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAoBH,OAAO,KAAK,EACV,wBAAwB,EACxB,gBAAgB,EACjB,MAAM,YAAY,CAAC;AA2FpB;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,SAAO,GAAG,MAAM,CAQ9D;AAED;;GAEG;AACH,wBAAgB,0BAA0B,IAAI,wBAAwB,CAkBrE;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,wBAAwB,GAC/B,gBAAgB,CAmClB"}
|
package/dist/cjs/config.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,eAAO,MAAM,wBAAwB,EAAG,cAAuB,CAAC;AAChE,eAAO,MAAM,2BAA2B,EAAG,OAAgB,CAAC;AAE5D,8EAA8E;AAC9E,eAAO,MAAM,uBAAuB,QAAgB,CAAC;AAErD,4EAA4E;AAC5E,eAAO,MAAM,wBAAwB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAG3D,CAAC;AAEF,6CAA6C;AAC7C,eAAO,MAAM,eAAe,EAAG,sBAA+B,CAAC;AAC/D,eAAO,MAAM,oBAAoB,EAAG,2BAAoC,CAAC;AACzE,eAAO,MAAM,WAAW,EAAG,kBAA2B,CAAC;AACvD,eAAO,MAAM,SAAS,EAAG,gBAAyB,CAAC;AACnD,eAAO,MAAM,eAAe,EAAG,sBAA+B,CAAC;AAC/D,eAAO,MAAM,aAAa,EAAG,wBAAiC,CAAC;AAC/D,eAAO,MAAM,wBAAwB,EAAG,mCAA4C,CAAC;AACrF;;;;;;;;GAQG;AACH,eAAO,MAAM,eAAe,EAAG,sBAA+B,CAAC;AAC/D,eAAO,MAAM,oBAAoB,EAAG,2BAAoC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEU,QAAA,wBAAwB,GAAG,cAAuB,CAAC;AACnD,QAAA,2BAA2B,GAAG,OAAgB,CAAC;AAE5D,8EAA8E;AACjE,QAAA,uBAAuB,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;AAErD,4EAA4E;AAC/D,QAAA,wBAAwB,GAA2B;IAC9D,IAAI,EAAE,0BAA0B;IAChC,KAAK,EAAE,0BAA0B;CAClC,CAAC;AAEF,6CAA6C;AAChC,QAAA,eAAe,GAAG,sBAA+B,CAAC;AAClD,QAAA,oBAAoB,GAAG,2BAAoC,CAAC;AAC5D,QAAA,WAAW,GAAG,kBAA2B,CAAC;AAC1C,QAAA,SAAS,GAAG,gBAAyB,CAAC;AACtC,QAAA,eAAe,GAAG,sBAA+B,CAAC;AAClD,QAAA,aAAa,GAAG,wBAAiC,CAAC;AAClD,QAAA,wBAAwB,GAAG,mCAA4C,CAAC;AACrF;;;;;;;;GAQG;AACU,QAAA,eAAe,GAAG,sBAA+B,CAAC;AAClD,QAAA,oBAAoB,GAAG,2BAAoC,CAAC"}
|
package/dist/cjs/errors.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,qBAAa,cAAe,SAAQ,KAAK;IACvC,SAAkB,IAAI,EAAE,MAAM,CAAoB;IAClD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;gBACV,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;CAI1C;AAED,qBAAa,cAAe,SAAQ,cAAc;IAChD,SAAkB,IAAI,oBAAoB;gBAC9B,OAAO,EAAE,MAAM;CAG5B;AAED,qBAAa,oBAAqB,SAAQ,cAAc;IACtD,SAAkB,IAAI,0BAA0B;;CAIjD;AAED,qBAAa,oBAAqB,SAAQ,cAAc;IACtD,SAAkB,IAAI,0BAA0B;;CAIjD;AAED,qBAAa,mBAAoB,SAAQ,cAAc;IACrD,SAAkB,IAAI,yBAAyB;;CAIhD;AAED,qBAAa,iBAAkB,SAAQ,cAAc;IACnD,SAAkB,IAAI,uBAAuB;IAC7C,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;gBACZ,KAAK,EAAE,OAAO;CAI3B;AAED,qBAAa,8BAA+B,SAAQ,cAAc;IAChE,SAAkB,IAAI,oCAAoC;;CAI3D;AAED,qBAAa,8BAA+B,SAAQ,cAAc;IAChE,SAAkB,IAAI,oCAAoC;;CAI3D"}
|