@bloomfilter/mcp-server 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 (43) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +114 -0
  3. package/dist/client.d.ts +40 -0
  4. package/dist/client.d.ts.map +1 -0
  5. package/dist/client.js +297 -0
  6. package/dist/client.js.map +1 -0
  7. package/dist/index.d.ts +17 -0
  8. package/dist/index.d.ts.map +1 -0
  9. package/dist/index.js +166 -0
  10. package/dist/index.js.map +1 -0
  11. package/dist/tools/account.d.ts +10 -0
  12. package/dist/tools/account.d.ts.map +1 -0
  13. package/dist/tools/account.js +31 -0
  14. package/dist/tools/account.js.map +1 -0
  15. package/dist/tools/dns.d.ts +37 -0
  16. package/dist/tools/dns.d.ts.map +1 -0
  17. package/dist/tools/dns.js +131 -0
  18. package/dist/tools/dns.js.map +1 -0
  19. package/dist/tools/domain-info.d.ts +12 -0
  20. package/dist/tools/domain-info.d.ts.map +1 -0
  21. package/dist/tools/domain-info.js +32 -0
  22. package/dist/tools/domain-info.js.map +1 -0
  23. package/dist/tools/pricing.d.ts +12 -0
  24. package/dist/tools/pricing.d.ts.map +1 -0
  25. package/dist/tools/pricing.js +46 -0
  26. package/dist/tools/pricing.js.map +1 -0
  27. package/dist/tools/register.d.ts +16 -0
  28. package/dist/tools/register.d.ts.map +1 -0
  29. package/dist/tools/register.js +59 -0
  30. package/dist/tools/register.js.map +1 -0
  31. package/dist/tools/renew.d.ts +16 -0
  32. package/dist/tools/renew.d.ts.map +1 -0
  33. package/dist/tools/renew.js +45 -0
  34. package/dist/tools/renew.js.map +1 -0
  35. package/dist/tools/search.d.ts +13 -0
  36. package/dist/tools/search.d.ts.map +1 -0
  37. package/dist/tools/search.js +37 -0
  38. package/dist/tools/search.js.map +1 -0
  39. package/dist/types.d.ts +145 -0
  40. package/dist/types.d.ts.map +1 -0
  41. package/dist/types.js +28 -0
  42. package/dist/types.js.map +1 -0
  43. package/package.json +36 -0
