@fractary/faber 2.2.1 → 2.3.4

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.
@@ -6,8 +6,7 @@
6
6
  import * as fs from 'fs';
7
7
  import * as path from 'path';
8
8
  import { ConfigInitializer } from '../../config/initializer.js';
9
- import { loadFaberConfig, loadWorkConfig, loadRepoConfig, loadSpecConfig, } from '../../config.js';
10
- import { SpecManager } from '../../spec/manager.js';
9
+ import { loadFaberConfig, loadWorkConfig, loadRepoConfig, } from '../../config.js';
11
10
  describe('Init Workflow Integration', () => {
12
11
  const testDir = path.join(__dirname, '__test-init-workflow__');
13
12
  const configPath = path.join(testDir, '.fractary', 'plugins', 'faber', 'config.yaml');
@@ -82,40 +81,15 @@ describe('Init Workflow Integration', () => {
82
81
  expect(config?.repo.platform).toBe('gitlab');
83
82
  });
84
83
  });
85
- describe('SpecManager Integration After Init', () => {
86
- it('should allow SpecManager creation before init', () => {
87
- // Before init - should work with defaults
88
- const managerBefore = new SpecManager();
89
- expect(managerBefore).toBeDefined();
90
- // After init - should use config
91
- ConfigInitializer.initializeProject(testDir);
92
- const managerAfter = new SpecManager();
93
- expect(managerAfter).toBeDefined();
94
- });
95
- it('should use config path after init', () => {
96
- // Create manager before config exists
97
- const manager1 = new SpecManager();
98
- expect(manager1).toBeDefined();
99
- // Initialize with custom specs path
100
- const config = ConfigInitializer.generateDefaultConfig();
101
- config.artifacts.specs.local_path = '/custom/specs';
102
- ConfigInitializer.writeConfig(config, configPath);
103
- // New manager should use config path
104
- const manager2 = new SpecManager();
105
- expect(manager2).toBeDefined();
106
- });
107
- });
108
84
  describe('Config Loading After Init', () => {
109
85
  it('should load all config sections after init', () => {
110
86
  ConfigInitializer.initializeProject(testDir);
111
87
  const faberConfig = loadFaberConfig(testDir);
112
88
  const workConfig = loadWorkConfig(testDir);
113
89
  const repoConfig = loadRepoConfig(testDir);
114
- const specConfig = loadSpecConfig(testDir);
115
90
  expect(faberConfig).not.toBeNull();
116
91
  expect(workConfig).not.toBeNull();
117
92
  expect(repoConfig).not.toBeNull();
118
- expect(specConfig).toBeDefined();
119
93
  });
120
94
  it('should not throw after successful init', () => {
121
95
  ConfigInitializer.initializeProject(testDir);
@@ -123,7 +97,6 @@ describe('Init Workflow Integration', () => {
123
97
  expect(() => loadFaberConfig(testDir)).not.toThrow();
124
98
  expect(() => loadWorkConfig(testDir)).not.toThrow();
125
99
  expect(() => loadRepoConfig(testDir)).not.toThrow();
126
- expect(() => loadSpecConfig(testDir)).not.toThrow();
127
100
  });
128
101
  });
129
102
  describe('Error Messages Without Init', () => {
@@ -152,13 +125,6 @@ describe('Init Workflow Integration', () => {
152
125
  catch (error) {
153
126
  expect(error.message).toContain('fractary init');
154
127
  }
155
- try {
156
- loadSpecConfig(testDir);
157
- fail('Should have thrown');
158
- }
159
- catch (error) {
160
- expect(error.message).toContain('fractary init');
161
- }
162
128
  });
163
129
  });
164
130
  describe('Backward Compatibility', () => {
@@ -174,9 +140,6 @@ describe('Init Workflow Integration', () => {
174
140
  const config = loadFaberConfig(testDir);
175
141
  expect(config).not.toBeNull();
176
142
  expect(config?.repo.owner).toBe('legacy-owner');
177
- // SpecManager should work
178
- const manager = new SpecManager();
179
- expect(manager).toBeDefined();
180
143
  });
181
144
  it('should migrate from JSON to YAML when re-initializing', () => {
182
145
  // Create legacy JSON config
@@ -203,10 +166,7 @@ describe('Init Workflow Integration', () => {
203
166
  repoName: 'my-app',
204
167
  });
205
168
  expect(fs.existsSync(createdPath)).toBe(true);
206
- // 2. User runs: fractary spec:create
207
- const manager = new SpecManager();
208
- expect(manager).toBeDefined();
209
- // 3. Config should be loaded correctly
169
+ // 2. Config should be loaded correctly
210
170
  const config = loadFaberConfig(testDir);
211
171
  expect(config?.repo.owner).toBe('acme');
212
172
  expect(config?.repo.repo).toBe('my-app');
@@ -243,9 +203,6 @@ describe('Init Workflow Integration', () => {
243
203
  }
244
204
  // Now config exists
245
205
  expect(ConfigInitializer.configExists(configPath)).toBe(true);
246
- // CLI can now run commands
247
- const manager = new SpecManager();
248
- expect(manager).toBeDefined();
249
206
  });
250
207
  });
251
208
  describe('Performance Requirements', () => {
@@ -262,13 +219,6 @@ describe('Init Workflow Integration', () => {
262
219
  const duration = Date.now() - start;
263
220
  expect(duration).toBeLessThan(100);
264
221
  });
265
- it('should handle concurrent SpecManager creation', () => {
266
- ConfigInitializer.initializeProject(testDir);
267
- // Create multiple managers concurrently (simulates parallel operations)
268
- const managers = Array(10).fill(null).map(() => new SpecManager());
269
- expect(managers).toHaveLength(10);
270
- managers.forEach(manager => expect(manager).toBeDefined());
271
- });
272
222
  });
273
223
  });
274
224
  //# sourceMappingURL=init-workflow.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"init-workflow.test.js","sourceRoot":"","sources":["../../../src/__tests__/integration/init-workflow.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init-workflow.test.js","sourceRoot":"","sources":["../../../src/__tests__/integration/init-workflow.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EACL,eAAe,EACf,cAAc,EACd,cAAc,GACf,MAAM,iBAAiB,CAAC;AAEzB,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;IACzC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,wBAAwB,CAAC,CAAC;IAC/D,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC;IAEtF,UAAU,CAAC,GAAG,EAAE;QACd,2CAA2C;QAC3C,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3B,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACvD,CAAC;QACD,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAE3C,uCAAuC;QACvC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,0CAA0C;QAC1C,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3B,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACvD,CAAC;QAED,gBAAgB;QAChB,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,6BAA6B,EAAE,GAAG,EAAE;QAC3C,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;YACnD,4BAA4B;YAC5B,MAAM,MAAM,GAAG,iBAAiB,CAAC,qBAAqB,EAAE,CAAC;YACzD,iBAAiB,CAAC,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;YAElD,4BAA4B;YAC5B,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAE7C,8BAA8B;YAC9B,MAAM,YAAY,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;YAC9C,MAAM,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;YACpC,MAAM,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;YAC1D,MAAM,MAAM,GAAG,iBAAiB,CAAC,qBAAqB,EAAE,CAAC;YACzD,iBAAiB,CAAC,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;YAElD,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YAErD,qBAAqB;YACrB,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;YAC7C,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YACnC,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;YAC9C,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YACnC,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;YACxC,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;YACvC,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC;YAE/C,0CAA0C;YAC1C,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YACnC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;YACjE,MAAM,MAAM,GAAG,iBAAiB,CAAC,qBAAqB,EAAE,CAAC;YACzD,iBAAiB,CAAC,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;YAElD,MAAM,YAAY,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;YAE9C,MAAM,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;YACpC,MAAM,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACjD,MAAM,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;YACzC,MAAM,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;YACzC,MAAM,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC;YAC9C,MAAM,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;QAC/C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;YAChD,MAAM,WAAW,GAAG,iBAAiB,CAAC,iBAAiB,CAAC,OAAO,EAAE;gBAC/D,SAAS,EAAE,QAAQ;gBACnB,QAAQ,EAAE,YAAY;gBACtB,YAAY,EAAE,MAAM;gBACpB,YAAY,EAAE,QAAQ;aACvB,CAAC,CAAC;YAEH,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAE9C,MAAM,MAAM,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;YACxC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC1C,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAC7C,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC3C,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACzC,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;YACpD,iBAAiB,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;YAE7C,MAAM,WAAW,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;YAC7C,MAAM,UAAU,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;YAC3C,MAAM,UAAU,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;YAE3C,MAAM,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;YACnC,MAAM,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;YAClC,MAAM,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QACpC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;YAChD,iBAAiB,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;YAE7C,4CAA4C;YAC5C,MAAM,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;YACrD,MAAM,CAAC,GAAG,EAAE,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;YACpD,MAAM,CAAC,GAAG,EAAE,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QACtD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,6BAA6B,EAAE,GAAG,EAAE;QAC3C,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;YAClE,IAAI,CAAC;gBACH,eAAe,CAAC,OAAO,CAAC,CAAC;gBACzB,IAAI,CAAC,oBAAoB,CAAC,CAAC;YAC7B,CAAC;YAAC,OAAO,KAAU,EAAE,CAAC;gBACpB,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;gBACjD,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC;YACzD,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;YAC/C,IAAI,CAAC;gBACH,cAAc,CAAC,OAAO,CAAC,CAAC;gBACxB,IAAI,CAAC,oBAAoB,CAAC,CAAC;YAC7B,CAAC;YAAC,OAAO,KAAU,EAAE,CAAC;gBACpB,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;YACnD,CAAC;YAED,IAAI,CAAC;gBACH,cAAc,CAAC,OAAO,CAAC,CAAC;gBACxB,IAAI,CAAC,oBAAoB,CAAC,CAAC;YAC7B,CAAC;YAAC,OAAO,KAAU,EAAE,CAAC;gBACpB,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;YACnD,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;QACtC,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;YACjE,4BAA4B;YAC5B,MAAM,cAAc,GAAG,UAAU,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAC9D,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;YACzC,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAEvC,MAAM,UAAU,GAAG,iBAAiB,CAAC,qBAAqB,EAAE,CAAC;YAC7D,UAAU,CAAC,IAAI,CAAC,KAAK,GAAG,cAAc,CAAC;YACvC,EAAE,CAAC,aAAa,CAAC,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YAE/E,2BAA2B;YAC3B,MAAM,MAAM,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;YACxC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;YAC9B,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;YAC/D,4BAA4B;YAC5B,MAAM,cAAc,GAAG,UAAU,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAC9D,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;YACzC,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAEvC,MAAM,UAAU,GAAG,iBAAiB,CAAC,qBAAqB,EAAE,CAAC;YAC7D,EAAE,CAAC,aAAa,CAAC,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YAE/E,+BAA+B;YAC/B,iBAAiB,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;YAE7C,qCAAqC;YACrC,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjD,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAE7C,2BAA2B;YAC3B,MAAM,MAAM,GAAG,iBAAiB,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;YACxD,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAChC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;QACpC,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;YACxD,8BAA8B;YAC9B,MAAM,WAAW,GAAG,iBAAiB,CAAC,iBAAiB,CAAC,OAAO,EAAE;gBAC/D,SAAS,EAAE,MAAM;gBACjB,QAAQ,EAAE,QAAQ;aACnB,CAAC,CAAC;YAEH,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAE9C,uCAAuC;YACvC,MAAM,MAAM,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;YACxC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACxC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;YAC7D,yDAAyD;YACzD,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;YACzF,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;YAEzF,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAChE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAEhE,EAAE,CAAC,aAAa,CACd,cAAc,EACd,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAC1E,OAAO,CACR,CAAC;YACF,EAAE,CAAC,aAAa,CACd,cAAc,EACd,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAC1E,OAAO,CACR,CAAC;YAEF,4DAA4D;YAC5D,MAAM,MAAM,GAAG,eAAe,CAAC,OAAO,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;YAChE,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;YAC9B,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC7C,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAE7C,+BAA+B;YAC/B,iBAAiB,CAAC,iBAAiB,CAAC,OAAO,EAAE;gBAC3C,SAAS,EAAE,KAAK;gBAChB,QAAQ,EAAE,KAAK;aAChB,CAAC,CAAC;YAEH,uCAAuC;YACvC,MAAM,SAAS,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;YAC3C,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;YAChD,0DAA0D;YAC1D,MAAM,YAAY,GAAG,iBAAiB,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;YAChE,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAEjC,iDAAiD;YACjD,IAAI,CAAC,YAAY,EAAE,CAAC;gBAClB,iBAAiB,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;YAC/C,CAAC;YAED,oBAAoB;YACpB,MAAM,CAAC,iBAAiB,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;QACxC,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;YACvD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACzB,iBAAiB,CAAC,qBAAqB,EAAE,CAAC;YAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;YAEpC,MAAM,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;YAC1C,MAAM,MAAM,GAAG,iBAAiB,CAAC,qBAAqB,EAAE,CAAC;YAEzD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACzB,iBAAiB,CAAC,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;YAClD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;YAEpC,MAAM,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,155 @@
1
+ /**
2
+ * @fractary/faber - GitHub App Authentication
3
+ *
4
+ * Provides JWT generation, installation token exchange, and token caching
5
+ * for GitHub App authentication.
6
+ *
7
+ * This module is used by both the SDK and CLI for GitHub App auth.
8
+ */
9
+ /**
10
+ * GitHub App configuration
11
+ */
12
+ export interface GitHubAppConfig {
13
+ /** GitHub App ID */
14
+ id: string;
15
+ /** Installation ID for the target org/repo */
16
+ installation_id: string;
17
+ /** Path to PEM file (optional if env var used) */
18
+ private_key_path?: string;
19
+ /** Env var name containing base64-encoded key */
20
+ private_key_env_var?: string;
21
+ /** How the app was created */
22
+ created_via?: 'manifest-flow' | 'manual';
23
+ /** ISO 8601 timestamp of creation */
24
+ created_at?: string;
25
+ }
26
+ /**
27
+ * Private Key Loader
28
+ *
29
+ * Loads private keys from file path or environment variable
30
+ */
31
+ export declare class PrivateKeyLoader {
32
+ /**
33
+ * Load private key from configured sources.
34
+ * Priority: env var > file path
35
+ *
36
+ * @param config - GitHub App configuration
37
+ * @returns The private key content
38
+ * @throws Error if private key cannot be loaded
39
+ */
40
+ static load(config: GitHubAppConfig): Promise<string>;
41
+ /**
42
+ * Validate private key format.
43
+ *
44
+ * @param key - The private key content
45
+ * @returns true if valid PEM format
46
+ */
47
+ static validate(key: string): boolean;
48
+ }
49
+ /**
50
+ * GitHub App Authentication
51
+ *
52
+ * Handles JWT generation, installation token exchange, and caching
53
+ */
54
+ export declare class GitHubAppAuth {
55
+ private cache;
56
+ private config;
57
+ private refreshPromise;
58
+ private static readonly REFRESH_THRESHOLD_MS;
59
+ private static readonly JWT_EXPIRY_SECONDS;
60
+ private static readonly GITHUB_API_URL;
61
+ constructor(config: GitHubAppConfig);
62
+ /**
63
+ * Get the configuration
64
+ */
65
+ getConfig(): GitHubAppConfig;
66
+ /**
67
+ * Get a valid installation token.
68
+ * Returns cached token if still valid, otherwise generates new one.
69
+ *
70
+ * @returns Installation access token
71
+ */
72
+ getToken(): Promise<string>;
73
+ /**
74
+ * Force refresh the token.
75
+ *
76
+ * @returns New installation access token
77
+ */
78
+ refreshToken(): Promise<string>;
79
+ /**
80
+ * Check if token needs refresh (within 5 minutes of expiration).
81
+ *
82
+ * @returns true if token should be refreshed
83
+ */
84
+ isTokenExpiringSoon(): boolean;
85
+ /**
86
+ * Validate the configuration and private key.
87
+ *
88
+ * @throws Error if configuration is invalid
89
+ */
90
+ validate(): Promise<void>;
91
+ /**
92
+ * Perform the actual token refresh
93
+ */
94
+ private doRefresh;
95
+ /**
96
+ * Generate a JWT for GitHub App authentication
97
+ */
98
+ private generateJWT;
99
+ /**
100
+ * Exchange JWT for installation access token
101
+ */
102
+ private exchangeForInstallationToken;
103
+ /**
104
+ * Check if token is expired
105
+ */
106
+ private isExpired;
107
+ /**
108
+ * Check if token is expiring soon
109
+ */
110
+ private isExpiringSoon;
111
+ /**
112
+ * Trigger background token refresh with retry (non-blocking)
113
+ */
114
+ private triggerBackgroundRefresh;
115
+ /**
116
+ * Refresh token with exponential backoff retry
117
+ *
118
+ * @param maxRetries - Maximum number of retry attempts
119
+ * @param baseDelayMs - Base delay in milliseconds (doubles each retry)
120
+ */
121
+ private refreshWithRetry;
122
+ /**
123
+ * Sleep helper for retry delays
124
+ */
125
+ private sleep;
126
+ }
127
+ /**
128
+ * Token Provider Interface
129
+ *
130
+ * Abstract interface for getting tokens, supporting both PAT and GitHub App
131
+ */
132
+ export interface TokenProvider {
133
+ getToken(): Promise<string>;
134
+ }
135
+ /**
136
+ * Static Token Provider
137
+ *
138
+ * Simple provider for static PAT tokens
139
+ */
140
+ export declare class StaticTokenProvider implements TokenProvider {
141
+ private token;
142
+ constructor(token: string);
143
+ getToken(): Promise<string>;
144
+ }
145
+ /**
146
+ * GitHub App Token Provider
147
+ *
148
+ * Provider that uses GitHubAppAuth for dynamic token generation
149
+ */
150
+ export declare class GitHubAppTokenProvider implements TokenProvider {
151
+ private auth;
152
+ constructor(auth: GitHubAppAuth);
153
+ getToken(): Promise<string>;
154
+ }
155
+ //# sourceMappingURL=github-app.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github-app.d.ts","sourceRoot":"","sources":["../../src/auth/github-app.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAOH;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,oBAAoB;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,8CAA8C;IAC9C,eAAe,EAAE,MAAM,CAAC;IACxB,kDAAkD;IAClD,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iDAAiD;IACjD,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,8BAA8B;IAC9B,WAAW,CAAC,EAAE,eAAe,GAAG,QAAQ,CAAC;IACzC,qCAAqC;IACrC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAqBD;;;;GAIG;AACH,qBAAa,gBAAgB;IAC3B;;;;;;;OAOG;WACU,IAAI,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC;IAiD3D;;;;;OAKG;IACH,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;CAUtC;AAED;;;;GAIG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,KAAK,CAAuC;IACpD,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,cAAc,CAAgC;IAGtD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAAiB;IAE7D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAO;IAEjD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAA4B;gBAEtD,MAAM,EAAE,eAAe;IAInC;;OAEG;IACH,SAAS,IAAI,eAAe;IAI5B;;;;;OAKG;IACG,QAAQ,IAAI,OAAO,CAAC,MAAM,CAAC;IAkBjC;;;;OAIG;IACG,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC;IAerC;;;;OAIG;IACH,mBAAmB,IAAI,OAAO;IAK9B;;;;OAIG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAkB/B;;OAEG;YACW,SAAS;IAcvB;;OAEG;YACW,WAAW;IAoBzB;;OAEG;YACW,4BAA4B;IA2D1C;;OAEG;IACH,OAAO,CAAC,SAAS;IAIjB;;OAEG;IACH,OAAO,CAAC,cAAc;IAItB;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAWhC;;;;;OAKG;YACW,gBAAgB;IAmC9B;;OAEG;IACH,OAAO,CAAC,KAAK;CAGd;AAED;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;CAC7B;AAED;;;;GAIG;AACH,qBAAa,mBAAoB,YAAW,aAAa;IAC3C,OAAO,CAAC,KAAK;gBAAL,KAAK,EAAE,MAAM;IAE3B,QAAQ,IAAI,OAAO,CAAC,MAAM,CAAC;CAGlC;AAED;;;;GAIG;AACH,qBAAa,sBAAuB,YAAW,aAAa;IAC9C,OAAO,CAAC,IAAI;gBAAJ,IAAI,EAAE,aAAa;IAEjC,QAAQ,IAAI,OAAO,CAAC,MAAM,CAAC;CAGlC"}
@@ -0,0 +1,348 @@
1
+ /**
2
+ * @fractary/faber - GitHub App Authentication
3
+ *
4
+ * Provides JWT generation, installation token exchange, and token caching
5
+ * for GitHub App authentication.
6
+ *
7
+ * This module is used by both the SDK and CLI for GitHub App auth.
8
+ */
9
+ import jwt from 'jsonwebtoken';
10
+ import fs from 'fs/promises';
11
+ import path from 'path';
12
+ import os from 'os';
13
+ /**
14
+ * Private Key Loader
15
+ *
16
+ * Loads private keys from file path or environment variable
17
+ */
18
+ export class PrivateKeyLoader {
19
+ /**
20
+ * Load private key from configured sources.
21
+ * Priority: env var > file path
22
+ *
23
+ * @param config - GitHub App configuration
24
+ * @returns The private key content
25
+ * @throws Error if private key cannot be loaded
26
+ */
27
+ static async load(config) {
28
+ // Try environment variable first (priority)
29
+ if (config.private_key_env_var) {
30
+ const envValue = process.env[config.private_key_env_var];
31
+ if (envValue) {
32
+ try {
33
+ // Decode base64-encoded key
34
+ const decoded = Buffer.from(envValue, 'base64').toString('utf-8');
35
+ if (PrivateKeyLoader.validate(decoded)) {
36
+ return decoded;
37
+ }
38
+ }
39
+ catch {
40
+ // Invalid base64, fall through to file path
41
+ }
42
+ }
43
+ }
44
+ // Try file path
45
+ if (config.private_key_path) {
46
+ try {
47
+ // Expand ~ to home directory
48
+ const expandedPath = config.private_key_path.startsWith('~')
49
+ ? config.private_key_path.replace('~', os.homedir())
50
+ : config.private_key_path;
51
+ const resolvedPath = path.resolve(expandedPath);
52
+ const key = await fs.readFile(resolvedPath, 'utf-8');
53
+ if (PrivateKeyLoader.validate(key)) {
54
+ return key;
55
+ }
56
+ throw new Error('Invalid private key format. Expected PEM-encoded RSA private key');
57
+ }
58
+ catch (error) {
59
+ if (error instanceof Error && error.message.includes('ENOENT')) {
60
+ throw new Error(`GitHub App private key not found at '${config.private_key_path}'. ` +
61
+ `Check 'private_key_path' in config or set ${config.private_key_env_var || 'GITHUB_APP_PRIVATE_KEY'} env var`);
62
+ }
63
+ throw error;
64
+ }
65
+ }
66
+ throw new Error('GitHub App private key not found. ' +
67
+ "Configure 'private_key_path' in .fractary/config.yaml or set GITHUB_APP_PRIVATE_KEY env var");
68
+ }
69
+ /**
70
+ * Validate private key format.
71
+ *
72
+ * @param key - The private key content
73
+ * @returns true if valid PEM format
74
+ */
75
+ static validate(key) {
76
+ // Check for PEM format (RSA or PKCS#8)
77
+ const trimmed = key.trim();
78
+ return ((trimmed.startsWith('-----BEGIN RSA PRIVATE KEY-----') &&
79
+ trimmed.endsWith('-----END RSA PRIVATE KEY-----')) ||
80
+ (trimmed.startsWith('-----BEGIN PRIVATE KEY-----') &&
81
+ trimmed.endsWith('-----END PRIVATE KEY-----')));
82
+ }
83
+ }
84
+ /**
85
+ * GitHub App Authentication
86
+ *
87
+ * Handles JWT generation, installation token exchange, and caching
88
+ */
89
+ export class GitHubAppAuth {
90
+ cache = new Map();
91
+ config;
92
+ refreshPromise = null;
93
+ // Token refresh threshold (5 minutes before expiration)
94
+ static REFRESH_THRESHOLD_MS = 5 * 60 * 1000;
95
+ // JWT validity period (reduced to 5 minutes to handle clock skew)
96
+ static JWT_EXPIRY_SECONDS = 300;
97
+ // GitHub API base URL
98
+ static GITHUB_API_URL = 'https://api.github.com';
99
+ constructor(config) {
100
+ this.config = config;
101
+ }
102
+ /**
103
+ * Get the configuration
104
+ */
105
+ getConfig() {
106
+ return this.config;
107
+ }
108
+ /**
109
+ * Get a valid installation token.
110
+ * Returns cached token if still valid, otherwise generates new one.
111
+ *
112
+ * @returns Installation access token
113
+ */
114
+ async getToken() {
115
+ const cacheKey = this.config.installation_id;
116
+ const cached = this.cache.get(cacheKey);
117
+ if (cached && !this.isExpired(cached) && !this.isExpiringSoon(cached)) {
118
+ return cached.token;
119
+ }
120
+ // If token is expiring soon but still valid, trigger background refresh
121
+ if (cached && !this.isExpired(cached) && this.isExpiringSoon(cached)) {
122
+ this.triggerBackgroundRefresh();
123
+ return cached.token;
124
+ }
125
+ // Token expired or missing, must refresh synchronously
126
+ return this.refreshToken();
127
+ }
128
+ /**
129
+ * Force refresh the token.
130
+ *
131
+ * @returns New installation access token
132
+ */
133
+ async refreshToken() {
134
+ // Deduplicate concurrent refresh requests
135
+ if (this.refreshPromise) {
136
+ return this.refreshPromise;
137
+ }
138
+ this.refreshPromise = this.doRefresh();
139
+ try {
140
+ return await this.refreshPromise;
141
+ }
142
+ finally {
143
+ this.refreshPromise = null;
144
+ }
145
+ }
146
+ /**
147
+ * Check if token needs refresh (within 5 minutes of expiration).
148
+ *
149
+ * @returns true if token should be refreshed
150
+ */
151
+ isTokenExpiringSoon() {
152
+ const cached = this.cache.get(this.config.installation_id);
153
+ return cached ? this.isExpiringSoon(cached) : true;
154
+ }
155
+ /**
156
+ * Validate the configuration and private key.
157
+ *
158
+ * @throws Error if configuration is invalid
159
+ */
160
+ async validate() {
161
+ // Validate required fields
162
+ if (!this.config.id) {
163
+ throw new Error("GitHub App ID is required. Configure 'app.id' in .fractary/config.yaml");
164
+ }
165
+ if (!this.config.installation_id) {
166
+ throw new Error("GitHub App Installation ID is required. Configure 'app.installation_id' in .fractary/config.yaml");
167
+ }
168
+ // Validate private key can be loaded
169
+ await PrivateKeyLoader.load(this.config);
170
+ // Attempt to generate JWT to validate key
171
+ await this.generateJWT();
172
+ }
173
+ /**
174
+ * Perform the actual token refresh
175
+ */
176
+ async doRefresh() {
177
+ const jwtToken = await this.generateJWT();
178
+ const installationToken = await this.exchangeForInstallationToken(jwtToken);
179
+ // Cache the token
180
+ this.cache.set(this.config.installation_id, {
181
+ token: installationToken.token,
182
+ expires_at: new Date(installationToken.expires_at),
183
+ installation_id: this.config.installation_id,
184
+ });
185
+ return installationToken.token;
186
+ }
187
+ /**
188
+ * Generate a JWT for GitHub App authentication
189
+ */
190
+ async generateJWT() {
191
+ const privateKey = await PrivateKeyLoader.load(this.config);
192
+ const now = Math.floor(Date.now() / 1000);
193
+ const payload = {
194
+ iat: now - 60, // Issued 60 seconds ago to allow for clock drift
195
+ exp: now + GitHubAppAuth.JWT_EXPIRY_SECONDS,
196
+ iss: this.config.id,
197
+ };
198
+ try {
199
+ return jwt.sign(payload, privateKey, { algorithm: 'RS256' });
200
+ }
201
+ catch (error) {
202
+ if (error instanceof Error) {
203
+ throw new Error(`Failed to generate JWT: ${error.message}`);
204
+ }
205
+ throw error;
206
+ }
207
+ }
208
+ /**
209
+ * Exchange JWT for installation access token
210
+ */
211
+ async exchangeForInstallationToken(jwtToken) {
212
+ const url = `${GitHubAppAuth.GITHUB_API_URL}/app/installations/${this.config.installation_id}/access_tokens`;
213
+ let response;
214
+ try {
215
+ response = await fetch(url, {
216
+ method: 'POST',
217
+ headers: {
218
+ Accept: 'application/vnd.github+json',
219
+ Authorization: `Bearer ${jwtToken}`,
220
+ 'X-GitHub-Api-Version': '2022-11-28',
221
+ },
222
+ });
223
+ }
224
+ catch (error) {
225
+ if (error instanceof Error) {
226
+ throw new Error(`Failed to connect to GitHub API: ${error.message}`);
227
+ }
228
+ throw error;
229
+ }
230
+ if (!response.ok) {
231
+ const errorBody = await response.text().catch(() => 'Unknown error');
232
+ if (response.status === 401) {
233
+ throw new Error(`Failed to authenticate with GitHub App. Status: ${response.status}, Response: ${errorBody}`);
234
+ }
235
+ if (response.status === 404) {
236
+ throw new Error(`GitHub App installation not found (ID: ${this.config.installation_id}). ` +
237
+ 'Verify the Installation ID is correct and the app is installed.');
238
+ }
239
+ if (response.status === 403) {
240
+ // Check for rate limiting
241
+ const rateLimitRemaining = response.headers.get('x-ratelimit-remaining');
242
+ const rateLimitReset = response.headers.get('x-ratelimit-reset');
243
+ if (rateLimitRemaining === '0' && rateLimitReset) {
244
+ const resetValue = parseInt(rateLimitReset, 10);
245
+ if (!isNaN(resetValue)) {
246
+ const resetTime = new Date(resetValue * 1000);
247
+ const secondsUntilReset = Math.ceil((resetTime.getTime() - Date.now()) / 1000);
248
+ throw new Error(`GitHub API rate limited. Retry after ${secondsUntilReset} seconds.`);
249
+ }
250
+ }
251
+ }
252
+ throw new Error(`Failed to get installation token: ${response.status} ${errorBody}`);
253
+ }
254
+ return response.json();
255
+ }
256
+ /**
257
+ * Check if token is expired
258
+ */
259
+ isExpired(cached) {
260
+ return cached.expires_at.getTime() <= Date.now();
261
+ }
262
+ /**
263
+ * Check if token is expiring soon
264
+ */
265
+ isExpiringSoon(cached) {
266
+ return cached.expires_at.getTime() - Date.now() < GitHubAppAuth.REFRESH_THRESHOLD_MS;
267
+ }
268
+ /**
269
+ * Trigger background token refresh with retry (non-blocking)
270
+ */
271
+ triggerBackgroundRefresh() {
272
+ if (this.refreshPromise) {
273
+ return; // Already refreshing
274
+ }
275
+ // Retry with exponential backoff for transient failures
276
+ this.refreshWithRetry(3, 1000).catch(error => {
277
+ console.error('[GitHubAppAuth] Background token refresh failed after retries:', error.message);
278
+ });
279
+ }
280
+ /**
281
+ * Refresh token with exponential backoff retry
282
+ *
283
+ * @param maxRetries - Maximum number of retry attempts
284
+ * @param baseDelayMs - Base delay in milliseconds (doubles each retry)
285
+ */
286
+ async refreshWithRetry(maxRetries, baseDelayMs) {
287
+ let lastError = null;
288
+ for (let attempt = 0; attempt <= maxRetries; attempt++) {
289
+ try {
290
+ return await this.refreshToken();
291
+ }
292
+ catch (error) {
293
+ lastError = error instanceof Error ? error : new Error(String(error));
294
+ // Don't retry auth errors (invalid credentials, wrong installation ID)
295
+ const errorMessage = lastError.message.toLowerCase();
296
+ if (errorMessage.includes('401') ||
297
+ errorMessage.includes('404') ||
298
+ errorMessage.includes('invalid') ||
299
+ errorMessage.includes('not found')) {
300
+ throw lastError;
301
+ }
302
+ // If we have retries left, wait with exponential backoff
303
+ if (attempt < maxRetries) {
304
+ const delay = baseDelayMs * Math.pow(2, attempt);
305
+ console.error(`[GitHubAppAuth] Token refresh failed (attempt ${attempt + 1}/${maxRetries + 1}), ` +
306
+ `retrying in ${delay}ms: ${lastError.message}`);
307
+ await this.sleep(delay);
308
+ }
309
+ }
310
+ }
311
+ throw lastError || new Error('Token refresh failed after retries');
312
+ }
313
+ /**
314
+ * Sleep helper for retry delays
315
+ */
316
+ sleep(ms) {
317
+ return new Promise(resolve => setTimeout(resolve, ms));
318
+ }
319
+ }
320
+ /**
321
+ * Static Token Provider
322
+ *
323
+ * Simple provider for static PAT tokens
324
+ */
325
+ export class StaticTokenProvider {
326
+ token;
327
+ constructor(token) {
328
+ this.token = token;
329
+ }
330
+ async getToken() {
331
+ return this.token;
332
+ }
333
+ }
334
+ /**
335
+ * GitHub App Token Provider
336
+ *
337
+ * Provider that uses GitHubAppAuth for dynamic token generation
338
+ */
339
+ export class GitHubAppTokenProvider {
340
+ auth;
341
+ constructor(auth) {
342
+ this.auth = auth;
343
+ }
344
+ async getToken() {
345
+ return this.auth.getToken();
346
+ }
347
+ }
348
+ //# sourceMappingURL=github-app.js.map