github-issue-tower-defence-management 1.69.5 → 1.69.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.prettierignore +1 -0
- package/CHANGELOG.md +7 -0
- package/bin/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.js +13 -0
- package/bin/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.js.map +1 -1
- package/bin/adapter/proxy/RateLimitCache.js +3 -0
- package/bin/adapter/proxy/RateLimitCache.js.map +1 -1
- package/bin/adapter/repositories/ProxyRateLimitCacheRepository.js +2 -1
- package/bin/adapter/repositories/ProxyRateLimitCacheRepository.js.map +1 -1
- package/bin/domain/usecases/UpdateRateLimitCacheUseCase.js +5 -1
- package/bin/domain/usecases/UpdateRateLimitCacheUseCase.js.map +1 -1
- package/package.json +1 -1
- package/src/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.test.ts +94 -0
- package/src/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.ts +44 -0
- package/src/adapter/proxy/RateLimitCache.test.ts +43 -0
- package/src/adapter/proxy/RateLimitCache.ts +4 -0
- package/src/adapter/repositories/ProxyRateLimitCacheRepository.test.ts +21 -6
- package/src/adapter/repositories/ProxyRateLimitCacheRepository.ts +2 -1
- package/src/domain/usecases/UpdateRateLimitCacheUseCase.test.ts +108 -11
- package/src/domain/usecases/UpdateRateLimitCacheUseCase.ts +7 -1
- package/src/domain/usecases/adapter-interfaces/RateLimitCacheRepository.ts +1 -0
- package/types/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.d.ts.map +1 -1
- package/types/adapter/proxy/RateLimitCache.d.ts +1 -0
- package/types/adapter/proxy/RateLimitCache.d.ts.map +1 -1
- package/types/adapter/repositories/ProxyRateLimitCacheRepository.d.ts.map +1 -1
- package/types/domain/usecases/UpdateRateLimitCacheUseCase.d.ts.map +1 -1
- package/types/domain/usecases/adapter-interfaces/RateLimitCacheRepository.d.ts +1 -0
- package/types/domain/usecases/adapter-interfaces/RateLimitCacheRepository.d.ts.map +1 -1
package/.prettierignore
CHANGED
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
## [1.69.6](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/compare/v1.69.5...v1.69.6) (2026-06-03)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Bug Fixes
|
|
5
|
+
|
|
6
|
+
* **rate-limit:** probe tokens hourly to recover from model weekly limit deadlock ([ec82afa](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/commit/ec82afa379914caf49388075a21f611bd65b467a)), closes [#696](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/issues/696)
|
|
7
|
+
|
|
1
8
|
## [1.69.5](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/compare/v1.69.4...v1.69.5) (2026-06-02)
|
|
2
9
|
|
|
3
10
|
|
|
@@ -384,6 +384,19 @@ class HandleScheduledEventUseCaseHandler {
|
|
|
384
384
|
}
|
|
385
385
|
: input.startPreparation,
|
|
386
386
|
};
|
|
387
|
+
const resolveConfigSource = (readmeValue, configFileValue) => {
|
|
388
|
+
if (readmeValue !== undefined && readmeValue !== null) {
|
|
389
|
+
return 'readmeOverride';
|
|
390
|
+
}
|
|
391
|
+
if (configFileValue !== undefined && configFileValue !== null) {
|
|
392
|
+
return 'configFile';
|
|
393
|
+
}
|
|
394
|
+
return 'unset (default)';
|
|
395
|
+
};
|
|
396
|
+
const formatEffectiveConfig = (value, readmeValue, configFileValue) => `${value ?? 'null'} (source: ${resolveConfigSource(readmeValue, configFileValue)})`;
|
|
397
|
+
console.log(`Effective maximumPreparingIssuesCount: ${formatEffectiveConfig(mergedInput.startPreparation?.maximumPreparingIssuesCount, readmeConfig.maximumPreparingIssuesCount, input.startPreparation?.maximumPreparingIssuesCount)}`);
|
|
398
|
+
console.log(`Effective defaultLlmModelName: ${formatEffectiveConfig(mergedInput.startPreparation?.defaultLlmModelName, readmeConfig.defaultLlmModelName, input.startPreparation?.defaultLlmModelName)}`);
|
|
399
|
+
console.log(`Effective defaultAgentName: ${formatEffectiveConfig(mergedInput.startPreparation?.defaultAgentName, readmeConfig.defaultAgentName, input.startPreparation?.defaultAgentName)}`);
|
|
387
400
|
const systemDateRepository = new SystemDateRepository_1.SystemDateRepository();
|
|
388
401
|
const localStorageRepository = new LocalStorageRepository_1.LocalStorageRepository();
|
|
389
402
|
const googleSpreadsheetRepository = new GoogleSpreadsheetRepository_1.GoogleSpreadsheetRepository(localStorageRepository, input.credentials.manager.googleServiceAccount.serviceAccountKey);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HandleScheduledEventUseCaseHandler.js","sourceRoot":"","sources":["../../../../src/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"HandleScheduledEventUseCaseHandler.js","sourceRoot":"","sources":["../../../../src/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.ts"],"names":[],"mappings":"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"}
|
|
@@ -195,6 +195,8 @@ const readRateLimit = (token) => {
|
|
|
195
195
|
const unifiedRejected = status === 'rejected';
|
|
196
196
|
const fiveHourRejected = fiveHourStatus === 'rejected';
|
|
197
197
|
const sevenDayRejected = sevenDayStatus === 'rejected';
|
|
198
|
+
const storedTs = parsed.ts;
|
|
199
|
+
const lastUpdatedEpoch = typeof storedTs === 'number' ? storedTs : 0;
|
|
198
200
|
return {
|
|
199
201
|
fiveHourUtilization: num('anthropic-ratelimit-unified-5h-utilization'),
|
|
200
202
|
fiveHourReset: num('anthropic-ratelimit-unified-5h-reset'),
|
|
@@ -208,6 +210,7 @@ const readRateLimit = (token) => {
|
|
|
208
210
|
fiveHourRejected,
|
|
209
211
|
sevenDayRejected,
|
|
210
212
|
modelWeeklyLimits: readModelWeeklyLimits(parsed),
|
|
213
|
+
lastUpdatedEpoch,
|
|
211
214
|
};
|
|
212
215
|
}
|
|
213
216
|
catch {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RateLimitCache.js","sourceRoot":"","sources":["../../../src/adapter/proxy/RateLimitCache.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+CAAiC;AACjC,uCAAyB;AACzB,uCAAyB;AACzB,2CAA6B;
|
|
1
|
+
{"version":3,"file":"RateLimitCache.js","sourceRoot":"","sources":["../../../src/adapter/proxy/RateLimitCache.ts"],"names":[],"mappings":"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"}
|
|
@@ -58,7 +58,8 @@ class ProxyRateLimitCacheRepository {
|
|
|
58
58
|
return tokens.map((token) => {
|
|
59
59
|
const snapshot = (0, RateLimitCache_1.readRateLimit)(token);
|
|
60
60
|
const unifiedReset = snapshot !== null ? snapshot.fiveHourReset : 0;
|
|
61
|
-
|
|
61
|
+
const lastProbeEpoch = snapshot !== null ? snapshot.lastUpdatedEpoch : 0;
|
|
62
|
+
return { token, unifiedReset, lastProbeEpoch };
|
|
62
63
|
});
|
|
63
64
|
};
|
|
64
65
|
this.probeToken = async (token) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProxyRateLimitCacheRepository.js","sourceRoot":"","sources":["../../../src/adapter/repositories/ProxyRateLimitCacheRepository.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAA6B;AAG7B,4DAAoE;AACpE,8DAAsD;AAEtD,MAAM,WAAW,GAAG,kBAAkB,CAAC;AAEvC,MAAM,kBAAkB,GAAG,IAAI,CAAC,SAAS,CAAC;IACxC,KAAK,EAAE,WAAW;IAClB,UAAU,EAAE,CAAC;IACb,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;CAC5C,CAAC,CAAC;AAEH,MAAa,6BAA6B;IACxC,YACmB,iBAAgC,EAChC,OAAe,2BAAU;QADzB,sBAAiB,GAAjB,iBAAiB,CAAe;QAChC,SAAI,GAAJ,IAAI,CAAqB;QAG5C,4BAAuB,GAAG,GAA0B,EAAE;YACpD,IAAI,IAAI,CAAC,iBAAiB,KAAK,IAAI,EAAE,CAAC;gBACpC,OAAO,EAAE,CAAC;YACZ,CAAC;YACD,MAAM,MAAM,GAAG,IAAA,4BAAU,EAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YAClD,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;gBACpB,OAAO,EAAE,CAAC;YACZ,CAAC;YACD,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;gBAC1B,MAAM,QAAQ,GAAG,IAAA,8BAAa,EAAC,KAAK,CAAC,CAAC;gBACtC,MAAM,YAAY,GAAG,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;gBACpE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"ProxyRateLimitCacheRepository.js","sourceRoot":"","sources":["../../../src/adapter/repositories/ProxyRateLimitCacheRepository.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAA6B;AAG7B,4DAAoE;AACpE,8DAAsD;AAEtD,MAAM,WAAW,GAAG,kBAAkB,CAAC;AAEvC,MAAM,kBAAkB,GAAG,IAAI,CAAC,SAAS,CAAC;IACxC,KAAK,EAAE,WAAW;IAClB,UAAU,EAAE,CAAC;IACb,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;CAC5C,CAAC,CAAC;AAEH,MAAa,6BAA6B;IACxC,YACmB,iBAAgC,EAChC,OAAe,2BAAU;QADzB,sBAAiB,GAAjB,iBAAiB,CAAe;QAChC,SAAI,GAAJ,IAAI,CAAqB;QAG5C,4BAAuB,GAAG,GAA0B,EAAE;YACpD,IAAI,IAAI,CAAC,iBAAiB,KAAK,IAAI,EAAE,CAAC;gBACpC,OAAO,EAAE,CAAC;YACZ,CAAC;YACD,MAAM,MAAM,GAAG,IAAA,4BAAU,EAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YAClD,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;gBACpB,OAAO,EAAE,CAAC;YACZ,CAAC;YACD,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;gBAC1B,MAAM,QAAQ,GAAG,IAAA,8BAAa,EAAC,KAAK,CAAC,CAAC;gBACtC,MAAM,YAAY,GAAG,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;gBACpE,MAAM,cAAc,GAAG,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;gBACzE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,CAAC;YACjD,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;QAEF,eAAU,GAAG,KAAK,EAAE,KAAa,EAAiB,EAAE;YAClD,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;gBAClC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAC1B;oBACE,IAAI,EAAE,WAAW;oBACjB,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,MAAM,EAAE,MAAM;oBACd,IAAI,EAAE,cAAc;oBACpB,OAAO,EAAE;wBACP,cAAc,EAAE,kBAAkB;wBAClC,mBAAmB,EAAE,YAAY;wBACjC,aAAa,EAAE,UAAU,KAAK,EAAE;wBAChC,gBAAgB,EAAE,MAAM,CAAC,UAAU,CAAC,kBAAkB,CAAC;qBACxD;iBACF,EACD,CAAC,QAAQ,EAAE,EAAE;oBACX,QAAQ,CAAC,MAAM,EAAE,CAAC;oBAClB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;gBACtC,CAAC,CACF,CAAC;gBACF,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;oBAC5B,OAAO,CAAC,KAAK,CACX,+DAA+D,KAAK,CAAC,OAAO,EAAE,CAC/E,CAAC;oBACF,OAAO,EAAE,CAAC;gBACZ,CAAC,CAAC,CAAC;gBACH,OAAO,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;gBAClC,OAAO,CAAC,GAAG,EAAE,CAAC;YAChB,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;IA/CC,CAAC;CAgDL;AApDD,sEAoDC"}
|
|
@@ -1,13 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.UpdateRateLimitCacheUseCase = void 0;
|
|
4
|
+
const HOURLY_PROBE_INTERVAL_SECONDS = 3600;
|
|
4
5
|
class UpdateRateLimitCacheUseCase {
|
|
5
6
|
constructor(rateLimitCacheRepository) {
|
|
6
7
|
this.rateLimitCacheRepository = rateLimitCacheRepository;
|
|
7
8
|
this.run = async (params) => {
|
|
8
9
|
const caches = this.rateLimitCacheRepository.getTokenRateLimitCaches();
|
|
9
10
|
for (const cache of caches) {
|
|
10
|
-
|
|
11
|
+
const unifiedResetExpired = cache.unifiedReset < params.nowEpochSeconds;
|
|
12
|
+
const hourlyProbeDue = params.nowEpochSeconds - cache.lastProbeEpoch >=
|
|
13
|
+
HOURLY_PROBE_INTERVAL_SECONDS;
|
|
14
|
+
if (unifiedResetExpired || hourlyProbeDue) {
|
|
11
15
|
await this.rateLimitCacheRepository.probeToken(cache.token);
|
|
12
16
|
}
|
|
13
17
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UpdateRateLimitCacheUseCase.js","sourceRoot":"","sources":["../../../src/domain/usecases/UpdateRateLimitCacheUseCase.ts"],"names":[],"mappings":";;;AAEA,MAAa,2BAA2B;IACtC,YACmB,wBAAkD;QAAlD,6BAAwB,GAAxB,wBAAwB,CAA0B;QAGrE,QAAG,GAAG,KAAK,EAAE,MAAmC,EAAiB,EAAE;YACjE,MAAM,MAAM,GAAG,IAAI,CAAC,wBAAwB,CAAC,uBAAuB,EAAE,CAAC;YACvE,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBAC3B,
|
|
1
|
+
{"version":3,"file":"UpdateRateLimitCacheUseCase.js","sourceRoot":"","sources":["../../../src/domain/usecases/UpdateRateLimitCacheUseCase.ts"],"names":[],"mappings":";;;AAEA,MAAM,6BAA6B,GAAG,IAAI,CAAC;AAE3C,MAAa,2BAA2B;IACtC,YACmB,wBAAkD;QAAlD,6BAAwB,GAAxB,wBAAwB,CAA0B;QAGrE,QAAG,GAAG,KAAK,EAAE,MAAmC,EAAiB,EAAE;YACjE,MAAM,MAAM,GAAG,IAAI,CAAC,wBAAwB,CAAC,uBAAuB,EAAE,CAAC;YACvE,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBAC3B,MAAM,mBAAmB,GAAG,KAAK,CAAC,YAAY,GAAG,MAAM,CAAC,eAAe,CAAC;gBACxE,MAAM,cAAc,GAClB,MAAM,CAAC,eAAe,GAAG,KAAK,CAAC,cAAc;oBAC7C,6BAA6B,CAAC;gBAChC,IAAI,mBAAmB,IAAI,cAAc,EAAE,CAAC;oBAC1C,MAAM,IAAI,CAAC,wBAAwB,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBAC9D,CAAC;YACH,CAAC;QACH,CAAC,CAAC;IAbC,CAAC;CAcL;AAjBD,kEAiBC"}
|
package/package.json
CHANGED
|
@@ -457,4 +457,98 @@ claudeCodeOauthTokenListJsonPath: /readme/tokens.json
|
|
|
457
457
|
);
|
|
458
458
|
});
|
|
459
459
|
});
|
|
460
|
+
|
|
461
|
+
describe('effective config logging', () => {
|
|
462
|
+
let consoleLogSpy: jest.SpyInstance;
|
|
463
|
+
|
|
464
|
+
beforeEach(() => {
|
|
465
|
+
consoleLogSpy = jest.spyOn(console, 'log').mockImplementation(() => {});
|
|
466
|
+
});
|
|
467
|
+
|
|
468
|
+
afterEach(() => {
|
|
469
|
+
consoleLogSpy.mockRestore();
|
|
470
|
+
});
|
|
471
|
+
|
|
472
|
+
it('should log the effective values with configFile source when only the YAML config sets them', async () => {
|
|
473
|
+
const configWithPreparation = {
|
|
474
|
+
...validConfig,
|
|
475
|
+
startPreparation: {
|
|
476
|
+
defaultAgentName: 'yaml-agent',
|
|
477
|
+
defaultLlmModelName: 'yaml-model',
|
|
478
|
+
configFilePath: './config.yml',
|
|
479
|
+
maximumPreparingIssuesCount: 10,
|
|
480
|
+
},
|
|
481
|
+
};
|
|
482
|
+
mockFetchReturningReadme(null);
|
|
483
|
+
jest
|
|
484
|
+
.mocked(fs.readFileSync)
|
|
485
|
+
.mockReturnValue(YAML.stringify(configWithPreparation));
|
|
486
|
+
|
|
487
|
+
const handler = new HandleScheduledEventUseCaseHandler();
|
|
488
|
+
await handler.handle('config.yml', false);
|
|
489
|
+
|
|
490
|
+
expect(consoleLogSpy).toHaveBeenCalledWith(
|
|
491
|
+
'Effective maximumPreparingIssuesCount: 10 (source: configFile)',
|
|
492
|
+
);
|
|
493
|
+
expect(consoleLogSpy).toHaveBeenCalledWith(
|
|
494
|
+
'Effective defaultLlmModelName: yaml-model (source: configFile)',
|
|
495
|
+
);
|
|
496
|
+
expect(consoleLogSpy).toHaveBeenCalledWith(
|
|
497
|
+
'Effective defaultAgentName: yaml-agent (source: configFile)',
|
|
498
|
+
);
|
|
499
|
+
});
|
|
500
|
+
|
|
501
|
+
it('should log the effective values with readmeOverride source when the README config overrides them', async () => {
|
|
502
|
+
const readmeContent = `<details>
|
|
503
|
+
<summary>config</summary>
|
|
504
|
+
maximumPreparingIssuesCount: 3
|
|
505
|
+
defaultLlmModelName: readme-model
|
|
506
|
+
defaultAgentName: readme-agent
|
|
507
|
+
</details>`;
|
|
508
|
+
mockFetchReturningReadme(readmeContent);
|
|
509
|
+
const configWithPreparation = {
|
|
510
|
+
...validConfig,
|
|
511
|
+
startPreparation: {
|
|
512
|
+
defaultAgentName: 'yaml-agent',
|
|
513
|
+
defaultLlmModelName: 'yaml-model',
|
|
514
|
+
configFilePath: './config.yml',
|
|
515
|
+
maximumPreparingIssuesCount: 10,
|
|
516
|
+
},
|
|
517
|
+
};
|
|
518
|
+
jest
|
|
519
|
+
.mocked(fs.readFileSync)
|
|
520
|
+
.mockReturnValue(YAML.stringify(configWithPreparation));
|
|
521
|
+
|
|
522
|
+
const handler = new HandleScheduledEventUseCaseHandler();
|
|
523
|
+
await handler.handle('config.yml', false);
|
|
524
|
+
|
|
525
|
+
expect(consoleLogSpy).toHaveBeenCalledWith(
|
|
526
|
+
'Effective maximumPreparingIssuesCount: 3 (source: readmeOverride)',
|
|
527
|
+
);
|
|
528
|
+
expect(consoleLogSpy).toHaveBeenCalledWith(
|
|
529
|
+
'Effective defaultLlmModelName: readme-model (source: readmeOverride)',
|
|
530
|
+
);
|
|
531
|
+
expect(consoleLogSpy).toHaveBeenCalledWith(
|
|
532
|
+
'Effective defaultAgentName: readme-agent (source: readmeOverride)',
|
|
533
|
+
);
|
|
534
|
+
});
|
|
535
|
+
|
|
536
|
+
it('should log null with unset (default) source when neither README nor config provides the value', async () => {
|
|
537
|
+
mockFetchReturningReadme(null);
|
|
538
|
+
jest.mocked(fs.readFileSync).mockReturnValue(YAML.stringify(validConfig));
|
|
539
|
+
|
|
540
|
+
const handler = new HandleScheduledEventUseCaseHandler();
|
|
541
|
+
await handler.handle('config.yml', false);
|
|
542
|
+
|
|
543
|
+
expect(consoleLogSpy).toHaveBeenCalledWith(
|
|
544
|
+
'Effective maximumPreparingIssuesCount: null (source: unset (default))',
|
|
545
|
+
);
|
|
546
|
+
expect(consoleLogSpy).toHaveBeenCalledWith(
|
|
547
|
+
'Effective defaultLlmModelName: null (source: unset (default))',
|
|
548
|
+
);
|
|
549
|
+
expect(consoleLogSpy).toHaveBeenCalledWith(
|
|
550
|
+
'Effective defaultAgentName: null (source: unset (default))',
|
|
551
|
+
);
|
|
552
|
+
});
|
|
553
|
+
});
|
|
460
554
|
});
|
|
@@ -141,6 +141,50 @@ export class HandleScheduledEventUseCaseHandler {
|
|
|
141
141
|
: input.startPreparation,
|
|
142
142
|
};
|
|
143
143
|
|
|
144
|
+
type EffectiveConfigValue = string | number | null | undefined;
|
|
145
|
+
|
|
146
|
+
const resolveConfigSource = (
|
|
147
|
+
readmeValue: EffectiveConfigValue,
|
|
148
|
+
configFileValue: EffectiveConfigValue,
|
|
149
|
+
): 'readmeOverride' | 'configFile' | 'unset (default)' => {
|
|
150
|
+
if (readmeValue !== undefined && readmeValue !== null) {
|
|
151
|
+
return 'readmeOverride';
|
|
152
|
+
}
|
|
153
|
+
if (configFileValue !== undefined && configFileValue !== null) {
|
|
154
|
+
return 'configFile';
|
|
155
|
+
}
|
|
156
|
+
return 'unset (default)';
|
|
157
|
+
};
|
|
158
|
+
|
|
159
|
+
const formatEffectiveConfig = (
|
|
160
|
+
value: EffectiveConfigValue,
|
|
161
|
+
readmeValue: EffectiveConfigValue,
|
|
162
|
+
configFileValue: EffectiveConfigValue,
|
|
163
|
+
): string =>
|
|
164
|
+
`${value ?? 'null'} (source: ${resolveConfigSource(readmeValue, configFileValue)})`;
|
|
165
|
+
|
|
166
|
+
console.log(
|
|
167
|
+
`Effective maximumPreparingIssuesCount: ${formatEffectiveConfig(
|
|
168
|
+
mergedInput.startPreparation?.maximumPreparingIssuesCount,
|
|
169
|
+
readmeConfig.maximumPreparingIssuesCount,
|
|
170
|
+
input.startPreparation?.maximumPreparingIssuesCount,
|
|
171
|
+
)}`,
|
|
172
|
+
);
|
|
173
|
+
console.log(
|
|
174
|
+
`Effective defaultLlmModelName: ${formatEffectiveConfig(
|
|
175
|
+
mergedInput.startPreparation?.defaultLlmModelName,
|
|
176
|
+
readmeConfig.defaultLlmModelName,
|
|
177
|
+
input.startPreparation?.defaultLlmModelName,
|
|
178
|
+
)}`,
|
|
179
|
+
);
|
|
180
|
+
console.log(
|
|
181
|
+
`Effective defaultAgentName: ${formatEffectiveConfig(
|
|
182
|
+
mergedInput.startPreparation?.defaultAgentName,
|
|
183
|
+
readmeConfig.defaultAgentName,
|
|
184
|
+
input.startPreparation?.defaultAgentName,
|
|
185
|
+
)}`,
|
|
186
|
+
);
|
|
187
|
+
|
|
144
188
|
const systemDateRepository = new SystemDateRepository();
|
|
145
189
|
const localStorageRepository = new LocalStorageRepository();
|
|
146
190
|
const googleSpreadsheetRepository = new GoogleSpreadsheetRepository(
|
|
@@ -218,6 +218,49 @@ describe('RateLimitCache', () => {
|
|
|
218
218
|
const snapshot = readRateLimit(token);
|
|
219
219
|
expect(snapshot?.modelWeeklyLimits).toEqual({});
|
|
220
220
|
});
|
|
221
|
+
|
|
222
|
+
it('should expose ts as lastUpdatedEpoch in the snapshot', () => {
|
|
223
|
+
const token = 'ts-snapshot-token';
|
|
224
|
+
const before = Date.now() / 1000;
|
|
225
|
+
writeRateLimit(token, {
|
|
226
|
+
'anthropic-ratelimit-unified-status': 'allowed',
|
|
227
|
+
'anthropic-ratelimit-unified-5h-status': 'allowed',
|
|
228
|
+
'anthropic-ratelimit-unified-5h-reset': '1700000000',
|
|
229
|
+
'anthropic-ratelimit-unified-5h-utilization': '10',
|
|
230
|
+
'anthropic-ratelimit-unified-7d-status': 'allowed',
|
|
231
|
+
'anthropic-ratelimit-unified-7d-reset': '1700100000',
|
|
232
|
+
'anthropic-ratelimit-unified-7d-utilization': '5',
|
|
233
|
+
});
|
|
234
|
+
const after = Date.now() / 1000;
|
|
235
|
+
const snapshot = readRateLimit(token);
|
|
236
|
+
expect(snapshot).not.toBeNull();
|
|
237
|
+
if (snapshot === null) return;
|
|
238
|
+
expect(snapshot.lastUpdatedEpoch).toBeGreaterThanOrEqual(before);
|
|
239
|
+
expect(snapshot.lastUpdatedEpoch).toBeLessThanOrEqual(after);
|
|
240
|
+
});
|
|
241
|
+
|
|
242
|
+
it('should default lastUpdatedEpoch to 0 when the stored payload has no ts field', () => {
|
|
243
|
+
const token = 'no-ts-token';
|
|
244
|
+
fs.mkdirSync(cacheDir(), { recursive: true });
|
|
245
|
+
fs.writeFileSync(
|
|
246
|
+
cachePathForToken(token),
|
|
247
|
+
JSON.stringify({
|
|
248
|
+
headers: {
|
|
249
|
+
'anthropic-ratelimit-unified-status': 'allowed',
|
|
250
|
+
'anthropic-ratelimit-unified-5h-status': 'allowed',
|
|
251
|
+
'anthropic-ratelimit-unified-5h-reset': '1700000000',
|
|
252
|
+
'anthropic-ratelimit-unified-5h-utilization': '10',
|
|
253
|
+
'anthropic-ratelimit-unified-7d-status': 'allowed',
|
|
254
|
+
'anthropic-ratelimit-unified-7d-reset': '1700100000',
|
|
255
|
+
'anthropic-ratelimit-unified-7d-utilization': '5',
|
|
256
|
+
},
|
|
257
|
+
}),
|
|
258
|
+
);
|
|
259
|
+
const snapshot = readRateLimit(token);
|
|
260
|
+
expect(snapshot).not.toBeNull();
|
|
261
|
+
if (snapshot === null) return;
|
|
262
|
+
expect(snapshot.lastUpdatedEpoch).toBe(0);
|
|
263
|
+
});
|
|
221
264
|
});
|
|
222
265
|
|
|
223
266
|
describe('writeRateLimit stores all anthropic-ratelimit-* headers', () => {
|
|
@@ -19,6 +19,7 @@ export interface RateLimitSnapshot {
|
|
|
19
19
|
fiveHourRejected: boolean;
|
|
20
20
|
sevenDayRejected: boolean;
|
|
21
21
|
modelWeeklyLimits: Record<string, ModelWeeklyLimit>;
|
|
22
|
+
lastUpdatedEpoch: number;
|
|
22
23
|
}
|
|
23
24
|
|
|
24
25
|
export const PROXY_PORT = 8787;
|
|
@@ -183,6 +184,8 @@ export const readRateLimit = (token: string): RateLimitSnapshot | null => {
|
|
|
183
184
|
const unifiedRejected = status === 'rejected';
|
|
184
185
|
const fiveHourRejected = fiveHourStatus === 'rejected';
|
|
185
186
|
const sevenDayRejected = sevenDayStatus === 'rejected';
|
|
187
|
+
const storedTs = parsed.ts;
|
|
188
|
+
const lastUpdatedEpoch = typeof storedTs === 'number' ? storedTs : 0;
|
|
186
189
|
return {
|
|
187
190
|
fiveHourUtilization: num('anthropic-ratelimit-unified-5h-utilization'),
|
|
188
191
|
fiveHourReset: num('anthropic-ratelimit-unified-5h-reset'),
|
|
@@ -197,6 +200,7 @@ export const readRateLimit = (token: string): RateLimitSnapshot | null => {
|
|
|
197
200
|
fiveHourRejected,
|
|
198
201
|
sevenDayRejected,
|
|
199
202
|
modelWeeklyLimits: readModelWeeklyLimits(parsed),
|
|
203
|
+
lastUpdatedEpoch,
|
|
200
204
|
};
|
|
201
205
|
} catch {
|
|
202
206
|
return null;
|
|
@@ -37,8 +37,9 @@ describe('ProxyRateLimitCacheRepository', () => {
|
|
|
37
37
|
});
|
|
38
38
|
|
|
39
39
|
const futureReset = Math.floor(Date.now() / 1000) + 3600;
|
|
40
|
+
const recentEpoch = Math.floor(Date.now() / 1000) - 60;
|
|
40
41
|
|
|
41
|
-
it('should return fiveHourReset as unifiedReset for a token with a cached snapshot', () => {
|
|
42
|
+
it('should return fiveHourReset as unifiedReset and ts as lastProbeEpoch for a token with a cached snapshot', () => {
|
|
42
43
|
mockLoadTokens.mockReturnValue(['token-a']);
|
|
43
44
|
mockReadRateLimit.mockReturnValue({
|
|
44
45
|
fiveHourUtilization: 42,
|
|
@@ -51,22 +52,31 @@ describe('ProxyRateLimitCacheRepository', () => {
|
|
|
51
52
|
fiveHourRejected: false,
|
|
52
53
|
sevenDayRejected: false,
|
|
53
54
|
modelWeeklyLimits: {},
|
|
55
|
+
lastUpdatedEpoch: recentEpoch,
|
|
54
56
|
});
|
|
55
57
|
const repository = new ProxyRateLimitCacheRepository('/tokens.json');
|
|
56
58
|
|
|
57
59
|
const result = repository.getTokenRateLimitCaches();
|
|
58
60
|
|
|
59
|
-
expect(result).toEqual([
|
|
61
|
+
expect(result).toEqual([
|
|
62
|
+
{
|
|
63
|
+
token: 'token-a',
|
|
64
|
+
unifiedReset: futureReset,
|
|
65
|
+
lastProbeEpoch: recentEpoch,
|
|
66
|
+
},
|
|
67
|
+
]);
|
|
60
68
|
});
|
|
61
69
|
|
|
62
|
-
it('should return unifiedReset of 0 when no snapshot exists for a token', () => {
|
|
70
|
+
it('should return unifiedReset of 0 and lastProbeEpoch of 0 when no snapshot exists for a token', () => {
|
|
63
71
|
mockLoadTokens.mockReturnValue(['token-a']);
|
|
64
72
|
mockReadRateLimit.mockReturnValue(null);
|
|
65
73
|
const repository = new ProxyRateLimitCacheRepository('/tokens.json');
|
|
66
74
|
|
|
67
75
|
const result = repository.getTokenRateLimitCaches();
|
|
68
76
|
|
|
69
|
-
expect(result).toEqual([
|
|
77
|
+
expect(result).toEqual([
|
|
78
|
+
{ token: 'token-a', unifiedReset: 0, lastProbeEpoch: 0 },
|
|
79
|
+
]);
|
|
70
80
|
});
|
|
71
81
|
|
|
72
82
|
it('should return entries for all tokens in the list', () => {
|
|
@@ -84,6 +94,7 @@ describe('ProxyRateLimitCacheRepository', () => {
|
|
|
84
94
|
fiveHourRejected: false,
|
|
85
95
|
sevenDayRejected: false,
|
|
86
96
|
modelWeeklyLimits: {},
|
|
97
|
+
lastUpdatedEpoch: recentEpoch,
|
|
87
98
|
};
|
|
88
99
|
}
|
|
89
100
|
return null;
|
|
@@ -93,8 +104,12 @@ describe('ProxyRateLimitCacheRepository', () => {
|
|
|
93
104
|
const result = repository.getTokenRateLimitCaches();
|
|
94
105
|
|
|
95
106
|
expect(result).toEqual([
|
|
96
|
-
{
|
|
97
|
-
|
|
107
|
+
{
|
|
108
|
+
token: 'token-a',
|
|
109
|
+
unifiedReset: futureReset,
|
|
110
|
+
lastProbeEpoch: recentEpoch,
|
|
111
|
+
},
|
|
112
|
+
{ token: 'token-b', unifiedReset: 0, lastProbeEpoch: 0 },
|
|
98
113
|
]);
|
|
99
114
|
});
|
|
100
115
|
});
|
|
@@ -29,7 +29,8 @@ export class ProxyRateLimitCacheRepository implements RateLimitCacheRepository {
|
|
|
29
29
|
return tokens.map((token) => {
|
|
30
30
|
const snapshot = readRateLimit(token);
|
|
31
31
|
const unifiedReset = snapshot !== null ? snapshot.fiveHourReset : 0;
|
|
32
|
-
|
|
32
|
+
const lastProbeEpoch = snapshot !== null ? snapshot.lastUpdatedEpoch : 0;
|
|
33
|
+
return { token, unifiedReset, lastProbeEpoch };
|
|
33
34
|
});
|
|
34
35
|
};
|
|
35
36
|
|
|
@@ -12,10 +12,14 @@ describe('UpdateRateLimitCacheUseCase', () => {
|
|
|
12
12
|
});
|
|
13
13
|
|
|
14
14
|
it('should probe a token whose unifiedReset is in the past', async () => {
|
|
15
|
-
const pastReset = 1000000000;
|
|
16
15
|
const nowEpochSeconds = 1000000100;
|
|
16
|
+
const pastReset = 1000000000;
|
|
17
17
|
mockRateLimitCacheRepository.getTokenRateLimitCaches.mockReturnValue([
|
|
18
|
-
{
|
|
18
|
+
{
|
|
19
|
+
token: 'token-expired',
|
|
20
|
+
unifiedReset: pastReset,
|
|
21
|
+
lastProbeEpoch: nowEpochSeconds,
|
|
22
|
+
},
|
|
19
23
|
]);
|
|
20
24
|
mockRateLimitCacheRepository.probeToken.mockResolvedValue(undefined);
|
|
21
25
|
|
|
@@ -26,11 +30,16 @@ describe('UpdateRateLimitCacheUseCase', () => {
|
|
|
26
30
|
);
|
|
27
31
|
});
|
|
28
32
|
|
|
29
|
-
it('should not probe a token whose unifiedReset is in the future', async () => {
|
|
30
|
-
const futureReset = 9999999999;
|
|
33
|
+
it('should not probe a token whose unifiedReset is in the future and was probed within the last hour', async () => {
|
|
31
34
|
const nowEpochSeconds = 1000000000;
|
|
35
|
+
const futureReset = nowEpochSeconds + 1800;
|
|
36
|
+
const tenMinutesAgo = nowEpochSeconds - 600;
|
|
32
37
|
mockRateLimitCacheRepository.getTokenRateLimitCaches.mockReturnValue([
|
|
33
|
-
{
|
|
38
|
+
{
|
|
39
|
+
token: 'token-active',
|
|
40
|
+
unifiedReset: futureReset,
|
|
41
|
+
lastProbeEpoch: tenMinutesAgo,
|
|
42
|
+
},
|
|
34
43
|
]);
|
|
35
44
|
|
|
36
45
|
await useCase.run({ nowEpochSeconds });
|
|
@@ -39,12 +48,20 @@ describe('UpdateRateLimitCacheUseCase', () => {
|
|
|
39
48
|
});
|
|
40
49
|
|
|
41
50
|
it('should probe only tokens with expired reset when mixed tokens exist', async () => {
|
|
42
|
-
const pastReset = 1000000000;
|
|
43
|
-
const futureReset = 9999999999;
|
|
44
51
|
const nowEpochSeconds = 1000000100;
|
|
52
|
+
const pastReset = 1000000000;
|
|
53
|
+
const futureReset = nowEpochSeconds + 1800;
|
|
45
54
|
mockRateLimitCacheRepository.getTokenRateLimitCaches.mockReturnValue([
|
|
46
|
-
{
|
|
47
|
-
|
|
55
|
+
{
|
|
56
|
+
token: 'token-expired',
|
|
57
|
+
unifiedReset: pastReset,
|
|
58
|
+
lastProbeEpoch: nowEpochSeconds,
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
token: 'token-active',
|
|
62
|
+
unifiedReset: futureReset,
|
|
63
|
+
lastProbeEpoch: nowEpochSeconds,
|
|
64
|
+
},
|
|
48
65
|
]);
|
|
49
66
|
mockRateLimitCacheRepository.probeToken.mockResolvedValue(undefined);
|
|
50
67
|
|
|
@@ -57,10 +74,14 @@ describe('UpdateRateLimitCacheUseCase', () => {
|
|
|
57
74
|
});
|
|
58
75
|
|
|
59
76
|
it('should update the cache after probing by relying on the repository side effect', async () => {
|
|
60
|
-
const pastReset = 1000000000;
|
|
61
77
|
const nowEpochSeconds = 1000000100;
|
|
78
|
+
const pastReset = 1000000000;
|
|
62
79
|
mockRateLimitCacheRepository.getTokenRateLimitCaches.mockReturnValue([
|
|
63
|
-
{
|
|
80
|
+
{
|
|
81
|
+
token: 'token-expired',
|
|
82
|
+
unifiedReset: pastReset,
|
|
83
|
+
lastProbeEpoch: nowEpochSeconds,
|
|
84
|
+
},
|
|
64
85
|
]);
|
|
65
86
|
mockRateLimitCacheRepository.probeToken.mockResolvedValue(undefined);
|
|
66
87
|
|
|
@@ -78,4 +99,80 @@ describe('UpdateRateLimitCacheUseCase', () => {
|
|
|
78
99
|
|
|
79
100
|
expect(mockRateLimitCacheRepository.probeToken).not.toHaveBeenCalled();
|
|
80
101
|
});
|
|
102
|
+
|
|
103
|
+
it('should probe a token whose last probe was 61 minutes ago even when unifiedReset is in the future', async () => {
|
|
104
|
+
const nowEpochSeconds = 1000000000;
|
|
105
|
+
const futureReset = nowEpochSeconds + 7200;
|
|
106
|
+
const sixtyOneMinutesAgo = nowEpochSeconds - 61 * 60;
|
|
107
|
+
mockRateLimitCacheRepository.getTokenRateLimitCaches.mockReturnValue([
|
|
108
|
+
{
|
|
109
|
+
token: 'token-stale-probe',
|
|
110
|
+
unifiedReset: futureReset,
|
|
111
|
+
lastProbeEpoch: sixtyOneMinutesAgo,
|
|
112
|
+
},
|
|
113
|
+
]);
|
|
114
|
+
mockRateLimitCacheRepository.probeToken.mockResolvedValue(undefined);
|
|
115
|
+
|
|
116
|
+
await useCase.run({ nowEpochSeconds });
|
|
117
|
+
|
|
118
|
+
expect(mockRateLimitCacheRepository.probeToken).toHaveBeenCalledWith(
|
|
119
|
+
'token-stale-probe',
|
|
120
|
+
);
|
|
121
|
+
});
|
|
122
|
+
|
|
123
|
+
it('should not probe a token whose last probe was 10 minutes ago', async () => {
|
|
124
|
+
const nowEpochSeconds = 1000000000;
|
|
125
|
+
const futureReset = nowEpochSeconds + 7200;
|
|
126
|
+
const tenMinutesAgo = nowEpochSeconds - 10 * 60;
|
|
127
|
+
mockRateLimitCacheRepository.getTokenRateLimitCaches.mockReturnValue([
|
|
128
|
+
{
|
|
129
|
+
token: 'token-fresh-probe',
|
|
130
|
+
unifiedReset: futureReset,
|
|
131
|
+
lastProbeEpoch: tenMinutesAgo,
|
|
132
|
+
},
|
|
133
|
+
]);
|
|
134
|
+
|
|
135
|
+
await useCase.run({ nowEpochSeconds });
|
|
136
|
+
|
|
137
|
+
expect(mockRateLimitCacheRepository.probeToken).not.toHaveBeenCalled();
|
|
138
|
+
});
|
|
139
|
+
|
|
140
|
+
it('should probe a token with unifiedReset in the past regardless of last probe time', async () => {
|
|
141
|
+
const nowEpochSeconds = 1000000000;
|
|
142
|
+
const pastReset = nowEpochSeconds - 60;
|
|
143
|
+
const oneMinuteAgo = nowEpochSeconds - 60;
|
|
144
|
+
mockRateLimitCacheRepository.getTokenRateLimitCaches.mockReturnValue([
|
|
145
|
+
{
|
|
146
|
+
token: 'token-expired-recent-probe',
|
|
147
|
+
unifiedReset: pastReset,
|
|
148
|
+
lastProbeEpoch: oneMinuteAgo,
|
|
149
|
+
},
|
|
150
|
+
]);
|
|
151
|
+
mockRateLimitCacheRepository.probeToken.mockResolvedValue(undefined);
|
|
152
|
+
|
|
153
|
+
await useCase.run({ nowEpochSeconds });
|
|
154
|
+
|
|
155
|
+
expect(mockRateLimitCacheRepository.probeToken).toHaveBeenCalledWith(
|
|
156
|
+
'token-expired-recent-probe',
|
|
157
|
+
);
|
|
158
|
+
});
|
|
159
|
+
|
|
160
|
+
it('should probe a token that has never been probed even when unifiedReset is in the future', async () => {
|
|
161
|
+
const nowEpochSeconds = 1000000000;
|
|
162
|
+
const futureReset = nowEpochSeconds + 7200;
|
|
163
|
+
mockRateLimitCacheRepository.getTokenRateLimitCaches.mockReturnValue([
|
|
164
|
+
{
|
|
165
|
+
token: 'token-never-probed',
|
|
166
|
+
unifiedReset: futureReset,
|
|
167
|
+
lastProbeEpoch: 0,
|
|
168
|
+
},
|
|
169
|
+
]);
|
|
170
|
+
mockRateLimitCacheRepository.probeToken.mockResolvedValue(undefined);
|
|
171
|
+
|
|
172
|
+
await useCase.run({ nowEpochSeconds });
|
|
173
|
+
|
|
174
|
+
expect(mockRateLimitCacheRepository.probeToken).toHaveBeenCalledWith(
|
|
175
|
+
'token-never-probed',
|
|
176
|
+
);
|
|
177
|
+
});
|
|
81
178
|
});
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { RateLimitCacheRepository } from './adapter-interfaces/RateLimitCacheRepository';
|
|
2
2
|
|
|
3
|
+
const HOURLY_PROBE_INTERVAL_SECONDS = 3600;
|
|
4
|
+
|
|
3
5
|
export class UpdateRateLimitCacheUseCase {
|
|
4
6
|
constructor(
|
|
5
7
|
private readonly rateLimitCacheRepository: RateLimitCacheRepository,
|
|
@@ -8,7 +10,11 @@ export class UpdateRateLimitCacheUseCase {
|
|
|
8
10
|
run = async (params: { nowEpochSeconds: number }): Promise<void> => {
|
|
9
11
|
const caches = this.rateLimitCacheRepository.getTokenRateLimitCaches();
|
|
10
12
|
for (const cache of caches) {
|
|
11
|
-
|
|
13
|
+
const unifiedResetExpired = cache.unifiedReset < params.nowEpochSeconds;
|
|
14
|
+
const hourlyProbeDue =
|
|
15
|
+
params.nowEpochSeconds - cache.lastProbeEpoch >=
|
|
16
|
+
HOURLY_PROBE_INTERVAL_SECONDS;
|
|
17
|
+
if (unifiedResetExpired || hourlyProbeDue) {
|
|
12
18
|
await this.rateLimitCacheRepository.probeToken(cache.token);
|
|
13
19
|
}
|
|
14
20
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HandleScheduledEventUseCaseHandler.d.ts","sourceRoot":"","sources":["../../../../src/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.ts"],"names":[],"mappings":"AAuBA,OAAO,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,kCAAkC,CAAC;AA2B3D,qBAAa,kCAAkC;IAC7C,MAAM,GACJ,gBAAgB,MAAM,EACtB,UAAU,OAAO,KAChB,OAAO,CAAC;QACT,OAAO,EAAE,OAAO,CAAC;QACjB,MAAM,EAAE,KAAK,EAAE,CAAC;QAChB,SAAS,EAAE,OAAO,CAAC;QACnB,eAAe,EAAE,IAAI,EAAE,CAAC;KACzB,GAAG,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"HandleScheduledEventUseCaseHandler.d.ts","sourceRoot":"","sources":["../../../../src/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.ts"],"names":[],"mappings":"AAuBA,OAAO,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,kCAAkC,CAAC;AA2B3D,qBAAa,kCAAkC;IAC7C,MAAM,GACJ,gBAAgB,MAAM,EACtB,UAAU,OAAO,KAChB,OAAO,CAAC;QACT,OAAO,EAAE,OAAO,CAAC;QACjB,MAAM,EAAE,KAAK,EAAE,CAAC;QAChB,SAAS,EAAE,OAAO,CAAC;QACnB,eAAe,EAAE,IAAI,EAAE,CAAC;KACzB,GAAG,IAAI,CAAC,CAmSP;CACH"}
|
|
@@ -13,6 +13,7 @@ export interface RateLimitSnapshot {
|
|
|
13
13
|
fiveHourRejected: boolean;
|
|
14
14
|
sevenDayRejected: boolean;
|
|
15
15
|
modelWeeklyLimits: Record<string, ModelWeeklyLimit>;
|
|
16
|
+
lastUpdatedEpoch: number;
|
|
16
17
|
}
|
|
17
18
|
export declare const PROXY_PORT = 8787;
|
|
18
19
|
export declare const cacheDir: () => string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RateLimitCache.d.ts","sourceRoot":"","sources":["../../../src/adapter/proxy/RateLimitCache.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,mBAAmB,EAAE,MAAM,CAAC;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,eAAe,EAAE,OAAO,CAAC;IACzB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"RateLimitCache.d.ts","sourceRoot":"","sources":["../../../src/adapter/proxy/RateLimitCache.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,mBAAmB,EAAE,MAAM,CAAC;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,eAAe,EAAE,OAAO,CAAC;IACzB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IACpD,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,eAAO,MAAM,UAAU,OAAO,CAAC;AAI/B,eAAO,MAAM,QAAQ,QAAO,MAG3B,CAAC;AAEF,eAAO,MAAM,SAAS,GAAI,OAAO,MAAM,KAAG,MACqB,CAAC;AAEhE,eAAO,MAAM,iBAAiB,GAAI,OAAO,MAAM,KAAG,MACC,CAAC;AAiCpD,eAAO,MAAM,cAAc,GACzB,OAAO,MAAM,EACb,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,KACrD,IA8BF,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAC9B,OAAO,MAAM,EACb,QAAQ,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,KACvC,IAkBF,CAAC;AAEF,eAAO,MAAM,4BAA4B,GACvC,MAAM,MAAM,KACX,MAAM,CAAC,MAAM,EAAE,gBAAgB,CA0BjC,CAAC;AAEF,eAAO,MAAM,aAAa,GAAI,OAAO,MAAM,KAAG,iBAAiB,GAAG,IAiDjE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProxyRateLimitCacheRepository.d.ts","sourceRoot":"","sources":["../../../src/adapter/repositories/ProxyRateLimitCacheRepository.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,MAAM,mEAAmE,CAAC;AAC7G,OAAO,EAAE,mBAAmB,EAAE,MAAM,mEAAmE,CAAC;AAYxG,qBAAa,6BAA8B,YAAW,wBAAwB;IAE1E,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,IAAI;gBADJ,iBAAiB,EAAE,MAAM,GAAG,IAAI,EAChC,IAAI,GAAE,MAAmB;IAG5C,uBAAuB,QAAO,mBAAmB,EAAE,
|
|
1
|
+
{"version":3,"file":"ProxyRateLimitCacheRepository.d.ts","sourceRoot":"","sources":["../../../src/adapter/repositories/ProxyRateLimitCacheRepository.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,MAAM,mEAAmE,CAAC;AAC7G,OAAO,EAAE,mBAAmB,EAAE,MAAM,mEAAmE,CAAC;AAYxG,qBAAa,6BAA8B,YAAW,wBAAwB;IAE1E,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,IAAI;gBADJ,iBAAiB,EAAE,MAAM,GAAG,IAAI,EAChC,IAAI,GAAE,MAAmB;IAG5C,uBAAuB,QAAO,mBAAmB,EAAE,CAcjD;IAEF,UAAU,GAAU,OAAO,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC,CA6B/C;CACH"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UpdateRateLimitCacheUseCase.d.ts","sourceRoot":"","sources":["../../../src/domain/usecases/UpdateRateLimitCacheUseCase.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,+CAA+C,CAAC;
|
|
1
|
+
{"version":3,"file":"UpdateRateLimitCacheUseCase.d.ts","sourceRoot":"","sources":["../../../src/domain/usecases/UpdateRateLimitCacheUseCase.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,+CAA+C,CAAC;AAIzF,qBAAa,2BAA2B;IAEpC,OAAO,CAAC,QAAQ,CAAC,wBAAwB;gBAAxB,wBAAwB,EAAE,wBAAwB;IAGrE,GAAG,GAAU,QAAQ;QAAE,eAAe,EAAE,MAAM,CAAA;KAAE,KAAG,OAAO,CAAC,IAAI,CAAC,CAW9D;CACH"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RateLimitCacheRepository.d.ts","sourceRoot":"","sources":["../../../../src/domain/usecases/adapter-interfaces/RateLimitCacheRepository.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"RateLimitCacheRepository.d.ts","sourceRoot":"","sources":["../../../../src/domain/usecases/adapter-interfaces/RateLimitCacheRepository.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,wBAAwB;IACvC,uBAAuB,EAAE,MAAM,mBAAmB,EAAE,CAAC;IACrD,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9C"}
|