github-issue-tower-defence-management 1.104.2 → 1.104.4

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,17 @@
1
+ ## [1.104.4](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/compare/v1.104.3...v1.104.4) (2026-06-26)
2
+
3
+
4
+ ### Performance Improvements
5
+
6
+ * **schedule:** replace fetchProjectItems blanket 5s page sleep with reactive rate-limit backoff ([#993](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/issues/993)) ([b8077a6](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/commit/b8077a606ff0a589a2163e0bb611382c5ccaecca)), closes [#992](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/issues/992)
7
+
8
+ ## [1.104.3](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/compare/v1.104.2...v1.104.3) (2026-06-26)
9
+
10
+
11
+ ### Bug Fixes
12
+
13
+ * **intmux:** drop /prs and exclude reactivation-triggered items from in-tmux-by-human list ([#994](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/issues/994)) ([4ab59fa](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/commit/4ab59fa24fbfc9e38436ba0ea12d6375dea99674))
14
+
1
15
  ## [1.104.2](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/compare/v1.104.1...v1.104.2) (2026-06-26)
2
16
 
3
17
 
package/README.md CHANGED
@@ -508,7 +508,7 @@ The index files list every project in `inTmuxProjectOrder` whose `{name}.json` a
508
508
  ### Field Descriptions
509
509
 
510
510
  - `overviewUrl`: The GitHub Project board URL, taken from the project `url`.
511
- - `tdpmConsoleUrl`: `{inTmuxConsoleBaseUrl}/projects/{pjcode}/prs`. The v4 variant appends `?k={token}`. The v3 and v4 files are skipped when `inTmuxConsoleBaseUrl` is unset.
511
+ - `tdpmConsoleUrl`: `{inTmuxConsoleBaseUrl}/projects/{pjcode}`. The v4 variant appends `?k={token}`. The v3 and v4 files are skipped when `inTmuxConsoleBaseUrl` is unset.
512
512
  - `newIssueUrl` (v4 only): `https://github.com/{org}/{workingReport.repo}/issues/new?assignees={manager}`, derived from existing config values.
513
513
  - `groups`: Story groups. The v3 `groups` carry a `urls` array using the v2 `{ url, title }` entry shape. The v4 `groups` use tmux terminology: each group carries a `sessions` array and each session is `{ name, description }` where `name` is the GitHub issue URL and `description` is the issue title.
514
514
  - Token handling: The v4 per-project file and `index.v4.json` are skipped when `inTmuxConsoleToken` is unset. The token value is never written to source code, tests, or documentation; it is supplied through configuration only.
@@ -1,14 +1,95 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
5
35
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.GraphqlProjectItemRepository = exports.FETCH_PROJECT_ITEMS_GRAPHQL_ERROR_PAYLOAD_MAX_LENGTH = exports.FETCH_PROJECT_ITEMS_INITIAL_PAGE_SIZE = exports.PAGINATION_DELAY_MS = void 0;
7
- const ky_1 = __importDefault(require("ky"));
36
+ exports.GraphqlProjectItemRepository = exports.callWithRateLimitRetry = exports.RATE_LIMIT_MAX_BACKOFF_MS = exports.RATE_LIMIT_DEFAULT_BACKOFF_MS = exports.RATE_LIMIT_MIN_BACKOFF_MS = exports.RATE_LIMIT_MAX_RETRIES = exports.FETCH_PROJECT_ITEMS_GRAPHQL_ERROR_PAYLOAD_MAX_LENGTH = exports.FETCH_PROJECT_ITEMS_INITIAL_PAGE_SIZE = exports.PAGINATION_DELAY_MS = void 0;
37
+ const ky_1 = __importStar(require("ky"));
8
38
  const BaseGitHubRepository_1 = require("../BaseGitHubRepository");
9
- exports.PAGINATION_DELAY_MS = 5000;
39
+ exports.PAGINATION_DELAY_MS = 500;
10
40
  exports.FETCH_PROJECT_ITEMS_INITIAL_PAGE_SIZE = 100;
11
41
  exports.FETCH_PROJECT_ITEMS_GRAPHQL_ERROR_PAYLOAD_MAX_LENGTH = 4000;
42
+ exports.RATE_LIMIT_MAX_RETRIES = 6;
43
+ exports.RATE_LIMIT_MIN_BACKOFF_MS = 1000;
44
+ exports.RATE_LIMIT_DEFAULT_BACKOFF_MS = 60000;
45
+ exports.RATE_LIMIT_MAX_BACKOFF_MS = 300000;
46
+ const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
47
+ const parseNonNegativeIntegerHeader = (value) => {
48
+ if (value === null) {
49
+ return null;
50
+ }
51
+ const trimmed = value.trim();
52
+ if (!/^\d+$/.test(trimmed)) {
53
+ return null;
54
+ }
55
+ const parsed = Number.parseInt(trimmed, 10);
56
+ return Number.isFinite(parsed) ? parsed : null;
57
+ };
58
+ const computeRateLimitBackoffMs = (headers, attempt, nowMs) => {
59
+ const exponentialMs = Math.min(exports.RATE_LIMIT_MAX_BACKOFF_MS, exports.RATE_LIMIT_DEFAULT_BACKOFF_MS * Math.pow(2, attempt));
60
+ const retryAfterSeconds = parseNonNegativeIntegerHeader(headers?.get('retry-after') ?? null);
61
+ if (retryAfterSeconds !== null) {
62
+ return Math.min(exports.RATE_LIMIT_MAX_BACKOFF_MS, Math.max(exports.RATE_LIMIT_MIN_BACKOFF_MS, retryAfterSeconds * 1000));
63
+ }
64
+ const remaining = parseNonNegativeIntegerHeader(headers?.get('x-ratelimit-remaining') ?? null);
65
+ const resetEpochSeconds = parseNonNegativeIntegerHeader(headers?.get('x-ratelimit-reset') ?? null);
66
+ if (remaining === 0 && resetEpochSeconds !== null) {
67
+ const waitMs = resetEpochSeconds * 1000 - nowMs;
68
+ return Math.min(exports.RATE_LIMIT_MAX_BACKOFF_MS, Math.max(exports.RATE_LIMIT_MIN_BACKOFF_MS, waitMs));
69
+ }
70
+ return Math.max(exports.RATE_LIMIT_MIN_BACKOFF_MS, exponentialMs);
71
+ };
72
+ const isRateLimitStatus = (status) => status === 429 || status === 403;
73
+ const callWithRateLimitRetry = async (request) => {
74
+ let attempt = 0;
75
+ for (;;) {
76
+ try {
77
+ return await request();
78
+ }
79
+ catch (error) {
80
+ if (!(error instanceof ky_1.HTTPError) ||
81
+ !isRateLimitStatus(error.response.status) ||
82
+ attempt >= exports.RATE_LIMIT_MAX_RETRIES) {
83
+ throw error;
84
+ }
85
+ const backoffMs = computeRateLimitBackoffMs(error.response.headers, attempt, Date.now());
86
+ console.log(`fetchProjectItems: GitHub returned ${error.response.status} (rate limit). Backing off ${backoffMs}ms before retry ${attempt + 1}/${exports.RATE_LIMIT_MAX_RETRIES}.`);
87
+ await sleep(backoffMs);
88
+ attempt++;
89
+ }
90
+ }
91
+ };
92
+ exports.callWithRateLimitRetry = callWithRateLimitRetry;
12
93
  const stringifyGraphqlErrorsForLog = (errors) => {
13
94
  const serialized = JSON.stringify(errors);
14
95
  if (serialized.length <= exports.FETCH_PROJECT_ITEMS_GRAPHQL_ERROR_PAYLOAD_MAX_LENGTH) {
@@ -192,14 +273,14 @@ query GetProjectItems($projectId: ID!, $after: String, $first: Int!) {
192
273
  first: first,
193
274
  },
194
275
  };
195
- const response = await ky_1.default
276
+ const response = await (0, exports.callWithRateLimitRetry)(() => ky_1.default
196
277
  .post('https://api.github.com/graphql', {
197
278
  json: graphqlQuery,
198
279
  headers: {
199
280
  Authorization: `Bearer ${this.ghToken}`,
200
281
  },
201
282
  })
202
- .json();
283
+ .json());
203
284
  if (response.errors && response.errors.length > 0) {
204
285
  throw new Error(`GitHub GraphQL errors: ${stringifyGraphqlErrorsForLog(response.errors)}`);
205
286
  }
@@ -222,6 +303,10 @@ query GetProjectItems($projectId: ID!, $after: String, $first: Int!) {
222
303
  }
223
304
  catch (error) {
224
305
  lastError = error;
306
+ if (error instanceof ky_1.HTTPError &&
307
+ isRateLimitStatus(error.response.status)) {
308
+ throw error;
309
+ }
225
310
  if (attemptFirst === 1) {
226
311
  throw error;
227
312
  }
@@ -1 +1 @@
1
- {"version":3,"file":"GraphqlProjectItemRepository.js","sourceRoot":"","sources":["../../../../src/adapter/repositories/issue/GraphqlProjectItemRepository.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"GraphqlProjectItemRepository.js","sourceRoot":"","sources":["../../../../src/adapter/repositories/issue/GraphqlProjectItemRepository.ts"],"names":[],"mappings":"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"}
@@ -6,11 +6,11 @@ const UNKNOWN_STORY_SORT_INDEX = 999999;
6
6
  class GenerateInTmuxByHumanDataUseCase {
7
7
  constructor() {
8
8
  this.run = (input) => {
9
- const { project, issues, pjcode, assigneeLogin, org, repo, consoleBaseUrl, consoleToken, now, } = input;
9
+ const { project, issues, pjcode, assigneeLogin, org, repo, consoleBaseUrl, consoleToken, } = input;
10
10
  const storyOrder = project.story
11
11
  ? project.story.stories.map((option) => option.name)
12
12
  : [];
13
- const selectedIssues = issues.filter((issue) => this.isInTmuxByHuman(issue, assigneeLogin, now));
13
+ const selectedIssues = issues.filter((issue) => this.isInTmuxByHuman(issue, assigneeLogin));
14
14
  const groups = this.groupByStoryOrder(selectedIssues, storyOrder);
15
15
  const v2 = groups.map((group) => ({
16
16
  story: group.story,
@@ -32,7 +32,7 @@ class GenerateInTmuxByHumanDataUseCase {
32
32
  }));
33
33
  const overviewUrl = project.url;
34
34
  const tdpmConsoleUrl = consoleBaseUrl
35
- ? `${consoleBaseUrl}/projects/${pjcode}/prs`
35
+ ? `${consoleBaseUrl}/projects/${pjcode}`
36
36
  : null;
37
37
  const v3 = tdpmConsoleUrl
38
38
  ? {
@@ -53,11 +53,11 @@ class GenerateInTmuxByHumanDataUseCase {
53
53
  : null;
54
54
  return { v1, v2, v3, v4 };
55
55
  };
56
- this.isInTmuxByHuman = (issue, assigneeLogin, now) => issue.status === IN_TMUX_BY_HUMAN_STATUS_NAME &&
56
+ this.isInTmuxByHuman = (issue, assigneeLogin) => issue.status === IN_TMUX_BY_HUMAN_STATUS_NAME &&
57
57
  issue.isClosed === false &&
58
58
  issue.assignees.includes(assigneeLogin) &&
59
- (issue.nextActionDate === null ||
60
- issue.nextActionDate.getTime() <= now.getTime()) &&
59
+ issue.dependedIssueUrls.length === 0 &&
60
+ issue.nextActionDate === null &&
61
61
  issue.nextActionHour === null;
62
62
  this.groupByStoryOrder = (issues, storyOrder) => {
63
63
  const indexByStory = new Map(storyOrder.map((name, index) => [name, index]));
@@ -1 +1 @@
1
- {"version":3,"file":"GenerateInTmuxByHumanDataUseCase.js","sourceRoot":"","sources":["../../../../src/domain/usecases/intmux/GenerateInTmuxByHumanDataUseCase.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"GenerateInTmuxByHumanDataUseCase.js","sourceRoot":"","sources":["../../../../src/domain/usecases/intmux/GenerateInTmuxByHumanDataUseCase.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.104.2",
3
+ "version": "1.104.4",
4
4
  "description": "",
5
5
  "main": "bin/index.js",
6
6
  "scripts": {
@@ -148,7 +148,7 @@ describe('writeInTmuxByHumanData', () => {
148
148
  expect(readJson(file('demo.v3.json'))).toEqual({
149
149
  version: 3,
150
150
  overviewUrl: 'https://github.com/orgs/demo/projects/1',
151
- tdpmConsoleUrl: 'https://console.example.test/projects/demo/prs',
151
+ tdpmConsoleUrl: 'https://console.example.test/projects/demo',
152
152
  groups: [
153
153
  {
154
154
  story: 'Story Alpha',
@@ -166,7 +166,7 @@ describe('writeInTmuxByHumanData', () => {
166
166
  version: 4,
167
167
  overviewUrl: 'https://github.com/orgs/demo/projects/1',
168
168
  tdpmConsoleUrl:
169
- 'https://console.example.test/projects/demo/prs?k=test-token-value',
169
+ 'https://console.example.test/projects/demo?k=test-token-value',
170
170
  newIssueUrl:
171
171
  'https://github.com/demo-org/demo-repo/issues/new?assignees=owner-login',
172
172
  groups: [
@@ -1,22 +1,29 @@
1
1
  const mockPost = jest.fn();
2
2
 
3
- jest.mock('ky', () => ({
4
- default: {
5
- post: mockPost,
6
- get: jest.fn(),
7
- put: jest.fn(),
8
- patch: jest.fn(),
9
- delete: jest.fn(),
10
- extend: jest.fn(),
11
- create: jest.fn(),
12
- stop: jest.fn(),
13
- },
14
- __esModule: true,
15
- }));
3
+ jest.mock('ky', () => {
4
+ const actualKy: typeof import('ky') = jest.requireActual('ky');
5
+ return {
6
+ default: {
7
+ post: mockPost,
8
+ get: jest.fn(),
9
+ put: jest.fn(),
10
+ patch: jest.fn(),
11
+ delete: jest.fn(),
12
+ extend: jest.fn(),
13
+ create: jest.fn(),
14
+ stop: jest.fn(),
15
+ },
16
+ HTTPError: actualKy.HTTPError,
17
+ __esModule: true,
18
+ };
19
+ });
16
20
 
21
+ import { HTTPError } from 'ky';
17
22
  import {
18
23
  GraphqlProjectItemRepository,
19
24
  PAGINATION_DELAY_MS,
25
+ RATE_LIMIT_MAX_RETRIES,
26
+ callWithRateLimitRetry,
20
27
  } from './GraphqlProjectItemRepository';
21
28
  import { LocalStorageRepository } from '../LocalStorageRepository';
22
29
 
@@ -24,6 +31,30 @@ const mockJsonResponse = <T>(data: T) => ({
24
31
  json: jest.fn().mockResolvedValue(data),
25
32
  });
26
33
 
34
+ const makeHttpError = (
35
+ status: number,
36
+ headers: Record<string, string> = {},
37
+ ): HTTPError => {
38
+ const response = new Response('rate limited', {
39
+ status,
40
+ headers,
41
+ });
42
+ const request = new Request('https://api.github.com/graphql');
43
+ const normalizedOptions: ConstructorParameters<typeof HTTPError>[2] = {
44
+ method: 'post',
45
+ retry: {},
46
+ prefix: '',
47
+ onDownloadProgress: undefined,
48
+ onUploadProgress: undefined,
49
+ context: {},
50
+ };
51
+ return new HTTPError(response, request, normalizedOptions);
52
+ };
53
+
54
+ const mockRejectedJsonResponse = (error: HTTPError) => ({
55
+ json: jest.fn().mockRejectedValue(error),
56
+ });
57
+
27
58
  const isRecord = (value: unknown): value is Record<string, unknown> =>
28
59
  typeof value === 'object' && value !== null;
29
60
 
@@ -434,6 +465,229 @@ describe('GraphqlProjectItemRepository', () => {
434
465
  );
435
466
  expect(requestedFirstSeries).toEqual([100, 50, 25, 12, 6, 3, 1]);
436
467
  });
468
+
469
+ it('should not sleep the legacy 5000ms blanket delay between pages', async () => {
470
+ const localStorageRepository = new LocalStorageRepository();
471
+ const repository = new GraphqlProjectItemRepository(
472
+ localStorageRepository,
473
+ 'dummy-token',
474
+ );
475
+
476
+ const setTimeoutSpy = jest.spyOn(global, 'setTimeout');
477
+ mockPost
478
+ .mockReturnValueOnce(makePageResponse(true, 'cursor-1'))
479
+ .mockReturnValueOnce(makePageResponse(false, 'cursor-2'));
480
+
481
+ const resultPromise = repository.fetchProjectItems('test-project-id');
482
+ await jest.advanceTimersByTimeAsync(PAGINATION_DELAY_MS);
483
+ const result = await resultPromise;
484
+
485
+ expect(result).toHaveLength(2);
486
+ expect(PAGINATION_DELAY_MS).toBeLessThanOrEqual(500);
487
+ expect(setTimeoutSpy).not.toHaveBeenCalledWith(
488
+ expect.any(Function),
489
+ 5000,
490
+ );
491
+ setTimeoutSpy.mockRestore();
492
+ });
493
+
494
+ it('should back off and retry once when GitHub responds 429, then succeed', async () => {
495
+ const localStorageRepository = new LocalStorageRepository();
496
+ const repository = new GraphqlProjectItemRepository(
497
+ localStorageRepository,
498
+ 'dummy-token',
499
+ );
500
+
501
+ mockPost
502
+ .mockReturnValueOnce(
503
+ mockRejectedJsonResponse(makeHttpError(429, { 'retry-after': '3' })),
504
+ )
505
+ .mockReturnValueOnce(makePageResponse(false, 'cursor-1', 1));
506
+
507
+ const resultPromise = repository.fetchProjectItems('test-project-id');
508
+ await jest.advanceTimersByTimeAsync(3000);
509
+ const result = await resultPromise;
510
+
511
+ expect(result).toHaveLength(1);
512
+ expect(mockPost).toHaveBeenCalledTimes(2);
513
+ });
514
+
515
+ it('should honor the retry-after header duration before retrying after a 429', async () => {
516
+ const localStorageRepository = new LocalStorageRepository();
517
+ const repository = new GraphqlProjectItemRepository(
518
+ localStorageRepository,
519
+ 'dummy-token',
520
+ );
521
+
522
+ mockPost
523
+ .mockReturnValueOnce(
524
+ mockRejectedJsonResponse(makeHttpError(429, { 'retry-after': '7' })),
525
+ )
526
+ .mockReturnValueOnce(makePageResponse(false, 'cursor-1', 1));
527
+
528
+ const resultPromise = repository.fetchProjectItems('test-project-id');
529
+ await jest.advanceTimersByTimeAsync(6999);
530
+ expect(mockPost).toHaveBeenCalledTimes(1);
531
+ await jest.advanceTimersByTimeAsync(1);
532
+ const result = await resultPromise;
533
+
534
+ expect(result).toHaveLength(1);
535
+ expect(mockPost).toHaveBeenCalledTimes(2);
536
+ });
537
+
538
+ it('should wait until x-ratelimit-reset when 403 has no retry-after and remaining is 0', async () => {
539
+ const localStorageRepository = new LocalStorageRepository();
540
+ const repository = new GraphqlProjectItemRepository(
541
+ localStorageRepository,
542
+ 'dummy-token',
543
+ );
544
+
545
+ const resetEpochSeconds = Math.floor(Date.now() / 1000) + 4;
546
+ mockPost
547
+ .mockReturnValueOnce(
548
+ mockRejectedJsonResponse(
549
+ makeHttpError(403, {
550
+ 'x-ratelimit-remaining': '0',
551
+ 'x-ratelimit-reset': String(resetEpochSeconds),
552
+ }),
553
+ ),
554
+ )
555
+ .mockReturnValueOnce(makePageResponse(false, 'cursor-1', 1));
556
+
557
+ const resultPromise = repository.fetchProjectItems('test-project-id');
558
+ await jest.advanceTimersByTimeAsync(5000);
559
+ const result = await resultPromise;
560
+
561
+ expect(result).toHaveLength(1);
562
+ expect(mockPost).toHaveBeenCalledTimes(2);
563
+ });
564
+
565
+ it('should give up and rethrow after exhausting rate-limit retries', async () => {
566
+ const localStorageRepository = new LocalStorageRepository();
567
+ const repository = new GraphqlProjectItemRepository(
568
+ localStorageRepository,
569
+ 'dummy-token',
570
+ );
571
+
572
+ mockPost.mockReturnValue(
573
+ mockRejectedJsonResponse(makeHttpError(429, { 'retry-after': '1' })),
574
+ );
575
+
576
+ const resultPromise = repository
577
+ .fetchProjectItems('test-project-id')
578
+ .catch((error: unknown) => error);
579
+ await jest.runAllTimersAsync();
580
+ const caught = await resultPromise;
581
+
582
+ expect(caught).toBeInstanceOf(HTTPError);
583
+ expect(mockPost).toHaveBeenCalledTimes(RATE_LIMIT_MAX_RETRIES + 1);
584
+ }, 30000);
585
+
586
+ it('should not let the page-size halving fallback re-issue a rate-limit request', async () => {
587
+ const localStorageRepository = new LocalStorageRepository();
588
+ const repository = new GraphqlProjectItemRepository(
589
+ localStorageRepository,
590
+ 'dummy-token',
591
+ );
592
+
593
+ mockPost.mockReturnValue(
594
+ mockRejectedJsonResponse(makeHttpError(429, { 'retry-after': '1' })),
595
+ );
596
+
597
+ const resultPromise = repository
598
+ .fetchProjectItems('test-project-id')
599
+ .catch((error: unknown) => error);
600
+ await jest.runAllTimersAsync();
601
+ await resultPromise;
602
+
603
+ const requestedFirstSeries = mockPost.mock.calls.map((call) =>
604
+ extractRequestedFirstFromMockCall(call),
605
+ );
606
+ expect(requestedFirstSeries.every((first) => first === 100)).toBe(true);
607
+ }, 30000);
608
+ });
609
+
610
+ describe('callWithRateLimitRetry', () => {
611
+ beforeEach(() => {
612
+ jest.useFakeTimers();
613
+ });
614
+
615
+ afterEach(() => {
616
+ jest.useRealTimers();
617
+ });
618
+
619
+ it('should return the result without retrying when the request succeeds', async () => {
620
+ const request = jest.fn().mockResolvedValue('ok');
621
+
622
+ const result = await callWithRateLimitRetry(request);
623
+
624
+ expect(result).toBe('ok');
625
+ expect(request).toHaveBeenCalledTimes(1);
626
+ });
627
+
628
+ it('should retry on a 429 then return the eventual success value', async () => {
629
+ const request = jest
630
+ .fn()
631
+ .mockRejectedValueOnce(makeHttpError(429, { 'retry-after': '2' }))
632
+ .mockResolvedValueOnce('recovered');
633
+
634
+ const resultPromise = callWithRateLimitRetry(request);
635
+ await jest.advanceTimersByTimeAsync(2000);
636
+ const result = await resultPromise;
637
+
638
+ expect(result).toBe('recovered');
639
+ expect(request).toHaveBeenCalledTimes(2);
640
+ });
641
+
642
+ it('should retry on a 403 rate-limit response then succeed', async () => {
643
+ const resetEpochSeconds = Math.floor(Date.now() / 1000) + 3;
644
+ const request = jest
645
+ .fn()
646
+ .mockRejectedValueOnce(
647
+ makeHttpError(403, {
648
+ 'x-ratelimit-remaining': '0',
649
+ 'x-ratelimit-reset': String(resetEpochSeconds),
650
+ }),
651
+ )
652
+ .mockResolvedValueOnce('recovered');
653
+
654
+ const resultPromise = callWithRateLimitRetry(request);
655
+ await jest.advanceTimersByTimeAsync(4000);
656
+ const result = await resultPromise;
657
+
658
+ expect(result).toBe('recovered');
659
+ expect(request).toHaveBeenCalledTimes(2);
660
+ });
661
+
662
+ it('should not retry a non-rate-limit HTTP error such as 500', async () => {
663
+ const httpError = makeHttpError(500);
664
+ const request = jest.fn().mockRejectedValue(httpError);
665
+
666
+ await expect(callWithRateLimitRetry(request)).rejects.toBe(httpError);
667
+ expect(request).toHaveBeenCalledTimes(1);
668
+ });
669
+
670
+ it('should rethrow immediately for a non-HTTPError', async () => {
671
+ const plainError = new Error('boom');
672
+ const request = jest.fn().mockRejectedValue(plainError);
673
+
674
+ await expect(callWithRateLimitRetry(request)).rejects.toBe(plainError);
675
+ expect(request).toHaveBeenCalledTimes(1);
676
+ });
677
+
678
+ it('should stop after the maximum number of rate-limit retries', async () => {
679
+ const httpError = makeHttpError(429, { 'retry-after': '1' });
680
+ const request = jest.fn().mockRejectedValue(httpError);
681
+
682
+ const resultPromise = callWithRateLimitRetry(request).catch(
683
+ (error: unknown) => error,
684
+ );
685
+ await jest.runAllTimersAsync();
686
+ const caught = await resultPromise;
687
+
688
+ expect(caught).toBe(httpError);
689
+ expect(request).toHaveBeenCalledTimes(RATE_LIMIT_MAX_RETRIES + 1);
690
+ }, 30000);
437
691
  });
438
692
 
439
693
  describe('getProjectItemFields', () => {
@@ -1,4 +1,4 @@
1
- import ky from 'ky';
1
+ import ky, { HTTPError } from 'ky';
2
2
  import { BaseGitHubRepository } from '../BaseGitHubRepository';
3
3
  import { Project } from '../../../domain/entities/Project';
4
4
  import { Issue } from '../../../domain/entities/Issue';
@@ -20,9 +20,94 @@ export type ProjectItem = {
20
20
  value: string | null;
21
21
  }[];
22
22
  };
23
- export const PAGINATION_DELAY_MS = 5000;
23
+ export const PAGINATION_DELAY_MS = 500;
24
24
  export const FETCH_PROJECT_ITEMS_INITIAL_PAGE_SIZE = 100;
25
25
  export const FETCH_PROJECT_ITEMS_GRAPHQL_ERROR_PAYLOAD_MAX_LENGTH = 4000;
26
+ export const RATE_LIMIT_MAX_RETRIES = 6;
27
+ export const RATE_LIMIT_MIN_BACKOFF_MS = 1000;
28
+ export const RATE_LIMIT_DEFAULT_BACKOFF_MS = 60000;
29
+ export const RATE_LIMIT_MAX_BACKOFF_MS = 300000;
30
+
31
+ const sleep = (ms: number): Promise<void> =>
32
+ new Promise((resolve) => setTimeout(resolve, ms));
33
+
34
+ const parseNonNegativeIntegerHeader = (value: string | null): number | null => {
35
+ if (value === null) {
36
+ return null;
37
+ }
38
+ const trimmed = value.trim();
39
+ if (!/^\d+$/.test(trimmed)) {
40
+ return null;
41
+ }
42
+ const parsed = Number.parseInt(trimmed, 10);
43
+ return Number.isFinite(parsed) ? parsed : null;
44
+ };
45
+
46
+ const computeRateLimitBackoffMs = (
47
+ headers: Headers | undefined,
48
+ attempt: number,
49
+ nowMs: number,
50
+ ): number => {
51
+ const exponentialMs = Math.min(
52
+ RATE_LIMIT_MAX_BACKOFF_MS,
53
+ RATE_LIMIT_DEFAULT_BACKOFF_MS * Math.pow(2, attempt),
54
+ );
55
+ const retryAfterSeconds = parseNonNegativeIntegerHeader(
56
+ headers?.get('retry-after') ?? null,
57
+ );
58
+ if (retryAfterSeconds !== null) {
59
+ return Math.min(
60
+ RATE_LIMIT_MAX_BACKOFF_MS,
61
+ Math.max(RATE_LIMIT_MIN_BACKOFF_MS, retryAfterSeconds * 1000),
62
+ );
63
+ }
64
+ const remaining = parseNonNegativeIntegerHeader(
65
+ headers?.get('x-ratelimit-remaining') ?? null,
66
+ );
67
+ const resetEpochSeconds = parseNonNegativeIntegerHeader(
68
+ headers?.get('x-ratelimit-reset') ?? null,
69
+ );
70
+ if (remaining === 0 && resetEpochSeconds !== null) {
71
+ const waitMs = resetEpochSeconds * 1000 - nowMs;
72
+ return Math.min(
73
+ RATE_LIMIT_MAX_BACKOFF_MS,
74
+ Math.max(RATE_LIMIT_MIN_BACKOFF_MS, waitMs),
75
+ );
76
+ }
77
+ return Math.max(RATE_LIMIT_MIN_BACKOFF_MS, exponentialMs);
78
+ };
79
+
80
+ const isRateLimitStatus = (status: number): boolean =>
81
+ status === 429 || status === 403;
82
+
83
+ export const callWithRateLimitRetry = async <T>(
84
+ request: () => Promise<T>,
85
+ ): Promise<T> => {
86
+ let attempt = 0;
87
+ for (;;) {
88
+ try {
89
+ return await request();
90
+ } catch (error) {
91
+ if (
92
+ !(error instanceof HTTPError) ||
93
+ !isRateLimitStatus(error.response.status) ||
94
+ attempt >= RATE_LIMIT_MAX_RETRIES
95
+ ) {
96
+ throw error;
97
+ }
98
+ const backoffMs = computeRateLimitBackoffMs(
99
+ error.response.headers,
100
+ attempt,
101
+ Date.now(),
102
+ );
103
+ console.log(
104
+ `fetchProjectItems: GitHub returned ${error.response.status} (rate limit). Backing off ${backoffMs}ms before retry ${attempt + 1}/${RATE_LIMIT_MAX_RETRIES}.`,
105
+ );
106
+ await sleep(backoffMs);
107
+ attempt++;
108
+ }
109
+ }
110
+ };
26
111
 
27
112
  const stringifyGraphqlErrorsForLog = (
28
113
  errors: { message: string }[],
@@ -277,53 +362,55 @@ query GetProjectItems($projectId: ID!, $after: String, $first: Int!) {
277
362
  first: first,
278
363
  },
279
364
  };
280
- const response = await ky
281
- .post('https://api.github.com/graphql', {
282
- json: graphqlQuery,
283
- headers: {
284
- Authorization: `Bearer ${this.ghToken}`,
285
- },
286
- })
287
- .json<{
288
- data: {
289
- node: {
290
- items: {
291
- totalCount: number;
292
- pageInfo: {
293
- endCursor: string;
294
- startCursor: string;
295
- hasNextPage: boolean;
296
- };
297
- nodes: {
298
- id: string;
299
- fieldValues: {
300
- nodes: {
301
- text: string;
302
- number: number;
303
- date: string;
304
- field: {
305
- name: string;
306
- };
307
- }[];
365
+ const response = await callWithRateLimitRetry(() =>
366
+ ky
367
+ .post('https://api.github.com/graphql', {
368
+ json: graphqlQuery,
369
+ headers: {
370
+ Authorization: `Bearer ${this.ghToken}`,
371
+ },
372
+ })
373
+ .json<{
374
+ data: {
375
+ node: {
376
+ items: {
377
+ totalCount: number;
378
+ pageInfo: {
379
+ endCursor: string;
380
+ startCursor: string;
381
+ hasNextPage: boolean;
308
382
  };
309
- content: {
310
- repository: { nameWithOwner: string };
311
- number: number;
312
- title: string;
313
- state: string;
314
- url: string;
315
- createdAt: string;
316
- author: { login: string } | null;
317
- labels: { nodes: { name: string }[] };
318
- assignees: { nodes: { login: string }[] };
319
- closingIssuesReferences?: { nodes: { url: string }[] };
320
- };
321
- }[];
322
- };
383
+ nodes: {
384
+ id: string;
385
+ fieldValues: {
386
+ nodes: {
387
+ text: string;
388
+ number: number;
389
+ date: string;
390
+ field: {
391
+ name: string;
392
+ };
393
+ }[];
394
+ };
395
+ content: {
396
+ repository: { nameWithOwner: string };
397
+ number: number;
398
+ title: string;
399
+ state: string;
400
+ url: string;
401
+ createdAt: string;
402
+ author: { login: string } | null;
403
+ labels: { nodes: { name: string }[] };
404
+ assignees: { nodes: { login: string }[] };
405
+ closingIssuesReferences?: { nodes: { url: string }[] };
406
+ };
407
+ }[];
408
+ };
409
+ } | null;
323
410
  } | null;
324
- } | null;
325
- errors?: { message: string }[];
326
- }>();
411
+ errors?: { message: string }[];
412
+ }>(),
413
+ );
327
414
  if (response.errors && response.errors.length > 0) {
328
415
  throw new Error(
329
416
  `GitHub GraphQL errors: ${stringifyGraphqlErrorsForLog(response.errors)}`,
@@ -385,6 +472,12 @@ query GetProjectItems($projectId: ID!, $after: String, $first: Int!) {
385
472
  return await callGraphql(projectId, after, attemptFirst);
386
473
  } catch (error) {
387
474
  lastError = error;
475
+ if (
476
+ error instanceof HTTPError &&
477
+ isRateLimitStatus(error.response.status)
478
+ ) {
479
+ throw error;
480
+ }
388
481
  if (attemptFirst === 1) {
389
482
  throw error;
390
483
  }
@@ -160,19 +160,24 @@ describe('GenerateInTmuxByHumanDataUseCase', () => {
160
160
  expect(result.v1).toEqual([]);
161
161
  });
162
162
 
163
- it('keeps issues whose next action date is in the past and is now due', () => {
163
+ it('rejects issues whose next action date is in the past', () => {
164
164
  const result = run([
165
165
  makeIssue({
166
166
  story: 'Story Alpha',
167
167
  nextActionDate: new Date(NOW.getTime() - 24 * 60 * 60 * 1000),
168
168
  }),
169
169
  ]);
170
- expect(result.v1).toEqual([
171
- {
170
+ expect(result.v1).toEqual([]);
171
+ });
172
+
173
+ it('rejects issues whose depended issue urls are non-empty', () => {
174
+ const result = run([
175
+ makeIssue({
172
176
  story: 'Story Alpha',
173
- urls: ['https://github.com/demo/repo/issues/1'],
174
- },
177
+ dependedIssueUrls: ['https://github.com/demo/repo/issues/42'],
178
+ }),
175
179
  ]);
180
+ expect(result.v1).toEqual([]);
176
181
  });
177
182
  });
178
183
 
@@ -237,7 +242,7 @@ describe('GenerateInTmuxByHumanDataUseCase', () => {
237
242
  expect(result.v3).toEqual({
238
243
  version: 3,
239
244
  overviewUrl: 'https://github.com/orgs/demo/projects/1',
240
- tdpmConsoleUrl: 'https://console.example.test/projects/demo/prs',
245
+ tdpmConsoleUrl: 'https://console.example.test/projects/demo',
241
246
  groups: result.v2,
242
247
  });
243
248
  });
@@ -270,7 +275,7 @@ describe('GenerateInTmuxByHumanDataUseCase', () => {
270
275
  version: 4,
271
276
  overviewUrl: 'https://github.com/orgs/demo/projects/1',
272
277
  tdpmConsoleUrl:
273
- 'https://console.example.test/projects/demo/prs?k=test-token-value',
278
+ 'https://console.example.test/projects/demo?k=test-token-value',
274
279
  newIssueUrl:
275
280
  'https://github.com/demo-org/demo-repo/issues/new?assignees=owner-login',
276
281
  groups: [
@@ -79,7 +79,6 @@ export class GenerateInTmuxByHumanDataUseCase {
79
79
  repo,
80
80
  consoleBaseUrl,
81
81
  consoleToken,
82
- now,
83
82
  } = input;
84
83
 
85
84
  const storyOrder = project.story
@@ -87,7 +86,7 @@ export class GenerateInTmuxByHumanDataUseCase {
87
86
  : [];
88
87
 
89
88
  const selectedIssues = issues.filter((issue) =>
90
- this.isInTmuxByHuman(issue, assigneeLogin, now),
89
+ this.isInTmuxByHuman(issue, assigneeLogin),
91
90
  );
92
91
 
93
92
  const groups = this.groupByStoryOrder(selectedIssues, storyOrder);
@@ -115,7 +114,7 @@ export class GenerateInTmuxByHumanDataUseCase {
115
114
 
116
115
  const overviewUrl = project.url;
117
116
  const tdpmConsoleUrl = consoleBaseUrl
118
- ? `${consoleBaseUrl}/projects/${pjcode}/prs`
117
+ ? `${consoleBaseUrl}/projects/${pjcode}`
119
118
  : null;
120
119
 
121
120
  const v3: InTmuxByHumanV3 | null = tdpmConsoleUrl
@@ -141,16 +140,12 @@ export class GenerateInTmuxByHumanDataUseCase {
141
140
  return { v1, v2, v3, v4 };
142
141
  };
143
142
 
144
- private isInTmuxByHuman = (
145
- issue: Issue,
146
- assigneeLogin: string,
147
- now: Date,
148
- ): boolean =>
143
+ private isInTmuxByHuman = (issue: Issue, assigneeLogin: string): boolean =>
149
144
  issue.status === IN_TMUX_BY_HUMAN_STATUS_NAME &&
150
145
  issue.isClosed === false &&
151
146
  issue.assignees.includes(assigneeLogin) &&
152
- (issue.nextActionDate === null ||
153
- issue.nextActionDate.getTime() <= now.getTime()) &&
147
+ issue.dependedIssueUrls.length === 0 &&
148
+ issue.nextActionDate === null &&
154
149
  issue.nextActionHour === null;
155
150
 
156
151
  private groupByStoryOrder = (
@@ -19,9 +19,14 @@ export type ProjectItem = {
19
19
  value: string | null;
20
20
  }[];
21
21
  };
22
- export declare const PAGINATION_DELAY_MS = 5000;
22
+ export declare const PAGINATION_DELAY_MS = 500;
23
23
  export declare const FETCH_PROJECT_ITEMS_INITIAL_PAGE_SIZE = 100;
24
24
  export declare const FETCH_PROJECT_ITEMS_GRAPHQL_ERROR_PAYLOAD_MAX_LENGTH = 4000;
25
+ export declare const RATE_LIMIT_MAX_RETRIES = 6;
26
+ export declare const RATE_LIMIT_MIN_BACKOFF_MS = 1000;
27
+ export declare const RATE_LIMIT_DEFAULT_BACKOFF_MS = 60000;
28
+ export declare const RATE_LIMIT_MAX_BACKOFF_MS = 300000;
29
+ export declare const callWithRateLimitRetry: <T>(request: () => Promise<T>) => Promise<T>;
25
30
  export declare class GraphqlProjectItemRepository extends BaseGitHubRepository {
26
31
  fetchItemId: (projectId: string, owner: string, repositoryName: string, issueNumber: number) => Promise<string | undefined>;
27
32
  fetchProjectItems: (projectId: string) => Promise<ProjectItem[]>;
@@ -1 +1 @@
1
- {"version":3,"file":"GraphqlProjectItemRepository.d.ts","sourceRoot":"","sources":["../../../../src/adapter/repositories/issue/GraphqlProjectItemRepository.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"GraphqlProjectItemRepository.d.ts","sourceRoot":"","sources":["../../../../src/adapter/repositories/issue/GraphqlProjectItemRepository.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"GenerateInTmuxByHumanDataUseCase.d.ts","sourceRoot":"","sources":["../../../../src/domain/usecases/intmux/GenerateInTmuxByHumanDataUseCase.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAC7C,OAAO,EAAe,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAE9D,MAAM,MAAM,qBAAqB,GAAG;IAClC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,qBAAqB,EAAE,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,oBAAoB,EAAE,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,OAAO,EAAE,CAAC,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,oBAAoB,EAAE,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,OAAO,EAAE,CAAC,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,oBAAoB,EAAE,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,EAAE,EAAE,oBAAoB,EAAE,CAAC;IAC3B,EAAE,EAAE,oBAAoB,EAAE,CAAC;IAC3B,EAAE,EAAE,eAAe,GAAG,IAAI,CAAC;IAC3B,EAAE,EAAE,eAAe,GAAG,IAAI,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,8BAA8B,GAAG;IAC3C,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,GAAG,EAAE,IAAI,CAAC;CACX,CAAC;AAUF,qBAAa,gCAAgC;IAC3C,GAAG,GAAI,OAAO,8BAA8B,KAAG,iBAAiB,CAsE9D;IAEF,OAAO,CAAC,eAAe,CAUS;IAEhC,OAAO,CAAC,iBAAiB,CAkCvB;CACH"}
1
+ {"version":3,"file":"GenerateInTmuxByHumanDataUseCase.d.ts","sourceRoot":"","sources":["../../../../src/domain/usecases/intmux/GenerateInTmuxByHumanDataUseCase.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAC7C,OAAO,EAAe,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAE9D,MAAM,MAAM,qBAAqB,GAAG;IAClC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,qBAAqB,EAAE,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,oBAAoB,EAAE,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,OAAO,EAAE,CAAC,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,oBAAoB,EAAE,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,OAAO,EAAE,CAAC,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,oBAAoB,EAAE,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,EAAE,EAAE,oBAAoB,EAAE,CAAC;IAC3B,EAAE,EAAE,oBAAoB,EAAE,CAAC;IAC3B,EAAE,EAAE,eAAe,GAAG,IAAI,CAAC;IAC3B,EAAE,EAAE,eAAe,GAAG,IAAI,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,8BAA8B,GAAG;IAC3C,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,GAAG,EAAE,IAAI,CAAC;CACX,CAAC;AAUF,qBAAa,gCAAgC;IAC3C,GAAG,GAAI,OAAO,8BAA8B,KAAG,iBAAiB,CAqE9D;IAEF,OAAO,CAAC,eAAe,CAMS;IAEhC,OAAO,CAAC,iBAAiB,CAkCvB;CACH"}