@foss.global/gitmanager 0.3.0 → 0.4.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/changelog.md CHANGED
@@ -1,5 +1,18 @@
1
1
  # Changelog
2
2
 
3
+ ## 2026-07-20 - 0.4.0
4
+
5
+ ### Features
6
+
7
+ - add bounded read-only Git Smart HTTP transport (git)
8
+ - Serve clone and fetch through the Rust engine with Git protocol v0, v1, and v2 upload-pack support.
9
+ - Add default-deny repository access, revision-aware visibility updates, loopback-safe binding, transfer concurrency, request/response limits, timeouts, and graceful shutdown.
10
+ - Reject receive-pack and mask unavailable repositories with the same not-found response.
11
+
12
+ ### Maintenance
13
+
14
+ - adopt `@foss.global/interfaces` 0.4 and update policy-eligible development tooling versions (tooling)
15
+
3
16
  ## 2026-06-23 - 0.3.0
4
17
 
5
18
  ### Features
@@ -3,7 +3,7 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@foss.global/gitmanager',
6
- version: '0.3.0',
6
+ version: '0.4.0',
7
7
  description: 'Headless Git manager for the foss.global Git platform, with a TypeScript API and Rust engine.'
8
8
  };
9
9
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSx5QkFBeUI7SUFDL0IsT0FBTyxFQUFFLE9BQU87SUFDaEIsV0FBVyxFQUFFLCtGQUErRjtDQUM3RyxDQUFBIn0=
@@ -1,5 +1,5 @@
1
1
  import * as plugins from './plugins.js';