@@ -0,0 +1,16 @@
1
+ /**
2
+ * renew_domain tool — Renew an existing domain registration.
3
+ *
4
+ * Calls POST /domains/renew with x402 payment.
5
+ * Handles both synchronous (201) and asynchronous (202) responses.
6
+ * On 202, polls the job status until completion or failure.
7
+ *
8
+ * Requires authentication (JWT) and payment (x402 USDC).
9
+ */
10
+ import type { BloomfilterClient } from "../client.js";
11
+ import type { McpToolResult } from "../types.js";
12
+ export declare function renewDomain(client: BloomfilterClient, params: {
13
+ domain: string;
14
+ years?: number;
15
+ }): Promise<McpToolResult>;
16
+ //# sourceMappingURL=renew.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renew.d.ts","sourceRoot":"","sources":["../../src/tools/renew.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEtD,OAAO,KAAK,EAAE,aAAa,EAAmB,MAAM,aAAa,CAAC;AAElE,wBAAsB,WAAW,CAC/B,MAAM,EAAE,iBAAiB,EACzB,MAAM,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GACzC,OAAO,CAAC,aAAa,CAAC,CA2CxB"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * renew_domain tool — Renew an existing domain registration.
3
+ *
4
+ * Calls POST /domains/renew with x402 payment.
5
+ * Handles both synchronous (201) and asynchronous (202) responses.
6
+ * On 202, polls the job status until completion or failure.
7
+ *
8
+ * Requires authentication (JWT) and payment (x402 USDC).
9
+ */
10
+ import { formatToolError } from "../client.js";
11
+ export async function renewDomain(client, params) {
12
+ const keyError = client.requiresPrivateKey();
13
+ if (keyError)
14
+ return keyError;
15
+ try {
16
+ await client.ensureAuth();
17
+ const response = await client.http.post("/domains/renew", { domain: params.domain, years: params.years ?? 1 }, { headers: client.getAuthHeaders() });
18
+ let result = response.data;
19
+ // Async provisioning — poll until complete
20
+ if (response.status === 202 && result.jobId) {
21
+ console.error(`[bloomfilter-mcp] Renewal queued (job ${result.jobId}), polling...`);
22
+ const jobResult = await client.pollJobStatus(result.jobId);
23
+ if (jobResult.result) {
24
+ result = jobResult.result;
25
+ }
26
+ }
27
+ // Format the result
28
+ const lines = [`Domain renewed: ${result.domain}`];
29
+ if (result.newExpiresAt) {
30
+ lines.push(`New Expiry: ${result.newExpiresAt}`);
31
+ }
32
+ if (result.payment) {
33
+ lines.push(`Cost: $${result.payment.amountUsd}`);
34
+ if (result.payment.txHash) {
35
+ lines.push(`Transaction: ${result.payment.txHash}`);
36
+ }
37
+ lines.push(`Network: ${result.payment.network}`);
38
+ }
39
+ return { content: [{ type: "text", text: lines.join("\n") }] };
40
+ }
41
+ catch (error) {
42
+ return formatToolError(error);
43
+ }
44
+ }
45
+ //# sourceMappingURL=renew.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renew.js","sourceRoot":"","sources":["../../src/tools/renew.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAG/C,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,MAAyB,EACzB,MAA0C;IAE1C,MAAM,QAAQ,GAAG,MAAM,CAAC,kBAAkB,EAAE,CAAC;IAC7C,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAE9B,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,UAAU,EAAE,CAAC;QAE1B,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,CACrC,gBAAgB,EAChB,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,CAAC,EAAE,EACnD,EAAE,OAAO,EAAE,MAAM,CAAC,cAAc,EAAE,EAAE,CACrC,CAAC;QAEF,IAAI,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC;QAE3B,2CAA2C;QAC3C,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YAC5C,OAAO,CAAC,KAAK,CAAC,yCAAyC,MAAM,CAAC,KAAK,eAAe,CAAC,CAAC;YAEpF,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC3D,IAAI,SAAS,CAAC,MAAM,EAAE,CAAC;gBACrB,MAAM,GAAG,SAAS,CAAC,MAAyB,CAAC;YAC/C,CAAC;QACH,CAAC;QAED,oBAAoB;QACpB,MAAM,KAAK,GAAG,CAAC,mBAAmB,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QAEnD,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;YACxB,KAAK,CAAC,IAAI,CAAC,eAAe,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;QACnD,CAAC;QACD,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,KAAK,CAAC,IAAI,CAAC,UAAU,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;YACjD,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;gBAC1B,KAAK,CAAC,IAAI,CAAC,gBAAgB,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;YACtD,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,YAAY,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;QACnD,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;IACjE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;AACH,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * search_domains tool — Search for available domain names.
3
+ *
4
+ * Calls GET /domains/search?query={query}&tlds={tlds}
5
+ * No authentication or payment required.
6
+ */
7
+ import type { BloomfilterClient } from "../client.js";
8
+ import type { McpToolResult } from "../types.js";
9
+ export declare function searchDomains(client: BloomfilterClient, params: {
10
+ query: string;
11
+ tlds?: string;
12
+ }): Promise<McpToolResult>;
13
+ //# sourceMappingURL=search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/tools/search.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEtD,OAAO,KAAK,EAAE,aAAa,EAAkB,MAAM,aAAa,CAAC;AAEjE,wBAAsB,aAAa,CACjC,MAAM,EAAE,iBAAiB,EACzB,MAAM,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GACvC,OAAO,CAAC,aAAa,CAAC,CA+BxB"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * search_domains tool — Search for available domain names.
3
+ *
4
+ * Calls GET /domains/search?query={query}&tlds={tlds}
5
+ * No authentication or payment required.
6
+ */
7
+ import { formatToolError } from "../client.js";
8
+ export async function searchDomains(client, params) {
9
+ try {
10
+ const { data } = await client.http.get("/domains/search", {
11
+ params: { query: params.query, ...(params.tlds && { tlds: params.tlds }) },
12
+ });
13
+ if (!data.results || data.results.length === 0) {
14
+ return {
15
+ content: [{ type: "text", text: `No results found for "${params.query}".` }],
16
+ };
17
+ }
18
+ const lines = data.results.map((r) => {
19
+ if (!r.available) {
20
+ return ` \u274c ${r.domain} \u2014 unavailable`;
21
+ }
22
+ const price = r.priceUsd
23
+ ? `$${r.priceUsd}`
24
+ : r.priceCents
25
+ ? `$${(r.priceCents / 100).toFixed(2)}`
26
+ : "price unavailable";
27
+ const premium = r.premium ? " (premium)" : "";
28
+ return ` \u2705 ${r.domain} \u2014 ${price}/yr${premium}`;
29
+ });
30
+ const text = `Domain search results for "${params.query}":\n\n${lines.join("\n")}`;
31
+ return { content: [{ type: "text", text }] };
32
+ }
33
+ catch (error) {
34
+ return formatToolError(error);
35
+ }
36
+ }
37
+ //# sourceMappingURL=search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/tools/search.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAG/C,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,MAAyB,EACzB,MAAwC;IAExC,IAAI,CAAC;QACH,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,GAAG,CAAiB,iBAAiB,EAAE;YACxE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,EAAE;SAC3E,CAAC,CAAC;QAEH,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/C,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,yBAAyB,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC;aAC7E,CAAC;QACJ,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YACnC,IAAI,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;gBACjB,OAAO,YAAY,CAAC,CAAC,MAAM,qBAAqB,CAAC;YACnD,CAAC;YACD,MAAM,KAAK,GAAG,CAAC,CAAC,QAAQ;gBACtB,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE;gBAClB,CAAC,CAAC,CAAC,CAAC,UAAU;oBACZ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;oBACvC,CAAC,CAAC,mBAAmB,CAAC;YAC1B,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9C,OAAO,YAAY,CAAC,CAAC,MAAM,WAAW,KAAK,MAAM,OAAO,EAAE,CAAC;QAC7D,CAAC,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,8BAA8B,MAAM,CAAC,KAAK,SAAS,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAEnF,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;IAC/C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;AACH,CAAC"}
@@ -0,0 +1,145 @@
1
+ /**
2
+ * Inlined types and constants for the Bloomfilter MCP server.
3
+ *
4
+ * These are intentionally NOT imported from @bloomfilter/shared because:
5
+ * 1. @bloomfilter/shared uses Zod v4; MCP SDK requires Zod v3
6
+ * 2. Keeping the MCP server fully self-contained makes it easier to
7
+ * publish independently and mirror to the open-source repo
8
+ */
9
+ export interface BloomfilterConfig {
10
+ /** Base URL of the Bloomfilter API */
11
+ apiUrl: string;
12
+ /** EVM private key (hex, 0x-prefixed) for signing payments + SIWE auth */
13
+ privateKey?: `0x${string}`;
14
+ /** x402 network identifier (CAIP-2 format, e.g. "eip155:8453") */
15
+ network: string;
16
+ }
17
+ /** Polling interval for async job status checks (ms) */
18
+ export declare const JOB_POLL_INTERVAL_MS = 2000;
19
+ /** Maximum time to poll for a job before timing out (ms) — 5 minutes */
20
+ export declare const JOB_TIMEOUT_MS = 300000;
21
+ /** HTTP request timeout (ms) */
22
+ export declare const HTTP_TIMEOUT_MS = 30000;
23
+ export declare const DNS_RECORD_TYPES: readonly ["A", "AAAA", "CNAME", "MX", "TXT", "NS", "SRV", "CAA", "FORWARD"];
24
+ export type DnsRecordType = (typeof DNS_RECORD_TYPES)[number];
25
+ export interface SearchResultDomain {
26
+ domain: string;
27
+ available: boolean;
28
+ premium: boolean;
29
+ priceCents?: number;
30
+ priceUsd?: string;
31
+ }
32
+ export interface SearchResponse {
33
+ query: string;
34
+ results: SearchResultDomain[];
35
+ }
36
+ export interface TldPricing {
37
+ tld: string;
38
+ registration_price_usd: string;
39
+ renewal_price_usd: string;
40
+ transfer_price_usd: string;
41
+ }
42
+ export interface PricingResponse {
43
+ tld?: string;
44
+ pricing: TldPricing | TldPricing[];
45
+ }
46
+ export interface DomainInfoResponse {
47
+ domain: string;
48
+ status: string;
49
+ registeredAt: string;
50
+ expiresAt: string;
51
+ autoRenew: boolean;
52
+ locked: boolean;
53
+ nameservers: string[];
54
+ walletAddress: string;
55
+ }
56
+ export interface RegistrationResponse {
57
+ domain: string;
58
+ status: string;
59
+ registeredAt?: string;
60
+ expiresAt?: string;
61
+ jobId?: string;
62
+ payment?: {
63
+ amountUsd: string;
64
+ txHash?: string;
65
+ network: string;
66
+ settled: boolean;
67
+ };
68
+ dnsRecords?: Array<{
69
+ type: string;
70
+ host: string;
71
+ value: string;
72
+ }>;
73
+ warnings?: string[];
74
+ }
75
+ export interface RenewalResponse {
76
+ domain: string;
77
+ renewedAt?: string;
78
+ newExpiresAt?: string;
79
+ jobId?: string;
80
+ payment?: {
81
+ amountUsd: string;
82
+ txHash?: string;
83
+ network: string;
84
+ settled: boolean;
85
+ };
86
+ }
87
+ export interface DnsRecordResponse {
88
+ recordId: string;
89
+ type: string;
90
+ host: string;
91
+ value: string;
92
+ ttl: number;
93
+ distance?: number;
94
+ }
95
+ export interface AccountResponse {
96
+ wallet_address: string;
97
+ created_at: string;
98
+ total_spent_cents: number;
99
+ domains_registered: number;
100
+ last_active_at: string;
101
+ }
102
+ export interface JobStatusResponse {
103
+ jobId: string;
104
+ status: "pending" | "processing" | "completed" | "failed";
105
+ domain: string;
106
+ result?: RegistrationResponse | RenewalResponse;
107
+ error?: string;
108
+ createdAt: string;
109
+ updatedAt: string;
110
+ }
111
+ export interface NonceResponse {
112
+ nonce: string;
113
+ domain: string;
114
+ uri: string;
115
+ chainId: number;
116
+ version: string;
117
+ expiresIn: number;
118
+ }
119
+ export interface AuthTokenResponse {
120
+ accessToken: string;
121
+ refreshToken: string;
122
+ expiresIn: number;
123
+ walletAddress: string;
124
+ }
125
+ export interface RefreshTokenResponse {
126
+ accessToken: string;
127
+ refreshToken: string;
128
+ expiresIn: number;
129
+ }
130
+ export interface ErrorResponse {
131
+ error: string;
132
+ message: string;
133
+ code: string;
134
+ domain?: string;
135
+ requestId?: string;
136
+ }
137
+ export interface McpToolResult {
138
+ [key: string]: unknown;
139
+ content: Array<{
140
+ type: "text";
141
+ text: string;
142
+ }>;
143
+ isError?: boolean;
144
+ }
145
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Inlined types and constants for the Bloomfilter MCP server.
3
+ *
4
+ * These are intentionally NOT imported from @bloomfilter/shared because:
5
+ * 1. @bloomfilter/shared uses Zod v4; MCP SDK requires Zod v3
6
+ * 2. Keeping the MCP server fully self-contained makes it easier to
7
+ * publish independently and mirror to the open-source repo
8
+ */
9
+ // ── Constants ───────────────────────────────────────────────────────────────
10
+ /** Polling interval for async job status checks (ms) */
11
+ export const JOB_POLL_INTERVAL_MS = 2_000;
12
+ /** Maximum time to poll for a job before timing out (ms) — 5 minutes */
13
+ export const JOB_TIMEOUT_MS = 300_000;
14
+ /** HTTP request timeout (ms) */
15
+ export const HTTP_TIMEOUT_MS = 30_000;
16
+ // ── DNS Record Types ────────────────────────────────────────────────────────
17
+ export const DNS_RECORD_TYPES = [
18
+ "A",
19
+ "AAAA",
20
+ "CNAME",
21
+ "MX",
22
+ "TXT",
23
+ "NS",
24
+ "SRV",
25
+ "CAA",
26
+ "FORWARD",
27
+ ];
28
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAaH,+EAA+E;AAE/E,wDAAwD;AACxD,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,CAAC;AAE1C,wEAAwE;AACxE,MAAM,CAAC,MAAM,cAAc,GAAG,OAAO,CAAC;AAEtC,gCAAgC;AAChC,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC;AAEtC,+EAA+E;AAE/E,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,GAAG;IACH,MAAM;IACN,OAAO;IACP,IAAI;IACJ,KAAK;IACL,IAAI;IACJ,KAAK;IACL,KAAK;IACL,SAAS;CACD,CAAC"}
package/package.json ADDED
@@ -0,0 +1,36 @@
1
+ {
2
+ "name": "@bloomfilter/mcp-server",
3
+ "version": "0.1.0",
4
+ "description": "MCP server for Bloomfilter domain registration API — register ICANN domains with AI agents",
5
+ "type": "module",
6
+ "private": false,
7
+ "license": "MIT",
8
+ "bin": {
9
+ "bloomfilter-mcp": "./dist/index.js"
10
+ },
11
+ "files": [
12
+ "dist"
13
+ ],
14
+ "dependencies": {
15
+ "@modelcontextprotocol/sdk": "^1.27.0",
16
+ "@x402/axios": "^2.3.0",
17
+ "@x402/evm": "^2.3.0",
18
+ "axios": "^1.7.0",
19
+ "viem": "^2.23.0",
20
+ "zod": "^3.24.0"
21
+ },
22
+ "devDependencies": {
23
+ "@types/node": "^22.10.6",
24
+ "typescript": "^5.7.0"
25
+ },
26
+ "engines": {
27
+ "node": ">=20"
28
+ },
29
+ "scripts": {
30
+ "build": "tsc",
31
+ "dev": "tsc --watch",
32
+ "lint": "eslint src/",
33
+ "typecheck": "tsc --noEmit",
34
+ "clean": "rm -rf dist"
35
+ }
36
+ }