@openally/github.sdk 1.0.0 → 1.1.1
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/LICENSE +21 -21
- package/README.md +5 -4
- package/dist/api/rawFile.d.ts +20 -0
- package/dist/api/rawFile.d.ts.map +1 -0
- package/dist/api/rawFile.js +25 -0
- package/dist/api/rawFile.js.map +1 -0
- package/dist/api/repos.d.ts +21 -0
- package/dist/api/repos.d.ts.map +1 -0
- package/dist/api/repos.js +32 -0
- package/dist/api/repos.js.map +1 -0
- package/dist/api/users.d.ts +21 -0
- package/dist/api/users.d.ts.map +1 -0
- package/dist/api/users.js +20 -0
- package/dist/api/users.js.map +1 -0
- package/dist/class/ApiEndpoint.d.ts +20 -0
- package/dist/class/ApiEndpoint.d.ts.map +1 -0
- package/dist/class/ApiEndpoint.js +60 -0
- package/dist/class/ApiEndpoint.js.map +1 -0
- package/dist/class/GithubClient.d.ts +22 -0
- package/dist/class/GithubClient.d.ts.map +1 -0
- package/dist/class/GithubClient.js +21 -0
- package/dist/class/GithubClient.js.map +1 -0
- package/dist/class/HttpLinkParser.d.ts +4 -0
- package/dist/class/HttpLinkParser.d.ts.map +1 -0
- package/dist/class/HttpLinkParser.js +14 -0
- package/dist/class/HttpLinkParser.js.map +1 -0
- package/dist/class/createApiProxy.d.ts +2 -0
- package/dist/class/createApiProxy.d.ts.map +1 -0
- package/dist/class/createApiProxy.js +8 -0
- package/dist/class/createApiProxy.js.map +1 -0
- package/dist/constants.d.ts +4 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +4 -0
- package/dist/constants.js.map +1 -0
- package/{src/index.ts → dist/index.d.ts} +2 -1
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -0
- package/{src/types.ts → dist/types.d.ts} +14 -19
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +6 -3
- package/.all-contributorsrc +0 -16
- package/.editorconfig +0 -14
- package/.github/dependabot.yml +0 -25
- package/.github/workflows/codeql.yml +0 -78
- package/.github/workflows/node.js.yml +0 -52
- package/.github/workflows/publish.yml +0 -29
- package/.github/workflows/scorecards.yml +0 -76
- package/SECURITY.md +0 -5
- package/docs/api/ApiEndpoint.md +0 -37
- package/docs/api/GithubClient.md +0 -50
- package/docs/api/repos.md +0 -97
- package/docs/api/users.md +0 -76
- package/eslint.config.mjs +0 -3
- package/src/api/repos.ts +0 -74
- package/src/api/users.ts +0 -47
- package/src/class/ApiEndpoint.ts +0 -105
- package/src/class/GithubClient.ts +0 -31
- package/src/class/HttpLinkParser.ts +0 -17
- package/src/class/createApiProxy.ts +0 -9
- package/test/ApiEndpoint.spec.ts +0 -301
- package/test/GithubClient.spec.ts +0 -166
- package/test/HttpLinkParser.spec.ts +0 -78
- package/test/createApiProxy.spec.ts +0 -58
- package/test/repos.spec.ts +0 -221
- package/test/users.spec.ts +0 -159
- package/tsconfig.json +0 -11
package/LICENSE
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
MIT License
|
|
2
|
-
|
|
3
|
-
Copyright (c) 2026 OpenAlly
|
|
4
|
-
|
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
-
in the Software without restriction, including without limitation the rights
|
|
8
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
-
furnished to do so, subject to the following conditions:
|
|
11
|
-
|
|
12
|
-
The above copyright notice and this permission notice shall be included in all
|
|
13
|
-
copies or substantial portions of the Software.
|
|
14
|
-
|
|
15
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
-
SOFTWARE.
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 OpenAlly
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -47,13 +47,13 @@ const github = new GithubClient({
|
|
|
47
47
|
token: process.env.GITHUB_TOKEN
|
|
48
48
|
});
|
|
49
49
|
|
|
50
|
-
for await (const pr of github.repos.nodejs.node.pulls()
|
|
50
|
+
for await (const pr of github.repos.nodejs.node.pulls()) {
|
|
51
51
|
console.log(pr.title);
|
|
52
52
|
}
|
|
53
53
|
|
|
54
|
-
const tags = await github.repos.OpenAlly["github.sdk"].tags()
|
|
54
|
+
const tags = await github.repos.OpenAlly["github.sdk"].tags();
|
|
55
55
|
|
|
56
|
-
const userRepos = await github.users.torvalds.repos()
|
|
56
|
+
const userRepos = await github.users.torvalds.repos();
|
|
57
57
|
```
|
|
58
58
|
|
|
59
59
|
## 📚 API
|
|
@@ -61,10 +61,11 @@ const userRepos = await github.users.torvalds.repos().all();
|
|
|
61
61
|
- [ApiEndpoint](./docs/api/ApiEndpoint.md)
|
|
62
62
|
- [GithubClient](./docs/api/GithubClient.md)
|
|
63
63
|
|
|
64
|
-
Available GitHub APIs:
|
|
64
|
+
Available GitHub APIs:
|
|
65
65
|
|
|
66
66
|
- [repos](./docs/api/repos.md)
|
|
67
67
|
- [users](./docs/api/users.md)
|
|
68
|
+
- [fetchRawFile](./docs/api/fetchRawFile.md)
|
|
68
69
|
|
|
69
70
|
---
|
|
70
71
|
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { RequestConfig } from "../types.ts";
|
|
2
|
+
export interface FetchRawFileOptions extends RequestConfig {
|
|
3
|
+
/**
|
|
4
|
+
* Branch, tag, or commit SHA.
|
|
5
|
+
* @default "HEAD"
|
|
6
|
+
*/
|
|
7
|
+
ref?: string;
|
|
8
|
+
}
|
|
9
|
+
export type FetchRawFileClientOptions = Omit<FetchRawFileOptions, "token" | "userAgent">;
|
|
10
|
+
export type RawFileParser<T> = "json" | ((content: string) => T);
|
|
11
|
+
export declare function fetchRawFile(repository: `${string}/${string}`, filePath: string, options?: FetchRawFileOptions & {
|
|
12
|
+
parser?: undefined;
|
|
13
|
+
}): Promise<string>;
|
|
14
|
+
export declare function fetchRawFile<T = unknown>(repository: `${string}/${string}`, filePath: string, options: FetchRawFileOptions & {
|
|
15
|
+
parser: "json";
|
|
16
|
+
}): Promise<T>;
|
|
17
|
+
export declare function fetchRawFile<T>(repository: `${string}/${string}`, filePath: string, options: FetchRawFileOptions & {
|
|
18
|
+
parser: (content: string) => T;
|
|
19
|
+
}): Promise<T>;
|
|
20
|
+
//# sourceMappingURL=rawFile.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rawFile.d.ts","sourceRoot":"","sources":["../../src/api/rawFile.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAKjD,MAAM,WAAW,mBAAoB,SAAQ,aAAa;IACxD;;;OAGG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,MAAM,yBAAyB,GAAG,IAAI,CAAC,mBAAmB,EAAE,OAAO,GAAG,WAAW,CAAC,CAAC;AACzF,MAAM,MAAM,aAAa,CAAC,CAAC,IAAI,MAAM,GAAG,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK,CAAC,CAAC,CAAC;AAEjE,wBAAgB,YAAY,CAC1B,UAAU,EAAE,GAAG,MAAM,IAAI,MAAM,EAAE,EACjC,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,mBAAmB,GAAG;IAAE,MAAM,CAAC,EAAE,SAAS,CAAC;CAAE,GACtD,OAAO,CAAC,MAAM,CAAC,CAAC;AACnB,wBAAgB,YAAY,CAAC,CAAC,GAAG,OAAO,EACtC,UAAU,EAAE,GAAG,MAAM,IAAI,MAAM,EAAE,EACjC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,mBAAmB,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;CAAE,GACjD,OAAO,CAAC,CAAC,CAAC,CAAC;AACd,wBAAgB,YAAY,CAAC,CAAC,EAC5B,UAAU,EAAE,GAAG,MAAM,IAAI,MAAM,EAAE,EACjC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,mBAAmB,GAAG;IAAE,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,CAAC,CAAC;CAAE,GACjE,OAAO,CAAC,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
// Import Internal Dependencies
|
|
2
|
+
import { DEFAULT_USER_AGENT, GITHUB_RAW_API } from "../constants.js";
|
|
3
|
+
// CONSTANTS
|
|
4
|
+
const kDefaultRef = "HEAD";
|
|
5
|
+
export async function fetchRawFile(repository, filePath, options = {}) {
|
|
6
|
+
const { ref = kDefaultRef, token, userAgent = DEFAULT_USER_AGENT, parser } = options;
|
|
7
|
+
const url = new URL(`${repository}/${ref}/${filePath}`, GITHUB_RAW_API);
|
|
8
|
+
const headers = {
|
|
9
|
+
"User-Agent": userAgent,
|
|
10
|
+
...(typeof token === "string" ? { Authorization: `token ${token}` } : {})
|
|
11
|
+
};
|
|
12
|
+
const response = await fetch(url, { headers });
|
|
13
|
+
if (!response.ok) {
|
|
14
|
+
throw new Error(`Failed to fetch raw file '${filePath}' from ${repository}@${ref}: HTTP ${response.status}`);
|
|
15
|
+
}
|
|
16
|
+
const content = await response.text();
|
|
17
|
+
if (parser === "json") {
|
|
18
|
+
return JSON.parse(content);
|
|
19
|
+
}
|
|
20
|
+
if (typeof parser === "function") {
|
|
21
|
+
return parser(content);
|
|
22
|
+
}
|
|
23
|
+
return content;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=rawFile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rawFile.js","sourceRoot":"","sources":["../../src/api/rawFile.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,OAAO,EACL,kBAAkB,EAClB,cAAc,EACf,MAAM,iBAAiB,CAAC;AAGzB,YAAY;AACZ,MAAM,WAAW,GAAG,MAAM,CAAC;AA4B3B,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,UAAiC,EACjC,QAAgB,EAChB,UAAgE,EAAE;IAElE,MAAM,EACJ,GAAG,GAAG,WAAW,EACjB,KAAK,EACL,SAAS,GAAG,kBAAkB,EAC9B,MAAM,EACP,GAAG,OAAO,CAAC;IAEZ,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,UAAU,IAAI,GAAG,IAAI,QAAQ,EAAE,EAAE,cAAc,CAAC,CAAC;IACxE,MAAM,OAAO,GAA2B;QACtC,YAAY,EAAE,SAAS;QACvB,GAAG,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,SAAS,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC1E,CAAC;IAEF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;IAE/C,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CACb,6BAA6B,QAAQ,UAAU,UAAU,IAAI,GAAG,UAAU,QAAQ,CAAC,MAAM,EAAE,CAC5F,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IAEtC,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACtB,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAM,CAAC;IAClC,CAAC;IACD,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE,CAAC;QACjC,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC;IACzB,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { ApiEndpoint } from "../class/ApiEndpoint.ts";
|
|
2
|
+
import type { Tag, PullRequest, Issue, Commit, Workflow, WorkflowRun, Job, Artifact, RequestConfig } from "../types.ts";
|
|
3
|
+
type RepoEndpointMethods = {
|
|
4
|
+
tags: () => ApiEndpoint<Tag>;
|
|
5
|
+
pulls: () => ApiEndpoint<PullRequest>;
|
|
6
|
+
issues: () => ApiEndpoint<Issue>;
|
|
7
|
+
commits: () => ApiEndpoint<Commit>;
|
|
8
|
+
workflows: () => ApiEndpoint<Workflow>;
|
|
9
|
+
workflowRuns: (workflowId: string | number) => ApiEndpoint<WorkflowRun>;
|
|
10
|
+
runJobs: (runId: number) => ApiEndpoint<Job>;
|
|
11
|
+
runArtifacts: (runId: number) => ApiEndpoint<Artifact>;
|
|
12
|
+
};
|
|
13
|
+
export type ReposProxy = {
|
|
14
|
+
[owner: string]: {
|
|
15
|
+
[repo: string]: RepoEndpointMethods;
|
|
16
|
+
};
|
|
17
|
+
};
|
|
18
|
+
export declare function createReposProxy(config?: RequestConfig): ReposProxy;
|
|
19
|
+
export declare const repos: ReposProxy;
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=repos.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repos.d.ts","sourceRoot":"","sources":["../../src/api/repos.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAEtD,OAAO,KAAK,EACV,GAAG,EACH,WAAW,EACX,KAAK,EACL,MAAM,EACN,QAAQ,EACR,WAAW,EACX,GAAG,EACH,QAAQ,EAKR,aAAa,EACd,MAAM,aAAa,CAAC;AAErB,KAAK,mBAAmB,GAAG;IACzB,IAAI,EAAE,MAAM,WAAW,CAAC,GAAG,CAAC,CAAC;IAC7B,KAAK,EAAE,MAAM,WAAW,CAAC,WAAW,CAAC,CAAC;IACtC,MAAM,EAAE,MAAM,WAAW,CAAC,KAAK,CAAC,CAAC;IACjC,OAAO,EAAE,MAAM,WAAW,CAAC,MAAM,CAAC,CAAC;IACnC,SAAS,EAAE,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;IACvC,YAAY,EAAE,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,KAAK,WAAW,CAAC,WAAW,CAAC,CAAC;IACxE,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,WAAW,CAAC,GAAG,CAAC,CAAC;IAC7C,YAAY,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,WAAW,CAAC,QAAQ,CAAC,CAAC;CACxD,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,CAAC,KAAK,EAAE,MAAM,GAAG;QACf,CAAC,IAAI,EAAE,MAAM,GAAG,mBAAmB,CAAC;KACrC,CAAC;CACH,CAAC;AA2CF,wBAAgB,gBAAgB,CAC9B,MAAM,GAAE,aAAkB,GACzB,UAAU,CAMZ;AAED,eAAO,MAAM,KAAK,YAAqB,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
// Import Internal Dependencies
|
|
2
|
+
import { ApiEndpoint } from "../class/ApiEndpoint.js";
|
|
3
|
+
import { createApiProxy } from "../class/createApiProxy.js";
|
|
4
|
+
function createRepoProxy(owner, repo, config = {}) {
|
|
5
|
+
return {
|
|
6
|
+
tags: () => new ApiEndpoint(`/repos/${owner}/${repo}/tags`, config),
|
|
7
|
+
pulls: () => new ApiEndpoint(`/repos/${owner}/${repo}/pulls`, config),
|
|
8
|
+
issues: () => new ApiEndpoint(`/repos/${owner}/${repo}/issues`, config),
|
|
9
|
+
commits: () => new ApiEndpoint(`/repos/${owner}/${repo}/commits`, config),
|
|
10
|
+
workflows: () => new ApiEndpoint(`/repos/${owner}/${repo}/actions/workflows`, {
|
|
11
|
+
...config,
|
|
12
|
+
extractor: (raw) => raw.workflows
|
|
13
|
+
}),
|
|
14
|
+
workflowRuns: (workflowId) => new ApiEndpoint(`/repos/${owner}/${repo}/actions/workflows/${workflowId}/runs`, {
|
|
15
|
+
...config,
|
|
16
|
+
extractor: (raw) => raw.workflow_runs
|
|
17
|
+
}),
|
|
18
|
+
runJobs: (runId) => new ApiEndpoint(`/repos/${owner}/${repo}/actions/runs/${runId}/jobs`, {
|
|
19
|
+
...config,
|
|
20
|
+
extractor: (raw) => raw.jobs
|
|
21
|
+
}),
|
|
22
|
+
runArtifacts: (runId) => new ApiEndpoint(`/repos/${owner}/${repo}/actions/runs/${runId}/artifacts`, {
|
|
23
|
+
...config,
|
|
24
|
+
extractor: (raw) => raw.artifacts
|
|
25
|
+
})
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
export function createReposProxy(config = {}) {
|
|
29
|
+
return createApiProxy((owner) => createApiProxy((repo) => createRepoProxy(owner, repo, config)));
|
|
30
|
+
}
|
|
31
|
+
export const repos = createReposProxy();
|
|
32
|
+
//# sourceMappingURL=repos.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repos.js","sourceRoot":"","sources":["../../src/api/repos.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAkC5D,SAAS,eAAe,CACtB,KAAa,EACb,IAAY,EACZ,SAAwB,EAAE;IAE1B,OAAO;QACL,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,WAAW,CAAM,UAAU,KAAK,IAAI,IAAI,OAAO,EAAE,MAAM,CAAC;QACxE,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,WAAW,CAAc,UAAU,KAAK,IAAI,IAAI,QAAQ,EAAE,MAAM,CAAC;QAClF,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,WAAW,CAAQ,UAAU,KAAK,IAAI,IAAI,SAAS,EAAE,MAAM,CAAC;QAC9E,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,WAAW,CAAS,UAAU,KAAK,IAAI,IAAI,UAAU,EAAE,MAAM,CAAC;QACjF,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI,WAAW,CAC9B,UAAU,KAAK,IAAI,IAAI,oBAAoB,EAC3C;YACE,GAAG,MAAM;YACT,SAAS,EAAE,CAAC,GAAsB,EAAE,EAAE,CAAC,GAAG,CAAC,SAAS;SACrD,CACF;QACD,YAAY,EAAE,CAAC,UAA2B,EAAE,EAAE,CAAC,IAAI,WAAW,CAC5D,UAAU,KAAK,IAAI,IAAI,sBAAsB,UAAU,OAAO,EAC9D;YACE,GAAG,MAAM;YACT,SAAS,EAAE,CAAC,GAAyB,EAAE,EAAE,CAAC,GAAG,CAAC,aAAa;SAC5D,CACF;QACD,OAAO,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,IAAI,WAAW,CACzC,UAAU,KAAK,IAAI,IAAI,iBAAiB,KAAK,OAAO,EACpD;YACE,GAAG,MAAM;YACT,SAAS,EAAE,CAAC,GAAiB,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI;SAC3C,CACF;QACD,YAAY,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,IAAI,WAAW,CAC9C,UAAU,KAAK,IAAI,IAAI,iBAAiB,KAAK,YAAY,EACzD;YACE,GAAG,MAAM;YACT,SAAS,EAAE,CAAC,GAAsB,EAAE,EAAE,CAAC,GAAG,CAAC,SAAS;SACrD,CACF;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,SAAwB,EAAE;IAE1B,OAAO,cAAc,CACnB,CAAC,KAAK,EAAE,EAAE,CAAC,cAAc,CACvB,CAAC,IAAI,EAAE,EAAE,CAAC,eAAe,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,CAC/C,CACY,CAAC;AAClB,CAAC;AAED,MAAM,CAAC,MAAM,KAAK,GAAG,gBAAgB,EAAE,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { ApiEndpoint } from "../class/ApiEndpoint.ts";
|
|
2
|
+
import type { UserOrg, UserRepo, UserGist, UserFollower, UserFollowing, UserStarred, RequestConfig } from "../types.ts";
|
|
3
|
+
declare const kUserEndpointResponseMap: {
|
|
4
|
+
orgs: UserOrg;
|
|
5
|
+
repos: UserRepo;
|
|
6
|
+
gists: UserGist;
|
|
7
|
+
followers: UserFollower;
|
|
8
|
+
following: UserFollowing;
|
|
9
|
+
starred: UserStarred;
|
|
10
|
+
};
|
|
11
|
+
type UserEndpoint = keyof typeof kUserEndpointResponseMap;
|
|
12
|
+
type UserEndpointMethods = {
|
|
13
|
+
[K in UserEndpoint]: () => ApiEndpoint<typeof kUserEndpointResponseMap[K]>;
|
|
14
|
+
};
|
|
15
|
+
export type UsersProxy = {
|
|
16
|
+
[username: string]: UserEndpointMethods;
|
|
17
|
+
};
|
|
18
|
+
export declare function createUsersProxy(config?: RequestConfig): UsersProxy;
|
|
19
|
+
export declare const users: UsersProxy;
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=users.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"users.d.ts","sourceRoot":"","sources":["../../src/api/users.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAEtD,OAAO,KAAK,EACV,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,YAAY,EACZ,aAAa,EACb,WAAW,EACX,aAAa,EACd,MAAM,aAAa,CAAC;AAGrB,QAAA,MAAM,wBAAwB;UAChB,OAAO;WACN,QAAQ;WACR,QAAQ;eACJ,YAAY;eACZ,aAAa;aACf,WAAW;CAC3B,CAAC;AAEF,KAAK,YAAY,GAAG,MAAM,OAAO,wBAAwB,CAAC;AAC1D,KAAK,mBAAmB,GAAG;KACxB,CAAC,IAAI,YAAY,GAAG,MAAM,WAAW,CAAC,OAAO,wBAAwB,CAAC,CAAC,CAAC,CAAC;CAC3E,CAAC;AACF,MAAM,MAAM,UAAU,GAAG;IACvB,CAAC,QAAQ,EAAE,MAAM,GAAG,mBAAmB,CAAC;CACzC,CAAC;AAaF,wBAAgB,gBAAgB,CAC9B,MAAM,GAAE,aAAkB,GACzB,UAAU,CAIZ;AAED,eAAO,MAAM,KAAK,YAAqB,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
// Import Internal Dependencies
|
|
2
|
+
import { ApiEndpoint } from "../class/ApiEndpoint.js";
|
|
3
|
+
import { createApiProxy } from "../class/createApiProxy.js";
|
|
4
|
+
// CONSTANTS
|
|
5
|
+
const kUserEndpointResponseMap = {
|
|
6
|
+
orgs: {},
|
|
7
|
+
repos: {},
|
|
8
|
+
gists: {},
|
|
9
|
+
followers: {},
|
|
10
|
+
following: {},
|
|
11
|
+
starred: {}
|
|
12
|
+
};
|
|
13
|
+
function createUserProxy(username, config = {}) {
|
|
14
|
+
return Object.fromEntries(Object.keys(kUserEndpointResponseMap).map((endpoint) => [endpoint, () => new ApiEndpoint(`/users/${username}/${endpoint}`, config)]));
|
|
15
|
+
}
|
|
16
|
+
export function createUsersProxy(config = {}) {
|
|
17
|
+
return createApiProxy((username) => createUserProxy(username, config));
|
|
18
|
+
}
|
|
19
|
+
export const users = createUsersProxy();
|
|
20
|
+
//# sourceMappingURL=users.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"users.js","sourceRoot":"","sources":["../../src/api/users.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAW5D,YAAY;AACZ,MAAM,wBAAwB,GAAG;IAC/B,IAAI,EAAE,EAAa;IACnB,KAAK,EAAE,EAAc;IACrB,KAAK,EAAE,EAAc;IACrB,SAAS,EAAE,EAAkB;IAC7B,SAAS,EAAE,EAAmB;IAC9B,OAAO,EAAE,EAAiB;CAC3B,CAAC;AAUF,SAAS,eAAe,CACtB,QAAgB,EAChB,SAAwB,EAAE;IAE1B,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,GAAG,CACvC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,WAAW,CAAC,UAAU,QAAQ,IAAI,QAAQ,EAAE,EAAE,MAAM,CAAC,CAAC,CAC1F,CACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,SAAwB,EAAE;IAE1B,OAAO,cAAc,CACnB,CAAC,QAAQ,EAAE,EAAE,CAAC,eAAe,CAAC,QAAQ,EAAE,MAAM,CAAC,CAClC,CAAC;AAClB,CAAC;AAED,MAAM,CAAC,MAAM,KAAK,GAAG,gBAAgB,EAAE,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { RequestConfig } from "../types.ts";
|
|
2
|
+
export interface ApiEndpointOptions<T> extends RequestConfig {
|
|
3
|
+
/**
|
|
4
|
+
* By default, the raw response from the GitHub API is returned as-is.
|
|
5
|
+
* You can provide a custom extractor function to transform the raw response
|
|
6
|
+
* into an array of type T.
|
|
7
|
+
*/
|
|
8
|
+
extractor?: (raw: any) => T[];
|
|
9
|
+
}
|
|
10
|
+
export declare class ApiEndpoint<T> {
|
|
11
|
+
#private;
|
|
12
|
+
constructor(apiEndpoint: string | URL, options?: ApiEndpointOptions<T>);
|
|
13
|
+
setBearerToken(token: string): this;
|
|
14
|
+
setAgent(userAgent: string): this;
|
|
15
|
+
iterate(): AsyncIterableIterator<T>;
|
|
16
|
+
[Symbol.asyncIterator](): AsyncIterableIterator<T>;
|
|
17
|
+
all(): Promise<T[]>;
|
|
18
|
+
then<TResult1 = T[], TResult2 = never>(onfulfilled?: ((value: T[]) => TResult1 | PromiseLike<TResult1>) | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | null): Promise<TResult1 | TResult2>;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=ApiEndpoint.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ApiEndpoint.d.ts","sourceRoot":"","sources":["../../src/class/ApiEndpoint.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,MAAM,WAAW,kBAAkB,CAAC,CAAC,CAAE,SAAQ,aAAa;IAC1D;;;;OAIG;IACH,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;CAC/B;AAED,qBAAa,WAAW,CAAC,CAAC;;gBAStB,WAAW,EAAE,MAAM,GAAG,GAAG,EACzB,OAAO,GAAE,kBAAkB,CAAC,CAAC,CAAM;IAcrC,cAAc,CACZ,KAAK,EAAE,MAAM,GACZ,IAAI;IAMP,QAAQ,CACN,SAAS,EAAE,MAAM,GAChB,IAAI;IAkCA,OAAO,IAAI,qBAAqB,CAAC,CAAC,CAAC;IAQ1C,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,qBAAqB,CAAC,CAAC,CAAC;IAIlD,GAAG,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC;IAInB,IAAI,CAAC,QAAQ,GAAG,CAAC,EAAE,EAAE,QAAQ,GAAG,KAAK,EACnC,WAAW,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,EACvE,UAAU,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,GAAG,KAAK,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,GACtE,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC;CAGhC"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
// Import Internal Dependencies
|
|
2
|
+
import { HttpLinkParser } from "./HttpLinkParser.js";
|
|
3
|
+
import { DEFAULT_USER_AGENT, GITHUB_API } from "../constants.js";
|
|
4
|
+
export class ApiEndpoint {
|
|
5
|
+
#userAgent;
|
|
6
|
+
#bearerToken;
|
|
7
|
+
#nextURL = null;
|
|
8
|
+
#apiEndpoint;
|
|
9
|
+
#extractor;
|
|
10
|
+
constructor(apiEndpoint, options = {}) {
|
|
11
|
+
const { userAgent = DEFAULT_USER_AGENT, token, extractor = ((raw) => raw) } = options;
|
|
12
|
+
this.#userAgent = userAgent;
|
|
13
|
+
this.#bearerToken = token;
|
|
14
|
+
this.#apiEndpoint = apiEndpoint;
|
|
15
|
+
this.#extractor = extractor;
|
|
16
|
+
}
|
|
17
|
+
setBearerToken(token) {
|
|
18
|
+
this.#bearerToken = token;
|
|
19
|
+
return this;
|
|
20
|
+
}
|
|
21
|
+
setAgent(userAgent) {
|
|
22
|
+
this.#userAgent = userAgent;
|
|
23
|
+
return this;
|
|
24
|
+
}
|
|
25
|
+
async #next() {
|
|
26
|
+
const headers = {
|
|
27
|
+
"User-Agent": this.#userAgent,
|
|
28
|
+
Accept: "application/vnd.github.v3.raw",
|
|
29
|
+
...(typeof this.#bearerToken === "string" ?
|
|
30
|
+
{ Authorization: `token ${this.#bearerToken}` } :
|
|
31
|
+
{})
|
|
32
|
+
};
|
|
33
|
+
const url = this.#nextURL === null ?
|
|
34
|
+
new URL(this.#apiEndpoint, GITHUB_API) :
|
|
35
|
+
new URL(this.#nextURL, GITHUB_API);
|
|
36
|
+
const response = await fetch(url, { headers });
|
|
37
|
+
const rawData = await response.json();
|
|
38
|
+
const linkHeader = response.headers.get("link");
|
|
39
|
+
this.#nextURL = linkHeader
|
|
40
|
+
? HttpLinkParser.parse(linkHeader).get("next") ?? null
|
|
41
|
+
: null;
|
|
42
|
+
return this.#extractor(rawData);
|
|
43
|
+
}
|
|
44
|
+
async *iterate() {
|
|
45
|
+
do {
|
|
46
|
+
const pageResults = await this.#next();
|
|
47
|
+
yield* pageResults;
|
|
48
|
+
} while (this.#nextURL !== null);
|
|
49
|
+
}
|
|
50
|
+
[Symbol.asyncIterator]() {
|
|
51
|
+
return this.iterate();
|
|
52
|
+
}
|
|
53
|
+
all() {
|
|
54
|
+
return Array.fromAsync(this.iterate());
|
|
55
|
+
}
|
|
56
|
+
then(onfulfilled, onrejected) {
|
|
57
|
+
return this.all().then(onfulfilled, onrejected);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=ApiEndpoint.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ApiEndpoint.js","sourceRoot":"","sources":["../../src/class/ApiEndpoint.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EACL,kBAAkB,EAClB,UAAU,EACX,MAAM,iBAAiB,CAAC;AAYzB,MAAM,OAAO,WAAW;IACtB,UAAU,CAAS;IACnB,YAAY,CAAU;IAEtB,QAAQ,GAAkB,IAAI,CAAC;IAC/B,YAAY,CAAe;IAC3B,UAAU,CAAoB;IAE9B,YACE,WAAyB,EACzB,UAAiC,EAAE;QAEnC,MAAM,EACJ,SAAS,GAAG,kBAAkB,EAC9B,KAAK,EACL,SAAS,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAU,CAAC,EAClC,GAAG,OAAO,CAAC;QAEZ,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAC5B,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;QAC1B,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;QAChC,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;IAC9B,CAAC;IAED,cAAc,CACZ,KAAa;QAEb,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;QAE1B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,QAAQ,CACN,SAAiB;QAEjB,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAE5B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,KAAK;QACT,MAAM,OAAO,GAAG;YACd,YAAY,EAAE,IAAI,CAAC,UAAU;YAC7B,MAAM,EAAE,+BAA+B;YACvC,GAAG,CACD,OAAO,IAAI,CAAC,YAAY,KAAK,QAAQ,CAAC,CAAC;gBACrC,EAAE,aAAa,EAAE,SAAS,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;gBACjD,EAAE,CACL;SACF,CAAC;QAEF,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC;YAClC,IAAI,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC,CAAC;YACxC,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QACrC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAC1B,GAAG,EACH,EAAE,OAAO,EAAE,CACZ,CAAC;QACF,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAEtC,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAChD,IAAI,CAAC,QAAQ,GAAG,UAAU;YACxB,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI;YACtD,CAAC,CAAC,IAAI,CAAC;QAET,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAClC,CAAC;IAED,KAAK,CAAA,CAAE,OAAO;QACZ,GAAG,CAAC;YACF,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;YAEvC,KAAK,CAAC,CAAC,WAAW,CAAC;QACrB,CAAC,QAAQ,IAAI,CAAC,QAAQ,KAAK,IAAI,EAAE;IACnC,CAAC;IAED,CAAC,MAAM,CAAC,aAAa,CAAC;QACpB,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;IACxB,CAAC;IAED,GAAG;QACD,OAAO,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IACzC,CAAC;IAED,IAAI,CACF,WAAuE,EACvE,UAAuE;QAEvE,OAAO,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;IAClD,CAAC;CACF"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { type UsersProxy } from "../api/users.ts";
|
|
2
|
+
import { type ReposProxy } from "../api/repos.ts";
|
|
3
|
+
import { type FetchRawFileClientOptions } from "../api/rawFile.ts";
|
|
4
|
+
import type { RequestConfig } from "../types.ts";
|
|
5
|
+
export interface GithubClientOptions extends RequestConfig {
|
|
6
|
+
}
|
|
7
|
+
export declare class GithubClient {
|
|
8
|
+
#private;
|
|
9
|
+
readonly users: UsersProxy;
|
|
10
|
+
readonly repos: ReposProxy;
|
|
11
|
+
constructor(options?: GithubClientOptions);
|
|
12
|
+
fetchRawFile(repository: `${string}/${string}`, filePath: string, options?: FetchRawFileClientOptions & {
|
|
13
|
+
parser?: undefined;
|
|
14
|
+
}): Promise<string>;
|
|
15
|
+
fetchRawFile<T = unknown>(repository: `${string}/${string}`, filePath: string, options: FetchRawFileClientOptions & {
|
|
16
|
+
parser: "json";
|
|
17
|
+
}): Promise<T>;
|
|
18
|
+
fetchRawFile<T>(repository: `${string}/${string}`, filePath: string, options: FetchRawFileClientOptions & {
|
|
19
|
+
parser: (content: string) => T;
|
|
20
|
+
}): Promise<T>;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=GithubClient.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GithubClient.d.ts","sourceRoot":"","sources":["../../src/class/GithubClient.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,UAAU,EAChB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAEL,KAAK,UAAU,EAChB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAEL,KAAK,yBAAyB,EAE/B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,MAAM,WAAW,mBAAoB,SAAQ,aAAa;CAAG;AAE7D,qBAAa,YAAY;;IACvB,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;gBAIzB,OAAO,GAAE,mBAAwB;IAWnC,YAAY,CACV,UAAU,EAAE,GAAG,MAAM,IAAI,MAAM,EAAE,EACjC,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,yBAAyB,GAAG;QAAE,MAAM,CAAC,EAAE,SAAS,CAAC;KAAE,GAC5D,OAAO,CAAC,MAAM,CAAC;IAClB,YAAY,CAAC,CAAC,GAAG,OAAO,EACtB,UAAU,EAAE,GAAG,MAAM,IAAI,MAAM,EAAE,EACjC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,yBAAyB,GAAG;QAAE,MAAM,EAAE,MAAM,CAAC;KAAE,GACvD,OAAO,CAAC,CAAC,CAAC;IACb,YAAY,CAAC,CAAC,EACZ,UAAU,EAAE,GAAG,MAAM,IAAI,MAAM,EAAE,EACjC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,yBAAyB,GAAG;QAAE,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,CAAC,CAAC;KAAE,GACvE,OAAO,CAAC,CAAC,CAAC;CAYd"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
// Import Internal Dependencies
|
|
2
|
+
import { createUsersProxy } from "../api/users.js";
|
|
3
|
+
import { createReposProxy } from "../api/repos.js";
|
|
4
|
+
import { fetchRawFile } from "../api/rawFile.js";
|
|
5
|
+
export class GithubClient {
|
|
6
|
+
users;
|
|
7
|
+
repos;
|
|
8
|
+
#config;
|
|
9
|
+
constructor(options = {}) {
|
|
10
|
+
this.#config = {
|
|
11
|
+
token: options.token,
|
|
12
|
+
userAgent: options.userAgent
|
|
13
|
+
};
|
|
14
|
+
this.users = createUsersProxy(this.#config);
|
|
15
|
+
this.repos = createReposProxy(this.#config);
|
|
16
|
+
}
|
|
17
|
+
fetchRawFile(repository, filePath, options = {}) {
|
|
18
|
+
return fetchRawFile(repository, filePath, { ...this.#config, ...options });
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=GithubClient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GithubClient.js","sourceRoot":"","sources":["../../src/class/GithubClient.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,OAAO,EACL,gBAAgB,EAEjB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,gBAAgB,EAEjB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,YAAY,EAGb,MAAM,mBAAmB,CAAC;AAK3B,MAAM,OAAO,YAAY;IACd,KAAK,CAAa;IAClB,KAAK,CAAa;IAC3B,OAAO,CAAgB;IAEvB,YACE,UAA+B,EAAE;QAEjC,IAAI,CAAC,OAAO,GAAG;YACb,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,SAAS,EAAE,OAAO,CAAC,SAAS;SAC7B,CAAC;QAEF,IAAI,CAAC,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC5C,IAAI,CAAC,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC9C,CAAC;IAiBD,YAAY,CACV,UAAiC,EACjC,QAAgB,EAChB,UAAsE,EAAE;QAExE,OAAO,YAAY,CACjB,UAAU,EACV,QAAQ,EACR,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,OAAO,EAAS,CACvC,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HttpLinkParser.d.ts","sourceRoot":"","sources":["../../src/class/HttpLinkParser.ts"],"names":[],"mappings":"AAAA,qBAAa,cAAc;IACzB,MAAM,CAAC,KAAK,CACV,WAAW,EAAE,MAAM,GAClB,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;CAavB"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export class HttpLinkParser {
|
|
2
|
+
static parse(headerValue) {
|
|
3
|
+
const result = new Map();
|
|
4
|
+
for (const part of headerValue.split(", ")) {
|
|
5
|
+
const urlMatch = part.match(/^<([^>]+)>/);
|
|
6
|
+
const relMatch = part.match(/rel="([^"]+)"/);
|
|
7
|
+
if (urlMatch && relMatch) {
|
|
8
|
+
result.set(relMatch[1], urlMatch[1]);
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
return result;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=HttpLinkParser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HttpLinkParser.js","sourceRoot":"","sources":["../../src/class/HttpLinkParser.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,cAAc;IACzB,MAAM,CAAC,KAAK,CACV,WAAmB;QAEnB,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;QAEzC,KAAK,MAAM,IAAI,IAAI,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;YAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;YAC7C,IAAI,QAAQ,IAAI,QAAQ,EAAE,CAAC;gBACzB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YACvC,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createApiProxy.d.ts","sourceRoot":"","sources":["../../src/class/createApiProxy.ts"],"names":[],"mappings":"AAAA,wBAAgB,cAAc,CAAC,CAAC,EAC9B,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,CAAC,GAC1B,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAMnB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createApiProxy.js","sourceRoot":"","sources":["../../src/class/createApiProxy.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,cAAc,CAC5B,OAA2B;IAE3B,OAAO,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;QACpC,GAAG,CAAC,CAAC,EAAE,GAAW;YAChB,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC;QACtB,CAAC;KACF,CAAsB,CAAC;AAC1B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,+BAA+B,CAAC;AAC/D,eAAO,MAAM,UAAU,wBAAqC,CAAC;AAC7D,eAAO,MAAM,cAAc,wBAAgD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,kBAAkB,GAAG,4BAA4B,CAAC;AAC/D,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,yBAAyB,CAAC,CAAC;AAC7D,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,oCAAoC,CAAC,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export * from "./api/users.ts";
|
|
2
2
|
export * from "./api/repos.ts";
|
|
3
|
+
export { fetchRawFile, type FetchRawFileOptions } from "./api/rawFile.ts";
|
|
3
4
|
export * from "./class/GithubClient.ts";
|
|
4
5
|
export type { RequestConfig } from "./types.ts";
|
|
5
|
-
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EACL,YAAY,EACZ,KAAK,mBAAmB,EACzB,MAAM,kBAAkB,CAAC;AAC1B,cAAc,yBAAyB,CAAC;AACxC,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EACL,YAAY,EAEb,MAAM,kBAAkB,CAAC;AAC1B,cAAc,yBAAyB,CAAC"}
|
|
@@ -1,37 +1,32 @@
|
|
|
1
|
-
// Import Third-party Dependencies
|
|
2
1
|
import type { Endpoints } from "@octokit/types";
|
|
3
|
-
|
|
4
2
|
export interface RequestConfig {
|
|
5
|
-
|
|
6
|
-
|
|
3
|
+
/**
|
|
4
|
+
* A personal access token is required to access private resources,
|
|
5
|
+
* and to increase the rate limit for unauthenticated requests.
|
|
6
|
+
*/
|
|
7
|
+
token?: string;
|
|
8
|
+
/**
|
|
9
|
+
* @default "@openally/github.sdk/1.0.0"
|
|
10
|
+
* @see https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api?apiVersion=2022-11-28#user-agent
|
|
11
|
+
*/
|
|
12
|
+
userAgent?: string;
|
|
7
13
|
}
|
|
8
|
-
|
|
9
|
-
// --- Repo entity types ---
|
|
10
14
|
export type Tag = Endpoints["GET /repos/{owner}/{repo}/tags"]["response"]["data"][number];
|
|
11
15
|
export type PullRequest = Endpoints["GET /repos/{owner}/{repo}/pulls"]["response"]["data"][number];
|
|
12
16
|
export type Issue = Endpoints["GET /repos/{owner}/{repo}/issues"]["response"]["data"][number];
|
|
13
17
|
export type Commit = Endpoints["GET /repos/{owner}/{repo}/commits"]["response"]["data"][number];
|
|
14
18
|
export type Workflow = Endpoints["GET /repos/{owner}/{repo}/actions/workflows"]["response"]["data"]["workflows"][number];
|
|
15
|
-
export type WorkflowRun = Endpoints[
|
|
16
|
-
"GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/runs"
|
|
17
|
-
]["response"]["data"]["workflow_runs"][number];
|
|
19
|
+
export type WorkflowRun = Endpoints["GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/runs"]["response"]["data"]["workflow_runs"][number];
|
|
18
20
|
export type Job = Endpoints["GET /repos/{owner}/{repo}/actions/runs/{run_id}/jobs"]["response"]["data"]["jobs"][number];
|
|
19
|
-
export type Artifact = Endpoints[
|
|
20
|
-
"GET /repos/{owner}/{repo}/actions/runs/{run_id}/artifacts"
|
|
21
|
-
]["response"]["data"]["artifacts"][number];
|
|
22
|
-
|
|
23
|
-
// Extractor response types (envelope objects returned by the GitHub API)
|
|
21
|
+
export type Artifact = Endpoints["GET /repos/{owner}/{repo}/actions/runs/{run_id}/artifacts"]["response"]["data"]["artifacts"][number];
|
|
24
22
|
export type WorkflowsResponse = Endpoints["GET /repos/{owner}/{repo}/actions/workflows"]["response"]["data"];
|
|
25
|
-
export type WorkflowRunsResponse = Endpoints[
|
|
26
|
-
"GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/runs"
|
|
27
|
-
]["response"]["data"];
|
|
23
|
+
export type WorkflowRunsResponse = Endpoints["GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/runs"]["response"]["data"];
|
|
28
24
|
export type JobsResponse = Endpoints["GET /repos/{owner}/{repo}/actions/runs/{run_id}/jobs"]["response"]["data"];
|
|
29
25
|
export type ArtifactsResponse = Endpoints["GET /repos/{owner}/{repo}/actions/runs/{run_id}/artifacts"]["response"]["data"];
|
|
30
|
-
|
|
31
|
-
// --- User entity types ---
|
|
32
26
|
export type UserOrg = Endpoints["GET /users/{username}/orgs"]["response"]["data"][number];
|
|
33
27
|
export type UserRepo = Endpoints["GET /users/{username}/repos"]["response"]["data"][number];
|
|
34
28
|
export type UserGist = Endpoints["GET /users/{username}/gists"]["response"]["data"][number];
|
|
35
29
|
export type UserFollower = Endpoints["GET /users/{username}/followers"]["response"]["data"][number];
|
|
36
30
|
export type UserFollowing = Endpoints["GET /users/{username}/following"]["response"]["data"][number];
|
|
37
31
|
export type UserStarred = Endpoints["GET /users/{username}/starred"]["response"]["data"][number];
|
|
32
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,MAAM,WAAW,aAAa;IAC5B;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAGD,MAAM,MAAM,GAAG,GAAG,SAAS,CAAC,gCAAgC,CAAC,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC;AAC1F,MAAM,MAAM,WAAW,GAAG,SAAS,CAAC,iCAAiC,CAAC,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC;AACnG,MAAM,MAAM,KAAK,GAAG,SAAS,CAAC,kCAAkC,CAAC,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC;AAC9F,MAAM,MAAM,MAAM,GAAG,SAAS,CAAC,mCAAmC,CAAC,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC;AAChG,MAAM,MAAM,QAAQ,GAAG,SAAS,CAAC,6CAA6C,CAAC,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;AACzH,MAAM,MAAM,WAAW,GAAG,SAAS,CACjC,gEAAgE,CACjE,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC;AAC/C,MAAM,MAAM,GAAG,GAAG,SAAS,CAAC,sDAAsD,CAAC,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC;AACxH,MAAM,MAAM,QAAQ,GAAG,SAAS,CAC9B,2DAA2D,CAC5D,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;AAG3C,MAAM,MAAM,iBAAiB,GAAG,SAAS,CAAC,6CAA6C,CAAC,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC;AAC7G,MAAM,MAAM,oBAAoB,GAAG,SAAS,CAC1C,gEAAgE,CACjE,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC;AACtB,MAAM,MAAM,YAAY,GAAG,SAAS,CAAC,sDAAsD,CAAC,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC;AACjH,MAAM,MAAM,iBAAiB,GAAG,SAAS,CAAC,2DAA2D,CAAC,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC;AAG3H,MAAM,MAAM,OAAO,GAAG,SAAS,CAAC,4BAA4B,CAAC,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC;AAC1F,MAAM,MAAM,QAAQ,GAAG,SAAS,CAAC,6BAA6B,CAAC,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC;AAC5F,MAAM,MAAM,QAAQ,GAAG,SAAS,CAAC,6BAA6B,CAAC,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC;AAC5F,MAAM,MAAM,YAAY,GAAG,SAAS,CAAC,iCAAiC,CAAC,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC;AACpG,MAAM,MAAM,aAAa,GAAG,SAAS,CAAC,iCAAiC,CAAC,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC;AACrG,MAAM,MAAM,WAAW,GAAG,SAAS,CAAC,+BAA+B,CAAC,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openally/github.sdk",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.1.1",
|
|
4
4
|
"description": "Opiniated Node.js Github SDK",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": "./dist/index.js",
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
"publishConfig": {
|
|
17
17
|
"registry": "https://registry.npmjs.org",
|
|
18
18
|
"access": "public",
|
|
19
|
-
"provenance":
|
|
19
|
+
"provenance": true
|
|
20
20
|
},
|
|
21
21
|
"repository": {
|
|
22
22
|
"type": "git",
|
|
@@ -30,6 +30,9 @@
|
|
|
30
30
|
"nodejs",
|
|
31
31
|
"typescript"
|
|
32
32
|
],
|
|
33
|
+
"files": [
|
|
34
|
+
"dist"
|
|
35
|
+
],
|
|
33
36
|
"author": "GENTILHOMME Thomas <gentilhomme.thomas@gmail.com>",
|
|
34
37
|
"license": "MIT",
|
|
35
38
|
"bugs": {
|
|
@@ -39,7 +42,7 @@
|
|
|
39
42
|
"devDependencies": {
|
|
40
43
|
"@openally/config.eslint": "^2.2.0",
|
|
41
44
|
"@openally/config.typescript": "^1.2.1",
|
|
42
|
-
"@types/node": "25.3.
|
|
45
|
+
"@types/node": "25.3.3",
|
|
43
46
|
"c8": "^11.0.0",
|
|
44
47
|
"typescript": "^5.9.3",
|
|
45
48
|
"undici": "7.22.0"
|
package/.all-contributorsrc
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"files": [
|
|
3
|
-
"README.md"
|
|
4
|
-
],
|
|
5
|
-
"imageSize": 100,
|
|
6
|
-
"commit": false,
|
|
7
|
-
"contributors": [],
|
|
8
|
-
"contributorsPerLine": 7,
|
|
9
|
-
"projectName": "github.sdk",
|
|
10
|
-
"projectOwner": "OpenAlly",
|
|
11
|
-
"repoType": "github",
|
|
12
|
-
"repoHost": "https://github.com",
|
|
13
|
-
"skipCi": true,
|
|
14
|
-
"commitType": "docs",
|
|
15
|
-
"commitConvention": "angular"
|
|
16
|
-
}
|