2
- import type { IGitManagerCommitDetail, IGitManagerCommitRequest, IGitManagerCommitSummary, IGitManagerDiff, IGitManagerDiffRequest, IGitManagerFileContent, IGitManagerImportMirrorRequest, IGitManagerInitBareRepositoryRequest, IGitManagerListCommitsRequest, IGitManagerListTagsRequest, IGitManagerReadFileRequest, IGitManagerRef, IGitManagerRefRequest, IGitManagerRepositoryInfo, IGitManagerStatus, IGitManagerTag, IGitManagerTagRequest, IGitManagerTreeEntry, IGitManagerTreeRequest, IGitManagerOptions } from './models.js';
2
+ import type { IGitManagerCommitDetail, IGitManagerCommitRequest, IGitManagerCommitSummary, IGitManagerDiff, IGitManagerDiffRequest, IGitManagerFileContent, IGitManagerImportMirrorRequest, IGitManagerInitBareRepositoryRequest, IGitManagerListCommitsRequest, IGitManagerListTagsRequest, IGitManagerReadFileRequest, IGitManagerRef, IGitManagerRefRequest, IGitManagerRepositorySelector, IGitManagerRepositoryInfo, IGitManagerSmartHttpRepositoryAccess, IGitManagerSmartHttpRepositoryVisibility, IGitManagerStatus, IGitManagerTag, IGitManagerTagRequest, IGitManagerTreeEntry, IGitManagerTreeRequest, IGitManagerOptions } from './models.js';
3
3
  export declare class GitManager extends plugins.EventEmitter {
4
4
  private bridge;
5
5
  private started;
@@ -10,9 +10,13 @@ export declare class GitManager extends plugins.EventEmitter {
10
10
  start(): Promise<void>;
11
11
  stop(): Promise<void>;
12
12
  getStatus(): Promise<IGitManagerStatus>;
13
+ setSmartHttpRepositoryAccess(accessArg: IGitManagerSmartHttpRepositoryAccess): Promise<void>;
14
+ setSmartHttpRepositoryVisibility(visibilityArg: IGitManagerSmartHttpRepositoryVisibility): Promise<void>;
13
15
  get running(): boolean;
14
16
  initBareRepository(requestArg: IGitManagerInitBareRepositoryRequest): Promise<IGitManagerRepositoryInfo>;
15
17
  importMirror(requestArg: IGitManagerImportMirrorRequest): Promise<IGitManagerRepositoryInfo>;
18
+ refreshMirror(requestArg: IGitManagerRepositorySelector): Promise<IGitManagerRepositoryInfo>;
19
+ verifyRepository(requestArg: IGitManagerRepositorySelector): Promise<IGitManagerRepositoryInfo>;
16
20
  listRepositories(): Promise<IGitManagerRepositoryInfo[]>;
17
21
  listRefs(requestArg: IGitManagerRefRequest): Promise<IGitManagerRef[]>;
18
22
  listTree(requestArg: IGitManagerTreeRequest): Promise<IGitManagerTreeEntry[]>;
@@ -7,8 +7,28 @@ export class GitManager extends plugins.EventEmitter {
7
7
  this.started = false;
8
8
  this.startPromise = null;
9
9
  this.stopRequested = false;
10
+ const smartHttpOptions = optionsArg.smartHttp;
10
11
  this.config = {
11
12
  dataDir: optionsArg.dataDir ?? plugins.path.resolve(process.cwd(), '.nogit', 'gitmanager'),
13
+ smartHttp: smartHttpOptions && smartHttpOptions.enabled !== false
14
+ ? {
15
+ bindAddress: smartHttpOptions.bindAddress ?? '127.0.0.1',
16
+ port: smartHttpOptions.port ?? 0,
17
+ allowUnsafeNonLoopback: smartHttpOptions.allowUnsafeNonLoopback ?? false,
18
+ allowAllRepositories: smartHttpOptions.allowAllRepositories ?? false,
19
+ allowedRepositories: smartHttpOptions.allowedRepositories?.map((repository) => ({
20
+ org: repository.org,
21
+ repo: repository.repo,
22
+ })) ?? [],
23
+ maxConcurrentTransfers: smartHttpOptions.maxConcurrentTransfers ?? 32,
24
+ maxRequestBodyBytes: smartHttpOptions.maxRequestBodyBytes ?? 16 * 1024 * 1024,
25
+ maxAdvertisementBytes: smartHttpOptions.maxAdvertisementBytes ?? 4 * 1024 * 1024,
26
+ maxResponseBytes: smartHttpOptions.maxResponseBytes ?? 4 * 1024 * 1024 * 1024,
27
+ processTimeoutMs: smartHttpOptions.processTimeoutMs ?? 30 * 60 * 1000,
28
+ idleTimeoutSeconds: smartHttpOptions.idleTimeoutSeconds ?? 300,
29
+ gracefulShutdownMs: smartHttpOptions.gracefulShutdownMs ?? 10_000,
30
+ }
31
+ : undefined,
12
32
  };
13
33
  this.bridge.on('exit', (code, signal) => {
14
34
  this.started = false;
@@ -61,6 +81,25 @@ export class GitManager extends plugins.EventEmitter {
61
81
  }
62
82
  return this.bridge.getStatus();
63
83
  }
84
+ async setSmartHttpRepositoryAccess(accessArg) {
85
+ this.assertRunning();
86
+ return this.bridge.setSmartHttpRepositoryAccess({
87
+ allowAllRepositories: accessArg.allowAllRepositories,
88
+ allowedRepositories: accessArg.allowedRepositories.map((repository) => ({
89
+ org: repository.org,
90
+ repo: repository.repo,
91
+ })),
92
+ });
93
+ }
94
+ async setSmartHttpRepositoryVisibility(visibilityArg) {
95
+ this.assertRunning();
96
+ return this.bridge.setSmartHttpRepositoryVisibility({
97
+ org: visibilityArg.org,
98
+ repo: visibilityArg.repo,
99
+ public: visibilityArg.public,
100
+ revision: visibilityArg.revision,
101
+ });
102
+ }
64
103
  get running() {
65
104
  return this.started && this.bridge.running;
66
105
  }
@@ -72,6 +111,14 @@ export class GitManager extends plugins.EventEmitter {
72
111
  this.assertRunning();
73
112
  return this.bridge.importMirror(requestArg);
74
113
  }
114
+ async refreshMirror(requestArg) {
115
+ this.assertRunning();
116
+ return this.bridge.refreshMirror(requestArg);
117
+ }
118
+ async verifyRepository(requestArg) {
119
+ this.assertRunning();
120
+ return this.bridge.verifyRepository(requestArg);
121
+ }
75
122
  async listRepositories() {
76
123
  this.assertRunning();
77
124
  return this.bridge.listRepositories();
@@ -143,4 +190,4 @@ export class GitManager extends plugins.EventEmitter {
143
190
  }
144
191
  }
145
192
  }
146
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5naXRtYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvY2xhc3Nlcy5naXRtYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBd0J4QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUVuRSxNQUFNLE9BQU8sVUFBVyxTQUFRLE9BQU8sQ0FBQyxZQUFZO0lBT2xELFlBQVksYUFBaUMsRUFBRTtRQUM3QyxLQUFLLEVBQUUsQ0FBQztRQVBGLFdBQU0sR0FBRyxJQUFJLG9CQUFvQixFQUFFLENBQUM7UUFDcEMsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUNoQixpQkFBWSxHQUF5QixJQUFJLENBQUM7UUFDMUMsa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFLNUIsSUFBSSxDQUFDLE1BQU0sR0FBRztZQUNaLE9BQU8sRUFBRSxVQUFVLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxRQUFRLEVBQUUsWUFBWSxDQUFDO1NBQzNGLENBQUM7UUFDRixJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFtQixFQUFFLE1BQXFCLEVBQUUsRUFBRTtZQUNwRSxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztZQUNyQixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDbEMsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxJQUFZLEVBQUUsRUFBRTtZQUN4QyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFF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VUFBVSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVNLEtBQUssQ0FBQyxRQUFRLENBQUMsVUFBc0M7UUFDMUQsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVNLEtBQUssQ0FBQyxXQUFXLENBQUMsVUFBeUM7UUFDaEUsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVNLEtBQUssQ0FBQyxTQUFTLENBQUMsVUFBb0M7UUFDekQsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVNLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBa0M7UUFDckQsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVNLEtBQUssQ0FBQyxRQUFRLENBQUMsVUFBc0M7UUFDMUQsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVNLEtBQUssQ0FBQyxNQUFNLENBQUMsVUFBaUM7UUFDbkQsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVPLEtBQUssQ0FBQyxhQUFhO1FBQ3pCLE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUMxQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDYixNQUFNLElBQUksS0FBSyxDQUFDLHVDQUF1QyxDQUFDLENBQUM7UUFDM0QsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDbkIsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO1FBQ3BELENBQUM7UUFFRCxJQUFJLENBQUM7WUFDSCxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUMvQyxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDdkIsSUFBSSxDQUFDO29CQUNILE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDckMsQ0FBQzt3QkFBUyxDQUFDO29CQUNULElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7b0JBQ25CLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO2dCQUN2QixDQUFDO2dCQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztZQUNwRCxDQUFDO1lBQ0QsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDdEIsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1lBQ3JCLE1BQU0sS0FBSyxDQUFDO1FBQ2QsQ0FBQztJQUNILENBQUM7SUFFTyxhQUFhO1FBQ25CLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDbEIsTUFBTSxJQUFJLEtBQUssQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1FBQy9DLENBQUM7SUFDSCxDQUFDO0NBQ0YifQ==
193
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5naXRtYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvY2xhc3Nlcy5naXRtYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBMkJ4QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUVuRSxNQUFNLE9BQU8sVUFBVyxTQUFRLE9BQU8sQ0FBQyxZQUFZO0lBT2xELFlBQVksYUFBaUMsRUFBRTtRQUM3QyxLQUFLLEVBQUUsQ0FBQztRQVBGLFdBQU0sR0FBRyxJQUFJLG9CQUFvQixFQUFFLENBQUM7UUFDcEMsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUNoQixpQkFBWSxHQUF5QixJQUFJLENBQUM7UUFDMUMsa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFLNUIsTUFBTSxnQkFBZ0IsR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDO1FBQzlDLElBQUksQ0FBQyxNQUFNLEdBQUc7WUFDWixPQUFPLEVBQUUsVUFBVSxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsUUFBUSxFQUFFLFlBQVksQ0FBQztZQUMxRixTQUFTLEVBQUUsZ0JBQWdCLElBQUksZ0JBQWdCLENBQUMsT0FBTyxLQUFLLEtBQUs7Z0JBQy9ELENBQUMsQ0FBQztvQkFDRSxXQUFXLEVBQUUsZ0JBQWdCLENBQUMsV0FBVyxJQUFJLFdBQVc7b0JBQ3hELElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxJQUFJLElBQUksQ0FBQztvQkFDaEMsc0JBQXNCLEVBQUUsZ0JBQWdCLENBQUMsc0JBQXNCLElBQUksS0FBSztvQkFDeEUsb0JBQW9CLEVBQUUsZ0JBQWdCLENBQUMsb0JBQW9CLElBQUksS0FBSztvQkFDcEUsbUJBQW1CLEVBQUUsZ0JBQWdCLENBQUMsbUJBQW1CLEVBQUUsR0FBRyxDQUFDLENBQUMs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
@@ -1,12 +1,59 @@
1
+ import type { IGitManagerRepositorySelector } from '@foss.global/interfaces';
2
+ export interface IGitManagerSmartHttpOptions {
3
+ enabled?: boolean;
4
+ bindAddress?: string;
5
+ port?: number;
6
+ allowUnsafeNonLoopback?: boolean;
7
+ allowAllRepositories?: boolean;
8
+ allowedRepositories?: IGitManagerRepositorySelector[];
9
+ maxConcurrentTransfers?: number;
10
+ maxRequestBodyBytes?: number;
11
+ maxAdvertisementBytes?: number;
12
+ maxResponseBytes?: number;
13
+ processTimeoutMs?: number;
14
+ idleTimeoutSeconds?: number;
15
+ gracefulShutdownMs?: number;
16
+ }
17
+ export interface IGitManagerSmartHttpRepositoryAccess {
18
+ allowAllRepositories: boolean;
19
+ allowedRepositories: IGitManagerRepositorySelector[];
20
+ }
21
+ export interface IGitManagerSmartHttpRepositoryVisibility extends IGitManagerRepositorySelector {
22
+ public: boolean;
23
+ revision: number;
24
+ }
1
25
  export interface IGitManagerOptions {
2
26
  dataDir?: string;
27
+ smartHttp?: IGitManagerSmartHttpOptions;
28
+ }
29
+ export interface IRustGitManagerSmartHttpConfig {
30
+ bindAddress: string;
31
+ port: number;
32
+ allowUnsafeNonLoopback: boolean;
33
+ allowAllRepositories: boolean;
34
+ allowedRepositories: IGitManagerRepositorySelector[];
35
+ maxConcurrentTransfers: number;
36
+ maxRequestBodyBytes: number;
37
+ maxAdvertisementBytes: number;
38
+ maxResponseBytes: number;
39
+ processTimeoutMs: number;
40
+ idleTimeoutSeconds: number;
41
+ gracefulShutdownMs: number;
3
42
  }
4
43
  export interface IRustGitManagerConfig {
5
44
  dataDir: string;
45
+ smartHttp?: IRustGitManagerSmartHttpConfig;
46
+ }
47
+ export interface IGitManagerSmartHttpStatus {
48
+ running: boolean;
49
+ bindAddress: string;
50
+ port: number;
51
+ baseUrl: string;
6
52
  }
7
53
  export interface IGitManagerStatus {
8
54
  running: boolean;
9
55
  dataDir: string;
10
56
  uptimeMs: number;
57
+ smartHttp?: IGitManagerSmartHttpStatus;
11
58
  }
12
59
  export type { IGitManagerCommitDetail, IGitManagerCommitRequest, IGitManagerCommitSummary, IGitManagerDiff, IGitManagerDiffFile, IGitManagerDiffHunk, IGitManagerDiffLine, IGitManagerDiffRequest, IGitManagerDiffStats, IGitManagerFileContent, IGitManagerImportMirrorRequest, IGitManagerInitBareRepositoryRequest, IGitManagerListCommitsRequest, IGitManagerListTagsRequest, IGitManagerReadFileRequest, IGitManagerRef, IGitManagerRefRequest, IGitManagerRepositoryInfo, IGitManagerRepositorySelector, IGitManagerTag, IGitManagerTagRequest, IGitManagerTreeEntry, IGitManagerTreeRequest, TGitManagerDiffFileStatus, TGitManagerDiffLineKind, TGitManagerObjectType, TGitManagerRefType, TGitManagerTreeEntryType, } from '@foss.global/interfaces';
@@ -1,5 +1,5 @@
1
1
  import * as plugins from './plugins.js';
2
- import type { IGitManagerCommitDetail, IGitManagerCommitRequest, IGitManagerCommitSummary, IGitManagerDiff, IGitManagerDiffRequest, IGitManagerFileContent, IGitManagerImportMirrorRequest, IGitManagerInitBareRepositoryRequest, IGitManagerListCommitsRequest, IGitManagerListTagsRequest, IGitManagerReadFileRequest, IGitManagerRef, IGitManagerRefRequest, IGitManagerRepositoryInfo, IGitManagerStatus, IGitManagerTag, IGitManagerTagRequest, IGitManagerTreeEntry, IGitManagerTreeRequest, IRustGitManagerConfig } from './models.js';
2
+ import type { IGitManagerCommitDetail, IGitManagerCommitRequest, IGitManagerCommitSummary, IGitManagerDiff, IGitManagerDiffRequest, IGitManagerFileContent, IGitManagerImportMirrorRequest, IGitManagerInitBareRepositoryRequest, IGitManagerListCommitsRequest, IGitManagerListTagsRequest, IGitManagerReadFileRequest, IGitManagerRef, IGitManagerRefRequest, IGitManagerRepositorySelector, IGitManagerRepositoryInfo, IGitManagerSmartHttpRepositoryAccess, IGitManagerSmartHttpRepositoryVisibility, IGitManagerStatus, IGitManagerTag, IGitManagerTagRequest, IGitManagerTreeEntry, IGitManagerTreeRequest, IRustGitManagerConfig } from './models.js';
3
3
  export declare class RustGitManagerBridge extends plugins.EventEmitter {
4
4
  private bridge;
5
5
  constructor();
@@ -9,8 +9,12 @@ export declare class RustGitManagerBridge extends plugins.EventEmitter {
9
9
  startGitManager(configArg: IRustGitManagerConfig): Promise<void>;
10
10
  stopGitManager(): Promise<void>;
11
11
  getStatus(): Promise<IGitManagerStatus>;
12
+ setSmartHttpRepositoryAccess(accessArg: IGitManagerSmartHttpRepositoryAccess): Promise<void>;
13
+ setSmartHttpRepositoryVisibility(visibilityArg: IGitManagerSmartHttpRepositoryVisibility): Promise<void>;
12
14
  initBareRepository(requestArg: IGitManagerInitBareRepositoryRequest): Promise<IGitManagerRepositoryInfo>;
13
15
  importMirror(requestArg: IGitManagerImportMirrorRequest): Promise<IGitManagerRepositoryInfo>;
16
+ refreshMirror(requestArg: IGitManagerRepositorySelector): Promise<IGitManagerRepositoryInfo>;
17
+ verifyRepository(requestArg: IGitManagerRepositorySelector): Promise<IGitManagerRepositoryInfo>;
14
18
  listRepositories(): Promise<IGitManagerRepositoryInfo[]>;
15
19
  listRefs(requestArg: IGitManagerRefRequest): Promise<IGitManagerRef[]>;
16
20
  listTree(requestArg: IGitManagerTreeRequest): Promise<IGitManagerTreeEntry[]>;
@@ -58,12 +58,24 @@ export class RustGitManagerBridge extends plugins.EventEmitter {
58
58
  async getStatus() {
59
59
  return this.bridge.sendCommand('getStatus', {});
60
60
  }
61
+ async setSmartHttpRepositoryAccess(accessArg) {
62
+ await this.bridge.sendCommand('setSmartHttpRepositoryAccess', accessArg);
63
+ }
64
+ async setSmartHttpRepositoryVisibility(visibilityArg) {
65
+ await this.bridge.sendCommand('setSmartHttpRepositoryVisibility', visibilityArg);
66
+ }
61
67
  async initBareRepository(requestArg) {
62
68
  return this.bridge.sendCommand('initBareRepository', requestArg);
63
69
  }
64
70
  async importMirror(requestArg) {
65
71
  return this.bridge.sendCommand('importMirror', requestArg);
66
72
  }
73
+ async refreshMirror(requestArg) {
74
+ return this.bridge.sendCommand('refreshMirror', requestArg);
75
+ }
76
+ async verifyRepository(requestArg) {
77
+ return this.bridge.sendCommand('verifyRepository', requestArg);
78
+ }
67
79
  async listRepositories() {
68
80
  return this.bridge.sendCommand('listRepositories', {});
69
81
  }
@@ -92,4 +104,4 @@ export class RustGitManagerBridge extends plugins.EventEmitter {
92
104
  return this.bridge.sendCommand('getTag', requestArg);
93
105
  }
94
106
  }
95
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVzdC1naXRtYW5hZ2VyLWJyaWRnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3J1c3QtZ2l0bWFuYWdlci1icmlkZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxjQUFjLENBQUM7QUF5Q3hDLFNBQVMsY0FBYztJQUNyQixNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDakYsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDN0MsQ0FBQztBQUVELFNBQVMsdUJBQXVCO0lBQzlCLE1BQU0sT0FBTyxHQUEyQixFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxDQUFDO0lBQ3pFLE1BQU0sS0FBSyxHQUEyQixFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDO0lBQzFFLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDbkMsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNuQyxPQUFPLEVBQUUsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDN0MsQ0FBQztBQUVELFNBQVMsZUFBZTtJQUN0QixNQUFNLFdBQVcsR0FBRyxjQUFjLEVBQUUsQ0FBQztJQUNyQyxNQUFNLE1BQU0sR0FBRyx1QkFBdUIsRUFBRSxDQUFDO0lBQ3pDLE1BQU0sS0FBSyxHQUFhLEVBQUUsQ0FBQztJQUUzQixJQUFJLE1BQU0sRUFBRSxD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
107
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVzdC1naXRtYW5hZ2VyLWJyaWRnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3J1c3QtZ2l0bWFuYWdlci1icmlkZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxjQUFjLENBQUM7QUFnRHhDLFNBQVMsY0FBYztJQUNyQixNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDakYsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDN0MsQ0FBQztBQUVELFNBQVMsdUJBQXVCO0lBQzlCLE1BQU0sT0FBTyxHQUEyQixFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxDQUFDO0lBQ3pFLE1BQU0sS0FBSyxHQUEyQixFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDO0lBQzFFLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDbkMsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNuQyxPQUFPLEVBQUUsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDN0MsQ0FBQztBQUVELFNBQVMsZUFBZTtJQUN0QixNQUFNLFdBQVcsR0FBRyxjQUFjLEVBQUUsQ0FBQztJQUNyQyxNQUFNLE1BQU0sR0FBRyx1QkFBdUIsRUFBRSxDQUFDO0lBQ3pDLE1BQU0sS0FBSyxHQUFhLEVBQUUsQ0FBQztJQUUzQixJQUFJLE1BQU0sRUFBRSxD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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@foss.global/gitmanager",
3
- "version": "0.3.0",
3
+ "version": "0.4.0",
4
4
  "private": false,
5
5
  "description": "Headless Git manager for the foss.global Git platform, with a TypeScript API and Rust engine.",
6
6
  "exports": {
@@ -10,16 +10,16 @@
10
10
  "author": "Task Venture Capital GmbH",
11
11
  "license": "MIT",
12
12
  "dependencies": {
13
- "@foss.global/interfaces": "^0.3.0",
13
+ "@foss.global/interfaces": "^0.4.0",
14
14
  "@push.rocks/smartrust": "^1.4.0"
15
15
  },
16
16
  "devDependencies": {
17
17
  "@git.zone/tsbuild": "^4.4.2",
18
18
  "@git.zone/tsdoc": "^2.1.1",
19
- "@git.zone/tsrun": "^2.0.4",
19
+ "@git.zone/tsrun": "^2.0.5",
20
20
  "@git.zone/tsrust": "^1.6.0",
21
21
  "@git.zone/tstest": "^3.6.6",
22
- "@types/node": "^26.0.0"
22
+ "@types/node": "^26.1.1"
23
23
  },
24
24
  "files": [
25
25
  "ts/**/*",
package/readme.md CHANGED
@@ -4,7 +4,7 @@ Headless Git manager for the foss.global Git platform.
4
4
 
5
5
  This package follows the push.rocks Rust-backed package pattern: TypeScript owns the public package API and lifecycle, while Rust owns the Git/storage/protocol engine. TypeScript controls the Rust binary through `@push.rocks/smartrust`, and builds use `@git.zone/tsrust`.
6
6
 
7
- The current implementation provides lifecycle IPC plus initial local bare repository management and read APIs. Git protocol serving, mirror refresh, authorization, and write/admin features are planned in `../readme.plan.md`.
7
+ The current implementation provides lifecycle IPC, local bare repository and mirror management, bounded read APIs, and a read-only Git Smart HTTP transport for clone and fetch. SSH transport, authenticated private-repository serving, and write/admin features are outside this package's current scope.
8
8
 
9
9
  ## Issue Reporting and Security
10
10
 
@@ -47,12 +47,82 @@ const readme = await gitManager.readFile({
47
47
  await gitManager.stop();
48
48
  ```
49
49
 
50
+ ## Read-only Git Smart HTTP
51
+
52
+ Smart HTTP is disabled unless a `smartHttp` options object is provided. The safe defaults bind to loopback on an operating-system-assigned port and expose no repositories:
53
+
54
+ ```ts
55
+ const gitManager = new GitManager({
56
+ dataDir: '/var/lib/foss-global/gitmanager',
57
+ smartHttp: {
58
+ allowedRepositories: [
59
+ { org: 'foss.global', repo: 'interfaces' },
60
+ ],
61
+ },
62
+ });
63
+
64
+ await gitManager.start();
65
+ const status = await gitManager.getStatus();
66
+ console.log(status.smartHttp?.baseUrl);
67
+ ```
68
+
69
+ The server implements `git-upload-pack` for clone and fetch with Git protocol versions 0, 1, and 2. `git-receive-pack` is disabled. Missing and inaccessible repositories both return the same not-found response.
70
+
71
+ The transport has no TLS termination or authenticated private-repository access. Keep it on loopback behind a bounded ingress that owns TLS and authentication. Binding to a non-loopback IP is rejected unless `allowUnsafeNonLoopback: true` is set explicitly.
72
+
73
+ Smart HTTP option defaults and accepted ranges:
74
+
75
+ All numeric options must be integers.
76
+
77
+ - `enabled`: enabled when the `smartHttp` object is present unless explicitly `false`.
78
+ - `bindAddress`: `127.0.0.1`; must be an IP address.
79
+ - `port`: `0`, allowing the operating system to select an available port; accepted range 0–65,535.
80
+ - `allowUnsafeNonLoopback`: `false`.
81
+ - `allowAllRepositories`: `false`.
82
+ - `allowedRepositories`: `[]`, with at most 100,000 entries.
83
+ - `maxConcurrentTransfers`: `32`; accepted range 1–1,024.
84
+ - `maxRequestBodyBytes`: 16 MiB; accepted range 1 KiB–64 MiB.
85
+ - `maxAdvertisementBytes`: 4 MiB; accepted range 1 KiB–64 MiB.
86
+ - `maxResponseBytes`: 4 GiB; accepted range 1 MiB–16 TiB.
87
+ - `processTimeoutMs`: 1,800,000; accepted range 1,000–86,400,000.
88
+ - `idleTimeoutSeconds`: `300`; accepted range 1–3,600.
89
+ - `gracefulShutdownMs`: `10,000`; accepted range 100–60,000.
90
+
91
+ While the service is running, access can be replaced atomically:
92
+
93
+ ```ts
94
+ await gitManager.setSmartHttpRepositoryAccess({
95
+ allowAllRepositories: false,
96
+ allowedRepositories: [
97
+ { org: 'foss.global', repo: 'interfaces' },
98
+ { org: 'foss.global', repo: 'gitmanager' },
99
+ ],
100
+ });
101
+ ```
102
+
103
+ `setSmartHttpRepositoryAccess()` replaces the complete allow-all/allowlist state and resets per-repository visibility revision watermarks. For ordered visibility events, keep `allowAllRepositories` disabled and update one repository at a time:
104
+
105
+ ```ts
106
+ await gitManager.setSmartHttpRepositoryVisibility({
107
+ org: 'foss.global',
108
+ repo: 'gitmanager',
109
+ public: true,
110
+ revision: 42,
111
+ });
112
+ ```
113
+
114
+ Use monotonic, non-negative safe integers for `revision`. Stale revisions are ignored, equal revisions are idempotent when their visibility matches, conflicting equal revisions fail, and newer revisions replace the previous visibility state.
115
+
116
+ When enabled, `getStatus().smartHttp` reports `{ running, bindAddress, port, baseUrl }`. The server also exposes `GET /healthz` for a local ingress health check.
117
+
50
118
  ## Public API
51
119
 
52
120
  - `GitManager`: TypeScript facade for the Rust engine lifecycle.
53
121
  - `GitManager.start()`: spawns the Rust binary through `smartrust` and starts the engine.
54
122
  - `GitManager.stop()`: asks the engine to stop and always kills the bridge process in cleanup.
55
- - `GitManager.getStatus()`: returns `{ running, dataDir, uptimeMs }`.
123
+ - `GitManager.getStatus()`: returns `{ running, dataDir, uptimeMs, smartHttp? }`.
124
+ - `GitManager.setSmartHttpRepositoryAccess()`: atomically replaces the running Smart HTTP allow-all/allowlist state.
125
+ - `GitManager.setSmartHttpRepositoryVisibility()`: applies one revision-ordered repository visibility update.
56
126
  - `GitManager.initBareRepository()`: creates an empty local bare repository.
57
127
  - `GitManager.importMirror()`: imports a remote repository with `git clone --mirror`. Supported remote forms are `https://`, `http://`, `ssh://`, `git://`, `file://`, and SCP-like `git@host:org/repo.git` URLs.
58
128
  - `GitManager.listRepositories()`: lists local repositories managed below the configured data directory.
@@ -70,9 +140,9 @@ await gitManager.stop();
70
140
 
71
141
  Repository/read DTO contracts are re-exported from the published `@foss.global/interfaces` package.
72
142
 
73
- Read/list APIs go through JSON IPC. Git packfile streaming for clone/fetch/push must not go through JSON IPC; future Git HTTP/SSH transport work belongs in the Rust engine or controlled Git subprocesses.
143
+ Read/list APIs go through JSON IPC. Git packfile streaming for clone and fetch is served directly by the Rust engine through controlled `git upload-pack` subprocesses; packfiles do not pass through JSON IPC. Push is not supported.
74
144
 
75
- The initial read APIs use the system `git` CLI with explicit arguments, non-interactive environment variables, command timeouts, ref-to-object-id resolution, path validation, bounded stdout/stderr capture, ref/tree result caps, and a 1 MiB file read cap.
145
+ Read APIs and Smart HTTP use the system `git` CLI with explicit arguments, non-interactive environment variables, command timeouts, ref-to-object-id resolution, path validation, bounded stdout/stderr capture, ref/tree result caps, and a 1 MiB file read cap.
76
146
 
77
147
  ## Rust Build
78
148
 
@@ -93,7 +163,7 @@ pnpm run test:rust
93
163
  pnpm run build
94
164
  ```
95
165
 
96
- `pnpm test` runs the `pretest` hook first, which builds the Rust binaries with `tsrust`, and then runs lifecycle plus local mirror import/read API tests through `smartrust`.
166
+ `pnpm test` runs the `pretest` hook first, which builds the Rust binaries with `tsrust`, and then runs lifecycle, local mirror/read API, and bounded Smart HTTP clone/fetch tests through `smartrust`.
97
167
 
98
168
  ## License and Legal Information
99
169
 
package/thirdparty.md CHANGED
@@ -11,6 +11,9 @@ This package bundles Rust binaries in `dist_rust/`. Those binaries are built fro
11
11
  | anstyle-query | 1.1.5 | Apache-2.0 OR MIT |
12
12
  | anstyle-wincon | 3.0.11 | Apache-2.0 OR MIT |
13
13
  | anyhow | 1.0.102 | Apache-2.0 OR MIT |
14
+ | atomic-waker | 1.1.2 | Apache-2.0 OR MIT |
15
+ | axum | 0.8.9 | MIT |
16
+ | axum-core | 0.5.6 | MIT |
14
17
  | base64 | 0.22.1 | Apache-2.0 OR MIT |
15
18
  | bitflags | 2.13.0 | Apache-2.0 OR MIT |
16
19
  | bytes | 1.12.0 | MIT |
@@ -21,7 +24,21 @@ This package bundles Rust binaries in `dist_rust/`. Those binaries are built fro
21
24
  | clap_lex | 1.1.0 | Apache-2.0 OR MIT |
22
25
  | colorchoice | 1.0.5 | Apache-2.0 OR MIT |
23
26
  | errno | 0.3.14 | Apache-2.0 OR MIT |
27
+ | form_urlencoded | 1.2.2 | Apache-2.0 OR MIT |
28
+ | futures-channel | 0.3.33 | Apache-2.0 OR MIT |
29
+ | futures-core | 0.3.33 | Apache-2.0 OR MIT |
30
+ | futures-macro | 0.3.33 | Apache-2.0 OR MIT |
31
+ | futures-sink | 0.3.33 | Apache-2.0 OR MIT |
32
+ | futures-task | 0.3.33 | Apache-2.0 OR MIT |
33
+ | futures-util | 0.3.33 | Apache-2.0 OR MIT |
24
34
  | heck | 0.5.0 | Apache-2.0 OR MIT |
35
+ | http | 1.4.2 | Apache-2.0 OR MIT |
36
+ | http-body | 1.1.0 | MIT |
37
+ | http-body-util | 0.1.4 | MIT |
38
+ | httparse | 1.10.1 | Apache-2.0 OR MIT |
39
+ | httpdate | 1.0.3 | Apache-2.0 OR MIT |
40
+ | hyper | 1.10.1 | MIT |
41
+ | hyper-util | 0.1.20 | MIT |
25
42
  | is_terminal_polyfill | 1.70.2 | Apache-2.0 OR MIT |
26
43
  | itoa | 1.0.18 | Apache-2.0 OR MIT |
27
44
  | lazy_static | 1.5.0 | Apache-2.0 OR MIT |
@@ -29,33 +46,46 @@ This package bundles Rust binaries in `dist_rust/`. Those binaries are built fro
29
46
  | lock_api | 0.4.14 | Apache-2.0 OR MIT |
30
47
  | log | 0.4.33 | Apache-2.0 OR MIT |
31
48
  | matchers | 0.2.0 | MIT |
49
+ | matchit | 0.8.4 | BSD-3-Clause AND MIT |
32
50
  | memchr | 2.8.2 | MIT OR Unlicense |
51
+ | mime | 0.3.17 | Apache-2.0 OR MIT |
33
52
  | mio | 1.2.1 | MIT |
34
53
  | nu-ansi-term | 0.50.3 | MIT |
35
54
  | once_cell | 1.21.4 | Apache-2.0 OR MIT |
36
55
  | once_cell_polyfill | 1.70.2 | Apache-2.0 OR MIT |
37
56
  | parking_lot | 0.12.5 | Apache-2.0 OR MIT |
38
57
  | parking_lot_core | 0.9.12 | Apache-2.0 OR MIT |
58
+ | percent-encoding | 2.3.2 | Apache-2.0 OR MIT |
39
59
  | pin-project-lite | 0.2.17 | Apache-2.0 OR MIT |
40
60
  | proc-macro2 | 1.0.106 | Apache-2.0 OR MIT |
41
61
  | quote | 1.0.45 | Apache-2.0 OR MIT |
42
62
  | redox_syscall | 0.5.18 | MIT |
43
63
  | regex-automata | 0.4.14 | Apache-2.0 OR MIT |
44
64
  | regex-syntax | 0.8.11 | Apache-2.0 OR MIT |
65
+ | ryu | 1.0.23 | Apache-2.0 OR BSL-1.0 |
45
66
  | scopeguard | 1.2.0 | Apache-2.0 OR MIT |
46
67
  | serde | 1.0.228 | Apache-2.0 OR MIT |
47
68
  | serde_core | 1.0.228 | Apache-2.0 OR MIT |
48
69
  | serde_derive | 1.0.228 | Apache-2.0 OR MIT |
49
70
  | serde_json | 1.0.150 | Apache-2.0 OR MIT |
71
+ | serde_path_to_error | 0.1.20 | Apache-2.0 OR MIT |
72
+ | serde_urlencoded | 0.7.1 | Apache-2.0 OR MIT |
50
73
  | sharded-slab | 0.1.7 | MIT |
51
74
  | signal-hook-registry | 1.4.8 | Apache-2.0 OR MIT |
75
+ | slab | 0.4.12 | MIT |
52
76
  | smallvec | 1.15.2 | Apache-2.0 OR MIT |
53
77
  | socket2 | 0.6.4 | Apache-2.0 OR MIT |
54
78
  | strsim | 0.11.1 | MIT |
55
79
  | syn | 2.0.118 | Apache-2.0 OR MIT |
80
+ | sync_wrapper | 1.0.2 | Apache-2.0 |
56
81
  | thread_local | 1.1.9 | Apache-2.0 OR MIT |
57
82
  | tokio | 1.52.3 | MIT |
58
83
  | tokio-macros | 2.7.0 | MIT |
84
+ | tokio-stream | 0.1.18 | MIT |
85
+ | tokio-util | 0.7.18 | MIT |
86
+ | tower | 0.5.3 | MIT |
87
+ | tower-layer | 0.3.3 | MIT |
88
+ | tower-service | 0.3.3 | MIT |
59
89
  | tracing | 0.1.44 | MIT |
60
90
  | tracing-attributes | 0.1.31 | MIT |
61
91
  | tracing-core | 0.1.36 | MIT |
@@ -3,6 +3,6 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@foss.global/gitmanager',
6
- version: '0.3.0',
6
+ version: '0.4.0',
7
7
  description: 'Headless Git manager for the foss.global Git platform, with a TypeScript API and Rust engine.'
8
8
  }
@@ -13,7 +13,10 @@ import type {
13
13
  IGitManagerReadFileRequest,
14
14
  IGitManagerRef,
15
15
  IGitManagerRefRequest,
16
+ IGitManagerRepositorySelector,
16
17
  IGitManagerRepositoryInfo,
18
+ IGitManagerSmartHttpRepositoryAccess,
19
+ IGitManagerSmartHttpRepositoryVisibility,
17
20
  IGitManagerStatus,
18
21
  IGitManagerTag,
19
22
  IGitManagerTagRequest,
@@ -33,8 +36,28 @@ export class GitManager extends plugins.EventEmitter {
33
36
 
34
37
  constructor(optionsArg: IGitManagerOptions = {}) {
35
38
  super();
39
+ const smartHttpOptions = optionsArg.smartHttp;
36
40
  this.config = {
37
41
  dataDir: optionsArg.dataDir ?? plugins.path.resolve(process.cwd(), '.nogit', 'gitmanager'),
42
+ smartHttp: smartHttpOptions && smartHttpOptions.enabled !== false
43
+ ? {
44
+ bindAddress: smartHttpOptions.bindAddress ?? '127.0.0.1',
45
+ port: smartHttpOptions.port ?? 0,
46
+ allowUnsafeNonLoopback: smartHttpOptions.allowUnsafeNonLoopback ?? false,
47
+ allowAllRepositories: smartHttpOptions.allowAllRepositories ?? false,
48
+ allowedRepositories: smartHttpOptions.allowedRepositories?.map((repository) => ({
49
+ org: repository.org,
50
+ repo: repository.repo,
51
+ })) ?? [],
52
+ maxConcurrentTransfers: smartHttpOptions.maxConcurrentTransfers ?? 32,
53
+ maxRequestBodyBytes: smartHttpOptions.maxRequestBodyBytes ?? 16 * 1024 * 1024,
54
+ maxAdvertisementBytes: smartHttpOptions.maxAdvertisementBytes ?? 4 * 1024 * 1024,
55
+ maxResponseBytes: smartHttpOptions.maxResponseBytes ?? 4 * 1024 * 1024 * 1024,
56
+ processTimeoutMs: smartHttpOptions.processTimeoutMs ?? 30 * 60 * 1000,
57
+ idleTimeoutSeconds: smartHttpOptions.idleTimeoutSeconds ?? 300,
58
+ gracefulShutdownMs: smartHttpOptions.gracefulShutdownMs ?? 10_000,
59
+ }
60
+ : undefined,
38
61
  };
39
62
  this.bridge.on('exit', (code: number | null, signal: string | null) => {
40
63
  this.started = false;
@@ -90,6 +113,31 @@ export class GitManager extends plugins.EventEmitter {
90
113
  return this.bridge.getStatus();
91
114
  }
92
115
 
116
+ public async setSmartHttpRepositoryAccess(
117
+ accessArg: IGitManagerSmartHttpRepositoryAccess,
118
+ ): Promise<void> {
119
+ this.assertRunning();
120
+ return this.bridge.setSmartHttpRepositoryAccess({
121
+ allowAllRepositories: accessArg.allowAllRepositories,
122
+ allowedRepositories: accessArg.allowedRepositories.map((repository) => ({
123
+ org: repository.org,
124
+ repo: repository.repo,
125
+ })),
126
+ });
127
+ }
128
+
129
+ public async setSmartHttpRepositoryVisibility(
130
+ visibilityArg: IGitManagerSmartHttpRepositoryVisibility,
131
+ ): Promise<void> {
132
+ this.assertRunning();
133
+ return this.bridge.setSmartHttpRepositoryVisibility({
134
+ org: visibilityArg.org,
135
+ repo: visibilityArg.repo,
136
+ public: visibilityArg.public,
137
+ revision: visibilityArg.revision,
138
+ });
139
+ }
140
+
93
141
  public get running(): boolean {
94
142
  return this.started && this.bridge.running;
95
143
  }
@@ -104,6 +152,16 @@ export class GitManager extends plugins.EventEmitter {
104
152
  return this.bridge.importMirror(requestArg);
105
153
  }
106
154
 
155
+ public async refreshMirror(requestArg: IGitManagerRepositorySelector): Promise<IGitManagerRepositoryInfo> {
156
+ this.assertRunning();
157
+ return this.bridge.refreshMirror(requestArg);
158
+ }
159
+
160
+ public async verifyRepository(requestArg: IGitManagerRepositorySelector): Promise<IGitManagerRepositoryInfo> {
161
+ this.assertRunning();
162
+ return this.bridge.verifyRepository(requestArg);
163
+ }
164
+
107
165
  public async listRepositories(): Promise<IGitManagerRepositoryInfo[]> {
108
166
  this.assertRunning();
109
167
  return this.bridge.listRepositories();
package/ts/models.ts CHANGED
@@ -1,15 +1,69 @@
1
+ import type { IGitManagerRepositorySelector } from '@foss.global/interfaces';
2
+
3
+ export interface IGitManagerSmartHttpOptions {
4
+ enabled?: boolean;
5
+ bindAddress?: string;
6
+ port?: number;
7
+ allowUnsafeNonLoopback?: boolean;
8
+ allowAllRepositories?: boolean;
9
+ allowedRepositories?: IGitManagerRepositorySelector[];
10
+ maxConcurrentTransfers?: number;
11
+ maxRequestBodyBytes?: number;
12
+ maxAdvertisementBytes?: number;
13
+ maxResponseBytes?: number;
14
+ processTimeoutMs?: number;
15
+ idleTimeoutSeconds?: number;
16
+ gracefulShutdownMs?: number;
17
+ }
18
+
19
+ export interface IGitManagerSmartHttpRepositoryAccess {
20
+ allowAllRepositories: boolean;
21
+ allowedRepositories: IGitManagerRepositorySelector[];
22
+ }
23
+
24
+ export interface IGitManagerSmartHttpRepositoryVisibility
25
+ extends IGitManagerRepositorySelector {
26
+ public: boolean;
27
+ revision: number;
28
+ }
29
+
1
30
  export interface IGitManagerOptions {
2
31
  dataDir?: string;
32
+ smartHttp?: IGitManagerSmartHttpOptions;
33
+ }
34
+
35
+ export interface IRustGitManagerSmartHttpConfig {
36
+ bindAddress: string;
37
+ port: number;
38
+ allowUnsafeNonLoopback: boolean;
39
+ allowAllRepositories: boolean;
40
+ allowedRepositories: IGitManagerRepositorySelector[];
41
+ maxConcurrentTransfers: number;
42
+ maxRequestBodyBytes: number;
43
+ maxAdvertisementBytes: number;
44
+ maxResponseBytes: number;
45
+ processTimeoutMs: number;
46
+ idleTimeoutSeconds: number;
47
+ gracefulShutdownMs: number;
3
48
  }
4
49
 
5
50
  export interface IRustGitManagerConfig {
6
51
  dataDir: string;
52
+ smartHttp?: IRustGitManagerSmartHttpConfig;
53
+ }
54
+
55
+ export interface IGitManagerSmartHttpStatus {
56
+ running: boolean;
57
+ bindAddress: string;
58
+ port: number;
59
+ baseUrl: string;
7
60
  }
8
61
 
9
62
  export interface IGitManagerStatus {
10
63
  running: boolean;
11
64
  dataDir: string;
12
65
  uptimeMs: number;
66
+ smartHttp?: IGitManagerSmartHttpStatus;
13
67
  }
14
68
 
15
69
  export type {
@@ -13,7 +13,10 @@ import type {
13
13
  IGitManagerReadFileRequest,
14
14
  IGitManagerRef,
15
15
  IGitManagerRefRequest,
16
+ IGitManagerRepositorySelector,
16
17
  IGitManagerRepositoryInfo,
18
+ IGitManagerSmartHttpRepositoryAccess,
19
+ IGitManagerSmartHttpRepositoryVisibility,
17
20
  IGitManagerStatus,
18
21
  IGitManagerTag,
19
22
  IGitManagerTagRequest,
@@ -26,8 +29,12 @@ type TGitManagerCommands = {
26
29
  start: { params: { config: IRustGitManagerConfig }; result: Record<string, never> };
27
30
  stop: { params: Record<string, never>; result: Record<string, never> };
28
31
  getStatus: { params: Record<string, never>; result: IGitManagerStatus };
32
+ setSmartHttpRepositoryAccess: { params: IGitManagerSmartHttpRepositoryAccess; result: Record<string, never> };
33
+ setSmartHttpRepositoryVisibility: { params: IGitManagerSmartHttpRepositoryVisibility; result: Record<string, never> };
29
34
  initBareRepository: { params: IGitManagerInitBareRepositoryRequest; result: IGitManagerRepositoryInfo };
30
35
  importMirror: { params: IGitManagerImportMirrorRequest; result: IGitManagerRepositoryInfo };
36
+ refreshMirror: { params: IGitManagerRepositorySelector; result: IGitManagerRepositoryInfo };
37
+ verifyRepository: { params: IGitManagerRepositorySelector; result: IGitManagerRepositoryInfo };
31
38
  listRepositories: { params: Record<string, never>; result: IGitManagerRepositoryInfo[] };
32
39
  listRefs: { params: IGitManagerRefRequest; result: IGitManagerRef[] };
33
40
  listTree: { params: IGitManagerTreeRequest; result: IGitManagerTreeEntry[] };
@@ -113,6 +120,16 @@ export class RustGitManagerBridge extends plugins.EventEmitter {
113
120
  return this.bridge.sendCommand('getStatus', {});
114
121
  }
115
122
 
123
+ public async setSmartHttpRepositoryAccess(accessArg: IGitManagerSmartHttpRepositoryAccess): Promise<void> {
124
+ await this.bridge.sendCommand('setSmartHttpRepositoryAccess', accessArg);
125
+ }
126
+
127
+ public async setSmartHttpRepositoryVisibility(
128
+ visibilityArg: IGitManagerSmartHttpRepositoryVisibility,
129
+ ): Promise<void> {
130
+ await this.bridge.sendCommand('setSmartHttpRepositoryVisibility', visibilityArg);
131
+ }
132
+
116
133
  public async initBareRepository(requestArg: IGitManagerInitBareRepositoryRequest): Promise<IGitManagerRepositoryInfo> {
117
134
  return this.bridge.sendCommand('initBareRepository', requestArg);
118
135
  }
@@ -121,6 +138,14 @@ export class RustGitManagerBridge extends plugins.EventEmitter {
121
138
  return this.bridge.sendCommand('importMirror', requestArg);
122
139
  }
123
140
 
141
+ public async refreshMirror(requestArg: IGitManagerRepositorySelector): Promise<IGitManagerRepositoryInfo> {
142
+ return this.bridge.sendCommand('refreshMirror', requestArg);
143
+ }
144
+
145
+ public async verifyRepository(requestArg: IGitManagerRepositorySelector): Promise<IGitManagerRepositoryInfo> {
146
+ return this.bridge.sendCommand('verifyRepository', requestArg);
147
+ }
148
+
124
149
  public async listRepositories(): Promise<IGitManagerRepositoryInfo[]> {
125
150
  return this.bridge.sendCommand('listRepositories', {});
126
151
  }