specweave 0.28.68 → 0.29.1
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/CLAUDE.md +3 -2
- package/README.md +19 -2
- package/dist/src/cli/commands/discrepancies.d.ts +89 -0
- package/dist/src/cli/commands/discrepancies.d.ts.map +1 -0
- package/dist/src/cli/commands/discrepancies.js +385 -0
- package/dist/src/cli/commands/discrepancies.js.map +1 -0
- package/dist/src/cli/commands/notifications.d.ts +70 -0
- package/dist/src/cli/commands/notifications.d.ts.map +1 -0
- package/dist/src/cli/commands/notifications.js +236 -0
- package/dist/src/cli/commands/notifications.js.map +1 -0
- package/dist/src/cli/commands/sync-logs.d.ts +54 -0
- package/dist/src/cli/commands/sync-logs.d.ts.map +1 -0
- package/dist/src/cli/commands/sync-logs.js +240 -0
- package/dist/src/cli/commands/sync-logs.js.map +1 -0
- package/dist/src/cli/commands/sync-monitor.d.ts +42 -0
- package/dist/src/cli/commands/sync-monitor.d.ts.map +1 -0
- package/dist/src/cli/commands/sync-monitor.js +191 -0
- package/dist/src/cli/commands/sync-monitor.js.map +1 -0
- package/dist/src/cli/helpers/init/brownfield-analysis.d.ts +45 -0
- package/dist/src/cli/helpers/init/brownfield-analysis.d.ts.map +1 -0
- package/dist/src/cli/helpers/init/brownfield-analysis.js +431 -0
- package/dist/src/cli/helpers/init/brownfield-analysis.js.map +1 -0
- package/dist/src/cli/helpers/init/index.d.ts +1 -0
- package/dist/src/cli/helpers/init/index.d.ts.map +1 -1
- package/dist/src/cli/helpers/init/index.js +2 -0
- package/dist/src/cli/helpers/init/index.js.map +1 -1
- package/dist/src/cli/workers/brownfield-worker.d.ts +66 -0
- package/dist/src/cli/workers/brownfield-worker.d.ts.map +1 -0
- package/dist/src/cli/workers/brownfield-worker.js +417 -0
- package/dist/src/cli/workers/brownfield-worker.js.map +1 -0
- package/dist/src/core/background/brownfield-launcher.d.ts +86 -0
- package/dist/src/core/background/brownfield-launcher.d.ts.map +1 -0
- package/dist/src/core/background/brownfield-launcher.js +295 -0
- package/dist/src/core/background/brownfield-launcher.js.map +1 -0
- package/dist/src/core/background/index.d.ts +2 -0
- package/dist/src/core/background/index.d.ts.map +1 -1
- package/dist/src/core/background/index.js +2 -0
- package/dist/src/core/background/index.js.map +1 -1
- package/dist/src/core/background/types.d.ts +23 -2
- package/dist/src/core/background/types.d.ts.map +1 -1
- package/dist/src/core/config/index.d.ts +1 -0
- package/dist/src/core/config/index.d.ts.map +1 -1
- package/dist/src/core/config/index.js +1 -0
- package/dist/src/core/config/index.js.map +1 -1
- package/dist/src/core/config/types.d.ts +6 -0
- package/dist/src/core/config/types.d.ts.map +1 -1
- package/dist/src/core/config/types.js.map +1 -1
- package/dist/src/core/dashboard/dashboard-data.d.ts +156 -0
- package/dist/src/core/dashboard/dashboard-data.d.ts.map +1 -0
- package/dist/src/core/dashboard/dashboard-data.js +191 -0
- package/dist/src/core/dashboard/dashboard-data.js.map +1 -0
- package/dist/src/core/dashboard/index.d.ts +9 -0
- package/dist/src/core/dashboard/index.d.ts.map +1 -0
- package/dist/src/core/dashboard/index.js +9 -0
- package/dist/src/core/dashboard/index.js.map +1 -0
- package/dist/src/core/discrepancy/analyzers/api-route-analyzer.d.ts +77 -0
- package/dist/src/core/discrepancy/analyzers/api-route-analyzer.d.ts.map +1 -0
- package/dist/src/core/discrepancy/analyzers/api-route-analyzer.js +286 -0
- package/dist/src/core/discrepancy/analyzers/api-route-analyzer.js.map +1 -0
- package/dist/src/core/discrepancy/analyzers/index.d.ts +8 -0
- package/dist/src/core/discrepancy/analyzers/index.d.ts.map +1 -0
- package/dist/src/core/discrepancy/analyzers/index.js +8 -0
- package/dist/src/core/discrepancy/analyzers/index.js.map +1 -0
- package/dist/src/core/discrepancy/analyzers/typescript-analyzer.d.ts +96 -0
- package/dist/src/core/discrepancy/analyzers/typescript-analyzer.d.ts.map +1 -0
- package/dist/src/core/discrepancy/analyzers/typescript-analyzer.js +247 -0
- package/dist/src/core/discrepancy/analyzers/typescript-analyzer.js.map +1 -0
- package/dist/src/core/discrepancy/brownfield-manager.d.ts +88 -0
- package/dist/src/core/discrepancy/brownfield-manager.d.ts.map +1 -0
- package/dist/src/core/discrepancy/brownfield-manager.js +520 -0
- package/dist/src/core/discrepancy/brownfield-manager.js.map +1 -0
- package/dist/src/core/discrepancy/brownfield-types.d.ts +174 -0
- package/dist/src/core/discrepancy/brownfield-types.d.ts.map +1 -0
- package/dist/src/core/discrepancy/brownfield-types.js +11 -0
- package/dist/src/core/discrepancy/brownfield-types.js.map +1 -0
- package/dist/src/core/discrepancy/detector.d.ts +92 -0
- package/dist/src/core/discrepancy/detector.d.ts.map +1 -0
- package/dist/src/core/discrepancy/detector.js +346 -0
- package/dist/src/core/discrepancy/detector.js.map +1 -0
- package/dist/src/core/discrepancy/increment-generator.d.ts +51 -0
- package/dist/src/core/discrepancy/increment-generator.d.ts.map +1 -0
- package/dist/src/core/discrepancy/increment-generator.js +234 -0
- package/dist/src/core/discrepancy/increment-generator.js.map +1 -0
- package/dist/src/core/discrepancy/index.d.ts +18 -0
- package/dist/src/core/discrepancy/index.d.ts.map +1 -0
- package/dist/src/core/discrepancy/index.js +24 -0
- package/dist/src/core/discrepancy/index.js.map +1 -0
- package/dist/src/core/discrepancy/severity-classifier.d.ts +81 -0
- package/dist/src/core/discrepancy/severity-classifier.d.ts.map +1 -0
- package/dist/src/core/discrepancy/severity-classifier.js +289 -0
- package/dist/src/core/discrepancy/severity-classifier.js.map +1 -0
- package/dist/src/core/discrepancy/spec-parser.d.ts +74 -0
- package/dist/src/core/discrepancy/spec-parser.d.ts.map +1 -0
- package/dist/src/core/discrepancy/spec-parser.js +213 -0
- package/dist/src/core/discrepancy/spec-parser.js.map +1 -0
- package/dist/src/core/discrepancy/update-recommender.d.ts +77 -0
- package/dist/src/core/discrepancy/update-recommender.d.ts.map +1 -0
- package/dist/src/core/discrepancy/update-recommender.js +323 -0
- package/dist/src/core/discrepancy/update-recommender.js.map +1 -0
- package/dist/src/core/living-docs/living-docs-sync.d.ts +13 -16
- package/dist/src/core/living-docs/living-docs-sync.d.ts.map +1 -1
- package/dist/src/core/living-docs/living-docs-sync.js +31 -112
- package/dist/src/core/living-docs/living-docs-sync.js.map +1 -1
- package/dist/src/core/logs/index.d.ts +10 -0
- package/dist/src/core/logs/index.d.ts.map +1 -0
- package/dist/src/core/logs/index.js +10 -0
- package/dist/src/core/logs/index.js.map +1 -0
- package/dist/src/core/logs/log-aggregator.d.ts +130 -0
- package/dist/src/core/logs/log-aggregator.d.ts.map +1 -0
- package/dist/src/core/logs/log-aggregator.js +206 -0
- package/dist/src/core/logs/log-aggregator.js.map +1 -0
- package/dist/src/core/logs/log-exporter.d.ts +81 -0
- package/dist/src/core/logs/log-exporter.d.ts.map +1 -0
- package/dist/src/core/logs/log-exporter.js +141 -0
- package/dist/src/core/logs/log-exporter.js.map +1 -0
- package/dist/src/core/notifications/command-integration.d.ts +82 -0
- package/dist/src/core/notifications/command-integration.d.ts.map +1 -0
- package/dist/src/core/notifications/command-integration.js +80 -0
- package/dist/src/core/notifications/command-integration.js.map +1 -0
- package/dist/src/core/notifications/index.d.ts +12 -0
- package/dist/src/core/notifications/index.d.ts.map +1 -0
- package/dist/src/core/notifications/index.js +12 -0
- package/dist/src/core/notifications/index.js.map +1 -0
- package/dist/src/core/notifications/notification-display.d.ts +70 -0
- package/dist/src/core/notifications/notification-display.d.ts.map +1 -0
- package/dist/src/core/notifications/notification-display.js +177 -0
- package/dist/src/core/notifications/notification-display.js.map +1 -0
- package/dist/src/core/notifications/notification-manager.d.ts +126 -0
- package/dist/src/core/notifications/notification-manager.d.ts.map +1 -0
- package/dist/src/core/notifications/notification-manager.js +287 -0
- package/dist/src/core/notifications/notification-manager.js.map +1 -0
- package/dist/src/core/notifications/notification-types.d.ts +159 -0
- package/dist/src/core/notifications/notification-types.d.ts.map +1 -0
- package/dist/src/core/notifications/notification-types.js +93 -0
- package/dist/src/core/notifications/notification-types.js.map +1 -0
- package/dist/src/core/scheduler/index.d.ts +11 -0
- package/dist/src/core/scheduler/index.d.ts.map +1 -0
- package/dist/src/core/scheduler/index.js +11 -0
- package/dist/src/core/scheduler/index.js.map +1 -0
- package/dist/src/core/scheduler/job-scheduler.d.ts +179 -0
- package/dist/src/core/scheduler/job-scheduler.d.ts.map +1 -0
- package/dist/src/core/scheduler/job-scheduler.js +282 -0
- package/dist/src/core/scheduler/job-scheduler.js.map +1 -0
- package/dist/src/core/scheduler/schedule-persistence.d.ts +83 -0
- package/dist/src/core/scheduler/schedule-persistence.d.ts.map +1 -0
- package/dist/src/core/scheduler/schedule-persistence.js +180 -0
- package/dist/src/core/scheduler/schedule-persistence.js.map +1 -0
- package/dist/src/core/scheduler/scheduled-job.d.ts +188 -0
- package/dist/src/core/scheduler/scheduled-job.d.ts.map +1 -0
- package/dist/src/core/scheduler/scheduled-job.js +182 -0
- package/dist/src/core/scheduler/scheduled-job.js.map +1 -0
- package/dist/src/core/sync/permission-enforcer.d.ts +206 -0
- package/dist/src/core/sync/permission-enforcer.d.ts.map +1 -0
- package/dist/src/core/sync/permission-enforcer.js +268 -0
- package/dist/src/core/sync/permission-enforcer.js.map +1 -0
- package/dist/src/core/sync/sync-audit-logger.d.ts +217 -0
- package/dist/src/core/sync/sync-audit-logger.d.ts.map +1 -0
- package/dist/src/core/sync/sync-audit-logger.js +327 -0
- package/dist/src/core/sync/sync-audit-logger.js.map +1 -0
- package/dist/src/core/sync/sync-interceptor.d.ts +190 -0
- package/dist/src/core/sync/sync-interceptor.d.ts.map +1 -0
- package/dist/src/core/sync/sync-interceptor.js +224 -0
- package/dist/src/core/sync/sync-interceptor.js.map +1 -0
- package/dist/src/core/types/increment-metadata.d.ts +5 -2
- package/dist/src/core/types/increment-metadata.d.ts.map +1 -1
- package/dist/src/core/types/sync-config.d.ts +267 -0
- package/dist/src/core/types/sync-config.d.ts.map +1 -0
- package/dist/src/core/types/sync-config.js +304 -0
- package/dist/src/core/types/sync-config.js.map +1 -0
- package/dist/src/hooks/index.d.ts +11 -0
- package/dist/src/hooks/index.d.ts.map +1 -0
- package/dist/src/hooks/index.js +11 -0
- package/dist/src/hooks/index.js.map +1 -0
- package/dist/src/hooks/platform.d.ts +125 -0
- package/dist/src/hooks/platform.d.ts.map +1 -0
- package/dist/src/hooks/platform.js +325 -0
- package/dist/src/hooks/platform.js.map +1 -0
- package/dist/src/hooks/processor.d.ts +20 -0
- package/dist/src/hooks/processor.d.ts.map +1 -0
- package/dist/src/hooks/processor.js +317 -0
- package/dist/src/hooks/processor.js.map +1 -0
- package/dist/src/hooks/scheduler-startup.d.ts +19 -0
- package/dist/src/hooks/scheduler-startup.d.ts.map +1 -0
- package/dist/src/hooks/scheduler-startup.js +92 -0
- package/dist/src/hooks/scheduler-startup.js.map +1 -0
- package/dist/src/hooks/session-start.d.ts +16 -0
- package/dist/src/hooks/session-start.d.ts.map +1 -0
- package/dist/src/hooks/session-start.js +92 -0
- package/dist/src/hooks/session-start.js.map +1 -0
- package/dist/src/importers/duplicate-detector.d.ts +13 -2
- package/dist/src/importers/duplicate-detector.d.ts.map +1 -1
- package/dist/src/importers/duplicate-detector.js +21 -2
- package/dist/src/importers/duplicate-detector.js.map +1 -1
- package/dist/src/importers/item-converter.d.ts +41 -2
- package/dist/src/importers/item-converter.d.ts.map +1 -1
- package/dist/src/importers/item-converter.js +225 -38
- package/dist/src/importers/item-converter.js.map +1 -1
- package/dist/src/living-docs/fs-id-allocator.d.ts +7 -0
- package/dist/src/living-docs/fs-id-allocator.d.ts.map +1 -1
- package/dist/src/living-docs/fs-id-allocator.js +30 -4
- package/dist/src/living-docs/fs-id-allocator.js.map +1 -1
- package/dist/src/sync/ado-sync-wrapper.d.ts +137 -0
- package/dist/src/sync/ado-sync-wrapper.d.ts.map +1 -0
- package/dist/src/sync/ado-sync-wrapper.js +148 -0
- package/dist/src/sync/ado-sync-wrapper.js.map +1 -0
- package/dist/src/sync/github-sync-wrapper.d.ts +195 -0
- package/dist/src/sync/github-sync-wrapper.d.ts.map +1 -0
- package/dist/src/sync/github-sync-wrapper.js +220 -0
- package/dist/src/sync/github-sync-wrapper.js.map +1 -0
- package/dist/src/sync/jira-sync-wrapper.d.ts +155 -0
- package/dist/src/sync/jira-sync-wrapper.d.ts.map +1 -0
- package/dist/src/sync/jira-sync-wrapper.js +175 -0
- package/dist/src/sync/jira-sync-wrapper.js.map +1 -0
- package/dist/src/utils/feature-id-derivation.d.ts +58 -0
- package/dist/src/utils/feature-id-derivation.d.ts.map +1 -0
- package/dist/src/utils/feature-id-derivation.js +77 -0
- package/dist/src/utils/feature-id-derivation.js.map +1 -0
- package/package.json +3 -1
- package/plugins/specweave/commands/specweave-discrepancies.md +141 -0
- package/plugins/specweave/commands/specweave-discrepancy-to-increment.md +160 -0
- package/plugins/specweave/commands/specweave-jobs.md +45 -2
- package/plugins/specweave/commands/specweave-notifications.md +92 -0
- package/plugins/specweave/commands/specweave-sync-logs.md +131 -0
- package/plugins/specweave/commands/specweave-sync-monitor.md +57 -0
- package/plugins/specweave/hooks/hooks.json +3 -3
- package/plugins/specweave/hooks/lib/scheduler-startup.sh +72 -0
- package/plugins/specweave/hooks/universal/dispatcher.mjs +246 -0
- package/plugins/specweave/hooks/universal/session-start.cmd +16 -0
- package/plugins/specweave/hooks/universal/session-start.ps1 +16 -0
- package/plugins/specweave/hooks/v2/dispatchers/session-start.sh +14 -5
- package/plugins/specweave/lib/vendor/core/types/increment-metadata.d.ts +5 -2
- package/plugins/specweave/skills/discrepancy-viewer.md +154 -0
- package/plugins/specweave-github/hooks/.specweave/logs/hooks-debug.log +46 -0
- package/plugins/specweave-release/hooks/.specweave/logs/dora-tracking.log +69 -0
- package/dist/plugins/specweave-github/lib/enhanced-github-sync.d.ts +0 -26
- package/dist/plugins/specweave-github/lib/enhanced-github-sync.d.ts.map +0 -1
- package/dist/plugins/specweave-github/lib/enhanced-github-sync.js +0 -249
- package/dist/plugins/specweave-github/lib/enhanced-github-sync.js.map +0 -1
- package/dist/plugins/specweave-jira/lib/enhanced-jira-sync.d.ts +0 -28
- package/dist/plugins/specweave-jira/lib/enhanced-jira-sync.d.ts.map +0 -1
- package/dist/plugins/specweave-jira/lib/enhanced-jira-sync.js +0 -156
- package/dist/plugins/specweave-jira/lib/enhanced-jira-sync.js.map +0 -1
- package/dist/src/core/sync/bidirectional-engine.d.ts +0 -119
- package/dist/src/core/sync/bidirectional-engine.d.ts.map +0 -1
- package/dist/src/core/sync/bidirectional-engine.js +0 -359
- package/dist/src/core/sync/bidirectional-engine.js.map +0 -1
- package/dist/src/core/sync/conflict-resolver.d.ts +0 -66
- package/dist/src/core/sync/conflict-resolver.d.ts.map +0 -1
- package/dist/src/core/sync/conflict-resolver.js +0 -108
- package/dist/src/core/sync/conflict-resolver.js.map +0 -1
- package/dist/src/core/sync/enhanced-content-builder.d.ts +0 -55
- package/dist/src/core/sync/enhanced-content-builder.d.ts.map +0 -1
- package/dist/src/core/sync/enhanced-content-builder.js +0 -203
- package/dist/src/core/sync/enhanced-content-builder.js.map +0 -1
- package/dist/src/core/sync/folder-mapper.d.ts +0 -71
- package/dist/src/core/sync/folder-mapper.d.ts.map +0 -1
- package/dist/src/core/sync/folder-mapper.js +0 -203
- package/dist/src/core/sync/folder-mapper.js.map +0 -1
- package/dist/src/core/sync/label-detector.d.ts +0 -66
- package/dist/src/core/sync/label-detector.d.ts.map +0 -1
- package/dist/src/core/sync/label-detector.js +0 -224
- package/dist/src/core/sync/label-detector.js.map +0 -1
- package/dist/src/core/sync/performance-optimizer.d.ts +0 -153
- package/dist/src/core/sync/performance-optimizer.d.ts.map +0 -1
- package/dist/src/core/sync/performance-optimizer.js +0 -220
- package/dist/src/core/sync/performance-optimizer.js.map +0 -1
- package/dist/src/core/sync/profile-selector.d.ts +0 -52
- package/dist/src/core/sync/profile-selector.d.ts.map +0 -1
- package/dist/src/core/sync/profile-selector.js +0 -179
- package/dist/src/core/sync/profile-selector.js.map +0 -1
- package/dist/src/core/sync/profile-validator.d.ts +0 -52
- package/dist/src/core/sync/profile-validator.d.ts.map +0 -1
- package/dist/src/core/sync/profile-validator.js +0 -170
- package/dist/src/core/sync/profile-validator.js.map +0 -1
- package/dist/src/core/sync/rate-limiter.d.ts +0 -116
- package/dist/src/core/sync/rate-limiter.d.ts.map +0 -1
- package/dist/src/core/sync/rate-limiter.js +0 -308
- package/dist/src/core/sync/rate-limiter.js.map +0 -1
- package/dist/src/core/sync/retry-handler.d.ts +0 -98
- package/dist/src/core/sync/retry-handler.d.ts.map +0 -1
- package/dist/src/core/sync/retry-handler.js +0 -196
- package/dist/src/core/sync/retry-handler.js.map +0 -1
- package/dist/src/core/sync/retry-logic.d.ts +0 -64
- package/dist/src/core/sync/retry-logic.d.ts.map +0 -1
- package/dist/src/core/sync/retry-logic.js +0 -165
- package/dist/src/core/sync/retry-logic.js.map +0 -1
- package/dist/src/core/sync/status-cache.d.ts +0 -91
- package/dist/src/core/sync/status-cache.d.ts.map +0 -1
- package/dist/src/core/sync/status-cache.js +0 -140
- package/dist/src/core/sync/status-cache.js.map +0 -1
- package/dist/src/core/sync/status-mapper.d.ts +0 -69
- package/dist/src/core/sync/status-mapper.d.ts.map +0 -1
- package/dist/src/core/sync/status-mapper.js +0 -90
- package/dist/src/core/sync/status-mapper.js.map +0 -1
- package/dist/src/core/sync/status-sync-engine.d.ts +0 -162
- package/dist/src/core/sync/status-sync-engine.d.ts.map +0 -1
- package/dist/src/core/sync/status-sync-engine.js +0 -347
- package/dist/src/core/sync/status-sync-engine.js.map +0 -1
- package/dist/src/core/sync/sync-event-logger.d.ts +0 -113
- package/dist/src/core/sync/sync-event-logger.d.ts.map +0 -1
- package/dist/src/core/sync/sync-event-logger.js +0 -141
- package/dist/src/core/sync/sync-event-logger.js.map +0 -1
- package/dist/src/core/sync/time-range-selector.d.ts +0 -48
- package/dist/src/core/sync/time-range-selector.d.ts.map +0 -1
- package/dist/src/core/sync/time-range-selector.js +0 -224
- package/dist/src/core/sync/time-range-selector.js.map +0 -1
- package/dist/src/core/sync/types.d.ts +0 -52
- package/dist/src/core/sync/types.d.ts.map +0 -1
- package/dist/src/core/sync/types.js +0 -5
- package/dist/src/core/sync/types.js.map +0 -1
- package/dist/src/core/sync/workflow-detector.d.ts +0 -95
- package/dist/src/core/sync/workflow-detector.d.ts.map +0 -1
- package/dist/src/core/sync/workflow-detector.js +0 -175
- package/dist/src/core/sync/workflow-detector.js.map +0 -1
- package/plugins/specweave-github/lib/enhanced-github-sync.js +0 -220
- package/plugins/specweave-github/lib/enhanced-github-sync.ts +0 -322
- package/plugins/specweave-jira/lib/enhanced-jira-sync.js +0 -134
- package/plugins/specweave-jira/lib/enhanced-jira-sync.ts +0 -196
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Retry Handler for Status Sync
|
|
3
|
-
*
|
|
4
|
-
* Implements exponential backoff retry logic for handling transient failures
|
|
5
|
-
* in external API calls (GitHub, JIRA, Azure DevOps).
|
|
6
|
-
*
|
|
7
|
-
* Features:
|
|
8
|
-
* - Exponential backoff (1s, 2s, 4s, 8s)
|
|
9
|
-
* - Maximum retry attempts (default: 3)
|
|
10
|
-
* - Rate limit detection and handling
|
|
11
|
-
* - Clear error messages
|
|
12
|
-
*
|
|
13
|
-
* @module retry-handler
|
|
14
|
-
*/
|
|
15
|
-
export type RetryableError = 'network-error' | 'rate-limit' | 'server-error' | 'timeout' | 'unknown';
|
|
16
|
-
export interface RetryConfig {
|
|
17
|
-
maxRetries?: number;
|
|
18
|
-
initialDelayMs?: number;
|
|
19
|
-
maxDelayMs?: number;
|
|
20
|
-
backoffMultiplier?: number;
|
|
21
|
-
}
|
|
22
|
-
export interface RetryContext {
|
|
23
|
-
attempt: number;
|
|
24
|
-
maxRetries: number;
|
|
25
|
-
lastError: Error;
|
|
26
|
-
errorType: RetryableError;
|
|
27
|
-
}
|
|
28
|
-
export interface RetryResult<T> {
|
|
29
|
-
success: boolean;
|
|
30
|
-
value?: T;
|
|
31
|
-
error?: Error;
|
|
32
|
-
attempts: number;
|
|
33
|
-
totalDelay: number;
|
|
34
|
-
}
|
|
35
|
-
/**
|
|
36
|
-
* Retry Handler
|
|
37
|
-
*
|
|
38
|
-
* Handles retries with exponential backoff for external API calls.
|
|
39
|
-
*/
|
|
40
|
-
export declare class RetryHandler {
|
|
41
|
-
private config;
|
|
42
|
-
constructor(config?: RetryConfig);
|
|
43
|
-
/**
|
|
44
|
-
* Execute operation with retry logic
|
|
45
|
-
*
|
|
46
|
-
* @param operation - Async operation to execute
|
|
47
|
-
* @param errorClassifier - Function to classify errors (determines if retryable)
|
|
48
|
-
* @returns Retry result with value or error
|
|
49
|
-
*/
|
|
50
|
-
executeWithRetry<T>(operation: () => Promise<T>, errorClassifier?: (error: Error) => RetryableError): Promise<RetryResult<T>>;
|
|
51
|
-
/**
|
|
52
|
-
* Classify error type
|
|
53
|
-
*
|
|
54
|
-
* @param error - Error to classify
|
|
55
|
-
* @returns Error type
|
|
56
|
-
*/
|
|
57
|
-
private classifyError;
|
|
58
|
-
/**
|
|
59
|
-
* Check if error type is retryable
|
|
60
|
-
*
|
|
61
|
-
* @param errorType - Error type
|
|
62
|
-
* @returns True if retryable
|
|
63
|
-
*/
|
|
64
|
-
private isRetryable;
|
|
65
|
-
/**
|
|
66
|
-
* Calculate delay for retry attempt
|
|
67
|
-
*
|
|
68
|
-
* Uses exponential backoff: initialDelay * (multiplier ^ (attempt - 1))
|
|
69
|
-
*
|
|
70
|
-
* @param attempt - Current attempt number (1-based)
|
|
71
|
-
* @returns Delay in milliseconds
|
|
72
|
-
*/
|
|
73
|
-
private calculateDelay;
|
|
74
|
-
/**
|
|
75
|
-
* Delay execution
|
|
76
|
-
*
|
|
77
|
-
* @param ms - Milliseconds to delay
|
|
78
|
-
*/
|
|
79
|
-
private delay;
|
|
80
|
-
/**
|
|
81
|
-
* Create clear error message for user
|
|
82
|
-
*
|
|
83
|
-
* @param error - Original error
|
|
84
|
-
* @param context - Retry context
|
|
85
|
-
* @returns User-friendly error message
|
|
86
|
-
*/
|
|
87
|
-
static createErrorMessage(error: Error, context: RetryContext): string;
|
|
88
|
-
/**
|
|
89
|
-
* Handle rate limit error
|
|
90
|
-
*
|
|
91
|
-
* Detects rate limit from error and calculates wait time.
|
|
92
|
-
*
|
|
93
|
-
* @param error - Error that may contain rate limit info
|
|
94
|
-
* @returns Wait time in seconds (null if not rate limit)
|
|
95
|
-
*/
|
|
96
|
-
static detectRateLimitWait(error: Error): number | null;
|
|
97
|
-
}
|
|
98
|
-
//# sourceMappingURL=retry-handler.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"retry-handler.d.ts","sourceRoot":"","sources":["../../../../src/core/sync/retry-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,MAAM,MAAM,cAAc,GACtB,eAAe,GACf,YAAY,GACZ,cAAc,GACd,SAAS,GACT,SAAS,CAAC;AAEd,MAAM,WAAW,WAAW;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,KAAK,CAAC;IACjB,SAAS,EAAE,cAAc,CAAC;CAC3B;AAED,MAAM,WAAW,WAAW,CAAC,CAAC;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,CAAC,CAAC;IACV,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAwB;gBAE1B,MAAM,GAAE,WAAgB;IASpC;;;;;;OAMG;IACG,gBAAgB,CAAC,CAAC,EACtB,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAC3B,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,cAAc,GACjD,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAoD1B;;;;;OAKG;IACH,OAAO,CAAC,aAAa;IA0CrB;;;;;OAKG;IACH,OAAO,CAAC,WAAW;IAInB;;;;;;;OAOG;IACH,OAAO,CAAC,cAAc;IAStB;;;;OAIG;IACH,OAAO,CAAC,KAAK;IAIb;;;;;;OAMG;IACH,MAAM,CAAC,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,YAAY,GAAG,MAAM;IAkBtE;;;;;;;OAOG;IACH,MAAM,CAAC,mBAAmB,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,GAAG,IAAI;CAsBxD"}
|
|
@@ -1,196 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Retry Handler for Status Sync
|
|
3
|
-
*
|
|
4
|
-
* Implements exponential backoff retry logic for handling transient failures
|
|
5
|
-
* in external API calls (GitHub, JIRA, Azure DevOps).
|
|
6
|
-
*
|
|
7
|
-
* Features:
|
|
8
|
-
* - Exponential backoff (1s, 2s, 4s, 8s)
|
|
9
|
-
* - Maximum retry attempts (default: 3)
|
|
10
|
-
* - Rate limit detection and handling
|
|
11
|
-
* - Clear error messages
|
|
12
|
-
*
|
|
13
|
-
* @module retry-handler
|
|
14
|
-
*/
|
|
15
|
-
/**
|
|
16
|
-
* Retry Handler
|
|
17
|
-
*
|
|
18
|
-
* Handles retries with exponential backoff for external API calls.
|
|
19
|
-
*/
|
|
20
|
-
export class RetryHandler {
|
|
21
|
-
constructor(config = {}) {
|
|
22
|
-
this.config = {
|
|
23
|
-
maxRetries: config.maxRetries ?? 3,
|
|
24
|
-
initialDelayMs: config.initialDelayMs ?? 1000,
|
|
25
|
-
maxDelayMs: config.maxDelayMs ?? 8000,
|
|
26
|
-
backoffMultiplier: config.backoffMultiplier ?? 2
|
|
27
|
-
};
|
|
28
|
-
}
|
|
29
|
-
/**
|
|
30
|
-
* Execute operation with retry logic
|
|
31
|
-
*
|
|
32
|
-
* @param operation - Async operation to execute
|
|
33
|
-
* @param errorClassifier - Function to classify errors (determines if retryable)
|
|
34
|
-
* @returns Retry result with value or error
|
|
35
|
-
*/
|
|
36
|
-
async executeWithRetry(operation, errorClassifier) {
|
|
37
|
-
let attempt = 0;
|
|
38
|
-
let totalDelay = 0;
|
|
39
|
-
let lastError;
|
|
40
|
-
while (attempt <= this.config.maxRetries) {
|
|
41
|
-
try {
|
|
42
|
-
const value = await operation();
|
|
43
|
-
return {
|
|
44
|
-
success: true,
|
|
45
|
-
value,
|
|
46
|
-
attempts: attempt + 1,
|
|
47
|
-
totalDelay
|
|
48
|
-
};
|
|
49
|
-
}
|
|
50
|
-
catch (error) {
|
|
51
|
-
lastError = error;
|
|
52
|
-
attempt++;
|
|
53
|
-
// Classify error
|
|
54
|
-
const errorType = errorClassifier
|
|
55
|
-
? errorClassifier(lastError)
|
|
56
|
-
: this.classifyError(lastError);
|
|
57
|
-
// Check if we should retry
|
|
58
|
-
if (!this.isRetryable(errorType) || attempt > this.config.maxRetries) {
|
|
59
|
-
return {
|
|
60
|
-
success: false,
|
|
61
|
-
error: lastError,
|
|
62
|
-
attempts: attempt,
|
|
63
|
-
totalDelay
|
|
64
|
-
};
|
|
65
|
-
}
|
|
66
|
-
// Calculate delay for next retry
|
|
67
|
-
const delay = this.calculateDelay(attempt);
|
|
68
|
-
totalDelay += delay;
|
|
69
|
-
// Wait before retrying
|
|
70
|
-
await this.delay(delay);
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
// Should not reach here, but TypeScript needs this
|
|
74
|
-
return {
|
|
75
|
-
success: false,
|
|
76
|
-
error: lastError ?? new Error('Unknown error'),
|
|
77
|
-
attempts: attempt,
|
|
78
|
-
totalDelay
|
|
79
|
-
};
|
|
80
|
-
}
|
|
81
|
-
/**
|
|
82
|
-
* Classify error type
|
|
83
|
-
*
|
|
84
|
-
* @param error - Error to classify
|
|
85
|
-
* @returns Error type
|
|
86
|
-
*/
|
|
87
|
-
classifyError(error) {
|
|
88
|
-
const message = error.message.toLowerCase();
|
|
89
|
-
// Network errors (retry)
|
|
90
|
-
if (message.includes('network') ||
|
|
91
|
-
message.includes('econnrefused') ||
|
|
92
|
-
message.includes('enotfound') ||
|
|
93
|
-
message.includes('etimedout')) {
|
|
94
|
-
return 'network-error';
|
|
95
|
-
}
|
|
96
|
-
// Rate limit errors (retry with longer delay)
|
|
97
|
-
if (message.includes('rate limit') ||
|
|
98
|
-
message.includes('429') ||
|
|
99
|
-
message.includes('too many requests')) {
|
|
100
|
-
return 'rate-limit';
|
|
101
|
-
}
|
|
102
|
-
// Server errors (retry)
|
|
103
|
-
if (message.includes('500') ||
|
|
104
|
-
message.includes('502') ||
|
|
105
|
-
message.includes('503') ||
|
|
106
|
-
message.includes('504') ||
|
|
107
|
-
message.includes('internal server error')) {
|
|
108
|
-
return 'server-error';
|
|
109
|
-
}
|
|
110
|
-
// Timeout errors (retry)
|
|
111
|
-
if (message.includes('timeout')) {
|
|
112
|
-
return 'timeout';
|
|
113
|
-
}
|
|
114
|
-
// Unknown errors (don't retry by default)
|
|
115
|
-
return 'unknown';
|
|
116
|
-
}
|
|
117
|
-
/**
|
|
118
|
-
* Check if error type is retryable
|
|
119
|
-
*
|
|
120
|
-
* @param errorType - Error type
|
|
121
|
-
* @returns True if retryable
|
|
122
|
-
*/
|
|
123
|
-
isRetryable(errorType) {
|
|
124
|
-
return errorType !== 'unknown';
|
|
125
|
-
}
|
|
126
|
-
/**
|
|
127
|
-
* Calculate delay for retry attempt
|
|
128
|
-
*
|
|
129
|
-
* Uses exponential backoff: initialDelay * (multiplier ^ (attempt - 1))
|
|
130
|
-
*
|
|
131
|
-
* @param attempt - Current attempt number (1-based)
|
|
132
|
-
* @returns Delay in milliseconds
|
|
133
|
-
*/
|
|
134
|
-
calculateDelay(attempt) {
|
|
135
|
-
const delay = this.config.initialDelayMs *
|
|
136
|
-
Math.pow(this.config.backoffMultiplier, attempt - 1);
|
|
137
|
-
// Cap at max delay
|
|
138
|
-
return Math.min(delay, this.config.maxDelayMs);
|
|
139
|
-
}
|
|
140
|
-
/**
|
|
141
|
-
* Delay execution
|
|
142
|
-
*
|
|
143
|
-
* @param ms - Milliseconds to delay
|
|
144
|
-
*/
|
|
145
|
-
delay(ms) {
|
|
146
|
-
return new Promise(resolve => setTimeout(resolve, ms));
|
|
147
|
-
}
|
|
148
|
-
/**
|
|
149
|
-
* Create clear error message for user
|
|
150
|
-
*
|
|
151
|
-
* @param error - Original error
|
|
152
|
-
* @param context - Retry context
|
|
153
|
-
* @returns User-friendly error message
|
|
154
|
-
*/
|
|
155
|
-
static createErrorMessage(error, context) {
|
|
156
|
-
const messages = {
|
|
157
|
-
'network-error': `Network error occurred. Please check your internet connection and try again.`,
|
|
158
|
-
'rate-limit': `Rate limit exceeded for external API. Please wait a few minutes and try again.`,
|
|
159
|
-
'server-error': `External service is experiencing issues. Please try again later.`,
|
|
160
|
-
'timeout': `Request timed out. Please check your connection and try again.`,
|
|
161
|
-
'unknown': `An unexpected error occurred: ${error.message}`
|
|
162
|
-
};
|
|
163
|
-
const baseMessage = messages[context.errorType];
|
|
164
|
-
if (context.attempt >= context.maxRetries) {
|
|
165
|
-
return `${baseMessage}\n\nFailed after ${context.attempt} attempts.`;
|
|
166
|
-
}
|
|
167
|
-
return baseMessage;
|
|
168
|
-
}
|
|
169
|
-
/**
|
|
170
|
-
* Handle rate limit error
|
|
171
|
-
*
|
|
172
|
-
* Detects rate limit from error and calculates wait time.
|
|
173
|
-
*
|
|
174
|
-
* @param error - Error that may contain rate limit info
|
|
175
|
-
* @returns Wait time in seconds (null if not rate limit)
|
|
176
|
-
*/
|
|
177
|
-
static detectRateLimitWait(error) {
|
|
178
|
-
const message = error.message;
|
|
179
|
-
// GitHub rate limit format: "API rate limit exceeded. Retry after 60 seconds"
|
|
180
|
-
const githubMatch = message.match(/retry after (\d+) seconds/i);
|
|
181
|
-
if (githubMatch) {
|
|
182
|
-
return parseInt(githubMatch[1], 10);
|
|
183
|
-
}
|
|
184
|
-
// JIRA rate limit (typically in headers, but may be in error message)
|
|
185
|
-
const jiraMatch = message.match(/retry after (\d+)/i);
|
|
186
|
-
if (jiraMatch) {
|
|
187
|
-
return parseInt(jiraMatch[1], 10);
|
|
188
|
-
}
|
|
189
|
-
// Generic 429 error - default to 60 seconds
|
|
190
|
-
if (message.includes('429') || message.toLowerCase().includes('rate limit')) {
|
|
191
|
-
return 60;
|
|
192
|
-
}
|
|
193
|
-
return null;
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
//# sourceMappingURL=retry-handler.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"retry-handler.js","sourceRoot":"","sources":["../../../../src/core/sync/retry-handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Retry Logic
|
|
3
|
-
*
|
|
4
|
-
* Provides retry functionality with exponential backoff.
|
|
5
|
-
* Handles transient errors (network, rate limits, timeouts).
|
|
6
|
-
*
|
|
7
|
-
* Retry Strategy:
|
|
8
|
-
* - Max 3 retries
|
|
9
|
-
* - Exponential backoff: 1s, 2s, 4s
|
|
10
|
-
* - Special handling for rate limits (wait and retry)
|
|
11
|
-
*
|
|
12
|
-
* @module retry-logic
|
|
13
|
-
*/
|
|
14
|
-
export interface RetryOptions {
|
|
15
|
-
maxRetries?: number;
|
|
16
|
-
initialDelayMs?: number;
|
|
17
|
-
maxDelayMs?: number;
|
|
18
|
-
retryableErrors?: string[];
|
|
19
|
-
}
|
|
20
|
-
export interface RetryResult<T> {
|
|
21
|
-
success: boolean;
|
|
22
|
-
result?: T;
|
|
23
|
-
error?: Error;
|
|
24
|
-
attempts: number;
|
|
25
|
-
totalDelayMs: number;
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* Check if error is retryable
|
|
29
|
-
*
|
|
30
|
-
* @param error - Error to check
|
|
31
|
-
* @returns True if error is retryable
|
|
32
|
-
*/
|
|
33
|
-
export declare function isRetryableError(error: Error): boolean;
|
|
34
|
-
/**
|
|
35
|
-
* Extract rate limit wait time from error
|
|
36
|
-
*
|
|
37
|
-
* @param error - Error that may contain rate limit info
|
|
38
|
-
* @returns Wait time in milliseconds, or null if not rate limit error
|
|
39
|
-
*/
|
|
40
|
-
export declare function extractRateLimitWaitTime(error: Error): number | null;
|
|
41
|
-
/**
|
|
42
|
-
* Retry function with exponential backoff
|
|
43
|
-
*
|
|
44
|
-
* @param fn - Function to retry
|
|
45
|
-
* @param options - Retry options
|
|
46
|
-
* @returns Retry result
|
|
47
|
-
*/
|
|
48
|
-
export declare function retryWithBackoff<T>(fn: () => Promise<T>, options?: RetryOptions): Promise<RetryResult<T>>;
|
|
49
|
-
/**
|
|
50
|
-
* Create error message with retry information
|
|
51
|
-
*
|
|
52
|
-
* @param error - Original error
|
|
53
|
-
* @param attempts - Number of attempts made
|
|
54
|
-
* @returns Enhanced error message
|
|
55
|
-
*/
|
|
56
|
-
export declare function createRetryErrorMessage(error: Error, attempts: number): string;
|
|
57
|
-
/**
|
|
58
|
-
* Check if error is permanent (not worth retrying)
|
|
59
|
-
*
|
|
60
|
-
* @param error - Error to check
|
|
61
|
-
* @returns True if error is permanent
|
|
62
|
-
*/
|
|
63
|
-
export declare function isPermanentError(error: Error): boolean;
|
|
64
|
-
//# sourceMappingURL=retry-logic.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"retry-logic.d.ts","sourceRoot":"","sources":["../../../../src/core/sync/retry-logic.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,MAAM,WAAW,YAAY;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,WAAW,CAAC,CAAC;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,CAAC,CAAC;IACX,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAkCtD;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,GAAG,IAAI,CAqBpE;AAED;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CAAC,CAAC,EACtC,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,OAAO,CAAC,EAAE,YAAY,GACrB,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CA4DzB;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE9E;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAwBtD"}
|
|
@@ -1,165 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Retry Logic
|
|
3
|
-
*
|
|
4
|
-
* Provides retry functionality with exponential backoff.
|
|
5
|
-
* Handles transient errors (network, rate limits, timeouts).
|
|
6
|
-
*
|
|
7
|
-
* Retry Strategy:
|
|
8
|
-
* - Max 3 retries
|
|
9
|
-
* - Exponential backoff: 1s, 2s, 4s
|
|
10
|
-
* - Special handling for rate limits (wait and retry)
|
|
11
|
-
*
|
|
12
|
-
* @module retry-logic
|
|
13
|
-
*/
|
|
14
|
-
/**
|
|
15
|
-
* Check if error is retryable
|
|
16
|
-
*
|
|
17
|
-
* @param error - Error to check
|
|
18
|
-
* @returns True if error is retryable
|
|
19
|
-
*/
|
|
20
|
-
export function isRetryableError(error) {
|
|
21
|
-
const message = error.message.toLowerCase();
|
|
22
|
-
// Network errors
|
|
23
|
-
if (message.includes('network') ||
|
|
24
|
-
message.includes('timeout') ||
|
|
25
|
-
message.includes('econnreset') ||
|
|
26
|
-
message.includes('enotfound') ||
|
|
27
|
-
message.includes('econnrefused')) {
|
|
28
|
-
return true;
|
|
29
|
-
}
|
|
30
|
-
// Rate limit errors
|
|
31
|
-
if (message.includes('rate limit') ||
|
|
32
|
-
message.includes('429') ||
|
|
33
|
-
message.includes('too many requests')) {
|
|
34
|
-
return true;
|
|
35
|
-
}
|
|
36
|
-
// Temporary server errors
|
|
37
|
-
if (message.includes('500') ||
|
|
38
|
-
message.includes('502') ||
|
|
39
|
-
message.includes('503') ||
|
|
40
|
-
message.includes('504')) {
|
|
41
|
-
return true;
|
|
42
|
-
}
|
|
43
|
-
return false;
|
|
44
|
-
}
|
|
45
|
-
/**
|
|
46
|
-
* Extract rate limit wait time from error
|
|
47
|
-
*
|
|
48
|
-
* @param error - Error that may contain rate limit info
|
|
49
|
-
* @returns Wait time in milliseconds, or null if not rate limit error
|
|
50
|
-
*/
|
|
51
|
-
export function extractRateLimitWaitTime(error) {
|
|
52
|
-
const message = error.message;
|
|
53
|
-
// GitHub: "Rate limit exceeded. Retry after 60 seconds."
|
|
54
|
-
const githubMatch = message.match(/retry after (\d+) seconds/i);
|
|
55
|
-
if (githubMatch) {
|
|
56
|
-
return parseInt(githubMatch[1]) * 1000;
|
|
57
|
-
}
|
|
58
|
-
// JIRA/ADO: "Rate limit exceeded. Retry-After: 120"
|
|
59
|
-
const retryAfterMatch = message.match(/retry-after:\s*(\d+)/i);
|
|
60
|
-
if (retryAfterMatch) {
|
|
61
|
-
return parseInt(retryAfterMatch[1]) * 1000;
|
|
62
|
-
}
|
|
63
|
-
// Generic rate limit: default wait 60 seconds
|
|
64
|
-
if (message.toLowerCase().includes('rate limit')) {
|
|
65
|
-
return 60 * 1000;
|
|
66
|
-
}
|
|
67
|
-
return null;
|
|
68
|
-
}
|
|
69
|
-
/**
|
|
70
|
-
* Retry function with exponential backoff
|
|
71
|
-
*
|
|
72
|
-
* @param fn - Function to retry
|
|
73
|
-
* @param options - Retry options
|
|
74
|
-
* @returns Retry result
|
|
75
|
-
*/
|
|
76
|
-
export async function retryWithBackoff(fn, options) {
|
|
77
|
-
const maxRetries = options?.maxRetries || 3;
|
|
78
|
-
const initialDelay = options?.initialDelayMs || 1000;
|
|
79
|
-
const maxDelay = options?.maxDelayMs || 8000;
|
|
80
|
-
let lastError;
|
|
81
|
-
let totalDelay = 0;
|
|
82
|
-
for (let attempt = 1; attempt <= maxRetries + 1; attempt++) {
|
|
83
|
-
try {
|
|
84
|
-
const result = await fn();
|
|
85
|
-
return {
|
|
86
|
-
success: true,
|
|
87
|
-
result,
|
|
88
|
-
attempts: attempt,
|
|
89
|
-
totalDelayMs: totalDelay
|
|
90
|
-
};
|
|
91
|
-
}
|
|
92
|
-
catch (error) {
|
|
93
|
-
lastError = error instanceof Error ? error : new Error(String(error));
|
|
94
|
-
// If this is the last attempt, don't retry
|
|
95
|
-
if (attempt > maxRetries) {
|
|
96
|
-
break;
|
|
97
|
-
}
|
|
98
|
-
// Check if error is retryable
|
|
99
|
-
if (!isRetryableError(lastError)) {
|
|
100
|
-
// Non-retryable error - fail immediately
|
|
101
|
-
return {
|
|
102
|
-
success: false,
|
|
103
|
-
error: lastError,
|
|
104
|
-
attempts: attempt,
|
|
105
|
-
totalDelayMs: totalDelay
|
|
106
|
-
};
|
|
107
|
-
}
|
|
108
|
-
// Calculate delay
|
|
109
|
-
let delay = initialDelay * Math.pow(2, attempt - 1);
|
|
110
|
-
// Check for rate limit wait time
|
|
111
|
-
const rateLimitWait = extractRateLimitWaitTime(lastError);
|
|
112
|
-
if (rateLimitWait) {
|
|
113
|
-
delay = Math.min(rateLimitWait, maxDelay);
|
|
114
|
-
}
|
|
115
|
-
else {
|
|
116
|
-
delay = Math.min(delay, maxDelay);
|
|
117
|
-
}
|
|
118
|
-
totalDelay += delay;
|
|
119
|
-
// Wait before retry
|
|
120
|
-
await new Promise(resolve => setTimeout(resolve, delay));
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
return {
|
|
124
|
-
success: false,
|
|
125
|
-
error: lastError,
|
|
126
|
-
attempts: maxRetries + 1,
|
|
127
|
-
totalDelayMs: totalDelay
|
|
128
|
-
};
|
|
129
|
-
}
|
|
130
|
-
/**
|
|
131
|
-
* Create error message with retry information
|
|
132
|
-
*
|
|
133
|
-
* @param error - Original error
|
|
134
|
-
* @param attempts - Number of attempts made
|
|
135
|
-
* @returns Enhanced error message
|
|
136
|
-
*/
|
|
137
|
-
export function createRetryErrorMessage(error, attempts) {
|
|
138
|
-
return `${error.message} (failed after ${attempts} attempts)`;
|
|
139
|
-
}
|
|
140
|
-
/**
|
|
141
|
-
* Check if error is permanent (not worth retrying)
|
|
142
|
-
*
|
|
143
|
-
* @param error - Error to check
|
|
144
|
-
* @returns True if error is permanent
|
|
145
|
-
*/
|
|
146
|
-
export function isPermanentError(error) {
|
|
147
|
-
const message = error.message.toLowerCase();
|
|
148
|
-
// Authentication/Authorization errors
|
|
149
|
-
if (message.includes('401') ||
|
|
150
|
-
message.includes('403') ||
|
|
151
|
-
message.includes('unauthorized') ||
|
|
152
|
-
message.includes('forbidden')) {
|
|
153
|
-
return true;
|
|
154
|
-
}
|
|
155
|
-
// Not found errors
|
|
156
|
-
if (message.includes('404') || message.includes('not found')) {
|
|
157
|
-
return true;
|
|
158
|
-
}
|
|
159
|
-
// Bad request errors
|
|
160
|
-
if (message.includes('400') || message.includes('bad request')) {
|
|
161
|
-
return true;
|
|
162
|
-
}
|
|
163
|
-
return false;
|
|
164
|
-
}
|
|
165
|
-
//# sourceMappingURL=retry-logic.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"retry-logic.js","sourceRoot":"","sources":["../../../../src/core/sync/retry-logic.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Status Cache
|
|
3
|
-
*
|
|
4
|
-
* Caches external tool statuses to reduce API calls.
|
|
5
|
-
* Uses in-memory cache with TTL (default: 5 minutes).
|
|
6
|
-
*
|
|
7
|
-
* Performance Optimization:
|
|
8
|
-
* - Reduces redundant API calls
|
|
9
|
-
* - Improves sync speed
|
|
10
|
-
* - Respects rate limits
|
|
11
|
-
*
|
|
12
|
-
* @module status-cache
|
|
13
|
-
*/
|
|
14
|
-
export interface CacheEntry<T> {
|
|
15
|
-
value: T;
|
|
16
|
-
timestamp: number;
|
|
17
|
-
ttl: number;
|
|
18
|
-
}
|
|
19
|
-
export interface CacheOptions {
|
|
20
|
-
ttl?: number;
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* Status Cache
|
|
24
|
-
*
|
|
25
|
-
* Generic cache for external tool statuses.
|
|
26
|
-
*/
|
|
27
|
-
export declare class StatusCache<T = any> {
|
|
28
|
-
private cache;
|
|
29
|
-
private defaultTtl;
|
|
30
|
-
constructor(options?: CacheOptions);
|
|
31
|
-
/**
|
|
32
|
-
* Get value from cache
|
|
33
|
-
*
|
|
34
|
-
* @param key - Cache key
|
|
35
|
-
* @returns Cached value or undefined if not found/expired
|
|
36
|
-
*/
|
|
37
|
-
get(key: string): T | undefined;
|
|
38
|
-
/**
|
|
39
|
-
* Set value in cache
|
|
40
|
-
*
|
|
41
|
-
* @param key - Cache key
|
|
42
|
-
* @param value - Value to cache
|
|
43
|
-
* @param ttl - Optional TTL override (ms)
|
|
44
|
-
*/
|
|
45
|
-
set(key: string, value: T, ttl?: number): void;
|
|
46
|
-
/**
|
|
47
|
-
* Check if key exists and is not expired
|
|
48
|
-
*
|
|
49
|
-
* @param key - Cache key
|
|
50
|
-
* @returns True if key exists and is not expired
|
|
51
|
-
*/
|
|
52
|
-
has(key: string): boolean;
|
|
53
|
-
/**
|
|
54
|
-
* Delete key from cache
|
|
55
|
-
*
|
|
56
|
-
* @param key - Cache key
|
|
57
|
-
*/
|
|
58
|
-
delete(key: string): void;
|
|
59
|
-
/**
|
|
60
|
-
* Clear all cache entries
|
|
61
|
-
*/
|
|
62
|
-
clear(): void;
|
|
63
|
-
/**
|
|
64
|
-
* Get cache size
|
|
65
|
-
*
|
|
66
|
-
* @returns Number of entries in cache
|
|
67
|
-
*/
|
|
68
|
-
size(): number;
|
|
69
|
-
/**
|
|
70
|
-
* Clean up expired entries
|
|
71
|
-
*
|
|
72
|
-
* Removes all expired entries from cache.
|
|
73
|
-
*/
|
|
74
|
-
cleanup(): void;
|
|
75
|
-
/**
|
|
76
|
-
* Get cache statistics
|
|
77
|
-
*
|
|
78
|
-
* @returns Cache statistics (size, oldest entry age)
|
|
79
|
-
*/
|
|
80
|
-
getStats(): {
|
|
81
|
-
size: number;
|
|
82
|
-
oldestEntryAge: number | null;
|
|
83
|
-
};
|
|
84
|
-
}
|
|
85
|
-
/**
|
|
86
|
-
* Global status cache instance
|
|
87
|
-
*
|
|
88
|
-
* Used across all sync operations for maximum efficiency.
|
|
89
|
-
*/
|
|
90
|
-
export declare const globalStatusCache: StatusCache<any>;
|
|
91
|
-
//# sourceMappingURL=status-cache.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"status-cache.d.ts","sourceRoot":"","sources":["../../../../src/core/sync/status-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,MAAM,WAAW,UAAU,CAAC,CAAC;IAC3B,KAAK,EAAE,CAAC,CAAC;IACT,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,YAAY;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;;;GAIG;AACH,qBAAa,WAAW,CAAC,CAAC,GAAG,GAAG;IAC9B,OAAO,CAAC,KAAK,CAA6B;IAC1C,OAAO,CAAC,UAAU,CAAS;gBAEf,OAAO,CAAC,EAAE,YAAY;IAKlC;;;;;OAKG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IAoB/B;;;;;;OAMG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI;IAU9C;;;;;OAKG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIzB;;;;OAIG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAIzB;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;;;OAIG;IACH,IAAI,IAAI,MAAM;IAMd;;;;OAIG;IACH,OAAO,IAAI,IAAI;IAgBf;;;;OAIG;IACH,QAAQ,IAAI;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE;CAqB5D;AAED;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,kBAAoB,CAAC"}
|