@foss.global/gitmanager 0.2.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,27 @@
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
+
16
+ ## 2026-06-23 - 0.3.0
17
+
18
+ ### Features
19
+
20
+ - add commit detail, diff, and tag APIs (api)
21
+ - Expose getCommit, getDiff, listTags, and getTag through the TypeScript facade and Rust bridge.
22
+ - Implement Rust IPC handlers and git operations for commit metadata, structured diffs, and lightweight or annotated tag metadata.
23
+ - Update README coverage and integration tests for the new APIs.
24
+
3
25
  ## 2026-06-22 - 0.2.0
4
26
 
5
27
  ### Features
@@ -3,7 +3,7 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@foss.global/gitmanager',
6
- version: '0.2.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 { IGitManagerCommitSummary, IGitManagerFileContent, IGitManagerImportMirrorRequest, IGitManagerInitBareRepositoryRequest, IGitManagerListCommitsRequest, IGitManagerReadFileRequest, IGitManagerRef, IGitManagerRefRequest, IGitManagerRepositoryInfo, IGitManagerStatus, 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,14 +10,22 @@ 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[]>;
19
23
  readFile(requestArg: IGitManagerReadFileRequest): Promise<IGitManagerFileContent>;
20
24
  listCommits(requestArg: IGitManagerListCommitsRequest): Promise<IGitManagerCommitSummary[]>;
25
+ getCommit(requestArg: IGitManagerCommitRequest): Promise<IGitManagerCommitDetail>;
26
+ getDiff(requestArg: IGitManagerDiffRequest): Promise<IGitManagerDiff>;
27
+ listTags(requestArg: IGitManagerListTagsRequest): Promise<IGitManagerTag[]>;
28
+ getTag(requestArg: IGitManagerTagRequest): Promise<IGitManagerTag>;
21
29
  private startInternal;
22
30
  private assertRunning;
23
31
  }
@@ -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();
@@ -92,6 +139,22 @@ export class GitManager extends plugins.EventEmitter {
92
139
  this.assertRunning();
93
140
  return this.bridge.listCommits(requestArg);
94
141
  }
142
+ async getCommit(requestArg) {
143
+ this.assertRunning();
144
+ return this.bridge.getCommit(requestArg);
145
+ }
146
+ async getDiff(requestArg) {
147
+ this.assertRunning();
148
+ return this.bridge.getDiff(requestArg);
149
+ }
150
+ async listTags(requestArg) {
151
+ this.assertRunning();
152
+ return this.bridge.listTags(requestArg);
153
+ }
154
+ async getTag(requestArg) {
155
+ this.assertRunning();
156
+ return this.bridge.getTag(requestArg);
157
+ }
95
158
  async startInternal() {
96
159
  const spawned = await this.bridge.spawn();
97
160
  if (!spawned) {
@@ -127,4 +190,4 @@ export class GitManager extends plugins.EventEmitter {
127
190
  }
128
191
  }
129
192
  }
