github-issue-tower-defence-management 1.35.1 → 1.35.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 CHANGED
@@ -1,3 +1,11 @@
1
+ ## [1.35.2](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/compare/v1.35.1...v1.35.2) (2026-04-04)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * **core:** use profile page URL in refreshCookie to reliably detect login status ([1f594e4](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/commit/1f594e4e0220a2870e301d23e3d4cfc1e33880b1)), closes [#397](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/issues/397)
7
+ * **core:** use user-login meta tag to detect authenticated GitHub session ([17517f8](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/commit/17517f8c7002e10d14914a2b4e8c72a93ed9fa67))
8
+
1
9
  ## [1.35.1](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/compare/v1.35.0...v1.35.1) (2026-04-03)
2
10
 
3
11
 
@@ -128,19 +128,21 @@ class BaseGitHubRepository {
128
128
  if (!this.ghUserName || !this.ghUserPassword || !this.ghAuthenticatorKey) {
129
129
  throw new Error('GitHub username, password, and authenticator key must be set');
130
130
  }
131
+ const profileUrl = `https://github.com/${this.ghUserName}`;
131
132
  const headers = await this.createHeader();
132
- const content = await axios_1.default.get('https://github.com', { headers });
133
+ const content = await axios_1.default.get(profileUrl, { headers });
133
134
  const html = content.data;
134
- if (html.includes(this.ghUserName)) {
135
+ if (html.includes(`meta name="user-login" content="${this.ghUserName}"`)) {
135
136
  return;
136
137
  }
137
138
  this.localStorageRepository.remove(this.jsonFilePath);
139
+ this.cookie = null;
138
140
  const newHeaders = await this.createHeader();
139
- const newContent = await axios_1.default.get('https://github.com', {
141
+ const newContent = await axios_1.default.get(profileUrl, {
140
142
  headers: newHeaders,
141
143
  });
142
144
  const newHtml = newContent.data;
143
- if (newHtml.includes(this.ghUserName)) {
145
+ if (newHtml.includes(`meta name="user-login" content="${this.ghUserName}"`)) {
144
146
  return;
145
147
  }
146
148
  throw new Error('Failed to refresh cookie');
@@ -1 +1 @@
1
- {"version":3,"file":"BaseGitHubRepository.js","sourceRoot":"","sources":["../../../src/adapter/repositories/BaseGitHubRepository.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"BaseGitHubRepository.js","sourceRoot":"","sources":["../../../src/adapter/repositories/BaseGitHubRepository.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "github-issue-tower-defence-management",
3
- "version": "1.35.1",
3
+ "version": "1.35.2",
4
4
  "description": "",
5
5
  "main": "bin/index.js",
6
6
  "scripts": {
@@ -2,6 +2,20 @@ import fs from 'fs';
2
2
  import { BaseGitHubRepository } from './BaseGitHubRepository';
3
3
  import resetAllMocks = jest.resetAllMocks;
4
4
  import { LocalStorageRepository } from './LocalStorageRepository';
5
+
6
+ const mockAxiosGet = jest.fn<Promise<unknown>, unknown[]>();
7
+ jest.mock('axios', () => ({
8
+ default: {
9
+ get: (...args: unknown[]): Promise<unknown> => mockAxiosGet(...args),
10
+ },
11
+ get: (...args: unknown[]): Promise<unknown> => mockAxiosGet(...args),
12
+ }));
13
+
14
+ const mockGetCookieContent = jest.fn<Promise<unknown>, unknown[]>();
15
+ jest.mock('gh-cookie', () => ({
16
+ getCookieContent: (...args: unknown[]): Promise<unknown> =>
17
+ mockGetCookieContent(...args),
18
+ }));
5
19
  describe('BaseGitHubRepository', () => {
6
20
  const jsonFilePath = './tmp/github.com.cookies.json';
7
21
  const localStorageRepository = new LocalStorageRepository();
@@ -94,4 +108,121 @@ describe('BaseGitHubRepository', () => {
94
108
  expect(baseGitHubRepository.isCookiePublic(cookie)).toBe(false);
95
109
  });
96
110
  });
111
+
112
+ describe('refreshCookie', () => {
113
+ const localStorageRepositoryForRefresh = new LocalStorageRepository();
114
+ const refreshCookieJsonFilePath =
115
+ './tmp/refresh-test-github.com.cookies.json';
116
+ const ghUserName = 'testuser';
117
+ class RefreshTestRepository extends BaseGitHubRepository {
118
+ constructor() {
119
+ super(
120
+ localStorageRepositoryForRefresh,
121
+ refreshCookieJsonFilePath,
122
+ 'dummy-token',
123
+ ghUserName,
124
+ 'dummy-password',
125
+ 'dummy-authenticator-key',
126
+ );
127
+ }
128
+ }
129
+
130
+ const validCookieJson = JSON.stringify([
131
+ {
132
+ name: 'name',
133
+ value: 'value',
134
+ domain: 'domain',
135
+ path: 'path',
136
+ expires: 1,
137
+ httpOnly: true,
138
+ secure: true,
139
+ sameSite: 'Lax',
140
+ },
141
+ ]);
142
+
143
+ beforeEach(() => {
144
+ mockAxiosGet.mockReset();
145
+ mockGetCookieContent.mockReset();
146
+ mockGetCookieContent.mockResolvedValue(validCookieJson);
147
+ fs.writeFileSync(refreshCookieJsonFilePath, validCookieJson);
148
+ });
149
+
150
+ afterEach(() => {
151
+ if (fs.existsSync(refreshCookieJsonFilePath)) {
152
+ fs.rmSync(refreshCookieJsonFilePath);
153
+ }
154
+ });
155
+
156
+ it('should return when HTML contains user-login meta tag for current user (logged in)', async () => {
157
+ const repository = new RefreshTestRepository();
158
+ mockAxiosGet.mockResolvedValueOnce({
159
+ data: `<html><head><meta name="user-login" content="${ghUserName}"></head><body><h1>${ghUserName}</h1></body></html>`,
160
+ });
161
+
162
+ await expect(repository.refreshCookie()).resolves.toBeUndefined();
163
+
164
+ expect(mockAxiosGet).toHaveBeenCalledWith(
165
+ `https://github.com/${ghUserName}`,
166
+ expect.anything(),
167
+ );
168
+ expect(mockAxiosGet).toHaveBeenCalledTimes(1);
169
+ });
170
+
171
+ it('should fail when HTML contains username in content but not in user-login meta tag (not logged in)', async () => {
172
+ const repository = new RefreshTestRepository();
173
+ const notLoggedInHtml = `<html><head><meta name="user-login" content=""></head><body><h1>${ghUserName}</h1><p>Public profile</p></body></html>`;
174
+ mockAxiosGet
175
+ .mockResolvedValueOnce({ data: notLoggedInHtml })
176
+ .mockResolvedValueOnce({ data: notLoggedInHtml });
177
+
178
+ await expect(repository.refreshCookie()).rejects.toThrow(
179
+ 'Failed to refresh cookie',
180
+ );
181
+ });
182
+
183
+ it('should use profile page URL not homepage to check authentication', async () => {
184
+ const repository = new RefreshTestRepository();
185
+ mockAxiosGet.mockResolvedValueOnce({
186
+ data: `<html><head><meta name="user-login" content="${ghUserName}"></head><body></body></html>`,
187
+ });
188
+
189
+ await repository.refreshCookie();
190
+
191
+ expect(mockAxiosGet).toHaveBeenCalledWith(
192
+ `https://github.com/${ghUserName}`,
193
+ expect.anything(),
194
+ );
195
+ expect(mockAxiosGet).not.toHaveBeenCalledWith(
196
+ 'https://github.com',
197
+ expect.anything(),
198
+ );
199
+ });
200
+
201
+ it('should throw when both profile page checks fail', async () => {
202
+ const repository = new RefreshTestRepository();
203
+ const notLoggedInHtml = `<html><head><meta name="user-login" content=""></head><body></body></html>`;
204
+ mockAxiosGet
205
+ .mockResolvedValueOnce({ data: notLoggedInHtml })
206
+ .mockResolvedValueOnce({ data: notLoggedInHtml });
207
+
208
+ await expect(repository.refreshCookie()).rejects.toThrow(
209
+ 'Failed to refresh cookie',
210
+ );
211
+ });
212
+
213
+ it('should reset cookie cache before regenerating so new cookie is used', async () => {
214
+ const repository = new RefreshTestRepository();
215
+ mockAxiosGet
216
+ .mockResolvedValueOnce({
217
+ data: `<html><head><meta name="user-login" content=""></head><body></body></html>`,
218
+ })
219
+ .mockResolvedValueOnce({
220
+ data: `<html><head><meta name="user-login" content="${ghUserName}"></head><body></body></html>`,
221
+ });
222
+
223
+ await expect(repository.refreshCookie()).resolves.toBeUndefined();
224
+ expect(mockAxiosGet).toHaveBeenCalledTimes(2);
225
+ expect(mockGetCookieContent).toHaveBeenCalledTimes(1);
226
+ });
227
+ });
97
228
  });
@@ -167,19 +167,23 @@ export class BaseGitHubRepository {
167
167
  'GitHub username, password, and authenticator key must be set',
168
168
  );
169
169
  }
170
+ const profileUrl = `https://github.com/${this.ghUserName}`;
170
171
  const headers = await this.createHeader();
171
- const content = await axios.get<string>('https://github.com', { headers });
172
+ const content = await axios.get<string>(profileUrl, { headers });
172
173
  const html = content.data;
173
- if (html.includes(this.ghUserName)) {
174
+ if (html.includes(`meta name="user-login" content="${this.ghUserName}"`)) {
174
175
  return;
175
176
  }
176
177
  this.localStorageRepository.remove(this.jsonFilePath);
178
+ this.cookie = null;
177
179
  const newHeaders = await this.createHeader();
178
- const newContent = await axios.get<string>('https://github.com', {
180
+ const newContent = await axios.get<string>(profileUrl, {
179
181
  headers: newHeaders,
180
182
  });
181
183
  const newHtml = newContent.data;
182
- if (newHtml.includes(this.ghUserName)) {
184
+ if (
185
+ newHtml.includes(`meta name="user-login" content="${this.ghUserName}"`)
186
+ ) {
183
187
  return;
184
188
  }
185
189
  throw new Error('Failed to refresh cookie');
@@ -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;IAG7B,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;IAPjD,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;gBAEX,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,CAwBtC;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,CAsBrC;CACH"}
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;IAG7B,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;IAPjD,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;gBAEX,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,CAwBtC;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"}