github-issue-tower-defence-management 1.44.1 → 1.44.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +2 -2
- package/bin/adapter/repositories/OauthProxyClaudeRepository.js +11 -0
- package/bin/adapter/repositories/OauthProxyClaudeRepository.js.map +1 -1
- package/package.json +1 -1
- package/src/adapter/repositories/OauthProxyClaudeRepository.test.ts +82 -0
- package/src/adapter/repositories/OauthProxyClaudeRepository.ts +15 -0
- package/types/adapter/repositories/OauthProxyClaudeRepository.d.ts.map +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
## [1.44.
|
|
1
|
+
## [1.44.2](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/compare/v1.44.1...v1.44.2) (2026-05-13)
|
|
2
2
|
|
|
3
3
|
|
|
4
4
|
### Bug Fixes
|
|
5
5
|
|
|
6
|
-
* **core:**
|
|
6
|
+
* **core:** synthesise hour:168 100% entry when overage-status is rejected in OauthProxyClaudeRepository ([3396f91](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/commit/3396f91be11bdd296b9858b7e78b3eb67869c19f))
|
|
7
7
|
|
|
8
8
|
# [1.44.0](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/compare/v1.43.2...v1.44.0) (2026-05-13)
|
|
9
9
|
|
|
@@ -63,6 +63,17 @@ class OauthProxyClaudeRepository {
|
|
|
63
63
|
});
|
|
64
64
|
}
|
|
65
65
|
}
|
|
66
|
+
const overageStatus = headers['anthropic-ratelimit-unified-overage-status'];
|
|
67
|
+
if (overageStatus === 'rejected' &&
|
|
68
|
+
!usages.some((u) => u.utilizationPercentage >= 100)) {
|
|
69
|
+
usages.push({
|
|
70
|
+
hour: 168,
|
|
71
|
+
utilizationPercentage: 100,
|
|
72
|
+
resetsAt: sevenDayReset
|
|
73
|
+
? new Date(parseInt(sevenDayReset, 10) * 1000)
|
|
74
|
+
: new Date(),
|
|
75
|
+
});
|
|
76
|
+
}
|
|
66
77
|
return usages;
|
|
67
78
|
}
|
|
68
79
|
async isClaudeAvailable(threshold) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OauthProxyClaudeRepository.js","sourceRoot":"","sources":["../../../src/adapter/repositories/OauthProxyClaudeRepository.ts"],"names":[],"mappings":";;;;;;AAEA,4CAAoB;
|
|
1
|
+
{"version":3,"file":"OauthProxyClaudeRepository.js","sourceRoot":"","sources":["../../../src/adapter/repositories/OauthProxyClaudeRepository.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -116,6 +116,88 @@ describe('OauthProxyClaudeRepository', () => {
|
|
|
116
116
|
},
|
|
117
117
|
],
|
|
118
118
|
},
|
|
119
|
+
{
|
|
120
|
+
name: 'synthesises hour:168 100% entry when overage-status is rejected and no existing entry is at 100%',
|
|
121
|
+
fileExists: true,
|
|
122
|
+
fileContent: JSON.stringify({
|
|
123
|
+
headers: {
|
|
124
|
+
'anthropic-ratelimit-unified-7d-utilization': '0.88',
|
|
125
|
+
'anthropic-ratelimit-unified-7d-reset': '1772769600',
|
|
126
|
+
'anthropic-ratelimit-unified-overage-status': 'rejected',
|
|
127
|
+
'anthropic-ratelimit-unified-overage-disabled-reason':
|
|
128
|
+
'out_of_credits',
|
|
129
|
+
},
|
|
130
|
+
ts: 1234567890,
|
|
131
|
+
}),
|
|
132
|
+
expected: [
|
|
133
|
+
{
|
|
134
|
+
hour: 168,
|
|
135
|
+
utilizationPercentage: 88,
|
|
136
|
+
resetsAt: new Date(1772769600 * 1000),
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
hour: 168,
|
|
140
|
+
utilizationPercentage: 100,
|
|
141
|
+
resetsAt: new Date(1772769600 * 1000),
|
|
142
|
+
},
|
|
143
|
+
],
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
name: 'does not synthesise entry when overage-status is absent',
|
|
147
|
+
fileExists: true,
|
|
148
|
+
fileContent: JSON.stringify({
|
|
149
|
+
headers: {
|
|
150
|
+
'anthropic-ratelimit-unified-7d-utilization': '0.88',
|
|
151
|
+
'anthropic-ratelimit-unified-7d-reset': '1772769600',
|
|
152
|
+
},
|
|
153
|
+
ts: 1234567890,
|
|
154
|
+
}),
|
|
155
|
+
expected: [
|
|
156
|
+
{
|
|
157
|
+
hour: 168,
|
|
158
|
+
utilizationPercentage: 88,
|
|
159
|
+
resetsAt: new Date(1772769600 * 1000),
|
|
160
|
+
},
|
|
161
|
+
],
|
|
162
|
+
},
|
|
163
|
+
{
|
|
164
|
+
name: 'does not synthesise entry when overage-status is a value other than rejected',
|
|
165
|
+
fileExists: true,
|
|
166
|
+
fileContent: JSON.stringify({
|
|
167
|
+
headers: {
|
|
168
|
+
'anthropic-ratelimit-unified-7d-utilization': '0.88',
|
|
169
|
+
'anthropic-ratelimit-unified-7d-reset': '1772769600',
|
|
170
|
+
'anthropic-ratelimit-unified-overage-status': 'allowed',
|
|
171
|
+
},
|
|
172
|
+
ts: 1234567890,
|
|
173
|
+
}),
|
|
174
|
+
expected: [
|
|
175
|
+
{
|
|
176
|
+
hour: 168,
|
|
177
|
+
utilizationPercentage: 88,
|
|
178
|
+
resetsAt: new Date(1772769600 * 1000),
|
|
179
|
+
},
|
|
180
|
+
],
|
|
181
|
+
},
|
|
182
|
+
{
|
|
183
|
+
name: 'does not synthesise extra entry when an existing entry already reports 100%',
|
|
184
|
+
fileExists: true,
|
|
185
|
+
fileContent: JSON.stringify({
|
|
186
|
+
headers: {
|
|
187
|
+
'anthropic-ratelimit-unified-7d-utilization': '1.00',
|
|
188
|
+
'anthropic-ratelimit-unified-7d-reset': '1772769600',
|
|
189
|
+
'anthropic-ratelimit-unified-overage-status': 'rejected',
|
|
190
|
+
},
|
|
191
|
+
ts: 1234567890,
|
|
192
|
+
}),
|
|
193
|
+
expected: [
|
|
194
|
+
{
|
|
195
|
+
hour: 168,
|
|
196
|
+
utilizationPercentage: 100,
|
|
197
|
+
resetsAt: new Date(1772769600 * 1000),
|
|
198
|
+
},
|
|
199
|
+
],
|
|
200
|
+
},
|
|
119
201
|
];
|
|
120
202
|
|
|
121
203
|
test.each(testCases)(
|
|
@@ -7,6 +7,7 @@ type ProxyFileHeaders = {
|
|
|
7
7
|
'anthropic-ratelimit-unified-7d-utilization'?: string;
|
|
8
8
|
'anthropic-ratelimit-unified-5h-reset'?: string;
|
|
9
9
|
'anthropic-ratelimit-unified-7d-reset'?: string;
|
|
10
|
+
'anthropic-ratelimit-unified-overage-status'?: string;
|
|
10
11
|
};
|
|
11
12
|
|
|
12
13
|
type ProxyFile = {
|
|
@@ -84,6 +85,20 @@ export class OauthProxyClaudeRepository implements ClaudeRepository {
|
|
|
84
85
|
}
|
|
85
86
|
}
|
|
86
87
|
|
|
88
|
+
const overageStatus = headers['anthropic-ratelimit-unified-overage-status'];
|
|
89
|
+
if (
|
|
90
|
+
overageStatus === 'rejected' &&
|
|
91
|
+
!usages.some((u) => u.utilizationPercentage >= 100)
|
|
92
|
+
) {
|
|
93
|
+
usages.push({
|
|
94
|
+
hour: 168,
|
|
95
|
+
utilizationPercentage: 100,
|
|
96
|
+
resetsAt: sevenDayReset
|
|
97
|
+
? new Date(parseInt(sevenDayReset, 10) * 1000)
|
|
98
|
+
: new Date(),
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
|
|
87
102
|
return usages;
|
|
88
103
|
}
|
|
89
104
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OauthProxyClaudeRepository.d.ts","sourceRoot":"","sources":["../../../src/adapter/repositories/OauthProxyClaudeRepository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,2DAA2D,CAAC;AAC7F,OAAO,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"OauthProxyClaudeRepository.d.ts","sourceRoot":"","sources":["../../../src/adapter/repositories/OauthProxyClaudeRepository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,2DAA2D,CAAC;AAC7F,OAAO,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAC;AAoB5E,qBAAa,0BAA2B,YAAW,gBAAgB;IACjE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;gBAGhC,QAAQ,GAAE,MACoB;IAK1B,QAAQ,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAyExC,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAO7D"}
|