130
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5naXRtYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvY2xhc3Nlcy5naXRtYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBaUJ4QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUVuRSxNQUFNLE9BQU8sVUFBVyxTQUFRLE9BQU8sQ0FBQyxZQUFZO0lBT2xELFlBQVksYUFBaUMsRUFBRTtRQUM3QyxLQUFLLEVBQUUsQ0FBQztRQVBGLFdBQU0sR0FBRyxJQUFJLG9CQUFvQixFQUFFLENBQUM7UUFDcEMsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUNoQixpQkFBWSxHQUF5QixJQUFJLENBQUM7UUFDMUMsa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFLNUIsSUFBSSxDQUFDLE1BQU0sR0FBRztZQUNaLE9BQU8sRUFBRSxVQUFVLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxRQUFRLEVBQUUsWUFBWSxDQUFDO1NBQzNGLENBQUM7UUFDRixJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFtQixFQUFFLE1BQXFCLEVBQUUsRUFBRTtZQUNwRSxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztZQUNyQixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDbEMsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxJQUFZLEVBQUUsRUFBRTtZQUN4QyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFF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
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
- export type { IGitManagerCommitSummary, IGitManagerFileContent, IGitManagerImportMirrorRequest, IGitManagerInitBareRepositoryRequest, IGitManagerListCommitsRequest, IGitManagerReadFileRequest, IGitManagerRef, IGitManagerRefRequest, IGitManagerRepositoryInfo, IGitManagerRepositorySelector, IGitManagerTreeEntry, IGitManagerTreeRequest, TGitManagerObjectType, TGitManagerRefType, TGitManagerTreeEntryType, } from '@foss.global/interfaces';
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 { IGitManagerCommitSummary, IGitManagerFileContent, IGitManagerImportMirrorRequest, IGitManagerInitBareRepositoryRequest, IGitManagerListCommitsRequest, IGitManagerReadFileRequest, IGitManagerRef, IGitManagerRefRequest, IGitManagerRepositoryInfo, IGitManagerStatus, 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,11 +9,19 @@ 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[]>;
17
21
  readFile(requestArg: IGitManagerReadFileRequest): Promise<IGitManagerFileContent>;
18
22
  listCommits(requestArg: IGitManagerListCommitsRequest): Promise<IGitManagerCommitSummary[]>;
23
+ getCommit(requestArg: IGitManagerCommitRequest): Promise<IGitManagerCommitDetail>;
24
+ getDiff(requestArg: IGitManagerDiffRequest): Promise<IGitManagerDiff>;
25
+ listTags(requestArg: IGitManagerListTagsRequest): Promise<IGitManagerTag[]>;
26
+ getTag(requestArg: IGitManagerTagRequest): Promise<IGitManagerTag>;
19
27
  }
@@ -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
  }
@@ -79,5 +91,17 @@ export class RustGitManagerBridge extends plugins.EventEmitter {
79
91
  async listCommits(requestArg) {
80
92
  return this.bridge.sendCommand('listCommits', requestArg);
81
93
  }
94
+ async getCommit(requestArg) {
95
+ return this.bridge.sendCommand('getCommit', requestArg);
96
+ }
97
+ async getDiff(requestArg) {
98
+ return this.bridge.sendCommand('getDiff', requestArg);
99
+ }
100
+ async listTags(requestArg) {
101
+ return this.bridge.sendCommand('listTags', requestArg);
102
+ }
103
+ async getTag(requestArg) {
104
+ return this.bridge.sendCommand('getTag', requestArg);
105
+ }
82
106
  }
83
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVzdC1naXRtYW5hZ2VyLWJyaWRnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3J1c3QtZ2l0bWFuYWdlci1icmlkZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxjQUFjLENBQUM7QUE4QnhDLFNBQVMsY0FBYztJQUNyQixNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDakYsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDN0MsQ0FBQztBQUVELFNBQVMsdUJBQXVCO0lBQzlCLE1BQU0sT0FBTyxHQUEyQixFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxDQUFDO0lBQ3pFLE1BQU0sS0FBSyxHQUEyQixFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDO0lBQzFFLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDbkMsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNuQyxPQUFPLEVBQUUsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDN0MsQ0FBQztBQUVELFNBQVMsZUFBZTtJQUN0QixNQUFNLFdBQVcsR0FBRyxjQUFjLEVBQUUsQ0FBQztJQUNyQyxNQUFNLE1BQU0sR0FBRyx1QkFBdUIsRUFBRSxDQUFDO0lBQ3pDLE1BQU0sS0FBSyxHQUFhLEVBQUUsQ0FBQztJQUUzQixJQUFJLE1BQU0sRUFBRSxD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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.2.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.2.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",
20
- "@git.zone/tsrust": "^1.5.0",
19
+ "@git.zone/tsrun": "^2.0.5",
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.
@@ -60,15 +130,19 @@ await gitManager.stop();
60
130
  - `GitManager.listTree()`: lists tree entries at a ref and optional path.
