@ghcrawl/api-contract 0.1.0 → 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 +18 -0
- package/dist/client.d.ts +41 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +90 -0
- package/dist/client.js.map +1 -0
- package/dist/contracts.d.ts +1784 -0
- package/dist/contracts.d.ts.map +1 -0
- package/dist/contracts.js +174 -0
- package/dist/contracts.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/{src/index.ts → dist/index.js} +1 -0
- package/dist/index.js.map +1 -0
- package/package.json +6 -4
- package/src/client.ts +0 -135
- package/src/contracts.test.ts +0 -85
- package/src/contracts.ts +0 -229
package/README.md
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# @ghcrawl/api-contract
|
|
2
|
+
|
|
3
|
+
Internal shared API contract package for `ghcrawl`.
|
|
4
|
+
|
|
5
|
+
This package contains transport schemas, DTOs, and the typed client used by the `ghcrawl` CLI and related tooling.
|
|
6
|
+
|
|
7
|
+
Most users should not install this package directly.
|
|
8
|
+
|
|
9
|
+
Use the main CLI package instead:
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
npm install -g ghcrawl
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Project docs:
|
|
16
|
+
|
|
17
|
+
- [GitHub repository](https://github.com/pwrdrvr/ghcrawl)
|
|
18
|
+
- [Project README](https://github.com/pwrdrvr/ghcrawl#readme)
|
package/dist/client.d.ts
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { type ActionRequest, type ActionResponse, type ClusterDetailResponse, type ClusterSummariesResponse, type ClustersResponse, type HealthResponse, type RefreshRequest, type RefreshResponse, type RepositoriesResponse, type SearchMode, type SearchResponse, type ThreadsResponse } from './contracts.js';
|
|
2
|
+
export type GitcrawlClient = {
|
|
3
|
+
health: () => Promise<HealthResponse>;
|
|
4
|
+
listRepositories: () => Promise<RepositoriesResponse>;
|
|
5
|
+
listThreads: (params: {
|
|
6
|
+
owner: string;
|
|
7
|
+
repo: string;
|
|
8
|
+
kind?: 'issue' | 'pull_request';
|
|
9
|
+
}) => Promise<ThreadsResponse>;
|
|
10
|
+
search: (params: {
|
|
11
|
+
owner: string;
|
|
12
|
+
repo: string;
|
|
13
|
+
query: string;
|
|
14
|
+
mode?: SearchMode;
|
|
15
|
+
}) => Promise<SearchResponse>;
|
|
16
|
+
listClusters: (params: {
|
|
17
|
+
owner: string;
|
|
18
|
+
repo: string;
|
|
19
|
+
}) => Promise<ClustersResponse>;
|
|
20
|
+
listClusterSummaries: (params: {
|
|
21
|
+
owner: string;
|
|
22
|
+
repo: string;
|
|
23
|
+
minSize?: number;
|
|
24
|
+
limit?: number;
|
|
25
|
+
sort?: 'recent' | 'size';
|
|
26
|
+
search?: string;
|
|
27
|
+
}) => Promise<ClusterSummariesResponse>;
|
|
28
|
+
getClusterDetail: (params: {
|
|
29
|
+
owner: string;
|
|
30
|
+
repo: string;
|
|
31
|
+
clusterId: number;
|
|
32
|
+
memberLimit?: number;
|
|
33
|
+
bodyChars?: number;
|
|
34
|
+
}) => Promise<ClusterDetailResponse>;
|
|
35
|
+
refresh: (request: RefreshRequest) => Promise<RefreshResponse>;
|
|
36
|
+
rerun: (request: ActionRequest) => Promise<ActionResponse>;
|
|
37
|
+
};
|
|
38
|
+
type FetchLike = typeof fetch;
|
|
39
|
+
export declare function createGitcrawlClient(baseUrl: string, fetchImpl?: FetchLike): GitcrawlClient;
|
|
40
|
+
export {};
|
|
41
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAYL,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,qBAAqB,EAC1B,KAAK,wBAAwB,EAC7B,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,oBAAoB,EACzB,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,KAAK,eAAe,EACrB,MAAM,gBAAgB,CAAC;AAExB,MAAM,MAAM,cAAc,GAAG;IAC3B,MAAM,EAAE,MAAM,OAAO,CAAC,cAAc,CAAC,CAAC;IACtC,gBAAgB,EAAE,MAAM,OAAO,CAAC,oBAAoB,CAAC,CAAC;IACtD,WAAW,EAAE,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,GAAG,cAAc,CAAA;KAAE,KAAK,OAAO,CAAC,eAAe,CAAC,CAAC;IACpH,MAAM,EAAE,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,UAAU,CAAA;KAAE,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;IAC/G,YAAY,EAAE,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACrF,oBAAoB,EAAE,CAAC,MAAM,EAAE;QAC7B,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,IAAI,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;QACzB,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,KAAK,OAAO,CAAC,wBAAwB,CAAC,CAAC;IACxC,gBAAgB,EAAE,CAAC,MAAM,EAAE;QACzB,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,KAAK,OAAO,CAAC,qBAAqB,CAAC,CAAC;IACrC,OAAO,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,OAAO,CAAC,eAAe,CAAC,CAAC;IAC/D,KAAK,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;CAC5D,CAAC;AAEF,KAAK,SAAS,GAAG,OAAO,KAAK,CAAC;AAW9B,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,GAAE,SAAiB,GAAG,cAAc,CAwElG"}
|
package/dist/client.js
ADDED
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { actionRequestSchema, actionResponseSchema, clusterDetailResponseSchema, clusterSummariesResponseSchema, clustersResponseSchema, healthResponseSchema, refreshRequestSchema, refreshResponseSchema, repositoriesResponseSchema, searchResponseSchema, threadsResponseSchema, } from './contracts.js';
|
|
2
|
+
async function readJson(res, schema) {
|
|
3
|
+
if (!res.ok) {
|
|
4
|
+
const text = await res.text().catch(() => '');
|
|
5
|
+
throw new Error(`API request failed ${res.status} ${res.statusText}: ${text.slice(0, 2000)}`);
|
|
6
|
+
}
|
|
7
|
+
const value = (await res.json());
|
|
8
|
+
return schema.parse(value);
|
|
9
|
+
}
|
|
10
|
+
export function createGitcrawlClient(baseUrl, fetchImpl = fetch) {
|
|
11
|
+
const normalized = baseUrl.replace(/\/+$/, '');
|
|
12
|
+
return {
|
|
13
|
+
async health() {
|
|
14
|
+
const res = await fetchImpl(`${normalized}/health`);
|
|
15
|
+
return readJson(res, healthResponseSchema);
|
|
16
|
+
},
|
|
17
|
+
async listRepositories() {
|
|
18
|
+
const res = await fetchImpl(`${normalized}/repositories`);
|
|
19
|
+
return readJson(res, repositoriesResponseSchema);
|
|
20
|
+
},
|
|
21
|
+
async listThreads(params) {
|
|
22
|
+
const search = new URLSearchParams({ owner: params.owner, repo: params.repo });
|
|
23
|
+
if (params.kind)
|
|
24
|
+
search.set('kind', params.kind);
|
|
25
|
+
const res = await fetchImpl(`${normalized}/threads?${search.toString()}`);
|
|
26
|
+
return readJson(res, threadsResponseSchema);
|
|
27
|
+
},
|
|
28
|
+
async search(params) {
|
|
29
|
+
const search = new URLSearchParams({
|
|
30
|
+
owner: params.owner,
|
|
31
|
+
repo: params.repo,
|
|
32
|
+
query: params.query,
|
|
33
|
+
});
|
|
34
|
+
if (params.mode)
|
|
35
|
+
search.set('mode', params.mode);
|
|
36
|
+
const res = await fetchImpl(`${normalized}/search?${search.toString()}`);
|
|
37
|
+
return readJson(res, searchResponseSchema);
|
|
38
|
+
},
|
|
39
|
+
async listClusters(params) {
|
|
40
|
+
const search = new URLSearchParams({ owner: params.owner, repo: params.repo });
|
|
41
|
+
const res = await fetchImpl(`${normalized}/clusters?${search.toString()}`);
|
|
42
|
+
return readJson(res, clustersResponseSchema);
|
|
43
|
+
},
|
|
44
|
+
async listClusterSummaries(params) {
|
|
45
|
+
const search = new URLSearchParams({ owner: params.owner, repo: params.repo });
|
|
46
|
+
if (params.minSize !== undefined)
|
|
47
|
+
search.set('minSize', String(params.minSize));
|
|
48
|
+
if (params.limit !== undefined)
|
|
49
|
+
search.set('limit', String(params.limit));
|
|
50
|
+
if (params.sort)
|
|
51
|
+
search.set('sort', params.sort);
|
|
52
|
+
if (params.search)
|
|
53
|
+
search.set('search', params.search);
|
|
54
|
+
const res = await fetchImpl(`${normalized}/cluster-summaries?${search.toString()}`);
|
|
55
|
+
return readJson(res, clusterSummariesResponseSchema);
|
|
56
|
+
},
|
|
57
|
+
async getClusterDetail(params) {
|
|
58
|
+
const search = new URLSearchParams({
|
|
59
|
+
owner: params.owner,
|
|
60
|
+
repo: params.repo,
|
|
61
|
+
clusterId: String(params.clusterId),
|
|
62
|
+
});
|
|
63
|
+
if (params.memberLimit !== undefined)
|
|
64
|
+
search.set('memberLimit', String(params.memberLimit));
|
|
65
|
+
if (params.bodyChars !== undefined)
|
|
66
|
+
search.set('bodyChars', String(params.bodyChars));
|
|
67
|
+
const res = await fetchImpl(`${normalized}/cluster-detail?${search.toString()}`);
|
|
68
|
+
return readJson(res, clusterDetailResponseSchema);
|
|
69
|
+
},
|
|
70
|
+
async refresh(request) {
|
|
71
|
+
const body = refreshRequestSchema.parse(request);
|
|
72
|
+
const res = await fetchImpl(`${normalized}/actions/refresh`, {
|
|
73
|
+
method: 'POST',
|
|
74
|
+
headers: { 'content-type': 'application/json' },
|
|
75
|
+
body: JSON.stringify(body),
|
|
76
|
+
});
|
|
77
|
+
return readJson(res, refreshResponseSchema);
|
|
78
|
+
},
|
|
79
|
+
async rerun(request) {
|
|
80
|
+
const body = actionRequestSchema.parse(request);
|
|
81
|
+
const res = await fetchImpl(`${normalized}/actions/rerun`, {
|
|
82
|
+
method: 'POST',
|
|
83
|
+
headers: { 'content-type': 'application/json' },
|
|
84
|
+
body: JSON.stringify(body),
|
|
85
|
+
});
|
|
86
|
+
return readJson(res, actionResponseSchema);
|
|
87
|
+
},
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|