action-pinner 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 (67) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +406 -0
  3. package/action.yml +53 -0
  4. package/dist/index.d.ts +1 -0
  5. package/dist/index.js +2 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/src/action-mode.d.ts +1 -0
  8. package/dist/src/action-mode.js +109 -0
  9. package/dist/src/action-mode.js.map +1 -0
  10. package/dist/src/cli.d.ts +2 -0
  11. package/dist/src/cli.js +780 -0
  12. package/dist/src/cli.js.map +1 -0
  13. package/dist/src/config.d.ts +2 -0
  14. package/dist/src/config.js +291 -0
  15. package/dist/src/config.js.map +1 -0
  16. package/dist/src/dependabot.d.ts +1 -0
  17. package/dist/src/dependabot.js +11 -0
  18. package/dist/src/dependabot.js.map +1 -0
  19. package/dist/src/enforcement.d.ts +12 -0
  20. package/dist/src/enforcement.js +238 -0
  21. package/dist/src/enforcement.js.map +1 -0
  22. package/dist/src/github-app.d.ts +6 -0
  23. package/dist/src/github-app.js +4 -0
  24. package/dist/src/github-app.js.map +1 -0
  25. package/dist/src/index.d.ts +2 -0
  26. package/dist/src/index.js +16 -0
  27. package/dist/src/index.js.map +1 -0
  28. package/dist/src/logging.d.ts +8 -0
  29. package/dist/src/logging.js +38 -0
  30. package/dist/src/logging.js.map +1 -0
  31. package/dist/src/multi-repo-scanner.d.ts +69 -0
  32. package/dist/src/multi-repo-scanner.js +121 -0
  33. package/dist/src/multi-repo-scanner.js.map +1 -0
  34. package/dist/src/netrc-auth.d.ts +13 -0
  35. package/dist/src/netrc-auth.js +123 -0
  36. package/dist/src/netrc-auth.js.map +1 -0
  37. package/dist/src/org.d.ts +49 -0
  38. package/dist/src/org.js +162 -0
  39. package/dist/src/org.js.map +1 -0
  40. package/dist/src/pattern-match.d.ts +5 -0
  41. package/dist/src/pattern-match.js +59 -0
  42. package/dist/src/pattern-match.js.map +1 -0
  43. package/dist/src/pinner.d.ts +6 -0
  44. package/dist/src/pinner.js +148 -0
  45. package/dist/src/pinner.js.map +1 -0
  46. package/dist/src/pr.d.ts +87 -0
  47. package/dist/src/pr.js +165 -0
  48. package/dist/src/pr.js.map +1 -0
  49. package/dist/src/report.d.ts +10 -0
  50. package/dist/src/report.js +54 -0
  51. package/dist/src/report.js.map +1 -0
  52. package/dist/src/resolver.d.ts +44 -0
  53. package/dist/src/resolver.js +227 -0
  54. package/dist/src/resolver.js.map +1 -0
  55. package/dist/src/scanner.d.ts +8 -0
  56. package/dist/src/scanner.js +128 -0
  57. package/dist/src/scanner.js.map +1 -0
  58. package/dist/src/types.d.ts +170 -0
  59. package/dist/src/types.js +41 -0
  60. package/dist/src/types.js.map +1 -0
  61. package/dist/src/version.d.ts +1 -0
  62. package/dist/src/version.js +22 -0
  63. package/dist/src/version.js.map +1 -0
  64. package/dist/src/workflow-paths.d.ts +4 -0
  65. package/dist/src/workflow-paths.js +29 -0
  66. package/dist/src/workflow-paths.js.map +1 -0
  67. package/package.json +62 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enforcement.js","sourceRoot":"","sources":["../../src/enforcement.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export interface AppModeOptions {
2
+ appId: string;
3
+ privateKey: string;
4
+ webhookSecret: string;
5
+ }
6
+ export declare function runGitHubAppMode(_options: AppModeOptions): Promise<void>;
@@ -0,0 +1,4 @@
1
+ export async function runGitHubAppMode(_options) {
2
+ throw new Error("GitHub App mode is scaffolded but not yet implemented. Use CLI or Action mode.");
3
+ }
4
+ //# sourceMappingURL=github-app.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github-app.js","sourceRoot":"","sources":["../../src/github-app.ts"],"names":[],"mappings":"AAMA,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,QAAwB;IAC7D,MAAM,IAAI,KAAK,CACb,gFAAgF,CACjF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env node
2
+ import { runActionMode } from "./action-mode.js";
3
+ import { runCli } from "./cli.js";
4
+ async function main() {
5
+ if (process.env.GITHUB_ACTIONS === "true" && process.env.INPUT_MODE) {
6
+ await runActionMode();
7
+ return;
8
+ }
9
+ await runCli();
10
+ }
11
+ main().catch((error) => {
12
+ const message = error instanceof Error ? error.message : String(error);
13
+ console.error(message);
14
+ process.exit(1);
15
+ });
16
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,KAAK,UAAU,IAAI;IACjB,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,KAAK,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;QACpE,MAAM,aAAa,EAAE,CAAC;QACtB,OAAO;IACT,CAAC;IAED,MAAM,MAAM,EAAE,CAAC;AACjB,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACvE,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACvB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,8 @@
1
+ export interface SafeLogRule {
2
+ name: string;
3
+ pattern: RegExp;
4
+ replacement: string;
5
+ }
6
+ export declare const SAFE_LOG_RULES: SafeLogRule[];
7
+ export declare function redactToken(str: string): string;
8
+ export declare function safeLog(message: string): string;
@@ -0,0 +1,38 @@
1
+ export const SAFE_LOG_RULES = [
2
+ {
3
+ name: "token_parameter",
4
+ pattern: /token=[^\s&"']+/gi,
5
+ replacement: "token=***REDACTED***"
6
+ },
7
+ {
8
+ name: "authorization_header",
9
+ pattern: /Authorization:\s*Bearer\s+[^\s]+/gi,
10
+ replacement: "Authorization: Bearer ***REDACTED***"
11
+ },
12
+ {
13
+ name: "github_token_env",
14
+ pattern: /GITHUB_TOKEN=[^\s"']+/gi,
15
+ replacement: "GITHUB_TOKEN=***REDACTED***"
16
+ },
17
+ {
18
+ name: "url_with_credentials",
19
+ pattern: /https?:\/\/[^:]+:[^\s@]+@/gi,
20
+ replacement: "https://***REDACTED***:***REDACTED***@"
21
+ },
22
+ {
23
+ name: "personal_access_token",
24
+ pattern: /gh[pousr]_[A-Za-z0-9_]+/g,
25
+ replacement: "***REDACTED_TOKEN***"
26
+ }
27
+ ];
28
+ export function redactToken(str) {
29
+ let result = str;
30
+ for (const rule of SAFE_LOG_RULES) {
31
+ result = result.replace(rule.pattern, rule.replacement);
32
+ }
33
+ return result;
34
+ }
35
+ export function safeLog(message) {
36
+ return redactToken(message);
37
+ }
38
+ //# sourceMappingURL=logging.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logging.js","sourceRoot":"","sources":["../../src/logging.ts"],"names":[],"mappings":"AAMA,MAAM,CAAC,MAAM,cAAc,GAAkB;IAC3C;QACE,IAAI,EAAE,iBAAiB;QACvB,OAAO,EAAE,mBAAmB;QAC5B,WAAW,EAAE,sBAAsB;KACpC;IACD;QACE,IAAI,EAAE,sBAAsB;QAC5B,OAAO,EAAE,oCAAoC;QAC7C,WAAW,EAAE,sCAAsC;KACpD;IACD;QACE,IAAI,EAAE,kBAAkB;QACxB,OAAO,EAAE,yBAAyB;QAClC,WAAW,EAAE,6BAA6B;KAC3C;IACD;QACE,IAAI,EAAE,sBAAsB;QAC5B,OAAO,EAAE,6BAA6B;QACtC,WAAW,EAAE,wCAAwC;KACtD;IACD;QACE,IAAI,EAAE,uBAAuB;QAC7B,OAAO,EAAE,0BAA0B;QACnC,WAAW,EAAE,sBAAsB;KACpC;CACF,CAAC;AAEF,MAAM,UAAU,WAAW,CAAC,GAAW;IACrC,IAAI,MAAM,GAAG,GAAG,CAAC;IACjB,KAAK,MAAM,IAAI,IAAI,cAAc,EAAE,CAAC;QAClC,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IAC1D,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,OAAe;IACrC,OAAO,WAAW,CAAC,OAAO,CAAC,CAAC;AAC9B,CAAC"}
@@ -0,0 +1,69 @@
1
+ import type { ScanResult } from "./types.js";
2
+ export interface MultiRepoScanOptions {
3
+ includePatterns: string[];
4
+ excludePatterns: string[];
5
+ includeActions: string[];
6
+ excludeActions: string[];
7
+ token?: string;
8
+ githubApiUrl?: string;
9
+ }
10
+ export interface MultiRepoScanEntry {
11
+ repository: string;
12
+ defaultBranch: string;
13
+ scan: ScanResult;
14
+ }
15
+ export interface RepositoryScanTarget {
16
+ repository: string;
17
+ defaultBranch?: string;
18
+ }
19
+ export interface MultiRepoScanResult {
20
+ repositories: MultiRepoScanEntry[];
21
+ consolidated: ScanResult;
22
+ summary: {
23
+ repositoriesScanned: number;
24
+ repositoriesWithUnpinned: number;
25
+ filesScanned: number;
26
+ referencesFound: number;
27
+ unpinnedFound: number;
28
+ };
29
+ }
30
+ interface RepoClient {
31
+ repos: {
32
+ get: (params: {
33
+ owner: string;
34
+ repo: string;
35
+ }) => Promise<{
36
+ data: {
37
+ default_branch: string;
38
+ };
39
+ }>;
40
+ getContent: (params: {
41
+ owner: string;
42
+ repo: string;
43
+ path: string;
44
+ ref: string;
45
+ }) => Promise<{
46
+ data: {
47
+ content: string;
48
+ encoding: string;
49
+ } | unknown[];
50
+ }>;
51
+ };
52
+ git: {
53
+ getTree: (params: {
54
+ owner: string;
55
+ repo: string;
56
+ tree_sha: string;
57
+ recursive: "true";
58
+ }) => Promise<{
59
+ data: {
60
+ tree: Array<{
61
+ path?: string;
62
+ type?: string;
63
+ }>;
64
+ };
65
+ }>;
66
+ };
67
+ }
68
+ export declare function scanRepositories(repositories: Array<string | RepositoryScanTarget>, options: MultiRepoScanOptions, client?: RepoClient): Promise<MultiRepoScanResult>;
69
+ export {};
@@ -0,0 +1,121 @@
1
+ import { Buffer } from "node:buffer";
2
+ import { Octokit } from "@octokit/rest";
3
+ import { matchesAnyPattern } from "./pattern-match.js";
4
+ import { normalizeGithubApiUrl } from "./resolver.js";
5
+ import { buildScanResult, extractActionReferences } from "./scanner.js";
6
+ import { resolveWorkflowPatterns } from "./workflow-paths.js";
7
+ export async function scanRepositories(repositories, options, client = createRepoClient(options)) {
8
+ const sortedRepositories = normalizeScanTargets(repositories);
9
+ const entries = [];
10
+ for (const repository of sortedRepositories) {
11
+ const scan = await scanSingleRepository(repository, options, client);
12
+ entries.push(scan);
13
+ }
14
+ const consolidated = buildScanResult(entries.flatMap((entry) => entry.scan.references), entries.reduce((sum, entry) => sum + entry.scan.summary.filesScanned, 0));
15
+ return {
16
+ repositories: entries,
17
+ consolidated,
18
+ summary: {
19
+ repositoriesScanned: entries.length,
20
+ repositoriesWithUnpinned: entries.filter((entry) => entry.scan.unpinned.length > 0).length,
21
+ filesScanned: consolidated.summary.filesScanned,
22
+ referencesFound: consolidated.summary.referencesFound,
23
+ unpinnedFound: consolidated.summary.unpinnedFound
24
+ }
25
+ };
26
+ }
27
+ async function scanSingleRepository(target, options, client) {
28
+ const repository = target.repository;
29
+ const { owner, repo } = splitRepository(repository);
30
+ const defaultBranch = target.defaultBranch ?? (await client.repos.get({ owner, repo })).data.default_branch;
31
+ const tree = await client.git.getTree({
32
+ owner,
33
+ repo,
34
+ tree_sha: defaultBranch,
35
+ recursive: "true"
36
+ });
37
+ const includePatterns = resolveWorkflowPatterns(options.includePatterns);
38
+ const workflowPaths = tree.data.tree
39
+ .filter((entry) => entry.type === "blob" && typeof entry.path === "string")
40
+ .map((entry) => entry.path)
41
+ .filter((path) => path.endsWith(".yml") || path.endsWith(".yaml"))
42
+ .filter((path) => matchesAnyPattern(path, includePatterns, { caseInsensitive: true }))
43
+ .filter((path) => !(options.excludePatterns.length > 0 &&
44
+ matchesAnyPattern(path, options.excludePatterns, { caseInsensitive: true })))
45
+ .sort((left, right) => left.localeCompare(right));
46
+ const references = [];
47
+ for (const path of workflowPaths) {
48
+ const contentResponse = await client.repos.getContent({
49
+ owner,
50
+ repo,
51
+ path,
52
+ ref: defaultBranch
53
+ });
54
+ if (Array.isArray(contentResponse.data)) {
55
+ continue;
56
+ }
57
+ const content = decodeContent(contentResponse.data.content, contentResponse.data.encoding);
58
+ const fileReferences = extractActionReferences(`${repository}/${path}`, content).filter((reference) => {
59
+ if (options.includeActions.length > 0 &&
60
+ !matchesActionPattern(reference.action, options.includeActions)) {
61
+ return false;
62
+ }
63
+ if (options.excludeActions.length > 0 &&
64
+ matchesActionPattern(reference.action, options.excludeActions)) {
65
+ return false;
66
+ }
67
+ return true;
68
+ });
69
+ references.push(...fileReferences);
70
+ }
71
+ return {
72
+ repository,
73
+ defaultBranch,
74
+ scan: buildScanResult(references, workflowPaths.length)
75
+ };
76
+ }
77
+ function decodeContent(content, encoding) {
78
+ if (encoding === "base64") {
79
+ return Buffer.from(content, "base64").toString("utf8");
80
+ }
81
+ throw new Error(`Unsupported content encoding: ${encoding}`);
82
+ }
83
+ function createRepoClient(options) {
84
+ return new Octokit({
85
+ auth: options.token,
86
+ baseUrl: normalizeGithubApiUrl(options.githubApiUrl)
87
+ });
88
+ }
89
+ function normalizeScanTargets(repositories) {
90
+ const deduped = new Map();
91
+ for (const repository of repositories) {
92
+ const target = typeof repository === "string" ? { repository } : repository;
93
+ const normalized = splitRepository(target.repository);
94
+ const fullName = `${normalized.owner}/${normalized.repo}`;
95
+ const existing = deduped.get(fullName.toLowerCase());
96
+ deduped.set(fullName.toLowerCase(), {
97
+ repository: fullName,
98
+ defaultBranch: existing?.defaultBranch ?? target.defaultBranch
99
+ });
100
+ }
101
+ return [...deduped.values()].sort((left, right) => left.repository.localeCompare(right.repository, "en", { sensitivity: "base" }));
102
+ }
103
+ function splitRepository(repository) {
104
+ const trimmed = repository.trim();
105
+ const parts = trimmed.split("/");
106
+ if (parts.length !== 2 || parts.some((part) => part.length === 0)) {
107
+ throw new Error(`Invalid repository '${repository}'. Expected format is 'owner/repo'.`);
108
+ }
109
+ return { owner: parts[0], repo: parts[1] };
110
+ }
111
+ function matchesActionPattern(action, patterns) {
112
+ return patterns.some((pattern) => {
113
+ const normalizedPattern = pattern.trim();
114
+ if (!normalizedPattern) {
115
+ return false;
116
+ }
117
+ const target = normalizedPattern.includes("/") ? action : action.split("/")[1] ?? action;
118
+ return matchesAnyPattern(target, [normalizedPattern], { caseInsensitive: true });
119
+ });
120
+ }
121
+ //# sourceMappingURL=multi-repo-scanner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multi-repo-scanner.js","sourceRoot":"","sources":["../../src/multi-repo-scanner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ export interface NetrcCredentials {
2
+ login: string;
3
+ password: string;
4
+ }
5
+ export declare function loadNetrc(overridePath?: string): Promise<Map<string, NetrcCredentials>>;
6
+ export declare function getNetrcCredentials(host: string, overridePath?: string): Promise<NetrcCredentials | null>;
7
+ export declare function getNetrcPath(): string;
8
+ export declare function encodeNetrcAuth(login: string, password: string): string;
9
+ export interface OctokitAuth {
10
+ auth?: string | Record<string, unknown>;
11
+ }
12
+ export declare function applyNetrcAuth(client: OctokitAuth, host: string): Promise<void>;
13
+ export declare function redactNetrcAuth(auth: string | undefined): string;
@@ -0,0 +1,123 @@
1
+ import { readFile } from "node:fs/promises";
2
+ import { statSync } from "node:fs";
3
+ import { homedir } from "node:os";
4
+ import { resolve, join } from "node:path";
5
+ import { platform } from "node:os";
6
+ export async function loadNetrc(overridePath) {
7
+ const netrcPath = overridePath ?? getNetrcPath();
8
+ const credentials = new Map();
9
+ try {
10
+ const content = await readFile(netrcPath, "utf8");
11
+ // Warn if .netrc is world-readable (security issue)
12
+ try {
13
+ const stats = statSync(netrcPath);
14
+ // eslint-disable-next-line no-bitwise
15
+ if ((stats.mode & 0o077) !== 0) {
16
+ console.warn(`Warning: ${netrcPath} is readable by others. Fix with: chmod 600 ${netrcPath}`);
17
+ }
18
+ }
19
+ catch {
20
+ // Ignore stat errors
21
+ }
22
+ const lines = content.split("\n");
23
+ let currentMachine = null;
24
+ let currentLogin = null;
25
+ let currentPassword = null;
26
+ for (const line of lines) {
27
+ const trimmed = line.trim();
28
+ if (!trimmed || trimmed.startsWith("#")) {
29
+ continue;
30
+ }
31
+ const parts = trimmed.split(/\s+/);
32
+ let i = 0;
33
+ while (i < parts.length) {
34
+ const key = parts[i];
35
+ i += 1;
36
+ if (key === "machine") {
37
+ const value = parts[i];
38
+ if (value) {
39
+ if (currentMachine && currentLogin && currentPassword) {
40
+ credentials.set(currentMachine, {
41
+ login: currentLogin,
42
+ password: currentPassword
43
+ });
44
+ }
45
+ currentMachine = value;
46
+ currentLogin = null;
47
+ currentPassword = null;
48
+ }
49
+ i += 1;
50
+ }
51
+ else if (key === "login") {
52
+ currentLogin = parts[i] ?? null;
53
+ i += 1;
54
+ }
55
+ else if (key === "password") {
56
+ // Capture the rest of the line to handle passwords containing spaces
57
+ const passwordTokens = parts.slice(i);
58
+ currentPassword = passwordTokens.length > 0 ? passwordTokens.join(" ") : null;
59
+ break;
60
+ }
61
+ }
62
+ }
63
+ if (currentMachine && currentLogin && currentPassword) {
64
+ credentials.set(currentMachine, {
65
+ login: currentLogin,
66
+ password: currentPassword
67
+ });
68
+ }
69
+ }
70
+ catch (error) {
71
+ const message = error instanceof Error ? error.message : String(error);
72
+ if (!message.includes("ENOENT")) {
73
+ console.warn(`Failed to load netrc from ${netrcPath}: ${message}`);
74
+ }
75
+ }
76
+ return credentials;
77
+ }
78
+ export async function getNetrcCredentials(host, overridePath) {
79
+ const credentials = await loadNetrc(overridePath);
80
+ // Exact match
81
+ if (credentials.has(host)) {
82
+ return credentials.get(host) ?? null;
83
+ }
84
+ // Try wildcard matching for subdomains (e.g., *.github.com matches api.github.com)
85
+ for (const [machine, creds] of credentials.entries()) {
86
+ if (machine.startsWith("*.") && host.endsWith(machine.substring(1))) {
87
+ return creds;
88
+ }
89
+ }
90
+ return null;
91
+ }
92
+ export function getNetrcPath() {
93
+ const home = homedir();
94
+ if (platform() === "win32") {
95
+ return join(home, "_netrc");
96
+ }
97
+ return resolve(home, ".netrc");
98
+ }
99
+ export function encodeNetrcAuth(login, password) {
100
+ const credentials = `${login}:${password}`;
101
+ return Buffer.from(credentials).toString("base64");
102
+ }
103
+ export async function applyNetrcAuth(client, host) {
104
+ const creds = await getNetrcCredentials(host);
105
+ if (creds) {
106
+ // Use login:password format as expected by Octokit's basic auth strategy
107
+ client.auth = `${creds.login}:${creds.password}`;
108
+ }
109
+ }
110
+ export function redactNetrcAuth(auth) {
111
+ if (!auth) {
112
+ return "none";
113
+ }
114
+ if (auth.startsWith("Basic ")) {
115
+ return "netrc";
116
+ }
117
+ // Detect login:password format used by netrc/basic auth
118
+ if (auth.includes(":") && !auth.startsWith("token ")) {
119
+ return "netrc";
120
+ }
121
+ return "token (redacted)";
122
+ }
123
+ //# sourceMappingURL=netrc-auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"netrc-auth.js","sourceRoot":"","sources":["../../src/netrc-auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ export type RepositoryOwnerType = "org" | "user";
2
+ export interface RepositoryMetadata {
3
+ fullName: string;
4
+ defaultBranch: string;
5
+ archived: boolean;
6
+ }
7
+ export interface OrgScanOptions {
8
+ org: string;
9
+ includePrivate: boolean;
10
+ includeArchived: boolean;
11
+ githubApiUrl?: string;
12
+ }
13
+ export interface OwnerScanOptions {
14
+ target: string;
15
+ targetType: RepositoryOwnerType;
16
+ includePrivate: boolean;
17
+ includeArchived: boolean;
18
+ githubApiUrl?: string;
19
+ }
20
+ interface RepositoryEnumerationClient {
21
+ paginate: <T>(route: unknown, params: Record<string, unknown>) => Promise<T[]>;
22
+ repos: {
23
+ listForOrg: unknown;
24
+ listForUser: unknown;
25
+ listForAuthenticatedUser: unknown;
26
+ };
27
+ users: {
28
+ getAuthenticated: () => Promise<{
29
+ data: {
30
+ login: string;
31
+ };
32
+ }>;
33
+ };
34
+ }
35
+ export declare function listOrgRepositories(options: OrgScanOptions, token?: string, client?: RepositoryEnumerationClient): Promise<string[]>;
36
+ export declare function listUserRepositories(options: Omit<OrgScanOptions, "org"> & {
37
+ user: string;
38
+ }, token?: string, client?: RepositoryEnumerationClient): Promise<string[]>;
39
+ export declare function listOwnerRepositories(options: OwnerScanOptions, token?: string, client?: RepositoryEnumerationClient): Promise<RepositoryMetadata[]>;
40
+ export declare function filterRepositories(repositories: string[], options?: {
41
+ includePatterns?: string[];
42
+ excludePatterns?: string[];
43
+ }): string[];
44
+ export declare function filterRepositoryMetadata(repositories: RepositoryMetadata[], options?: {
45
+ includePatterns?: string[];
46
+ excludePatterns?: string[];
47
+ }): RepositoryMetadata[];
48
+ export declare function normalizeAndSortRepositories(repositories: string[]): string[];
49
+ export {};