@aigne/afs-github 1.11.0-beta.6

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.
@@ -0,0 +1,431 @@
1
+ import { Octokit } from "@octokit/rest";
2
+ import { WorldMappingCore } from "@aigne/afs-world-mapping";
3
+ import { z } from "zod";
4
+ import { AFSEntry, AFSListOptions, AFSListResult, AFSModule, AFSReadOptions, AFSReadResult, AFSRoot, AFSWorldMappingCapable, ExternalRef, MappingStatus, MutateAction, MutateResult, ProjectionContext } from "@aigne/afs";
5
+
6
+ //#region src/types.d.ts
7
+ /**
8
+ * Authentication options
9
+ */
10
+ declare const authOptionsSchema: z.ZodObject<{
11
+ /** Personal Access Token */token: z.ZodOptional<z.ZodString>;
12
+ }, "strip", z.ZodTypeAny, {
13
+ token?: string | undefined;
14
+ }, {
15
+ token?: string | undefined;
16
+ }>;
17
+ type AuthOptions = z.infer<typeof authOptionsSchema>;
18
+ /**
19
+ * Cache configuration
20
+ */
21
+ declare const cacheOptionsSchema: z.ZodObject<{
22
+ /** Enable caching */enabled: z.ZodDefault<z.ZodBoolean>; /** Cache TTL in milliseconds */
23
+ ttl: z.ZodDefault<z.ZodNumber>;
24
+ }, "strip", z.ZodTypeAny, {
25
+ enabled: boolean;
26
+ ttl: number;
27
+ }, {
28
+ enabled?: boolean | undefined;
29
+ ttl?: number | undefined;
30
+ }>;
31
+ type CacheOptions = z.infer<typeof cacheOptionsSchema>;
32
+ /**
33
+ * Rate limiting configuration
34
+ */
35
+ declare const rateLimitOptionsSchema: z.ZodObject<{
36
+ /** Enable automatic retry on rate limit */autoRetry: z.ZodDefault<z.ZodBoolean>; /** Maximum retry attempts */
37
+ maxRetries: z.ZodDefault<z.ZodNumber>;
38
+ }, "strip", z.ZodTypeAny, {
39
+ autoRetry: boolean;
40
+ maxRetries: number;
41
+ }, {
42
+ autoRetry?: boolean | undefined;
43
+ maxRetries?: number | undefined;
44
+ }>;
45
+ type RateLimitOptions = z.infer<typeof rateLimitOptionsSchema>;
46
+ /**
47
+ * Access mode for the provider
48
+ */
49
+ declare const accessModeSchema: z.ZodDefault<z.ZodEnum<["readonly", "readwrite"]>>;
50
+ type AccessMode = z.infer<typeof accessModeSchema>;
51
+ /**
52
+ * Repository mode
53
+ * - single-repo: Access a single repository (requires owner and repo)
54
+ * - multi-repo: Access multiple repositories with full paths
55
+ * - org: Access all repositories in an organization (requires owner only)
56
+ */
57
+ declare const repoModeSchema: z.ZodDefault<z.ZodEnum<["single-repo", "multi-repo", "org"]>>;
58
+ type RepoMode = z.infer<typeof repoModeSchema>;
59
+ /**
60
+ * Owner type for org mode
61
+ * - org: GitHub organization (uses /orgs/{org}/repos endpoint)
62
+ * - user: GitHub user account (uses /users/{username}/repos endpoint)
63
+ * - undefined: Auto-detect (tries org first, falls back to user)
64
+ */
65
+ declare const ownerTypeSchema: z.ZodOptional<z.ZodEnum<["org", "user"]>>;
66
+ type OwnerType = z.infer<typeof ownerTypeSchema>;
67
+ /**
68
+ * Full options schema for AFSGitHub
69
+ */
70
+ declare const afsGitHubOptionsSchema: z.ZodObject<{
71
+ /** Module name */name: z.ZodDefault<z.ZodString>; /** Module description */
72
+ description: z.ZodOptional<z.ZodString>; /** Authentication */
73
+ auth: z.ZodOptional<z.ZodObject<{
74
+ /** Personal Access Token */token: z.ZodOptional<z.ZodString>;
75
+ }, "strip", z.ZodTypeAny, {
76
+ token?: string | undefined;
77
+ }, {
78
+ token?: string | undefined;
79
+ }>>; /** Repository owner (required for single-repo mode) */
80
+ owner: z.ZodOptional<z.ZodString>; /** Repository name (required for single-repo mode) */
81
+ repo: z.ZodOptional<z.ZodString>; /** Access mode */
82
+ accessMode: z.ZodOptional<z.ZodDefault<z.ZodEnum<["readonly", "readwrite"]>>>; /** Repository mode */
83
+ mode: z.ZodOptional<z.ZodDefault<z.ZodEnum<["single-repo", "multi-repo", "org"]>>>; /** Owner type (org or user). If not set, auto-detects by trying org first. */
84
+ ownerType: z.ZodOptional<z.ZodOptional<z.ZodEnum<["org", "user"]>>>; /** GitHub API base URL (for Enterprise) */
85
+ baseUrl: z.ZodDefault<z.ZodString>; /** Custom mapping path (overrides default) */
86
+ mappingPath: z.ZodOptional<z.ZodString>; /** Cache configuration */
87
+ cache: z.ZodOptional<z.ZodObject<{
88
+ /** Enable caching */enabled: z.ZodDefault<z.ZodBoolean>; /** Cache TTL in milliseconds */
89
+ ttl: z.ZodDefault<z.ZodNumber>;
90
+ }, "strip", z.ZodTypeAny, {
91
+ enabled: boolean;
92
+ ttl: number;
93
+ }, {
94
+ enabled?: boolean | undefined;
95
+ ttl?: number | undefined;
96
+ }>>; /** Rate limiting configuration */
97
+ rateLimit: z.ZodOptional<z.ZodObject<{
98
+ /** Enable automatic retry on rate limit */autoRetry: z.ZodDefault<z.ZodBoolean>; /** Maximum retry attempts */
99
+ maxRetries: z.ZodDefault<z.ZodNumber>;
100
+ }, "strip", z.ZodTypeAny, {
101
+ autoRetry: boolean;
102
+ maxRetries: number;
103
+ }, {
104
+ autoRetry?: boolean | undefined;
105
+ maxRetries?: number | undefined;
106
+ }>>; /** Default branch/ref for Contents API (optional) */
107
+ ref: z.ZodOptional<z.ZodString>;
108
+ }, "strip", z.ZodTypeAny, {
109
+ name: string;
110
+ baseUrl: string;
111
+ description?: string | undefined;
112
+ auth?: {
113
+ token?: string | undefined;
114
+ } | undefined;
115
+ owner?: string | undefined;
116
+ repo?: string | undefined;
117
+ accessMode?: "readonly" | "readwrite" | undefined;
118
+ mode?: "single-repo" | "multi-repo" | "org" | undefined;
119
+ ownerType?: "org" | "user" | undefined;
120
+ mappingPath?: string | undefined;
121
+ cache?: {
122
+ enabled: boolean;
123
+ ttl: number;
124
+ } | undefined;
125
+ rateLimit?: {
126
+ autoRetry: boolean;
127
+ maxRetries: number;
128
+ } | undefined;
129
+ ref?: string | undefined;
130
+ }, {
131
+ name?: string | undefined;
132
+ description?: string | undefined;
133
+ auth?: {
134
+ token?: string | undefined;
135
+ } | undefined;
136
+ owner?: string | undefined;
137
+ repo?: string | undefined;
138
+ accessMode?: "readonly" | "readwrite" | undefined;
139
+ mode?: "single-repo" | "multi-repo" | "org" | undefined;
140
+ ownerType?: "org" | "user" | undefined;
141
+ baseUrl?: string | undefined;
142
+ mappingPath?: string | undefined;
143
+ cache?: {
144
+ enabled?: boolean | undefined;
145
+ ttl?: number | undefined;
146
+ } | undefined;
147
+ rateLimit?: {
148
+ autoRetry?: boolean | undefined;
149
+ maxRetries?: number | undefined;
150
+ } | undefined;
151
+ ref?: string | undefined;
152
+ }>;
153
+ /**
154
+ * Input options type (what users provide, with optional fields)
155
+ */
156
+ type AFSGitHubOptions = z.input<typeof afsGitHubOptionsSchema>;
157
+ /**
158
+ * Output options type (after Zod parsing, with defaults applied)
159
+ */
160
+ type AFSGitHubOptionsParsed = z.infer<typeof afsGitHubOptionsSchema>;
161
+ /**
162
+ * Validated options with defaults applied
163
+ */
164
+ interface AFSGitHubOptionsResolved {
165
+ name: string;
166
+ description?: string;
167
+ auth?: AuthOptions;
168
+ owner?: string;
169
+ repo?: string;
170
+ accessMode: AccessMode;
171
+ mode: RepoMode;
172
+ ownerType?: OwnerType;
173
+ baseUrl: string;
174
+ mappingPath?: string;
175
+ cache: CacheOptions;
176
+ rateLimit: RateLimitOptions;
177
+ ref?: string;
178
+ }
179
+ //#endregion
180
+ //#region src/client.d.ts
181
+ /**
182
+ * GitHub Contents API item
183
+ */
184
+ interface ContentsItem {
185
+ name: string;
186
+ path: string;
187
+ type: "file" | "dir" | "symlink" | "submodule";
188
+ size: number;
189
+ sha: string;
190
+ download_url: string | null;
191
+ /** Base64 encoded content, only for files <1MB */
192
+ content?: string;
193
+ /** Encoding type, typically "base64" when content is present */
194
+ encoding?: string;
195
+ }
196
+ /**
197
+ * Response from Contents API - can be single item or array
198
+ */
199
+ type ContentsResponse = ContentsItem | ContentsItem[];
200
+ /**
201
+ * GitHub Branch item
202
+ */
203
+ interface BranchItem {
204
+ name: string;
205
+ commit: {
206
+ sha: string;
207
+ url: string;
208
+ };
209
+ protected: boolean;
210
+ }
211
+ /**
212
+ * Options for GitHubClient
213
+ */
214
+ interface GitHubClientOptions {
215
+ auth?: AuthOptions;
216
+ baseUrl?: string;
217
+ cache?: CacheOptions;
218
+ rateLimit?: RateLimitOptions;
219
+ }
220
+ /**
221
+ * GitHub API client with throttling, retry, and caching
222
+ */
223
+ declare class GitHubClient {
224
+ private octokit;
225
+ private cache;
226
+ private cacheConfig;
227
+ constructor(options: GitHubClientOptions);
228
+ /**
229
+ * Make a request to the GitHub API
230
+ */
231
+ request<T = unknown>(route: string, params?: Record<string, unknown>): Promise<{
232
+ data: T;
233
+ status: number;
234
+ headers: Record<string, string>;
235
+ }>;
236
+ /**
237
+ * Generate cache key from route and params
238
+ */
239
+ private getCacheKey;
240
+ /**
241
+ * Get from cache if not expired
242
+ */
243
+ private getFromCache;
244
+ /**
245
+ * Set cache entry
246
+ */
247
+ private setCache;
248
+ /**
249
+ * Clear the cache
250
+ */
251
+ clearCache(): void;
252
+ /**
253
+ * Get the underlying Octokit instance (for advanced usage)
254
+ */
255
+ getOctokit(): Octokit;
256
+ /**
257
+ * Get repository contents at a path
258
+ * @param owner Repository owner
259
+ * @param repo Repository name
260
+ * @param path Path within the repository (empty string for root)
261
+ * @param ref Optional branch, tag, or commit SHA
262
+ * @returns Contents item(s) - array for directories, single item for files
263
+ */
264
+ getContents(owner: string, repo: string, path: string, ref?: string): Promise<ContentsResponse>;
265
+ /**
266
+ * Get blob content for large files (>1MB)
267
+ * @param owner Repository owner
268
+ * @param repo Repository name
269
+ * @param sha Blob SHA
270
+ * @returns Decoded content as string
271
+ */
272
+ getBlob(owner: string, repo: string, sha: string): Promise<string>;
273
+ /**
274
+ * Get repository branches
275
+ * @param owner Repository owner
276
+ * @param repo Repository name
277
+ * @returns Array of branch items
278
+ */
279
+ getBranches(owner: string, repo: string): Promise<BranchItem[]>;
280
+ /**
281
+ * Get default branch for a repository
282
+ * @param owner Repository owner
283
+ * @param repo Repository name
284
+ * @returns Default branch name
285
+ */
286
+ getDefaultBranch(owner: string, repo: string): Promise<string>;
287
+ }
288
+ //#endregion
289
+ //#region src/github.d.ts
290
+ /**
291
+ * AFSGitHub Provider
292
+ *
293
+ * Provides access to GitHub Issues, Pull Requests, and Actions through AFS.
294
+ *
295
+ * @example
296
+ * ```typescript
297
+ * const github = new AFSGitHub({
298
+ * auth: { token: process.env.GITHUB_TOKEN },
299
+ * owner: "aigne",
300
+ * repo: "afs",
301
+ * });
302
+ *
303
+ * // Mount to AFS
304
+ * afs.mount("/github", github);
305
+ *
306
+ * // List issues
307
+ * const issues = await afs.list("/github/issues");
308
+ * ```
309
+ */
310
+ declare class AFSGitHub implements AFSModule, AFSWorldMappingCapable {
311
+ readonly name: string;
312
+ readonly description?: string;
313
+ readonly accessMode: "readonly" | "readwrite";
314
+ private options;
315
+ private client;
316
+ private compiled;
317
+ private mappingPath;
318
+ private mappingLoadedAt?;
319
+ private mappingError?;
320
+ /** World mapping core for schema-level path resolution and field projection (Level 1) */
321
+ readonly worldCore: WorldMappingCore;
322
+ constructor(options: AFSGitHubOptions);
323
+ /**
324
+ * Load the default mapping configuration
325
+ */
326
+ private loadDefaultMapping;
327
+ /**
328
+ * Get default route definitions
329
+ * This is used when loading mapping synchronously
330
+ */
331
+ private getDefaultRoutes;
332
+ /**
333
+ * Get default world schema for GitHub
334
+ * Defines Issue, PullRequest, Comment as world kinds
335
+ */
336
+ private getDefaultWorldSchema;
337
+ /**
338
+ * Get default world binding for GitHub
339
+ * Maps world fields to GitHub API response fields
340
+ */
341
+ private getDefaultWorldBinding;
342
+ onMount?(_root: AFSRoot): void;
343
+ /**
344
+ * Resolve a path based on mode
345
+ * - single-repo: prepend owner/repo
346
+ * - org: prepend owner (org name)
347
+ * - multi-repo: pass through
348
+ */
349
+ resolvePath(path: string): string;
350
+ /**
351
+ * Get virtual directory structure for root path
352
+ * Returns the available resource types (issues, pulls, repo)
353
+ */
354
+ private getVirtualDirectories;
355
+ /**
356
+ * Check if path is root or empty
357
+ */
358
+ private isRootPath;
359
+ /**
360
+ * Get root entry (the mount point itself)
361
+ */
362
+ private getRootEntry;
363
+ /**
364
+ * Get virtual directories for a repo (issues, pulls, repo)
365
+ */
366
+ private getRepoVirtualDirectories;
367
+ /**
368
+ * Check if a path represents a repo root in org mode
369
+ * e.g., "/reponame" without /issues or /pulls suffix
370
+ */
371
+ private isRepoRootPath;
372
+ /**
373
+ * Format a user-friendly error message based on the error type
374
+ */
375
+ private formatErrorMessage;
376
+ /**
377
+ * Check if a path is a repo path (should be routed to Contents API)
378
+ * - Single-repo mode: /repo or /repo/*
379
+ * - Org mode: /{repoName}/repo or /{repoName}/repo/*
380
+ */
381
+ private isRepoPath;
382
+ /**
383
+ * Parse a repo path into owner, repo name, branch, and file path
384
+ * Structure: /repo/{branch}/{filePath}
385
+ * - Single-repo mode: /repo/main/src/index.ts -> { owner, repo, branch: "main", filePath: "src/index.ts" }
386
+ * - Org mode: /afs/repo/main/src/index.ts -> { owner, repo: "afs", branch: "main", filePath: "src/index.ts" }
387
+ */
388
+ private parseRepoPath;
389
+ /**
390
+ * Build the path prefix for a repo entry
391
+ */
392
+ private getRepoPathPrefix;
393
+ /**
394
+ * List repository contents via GitHub Contents API
395
+ * - /repo -> list all branches
396
+ * - /repo/{branch} -> list branch root
397
+ * - /repo/{branch}/path -> list contents at path
398
+ */
399
+ private listViaContentsAPI;
400
+ /**
401
+ * Read file content via GitHub Contents API
402
+ * Path format: /repo/{branch}/{filePath}
403
+ */
404
+ private readViaContentsAPI;
405
+ /**
406
+ * List organization or user repositories
407
+ * Uses ownerType if specified, otherwise tries org endpoint first and falls back to user
408
+ */
409
+ private listOrgRepos;
410
+ /**
411
+ * Fetch all repos with pagination support
412
+ */
413
+ private fetchAllRepos;
414
+ /**
415
+ * List entries at a path
416
+ */
417
+ list(path: string, options?: AFSListOptions): Promise<AFSListResult>;
418
+ /**
419
+ * Read a single entry
420
+ */
421
+ read(path: string, options?: AFSReadOptions): Promise<AFSReadResult>;
422
+ loadMapping(mappingPath: string): Promise<void>;
423
+ reloadMapping(): Promise<void>;
424
+ getMappingStatus(): MappingStatus;
425
+ resolve(path: string): ExternalRef | null;
426
+ project(externalData: unknown, context: ProjectionContext): AFSEntry[];
427
+ mutate(_path: string, _action: MutateAction, _payload: unknown): Promise<MutateResult>;
428
+ }
429
+ //#endregion
430
+ export { AFSGitHub, AFSGitHubOptions, AFSGitHubOptionsParsed, AFSGitHubOptionsResolved, AccessMode, AuthOptions, BranchItem, CacheOptions, ContentsItem, ContentsResponse, GitHubClient, GitHubClientOptions, OwnerType, RateLimitOptions, RepoMode, accessModeSchema, afsGitHubOptionsSchema, authOptionsSchema, cacheOptionsSchema, ownerTypeSchema, rateLimitOptionsSchema, repoModeSchema };
431
+ //# sourceMappingURL=index.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../src/types.ts","../src/client.ts","../src/github.ts"],"mappings":"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"}