61
131
  - `GitManager.readFile()`: reads a blob as base64 after checking the blob size limit.
62
132
  - `GitManager.listCommits()`: lists commit summaries for a ref.
133
+ - `GitManager.getCommit()`: reads commit detail metadata, parents, author/committer data, and diff stats for a ref.
134
+ - `GitManager.getDiff()`: returns a structured unified diff between a head ref and its first parent or an explicit base ref.
135
+ - `GitManager.listTags()`: lists lightweight and annotated tags with target object metadata.
136
+ - `GitManager.getTag()`: reads one tag by exact name.
63
137
  - `GitManager.running`: local facade running state.
64
138
  - `RustGitManagerBridge`: lower-level typed bridge around `@push.rocks/smartrust`.
65
139
  - `IGitManagerOptions`, `IGitManagerStatus`, `IRustGitManagerConfig`: exported option/status contracts.
66
140
 
67
141
  Repository/read DTO contracts are re-exported from the published `@foss.global/interfaces` package.
68
142
 
69
- 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.
70
144
 
71
- 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.
72
146
 
73
147
  ## Rust Build
74
148
 
@@ -89,7 +163,7 @@ pnpm run test:rust
89
163
  pnpm run build
90
164
  ```
91
165
 
92
- `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`.
93
167
 
94
168
  ## License and Legal Information
95
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.2.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
  }
@@ -1,15 +1,25 @@
1
1
  import * as plugins from './plugins.js';
2
2
  import type {
3
+ IGitManagerCommitDetail,
4
+ IGitManagerCommitRequest,
3
5
  IGitManagerCommitSummary,
6
+ IGitManagerDiff,
7
+ IGitManagerDiffRequest,
4
8
  IGitManagerFileContent,
5
9
  IGitManagerImportMirrorRequest,
6
10
  IGitManagerInitBareRepositoryRequest,
7
11
  IGitManagerListCommitsRequest,
12
+ IGitManagerListTagsRequest,
8
13
  IGitManagerReadFileRequest,
9
14
  IGitManagerRef,
10
15
  IGitManagerRefRequest,
16
+ IGitManagerRepositorySelector,
11
17
  IGitManagerRepositoryInfo,
18
+ IGitManagerSmartHttpRepositoryAccess,
19
+ IGitManagerSmartHttpRepositoryVisibility,
12
20
  IGitManagerStatus,
21
+ IGitManagerTag,
22
+ IGitManagerTagRequest,
13
23
  IGitManagerTreeEntry,
14
24
  IGitManagerTreeRequest,
15
25
  IGitManagerOptions,
@@ -26,8 +36,28 @@ export class GitManager extends plugins.EventEmitter {
26
36
 
27
37
  constructor(optionsArg: IGitManagerOptions = {}) {
28
38
  super();
39
+ const smartHttpOptions = optionsArg.smartHttp;
29
40
  this.config = {
30
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,
31
61
  };
32
62
  this.bridge.on('exit', (code: number | null, signal: string | null) => {
33
63
  this.started = false;
@@ -83,6 +113,31 @@ export class GitManager extends plugins.EventEmitter {
83
113
  return this.bridge.getStatus();
84
114
  }
85
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
+
86
141
  public get running(): boolean {
87
142
  return this.started && this.bridge.running;
88
143
  }
@@ -97,6 +152,16 @@ export class GitManager extends plugins.EventEmitter {
97
152
  return this.bridge.importMirror(requestArg);
98
153
  }
99
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
+
100
165
  public async listRepositories(): Promise<IGitManagerRepositoryInfo[]> {
101
166
  this.assertRunning();
102
167
  return this.bridge.listRepositories();
@@ -122,6 +187,26 @@ export class GitManager extends plugins.EventEmitter {
122
187
  return this.bridge.listCommits(requestArg);
123
188
  }
124
189
 
190
+ public async getCommit(requestArg: IGitManagerCommitRequest): Promise<IGitManagerCommitDetail> {
191
+ this.assertRunning();
192
+ return this.bridge.getCommit(requestArg);
193
+ }
194
+
195
+ public async getDiff(requestArg: IGitManagerDiffRequest): Promise<IGitManagerDiff> {
196
+ this.assertRunning();
197
+ return this.bridge.getDiff(requestArg);
198
+ }
199
+
200
+ public async listTags(requestArg: IGitManagerListTagsRequest): Promise<IGitManagerTag[]> {
201
+ this.assertRunning();
202
+ return this.bridge.listTags(requestArg);
203
+ }
204
+
205
+ public async getTag(requestArg: IGitManagerTagRequest): Promise<IGitManagerTag> {
206
+ this.assertRunning();
207
+ return this.bridge.getTag(requestArg);
208
+ }
209
+
125
210
  private async startInternal(): Promise<void> {
126
211
  const spawned = await this.bridge.spawn();
127
212
  if (!spawned) {
package/ts/models.ts CHANGED
@@ -1,30 +1,97 @@
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 {
70
+ IGitManagerCommitDetail,
71
+ IGitManagerCommitRequest,
16
72
  IGitManagerCommitSummary,
73
+ IGitManagerDiff,
74
+ IGitManagerDiffFile,
75
+ IGitManagerDiffHunk,
76
+ IGitManagerDiffLine,
77
+ IGitManagerDiffRequest,
78
+ IGitManagerDiffStats,
17
79
  IGitManagerFileContent,
18
80
  IGitManagerImportMirrorRequest,
19
81
  IGitManagerInitBareRepositoryRequest,
20
82
  IGitManagerListCommitsRequest,
83
+ IGitManagerListTagsRequest,
21
84
  IGitManagerReadFileRequest,
22
85
  IGitManagerRef,
23
86
  IGitManagerRefRequest,
24
87
  IGitManagerRepositoryInfo,
25
88
  IGitManagerRepositorySelector,
89
+ IGitManagerTag,
90
+ IGitManagerTagRequest,
26
91
  IGitManagerTreeEntry,
27
92
  IGitManagerTreeRequest,
93
+ TGitManagerDiffFileStatus,
94
+ TGitManagerDiffLineKind,
28
95
  TGitManagerObjectType,
29
96
  TGitManagerRefType,
30
97
  TGitManagerTreeEntryType,
@@ -1,15 +1,25 @@
1
1
  import * as plugins from './plugins.js';
2
2
  import type {
3
+ IGitManagerCommitDetail,
4
+ IGitManagerCommitRequest,
3
5
  IGitManagerCommitSummary,
6
+ IGitManagerDiff,
7
+ IGitManagerDiffRequest,
4
8
  IGitManagerFileContent,
5
9
  IGitManagerImportMirrorRequest,
6
10
  IGitManagerInitBareRepositoryRequest,
7
11
  IGitManagerListCommitsRequest,
12
+ IGitManagerListTagsRequest,
8
13
  IGitManagerReadFileRequest,
9
14
  IGitManagerRef,
10
15
  IGitManagerRefRequest,
16
+ IGitManagerRepositorySelector,
11
17
  IGitManagerRepositoryInfo,
18
+ IGitManagerSmartHttpRepositoryAccess,
19
+ IGitManagerSmartHttpRepositoryVisibility,
12
20
  IGitManagerStatus,
21
+ IGitManagerTag,
22
+ IGitManagerTagRequest,
13
23
  IGitManagerTreeEntry,
14
24
  IGitManagerTreeRequest,
15
25
  IRustGitManagerConfig,
@@ -19,13 +29,21 @@ type TGitManagerCommands = {
19
29
  start: { params: { config: IRustGitManagerConfig }; result: Record<string, never> };
20
30
  stop: { params: Record<string, never>; result: Record<string, never> };
21
31
  getStatus: { params: Record<string, never>; result: IGitManagerStatus };
32
+ setSmartHttpRepositoryAccess: { params: IGitManagerSmartHttpRepositoryAccess; result: Record<string, never> };
33
+ setSmartHttpRepositoryVisibility: { params: IGitManagerSmartHttpRepositoryVisibility; result: Record<string, never> };
22
34
  initBareRepository: { params: IGitManagerInitBareRepositoryRequest; result: IGitManagerRepositoryInfo };
23
35
  importMirror: { params: IGitManagerImportMirrorRequest; result: IGitManagerRepositoryInfo };
36
+ refreshMirror: { params: IGitManagerRepositorySelector; result: IGitManagerRepositoryInfo };
37
+ verifyRepository: { params: IGitManagerRepositorySelector; result: IGitManagerRepositoryInfo };
24
38
  listRepositories: { params: Record<string, never>; result: IGitManagerRepositoryInfo[] };
25
39
  listRefs: { params: IGitManagerRefRequest; result: IGitManagerRef[] };
26
40
  listTree: { params: IGitManagerTreeRequest; result: IGitManagerTreeEntry[] };
27
41
  readFile: { params: IGitManagerReadFileRequest; result: IGitManagerFileContent };
28
42
  listCommits: { params: IGitManagerListCommitsRequest; result: IGitManagerCommitSummary[] };
43
+ getCommit: { params: IGitManagerCommitRequest; result: IGitManagerCommitDetail };
44
+ getDiff: { params: IGitManagerDiffRequest; result: IGitManagerDiff };
45
+ listTags: { params: IGitManagerListTagsRequest; result: IGitManagerTag[] };
46
+ getTag: { params: IGitManagerTagRequest; result: IGitManagerTag };
29
47
  };
30
48
 
31
49
  function getPackageRoot(): string {
@@ -102,6 +120,16 @@ export class RustGitManagerBridge extends plugins.EventEmitter {
102
120
  return this.bridge.sendCommand('getStatus', {});
103
121
  }
104
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
+
105
133
  public async initBareRepository(requestArg: IGitManagerInitBareRepositoryRequest): Promise<IGitManagerRepositoryInfo> {
106
134
  return this.bridge.sendCommand('initBareRepository', requestArg);
107
135
  }
@@ -110,6 +138,14 @@ export class RustGitManagerBridge extends plugins.EventEmitter {
110
138
  return this.bridge.sendCommand('importMirror', requestArg);
111
139
  }
112
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
+
113
149
  public async listRepositories(): Promise<IGitManagerRepositoryInfo[]> {
114
150
  return this.bridge.sendCommand('listRepositories', {});
115
151
  }
@@ -129,4 +165,20 @@ export class RustGitManagerBridge extends plugins.EventEmitter {
129
165
  public async listCommits(requestArg: IGitManagerListCommitsRequest): Promise<IGitManagerCommitSummary[]> {
130
166
  return this.bridge.sendCommand('listCommits', requestArg);
131
167
  }
168
+
169
+ public async getCommit(requestArg: IGitManagerCommitRequest): Promise<IGitManagerCommitDetail> {
170
+ return this.bridge.sendCommand('getCommit', requestArg);
171
+ }
172
+
173
+ public async getDiff(requestArg: IGitManagerDiffRequest): Promise<IGitManagerDiff> {
174
+ return this.bridge.sendCommand('getDiff', requestArg);
175
+ }
176
+
177
+ public async listTags(requestArg: IGitManagerListTagsRequest): Promise<IGitManagerTag[]> {
178
+ return this.bridge.sendCommand('listTags', requestArg);
179
+ }
180
+
181
+ public async getTag(requestArg: IGitManagerTagRequest): Promise<IGitManagerTag> {
182
+ return this.bridge.sendCommand('getTag', requestArg);
183
+ }
132
184
  }