chia-explorer 0.1.5 → 0.2.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/README.md +172 -10
- package/dist/chia/offer.d.ts +58 -0
- package/dist/chia/offer.js +356 -0
- package/dist/chia/offer.js.map +1 -0
- package/dist/chips/index.d.ts +68 -0
- package/dist/chips/index.js +214 -0
- package/dist/chips/index.js.map +1 -0
- package/dist/chips/parser.d.ts +30 -0
- package/dist/chips/parser.js +208 -0
- package/dist/chips/parser.js.map +1 -0
- package/dist/github/cache.d.ts +3 -0
- package/dist/github/cache.js +18 -0
- package/dist/github/cache.js.map +1 -0
- package/dist/github/client.d.ts +5 -0
- package/dist/github/client.js +68 -0
- package/dist/github/client.js.map +1 -0
- package/dist/schemas/chips.d.ts +8 -0
- package/dist/schemas/chips.js +39 -0
- package/dist/schemas/chips.js.map +1 -0
- package/dist/server.js +24 -2
- package/dist/server.js.map +1 -1
- package/dist/tools/chips/get-chip.d.ts +2 -0
- package/dist/tools/chips/get-chip.js +30 -0
- package/dist/tools/chips/get-chip.js.map +1 -0
- package/dist/tools/chips/list-chip-drafts.d.ts +2 -0
- package/dist/tools/chips/list-chip-drafts.js +19 -0
- package/dist/tools/chips/list-chip-drafts.js.map +1 -0
- package/dist/tools/chips/list-chips.d.ts +2 -0
- package/dist/tools/chips/list-chips.js +33 -0
- package/dist/tools/chips/list-chips.js.map +1 -0
- package/dist/tools/chips/search-chips.d.ts +2 -0
- package/dist/tools/chips/search-chips.js +31 -0
- package/dist/tools/chips/search-chips.js.map +1 -0
- package/dist/tools/coins/get-puzzle-and-solution.js +23 -3
- package/dist/tools/coins/get-puzzle-and-solution.js.map +1 -1
- package/dist/tools/mempool/estimate-fee.d.ts +2 -0
- package/dist/tools/mempool/estimate-fee.js +73 -0
- package/dist/tools/mempool/estimate-fee.js.map +1 -0
- package/dist/tools/mempool/get-mempool.d.ts +2 -0
- package/dist/tools/mempool/get-mempool.js +51 -0
- package/dist/tools/mempool/get-mempool.js.map +1 -0
- package/dist/tools/mempool/is-in-mempool.d.ts +2 -0
- package/dist/tools/mempool/is-in-mempool.js +37 -0
- package/dist/tools/mempool/is-in-mempool.js.map +1 -0
- package/dist/tools/offers/decode-offer.d.ts +2 -0
- package/dist/tools/offers/decode-offer.js +20 -0
- package/dist/tools/offers/decode-offer.js.map +1 -0
- package/dist/tools/offers/decode-spend-bundle.d.ts +2 -0
- package/dist/tools/offers/decode-spend-bundle.js +20 -0
- package/dist/tools/offers/decode-spend-bundle.js.map +1 -0
- package/dist/tools/offers/decompile-puzzle.d.ts +2 -0
- package/dist/tools/offers/decompile-puzzle.js +62 -0
- package/dist/tools/offers/decompile-puzzle.js.map +1 -0
- package/package.json +2 -1
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { type AuthorRef } from './parser.js';
|
|
2
|
+
export interface ChipSummary {
|
|
3
|
+
number: number | null;
|
|
4
|
+
title: string | null;
|
|
5
|
+
status: string | null;
|
|
6
|
+
category: string | null;
|
|
7
|
+
sub_category: string | null;
|
|
8
|
+
type: string | null;
|
|
9
|
+
authors: AuthorRef[];
|
|
10
|
+
editors: AuthorRef[];
|
|
11
|
+
description: string | null;
|
|
12
|
+
abstract: string | null;
|
|
13
|
+
created: string | null;
|
|
14
|
+
updated: string | null;
|
|
15
|
+
comments_uri: string | null;
|
|
16
|
+
requires: string | null;
|
|
17
|
+
replaces: string | null;
|
|
18
|
+
superseded_by: string | null;
|
|
19
|
+
source_url: string;
|
|
20
|
+
filename: string;
|
|
21
|
+
}
|
|
22
|
+
export interface MergedChip extends ChipSummary {
|
|
23
|
+
source: 'merged';
|
|
24
|
+
ref: 'main';
|
|
25
|
+
body?: string;
|
|
26
|
+
}
|
|
27
|
+
export interface DraftChip extends ChipSummary {
|
|
28
|
+
source: 'draft';
|
|
29
|
+
ref: string;
|
|
30
|
+
pr: PrContext;
|
|
31
|
+
modifies_existing: boolean;
|
|
32
|
+
body?: string;
|
|
33
|
+
}
|
|
34
|
+
export interface PrContext {
|
|
35
|
+
number: number;
|
|
36
|
+
url: string;
|
|
37
|
+
title: string;
|
|
38
|
+
state: string;
|
|
39
|
+
draft: boolean;
|
|
40
|
+
author: string | null;
|
|
41
|
+
requested_reviewers: string[];
|
|
42
|
+
created_at: string;
|
|
43
|
+
updated_at: string;
|
|
44
|
+
head_sha: string;
|
|
45
|
+
head_ref: string;
|
|
46
|
+
base_ref: string;
|
|
47
|
+
}
|
|
48
|
+
export declare function listMergedChips(): Promise<ChipSummary[]>;
|
|
49
|
+
export declare function getMergedChip(number: number, options?: {
|
|
50
|
+
includeBody?: boolean;
|
|
51
|
+
}): Promise<MergedChip | null>;
|
|
52
|
+
export declare function listChipDrafts(): Promise<DraftChip[]>;
|
|
53
|
+
export declare function getChipFromPr(prNumber: number, options?: {
|
|
54
|
+
includeBody?: boolean;
|
|
55
|
+
}): Promise<DraftChip | null>;
|
|
56
|
+
export declare function findChipByNumber(number: number, options?: {
|
|
57
|
+
includeBody?: boolean;
|
|
58
|
+
}): Promise<{
|
|
59
|
+
merged: MergedChip | null;
|
|
60
|
+
drafts: DraftChip[];
|
|
61
|
+
}>;
|
|
62
|
+
export interface SearchOptions {
|
|
63
|
+
status?: string;
|
|
64
|
+
source?: 'merged' | 'draft' | 'both';
|
|
65
|
+
limit?: number;
|
|
66
|
+
}
|
|
67
|
+
export declare function searchChips(query: string, options?: SearchOptions): Promise<Array<MergedChip | DraftChip>>;
|
|
68
|
+
export { resetCache } from '../github/cache.js';
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
import { FileNotFoundError, fetchRawFile, githubApi } from '../github/client.js';
|
|
2
|
+
import { getCached } from '../github/cache.js';
|
|
3
|
+
import { buildChipFileName, extractAbstract, extractChipPathInfo, parseChipFrontMatter, } from './parser.js';
|
|
4
|
+
const REPO = 'Chia-Network/chips';
|
|
5
|
+
const DEFAULT_REF = 'main';
|
|
6
|
+
const CHIPS_DIR = 'CHIPs';
|
|
7
|
+
const LISTING_TTL_MS = 5 * 60_000;
|
|
8
|
+
const CONTENT_TTL_MS = 10 * 60_000;
|
|
9
|
+
const PR_LIST_TTL_MS = 2 * 60_000;
|
|
10
|
+
function summarize(fm, body, ref, filename) {
|
|
11
|
+
return {
|
|
12
|
+
number: fm.number,
|
|
13
|
+
title: fm.title,
|
|
14
|
+
status: fm.status,
|
|
15
|
+
category: fm.category,
|
|
16
|
+
sub_category: fm.sub_category,
|
|
17
|
+
type: fm.type,
|
|
18
|
+
authors: fm.authors,
|
|
19
|
+
editors: fm.editors,
|
|
20
|
+
description: fm.description,
|
|
21
|
+
abstract: extractAbstract(body),
|
|
22
|
+
created: fm.created,
|
|
23
|
+
updated: fm.updated,
|
|
24
|
+
comments_uri: fm.comments_uri,
|
|
25
|
+
requires: fm.requires,
|
|
26
|
+
replaces: fm.replaces,
|
|
27
|
+
superseded_by: fm.superseded_by,
|
|
28
|
+
source_url: `https://github.com/${REPO}/blob/${ref}/${filename}`,
|
|
29
|
+
filename,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
async function listChipFilenames() {
|
|
33
|
+
return getCached(`chips:contents:${DEFAULT_REF}`, async () => {
|
|
34
|
+
const entries = await githubApi(`/repos/${REPO}/contents/${CHIPS_DIR}?ref=${DEFAULT_REF}`);
|
|
35
|
+
return entries
|
|
36
|
+
.filter((e) => e.type === 'file' && /^chip-\d{1,5}\.md$/i.test(e.name))
|
|
37
|
+
.map((e) => e.path)
|
|
38
|
+
.sort();
|
|
39
|
+
}, LISTING_TTL_MS);
|
|
40
|
+
}
|
|
41
|
+
async function fetchChipFile(ref, path) {
|
|
42
|
+
return getCached(`chips:raw:${ref}:${path}`, () => fetchRawFile(REPO, ref, path), CONTENT_TTL_MS);
|
|
43
|
+
}
|
|
44
|
+
export async function listMergedChips() {
|
|
45
|
+
const paths = await listChipFilenames();
|
|
46
|
+
const summaries = await Promise.all(paths.map(async (path) => {
|
|
47
|
+
const body = await fetchChipFile(DEFAULT_REF, path);
|
|
48
|
+
const fm = parseChipFrontMatter(body);
|
|
49
|
+
return summarize(fm, body, DEFAULT_REF, path);
|
|
50
|
+
}));
|
|
51
|
+
summaries.sort((a, b) => (a.number ?? 0) - (b.number ?? 0));
|
|
52
|
+
return summaries;
|
|
53
|
+
}
|
|
54
|
+
export async function getMergedChip(number, options = {}) {
|
|
55
|
+
const filename = `${CHIPS_DIR}/${buildChipFileName(number)}`;
|
|
56
|
+
try {
|
|
57
|
+
const body = await fetchChipFile(DEFAULT_REF, filename);
|
|
58
|
+
const fm = parseChipFrontMatter(body);
|
|
59
|
+
const summary = summarize(fm, body, DEFAULT_REF, filename);
|
|
60
|
+
const chip = {
|
|
61
|
+
...summary,
|
|
62
|
+
source: 'merged',
|
|
63
|
+
ref: 'main',
|
|
64
|
+
};
|
|
65
|
+
if (options.includeBody)
|
|
66
|
+
chip.body = body;
|
|
67
|
+
return chip;
|
|
68
|
+
}
|
|
69
|
+
catch (err) {
|
|
70
|
+
if (err instanceof FileNotFoundError)
|
|
71
|
+
return null;
|
|
72
|
+
throw err;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
async function listOpenChipPrs() {
|
|
76
|
+
return getCached(`chips:prs:open`, () => githubApi(`/repos/${REPO}/pulls?state=open&per_page=100&sort=updated&direction=desc`), PR_LIST_TTL_MS);
|
|
77
|
+
}
|
|
78
|
+
async function listPrChipFiles(prNumber) {
|
|
79
|
+
return getCached(`chips:pr-files:${prNumber}`, () => githubApi(`/repos/${REPO}/pulls/${prNumber}/files?per_page=100`), PR_LIST_TTL_MS);
|
|
80
|
+
}
|
|
81
|
+
function prContext(pr) {
|
|
82
|
+
return {
|
|
83
|
+
number: pr.number,
|
|
84
|
+
url: pr.html_url,
|
|
85
|
+
title: pr.title,
|
|
86
|
+
state: pr.state,
|
|
87
|
+
draft: pr.draft,
|
|
88
|
+
author: pr.user?.login ?? null,
|
|
89
|
+
requested_reviewers: pr.requested_reviewers.map((r) => r.login),
|
|
90
|
+
created_at: pr.created_at,
|
|
91
|
+
updated_at: pr.updated_at,
|
|
92
|
+
head_sha: pr.head.sha,
|
|
93
|
+
head_ref: pr.head.ref,
|
|
94
|
+
base_ref: pr.base.ref,
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
async function buildDraftFromPr(pr, file, options = {}) {
|
|
98
|
+
if (file.status === 'removed')
|
|
99
|
+
return null;
|
|
100
|
+
const info = extractChipPathInfo(file.filename);
|
|
101
|
+
if (!info)
|
|
102
|
+
return null;
|
|
103
|
+
let body;
|
|
104
|
+
try {
|
|
105
|
+
body = await fetchChipFile(pr.head.sha, file.filename);
|
|
106
|
+
}
|
|
107
|
+
catch (err) {
|
|
108
|
+
if (err instanceof FileNotFoundError)
|
|
109
|
+
return null;
|
|
110
|
+
throw err;
|
|
111
|
+
}
|
|
112
|
+
const fm = parseChipFrontMatter(body);
|
|
113
|
+
const summary = summarize(fm, body, pr.head.sha, file.filename);
|
|
114
|
+
if (summary.number == null)
|
|
115
|
+
summary.number = info.number;
|
|
116
|
+
const draft = {
|
|
117
|
+
...summary,
|
|
118
|
+
source: 'draft',
|
|
119
|
+
ref: pr.head.sha,
|
|
120
|
+
pr: prContext(pr),
|
|
121
|
+
modifies_existing: file.status === 'modified' || file.status === 'renamed',
|
|
122
|
+
};
|
|
123
|
+
if (options.includeBody)
|
|
124
|
+
draft.body = body;
|
|
125
|
+
return draft;
|
|
126
|
+
}
|
|
127
|
+
export async function listChipDrafts() {
|
|
128
|
+
const prs = await listOpenChipPrs();
|
|
129
|
+
const results = [];
|
|
130
|
+
for (const pr of prs) {
|
|
131
|
+
const files = await listPrChipFiles(pr.number).catch(() => []);
|
|
132
|
+
const chipFiles = files.filter((f) => extractChipPathInfo(f.filename));
|
|
133
|
+
for (const file of chipFiles) {
|
|
134
|
+
const draft = await buildDraftFromPr(pr, file).catch(() => null);
|
|
135
|
+
if (draft)
|
|
136
|
+
results.push(draft);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
return results;
|
|
140
|
+
}
|
|
141
|
+
export async function getChipFromPr(prNumber, options = {}) {
|
|
142
|
+
const prs = await listOpenChipPrs();
|
|
143
|
+
const pr = prs.find((p) => p.number === prNumber);
|
|
144
|
+
if (!pr)
|
|
145
|
+
return null;
|
|
146
|
+
const files = await listPrChipFiles(prNumber);
|
|
147
|
+
for (const file of files) {
|
|
148
|
+
if (!extractChipPathInfo(file.filename))
|
|
149
|
+
continue;
|
|
150
|
+
const draft = await buildDraftFromPr(pr, file, options);
|
|
151
|
+
if (draft)
|
|
152
|
+
return draft;
|
|
153
|
+
}
|
|
154
|
+
return null;
|
|
155
|
+
}
|
|
156
|
+
export async function findChipByNumber(number, options = {}) {
|
|
157
|
+
const merged = await getMergedChip(number, options);
|
|
158
|
+
const allDrafts = await listChipDrafts();
|
|
159
|
+
const drafts = [];
|
|
160
|
+
for (const d of allDrafts) {
|
|
161
|
+
if (d.number !== number)
|
|
162
|
+
continue;
|
|
163
|
+
if (options.includeBody) {
|
|
164
|
+
const full = await getChipFromPr(d.pr.number, { includeBody: true });
|
|
165
|
+
if (full)
|
|
166
|
+
drafts.push(full);
|
|
167
|
+
else
|
|
168
|
+
drafts.push(d);
|
|
169
|
+
}
|
|
170
|
+
else {
|
|
171
|
+
drafts.push(d);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
return { merged, drafts };
|
|
175
|
+
}
|
|
176
|
+
function matchesQuery(s, q) {
|
|
177
|
+
const needle = q.toLowerCase();
|
|
178
|
+
const haystacks = [];
|
|
179
|
+
if (s.title)
|
|
180
|
+
haystacks.push(s.title);
|
|
181
|
+
if (s.description)
|
|
182
|
+
haystacks.push(s.description);
|
|
183
|
+
if (s.abstract)
|
|
184
|
+
haystacks.push(s.abstract);
|
|
185
|
+
for (const a of s.authors)
|
|
186
|
+
haystacks.push(a.name);
|
|
187
|
+
if (s.number != null)
|
|
188
|
+
haystacks.push(String(s.number));
|
|
189
|
+
return haystacks.some((h) => h.toLowerCase().includes(needle));
|
|
190
|
+
}
|
|
191
|
+
export async function searchChips(query, options = {}) {
|
|
192
|
+
const source = options.source ?? 'both';
|
|
193
|
+
const limit = options.limit ?? 20;
|
|
194
|
+
const statusFilter = options.status?.toLowerCase();
|
|
195
|
+
const pool = [];
|
|
196
|
+
if (source === 'merged' || source === 'both') {
|
|
197
|
+
const merged = await listMergedChips();
|
|
198
|
+
for (const m of merged) {
|
|
199
|
+
pool.push({ ...m, source: 'merged', ref: 'main' });
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
if (source === 'draft' || source === 'both') {
|
|
203
|
+
const drafts = await listChipDrafts();
|
|
204
|
+
pool.push(...drafts);
|
|
205
|
+
}
|
|
206
|
+
const filtered = pool.filter((c) => {
|
|
207
|
+
if (statusFilter && (c.status?.toLowerCase() ?? '') !== statusFilter)
|
|
208
|
+
return false;
|
|
209
|
+
return matchesQuery(c, query);
|
|
210
|
+
});
|
|
211
|
+
return filtered.slice(0, limit);
|
|
212
|
+
}
|
|
213
|
+
export { resetCache } from '../github/cache.js';
|
|
214
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/chips/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export interface AuthorRef {
|
|
2
|
+
name: string;
|
|
3
|
+
url: string | null;
|
|
4
|
+
}
|
|
5
|
+
export interface ChipFrontMatter {
|
|
6
|
+
number: number | null;
|
|
7
|
+
title: string | null;
|
|
8
|
+
description: string | null;
|
|
9
|
+
authors: AuthorRef[];
|
|
10
|
+
editors: AuthorRef[];
|
|
11
|
+
comments_uri: string | null;
|
|
12
|
+
status: string | null;
|
|
13
|
+
category: string | null;
|
|
14
|
+
sub_category: string | null;
|
|
15
|
+
type: string | null;
|
|
16
|
+
created: string | null;
|
|
17
|
+
updated: string | null;
|
|
18
|
+
requires: string | null;
|
|
19
|
+
replaces: string | null;
|
|
20
|
+
superseded_by: string | null;
|
|
21
|
+
extra: Record<string, string>;
|
|
22
|
+
}
|
|
23
|
+
export declare function parseAuthors(raw: string): AuthorRef[];
|
|
24
|
+
export declare function parseChipFrontMatter(markdown: string): ChipFrontMatter;
|
|
25
|
+
export declare function extractAbstract(markdown: string): string | null;
|
|
26
|
+
export declare function buildChipFileName(number: number): string;
|
|
27
|
+
export declare function extractChipPathInfo(path: string): {
|
|
28
|
+
number: number;
|
|
29
|
+
filename: string;
|
|
30
|
+
} | null;
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
const KEY_MAP = {
|
|
2
|
+
'chip number': 'number',
|
|
3
|
+
'chip-number': 'number',
|
|
4
|
+
number: 'number',
|
|
5
|
+
title: 'title',
|
|
6
|
+
description: 'description',
|
|
7
|
+
author: 'authors',
|
|
8
|
+
authors: 'authors',
|
|
9
|
+
editor: 'editors',
|
|
10
|
+
editors: 'editors',
|
|
11
|
+
'comments-uri': 'comments_uri',
|
|
12
|
+
comments_uri: 'comments_uri',
|
|
13
|
+
status: 'status',
|
|
14
|
+
category: 'category',
|
|
15
|
+
'sub-category': 'sub_category',
|
|
16
|
+
sub_category: 'sub_category',
|
|
17
|
+
type: 'type',
|
|
18
|
+
created: 'created',
|
|
19
|
+
updated: 'updated',
|
|
20
|
+
requires: 'requires',
|
|
21
|
+
replaces: 'replaces',
|
|
22
|
+
'superseded-by': 'superseded_by',
|
|
23
|
+
superseded_by: 'superseded_by',
|
|
24
|
+
};
|
|
25
|
+
function stripTablePipes(line) {
|
|
26
|
+
let s = line.trim();
|
|
27
|
+
if (s.startsWith('|'))
|
|
28
|
+
s = s.slice(1);
|
|
29
|
+
if (s.endsWith('|'))
|
|
30
|
+
s = s.slice(0, -1);
|
|
31
|
+
return s;
|
|
32
|
+
}
|
|
33
|
+
function isSeparatorRow(cells) {
|
|
34
|
+
if (cells.length === 0)
|
|
35
|
+
return false;
|
|
36
|
+
return cells.every((c) => /^:?-+:?$/.test(c.trim()));
|
|
37
|
+
}
|
|
38
|
+
function isBlankOrNone(value) {
|
|
39
|
+
const v = value.trim().toLowerCase();
|
|
40
|
+
return v === '' || v === 'none' || v === '-' || v === 'n/a';
|
|
41
|
+
}
|
|
42
|
+
export function parseAuthors(raw) {
|
|
43
|
+
const trimmed = raw.trim();
|
|
44
|
+
if (isBlankOrNone(trimmed))
|
|
45
|
+
return [];
|
|
46
|
+
const out = [];
|
|
47
|
+
const linkPattern = /\[([^\]]+)\]\(([^)]+)\)/g;
|
|
48
|
+
const seen = [];
|
|
49
|
+
let match;
|
|
50
|
+
while ((match = linkPattern.exec(trimmed)) !== null) {
|
|
51
|
+
out.push({ name: match[1].trim(), url: match[2].trim() });
|
|
52
|
+
seen.push({ start: match.index, end: match.index + match[0].length });
|
|
53
|
+
}
|
|
54
|
+
if (out.length > 0)
|
|
55
|
+
return out;
|
|
56
|
+
for (const part of trimmed.split(',')) {
|
|
57
|
+
const name = part.trim();
|
|
58
|
+
if (name)
|
|
59
|
+
out.push({ name, url: null });
|
|
60
|
+
}
|
|
61
|
+
return out;
|
|
62
|
+
}
|
|
63
|
+
function parseChipNumber(raw) {
|
|
64
|
+
const m = raw.trim().match(/^\d+/);
|
|
65
|
+
if (!m)
|
|
66
|
+
return null;
|
|
67
|
+
const n = Number(m[0]);
|
|
68
|
+
return Number.isFinite(n) ? n : null;
|
|
69
|
+
}
|
|
70
|
+
function assignField(fm, field, value) {
|
|
71
|
+
switch (field) {
|
|
72
|
+
case 'number':
|
|
73
|
+
fm.number = parseChipNumber(value);
|
|
74
|
+
return;
|
|
75
|
+
case 'authors':
|
|
76
|
+
fm.authors = parseAuthors(value);
|
|
77
|
+
return;
|
|
78
|
+
case 'editors':
|
|
79
|
+
fm.editors = parseAuthors(value);
|
|
80
|
+
return;
|
|
81
|
+
case 'extra':
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
const normalized = isBlankOrNone(value) ? null : value;
|
|
85
|
+
switch (field) {
|
|
86
|
+
case 'title':
|
|
87
|
+
fm.title = normalized;
|
|
88
|
+
return;
|
|
89
|
+
case 'description':
|
|
90
|
+
fm.description = normalized;
|
|
91
|
+
return;
|
|
92
|
+
case 'comments_uri':
|
|
93
|
+
fm.comments_uri = normalized;
|
|
94
|
+
return;
|
|
95
|
+
case 'status':
|
|
96
|
+
fm.status = normalized;
|
|
97
|
+
return;
|
|
98
|
+
case 'category':
|
|
99
|
+
fm.category = normalized;
|
|
100
|
+
return;
|
|
101
|
+
case 'sub_category':
|
|
102
|
+
fm.sub_category = normalized;
|
|
103
|
+
return;
|
|
104
|
+
case 'type':
|
|
105
|
+
fm.type = normalized;
|
|
106
|
+
return;
|
|
107
|
+
case 'created':
|
|
108
|
+
fm.created = normalized;
|
|
109
|
+
return;
|
|
110
|
+
case 'updated':
|
|
111
|
+
fm.updated = normalized;
|
|
112
|
+
return;
|
|
113
|
+
case 'requires':
|
|
114
|
+
fm.requires = normalized;
|
|
115
|
+
return;
|
|
116
|
+
case 'replaces':
|
|
117
|
+
fm.replaces = normalized;
|
|
118
|
+
return;
|
|
119
|
+
case 'superseded_by':
|
|
120
|
+
fm.superseded_by = normalized;
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
function emptyFrontMatter() {
|
|
125
|
+
return {
|
|
126
|
+
number: null,
|
|
127
|
+
title: null,
|
|
128
|
+
description: null,
|
|
129
|
+
authors: [],
|
|
130
|
+
editors: [],
|
|
131
|
+
comments_uri: null,
|
|
132
|
+
status: null,
|
|
133
|
+
category: null,
|
|
134
|
+
sub_category: null,
|
|
135
|
+
type: null,
|
|
136
|
+
created: null,
|
|
137
|
+
updated: null,
|
|
138
|
+
requires: null,
|
|
139
|
+
replaces: null,
|
|
140
|
+
superseded_by: null,
|
|
141
|
+
extra: {},
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
export function parseChipFrontMatter(markdown) {
|
|
145
|
+
const fm = emptyFrontMatter();
|
|
146
|
+
const lines = markdown.split(/\r?\n/);
|
|
147
|
+
for (const raw of lines) {
|
|
148
|
+
if (/^##\s/.test(raw))
|
|
149
|
+
break;
|
|
150
|
+
if (/^#\s/.test(raw))
|
|
151
|
+
continue;
|
|
152
|
+
const trimmed = raw.trim();
|
|
153
|
+
if (!trimmed)
|
|
154
|
+
continue;
|
|
155
|
+
if (!trimmed.includes('|'))
|
|
156
|
+
continue;
|
|
157
|
+
const cells = stripTablePipes(trimmed)
|
|
158
|
+
.split('|')
|
|
159
|
+
.map((c) => c.trim());
|
|
160
|
+
if (cells.length < 2)
|
|
161
|
+
continue;
|
|
162
|
+
if (isSeparatorRow(cells))
|
|
163
|
+
continue;
|
|
164
|
+
const key = cells[0].toLowerCase();
|
|
165
|
+
const value = cells.slice(1).join('|').trim();
|
|
166
|
+
const mapped = KEY_MAP[key];
|
|
167
|
+
if (!mapped) {
|
|
168
|
+
if (key)
|
|
169
|
+
fm.extra[key] = value;
|
|
170
|
+
continue;
|
|
171
|
+
}
|
|
172
|
+
assignField(fm, mapped, value);
|
|
173
|
+
}
|
|
174
|
+
return fm;
|
|
175
|
+
}
|
|
176
|
+
export function extractAbstract(markdown) {
|
|
177
|
+
const lines = markdown.split(/\r?\n/);
|
|
178
|
+
let i = 0;
|
|
179
|
+
while (i < lines.length) {
|
|
180
|
+
if (/^##\s+abstract\s*$/i.test(lines[i].trim()))
|
|
181
|
+
break;
|
|
182
|
+
i++;
|
|
183
|
+
}
|
|
184
|
+
if (i >= lines.length)
|
|
185
|
+
return null;
|
|
186
|
+
i++;
|
|
187
|
+
const buf = [];
|
|
188
|
+
while (i < lines.length) {
|
|
189
|
+
const line = lines[i];
|
|
190
|
+
if (/^#{1,6}\s/.test(line.trim()))
|
|
191
|
+
break;
|
|
192
|
+
buf.push(line);
|
|
193
|
+
i++;
|
|
194
|
+
}
|
|
195
|
+
const text = buf.join('\n').trim();
|
|
196
|
+
return text || null;
|
|
197
|
+
}
|
|
198
|
+
export function buildChipFileName(number) {
|
|
199
|
+
return `chip-${String(number).padStart(4, '0')}.md`;
|
|
200
|
+
}
|
|
201
|
+
const CHIP_FILE_PATTERN = /CHIPs\/chip-(\d{1,5})\.md$/i;
|
|
202
|
+
export function extractChipPathInfo(path) {
|
|
203
|
+
const m = CHIP_FILE_PATTERN.exec(path);
|
|
204
|
+
if (!m)
|
|
205
|
+
return null;
|
|
206
|
+
return { number: Number(m[1]), filename: path };
|
|
207
|
+
}
|
|
208
|
+
//# sourceMappingURL=parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/chips/parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
const DEFAULT_TTL_MS = 5 * 60_000;
|
|
2
|
+
const cache = new Map();
|
|
3
|
+
export async function getCached(key, loader, ttlMs = DEFAULT_TTL_MS) {
|
|
4
|
+
const now = Date.now();
|
|
5
|
+
const entry = cache.get(key);
|
|
6
|
+
if (entry && entry.expiresAt > now)
|
|
7
|
+
return entry.value;
|
|
8
|
+
const value = await loader();
|
|
9
|
+
cache.set(key, { value, expiresAt: now + ttlMs });
|
|
10
|
+
return value;
|
|
11
|
+
}
|
|
12
|
+
export function invalidate(key) {
|
|
13
|
+
cache.delete(key);
|
|
14
|
+
}
|
|
15
|
+
export function resetCache() {
|
|
16
|
+
cache.clear();
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/github/cache.ts"],"names":[],"mappings":"AAAA,MAAM,cAAc,GAAG,CAAC,GAAG,MAAM,CAAC;AAOlC,MAAM,KAAK,GAAG,IAAI,GAAG,EAA0B,CAAC;AAEhD,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,GAAW,EACX,MAAwB,EACxB,QAAgB,cAAc;IAE9B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAyB,CAAC;IACrD,IAAI,KAAK,IAAI,KAAK,CAAC,SAAS,GAAG,GAAG;QAAE,OAAO,KAAK,CAAC,KAAK,CAAC;IACvD,MAAM,KAAK,GAAG,MAAM,MAAM,EAAE,CAAC;IAC7B,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,GAAG,KAAK,EAAE,CAAC,CAAC;IAClD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,GAAW;IACpC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,KAAK,CAAC,KAAK,EAAE,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
const GITHUB_API_BASE = 'https://api.github.com';
|
|
2
|
+
const RAW_BASE = 'https://raw.githubusercontent.com';
|
|
3
|
+
const REQUEST_TIMEOUT_MS = 10_000;
|
|
4
|
+
const USER_AGENT = 'chia-explorer-mcp';
|
|
5
|
+
function authHeaders() {
|
|
6
|
+
const headers = {
|
|
7
|
+
accept: 'application/vnd.github+json',
|
|
8
|
+
'x-github-api-version': '2022-11-28',
|
|
9
|
+
'user-agent': USER_AGENT,
|
|
10
|
+
};
|
|
11
|
+
const token = process.env.GITHUB_TOKEN;
|
|
12
|
+
if (token)
|
|
13
|
+
headers['authorization'] = `Bearer ${token}`;
|
|
14
|
+
return headers;
|
|
15
|
+
}
|
|
16
|
+
function rateLimitMessage(res, body) {
|
|
17
|
+
if (res.status !== 403 && res.status !== 429)
|
|
18
|
+
return null;
|
|
19
|
+
const remaining = res.headers.get('x-ratelimit-remaining');
|
|
20
|
+
const reset = res.headers.get('x-ratelimit-reset');
|
|
21
|
+
if (remaining === '0' || /rate limit/i.test(body)) {
|
|
22
|
+
const resetAt = reset ? new Date(Number(reset) * 1000).toISOString() : 'unknown';
|
|
23
|
+
const tokenHint = process.env.GITHUB_TOKEN
|
|
24
|
+
? ''
|
|
25
|
+
: ' Set GITHUB_TOKEN to raise the limit from 60/hr to 5000/hr.';
|
|
26
|
+
return `github rate limit exhausted (resets at ${resetAt}).${tokenHint}`;
|
|
27
|
+
}
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
export async function githubApi(path) {
|
|
31
|
+
const url = path.startsWith('http') ? path : `${GITHUB_API_BASE}${path}`;
|
|
32
|
+
const res = await fetch(url, {
|
|
33
|
+
headers: authHeaders(),
|
|
34
|
+
signal: AbortSignal.timeout(REQUEST_TIMEOUT_MS),
|
|
35
|
+
});
|
|
36
|
+
if (!res.ok) {
|
|
37
|
+
const body = await res.text().catch(() => '');
|
|
38
|
+
const rateLimit = rateLimitMessage(res, body);
|
|
39
|
+
if (rateLimit)
|
|
40
|
+
throw new Error(rateLimit);
|
|
41
|
+
const detail = body ? `: ${body.slice(0, 200)}` : '';
|
|
42
|
+
throw new Error(`github ${res.status} ${res.statusText}${detail}`);
|
|
43
|
+
}
|
|
44
|
+
return (await res.json());
|
|
45
|
+
}
|
|
46
|
+
export async function fetchRawFile(repo, ref, path) {
|
|
47
|
+
const url = `${RAW_BASE}/${repo}/${ref}/${path}`;
|
|
48
|
+
const res = await fetch(url, {
|
|
49
|
+
headers: { 'user-agent': USER_AGENT },
|
|
50
|
+
signal: AbortSignal.timeout(REQUEST_TIMEOUT_MS),
|
|
51
|
+
});
|
|
52
|
+
if (res.status === 404) {
|
|
53
|
+
throw new FileNotFoundError(`raw file not found: ${repo}@${ref}/${path}`);
|
|
54
|
+
}
|
|
55
|
+
if (!res.ok) {
|
|
56
|
+
const body = await res.text().catch(() => '');
|
|
57
|
+
const detail = body ? `: ${body.slice(0, 200)}` : '';
|
|
58
|
+
throw new Error(`raw.githubusercontent ${res.status} ${res.statusText}${detail}`);
|
|
59
|
+
}
|
|
60
|
+
return await res.text();
|
|
61
|
+
}
|
|
62
|
+
export class FileNotFoundError extends Error {
|
|
63
|
+
constructor(message) {
|
|
64
|
+
super(message);
|
|
65
|
+
this.name = 'FileNotFoundError';
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/github/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const chipNumberSchema: z.ZodPipeline<z.ZodEffects<z.ZodUnion<[z.ZodNumber, z.ZodString]>, number, string | number>, z.ZodNumber>;
|
|
3
|
+
export declare const chipStatusFilterSchema: z.ZodOptional<z.ZodString>;
|
|
4
|
+
export declare const chipCategoryFilterSchema: z.ZodOptional<z.ZodString>;
|
|
5
|
+
export declare const includeBodySchema: z.ZodDefault<z.ZodBoolean>;
|
|
6
|
+
export declare const searchQuerySchema: z.ZodString;
|
|
7
|
+
export declare const searchSourceSchema: z.ZodDefault<z.ZodEnum<["merged", "draft", "both"]>>;
|
|
8
|
+
export declare const searchLimitSchema: z.ZodDefault<z.ZodNumber>;
|