github-issue-tower-defence-management 1.58.2 → 1.59.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/.gitattributes +2 -0
- package/.prettierignore +1 -0
- package/CHANGELOG.md +21 -0
- package/README.md +3 -3
- package/bin/adapter/entry-points/cli/index.js +1 -3
- package/bin/adapter/entry-points/cli/index.js.map +1 -1
- package/bin/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.js +8 -4
- package/bin/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.js.map +1 -1
- package/bin/adapter/proxy/RateLimitCache.js +104 -12
- package/bin/adapter/proxy/RateLimitCache.js.map +1 -1
- package/bin/adapter/proxy/proxyEntry.js +19 -0
- package/bin/adapter/proxy/proxyEntry.js.map +1 -1
- package/bin/adapter/repositories/ProxyClaudeTokenUsageRepository.js +33 -2
- package/bin/adapter/repositories/ProxyClaudeTokenUsageRepository.js.map +1 -1
- package/bin/adapter/repositories/ProxyRateLimitCacheRepository.js +92 -0
- package/bin/adapter/repositories/ProxyRateLimitCacheRepository.js.map +1 -0
- package/bin/domain/usecases/HandleScheduledEventUseCase.js +7 -1
- package/bin/domain/usecases/HandleScheduledEventUseCase.js.map +1 -1
- package/bin/domain/usecases/StartPreparationUseCase.js +34 -35
- package/bin/domain/usecases/StartPreparationUseCase.js.map +1 -1
- package/bin/domain/usecases/UpdateRateLimitCacheUseCase.js +18 -0
- package/bin/domain/usecases/UpdateRateLimitCacheUseCase.js.map +1 -0
- package/bin/domain/usecases/adapter-interfaces/RateLimitCacheRepository.js +3 -0
- package/bin/domain/usecases/adapter-interfaces/RateLimitCacheRepository.js.map +1 -0
- package/package.json +1 -1
- package/src/adapter/entry-points/cli/index.ts +0 -3
- package/src/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.test.ts +6 -0
- package/src/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.ts +9 -3
- package/src/adapter/proxy/RateLimitCache.test.ts +250 -0
- package/src/adapter/proxy/RateLimitCache.ts +114 -25
- package/src/adapter/proxy/proxyEntry.ts +24 -1
- package/src/adapter/repositories/ProxyClaudeTokenUsageRepository.test.ts +354 -7
- package/src/adapter/repositories/ProxyClaudeTokenUsageRepository.ts +42 -2
- package/src/adapter/repositories/ProxyRateLimitCacheRepository.test.ts +101 -0
- package/src/adapter/repositories/ProxyRateLimitCacheRepository.ts +66 -0
- package/src/domain/entities/ClaudeTokenUsage.ts +7 -0
- package/src/domain/usecases/HandleScheduledEventUseCase.test.ts +63 -0
- package/src/domain/usecases/HandleScheduledEventUseCase.ts +7 -0
- package/src/domain/usecases/StartPreparationUseCase.test.ts +1212 -887
- package/src/domain/usecases/StartPreparationUseCase.ts +47 -57
- package/src/domain/usecases/UpdateRateLimitCacheUseCase.test.ts +81 -0
- package/src/domain/usecases/UpdateRateLimitCacheUseCase.ts +16 -0
- package/src/domain/usecases/adapter-interfaces/RateLimitCacheRepository.ts +9 -0
- package/types/adapter/entry-points/cli/index.d.ts.map +1 -1
- package/types/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.d.ts.map +1 -1
- package/types/adapter/proxy/RateLimitCache.d.ts +11 -0
- package/types/adapter/proxy/RateLimitCache.d.ts.map +1 -1
- package/types/adapter/proxy/proxyEntry.d.ts.map +1 -1
- package/types/adapter/repositories/ProxyClaudeTokenUsageRepository.d.ts.map +1 -1
- package/types/adapter/repositories/ProxyRateLimitCacheRepository.d.ts +10 -0
- package/types/adapter/repositories/ProxyRateLimitCacheRepository.d.ts.map +1 -0
- package/types/domain/entities/ClaudeTokenUsage.d.ts +6 -0
- package/types/domain/entities/ClaudeTokenUsage.d.ts.map +1 -1
- package/types/domain/usecases/HandleScheduledEventUseCase.d.ts +3 -1
- package/types/domain/usecases/HandleScheduledEventUseCase.d.ts.map +1 -1
- package/types/domain/usecases/StartPreparationUseCase.d.ts +3 -3
- package/types/domain/usecases/StartPreparationUseCase.d.ts.map +1 -1
- package/types/domain/usecases/UpdateRateLimitCacheUseCase.d.ts +9 -0
- package/types/domain/usecases/UpdateRateLimitCacheUseCase.d.ts.map +1 -0
- package/types/domain/usecases/adapter-interfaces/RateLimitCacheRepository.d.ts +9 -0
- package/types/domain/usecases/adapter-interfaces/RateLimitCacheRepository.d.ts.map +1 -0
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { IssueRepository } from './adapter-interfaces/IssueRepository';
|
|
2
2
|
import { ProjectRepository } from './adapter-interfaces/ProjectRepository';
|
|
3
3
|
import { LocalCommandRunner } from './adapter-interfaces/LocalCommandRunner';
|
|
4
|
-
import { ClaudeRepository } from './adapter-interfaces/ClaudeRepository';
|
|
5
4
|
import { ClaudeTokenUsageRepository } from './adapter-interfaces/ClaudeTokenUsageRepository';
|
|
6
5
|
import { ClaudeTokenUsage } from '../entities/ClaudeTokenUsage';
|
|
7
6
|
import {
|
|
@@ -22,16 +21,46 @@ export class StartPreparationUseCase {
|
|
|
22
21
|
| 'deletePullRequestBranch'
|
|
23
22
|
| 'createCommentByUrl'
|
|
24
23
|
>,
|
|
25
|
-
private readonly claudeRepository: Pick<ClaudeRepository, 'getUsage'>,
|
|
26
24
|
private readonly localCommandRunner: LocalCommandRunner,
|
|
27
25
|
private readonly claudeTokenUsageRepository: ClaudeTokenUsageRepository,
|
|
28
26
|
) {}
|
|
29
27
|
|
|
30
|
-
private
|
|
31
|
-
|
|
28
|
+
private weeklyLimitTypeForModel = (modelName: string | null): string => {
|
|
29
|
+
const normalized = (modelName ?? '').toLowerCase();
|
|
30
|
+
if (normalized.includes('sonnet')) return 'seven_day_sonnet';
|
|
31
|
+
if (normalized.includes('opus')) return 'seven_day_opus';
|
|
32
|
+
return 'seven_day';
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
private isModelWeeklyLimitRejected = (
|
|
36
|
+
usage: ClaudeTokenUsage,
|
|
37
|
+
weeklyLimitType: string,
|
|
38
|
+
): boolean => {
|
|
39
|
+
const specific = usage.modelWeeklyLimits[weeklyLimitType];
|
|
40
|
+
if (specific !== undefined && specific.rejected) return true;
|
|
41
|
+
const general = usage.modelWeeklyLimits['seven_day'];
|
|
42
|
+
return general !== undefined && general.rejected;
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
private selectRotationTokens = (
|
|
46
|
+
tokenUsages: ClaudeTokenUsage[],
|
|
47
|
+
utilizationPercentageThreshold: number,
|
|
48
|
+
modelName: string | null,
|
|
49
|
+
): string[] => {
|
|
50
|
+
const weeklyLimitType = this.weeklyLimitTypeForModel(modelName);
|
|
51
|
+
return tokenUsages
|
|
32
52
|
.filter((usage) => !usage.blocked)
|
|
53
|
+
.filter((usage) => !usage.rejected)
|
|
54
|
+
.filter(
|
|
55
|
+
(usage) => !this.isModelWeeklyLimitRejected(usage, weeklyLimitType),
|
|
56
|
+
)
|
|
57
|
+
.filter(
|
|
58
|
+
(usage) =>
|
|
59
|
+
usage.fiveHourUtilization * 100 < utilizationPercentageThreshold,
|
|
60
|
+
)
|
|
33
61
|
.sort((a, b) => a.fiveHourUtilization - b.fiveHourUtilization)
|
|
34
62
|
.map((usage) => usage.token);
|
|
63
|
+
};
|
|
35
64
|
|
|
36
65
|
run = async (params: {
|
|
37
66
|
projectUrl: string;
|
|
@@ -45,66 +74,27 @@ export class StartPreparationUseCase {
|
|
|
45
74
|
codexHomeCandidates: string[] | null;
|
|
46
75
|
allowIssueCacheMinutes: number;
|
|
47
76
|
}): Promise<void> => {
|
|
48
|
-
const
|
|
49
|
-
const weeklyWindowHours = 168;
|
|
50
|
-
const nonWeeklyUsages = claudeUsages.filter(
|
|
51
|
-
(usage) => usage.hour !== weeklyWindowHours,
|
|
52
|
-
);
|
|
53
|
-
if (
|
|
54
|
-
nonWeeklyUsages.some(
|
|
55
|
-
(usage) =>
|
|
56
|
-
usage.utilizationPercentage > params.utilizationPercentageThreshold,
|
|
57
|
-
)
|
|
58
|
-
) {
|
|
59
|
-
console.warn(
|
|
60
|
-
'Claude usage limit exceeded. Skipping starting preparation.',
|
|
61
|
-
);
|
|
62
|
-
return;
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
let maximumPreparingIssuesCount = params.maximumPreparingIssuesCount ?? 6;
|
|
66
|
-
|
|
67
|
-
const weeklyUsages = claudeUsages.filter(
|
|
68
|
-
(usage) => usage.hour === weeklyWindowHours,
|
|
69
|
-
);
|
|
70
|
-
if (
|
|
71
|
-
weeklyUsages.length > 0 &&
|
|
72
|
-
params.utilizationPercentageThreshold < 100
|
|
73
|
-
) {
|
|
74
|
-
const maxWeeklyUtilization = Math.max(
|
|
75
|
-
...weeklyUsages.map((usage) => usage.utilizationPercentage),
|
|
76
|
-
);
|
|
77
|
-
if (maxWeeklyUtilization > params.utilizationPercentageThreshold) {
|
|
78
|
-
const normalizedUtilizationBeyondThreshold =
|
|
79
|
-
(maxWeeklyUtilization - params.utilizationPercentageThreshold) /
|
|
80
|
-
(100 - params.utilizationPercentageThreshold);
|
|
81
|
-
maximumPreparingIssuesCount = Math.floor(
|
|
82
|
-
maximumPreparingIssuesCount *
|
|
83
|
-
Math.pow(1 - normalizedUtilizationBeyondThreshold, 2),
|
|
84
|
-
);
|
|
85
|
-
if (maximumPreparingIssuesCount <= 0) {
|
|
86
|
-
console.warn(
|
|
87
|
-
`Weekly Claude usage (${maxWeeklyUtilization}%) exceeds threshold (${params.utilizationPercentageThreshold}%). Skipping starting preparation.`,
|
|
88
|
-
);
|
|
89
|
-
return;
|
|
90
|
-
}
|
|
91
|
-
console.warn(
|
|
92
|
-
`Weekly Claude usage (${maxWeeklyUtilization}%) exceeds threshold (${params.utilizationPercentageThreshold}%). Reducing maximumPreparingIssuesCount to ${maximumPreparingIssuesCount}.`,
|
|
93
|
-
);
|
|
94
|
-
}
|
|
95
|
-
}
|
|
77
|
+
const maximumPreparingIssuesCount = params.maximumPreparingIssuesCount ?? 6;
|
|
96
78
|
|
|
97
79
|
const tokenUsages =
|
|
98
80
|
await this.claudeTokenUsageRepository.getAvailableTokenUsages();
|
|
99
81
|
let rotationTokens: string[] | null = null;
|
|
100
82
|
let proxyBaseUrl: string | null = null;
|
|
101
83
|
if (tokenUsages.length > 0) {
|
|
102
|
-
const ranked = this.selectRotationTokens(
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
84
|
+
const ranked = this.selectRotationTokens(
|
|
85
|
+
tokenUsages,
|
|
86
|
+
params.utilizationPercentageThreshold,
|
|
87
|
+
params.defaultLlmModelName,
|
|
88
|
+
);
|
|
89
|
+
if (ranked.length === 0) {
|
|
90
|
+
console.warn(
|
|
91
|
+
`All ${tokenUsages.length} configured Claude OAuth token(s) are unavailable (blocked, rejected, weekly limit for ${this.weeklyLimitTypeForModel(params.defaultLlmModelName)} exhausted, or 5h utilization >= ${params.utilizationPercentageThreshold}%). Skipping starting preparation.`,
|
|
92
|
+
);
|
|
93
|
+
return;
|
|
107
94
|
}
|
|
95
|
+
await this.claudeTokenUsageRepository.ensureObservable();
|
|
96
|
+
rotationTokens = ranked;
|
|
97
|
+
proxyBaseUrl = this.claudeTokenUsageRepository.proxyBaseUrl();
|
|
108
98
|
}
|
|
109
99
|
|
|
110
100
|
const project = await this.projectRepository.getByUrl(params.projectUrl);
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { UpdateRateLimitCacheUseCase } from './UpdateRateLimitCacheUseCase';
|
|
2
|
+
import { mock } from 'jest-mock-extended';
|
|
3
|
+
import { RateLimitCacheRepository } from './adapter-interfaces/RateLimitCacheRepository';
|
|
4
|
+
|
|
5
|
+
describe('UpdateRateLimitCacheUseCase', () => {
|
|
6
|
+
const mockRateLimitCacheRepository = mock<RateLimitCacheRepository>();
|
|
7
|
+
|
|
8
|
+
const useCase = new UpdateRateLimitCacheUseCase(mockRateLimitCacheRepository);
|
|
9
|
+
|
|
10
|
+
beforeEach(() => {
|
|
11
|
+
jest.clearAllMocks();
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
it('should probe a token whose unifiedReset is in the past', async () => {
|
|
15
|
+
const pastReset = 1000000000;
|
|
16
|
+
const nowEpochSeconds = 1000000100;
|
|
17
|
+
mockRateLimitCacheRepository.getTokenRateLimitCaches.mockReturnValue([
|
|
18
|
+
{ token: 'token-expired', unifiedReset: pastReset },
|
|
19
|
+
]);
|
|
20
|
+
mockRateLimitCacheRepository.probeToken.mockResolvedValue(undefined);
|
|
21
|
+
|
|
22
|
+
await useCase.run({ nowEpochSeconds });
|
|
23
|
+
|
|
24
|
+
expect(mockRateLimitCacheRepository.probeToken).toHaveBeenCalledWith(
|
|
25
|
+
'token-expired',
|
|
26
|
+
);
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
it('should not probe a token whose unifiedReset is in the future', async () => {
|
|
30
|
+
const futureReset = 9999999999;
|
|
31
|
+
const nowEpochSeconds = 1000000000;
|
|
32
|
+
mockRateLimitCacheRepository.getTokenRateLimitCaches.mockReturnValue([
|
|
33
|
+
{ token: 'token-active', unifiedReset: futureReset },
|
|
34
|
+
]);
|
|
35
|
+
|
|
36
|
+
await useCase.run({ nowEpochSeconds });
|
|
37
|
+
|
|
38
|
+
expect(mockRateLimitCacheRepository.probeToken).not.toHaveBeenCalled();
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
it('should probe only tokens with expired reset when mixed tokens exist', async () => {
|
|
42
|
+
const pastReset = 1000000000;
|
|
43
|
+
const futureReset = 9999999999;
|
|
44
|
+
const nowEpochSeconds = 1000000100;
|
|
45
|
+
mockRateLimitCacheRepository.getTokenRateLimitCaches.mockReturnValue([
|
|
46
|
+
{ token: 'token-expired', unifiedReset: pastReset },
|
|
47
|
+
{ token: 'token-active', unifiedReset: futureReset },
|
|
48
|
+
]);
|
|
49
|
+
mockRateLimitCacheRepository.probeToken.mockResolvedValue(undefined);
|
|
50
|
+
|
|
51
|
+
await useCase.run({ nowEpochSeconds });
|
|
52
|
+
|
|
53
|
+
expect(mockRateLimitCacheRepository.probeToken).toHaveBeenCalledTimes(1);
|
|
54
|
+
expect(mockRateLimitCacheRepository.probeToken).toHaveBeenCalledWith(
|
|
55
|
+
'token-expired',
|
|
56
|
+
);
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
it('should update the cache after probing by relying on the repository side effect', async () => {
|
|
60
|
+
const pastReset = 1000000000;
|
|
61
|
+
const nowEpochSeconds = 1000000100;
|
|
62
|
+
mockRateLimitCacheRepository.getTokenRateLimitCaches.mockReturnValue([
|
|
63
|
+
{ token: 'token-expired', unifiedReset: pastReset },
|
|
64
|
+
]);
|
|
65
|
+
mockRateLimitCacheRepository.probeToken.mockResolvedValue(undefined);
|
|
66
|
+
|
|
67
|
+
await useCase.run({ nowEpochSeconds });
|
|
68
|
+
|
|
69
|
+
expect(mockRateLimitCacheRepository.probeToken).toHaveBeenCalledWith(
|
|
70
|
+
'token-expired',
|
|
71
|
+
);
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
it('should handle an empty token list without errors', async () => {
|
|
75
|
+
mockRateLimitCacheRepository.getTokenRateLimitCaches.mockReturnValue([]);
|
|
76
|
+
|
|
77
|
+
await useCase.run({ nowEpochSeconds: 1000000000 });
|
|
78
|
+
|
|
79
|
+
expect(mockRateLimitCacheRepository.probeToken).not.toHaveBeenCalled();
|
|
80
|
+
});
|
|
81
|
+
});
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { RateLimitCacheRepository } from './adapter-interfaces/RateLimitCacheRepository';
|
|
2
|
+
|
|
3
|
+
export class UpdateRateLimitCacheUseCase {
|
|
4
|
+
constructor(
|
|
5
|
+
private readonly rateLimitCacheRepository: RateLimitCacheRepository,
|
|
6
|
+
) {}
|
|
7
|
+
|
|
8
|
+
run = async (params: { nowEpochSeconds: number }): Promise<void> => {
|
|
9
|
+
const caches = this.rateLimitCacheRepository.getTokenRateLimitCaches();
|
|
10
|
+
for (const cache of caches) {
|
|
11
|
+
if (cache.unifiedReset < params.nowEpochSeconds) {
|
|
12
|
+
await this.rateLimitCacheRepository.probeToken(cache.token);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/adapter/entry-points/cli/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EACL,UAAU,EACV,cAAc,EACd,wBAAwB,EACxB,YAAY,EACZ,kBAAkB,GACnB,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/adapter/entry-points/cli/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EACL,UAAU,EACV,cAAc,EACd,wBAAwB,EACxB,YAAY,EACZ,kBAAkB,GACnB,MAAM,iBAAiB,CAAC;AAiEzB,eAAO,MAAM,OAAO,SAAgB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HandleScheduledEventUseCaseHandler.d.ts","sourceRoot":"","sources":["../../../../src/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"HandleScheduledEventUseCaseHandler.d.ts","sourceRoot":"","sources":["../../../../src/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,kCAAkC,CAAC;AA0B3D,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,CAwPP;CACH"}
|
|
@@ -1,14 +1,25 @@
|
|
|
1
|
+
export interface ModelWeeklyLimit {
|
|
2
|
+
rejected: boolean;
|
|
3
|
+
resetsAt: number;
|
|
4
|
+
}
|
|
1
5
|
export interface RateLimitSnapshot {
|
|
2
6
|
fiveHourUtilization: number;
|
|
3
7
|
fiveHourReset: number;
|
|
4
8
|
sevenDayUtilization: number;
|
|
5
9
|
sevenDayReset: number;
|
|
6
10
|
blocked: boolean;
|
|
11
|
+
rejected: boolean;
|
|
12
|
+
unifiedRejected: boolean;
|
|
13
|
+
fiveHourRejected: boolean;
|
|
14
|
+
sevenDayRejected: boolean;
|
|
15
|
+
modelWeeklyLimits: Record<string, ModelWeeklyLimit>;
|
|
7
16
|
}
|
|
8
17
|
export declare const PROXY_PORT = 8787;
|
|
9
18
|
export declare const cacheDir: () => string;
|
|
10
19
|
export declare const hashToken: (token: string) => string;
|
|
11
20
|
export declare const cachePathForToken: (token: string) => string;
|
|
12
21
|
export declare const writeRateLimit: (token: string, headers: Record<string, string | string[] | undefined>) => void;
|
|
22
|
+
export declare const writeModelRateLimit: (token: string, limits: Record<string, ModelWeeklyLimit>) => void;
|
|
23
|
+
export declare const parseModelRateLimitsFromBody: (body: string) => Record<string, ModelWeeklyLimit>;
|
|
13
24
|
export declare const readRateLimit: (token: string) => RateLimitSnapshot | null;
|
|
14
25
|
//# sourceMappingURL=RateLimitCache.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RateLimitCache.d.ts","sourceRoot":"","sources":["../../../src/adapter/proxy/RateLimitCache.ts"],"names":[],"mappings":"AAKA,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;
|
|
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;CACrD;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,IA2BF,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,IA8CjE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proxyEntry.d.ts","sourceRoot":"","sources":["../../../src/adapter/proxy/proxyEntry.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"proxyEntry.d.ts","sourceRoot":"","sources":["../../../src/adapter/proxy/proxyEntry.ts"],"names":[],"mappings":"AAeA,QAAA,MAAM,YAAY,GAChB,eAAe,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,KAC3C,MAAM,GAAG,IAQX,CAAC;AAEF,QAAA,MAAM,UAAU,GAAI,MAAM,MAAM,KAAG,IA0DlC,CAAC;AAMF,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProxyClaudeTokenUsageRepository.d.ts","sourceRoot":"","sources":["../../../src/adapter/repositories/ProxyClaudeTokenUsageRepository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAC1E,OAAO,EAAE,0BAA0B,EAAE,MAAM,qEAAqE,CAAC;AAKjH,qBAAa,+BAAgC,YAAW,0BAA0B;IAE9E,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,IAAI;gBADJ,iBAAiB,EAAE,MAAM,GAAG,IAAI,EAChC,IAAI,GAAE,MAAmB;IAG5C,gBAAgB,QAAa,OAAO,CAAC,IAAI,CAAC,CAExC;IAEF,uBAAuB,QAAa,OAAO,CAAC,gBAAgB,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"ProxyClaudeTokenUsageRepository.d.ts","sourceRoot":"","sources":["../../../src/adapter/repositories/ProxyClaudeTokenUsageRepository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAC1E,OAAO,EAAE,0BAA0B,EAAE,MAAM,qEAAqE,CAAC;AAKjH,qBAAa,+BAAgC,YAAW,0BAA0B;IAE9E,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,IAAI;gBADJ,iBAAiB,EAAE,MAAM,GAAG,IAAI,EAChC,IAAI,GAAE,MAAmB;IAG5C,gBAAgB,QAAa,OAAO,CAAC,IAAI,CAAC,CAExC;IAEF,uBAAuB,QAAa,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAwD7D;IAEF,YAAY,QAAO,MAAM,CAAoC;CAC9D"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { RateLimitCacheRepository } from '../../domain/usecases/adapter-interfaces/RateLimitCacheRepository';
|
|
2
|
+
import { TokenRateLimitCache } from '../../domain/usecases/adapter-interfaces/RateLimitCacheRepository';
|
|
3
|
+
export declare class ProxyRateLimitCacheRepository implements RateLimitCacheRepository {
|
|
4
|
+
private readonly tokenListJsonPath;
|
|
5
|
+
private readonly port;
|
|
6
|
+
constructor(tokenListJsonPath: string | null, port?: number);
|
|
7
|
+
getTokenRateLimitCaches: () => TokenRateLimitCache[];
|
|
8
|
+
probeToken: (token: string) => Promise<void>;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=ProxyRateLimitCacheRepository.d.ts.map
|
|
@@ -0,0 +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,CAajD;IAEF,UAAU,GAAU,OAAO,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC,CA6B/C;CACH"}
|
|
@@ -1,6 +1,12 @@
|
|
|
1
|
+
export type ClaudeModelWeeklyLimit = {
|
|
2
|
+
rejected: boolean;
|
|
3
|
+
resetsAt: number;
|
|
4
|
+
};
|
|
1
5
|
export type ClaudeTokenUsage = {
|
|
2
6
|
token: string;
|
|
3
7
|
fiveHourUtilization: number;
|
|
4
8
|
blocked: boolean;
|
|
9
|
+
rejected: boolean;
|
|
10
|
+
modelWeeklyLimits: Record<string, ClaudeModelWeeklyLimit>;
|
|
5
11
|
};
|
|
6
12
|
//# sourceMappingURL=ClaudeTokenUsage.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClaudeTokenUsage.d.ts","sourceRoot":"","sources":["../../../src/domain/entities/ClaudeTokenUsage.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,mBAAmB,EAAE,MAAM,CAAC;IAC5B,OAAO,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"ClaudeTokenUsage.d.ts","sourceRoot":"","sources":["../../../src/domain/entities/ClaudeTokenUsage.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,sBAAsB,GAAG;IACnC,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,mBAAmB,EAAE,MAAM,CAAC;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;CAC3D,CAAC"}
|
|
@@ -23,6 +23,7 @@ import { StartPreparationUseCase } from './StartPreparationUseCase';
|
|
|
23
23
|
import { RevertOrphanedPreparationUseCase } from './RevertOrphanedPreparationUseCase';
|
|
24
24
|
import { RevertNotReadyAwaitingQualityCheckUseCase } from './RevertNotReadyAwaitingQualityCheckUseCase';
|
|
25
25
|
import { SetupTowerDefenceProjectUseCase } from './SetupTowerDefenceProjectUseCase';
|
|
26
|
+
import { UpdateRateLimitCacheUseCase } from './UpdateRateLimitCacheUseCase';
|
|
26
27
|
export declare class ProjectNotFoundError extends Error {
|
|
27
28
|
constructor(message: string);
|
|
28
29
|
}
|
|
@@ -44,11 +45,12 @@ export declare class HandleScheduledEventUseCase {
|
|
|
44
45
|
readonly startPreparationUseCase: StartPreparationUseCase;
|
|
45
46
|
readonly revertOrphanedPreparationUseCase: RevertOrphanedPreparationUseCase;
|
|
46
47
|
readonly revertNotReadyAwaitingQualityCheckUseCase: RevertNotReadyAwaitingQualityCheckUseCase;
|
|
48
|
+
readonly updateRateLimitCacheUseCase: UpdateRateLimitCacheUseCase | null;
|
|
47
49
|
readonly dateRepository: DateRepository;
|
|
48
50
|
readonly spreadsheetRepository: SpreadsheetRepository;
|
|
49
51
|
readonly projectRepository: ProjectRepository;
|
|
50
52
|
readonly issueRepository: IssueRepository;
|
|
51
|
-
constructor(setupTowerDefenceProjectUseCase: SetupTowerDefenceProjectUseCase, actionAnnouncementUseCase: ActionAnnouncementUseCase, setWorkflowManagementIssueToStoryUseCase: SetWorkflowManagementIssueToStoryUseCase, clearPastNextActionUseCase: ClearPastNextActionDateHourUseCase, analyzeProblemByIssueUseCase: AnalyzeProblemByIssueUseCase, analyzeStoriesUseCase: AnalyzeStoriesUseCase, clearDependedIssueURLUseCase: ClearDependedIssueURLUseCase, createEstimationIssueUseCase: CreateEstimationIssueUseCase, convertCheckboxToIssueInStoryIssueUseCase: ConvertCheckboxToIssueInStoryIssueUseCase, changeStatusByStoryColorUseCase: ChangeStatusByStoryColorUseCase, setNoStoryIssueToStoryUseCase: SetNoStoryIssueToStoryUseCase, createNewStoryByLabelUseCase: CreateNewStoryByLabelUseCase, assignNoAssigneeIssueToManagerUseCase: AssignNoAssigneeIssueToManagerUseCase, updateIssueStatusByLabelUseCase: UpdateIssueStatusByLabelUseCase, startPreparationUseCase: StartPreparationUseCase, revertOrphanedPreparationUseCase: RevertOrphanedPreparationUseCase, revertNotReadyAwaitingQualityCheckUseCase: RevertNotReadyAwaitingQualityCheckUseCase, dateRepository: DateRepository, spreadsheetRepository: SpreadsheetRepository, projectRepository: ProjectRepository, issueRepository: IssueRepository);
|
|
53
|
+
constructor(setupTowerDefenceProjectUseCase: SetupTowerDefenceProjectUseCase, actionAnnouncementUseCase: ActionAnnouncementUseCase, setWorkflowManagementIssueToStoryUseCase: SetWorkflowManagementIssueToStoryUseCase, clearPastNextActionUseCase: ClearPastNextActionDateHourUseCase, analyzeProblemByIssueUseCase: AnalyzeProblemByIssueUseCase, analyzeStoriesUseCase: AnalyzeStoriesUseCase, clearDependedIssueURLUseCase: ClearDependedIssueURLUseCase, createEstimationIssueUseCase: CreateEstimationIssueUseCase, convertCheckboxToIssueInStoryIssueUseCase: ConvertCheckboxToIssueInStoryIssueUseCase, changeStatusByStoryColorUseCase: ChangeStatusByStoryColorUseCase, setNoStoryIssueToStoryUseCase: SetNoStoryIssueToStoryUseCase, createNewStoryByLabelUseCase: CreateNewStoryByLabelUseCase, assignNoAssigneeIssueToManagerUseCase: AssignNoAssigneeIssueToManagerUseCase, updateIssueStatusByLabelUseCase: UpdateIssueStatusByLabelUseCase, startPreparationUseCase: StartPreparationUseCase, revertOrphanedPreparationUseCase: RevertOrphanedPreparationUseCase, revertNotReadyAwaitingQualityCheckUseCase: RevertNotReadyAwaitingQualityCheckUseCase, updateRateLimitCacheUseCase: UpdateRateLimitCacheUseCase | null, dateRepository: DateRepository, spreadsheetRepository: SpreadsheetRepository, projectRepository: ProjectRepository, issueRepository: IssueRepository);
|
|
52
54
|
run: (input: {
|
|
53
55
|
projectName: string;
|
|
54
56
|
org: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HandleScheduledEventUseCase.d.ts","sourceRoot":"","sources":["../../../src/domain/usecases/HandleScheduledEventUseCase.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AACvE,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAC3E,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AACrE,OAAO,EAAE,qBAAqB,EAAE,MAAM,4CAA4C,CAAC;AACnF,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,EAAE,wCAAwC,EAAE,MAAM,4CAA4C,CAAC;AACtG,OAAO,EAAE,kCAAkC,EAAE,MAAM,sCAAsC,CAAC;AAC1F,OAAO,EAAE,4BAA4B,EAAE,MAAM,gCAAgC,CAAC;AAC9E,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,4BAA4B,EAAE,MAAM,gCAAgC,CAAC;AAC9E,OAAO,EAAE,4BAA4B,EAAE,MAAM,gCAAgC,CAAC;AAC9E,OAAO,EAAE,yCAAyC,EAAE,MAAM,6CAA6C,CAAC;AACxG,OAAO,EAAE,+BAA+B,EAAE,MAAM,mCAAmC,CAAC;AACpF,OAAO,EAAE,6BAA6B,EAAE,MAAM,iCAAiC,CAAC;AAChF,OAAO,EAAE,4BAA4B,EAAE,MAAM,gCAAgC,CAAC;AAC9E,OAAO,EAAE,qCAAqC,EAAE,MAAM,yCAAyC,CAAC;AAChG,OAAO,EAAE,+BAA+B,EAAE,MAAM,mCAAmC,CAAC;AACpF,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,gCAAgC,EAAE,MAAM,oCAAoC,CAAC;AACtF,OAAO,EAAE,yCAAyC,EAAE,MAAM,6CAA6C,CAAC;AACxG,OAAO,EAAE,+BAA+B,EAAE,MAAM,mCAAmC,CAAC;
|
|
1
|
+
{"version":3,"file":"HandleScheduledEventUseCase.d.ts","sourceRoot":"","sources":["../../../src/domain/usecases/HandleScheduledEventUseCase.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import { IssueRepository } from './adapter-interfaces/IssueRepository';
|
|
2
2
|
import { ProjectRepository } from './adapter-interfaces/ProjectRepository';
|
|
3
3
|
import { LocalCommandRunner } from './adapter-interfaces/LocalCommandRunner';
|
|
4
|
-
import { ClaudeRepository } from './adapter-interfaces/ClaudeRepository';
|
|
5
4
|
import { ClaudeTokenUsageRepository } from './adapter-interfaces/ClaudeTokenUsageRepository';
|
|
6
5
|
export declare class StartPreparationUseCase {
|
|
7
6
|
private readonly projectRepository;
|
|
8
7
|
private readonly issueRepository;
|
|
9
|
-
private readonly claudeRepository;
|
|
10
8
|
private readonly localCommandRunner;
|
|
11
9
|
private readonly claudeTokenUsageRepository;
|
|
12
|
-
constructor(projectRepository: Pick<ProjectRepository, 'getByUrl'>, issueRepository: Pick<IssueRepository, 'getStoryObjectMap' | 'updateStatus' | 'findRelatedOpenPRs' | 'getOpenPullRequest' | 'closePullRequest' | 'deletePullRequestBranch' | 'createCommentByUrl'>,
|
|
10
|
+
constructor(projectRepository: Pick<ProjectRepository, 'getByUrl'>, issueRepository: Pick<IssueRepository, 'getStoryObjectMap' | 'updateStatus' | 'findRelatedOpenPRs' | 'getOpenPullRequest' | 'closePullRequest' | 'deletePullRequestBranch' | 'createCommentByUrl'>, localCommandRunner: LocalCommandRunner, claudeTokenUsageRepository: ClaudeTokenUsageRepository);
|
|
11
|
+
private weeklyLimitTypeForModel;
|
|
12
|
+
private isModelWeeklyLimitRejected;
|
|
13
13
|
private selectRotationTokens;
|
|
14
14
|
run: (params: {
|
|
15
15
|
projectUrl: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StartPreparationUseCase.d.ts","sourceRoot":"","sources":["../../../src/domain/usecases/StartPreparationUseCase.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAC7E,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"StartPreparationUseCase.d.ts","sourceRoot":"","sources":["../../../src/domain/usecases/StartPreparationUseCase.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAC7E,OAAO,EAAE,0BAA0B,EAAE,MAAM,iDAAiD,CAAC;AAO7F,qBAAa,uBAAuB;IAEhC,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,eAAe;IAUhC,OAAO,CAAC,QAAQ,CAAC,kBAAkB;IACnC,OAAO,CAAC,QAAQ,CAAC,0BAA0B;gBAZ1B,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,EAAE,UAAU,CAAC,EACtD,eAAe,EAAE,IAAI,CACpC,eAAe,EACb,mBAAmB,GACnB,cAAc,GACd,oBAAoB,GACpB,oBAAoB,GACpB,kBAAkB,GAClB,yBAAyB,GACzB,oBAAoB,CACvB,EACgB,kBAAkB,EAAE,kBAAkB,EACtC,0BAA0B,EAAE,0BAA0B;IAGzE,OAAO,CAAC,uBAAuB,CAK7B;IAEF,OAAO,CAAC,0BAA0B,CAQhC;IAEF,OAAO,CAAC,oBAAoB,CAkB1B;IAEF,GAAG,GAAU,QAAQ;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,gBAAgB,EAAE,MAAM,CAAC;QACzB,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;QACnC,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;QACnC,cAAc,EAAE,MAAM,CAAC;QACvB,2BAA2B,EAAE,MAAM,GAAG,IAAI,CAAC;QAC3C,8BAA8B,EAAE,MAAM,CAAC;QACvC,mBAAmB,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;QACrC,mBAAmB,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;QACrC,sBAAsB,EAAE,MAAM,CAAC;KAChC,KAAG,OAAO,CAAC,IAAI,CAAC,CAoOf;CACH"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { RateLimitCacheRepository } from './adapter-interfaces/RateLimitCacheRepository';
|
|
2
|
+
export declare class UpdateRateLimitCacheUseCase {
|
|
3
|
+
private readonly rateLimitCacheRepository;
|
|
4
|
+
constructor(rateLimitCacheRepository: RateLimitCacheRepository);
|
|
5
|
+
run: (params: {
|
|
6
|
+
nowEpochSeconds: number;
|
|
7
|
+
}) => Promise<void>;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=UpdateRateLimitCacheUseCase.d.ts.map
|
|
@@ -0,0 +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;AAEzF,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,CAO9D;CACH"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export interface TokenRateLimitCache {
|
|
2
|
+
token: string;
|
|
3
|
+
unifiedReset: number;
|
|
4
|
+
}
|
|
5
|
+
export interface RateLimitCacheRepository {
|
|
6
|
+
getTokenRateLimitCaches: () => TokenRateLimitCache[];
|
|
7
|
+
probeToken: (token: string) => Promise<void>;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=RateLimitCacheRepository.d.ts.map
|
|
@@ -0,0 +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;CACtB;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"}
|