github-issue-tower-defence-management 1.42.0 → 1.42.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 +17 -0
- package/bin/adapter/repositories/BaseGitHubRepository.js +13 -11
- package/bin/adapter/repositories/BaseGitHubRepository.js.map +1 -1
- package/bin/domain/usecases/ClearDependedIssueURLUseCase.js +1 -1
- package/bin/domain/usecases/ClearDependedIssueURLUseCase.js.map +1 -1
- package/jest.config.js +1 -0
- package/jest.setup.js +1 -0
- package/package.json +2 -2
- package/src/adapter/repositories/BaseGitHubRepository.test.ts +19 -1
- package/src/adapter/repositories/BaseGitHubRepository.ts +18 -13
- package/src/domain/usecases/ClearDependedIssueURLUseCase.test.ts +17 -5
- package/src/domain/usecases/ClearDependedIssueURLUseCase.ts +1 -1
- package/types/adapter/repositories/BaseGitHubRepository.d.ts +1 -0
- package/types/adapter/repositories/BaseGitHubRepository.d.ts.map +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,20 @@
|
|
|
1
|
+
## [1.42.2](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/compare/v1.42.1...v1.42.2) (2026-05-09)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Bug Fixes
|
|
5
|
+
|
|
6
|
+
* **core:** add retry logic to refreshCookie to reduce flaky CI failures ([64643ac](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/commit/64643ac5e09713532aa62bfaaa39d3ced0a978ce))
|
|
7
|
+
* **core:** change misleading 'Closed all depended issues' message to clarify bot did not close them ([6e44b2d](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/commit/6e44b2d00b3ce8fef72bf15e92209de854967e2a))
|
|
8
|
+
|
|
9
|
+
## [1.42.1](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/compare/v1.42.0...v1.42.1) (2026-05-08)
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
### Bug Fixes
|
|
13
|
+
|
|
14
|
+
* **core:** add NODE_OPTIONS=--experimental-vm-modules for Jest ESM compatibility ([068f68c](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/commit/068f68cf7ffc48bbb8b696a39321fce65d785d86))
|
|
15
|
+
* **core:** use jest setup to provide fetch for gaxios, avoiding node-fetch ESM import ([9ebcf0c](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/commit/9ebcf0c411b221de30b00e39cae3df6d83f6512e))
|
|
16
|
+
* **deps:** update dependency googleapis to v171 ([269fa28](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/commit/269fa283ecaa9fd49b7ece7464d59a284983e1bc))
|
|
17
|
+
|
|
1
18
|
# [1.42.0](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/compare/v1.41.0...v1.42.0) (2026-05-07)
|
|
2
19
|
|
|
3
20
|
|
|
@@ -18,6 +18,7 @@ class BaseGitHubRepository {
|
|
|
18
18
|
this.ghUserName = ghUserName;
|
|
19
19
|
this.ghUserPassword = ghUserPassword;
|
|
20
20
|
this.ghAuthenticatorKey = ghAuthenticatorKey;
|
|
21
|
+
this.cookieRefreshRetryDelayMs = 3000;
|
|
21
22
|
this.extractIssueFromUrl = (issueUrl) => {
|
|
22
23
|
const match = issueUrl.match(/https:\/\/github.com\/([^/]+)\/([^/]+)\/(issues|pull)\/(\d+)/);
|
|
23
24
|
if (!match) {
|
|
@@ -129,17 +130,18 @@ class BaseGitHubRepository {
|
|
|
129
130
|
throw new Error('GitHub username, password, and authenticator key must be set');
|
|
130
131
|
}
|
|
131
132
|
const profileUrl = `https://github.com/${this.ghUserName}`;
|
|
132
|
-
const
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
133
|
+
const maxAttempts = 3;
|
|
134
|
+
for (let attempt = 0; attempt < maxAttempts; attempt++) {
|
|
135
|
+
if (attempt > 0) {
|
|
136
|
+
await new Promise((resolve) => setTimeout(resolve, this.cookieRefreshRetryDelayMs));
|
|
137
|
+
this.localStorageRepository.remove(this.jsonFilePath);
|
|
138
|
+
this.cookie = null;
|
|
139
|
+
}
|
|
140
|
+
const headers = await this.createHeader();
|
|
141
|
+
const html = await ky_1.default.get(profileUrl, { headers }).text();
|
|
142
|
+
if (html.includes(`meta name="user-login" content="${this.ghUserName}"`)) {
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
143
145
|
}
|
|
144
146
|
throw new Error('Failed to refresh cookie');
|
|
145
147
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseGitHubRepository.js","sourceRoot":"","sources":["../../../src/adapter/repositories/BaseGitHubRepository.ts"],"names":[],"mappings":";;;;;;AAAA,2BAA4C;AAC5C,mCAAmC;AACnC,yCAA6C;AAC7C,4CAAoB;AAEpB,4CAAoB;AAapB,MAAa,oBAAoB;
|
|
1
|
+
{"version":3,"file":"BaseGitHubRepository.js","sourceRoot":"","sources":["../../../src/adapter/repositories/BaseGitHubRepository.ts"],"names":[],"mappings":"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"}
|
|
@@ -56,7 +56,7 @@ ${circularDependedIssueUrls.map((url) => `- ${url}`).join('\n')}`);
|
|
|
56
56
|
if (closedDependedIssueUrls.length > 0) {
|
|
57
57
|
const allCleared = remainingDependedIssueUrls.length === 0 &&
|
|
58
58
|
notFoundDependedIssueUrls.length === 0;
|
|
59
|
-
await this.issueRepository.createComment(issue, `${allCleared ? '
|
|
59
|
+
await this.issueRepository.createComment(issue, `${allCleared ? 'All depended issues are already closed, dependency field cleared' : 'Some depended issues are already closed, removed from dependency field'}:
|
|
60
60
|
${closedDependedIssueUrls.map((url) => `- ${url}`).join('\n')}`);
|
|
61
61
|
}
|
|
62
62
|
if (notFoundDependedIssueUrls.length > 0) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClearDependedIssueURLUseCase.js","sourceRoot":"","sources":["../../../src/domain/usecases/ClearDependedIssueURLUseCase.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"ClearDependedIssueURLUseCase.js","sourceRoot":"","sources":["../../../src/domain/usecases/ClearDependedIssueURLUseCase.ts"],"names":[],"mappings":"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"}
|
package/jest.config.js
CHANGED
package/jest.setup.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
global.window = { fetch: globalThis.fetch };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "github-issue-tower-defence-management",
|
|
3
|
-
"version": "1.42.
|
|
3
|
+
"version": "1.42.2",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "bin/index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -77,7 +77,7 @@
|
|
|
77
77
|
"cookie": "^1.0.1",
|
|
78
78
|
"dotenv": "^17.0.0",
|
|
79
79
|
"gh-cookie": "^1.3.22",
|
|
80
|
-
"googleapis": "^
|
|
80
|
+
"googleapis": "^171.0.0",
|
|
81
81
|
"ky": "^0.33.3",
|
|
82
82
|
"typia": "^12.0.0",
|
|
83
83
|
"yaml": "^2.6.0"
|
|
@@ -133,6 +133,7 @@ describe('BaseGitHubRepository', () => {
|
|
|
133
133
|
'dummy-password',
|
|
134
134
|
'dummy-authenticator-key',
|
|
135
135
|
);
|
|
136
|
+
this.cookieRefreshRetryDelayMs = 0;
|
|
136
137
|
}
|
|
137
138
|
}
|
|
138
139
|
|
|
@@ -182,6 +183,7 @@ describe('BaseGitHubRepository', () => {
|
|
|
182
183
|
const repository = new RefreshTestRepository();
|
|
183
184
|
const notLoggedInHtml = `<html><head><meta name="user-login" content=""></head><body><h1>${ghUserName}</h1><p>Public profile</p></body></html>`;
|
|
184
185
|
mockKyGetText
|
|
186
|
+
.mockResolvedValueOnce(notLoggedInHtml)
|
|
185
187
|
.mockResolvedValueOnce(notLoggedInHtml)
|
|
186
188
|
.mockResolvedValueOnce(notLoggedInHtml);
|
|
187
189
|
|
|
@@ -208,10 +210,11 @@ describe('BaseGitHubRepository', () => {
|
|
|
208
210
|
);
|
|
209
211
|
});
|
|
210
212
|
|
|
211
|
-
it('should throw when
|
|
213
|
+
it('should throw when all three attempts fail', async () => {
|
|
212
214
|
const repository = new RefreshTestRepository();
|
|
213
215
|
const notLoggedInHtml = `<html><head><meta name="user-login" content=""></head><body></body></html>`;
|
|
214
216
|
mockKyGetText
|
|
217
|
+
.mockResolvedValueOnce(notLoggedInHtml)
|
|
215
218
|
.mockResolvedValueOnce(notLoggedInHtml)
|
|
216
219
|
.mockResolvedValueOnce(notLoggedInHtml);
|
|
217
220
|
|
|
@@ -234,5 +237,20 @@ describe('BaseGitHubRepository', () => {
|
|
|
234
237
|
expect(mockKyGet).toHaveBeenCalledTimes(2);
|
|
235
238
|
expect(mockGetCookieContent).toHaveBeenCalledTimes(1);
|
|
236
239
|
});
|
|
240
|
+
|
|
241
|
+
it('should succeed on third attempt after two failed cookie refresh attempts', async () => {
|
|
242
|
+
const repository = new RefreshTestRepository();
|
|
243
|
+
const notLoggedInHtml = `<html><head><meta name="user-login" content=""></head><body></body></html>`;
|
|
244
|
+
mockKyGetText
|
|
245
|
+
.mockResolvedValueOnce(notLoggedInHtml)
|
|
246
|
+
.mockResolvedValueOnce(notLoggedInHtml)
|
|
247
|
+
.mockResolvedValueOnce(
|
|
248
|
+
`<html><head><meta name="user-login" content="${ghUserName}"></head><body></body></html>`,
|
|
249
|
+
);
|
|
250
|
+
|
|
251
|
+
await expect(repository.refreshCookie()).resolves.toBeUndefined();
|
|
252
|
+
expect(mockKyGet).toHaveBeenCalledTimes(3);
|
|
253
|
+
expect(mockGetCookieContent).toHaveBeenCalledTimes(2);
|
|
254
|
+
});
|
|
237
255
|
});
|
|
238
256
|
});
|
|
@@ -18,6 +18,7 @@ interface Cookie {
|
|
|
18
18
|
|
|
19
19
|
export class BaseGitHubRepository {
|
|
20
20
|
cookie: string | null;
|
|
21
|
+
protected cookieRefreshRetryDelayMs = 3000;
|
|
21
22
|
constructor(
|
|
22
23
|
readonly localStorageRepository: LocalStorageRepository,
|
|
23
24
|
readonly jsonFilePath: string = './tmp/github.com.cookies.json',
|
|
@@ -168,19 +169,23 @@ export class BaseGitHubRepository {
|
|
|
168
169
|
);
|
|
169
170
|
}
|
|
170
171
|
const profileUrl = `https://github.com/${this.ghUserName}`;
|
|
171
|
-
const
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
172
|
+
const maxAttempts = 3;
|
|
173
|
+
|
|
174
|
+
for (let attempt = 0; attempt < maxAttempts; attempt++) {
|
|
175
|
+
if (attempt > 0) {
|
|
176
|
+
await new Promise<void>((resolve) =>
|
|
177
|
+
setTimeout(resolve, this.cookieRefreshRetryDelayMs),
|
|
178
|
+
);
|
|
179
|
+
this.localStorageRepository.remove(this.jsonFilePath);
|
|
180
|
+
this.cookie = null;
|
|
181
|
+
}
|
|
182
|
+
const headers = await this.createHeader();
|
|
183
|
+
const html = await ky.get(profileUrl, { headers }).text();
|
|
184
|
+
if (
|
|
185
|
+
html.includes(`meta name="user-login" content="${this.ghUserName}"`)
|
|
186
|
+
) {
|
|
187
|
+
return;
|
|
188
|
+
}
|
|
184
189
|
}
|
|
185
190
|
throw new Error('Failed to refresh cookie');
|
|
186
191
|
};
|
|
@@ -158,7 +158,7 @@ describe('ClearDependedIssueURLUseCase', () => {
|
|
|
158
158
|
expectedIssueRepositoryCreateCommentCalls: [
|
|
159
159
|
[
|
|
160
160
|
{ ...basicIssueThree, dependedIssueUrls: ['url1', 'url4'] },
|
|
161
|
-
'
|
|
161
|
+
'Some depended issues are already closed, removed from dependency field:\n- url1',
|
|
162
162
|
],
|
|
163
163
|
[
|
|
164
164
|
{ ...basicIssueThree, dependedIssueUrls: ['url1', 'url4'] },
|
|
@@ -198,8 +198,14 @@ describe('ClearDependedIssueURLUseCase', () => {
|
|
|
198
198
|
[basicProject, 'fieldId', basicIssueThree, 'url2'],
|
|
199
199
|
],
|
|
200
200
|
expectedIssueRepositoryCreateCommentCalls: [
|
|
201
|
-
[
|
|
202
|
-
|
|
201
|
+
[
|
|
202
|
+
basicIssueTwo,
|
|
203
|
+
'All depended issues are already closed, dependency field cleared:\n- url1',
|
|
204
|
+
],
|
|
205
|
+
[
|
|
206
|
+
basicIssueThree,
|
|
207
|
+
'Some depended issues are already closed, removed from dependency field:\n- url1',
|
|
208
|
+
],
|
|
203
209
|
],
|
|
204
210
|
},
|
|
205
211
|
{
|
|
@@ -221,7 +227,10 @@ describe('ClearDependedIssueURLUseCase', () => {
|
|
|
221
227
|
],
|
|
222
228
|
expectedIssueRepositoryUpdateTextFieldCalls: [],
|
|
223
229
|
expectedIssueRepositoryCreateCommentCalls: [
|
|
224
|
-
[
|
|
230
|
+
[
|
|
231
|
+
basicIssueTwo,
|
|
232
|
+
'All depended issues are already closed, dependency field cleared:\n- url1',
|
|
233
|
+
],
|
|
225
234
|
],
|
|
226
235
|
},
|
|
227
236
|
{
|
|
@@ -243,7 +252,10 @@ describe('ClearDependedIssueURLUseCase', () => {
|
|
|
243
252
|
],
|
|
244
253
|
expectedIssueRepositoryUpdateTextFieldCalls: [],
|
|
245
254
|
expectedIssueRepositoryCreateCommentCalls: [
|
|
246
|
-
[
|
|
255
|
+
[
|
|
256
|
+
basicIssueThree,
|
|
257
|
+
'All depended issues are already closed, dependency field cleared:\n- url1\n- url2',
|
|
258
|
+
],
|
|
247
259
|
],
|
|
248
260
|
},
|
|
249
261
|
{
|
|
@@ -106,7 +106,7 @@ ${circularDependedIssueUrls.map((url) => `- ${url}`).join('\n')}`,
|
|
|
106
106
|
notFoundDependedIssueUrls.length === 0;
|
|
107
107
|
await this.issueRepository.createComment(
|
|
108
108
|
issue,
|
|
109
|
-
`${allCleared ? '
|
|
109
|
+
`${allCleared ? 'All depended issues are already closed, dependency field cleared' : 'Some depended issues are already closed, removed from dependency field'}:
|
|
110
110
|
${closedDependedIssueUrls.map((url) => `- ${url}`).join('\n')}`,
|
|
111
111
|
);
|
|
112
112
|
}
|
|
@@ -17,6 +17,7 @@ export declare class BaseGitHubRepository {
|
|
|
17
17
|
readonly ghUserPassword: string | undefined;
|
|
18
18
|
readonly ghAuthenticatorKey: string | undefined;
|
|
19
19
|
cookie: string | null;
|
|
20
|
+
protected cookieRefreshRetryDelayMs: number;
|
|
20
21
|
constructor(localStorageRepository: LocalStorageRepository, jsonFilePath?: string, ghToken?: string, ghUserName?: string | undefined, ghUserPassword?: string | undefined, ghAuthenticatorKey?: string | undefined);
|
|
21
22
|
protected extractIssueFromUrl: (issueUrl: string) => {
|
|
22
23
|
owner: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseGitHubRepository.d.ts","sourceRoot":"","sources":["../../../src/adapter/repositories/BaseGitHubRepository.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAGlE,UAAU,MAAM;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;CACtC;AAED,qBAAa,oBAAoB;
|
|
1
|
+
{"version":3,"file":"BaseGitHubRepository.d.ts","sourceRoot":"","sources":["../../../src/adapter/repositories/BaseGitHubRepository.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAGlE,UAAU,MAAM;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;CACtC;AAED,qBAAa,oBAAoB;IAI7B,QAAQ,CAAC,sBAAsB,EAAE,sBAAsB;IACvD,QAAQ,CAAC,YAAY,EAAE,MAAM;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS;IACvC,QAAQ,CAAC,cAAc,EAAE,MAAM,GAAG,SAAS;IAC3C,QAAQ,CAAC,kBAAkB,EAAE,MAAM,GAAG,SAAS;IARjD,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,CAAC,yBAAyB,SAAQ;gBAEhC,sBAAsB,EAAE,sBAAsB,EAC9C,YAAY,GAAE,MAAwC,EACtD,OAAO,GAAE,MAAwC,EACjD,UAAU,GAAE,MAAM,GAAG,SAAoC,EACzD,cAAc,GAAE,MAAM,GAAG,SAAwC,EACjE,kBAAkB,GAAE,MAAM,GAAG,SACf;IAIzB,SAAS,CAAC,mBAAmB,GAC3B,UAAU,MAAM,KACf;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAevE;IAEF,SAAS,QAAa,OAAO,CAAC,MAAM,CAAC,CAKnC;IACF,YAAY,QAAa,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAwBtD;IACF,SAAS,CAAC,0BAA0B,QAAa,OAAO,CAAC,MAAM,CAAC,CAqB9D;IACF,SAAS,CAAC,QAAQ,GAAI,QAAQ,MAAM,KAAG,MAAM,IAAI,MAAM,CAoBrD;IAEF,SAAS,CAAC,4BAA4B,GACpC,YAAY,OAAO,KAClB,OAAO,CAAC,MAAM,CAAC,CAmChB;IACF,aAAa,QAAa,OAAO,CAAC,IAAI,CAAC,CA0BrC;CACH"}
|